Content
# proof-card
One card renderer, three CLIs. This package collapses three separate
implementations of the same riso-editorial share card (font embedding, riso
ink palette, dashed rows, hero number, segmented bars) into one engine, then
puts `ccwrapped`, `ghwrapped`, and `tokenops` on top of it.
Glovrex F56 Bundle 3 (Rank2, Receipt / Proof-Card Suite). See `manifest.json`
for the Glovrex app contract.
## Structure
```
renderer/ @greymoth/proof-card-renderer, schema -> SVG/PNG (see renderer/README.md)
apps/ccwrapped/ Claude Code usage -> card (npm i -g @greymoth/ccwrapped is the published original)
apps/ghwrapped/ GitHub profile -> card (npm i -g @greymoth/ghwrapped is the published original)
apps/tokenops/ Claude Code token cost -> card + advice (npm i -g @greymoth/tokenops is the published original)
_source/ read-only clones of the source repos this was extracted from (not shipped)
self-verify.mjs generates one real card per app, asserts the files exist on disk
```
`apps/*` here are a **separate local integration**, not the published
packages. The originals are untouched. Package names are suffixed
`-proofcard` and marked `"private": true` for exactly that reason.
## Usage-tracker role split
Three tools measure similar things. Here's the difference:
- **inkdex** (not in this bundle, Chrome extension): measures ChatGPT/Claude
usage in the browser, client-side, nothing sent.
- **ccwrapped** (this bundle): measures Claude *Code* usage from local JSONL
transcripts (`~/.claude/projects`). CLI, not a browser tool.
- **tokenops** (this bundle): also reads `~/.claude/projects`, but for cost
breakdown and optimization advice (cache hygiene, boundary routing, output
discipline), not a usage summary. Shares no code with ccwrapped beyond a
vendored copy of the same JSONL-parsing engine (each repo vendors its own
copy today, a real dedup opportunity this pass didn't address).
## Try it
```bash
npm install # installs workspace deps (renderer + all 3 apps)
node self-verify.mjs # generates real cards, asserts files exist (slow: full-lifetime scan)
node apps/ccwrapped/bin/cli.mjs --week --wrapped out/cc
node apps/ghwrapped/bin/cli.mjs <github-username> --wrapped out/gh
node apps/tokenops/bin/tokenops.mjs card # writes apps/tokenops/_out/*.svg + *.png
```
Each `--wrapped` call now writes **both** `.svg` and `.png`. The three
source CLIs only ever wrote `.svg` and told you to screenshot it in a
browser. Real PNG output (via `@resvg/resvg-js`) is the actual "renderer
一本化" deliverable, not just deduplicated SVG-string code.
## What's real vs known gaps (honest, per QUALITY BAR #1)
- All three integrated apps run against real local data (Claude Code
transcripts, live GitHub API) in this workspace. See the final report for
screenshots taken during verification.
- `self-verify.mjs` exit 0 = 10/10 real-file checks pass.
- **Gap**: `renderer.test.mjs` checks structure (regex/string matches) and
PNG magic bytes, not visual layout. It will not catch a text-overlap
regression. Several were caught only by generating a PNG and looking at it
(see `CONTRIBUTING.md`). Any new layout should be eyeballed, not just
unit-tested.
- **Gap**: `renderer`'s `rows`/`hero` layouts leave a blank gap on
short-content cards (documented in `renderer/README.md`). Cosmetic, not a
correctness bug.
- **Gap**: root `npm test` (workspace-aggregated) fails in this environment
with a `'node' is not recognized` error from npm's cmd.exe spawn (a
Volta/PATH interaction on this machine, not a code defect). Run
`cd renderer && npm test` directly instead. That path is green and is what
every verification claim in this report is based on.
- **Not done**: `mcp-loadout`'s config-slot card (a fourth candidate layout,
ranked-list-of-servers) was read as prior art but not folded in. The task
scope was the three CLIs, not a fourth app.
Connection Info
You Might Also Like
buddy
Your persistent AI coding companion — the /buddy rescue mission. A...
Vera
Local code search combining BM25, vector similarity, and cross-encoder...
agent-base
Agent Base is a source-level research project on coding agents. It compares...
mitmproxy-mcp
MCP Server that wraps mitmproxy and exposes it as a tool to any MCP client,...
nothumanallowed
NotHumanAllowed — AI Agent Tools, CLI, Documentation & MCP Integration
claude-view
10 Claude sessions running. What are they doing? Live dashboard — monitor,...