Load
Streams every *.jsonl under ~/.claude/projects line-by-line and dedups resumed sessions.
A Spotify-Wrapped-style card of how you actually code — tokens, spend, top projects, model split, and your coding persona. Generated from your local logs.


Every panel is computed from your real usage — no vanity metrics, just the numbers that tell the story of your month.
A wrap-up of your usage shouldn't cost your privacy or your confidence in the numbers. This one earns both.
It reads your local logs and renders the PNG offline. The only network call is a price table — and --offline skips that too.
Spend is computed from per-model LiteLLM rates — the prices Anthropic actually bills.
Node 18 and nothing else. Fonts and a pricing fallback are embedded, so the first run just works — even on a plane.
Four steps, entirely on your machine. The price table is the only thing fetched — and there's a bundled fallback for when you're offline.
Streams every *.jsonl under ~/.claude/projects line-by-line and dedups resumed sessions.
Fetches the LiteLLM price table — cached 24h, with a bundled fallback for offline.
Totals, cache rate, top projects, model split, peak hour, persona and streaks — in your timezone.
Satori turns flexbox into SVG; resvg rasterizes a crisp 2160×2700 PNG with fonts embedded.
One command. No config, no account, no upload.
$ npx claude-wrapped-cli# current month → ~/Desktop, then opens it$ npx claude-wrapped-cli --month 2026-05 --dark
| Flag | Description |
|---|---|
| --month <YYYY-MM> | Month to summarize. Defaults to the current month. |
| --output <path> | Where to save the PNG. Defaults to ~/Desktop. |
| --timezone <iana> | Timezone for date grouping. Defaults to system local. |
| --dark | Render the warm near-black dark theme. |
| --offline | Use cached/bundled pricing — no network. |
| --scale <n> | Render scale. 2× → a crisp 2160×2700 PNG. |
| --no-open | Don't open the image after saving. |
| --json | Print the computed stats as JSON to stdout. |
Your peak hour decides your persona. There's no wrong answer — only an honest one.
The repo is quietest exactly when you ship.
First pull request in before the standup.
Locked in through the afternoon stretch.
Comes alive for golden-hour debugging.
No. It reads your local ~/.claude/projects logs and renders a PNG on your machine. The only network request is the LiteLLM price table — and --offline skips even that.
Tokens are read straight from your local logs, and cost comes from per-model LiteLLM pricing — the rates Anthropic actually bills. Nothing is estimated.
It groups by your system-local timezone so “your May” is genuinely your local May. Prefer UTC? Pass --timezone UTC.
Node 18 or newer. That's it — the fonts and a pricing fallback are bundled into the binary, so there's nothing else to set up.
It looks in ~/.claude by default. If yours is elsewhere, set the CLAUDE_CONFIG_DIR environment variable and it'll read from there.