컴퓨터
기기 하나가 컴퓨터 한 대예요. linux·chrome·android·windows 를 API 로 클라우드에 띄우고, 멈춰도 스토리지는 남아요.
POST /stations/{id}/devicesOS for AI Agentsv0.2.0 프리뷰
endue OS
LIVE DEMO
Dock 에서 기기를 열고, Chrome 으로 검색하고, Linux 에서 python3 를 돌려 보세요. 실제 기기 대신 예시 데이터로 움직여요.
전체 화면으로 열기 ↗체험판은 브라우저 안에서만 돌아요 — 새로고침하면 처음 상태로 돌아가요.
01 WHY
생각하는 건 모델이 해요. 하지만 파일을 쓰고, 프로그램을 돌리고, 화면을 보고, 앱을 여는 건 진짜 기기여야 하죠. endue OS 는 그 기기들을 에이전트가 API 로 다룰 수 있는 하나의 OS 로 만들어요.
기기 하나가 컴퓨터 한 대예요. linux·chrome·android·windows 를 API 로 클라우드에 띄우고, 멈춰도 스토리지는 남아요.
POST /stations/{id}/devices에이전트가 알려 준 도구를 명령으로 실행해요. 파일·프로그램·탭·앱 열기까지. 25초를 넘기면 202 로 넘겨요.
POST /devices/{id}/commands화면 한 장과 설치된 앱 목록을 받아요. 여럿이 같은 기기를 봐도 기기에는 한 번만 물어요.
GET /devices/{id}/screen셸 없는 허용 목록 실행, 확인이 필요한 도구 표시, 권한이 좁은 API 키, OS halt 한 번에 전부 정지.
POST /stations/{id}/os/halt02 AGENT LOOP
AI 에이전트가 하는 일은 REST 호출 몇 번이에요. 컴퓨터를 띄우고, 도구를 실행시키고, 화면으로 확인해요. Claude Code 같은 코딩 에이전트든 직접 만든 에이전트 루프든, HTTP 를 부를 수 있으면 돼요.
you리눅스에서 데이터를 정리하고, 결과 페이지를 브라우저로 확인해 줘
→POST/stations/stn_8f2…/devices{"type":"virtual","kind":"linux"}201starting
←EVENTdevice.status_changedres_01J…running
→POST/devices/res_01J…/commandswrite_file clean.py20138 ms
→POST/devices/res_01J…/commandsrun_program python32011.2 s
→POST/devices/res_02K…/commandsnavigate report.html201412 ms
→GET/devices/res_02K…/screenimage/png 1280×720200
끝났어요 — 정리한 표 3개, 확인한 화면 1장
03 ARCHITECTURE
Station 에는 OS 가 하나, OS 에는 Dock 이 하나. 클라우드에 만든 기기와 내 기기가 모두 같은 기기(Device)로 다뤄져요.
클라우드에 만들기 — virtual
내 기기에 설치 — actual
DOCK 1단 기기 · 2단 그 기기의 앱
어느 기기에서 → 어떤 앱. 사람도 AI 에이전트도 같은 순서로 생각해요.
04 DESKTOP
같은 API 로 그린 데스크톱이에요. 위의 체험판에서 찍은 화면이라 데이터는 예시예요.






05 PLATFORM
공개 REST 오퍼레이션 266개. 화면에서 할 수 있는 일은 API 로도 할 수 있어요.
virtual 기기를 만들면 공급자가 VM·스토리지를 띄우고 에이전트를 넣어요. linux·chrome 은 Fly.io, windows·android 는 AWS — 클라우드 연결은 프리뷰.
Mac·Linux·Windows·Chrome·Android 에 에이전트를 설치하면 actual 기기가 돼요. 바깥으로 먼저 접속해 공인 주소가 필요 없어요.
wait_ms 안에 끝나면 201, 아니면 202. 롱폴·이벤트·웹훅으로 끝을 알고, 끊겨도 작업은 계속돼요.
스크린샷을 캐시와 single-flight 로 나눠요. 비용은 보는 화면 수에 비례해요.
SSE·WebSocket·서명된 웹훅. 두 길의 seq 가 같아 맞춰 볼 수 있어요.
1단은 기기, 누르면 2단에 그 기기의 앱. 자주 쓰는 앱은 1단에도 고정해요. 클라우드 android 와 내 폰이 같은 방식.
서버·CI 용 osk_ 키. 비용을 만드는 일(클라우드 기기 만들기·지우기)은 사용자 로그인만.
가만히 있는 에이전트에게 알람·DB 쓰기·내부 호출을 하지 않아요. 비용은 명령 수에 비례해요.
명령·컴퓨트·스토리지를 내 계정의 크레딧으로 써요. 잔액이 없으면 402 로 알려요. 결제는 아직 테스트만 돼요.
06 ENDUE FAMILY
endue AI 는 스스로 일하는 AI 에이전트를 만들고, endue OS 는 그 에이전트가 쓸 기기·컴퓨트·리소스를 OS 로 제공해요. 같은 계정을 써요.
endue 셀의 신원 공급자(Keycloak) 토큰을 그대로 받아요. endue AI 계정으로 로그인하고, 같은 JWT 로 API 를 불러요.
사용자 JWT · Station API 키chrome·android·linux 에이전트는 endue AI 의 endue for Chrome · endue for Android · endue Computer 에서 왔어요. 프로토콜도 같은 규약에 더하기만 했어요.
에이전트 5종 · 프로토콜 v1.1endue AI 가 Workspace의 앱 도구를 쓰고, OpenCode·Claude Code·OpenClaw·Hermes에 일을 맡겨 결과를 받아요. 외부 에이전트도 MCP와 TypeScript SDK로 같은 API를 사용할 수 있어요.
dev 프리뷰 · 연동 가이드07 EXTEND
기능을 서버에 하드코딩하지 않아요. 계약 세 개만 지키면 기기도, 도구도, 컴퓨트도 바꿔 끼울 수 있어요.
protocol v1.1WebSocket 위 JSON 프레임 몇 개(ready · tool_request · tool_response · ping)만 구현하면 어떤 기기든 리소스가 돼요.
내 에이전트 붙이기/v1/machines클라우드 기기의 컴퓨트는 kind 별 공급자 어댑터 뒤에 있어요. linux·chrome 은 Fly Machines, windows·android 는 AWS EC2(Graviton + Redroid), 로컬은 Docker. 클라우드는 프리뷰
공급자 계약08 API
사람이 누르든, CI 가 부르든, AI 에이전트가 부르든 같은 API 예요.
{ data, meta }, 오류는 { error: { code } }request_id 로 멱등 — 24시간 안 재시도는 같은 명령# 1. 에이전트에게 줄 리눅스 한 대 curl -s -X POST $OS/api/v1/stations/$STN/devices \ -H "Authorization: Bearer $TOKEN" \ -d '{"type":"virtual","name":"box","kind":"linux","size":"small"}' # 2. running 이 되면, 그 안에서 실행 curl -s -X POST $OS/api/v1/devices/$DEV/commands \ -H "Authorization: Bearer $TOKEN" \ -d '{"command":"run_program", "input":{"program":"python3","args":["-c","print(6*7)"]}}' # → 201 {"data":{"status":"succeeded","output":{"stdout":"42\n"}}}
const api = (m, p, b) => fetch(`${OS}/api/v1${p}`, { method: m, body: b && JSON.stringify(b), headers: { Authorization: `Bearer ${TOKEN}`, 'Content-Type': 'application/json' }, }).then((r) => r.json()); const { data: { device } } = await api('POST', `/stations/${stn}/devices`, { type: 'virtual', name: 'web', kind: 'chrome' }); // … device.compute_status === 'running' 이고 online 이 되면 await api('POST', `/devices/${device.device_id}/commands`, { command: 'navigate', input: { url: 'https://example.com' }, }); const png = await fetch(`${OS}/api/v1/devices/${device.device_id}/screen`, { headers });
# Claude Code 같은 AI 코딩 에이전트에 그대로
endue OS 공개 REST API 로 클라우드 Chrome 을 띄워
https://example.com 의 스크린샷을 찍는 Node 스크립트를 만들어 줘.
- POST /api/v1/stations/{id}/devices {type:"virtual", name, kind:"chrome"}
- GET /api/v1/devices/{id} 를 compute_status running·online 까지 폴링
- POST /api/v1/devices/{id}/commands
{command:"navigate", input:{url}}
- GET /api/v1/devices/{id}/screen → 이미지 저장
- 402 INSUFFICIENT_CREDITS 면 크레딧이 없다고 알려 줘
- 끝나면 기기를 멈추고 지워.OS FOR AI AGENTS
endue 계정 하나로 시작해요. 지금은 로컬 스택에서 전부 돌려 볼 수 있어요.