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.

See how it works

Claude Code today, Codex next. Every dollar labeled an estimate.

01Why runtab

Three things nothing else does together.

past the horizon

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.

one view

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.

fail-closed

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.

02How it works

One command. Then it’s just yours.

  1. 01

    Run it

    npx runtab reads every agent transcript still on your disk — no config, no account.

  2. 02

    It backfills

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

  3. 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.

  4. 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.

03Privacy

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.

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 + dashboard
  • Cross-machine sync (opt-in)
  • Collector, CLI & dashboard are MIT
npx runtab

Team

Coming soon

A 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)
05Straight answers

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.