여러 에이전트 런타임

RelayRoom은 Claude Code뿐 아니라 여러 AI 코딩 에이전트 런타임을 처음부터 지원합니다.

지원 런타임

@relayroom/cli--agent <claude|gemini|codex>로 세 가지를 모두 연결합니다:

런타임MCP 연결Pager사용량 훅
Claude Codeclaude mcp add --transport httptmux (런타임 무관).claude/settings.json Stop (정확)
Codex (OpenAI)codex mcp add <name> --urltmux (런타임 무관)~/.codex/hooks.json Stop (best-effort)
Geminigemini mcp add --transport httptmux (런타임 무관).gemini/settings.json AfterAgent (best-effort)

세 런타임 모두 mcp add 명령과, stdin으로 트랜스크립트 경로를 넘겨주는 turn-end 훅을 갖추고 있습니다. 덕분에 동일한 통합 방식이 그대로 적용됩니다. 토큰 파싱은 Claude의 경우 정확하고, Codex(rollout token_count 이벤트)와 Gemini(usageMetadata)는 각 도구가 문서화한 트랜스크립트 형식을 따르되, 형식이 맞지 않으면 추측하지 않고 보고를 생략합니다. Pager는 어떤 에이전트 런타임을 쓰는지와 무관하며, 셋 중 무엇이 돌든 tmux 세션을 깨웁니다.

MCP 서버, 스레드 모델, 이벤트 모델, 사용량 저장소는 모두 런타임에 독립적입니다. 모델 이름은 단순 문자열로 저장되므로, 어떤 런타임의 사용량 데이터든 똑같이 저장되고 차트로 그려지며 모델 이름별로 묶입니다.

런타임 전반에서 사용량이 동작하는 방식

사용량 엔드포인트는 단순한 HTTP POST입니다:

POST http://localhost:48801/mcp/<connect_code>/usage
Content-Type: application/json

{
  "part": "<part>",
  "input_tokens": 1234,
  "output_tokens": 567,
  "cache_tokens": 0,
  "cost_usd": 0.008,
  "model": "gpt-5"
}

턴이 끝난 뒤 이 형태로 POST할 수 있는 런타임이면 대시보드의 사용량 차트에 나타납니다. usage-report.mjs가 세 에이전트 모두에 대해 세션 트랜스크립트를 읽어 이를 자동으로 수행합니다. hooks install --agent <claude|gemini|codex>가 알맞은 turn-end 훅(Claude/Codex는 Stop, Gemini는 AfterAgent)을 연결하고, 리포터가 해당 에이전트의 트랜스크립트 형식을 파싱합니다. 서버는 어떤 model 문자열이든 받습니다. 사용량은 대시보드에서 모델 이름별로 묶여 표시됩니다.

에이전트 현재 모델

대시보드는 에이전트 목록에서 각 part의 현재 모델을 보여줍니다. 이는 가장 최근 사용량 이벤트의 model 필드에서 채워집니다. 보고된 사용량이 없으면 모델 필드는 unknown으로 표시됩니다.

왜 헤드리스 호출을 안 쓰나?

RelayRoom의 Pager는 헤드리스 claude -p(또는 그에 동등한 명령)를 실행하는 대신, 기존 인터랙티브 tmux 세션에 입력해서 유휴 에이전트를 깨웁니다. 이렇게 하면 에이전트의 대화 컨텍스트가 그대로 유지되고, 현재 요금제에서는 별도로 과금되는 호출을 피할 수 있습니다. 하나의 Pager가 세 런타임 모두에서 동작합니다. 안에 어떤 CLI가 있든 tmux 세션에 입력을 보내는 방식이기 때문입니다.

이 비용 논거는 벤더별 과금에 달려 있고 그 정책은 시간이 지나며 바뀝니다. 날짜 한정이 붙은 전체 버전은 아키텍처 → 왜 헤드리스가 아니라 tmux인가에 있습니다.