비용의 SoT는 하나입니다. LLM 호출마다 한 줄씩 쌓이는 append-only ledger ~/.geode/usage/YYYY-MM.jsonl(core/llm/usage_store.py)입니다. /cost와 geode history는 이 파일을 다르게 집계해 보여주는 두 화면입니다.
ledger 스키마
한 줄은 UsageRecord입니다. 모델, 입출력 토큰, 비용에 더해 캐시와 thinking 분해가 들어갑니다.
# ~/.geode/usage/2026-06.jsonl 한 줄 (falsy 필드는 생략됨)
{"ts": 1780000000.0, "model": "claude-opus-4-8",
"in": 1284, "out": 482, "cost": 0.0127,
"session": "s-...", "cache_w": 0, "cache_r": 28104, "think": 1872}기록 주체는 둘입니다. 일반 실행은 AgenticLoop 경계의 TokenTracker가 호출마다 적습니다. Petri 감사는 inspect_ai가 프로바이더를 직접 호출해 GEODE의 tracker를 우회하므로, 감사 종료 후 core/audit/eval_to_jsonl.py가 (model, role) 단위로 source: "petri_eval" 행을 보태 judge와 auditor 비용까지 ledger에 합류시킵니다. 단가는 core/llm/model_pricing.toml이 SoT입니다.
/cost: 세션 대시보드
> /cost # 세션 + 월간 요약 > /cost daily # 오늘 분해 > /cost recent # 최근 LLM 호출 10건 > /cost budget 30 # 월 예산 상한 (USD)
/cost budget은 프로젝트의 .geode/config.toml에 저장되고, 이후 대시보드에 예산 대비 사용률 바가 함께 표시됩니다 (core/cli/commands/cost.py).
geode history: 월간 회계
geode history # 이번 달, 최근 10건 geode history -n 30 # 최근 30건 geode history -m 2026-05 # 지난달 집계
모델별 토큰과 비용 테이블, 최근 호출 목록을 출력합니다 (core/cli/typer_commands.py).
예산이 실행을 멈추는 지점
cost_limit_usd 설정(기본 0 = 무제한)이 세션 비용 가드를 켭니다. 세션 누적 비용이 80%에 닿으면 한 번 경고하고, 예산에 도달하면 실행이 cost_budget_exceeded로 끝납니다. 동작 방식은 장기 실행 안전의 가드 표에 있습니다. 비용을 줄이는 가장 빠른 손잡이는 모델입니다. /model로 더 싼 모델로 전환하면 새 세션부터 적용됩니다.
ledger 직접 집계
# 이번 달 총비용
jq -s '[.[].cost] | add' ~/.geode/usage/$(date +%Y-%m).jsonl
# 모델별 비용
jq -s 'group_by(.model) | map({m: .[0].model, c: (map(.cost) | add)})' \
~/.geode/usage/$(date +%Y-%m).jsonl
# Petri 감사 비용만
jq -c 'select(.source == "petri_eval")' ~/.geode/usage/$(date +%Y-%m).jsonl실패 모드
| 증상 | 원인 | 해법 |
|---|---|---|
| 비용이 0으로만 보임 | 구독 OAuth와 CLI 레인은 토큰당 과금이 아님 | 정상입니다. PAYG 키 경로만 달러 비용이 쌓입니다. 사용량 자체는 토큰 칼럼으로 봅니다. |
| 감사 비용이 history에 안 보임 | petri_eval 추출 전이거나 다른 달 파일 | geode history -m으로 해당 월을 보고, source 필드로 필터합니다. |
| 예산 경고가 안 뜸 | cost_limit_usd가 0 | 0은 무제한입니다. 양수로 설정해야 80% 경고와 종료 가드가 켜집니다. |