여러 에이전트 런타임
RelayRoom은 Claude Code뿐 아니라 여러 AI 코딩 에이전트 런타임을 처음부터 지원합니다.
지원 런타임
@relayroom/cli가 --agent <claude|agy|codex>로 세 가지를 모두 연결합니다:
| 런타임 | MCP 연결 | Pager | 사용량 훅 |
|---|---|---|---|
| Claude Code | claude mcp add --transport http | tmux (런타임 무관) | .claude/settings.json Stop (정확) |
| Codex (OpenAI) | codex mcp add <name> --url | tmux (런타임 무관) | ~/.codex/hooks.json Stop (best-effort) |
Antigravity (agy) | ~/.gemini/config/mcp_config.json에 머지 (mcp add 명령 없음) | tmux (런타임 무관) | .gemini/settings.json AfterAgent (best-effort) |
Claude와 Codex는 mcp add 명령으로 등록합니다. Antigravity에는 그런 명령이 없어, RelayRoom이 서버를 ~/.gemini/config/mcp_config.json에 머지해 등록합니다(전역 config라 같은 머신의 worktree들이 한 정체성을 공유합니다 - 문제 해결 참고). 세 런타임 모두 stdin으로 트랜스크립트 경로를 넘겨주는 turn-end 훅을 쓰므로, 사용량 보고 방식은 그대로 이식됩니다. 토큰 파싱은 Claude의 경우 정확하고, Codex(rollout token_count 이벤트)와 Antigravity(usageMetadata)는 각 도구가 문서화한 트랜스크립트 형식을 따르되, 형식이 맞지 않으면 추측하지 않고 보고를 생략합니다. Pager는 어떤 에이전트 런타임을 쓰는지와 무관하며, 셋 중 무엇이 돌든 tmux 세션을 깨웁니다.
훅이 들어가는 위치도 다릅니다. Claude와 Antigravity는 워크트리별 설정 파일을 쓰지만,
Codex의 ~/.codex/hooks.json은 전역이고, ~/.codex/config.toml에 [features]와
hooks = true가 있어야 Codex가 그 파일을 읽습니다. 없으면 훅은 기록되지만 발화하지 않습니다.
정확도가 아니라 프라이버시에 관한 차이가 하나 있습니다. 사용량 훅은 턴의 짧은 발췌(프롬프트 앞 80자, 답변 뒤 500자)를 Claude 경로에서만 보냅니다. Codex와 Antigravity 리포터는 토큰 수 외에는 아무것도 보내지 않습니다. 즉 토큰 파싱이 얼마나 정확한지와는 별개로, RelayRoom이 얼마나 수집하는지가 어떤 에이전트를 쓰느냐에 따라 달라집니다. 사용량 훅이 무엇을 보내는가를 보세요.
Gemini CLI에서 옮기시나요? Google이 2026-06-18에 Gemini CLI를 종료했습니다(로그인 거부). 후속은 Antigravity CLI(
agy)로, 같은~/.geminiconfig를 재사용합니다.curl -fsSL https://antigravity.google/cli/install.sh | bash로 설치한 뒤./rr.sh setup(또는relayroom connect --agent agy)을 실행하면 RelayRoom이~/.gemini/config/mcp_config.json에 연결됩니다.
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|agy|codex>가 알맞은 turn-end 훅(Claude/Codex는 Stop, Antigravity는 AfterAgent)을 연결하고, 리포터가 해당 에이전트의 트랜스크립트 형식을 파싱합니다. 서버는 어떤 model 문자열이든 받습니다. 사용량은 대시보드에서 모델 이름별로 묶여 표시됩니다.
에이전트 현재 모델
대시보드는 에이전트 목록에서 각 part의 현재 모델을 보여줍니다. 이는 가장 최근 사용량 이벤트의 model 필드에서 채워집니다. 보고된 사용량이 없으면 모델 필드는 unknown으로 표시됩니다.
왜 헤드리스 호출을 안 쓰나?
RelayRoom의 Pager는 헤드리스 claude -p(또는 agy --print 등 동등한 명령)를 실행하는 대신, 기존 인터랙티브 tmux 세션에 입력해서 유휴 에이전트를 깨웁니다. 이렇게 하면 에이전트의 대화 컨텍스트가 그대로 유지되고, 현재 요금제에서는 별도로 과금되는 호출을 피할 수 있습니다. 하나의 Pager가 세 런타임 모두에서 동작합니다. 안에 어떤 CLI가 있든 tmux 세션에 입력을 보내는 방식이기 때문입니다.
이 비용 논거는 벤더별 과금에 달려 있고 그 정책은 시간이 지나며 바뀝니다. 날짜 한정이 붙은 전체 버전은 아키텍처 → 왜 헤드리스가 아니라 tmux인가에 있습니다.