Overview
Token and cost figures are only reachable from the interactive TUI (pkg/tui/dialog/cost.go) and
from OpenTelemetry. There is no CLI command for them: nothing in cmd/root/ reports usage.
That leaves every non-interactive path blind:
docker agent run --exec in CI — no way to answer "what did that cost?"
- the API server and MCP/A2A modes — same
- retrospective questions of any kind ("what did we spend last week?", "which agent is expensive?")
It also makes the existing budget feature hard to configure. BudgetConfig caps spend with
max_cost / max_tokens / max_time, but there is no way to see actual historical spend, so the
cap has to be guessed at.
Motivation
This is an aggregation and presentation gap, not a data gap:
| Data |
Where |
| per-message token usage |
chat.Message.Usage (pkg/chat/chat.go:86), persisted with session items |
| model per message |
chat.Message.Model (pkg/chat/chat.go:89) |
| non-message spend (compaction) |
session.Item.Cost / .Usage / .Model (pkg/session/session.go:127-138) |
| cumulative session cost |
session.Session.Cost (pkg/session/session.go:318) |
| tool calls |
chat.Message.ToolCalls |
No schema change is needed for a first version.
Use cases
No response
Proposed solution
docker agent usage — read the session store and report what was spent.
$ docker agent usage --since 24h
SESSION CREATED INPUT CACHED OUTPUT COST TITLE
a1b2c3d4 2026-08-06 12:04 128.4K 96.2K 4.1K $0.42 fix the failing cache test
…
3 session(s) 412.7K 310.1K 11.9K $1.28
MODEL CALLS INPUT CACHED OUTPUT
anthropic/claude-opus-5 41 380.2K 295.0K 10.4K
TOOL CALLS
read_file 58
shell 21
--json for CI use, so it can drive a budget check
--session <id> for one session, --since <dur> for a window
- a per-tool breakdown, which does not exist anywhere today and is usually where the cost
actually goes
Alternatives
No response
Related issues
No response
Additional context
A model missing from the pricing catalogue records $0 against real token usage — the runtime logs
Model is missing from the pricing catalogue; recording $0 cost despite token usage, and it happens
routinely (every test/* model in the test suite hits it).
A report that silently shows $0.00 for those is worse than no report. Sessions that moved tokens
but recorded no cost must be flagged, and the total marked as a lower bound.
Scope note
Cost is persisted per session and per non-message item, never per message, so per-model cost
cannot be attributed within a session without a schema change. Tokens can. A first version should
report tokens per model and cost per session, and say so plainly rather than inventing an
attribution.
Overview
Token and cost figures are only reachable from the interactive TUI (
pkg/tui/dialog/cost.go) andfrom OpenTelemetry. There is no CLI command for them: nothing in
cmd/root/reports usage.That leaves every non-interactive path blind:
docker agent run --execin CI — no way to answer "what did that cost?"It also makes the existing budget feature hard to configure.
BudgetConfigcaps spend withmax_cost/max_tokens/max_time, but there is no way to see actual historical spend, so thecap has to be guessed at.
Motivation
This is an aggregation and presentation gap, not a data gap:
chat.Message.Usage(pkg/chat/chat.go:86), persisted with session itemschat.Message.Model(pkg/chat/chat.go:89)session.Item.Cost/.Usage/.Model(pkg/session/session.go:127-138)session.Session.Cost(pkg/session/session.go:318)chat.Message.ToolCallsNo schema change is needed for a first version.
Use cases
No response
Proposed solution
docker agent usage— read the session store and report what was spent.--jsonfor CI use, so it can drive a budget check--session <id>for one session,--since <dur>for a windowactually goes
Alternatives
No response
Related issues
No response
Additional context
A model missing from the pricing catalogue records
$0against real token usage — the runtime logsModel is missing from the pricing catalogue; recording $0 cost despite token usage, and it happensroutinely (every
test/*model in the test suite hits it).A report that silently shows
$0.00for those is worse than no report. Sessions that moved tokensbut recorded no cost must be flagged, and the total marked as a lower bound.
Scope note
Cost is persisted per session and per non-message item, never per message, so per-model cost
cannot be attributed within a session without a schema change. Tokens can. A first version should
report tokens per model and cost per session, and say so plainly rather than inventing an
attribution.