Monthly · Claude Code + Codex

Your month of vibe coding, beautifully wrapped.

A Spotify-Wrapped-style card of how you actually code — across Claude Code and Codex. Tokens, spend, top projects, model split, and your coding persona, straight from your local logs.

View on GitHub →

Reads local logs·Nothing uploaded·Open source·Node 18+

A sample Vibe Coding Wrapped card combining Claude Code and Codex — total tokens, spend, top projects, model splits, activity heatmaps and coding personasThe same combined Vibe Coding Wrapped card rendered in the near-black dark theme
01

Inside your card

Every panel is computed from your real usage across both agents — no vanity metrics, just the numbers that tell the story of your month.

2.95B
Total tokens
Claude Code + Codex
$2,264
Spent
computed from LiteLLM pricing
95%
Cache hit rate
served from cache
12-day
Longest streak
your best run this month
Two agents, one card
Claude Code and Codex side by side — or a standalone card for either with --claude / --codex.
Total tokens
Everything you ran through both agents this month, headlined.
Spend
Real cost from per-model LiteLLM pricing — Anthropic and OpenAI rates, computed not estimated.
Top projects
Your biggest repos by spend, with worktrees rolled into the parent.
Model split
How spend divides across Opus/Sonnet/Haiku and the GPT-5 family.
When you code
A 7×24 heatmap of your week per agent, peak hour called out.
Coding persona
Night Owl, Early Bird, Daylight Coder, or Evening Hacker.
Models by spend
Claude
Opus70%
Sonnet27%
Haiku3%
Codex
GPT-5.6 Sol65%
GPT-5.6 Luna27%
GPT-5.58%
When you code
ClaudePeak · 10 PM
CodexPeak · 1 PM
02

Built to be trusted

A wrap-up of your usage shouldn't cost your privacy or your confidence in the numbers. This one earns both.

Private by default

Nothing leaves your machine

It reads your local logs and renders the PNG offline. The only network call is a price table — and --offline skips that too.

Real pricing

Costs, not guesses

Spend is computed from per-model LiteLLM rates for both Anthropic and OpenAI models.

Zero setup

One self-contained binary

Node 18 and nothing else. Fonts and a pricing fallback are embedded, so the first run just works — even on a plane.

03

How it works

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.

01

Load

Streams your local logs line-by-line and dedups resumed sessions — for both agents.

~/.claude · ~/.codex
02

Price

Fetches the LiteLLM price table — cached 24h, with a bundled fallback for offline.

LiteLLM · cached
03

Aggregate

Totals, cache rate, top projects, model split, peak hour, persona and streaks — in your timezone.

WrappedStats
04

Render

Satori turns flexbox into SVG; resvg rasterizes a crisp PNG with fonts embedded.

Satori → resvg
05

Install & usage

One command. No config, no account, no upload.

claude-wrapped-cli
$ npx claude-wrapped-cli
# both agents → one combined card, then opens it
 
$ npx claude-wrapped-cli --codex --dark
FlagDescription
--claudeOnly track Claude Code — a standalone card.
--codexOnly track Codex — a standalone card.
--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.
--darkRender the near-black dark theme.
--offlineUse cached/bundled pricing — no network.
--scale <n>Render scale. 2× → a crisp high-res PNG.
--no-openDon't open the image after saving.
--jsonPrint the computed stats as JSON to stdout.
04

Which coder are you?

Your peak hour decides your persona. There's no wrong answer — only an honest one.

🦉

Night Owl

Peaks after midnight

The repo is quietest exactly when you ship.

🐤

Early Bird

Dawn commits

First pull request in before the standup.

☀️

Daylight Coder

Peak · 1 PM

Locked in through the afternoon stretch.

🌙

Evening Hacker

After dinner

Comes alive for golden-hour debugging.

06

Questions

Yes. By default it reads both and renders one combined card. Pass --claude or --codex for a standalone card, or if you only use one agent it renders that one automatically.

No. It reads your local ~/.claude/projects and ~/.codex/sessions 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 for both Anthropic and OpenAI models. Nothing is estimated; Codex models not in the table show $0.

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.

Claude in ~/.claude and Codex in ~/.codex by default. If yours are elsewhere, set CLAUDE_CONFIG_DIR and/or CODEX_HOME and it'll read from there.