하나의 바이너리가 백본입니다
띄워야 할 클러스터는 없습니다. 릴레이, 웹 콘솔, 에이전트는 하나의 서명된 바이너리입니다 — 그것을 시작하면 전체 플레인이 올라옵니다. 에이전트는 gRPC를 말하고, 클라이언트는 HTTP와 WebSocket을 말하며, 모든 것이 플릿 범위로 한정되고 감사됩니다.
HTTP클라이언트를 향한 표면 — 인증, 프레즌스, 머신과 플릿 읽기, 그리고 내장 웹 콘솔까지, 모두 하나의 바이너리가 제공합니다.
gRPC에이전트 전송. 머신이 다이얼 아웃하고 양방향 스트림을 유지합니다 — 터미널, 실행, 파일 작업이 여기로 흐릅니다, 루프백에서도.
WebSocketHTTP 위의 푸시 채널. 라이브 출력, 프레즌스, 이벤트를 연결된 클라이언트에 스트리밍합니다 — 데스크톱과 모든 브라우저로.
tunnels인터넷에 포트를 열지 않고 머신 뒤의 서비스에 닿으세요 — 머신이 다이얼 아웃하고, 릴레이가 그것을 되돌려 라우팅합니다.
scheduler내구성 있는 스케줄, 지연 작업, 정리 작업이 바이너리 안에서 실행됩니다 — 별도의 워커 프로세스도, 운영할 큐도 없습니다.
orchestrator플릿 코디네이터(Jarvis)는 릴레이에 가상 머신으로 합류하여 플릿을 조율하는 인프로세스 goroutine으로 실행됩니다.
gRPC 계약은 proto/agentv1 (cmdop.agent.v1)에 있으며 단일 진실의 출처입니다 — Go 에이전트 스텁은 그것에서 생성됩니다.
릴레이를내부에서 보세요
아래의 모든 스크린샷은 실제 cmdop server 관리 콘솔입니다 — 릴레이를 직접 셀프 호스팅할 때 얻는 오퍼레이터 표면입니다.
에이전트가 다이얼 아웃합니다.인바운드 포트 없음.
모든 머신은 릴레이로의 아웃바운드 gRPC 스트림을 열고 그것을 통해 닿을 수 있는 상태를 유지합니다 — 노출할 리스닝 포트도, 방화벽 구멍도, 돌볼 NAT 트래버설도 없습니다. 릴레이는 에이전트와 클라이언트 사이의 메시지를 라우팅하고, 머신은 결코 인바운드 연결을 수락하지 않습니다.
고객별로격리된
모든 계정은 오직 당신의 플릿만을 위해 프로비저닝된 자체 relay 도메인을 받습니다 — 다른 어떤 고객도 공유하지 않는 TLS 종료와 라우팅입니다. 프레즌스, 감사, 히스토리는 당신의 플릿 안에 머물며, 어떤 것도 테넌트 경계를 넘어 라우팅되지 않습니다.
코디네이터릴레이 안에 사는
Jarvis는 가상 머신 피어로 릴레이에 합류하는 서버 측 AI 에이전트입니다. 플릿 범위로 한정되고 항상 켜져 있어, 다른 에이전트에 닿을 수 있고 — 하나에게 묻거나 여럿에게 브로드캐스트하며 — 당신의 머신에서 아무것도 실행하지 않고 플릿 전반의 작업을 조율합니다.
OpenAI 호환게이트웨이 /v1
릴레이는 /v1에서 추론을 노출합니다 — 채팅 완성, 임베딩, 모델 — OpenAI 와이어 포맷을 말합니다. 서버가 제공자 키를 보유하고 spend와 쿼터와 함께 플릿별로 라우팅하므로, 에이전트는 벤더 자격증명 더미 대신 하나의 베어러 인증 엔드포인트를 얻습니다.
릴레이를 직접 실행하세요
릴레이는 별도로 배포할 서비스가 아닙니다 — 어디에나 설치하는 바로 그 서명된 바이너리입니다. cmdop을 설치하고, `cmdop server`를 실행하고, 머신을 그것에 가리키세요. 명령 하나가 릴레이, 웹 콘솔, 코디네이터를 함께 올립니다.
클러스터도, compose 파일도 없습니다: `cmdop server`는 HTTP (:63141)와 gRPC (:63142)를 제공하고 코디네이터를 인프로세스 goroutine으로 실행하는 단일 프로세스입니다. TLS와 안정적인 주소를 원할 때는 당신만의 리버스 프록시를 앞에 두세요.





