Accurate local AI usage stats for Claude Code and Codex. Your token burn, your streak, your card.
npx burncard
CLAUDE CODE
model Fable 5 (Max 20x)
tokens 9.72B
messages 31.4K
sessions 141
streak 33d (longest 33d)
active 49 days, peak 11 PM
Because the obvious way to count is wrong:
- Claude Code streams each assistant message as multiple log entries that repeat the same usage block. Naive counters inflate your tokens ~2.4x. burncard dedupes by message and request id.
- Log timestamps are UTC. Tools that bucket days in UTC split your late-night sessions across two days and break your real streak. burncard uses your local timezone.
- Plan info lives in two local records that go stale independently. burncard trusts the freshest one, and only ever claims your tier — never a price it can't verify.
Everything runs locally. burncard reads your own log files
(~/.claude/projects, ~/.codex/sessions), computes aggregates, and
prints them. Nothing leaves your machine.
npx burncard # stat block
npx burncard --json # machine-readable
npx burncard card # share card -> burncard.svg
npx burncard card --codex -o me.svg
burncard is a telemetry layer first — the CLI is just one consumer. Any app (status bars, overlays, dashboards, presence daemons) can read the same stats programmatically:
import { computeClaude, computeCodex, detectClaudePlan } from "burncard";
const stats = computeClaude(); // ToolStats | null
const plan = detectClaudePlan(); // "Max 20x" | "Pro" | ... | null- Share card (SVG) — post your burn
- PNG export
- Cursor + Gemini CLI parsers
-
burncard watch— Discord Rich Presence daemon
MIT