diff --git a/docs/project/ROADMAP.md b/docs/project/ROADMAP.md
index 20256d2..281bfc8 100644
--- a/docs/project/ROADMAP.md
+++ b/docs/project/ROADMAP.md
@@ -6,6 +6,14 @@ Directional roadmap for AgentMonitor. This is a planning snapshot, not a release
Concise record of shipped work that has left `BACKLOG.md`. Newest first.
+- Cache-inclusive unknown-pricing visibility (2026-08-04) — *What:* Top Models now
+ offers an All tokens view that includes input, output, cache-read, and cache-write
+ traffic; model tables use the same total. The Usage page persistently identifies
+ pricing-incomplete models, their cache-inclusive observed tokens, and their event count
+ without fabricating a cost. The warning stays visible when a formerly unknown model
+ receives pricing but its historical $0 rows still need `amon costs recalc`. *Why:* a
+ cache-heavy new model can otherwise vanish from the default Cost view before or after
+ its pricing record arrives.
- Configurable Claude history root (2026-07-29) — *What:*
`AGENTMONITOR_CLAUDE_DIR` now supplies one Claude data root to startup sync,
live and periodic watcher discovery, automatic and historical event import,
diff --git a/docs/system/FEATURES.md b/docs/system/FEATURES.md
index f1eb773..1168173 100644
--- a/docs/system/FEATURES.md
+++ b/docs/system/FEATURES.md
@@ -143,6 +143,7 @@ Product-surface reference for AgentMonitor.
- Summary totals, daily series, project/model/tier/agent attribution, and top-session views all use cost/token-bearing event rows as their source of truth.
- Codex aggregate usage reconciles overlapping telemetry sources: when a Codex session has imported JSONL usage and OTEL usage rows, imported usage is treated as authoritative and overlapping OTEL usage rows are ignored for rollups. Raw events remain queryable in monitor/session history.
- Usage models are classified at query time into canonical model, provider, family, tier, lifecycle, and pricing-status fields. Unknown and deprecated models remain visible in responses.
+- The Usage page’s Top Models **All tokens** view includes input, output, cache-read, and cache-write traffic. A persistent pricing warning names affected models and their observed token volume when pricing is unknown or known pricing has not yet been applied to historical zero-cost rows; it keeps cost totals explicitly non-estimated and directs the operator to `amon costs recalc` for the latter state.
- Usage endpoints accept optional `model`, `provider`, and `tier` filters in addition to date, project, and agent filters. Classification filters are applied consistently before summary, daily, attribution, tier, agent, and top-session panels aggregate.
- Usage summary includes `prior_total_cost_usd` and `cost_delta_pct` for the immediately preceding same-length date range when a valid current range is supplied.
- Usage budget reports live at `/api/v2/usage/budgets`. They read an optional local JSON config, reuse usage filters to compute current spend, and return alert states without blocking or enforcing agent activity.
diff --git a/frontend/src/lib/components/usage/UsageBreakdownTable.svelte b/frontend/src/lib/components/usage/UsageBreakdownTable.svelte
index b10c7a9..b75d3bc 100644
--- a/frontend/src/lib/components/usage/UsageBreakdownTable.svelte
+++ b/frontend/src/lib/components/usage/UsageBreakdownTable.svelte
@@ -36,6 +36,11 @@
return base;
}
+ function tokenTotal(row: UsageProjectBreakdown | UsageModelBreakdown | UsageTierBreakdown | UsageAgentBreakdown): number {
+ const base = row.input_tokens + row.output_tokens;
+ return kind === 'model' ? base + row.cache_read_tokens + row.cache_write_tokens : base;
+ }
+
function handleSelect(row: UsageProjectBreakdown | UsageModelBreakdown | UsageTierBreakdown | UsageAgentBreakdown): void {
if (kind === 'project' && 'project' in row) {
void usage.setProject(row.project === 'unknown' ? '' : row.project);
@@ -90,7 +95,7 @@
- Model mix by day. Click a day to drill the page into it.
+ Model mix by day. All tokens include cache reads and writes. Click a day to drill the page into it.