Repository navigation
Everything in the dashboard can now be read in tokens instead of dollars, and
a device that stops reporting can no longer hide behind one that hasn't.
Display as: dollars or tokens
A switch above the totals — and again in the sticky bar once they scroll away —
measures the whole page either way. It is not a relabelling: the chart's bars,
axis and cumulative curve, the coverage strip's quartile shading, the billing
windows, and the model, device, agent and project lists all recompute, and the
lists reorder, because bars sorted by one measure read as unsorted under the
other. Switching never disturbs what you have selected.
The reordering is the point. A model can sit at 45% of the leading bar by cost
and 95% by tokens — it is doing nearly as much work for half the money, which
the cost view alone cannot show.
A live block's projection stays in dollars in either mode: it is a cost forecast,
and there is no token equivalent to convert it into.
Known limitation: selecting a project swaps the chart and the coverage strip
for session-grained views, and those two are still drawn from cost regardless of
the switch. Session records do carry token counts, so this is an omission rather
than a limit of the data, and it will be fixed.
Per-device health
Each device in the health panel now has its own status dot, its own
last-snapshot date, and its own missing-days list. Previously a single archive
wide calculation meant one current machine could report the last 30 days as
fully captured while another had been silent for a week.
Row detail on hover
Hovering any row in the model, device, agent or project lists gives the full
name the column had to truncate, the cost, the token count, the implied rate per
million tokens, and the row's share of what is on screen. Project rows add the
session count and the span they cover, still labelled as whole-session totals.
The headline agent tile is no longer hardcoded
The fifth stat tile used to be "Claude only". It now names whichever agent leads
the current view. For a Claude-heavy archive it shows the same number as before;
for anyone else it stops privileging one vendor in a headline slot on a page
that tracks every CLI ccusage detects.
Also
- An installer:
npx tokenarchivesets up the daily snapshot job end to end —
runtime files, LaunchAgent, keychain token, and one verified first run — and
proves it worked instead of promising it.--uninstallremoves everything
except your archive. - The Worker serves MCP at
POST /mcp, authenticated with read-onlymcp:
tokens minted at/admin, so agents on machines that do not hold the archive
can query it. Both servers answer from one shared tool implementation. - Ingest tokens are now bound to the device they were minted for, so one
compromised machine cannot write as another. - Snapshot-controlled strings are escaped before being embedded in the
dashboard's inline script. setup.jsprobes for unflaggednode:sqliterather than guessing from a
version range, and refuses to finish if no dashboard was produced.
Full changelog: https://github.com/ddyy/tokenarchive/commits/v0.2.0