Local-first Cross-agent Open source

Your agents are
running a tab.

See months of token history from your coding agents. Claude Code clears its transcripts after about thirty days. runtab backfills all of it into a private ledger on your machine, with a dashboard you own. No account needed.

See how it works

Claude Code, Codex, opencode, and hermes — one ledger. Every dollar is labeled an estimate.

runtab usage
127.0.0.1
JulAugSepOctNovDecJanFebMarAprMayJunMonWedFri
LessMore
deletion horizon
142 days on record~$412 API-equivalent value (est.)
01Why runtab

What runtab keeps for you.

Past the prune

History that outlives the prune

Claude Code clears its transcripts after about thirty days. Your runtab ledger is permanent and yours. A 52-week heatmap marks the day the agent's logs end and your record keeps going.

One view

Every machine in one place

Optional sync merges your laptop and desktop into a single dashboard by magic-link email. It stays opt-in, and only derived numbers ever leave your machine.

Fail-closed

Privacy you can check

Sync sends a fixed fifteen-field record, and the server rejects anything outside that list. A review screen shows the exact record before the first push. No prompts, no code, ever.

02How it works

One command, then it is yours.

  1. 01

    Run it

    npx runtab reads every agent transcript still on your disk. No config and no account.

  2. 02

    It backfills

    Months of history land in a private SQLite ledger in your XDG data directory. Re-runs are cheap and incremental.

  3. 03

    Open the dashboard

    runtab serve opens a fast local dashboard on 127.0.0.1 with daily burn by model, project rankings, a plan-window gauge, and the deletion-horizon heatmap.

  4. 04

    Merge machines, if you want

    runtab sync links your machines by magic-link email and merges them into one view. It is opt-in and sends 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.

03Privacy

Local-first for real.

Local mode has no account and makes no network calls. The ledger binds to 127.0.0.1 and works offline for as long as you keep it.

Turn on sync and it pushes derived metrics only, through a whitelist the server enforces fail-closed. Any payload with a field outside the list is rejected. Our end-to-end suite greps the server database for planted prompt strings and fails the build if it finds one.

runtab sync delete wipes everything on the server. Project names sync as an editable basename label. Full paths never leave your machine.

what a push contains15 fields, nothing else
event_id
ts
agent
model
project_label
session_id
machine_id
machine_name
input_tokens
output_tokens
cache_read_tokens
cache_creation_tokens
reasoning_tokens
est_cost_microusd
cost_basis
No prompts, no code, no file paths, no error text. Ever.
session_id is an opaque hash.
04Pricing

Pricing, plainly.

Individual

Free

Everything on this page. Local forever, no account. Optional sync merges your machines.

  • Permanent local ledger and dashboard
  • Cross-machine sync, opt-in
  • Collector, CLI, and dashboard are MIT
npx runtab

Team

Coming soon

A paid team plan on the sync server will keep the individual tool free. It is not available yet. When it ships it stays aggregate-only by design.

  • Budgets, thresholds, and showback exports
  • Aggregate-only, with individual attribution opt-in
  • Self-hostable sync server (FSL)
05Straight answers

The honest FAQ.

Why not just ccusage?+

Keep using ccusage. It is the category default and it is great 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 thirty-day prune. The two work side by side and there is nothing to migrate. We think of the ccusage ecosystem as good neighbors.

Are these numbers real?+

They are honest estimates, and we label them everywhere. Token counts come straight from the agents' own transcripts. On subscription plans there is no bill, so we show "API-equivalent value (est.)". On metered sources we show "estimated spend". If we do not recognize a model, we show no number instead of guessing. Every event carries a cost_basis flag so you can reconcile later. We do not claim billing-grade accuracy.

Is it ToS-safe?+

runtab reads files your agents already write on your own machine. That is the whole mechanism. It uses no undocumented endpoints, no user-agent spoofing, and no proxying of account traffic. It never touches your credentials. Parsing your own local logs is the same lane ccusage has occupied in public 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 are MIT: the collector, the CLI, and the dashboard. Audit them, that is the point. The sync server is source-available under FSL, converts to Apache-2.0 after two years, and you can self-host it.

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, Codex, opencode, and hermes.