Open source · MIT

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/vibereceipt

Soon on npm as npx vibereceipt.

  • No account
  • No network calls
  • Zero runtime dependencies
A thermal-printer receipt listing sessions, prompts, tool calls, tokens, cost per harness and model, a subscription comparison and fun counters. Marked DEMO: sample data.

Printed from --demo sample data, not anyone’s real logs.

What’s on it

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
Privacy

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.

How cost is computed

Exact money, or no price at all

The parsers and pricing come from @neurosquad/core, the engine behind nsq.

  1. 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.

  2. 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.

  3. 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.

  4. 04

    Integer math

    Integer tokens, integer prices, cost in picodollars. No floating point, rounded once for display.

  5. 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.

Flags

Pick the period, add your plan

With no flags you get all time, printed in the terminal and saved as a PNG.

--since <when>Period: 30d, 7d, 4w, 6m, 1y or a date like 2026-09-01. The default is all time.
--month / --yearThis 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.
--shortA 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-pngPrint it, don’t save a PNG.
--jsonThe stats as JSON, money in exact picodollars. No PNG unless you pass --out.
--projectsAdd your top 3 project folder names, base names only. Off by default.
--demoA receipt from built-in sample data, marked DEMO at the top and bottom.
Supported agents

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/projects

Codex CLI

Reads

~/.codex/sessions

OpenCode

Reads

~/.local/share/opencode/opencode.db

Needs 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.

Print yours.

One command. Nothing leaves your machine.

npx github:glmn-ai/vibereceipt