vibereceipt — Your AI coding,itemized.
vibereceipt reads the session logs Claude Code, Codex CLI and OpenCode already keep on your machine and prints a store receipt: tokens, what they would cost at API prices, and how many times the agent said “You’re absolutely right”. Then it saves a PNG that’s ready to post.
npx github:glmn-ai/vibereceiptSoon on npm as npx vibereceipt.
- No account
- No network calls
- Zero runtime dependencies

Printed from --demo sample data, not anyone’s real logs.
Everything your agents did, line by line
Counted from the logs, priced from a published table. Fun counters show up only when your logs have them.
*** FUN COUNTERS ***
The part people screenshot.
- "YOU'RE ABSOLUTELY RIGHT"Counted in the agent’s replies.
- "PERFECT!"Same, for the other favourite.
- TIMES YOU INTERRUPTEDTurns you stopped halfway.
- RAGE TAXPrompts with a swear word in them.
- NIGHT-OWL PROMPTS 00-05Sent between midnight and 5 a.m.
- BUSIEST DAYYour busiest day in the period.
- LONGEST STREAKYour longest run of consecutive days.
- LONGEST SESSIONOne session without a 1-hour gap.
- PEAK HOURThe hour of the day you work most.
0 BYTES UPLOADED
What you did
Sessions, prompts you typed, agent replies, tool calls with your top 3 tools, files edited and model requests.
- SESSIONS
- PROMPTS YOU TYPED
- TOOL CALLS
- FILES EDITED
Tokens
Input, output, cache read and cache write, plus the total.
- INPUT
- OUTPUT
- CACHE READ
- CACHE WRITE
By harness and by model
Tokens and cost for each agent you used, and for your top 3 models.
- BY HARNESS
- BY MODEL (TOP 3)
The bill
The subtotal at API list prices, with the price table’s date. Add --plan and it sets your subscription against it.
- SUBTOTAL
- SUBSCRIPTION
- YOU SAVED
Header and footer
The date, a receipt number hashed from your stats and a “cashier”: your top model by cost. At the bottom, a barcode and a promise.
- CASHIER
- 0 BYTES UPLOADED
- THANK YOU FOR VIBING
Read locally, printed locally
It reads files on your disk and writes one PNG. That’s the whole list.
No network code
Zero runtime dependencies. It never imports http, https, net, tls or dgram and never calls fetch. No account, nothing uploaded.
Read-only
Logs are only opened for reading, and the OpenCode database is opened read-only. The one file it writes is the PNG.
Nothing private on the receipt
Prompt text becomes a timestamp and a yes/no rage flag the moment it’s read. MCP and unknown tools are grouped, so their names never show. Project names appear only with --projects.
Check it yourself
Clone the repository and grep the build. It prints nothing.
git clone https://github.com/glmn-ai/vibereceiptcd vibereceiptgrep -rnE "fetch\(|node:https?|node:net|node:tls|node:dgram|WebSocket" dist
The only URLs in dist/ are plain text: the share link it prints and the two price-table sources. CI repeats this check on every run.
Exact money, or no price at all
The parsers and pricing come from @neurosquad/core, the engine behind nsq.
- 01
API list prices, dated
Anthropic’s and OpenAI’s published API prices. The receipt prints the table’s date:
price table 2026-10-12. - 02
Every request counted once
Claude Code writes a line per content block, and resumed sessions copy old messages. Lines are merged by message id.
- 03
Each token type priced
Uncached input, output, cache reads, 5-minute and 1-hour cache writes, long-context and fast-mode rates each have their own price.
- 04
Integer math
Integer tokens, integer prices, cost in picodollars. No floating point, rounded once for display.
- 05
“No price”, never $0
A local model or one missing from the table gets no price. The receipt says how many requests and tokens that covers, and marks partly priced rows with
*.
Subscription math
With --plan, the subscription is charged once for every calendar month you were active in the period. The receipt then says YOU SAVED or YOU OVERPAID, whichever is true.
SUBSCRIPTION
4 mo x $200 (Jul-Oct 2026)
YOU SAVED
/ YOU OVERPAID
The total is what the same traffic would cost at API list prices. A subscription isn’t billed per token, so it’s not what you paid.
Pick the period, add your plan
With no flags you get all time, printed in the terminal and saved as a PNG.
| Flag | What it does |
|---|---|
--since <when> | Period: 30d, 7d, 4w, 6m, 1y or a date like 2026-09-01. The default is all time. |
--month / --year | This calendar month, or this year. |
--plan <plan> | Compare with your subscription: pro, max5, max20, chatgpt-plus, chatgpt-pro, or any monthly price such as 49.99. |
--short | A compact receipt for posting, saved as an exact 4:5 PNG. |
--out <path> | Where to save the PNG. The default is ./vibereceipt-YYYY-MM-DD.png. |
--no-png | Print it, don’t save a PNG. |
--json | The stats as JSON, money in exact picodollars. No PNG unless you pass --out. |
--projects | Add your top 3 project folder names, base names only. Off by default. |
--demo | A receipt from built-in sample data, marked DEMO at the top and bottom. |
Three agents’ logs, nothing to set up
It reads what these CLIs already keep on your disk. Subagent logs are included.
Claude Code
Reads
~/.claude/projectsCodex CLI
Reads
~/.codex/sessionsOpenCode
Reads
~/.local/share/opencode/opencode.dbNeeds Node 18.17 or newer. Reading OpenCode’s SQLite history needs Node 22.13+; on older Node it’s skipped with a note.
Want another agent? The parsers come from @neurosquad/core, which already reads more of them. Open an issue.