Tokentab Skill:本地算清 AI 编程工具每一刀花在哪的小账本
上个月 Claude Code 月底账单到手 $300、Codex 跑了 5000 步却分不清哪些是真干活哪些是空转——AI 编程 Agent 时代的最大盲点之一,就是没人给你一张清晰的「花费账单」。GitHub 今天冒出一个刚上线 5 天就拿下 1,100+ 颗星的小工具 tokentab(damejan80/tokentab):一个纯本地运行的 CLI,专门读 Claude Code、Codex、Cursor、Gemini CLI 留在磁盘上的 session 日志,算清楚你每一刀花在哪个 model、哪个项目、哪一天、哪种活上。
功能与原则
tokentab 不联网、不抓包、不上传任何东西——它只做一件事:把你电脑上 AI 编程工具的 session 日志吃进去,吐出一份可读的成本报告。核心设计原则:
- 零侵入、纯本地:不挂代理、不改 SDK、不抓 API key,只读
~/.claude/projects/、~/.codex/sessions/、~/.gemini/tmp/等本地日志路径,完全离线,可以拔网线用。 - 零第三方依赖(除 rich 画表格):HTTP 服务用 Python 标准库写,JSON 输出用 stdlib,定价表是一份手维护的 Python dict,永远不去网络拉价格——供应商改模型名也不会崩。
- 缓存正确计价:Claude 把 cache reads/writes 拆开,Gemini 把 input 含 cached 部分,
tokentab在定价前先把缓存 token 扣掉,不会重复收费。 - 模糊匹配模型名:
claude-opus-4-6-20260514也能匹配到claude-opus-4-6,模型版本号变了不会让所有账单归零。 - 活动分类启发式:不调 LLM,通过「首条 message 措辞 + 用过哪些工具」本地启发式判定这条 session 是 coding/debugging/refactor/testing/exploring/chat,零成本、可复核。
- 可插拔 provider:
tokentab/providers/里每个工具一个模块,实现collect()返回UsageRecord即可,所有下游(定价、分组、Web 面板)只依赖这一个 shape——加新工具只要 ~50 行 Python。
认可度
- GitHub stars:约 1,142 颗(截至 2026-09-02,GitHub API 实时核验)
- Forks:约 210
- Open issues:0
- License:MIT
- 主语言 Python,2026-08-27 首次推送(上线仅 5 天就登 aikitapp.com Fastest-Rising #2)
- 进入 aikitapp.com「Taking Off Today」当日榜
- 项目主页 README 直接展示 dashboard 截图,文档风格干净硬核
链接
- 仓库:https://github.com/damejan80/tokentab
- 安装:
git clone https://github.com/damejan80/tokentab && cd tokentab && pip install . - 备用仓库(原 fork):https://github.com/wzchav/tokentab
原作者
GitHub:@damejan80 与 @wzchav(原 fork 仓库作者,后合并到 damejan80 维护)。两人都是 CLI 工具爱好者,作品风格走「无依赖、本地优先、配色克制」路线。
介绍
对独立开发者和小团队来说,AI 编程工具的花费有两个痛点:一是月底才看到总账单,无法追溯;二是没法判断哪些 session 是真干活、哪些是空转。tokentab 用最朴素的方式解决——既然 Claude Code / Codex / Gemini CLI 本来就会把每次调用的 token 数量写进本地日志(这些数字就是工具自己上报的,不是估算),那把这堆 JSONL 拎出来加一下、查一下定价表,就是账单了。
输出格式很贴心:
- 默认输出是终端彩色表格,但管道重定向时自动去色,贴到 PR 或 issue 不会被转义码污染。
- 加
-web起一个本地 Web 服务,绑定localhost:4747,连字体都不从 CDN 拉,系统 serif/mono 直接用——可拔网线浏览。 - Web 面板每月一张「对账单」视图:顶上总花费,下面逐条 itemise。
- 缓存命中率异常、模型滥用、聊天式探索吞噬比例这些「值得回头看一眼的模式」,不直接给 verdict,但给出几条启发式警告——「工具告诉你数据,你决定是不是问题」。
额外价值:它展示的「每 session 的工具调用组合」本身就是一种反思素材——同样 1000 步,有的 session 真正改了文件,有的全是 Read 反复看代码,账单一样但产出天差地别。
特点
- 完全离线、零账号、零 API key:
tokentab自己不调用 LLM、不需要登录任何服务,适合对隐私敏感的企业环境 - 零外部依赖(除 rich 画表格):HTTP 服务用 stdlib
http.server,无需 Flask/FastAPI;JSON 用 stdlib - Web 面板绑定 localhost only:禁止任何外网访问,数据绝不外传;上线版「从不读 CDN 字体」
- 缓存 token 反向扣减:Claude/Gemini 的 cache 重复计算问题已处理,不会多收你钱
- 模型名模糊匹配:模型版本号变化、价格表还没更新时,也能给出最接近的价格而不是 $0.00
- 可读 stdin/管道:
tokentab --json | jq .直接走管道,CI 里能集成
使用方法
1) 源码安装(推荐,5 秒)
git clone https://github.com/damejan80/tokentab
cd tokentab
pip install .
tokentab # 直接调用
2) 不安装直接跑
git clone https://github.com/damejan80/tokentab
cd tokentab
pip install rich # 唯一外部依赖
python cli.py
3) 常用命令
python cli.py # 默认:最近 7 天,所有工具合计
python cli.py --today # 只看今天
python cli.py --month # 本自然月
python cli.py --project myapp # 单项目
python cli.py --provider claude # 只看 Claude Code
python cli.py --provider codex # 只看 Codex
python cli.py --from 2026-06-01 --to 2026-06-15 # 自定义时间窗
python cli.py --json | jq . # 机器可读,管道友好
python cli.py --web # 浏览器看 http://localhost:4747
python cli.py --web --port 8080 --no-open # 自定义端口/不自动开浏览器
4) 加新工具(给开发者)
只需在 tokentab/providers/ 里新建一个 Python 模块,实现 collect() 返回 list[UsageRecord](shape 见 tokentab/types.py),并在 tokentab/providers/__init__.py 注册——所有下游(定价、分组、Web、JSON)立刻全自动工作。Claude 的解析器是最简的参考实现。
使用场景与人群
- 个人 AI 编程工具重度用户:月底看到 $300 账单想搞清楚花在哪
- 小团队 Tech Lead:要给团队做「AI 工具投入产出」汇报,需要按项目拆数据
- 预算紧张的独立开发者:Claude Opus 太贵,想看到底哪些 session 真需要 Opus,哪些可以切 Sonnet/Haiku
- 企业 CISO / 合规:需要审计团队成员 AI 工具使用量,但不想上传任何数据到外部服务
- CI / 成本告警接入:
--json管道接到 Prometheus / Slack,做每日用量告警 - 多工具混用开发者:同时在 Claude Code、Codex、Gemini CLI 之间切换,想统一看总成本
不适用场景:需要实时拦截 API 请求、强制限流的场景——tokentab 是事后分析工具,不是 proxy/网关。
输入与输出案例
案例 1:跨工具月度对账单
Input(假设开发者本月在 Claude Code、Codex、Gemini CLI 都有使用,本地日志已存在)
bash
python cli.py --monthOutput(终端表格,自动去色版)
Period: 2026-09-01 → 2026-09-30 (partial)
╔══════════════╦═════════════╦═══════╦══════╦═════════╗
║ Provider ║ Model ║ Cost ║ Calls║ Tokens ║
╠══════════════╬═════════════╬═══════╬══════╬═════════╣
║ claude-code ║ opus-4-6 ║$214.3║ 482 ║ 28.4M ║
║ claude-code ║ sonnet-4-5 ║ $47.8║ 2103 ║ 41.2M ║
║ codex ║ gpt-5-mini ║ $3.1║ 287 ║ 6.1M ║
║ gemini-cli ║ gemini-2.5 ║ $0.0║ 104 ║ 1.8M ║
╠══════════════╬═════════════╬═══════╬══════╬═════════╣
║ TOTAL ║ ║$265.2║ 2976 ║ 77.5M ║
╚══════════════╩═════════════╩═══════╩══════╩═════════╝
By project: backend-api $148, frontend-spa $87, dev-tools $30
By activity: coding 62%, debugging 21%, refactor 9%, chat 8%
Cache hit ratio: 71% (warns: cache < 80% consistently → check context stability)
案例 2:导出 JSON 做 CI 告警
Input
bash
python cli.py --today --provider claude --json | jq -r '
.total_cost as $t
| if $t > 50 then "ALERT: today Claude spend = $($t)" else "OK: $(t)" end'Output
text
ALERT: today Claude spend = $67.42把这串塞进 cron 或 GitHub Action,每天 23:55 跑一遍,超阈值就 Slack 通知——0 数据外传,审计友好。
评论区
登录后可评论。