지원 도구
taco는 각 AI 코딩 도구가 로컬에 남기는 기록을 읽어 사용량 이벤트로 변환합니다. 도구별로 소스 위치와 수집 방식이 다릅니다.
지원 목록
| 도구 | 소스 경로 | 형식 | git 귀속(레포·브랜치·티켓) |
|---|---|---|---|
| Claude Code | ~/.claude/projects/**/*.jsonl (재귀 탐색) | JSONL (assistant 메시지의 usage) | ✅ 레포·브랜치·티켓 |
| Claude Desktop | ~/Library/Application Support/Claude/local-agent-mode-sessions/ (mac) · %APPDATA%\Claude\… (win) · ~/.config/Claude/… (linux) | JSONL | ❌ (샌드박스 경로 + 브랜치가 HEAD로 남아 귀속 불가) |
| Codex | ~/.codex/sessions/YYYY/MM/DD/rollout-*.jsonl ($CODEX_HOME 우선) | JSONL | 🔶 레포만 (기록에 브랜치가 없어 브랜치·티켓 귀속 안 됨) |
| Cursor | state.vscdb (cursorDiskKV) | SQLite | ❌ (레포·브랜치·cwd 미기록) |
| Gemini CLI | ~/.gemini/tmp/*/chats/session-*.json[l] | JSON/JSONL | ❌ |
| Antigravity | ~/.gemini/antigravity*/conversations/*.db | SQLite | ❌ |
각 이벤트에서 입력/출력/캐시 토큰, 모델, 세션을 뽑고(도구가 기록을 남기는 범위에서 작업 경로(cwd)·git 브랜치·레포까지 — 위 표 참고), 서버가 모델 단가를 적용해 비용을 계산합니다. 티켓 귀속은 레포·브랜치 정보에서 파생되므로, git 귀속이 없는 도구의 사용량은 레포·브랜치·티켓별 뷰에 잡히지 않습니다.
수집 방식
- Claude Code·Codex는 플러그인 hook이 이벤트마다 자동 수집합니다. 플러그인은
taco plugins(설치 스크립트가 자동 실행)로 설치됩니다. - Claude Desktop·Cursor·Gemini CLI·Antigravity는 hook이 없어 스스로 수집을 트리거하지 못합니다. 대신
taco hook(Claude Code 플러그인)이 돌 때, 그리고taco collect --provider <x>로 특정 도구만 수집할 때(=Codex 플러그인이 부르는 경로) 사이드카 스캔으로 함께 수집됩니다. 즉 Claude Code든 Codex든 플러그인이 하나라도 깔려 있으면 이 도구들도 자동으로 모입니다. taco collect(--provider없이)는 원래 모든 provider를 스캔하므로 사이드카가 필요 없습니다. hook이 하나도 없는 상태에서 위 도구들만 쓴다면taco collect를 직접(주기적으로) 실행해야 합니다. 별도 로그인/연동은 필요 없고, 파일이 있으면 읽습니다.- 사이드카 스캔에는 에디터를 붙잡지 않기 위한 제약이 있습니다 — 5분 throttle(그 안에 다시 불려도 건너뜀), 한 번에 5초 예산(초과하면 중단하고 남은 분량은 watermark로 다음 실행에 이어감), 그리고
TACO_NO_SIDESCAN(값이 있으면 끔) 킬스위치. 그래서 대량 backlog는 여러 번에 걸쳐 나눠 들어옵니다. - 각 파일은 watermark(마지막으로 읽은 위치)를 기록해, 새로 추가된 부분만 증분 수집합니다. 처음부터 다시 읽으려면
taco collect --full.
특정 도구만 수집하려면:
taco collect --provider claude_code --provider codex
값은 위 표의 provider 이름(claude_code·claude_desktop·codex·cursor·gemini·antigravity)입니다. 오타는 에러로 막히고 유효값을 알려줍니다 — 예를 들어 --provider claude는 무효이고 claude_code가 정답입니다.
필터 적용
수집된 이벤트는 설정의 allowed_orgs·allowed_dirs 필터를 통과해야 적재됩니다.
- git remote가 있는 이벤트는 org 필터를 받습니다. 기본값은
[](제한 없음)입니다. allowed_dirs가 설정되면 그 하위 경로의 작업만 수집됩니다. 작업 경로(cwd)를 기록에 남기지 않는 도구(Cursor·Gemini CLI·Antigravity)는 이 경우 전량 제외됩니다 — 비교할 경로가 없어 통과할 방법이 없기 때문입니다.taco collect가 제외 건수와 그중 cwd 없는 건수를 따로 알려주므로 "왜 0건이지?"를 바로 알 수 있습니다. 이 도구들도 수집하려면taco config set allowed_dirs ""로 경로 제한을 해제하세요.
로컬 대화 열람
로컬 대시보드(taco dashboard)에서는 세션의 대화 원문(프롬프트·응답·툴 호출)까지 열람할 수 있으며, 모든 provider(claude_code/claude_desktop/codex/cursor/gemini/antigravity)를 지원합니다. 단 Antigravity는 conversations/*.db(SQLite)만 열람되고, implicit/*.pb(protobuf) 형식의 세션은 아직 빠집니다. MCP의 taco_session·taco_search도 이 로컬 대화를 읽습니다.
비용 산정
- 모델 단가는 LiteLLM 피드를 동기화해서 씁니다. 서버는 자동 동기화 + 과거 이벤트 소급 반영.
- 로컬 단가표는 캐시가 만료되면 자동으로 갱신됩니다 —
stats·statusline·mcp는 24시간,dashboard는 7일 기준이며, 갱신 실패는 조용히 무시됩니다.taco pricing sync는 지금 당장 갱신하고 싶을 때만 쓰면 됩니다. - 네트워크가 없어도 바이너리에 내장된 단가표 스냅샷으로 계산되므로 오프라인에서도 비용이 나옵니다(그만큼 최신 모델은 빠질 수 있습니다).
- 단가가 아직 없는 모델은 비용 0으로 적재되고, 이후 단가가 채워지면 소급 계산됩니다.