Local-first · cross-agent · open source
Your agents are
running a tab.
See monthsof your agents’ token history — the part Claude Code deletes after about thirty days. One command backfills it into a permanent, private ledger with a dashboard. No account.
Claude Code today, Codex next. Every dollar labeled an estimate.
claude code deleted its logs here.
runtab kept going.
Three things nothing else does together.
History that outlives the prune
Claude Code deletes its transcripts after about 30 days. The runtab ledger is permanent and yours — a 52-week heatmap marks the exact day the agent’s logs end and runtab’s memory continues.
Every machine, merged
Optional magic-link sync merges your laptop and desktop into one dashboard — the single most-requested thing in the category, and something no per-vendor tool can do.
Privacy you can verify
Sync sends a fifteen-field whitelist the server enforces by rejecting anything else. A review screen shows the exact record before the first push. No prompts, no code, ever.
One command. Then it’s just yours.
- 01
Run it
npx runtab reads every agent transcript still on your disk — no config, no account.
- 02
It backfills
Months of history land in a private SQLite ledger in your XDG data dir. Re-runs are cheap and incremental.
- 03
You get a dashboard
runtab serve opens a dark, fast dashboard on 127.0.0.1 — daily burn by model, project rankings, a plan-window gauge, and the deletion-horizon heatmap.
- 04
Merge machines, if you want
runtab sync links your machines by magic-link email and merges them into one view. Opt-in, derived numbers only.
$ npx runtab
scanning ~/.claude/projects …
backfilled 142 days · 38.2M tokens · 12 projects
$ runtab serve
dashboard → http://127.0.0.1:7822
ledger is a SQLite file. query it yourself.
Local-first for real,
not for the pitch.
Local mode has no account and makes no network calls. The ledger binds to 127.0.0.1 and works offline forever.
Turn on sync and it pushes derived metrics only, through a whitelist the server enforces fail-closed — it rejects any payload with a field outside the list. Our e2e suite greps the server database for planted prompt strings and fails the build if it finds any.
runtab sync delete wipes everything server-side. Project names sync as an editable basename label; full paths never leave the machine.
session_id is an opaque hash.
Pricing, plainly.
Individual
FreeEverything on this page. Local forever, no account. Optional sync merges your machines.
- ✓Permanent local ledger + dashboard
- ✓Cross-machine sync (opt-in)
- ✓Collector, CLI & dashboard are MIT
Team
Coming soonA paid team plane on the sync server is what will keep the individual tool free — said plainly now rather than sprung later. Aggregate-only by design; not available yet.
- ·Budgets, thresholds, showback exports
- ·Aggregate-only, individual attribution opt-in
- ·Self-hostable sync server (FSL)
The honest FAQ.
Why not just ccusage?+
Use ccusage — it’s the category default and excellent at the instant terminal snapshot. runtab reads the same local logs and answers a different question: what happened over months, across projects and machines, on a dashboard that survives the 30-day prune. They coexist; nothing to migrate. We consider the ccusage ecosystem upstream neighbors, not competition.
Are these numbers real?+
They’re honest estimates, labeled everywhere. Token counts come straight from the agents’ own transcripts. On subscription plans there is no bill, so we show “API-equivalent value”; on metered sources, “estimated spend.” Unknown model? We show no number rather than guess. Every event carries a cost_basis flag for reconciliation later. We never claim billing-grade accuracy.
Is it ToS-safe?+
runtab reads files your agents already write on your own machine — that’s the whole mechanism. No undocumented endpoints, no user-agent spoofing, no proxying of account traffic, and it never touches credentials. Parsing your own local logs is the lane ccusage has occupied publicly for years.
What do you send to your server?+
Nothing, unless you turn sync on. If you opt in, sync pushes derived metrics only, through a fifteen-field fail-closed whitelist — no prompts, no code, no file paths, no error text, ever. A review screen shows the exact record before the first push.
Is it open source?+
The parts that run on your machine and read your logs — collector, CLI, dashboard — are MIT; audit them, that’s the point. The sync server is source-available (FSL, converting to Apache-2.0 after two years) and self-hostable.
Put your usage on the record.
Every day before runtab starts recording is a day the prune can take. One command, no account.
Free preview · Claude Code today, Codex next.