the local cost ledger for AI coding agents
See what each feature actually cost.
burn reads the transcripts your agents already write to disk — Claude Code, OpenCode, Codex, Gemini CLI — and adds it up per repo, model, day and git branch. Honest about every dollar. Nothing leaves your machine.
What it answers
burn blame · work · doctor · planEvery agent quietly logs exactly what it did. Nobody adds it up across tools, and nobody can tell you what feature/payments-refactor actually cost. burn turns that pile of JSONL and SQLite into a ledger.
burn repos burn dailyburn work burn blame HEAD~3..HEADburn doctor that flags paying top-tier prices for tiny turns.burn budget --repo X --max 50Never invents a dollar
R1 · R2 · R3The whole point of a ledger is trust. Every cost event carries a provenance class, and burn will not quietly turn tokens into money.
Actually charged
A price the tool recorded itself — OpenCode's real billed cost. Shown as-is, no estimate layered on top.
List-price derived
Tokens you have, multiplied by an editable price table. Recomputable — the pricingHash makes it reproducible years later.
Tokens only
Models burn can't price honestly are counted in tokens and deliberately left out of dollar totals. No guess.
The rule is absolute: if burn can't price it, it won't say a number. Unpriced events report tokens, never dollars.
The ledger is a protocol, not a file format
github.com/aashish254/ulpburn grew ULP — the Usage Ledger Protocol: a tiny, privacy-first JSON format any tool can emit and any team can merge across machines, with no server, account, or network. Two independent implementations must pass the same pure-JSON vectors before a version is ratified.
// one ULP 1.0 usage event — dollars only where they're real { "agent": "claude-code", "sessionId": "a9c0…", "index": 7, "model": "claude-opus-4", "repo": "analytics", // basename, never a path "date": "2026-09-13", "tokens": { "input": 113431, "output": 111193 }, "cost": 1.84, "costSource": "estimate", // billed | estimate | unpriced "pricingHash": "ad4e736afce6" }
Node · stdlib Python
both languages green
union identity, no double-count
Extensions live under x-<impl>-* namespaces. Core fields are additive-only across 1.x.
Install in one paste
macOS or Linux with Node ≥ 22.5. The script downloads a checksum-verified release, links burn into ~/.local/bin, and touches nothing else. No account, no telemetry, no root.
curl -fsSL https://raw.githubusercontent.com/aashish254/burn/main/install.sh | bash
- 01Paste the command above — it installs burn in a few seconds
- 02Run
burn— it auto-discovers your Claude Code, OpenCode, Codex & Gemini logs on disk - 03Read your ledger:
burn·burn work·burn doctor
Prefer to build from source? git clone https://github.com/aashish254/burn && cd burn && npm link — or just run node src/cli.js from the checkout. An npm package is on the roadmap; until then these are the two official routes.