The receipt nobody printed
Every coding session on your machine already wrote down exactly what it burned. Nobody reads it, because it's four gigabytes of JSONL in four different shapes. comped reads it and tells you what your last 30 days would have cost at API list price โ and how many times over your subscription ate it.
rote play run https://play.modiqo.ai/rajkaria/comped plan=claude-max-200
Needs python3. Nothing else. No API key, no sign-in, no upload โ and no network calls at all.
Or don't. Put in what you pay and a guess at what you'd have spent on the API, and find out what you're calling it at parties.
Nothing here leaves your browser. It's arithmetic, not a service. The Play does the real version, with your actual token counts.
No estimates, no sampling, no telemetry. It reads the same files your agent already wrote and does the arithmetic you'd do by hand if you had a spare weekend.
(message.id, requestId). Codex is the opposite problem: cumulative counters that have to be differenced.Same core underneath. Pick the one that matches the question you're actually asking.
The card. List-price total, the multiplier against your plan, cache-read share, spend per model, what moved since your last run, and the asks you keep repeating with a price on each.
rote play run https://play.modiqo.ai/rajkaria/comped plan=claude-max-200
The deduplicated ledger under everything else: usage records, the messages that started each turn, every tool call and whether it failed. Nothing priced, nothing judged. If you're writing a session Play, read this instead of re-parsing the logs.
rote play run https://play.modiqo.ai/rajkaria/session-ledger
The mistakes your agent makes on repeat โ tool errors, the message where you corrected it, reverts โ grouped by signature, priced by what recovery cost, each with a drafted rule for your CLAUDE.md. It writes the draft. It never edits your files.
rote play run https://play.modiqo.ai/rajkaria/wrong-turns
New to rote? Two minutes to install, then any of the above.
Short version below. The long version is in the docs, field by field, including every number the card can show you.
Per API call: uncached input, cache writes, cache reads, output and reasoning tokens, with the model and the session they belong to. Reasoning bills as output, because that's how you're charged.
The message that started each turn, so cost can be attributed to what you asked rather than to a wall of API calls. Messages your harness generated are labelled as such and kept out of the totals that claim to be yours.
Every tool call, its one-line summary, and whether it errored. That's what makes "your agent has failed the same way 14 times" a fact rather than a feeling.
Prompt text beyond a 120-character truncation plus a hash. File contents. Your credentials โ it refuses to open the files that hold them, even to work out which plan you're on. You type that.
A tool that reads your logs is asking for a lot of trust. Here's the exact shape of what it does, and how you can check rather than believe.
~/.claude.json, ~/.codex/auth.json, or any credential, keychain or token file. Your plan is typed by you, precisely so it never has a reason to look.redact=false and the full text stays local โ it never appears on a card either way.None of that is a promise you have to take on faith. The test suite fails the build if the core imports urllib, http, socket, requests or ssl; if any module except the PNG renderer so much as mentions subprocess; or if any line of source references a credential path. Read that test โ it's 20 lines.
It's a list-price equivalent, and the card says so on its face. That distinction matters, so here it is plainly.
You're on a subscription. You paid what you paid. This is what the same tokens would have cost at the API's published rates โ the number that tells you whether your plan is a bargain or a rounding error.
Each run writes comped-explain.txt: one line per model with the token counts, the rate each was multiplied by, and the total. If a number looks wrong, you can find out why in about ten seconds.
Continuous integration compares our Claude Code token totals, per model, against ccusage โ an independent tool with its own parser. Same logs, same dedup, same totals.
If the bundled table has no rate for a model, it appears under "unpriced" with its token count and no dollar figure. A guessed price would make the headline number worse, not better.
Try it on the synthetic logs bundled with the Play first, if you'd rather not point a stranger's code at your own on the first date.
rote play run https://play.modiqo.ai/rajkaria/comped claude_dir=resources/fixtures/claude codex_dir=resources/fixtures/codex plan=claude-max-200
rote play run https://play.modiqo.ai/rajkaria/comped plan=claude-max-200
Then post your multiplier. Everyone thinks theirs is the bad one.