You already burn tokens all day. tokens.ci turns that into a public standing: how much you ran through today, how it splits across clients and models, and where you rank against everyone else doing the same thing.
bunx tokens-cli@latest loginYour rank and usage on your phone, without opening a browser — share cards rendered on device, plus Home screen and Lock screen widgets for the day's tokens, your running total and your rank.
There is no sign-in. You enter a GitHub username and the app reads that public profile, so enter your own or the widgets will show someone else's usage.
So you can check what we send.
The CLI reads the session files your AI clients already write to disk, totals them locally, and uploads only the totals — token counts, model names, client names, timestamps. Prompts, completions, file contents and paths never leave your machine.
You do not have to take that on faith. The whole pipeline is here:
cli/tokens-core/src/sessions/— one parser per client, showing exactly which fields are read out of each session filecli/tokens-core/src/aggregator.rs— how those reads become daily totalscli/tokens-cli/src/commands/— the submit path, including the exact payload
tokens submit --dry-run prints what would be uploaded without uploading it.
We are not asking anyone to run their own copy. This repo exists to be read.
All 40 are detected automatically — if it is installed and has written sessions, it is counted.
Where each one stores its data
| Client | Data location |
|---|---|
| Claude Code | ~/.claude/projects/, ~/.claude/transcripts/ |
| Codex CLI | ~/.codex/sessions/ |
| OpenCode | ~/.local/share/opencode/opencode.db (1.2+) or ~/.local/share/opencode/storage/message/ |
| Cursor | API export cached at ~/.config/tokens/cursor-cache/usage*.csv |
| Copilot CLI | ~/.copilot/otel/*.jsonl |
| Gemini CLI | ~/.gemini/tmp/*/chats/*.json |
| Kimi CLI | ~/.kimi/sessions/ |
| Qwen CLI | ~/.qwen/projects/ |
| Amp | ~/.local/share/amp/threads/ |
| Droid | ~/.factory/sessions/ |
| Cline | VS Code globalStorage tasks |
| Roo Code | VS Code globalStorage tasks |
| Kilo | VS Code globalStorage tasks |
| Kilo CLI | ~/.local/share/kilo/kilo.db |
| Crush | $XDG_DATA_HOME/crush/projects.json |
| Goose | ~/.local/share/goose/sessions/sessions.db |
| Mux | ~/.mux/sessions/ |
| Pi | ~/.pi/agent/sessions/, ~/.omp/agent/sessions/ |
| Zed Agent | ~/.local/share/zed/threads/threads.db |
| Kiro | ~/.kiro/sessions/cli/, ~/.local/share/kiro-cli/data.sqlite3 |
| Warp / Oz | tokens warp sync → ~/.config/tokens/warp-cache/usage.json |
| Trae | tokens trae sync → ~/.config/tokens/trae-cache/sessions/ |
| Antigravity | tokens antigravity sync → ~/.config/tokens/antigravity-cache/sessions/ |
| OpenClaw | ~/.openclaw/agents/ |
| Codebuff | ~/.config/manicode/ |
| Hermes | $HERMES_HOME/state.db |
| Synthetic | Re-attributed via hf: model prefix or synthetic provider |
Clients that expose usage only through an account API need a sync step first —
tokens cursor sync, tokens antigravity sync, tokens trae sync,
tokens warp sync — after which they submit like everything else.
Pricing comes from LiteLLM's pricing data, including tiered rates and cache discounts.
One number, across everything. Most usage tools are scoped to a single client. This one merges every client you run into one total, deduplicated per client-day, so switching from Claude Code to Codex mid-afternoon does not split your day into two half-stories.
Built to be gamed against. A public leaderboard attracts inflated numbers. Submissions are checked for cross-device duplicates and monotonic regressions, accounts caught faking totals are banned, and the bans are public in the Hall of Shame. Ranking is worth nothing if nobody polices it.
A profile worth linking. Your page carries a verified badge if your GitHub account has at least two social links, your split by client and model, your contribution graph, and embeddable SVG cards for a README — ten templates, both themes, rendered server-side.
Small on your machine. The CLI is one job: scan, total, submit. It runs as a background service and otherwise stays out of the way.
This project is a fork of Tokscale. The data-collection core is shared and we keep pulling upstream's parser, pricing and correctness fixes. Everything above that has diverged:
| Tokscale | Tokens | |
|---|---|---|
| CLI surface | Full TUI dashboard plus report commands (models, monthly, hourly, graph, wrapped, pricing, …) |
Submit only — login, submit, serve, status. The TUI and every report command are removed, ~11k lines and 15 dependencies with them |
| Reporting | In the terminal | On the web, where it can be linked and compared |
| Anti-cheat | — | Cross-device duplicate guard, resubmit monotonicity checks, account bans, public Hall of Shame |
| Identity | Username | Verified badge from GitHub social links, refreshed daily |
| Groups | Team/group leaderboards | Removed — one global ranking |
| Frontend | Upstream's components | Rebuilt on shadcn/ui with its own brand marks and per-page Open Graph cards |
Upstream sync policy: data capabilities and correctness fixes come in; UI implementations do not. The site keeps its own component set so the design stays consistent across updates.
macOS
brew install owo-network/brew/tokens
tokens login
brew services start tokens # keeps submitting in the backgroundLinux
curl -fsSL https://tokens.ci/install.sh | sh
tokens loginThe installer sets up a systemd user service, so submission keeps running after you close the terminal.
Windows, or a one-off anywhere (Bun or Node 18+)
bunx tokens-cli@latest login # or: npx tokens-cli@latest login
bunx tokens-cli@latest submitTokens is free to use and free to self-host, and the leaderboard reads each page from Postgres rather than from a cache of a cache. That is what keeps the numbers honest, and it is also the expensive way to do it. Neon cover that cost, so the board does not have to go behind a paywall or get thinner to fit a budget.
MIT — see LICENSE.
Built on Tokscale by Junho Yeo; credit for the original design and implementation goes to the upstream author and contributors.