agentwrapped
v0.1.4
Published
Spotify Wrapped for your coding agents — reads local usage via ccusage, builds an anonymized recap, and uploads it for a shareable link.
Readme
agentwrapped
Spotify Wrapped for your coding agents. One command reads your local coding-agent usage, builds an anonymized recap, and gives you a shareable link.
npx agentwrappedNo install, no sign-up, no API key. (bunx agentwrapped works too.)
🔒 Local & anonymized by design
Two things matter most here, so they come first:
Everything is computed locally. agentwrapped reads your usage through
ccusage (bundled as a dependency),
which reads each agent's own local data directories on your machine
(~/.claude, ~/.codex, …). It runs fully offline — all the counting and
aggregation happens on your device. Nothing is sent anywhere while the recap is
built.
Only an anonymized digest leaves your machine. To render your shareable
page, one small JSON "digest" of aggregate numbers is uploaded to
agentwrapped.com. That's the only network call. You can print the exact
payload first — see Preview before you share.
What's in the digest
Numbers only — nothing that identifies you, your work, or your conversations:
| Uploaded ✅ | Never read or uploaded ❌ |
| --- | --- |
| Token counts (input / output / cache), total and per agent | Your prompts or the agent's replies — no message content |
| Model names + per-model token totals | Your code, file contents, or diffs |
| Which agent tools you used (claude, codex, …) | File paths, project names, repo or directory names |
| Estimated retail value (list-price $) | Usernames, hostnames, machine info |
| Session stats: count, longest, active minutes, late-night, longest streak | API keys or credentials |
| Activity window (first / last timestamps) | Anything ccusage doesn't expose |
ccusage only ever exposes accounting numbers — tokens, cost, models, and
activity timestamps — never transcript content. The digest's source-path
list is uploaded empty, so even the local directories your data came from don't
leave your machine.
Preview before you share
The default command uploads so it can hand you a link. To see your recap — or the exact upload payload — without sending anything:
npx agentwrapped --summary # human-readable digest, LOCAL ONLY (no upload)
npx agentwrapped --json # the exact JSON that would be uploaded, LOCAL ONLYNeither uploads unless you add --upload. Want to exercise the whole flow with
zero network at all? Add --mock.
Commands & flags
agentwrapped # discover → build → upload → print your share link
agentwrapped --summary # full human-readable digest (local only)
agentwrapped --json # full digest as JSON, the upload payload (local only)
agentwrapped --summary --upload # …and also upload + print the link
agentwrapped --all # all time (default is the past 30 days)
agentwrapped --month 2026-05 # scope to a specific month
agentwrapped --mock # use a mock API — no network
agentwrapped --api <url> # point at a different API (e.g. local dev)
agentwrapped list # wraps you've created on this machine
agentwrapped delete <id> # delete one of your wrapsBy default the recap covers the past 30 days.
You stay in control of what you share
Every upload returns a private manage token, saved locally at
~/.agentwrapped/wraps/<id>.json. It's the only thing that can delete that
wrapped — it's never embedded in the public page.
agentwrapped list # show everything you've created here
agentwrapped delete <id> # remove it from agentwrapped.com using the stored tokenClaiming a spot on the public leaderboard is optional and uses GitHub sign-in; your manage token is sent only to the agentwrapped API, never to the browser.
Supported agents
Anything ccusage can read locally, including:
claude · codex · opencode · amp · droid · codebuff · hermes ·
pi · goose · openclaw · kilo · kimi · qwen · copilot · gemini
Agents you haven't used are simply skipped — only tools with real local data show up in your recap.
Requirements
- Node.js ≥ 18 (or Bun).
npx/bunxhandle the rest. - Some local usage from at least one supported coding agent on this machine.
Environment variables
Optional escape hatches:
AGENTWRAPPED_ROOTS— extra data directories to scan,:/,-separated.AGENTWRAPPED_CCUSAGE_BIN— point at a specificccusagebinary.AGENTWRAPPED_API_URL— override the API origin.AGENTWRAPPED_HOME— override where the local.agentwrappedstore lives.
License
MIT
