Usage
Read-only parsing of session logs, six ranges, three counters — and why unpriced models never show zero.
Updated · 2026-11-02
The usage page is a read-only observatory. It does not intercept requests, estimate tokens or truncate history — it parses the session logs already on your disk.
Sources
| Source | Notes |
|---|---|
| Claude Code | session logs |
| Codex | session logs |
| CodeBuddy CLI | session logs |
| CodeBuddy IDE | session logs |
| WorkBuddy | session logs |
For every other product, the reason usage is unavailable is stated per row instead of printing a zero.
Normalising the counters
The two families disagree on what input means, so everything is normalised first:
- Claude family:
input_tokensexcludes cache hits. - OpenAI family (CodeBuddy / WorkBuddy):
inputTokensincludes cache hits.
Both are converted to “non-cached input” before summing, otherwise two agents are not comparable. The credit field in the logs is ignored entirely.
Three counters
- non-cached input
- cache hits
- output
Cache creation measured zero on every local machine, so it is no longer surfaced separately.
Six ranges
Today (local calendar day), rolling 24 hours, 7 / 15 / 30 days, all time. Today and 24h plot hourly points; the rest plot daily.
Performance
A first pass over a few hundred MB of logs takes roughly 0.8–1.3 seconds. After that, files are cached by size + mtime and the hot path is around 90 milliseconds. Parsing only starts when you open the page — hundreds of megabytes never enter the startup path.
Pricing
Model pricing is a registered structure (input / output / cache read / cache write, per million tokens, plus currency). Enter it by hand, or import candidates from models.dev / OpenRouter and merge the ones you tick.
Unpriced models read “unpriced”, never 0; partial pricing reads “partially unpriced”. The rule exists so an estimate never looks like a bill.