把 AI 用量,打印成一张自带补刀的账单。
ASCII-native
pricing-aware
software-aware
Claude Code
Codex
Trae
Kimi Code
OpenCode
不是仪表盘。不是表格。不是自我安慰。
是一张在你开始合理化成本之前,先把账打出来的小票。
大多数 token 工具在“解释用量”。
token-receipt 在“给你结账”。
它把原本藏在后台的 AI 成本,变成一张热敏纸风格的小票。你可以直接贴进对话、截图发帖,或者把它当成“这轮到底烧了多少”的物证。
这个项目只有三条原则:
先有小票感,再有后台感输出应该像结账,不像管理台。口径必须诚实先读本地真实日志,再谈官方价格;对不上就承认对不上。结果必须可传播不能只是“能看”,要达到“想发”。
▐▛███▜▌
▝▜█████▛▘
▘▘ ▝▝
CLAUDE CODE
感谢使用 Claude
小票号: CC_20260427_155533_9A83E3
日期: 2026-04-27 15:55:33
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
供应商 ANTHROPIC
模型 claude-sonnet-4.5
已用上下文 12,487
────────────────────────────────────────────────
项目 TOKEN
────────────────────────────────────────────────
输入 Tokens 12,487
输出 Tokens 3,215
缓存读取 8,742
推理 Tokens 128
缓存写入 1,024
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
总计 15,702 Tokens
────────────────────────────────────────────────
USD 预估 $0.062851
价格映射 claude-sonnet-4.5
价格日期 2026-04-25
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
画面稳了,预算死了。
||| ||||| ||||||| ||||||||| |
CC_20260427_155533_9A83E3
footer 不是装饰。
footer 是最后那一刀。
这个项目的核心想法之一,就是让小票最后一行像模型看着你为了“再改一版”多烧了一轮上下文以后,冷冷留下一句评语。
现在这件事分成了两层:
- 默认小票里的 footer 继续负责补刀,口气冷一点,像账单自己在记仇
- HTML 里如果用户主动给了 tip,footer 会切进另一套结账态语气,明显更领情、更会来事,也更知道你是额外掏了钱
- 进入 tip 模式后,英文不再反复拿产品名当主语起手,中文也会真的吃进语气和账单轻重,而不是只演一个假动态
例如:
画面稳了,预算死了。最后一版这个词,本来就不诚实。推理不免费,犹豫更贵。问题死了,账单活着。
也就是说,给了 tip 以后,footer 不是在原句后面加一句感谢语,而是整句改写。 它会从“冷冷记账”切成“收银台知道你打赏了”的口气。
如果小票好看,但 footer 不够扎心,那这张票还没完成。
推荐直接用 Skills CLI 安装:
npx skills add https://github.com/Hchen1218/token-receipt -g -y如果你只想把它装到某个软件里,也可以定向安装:
npx skills add https://github.com/Hchen1218/token-receipt -a codex -y
npx skills add https://github.com/Hchen1218/token-receipt -a claude-code -y
npx skills add https://github.com/Hchen1218/token-receipt -a opencode -y如果你是把这个 repo 当 skill 装进软件里,正常用法不是先去终端里手动试命令。
正常用法是:就在你正在用的那个软件聊天框里,直接开口让它结账。
这些说法都应该触发:
token 小票对话发票AI 用量账单把这次对话打成小票看看这轮 token 消耗查看本次对话 Token 消耗token receipttoken billusage receipt
如果你想指定语言,也可以直接说:
中文版 token 小票token receipt in English
Claude Code 支持 SessionEnd 自动出票。
先安装 hook:
python3 scripts/install_claude_auto_trigger.py装好以后,Claude Code 会话结束时就会自动出 receipt,不需要你再多说一句。
它会优先给你当前正在用的软件结账。 不会因为别的软件日志更新得更晚,就偷偷换源。
| 软件 | 当前状态 | 数据来源 | 说明 |
|---|---|---|---|
| Codex | 现在就支持 |
Codex JSONL 会话 | 直接读本地会话日志 |
| Claude Code | 现在就支持 |
Claude usage-data + projects | 用 usage log 取 token,用 transcript 辅助识别模型 |
| Trae | 当前先支持手动出票 |
Trae 应用存储 | 自动导入暂未发版 |
| Kimi Code | 现在就支持 |
kimi-cli context.jsonl(~/.kimi/sessions/ 或 KIMI_SHARE_DIR) |
读 _usage.token_count 上下文累计;不做美元分项估算;要精确计价请用手动 --input-tokens / --output-tokens |
| OpenCode | 现在就支持 |
~/.local/share/opencode/opencode*.db(可用 OPENCODE_DATA_DIR、XDG_DATA_HOME) |
读 SQLite 中 message.data 的 tokens / modelID;支持 --scope latest-turn / session |
补充说明:
- 部分 Trae 构建会使用
Trae CN/.trae-cn命名。 - 在 Codex 里运行时,当前 runtime 可以被识别,
token-receipt会读 Codex 日志。 - 在 Claude Code 的 SessionEnd hook 里运行时,
token-receipt会读 Claude Code usage log。 - 如果你是在普通 shell 里直接运行,而且本机同时有多套软件日志,就要显式加
--agent-tool;现在不再允许跨软件猜最新日志。 - 目前版本里,
--agent-tool trae的态度是诚实的:它会明确告诉你先用手动模式,而不是假装 Trae 已经有稳定的 JSONL 会话日志可读。
这里分两层:
小票渲染手动模式下,任何模型名都能渲染到小票上。价格估算只有在references/pricing.json里有映射的模型,才会显示价格。
当前已覆盖的模型家族包括:
OpenAIGPT-5 家族、Codex 家族、GPT-4.1、GPT-4o、o3、o4-miniAnthropicClaude Opus / Sonnet / Haiku 家族GoogleGemini 2.x / 3.x 家族MoonshotKimi K2 家族DeepSeekDeepSeek V4 家族AlibabaQwen 家族ZhipuGLM 家族XiaomiMiMo 家族MiniMaxM2 家族
如果你的模型还没进映射表,小票照样能出。
只是价格不会陪你一起演戏。
当前小票字段是故意收着打的:
Input TokensOutput TokensCache Read TokensTOTALReasoning Tokens仅在真实可读时显示Cache Write Tokens仅在真实可读时显示
这个策略是故意的。
宁可少打一项,也不乱打一项。
聊天里的 monospace 小票仍然是主输出。
HTML 是第二出口:适合走浏览器打印预览、连真实打印机,或者接热敏纸工作流。
python3 scripts/token_receipt.py --agent-tool claude-code --output html --write ./receipt.html把 receipt.html 用浏览器打开,点一下 Print receipt,剩下的交给浏览器和打印机。
如果宿主支持本地文件链接,更顺手的做法是双导出:
python3 scripts/token_receipt.py --agent-tool claude-code --write /tmp/token-receipt.txt --write-html /tmp/token-receipt.html这样聊天里保留 monospace 小票,同时还能顺手附上一份可点击的打印版 HTML。
现在更推荐直接走统一的聊天回复模式:
python3 scripts/token_receipt.py --agent-tool codex --chat-reply
python3 scripts/token_receipt.py --agent-tool claude-code --chat-reply
python3 scripts/token_receipt.py --agent-tool kimi-code --chat-reply
python3 scripts/token_receipt.py --agent-tool opencode --chat-reply这会把完整 receipt 代码块作为主回复,同时自动落一份 /tmp/token-receipt.html,再把 [Printable HTML](file:///tmp/token-receipt.html) 一起带回来。
这一版的 HTML 主要盯住了三件最容易被看出来的事:
- 屏幕上有一层淡灰背景板,小票本体保持白色,边界更清楚
- 真正打印时仍然是纯白票面,不会把预览背景一起带上纸
- HTML 里也按软件切 logo:Claude Code 用单独的矢量标,Codex 和 Trae 用嵌入式图片素材
现在它也不只是“导出一张静态网页”了,而更像一个真的结账界面:
- 小票外有
EN / 中文切换,不用重新生成文件也能直接换语言 - 小票外有
加一点小费面板,控制项不印进纸里,默认票面更干净 - 只有这张小票本身能算出真实价格时,才会出现小费面板;对不上价的单子不会硬演 gratuity
- 只有真的选了小费比例,票内才会出现
小计 / 小费 / 应付总额 - 进入小费模式后,footer 会整句重写,不是在原句后面硬拼一句感谢语
- 小费态的 footer 会明显换口气:默认小票更冷,给了小费以后会更像收银台,开始领情,也更愿意哄你
- 切语言时不只是肉眼上换票面,页面本身的语言状态也会一起切过去,打印和浏览器语义更一致
安装:
python3 scripts/install_claude_auto_trigger.py卸载:
python3 scripts/uninstall_claude_auto_trigger.py这会把 token-receipt 接进 Claude Code 的 SessionEnd hook。
对话结束。
账单出现。
嘴硬窗口关闭。
持续更新记录见 CHANGELOG.md。
现在已经有带语言切换、外置小费面板和实时结账态的可打印 HTML。接下来会做更适合常见纸宽的打印预设,以及更干净的打印默认样式。后面准备补Trae 的自动会话导入,前提是本地存储结构足够稳定,值得信。
每一次提示词,都会留下账单。
token-receipt 只是比你的心理防线更早把它打印出来。
灵感来自 chrishutchinson/claude-receipts。
同样是 receipt 的直觉,不同的是语气更黑,软件更多,footer 更狠。