编程助手额度监控,为何不能只数 Token
作者为 Claude Code 和 Codex 制作 Mac 菜单栏额度监控,选择读取工具自身数据,而非从会话日志估算。文中展示 Claude Code 状态栏 JSON 中的额度字段,解释订阅滚动窗口为何难以用 Token 总量还原。
完整中文译文
我每天都在用 Claude Code 和 Codex。这两个工具都能告诉你额度用了多少:Claude Code 用 /usage,Codex 用 /status。但工作到一半时,我不想为了看个数字,特意停下来输入命令。我希望像看时间一样,瞥一眼就知道。
于是,我做了一个小巧的 Mac 菜单栏应用。最难的部分,是拿到和工具自身显示一致的数字。
数 token,对不上额度
一种常见做法是读取本地会话日志,把 token 加起来,再和预算比较。但 Anthropic 和 OpenAI 都没有公布订阅套餐对应的 token 预算。额度限制指的是滚动时间窗口内,你的套餐可用份额,因此,根据日志估算的结果,可能和工具报告的数字相差很远。我跳过了估算,直接读取工具自身提供的数字。
Claude Code:状态栏里已经有这些数据
Claude Code 可以运行一条命令来绘制状态栏,并通过 stdin 向这条命令传入一个 JSON 数据包。对于订阅用户,较新的版本(2.1.251 及之后的版本)会在其中包含额度信息:
{
"rate_limits": {
"five_hour": { "used_percentage": 35, "resets_at": 1761040800 },
"seven_day": { "used_percentage": 60, "resets_at": 1761300000 }
}
}
因此,这个应用会在 ~/.claude/settings.json 中,把一个小型辅助程序设为状态栏命令。这个辅助程序会:
- 从 stdin 读取数据包;
- 只将
five_hour和seven_day保存到本地文件; - 把同一份数据包传给你原来的状态栏命令,运行它并打印其输出,让状态栏看起来和之前完全一样。
修改之前,应用会先备份 settings.json;断开连接时,则会恢复原来的状态栏。
状态栏只会在你使用 Claude Code 时运行,因此,你在 claude.ai 上产生的用量,要等到下一次向 Claude Code 发送消息后才会显示。应用会记录每次读数的获取时间,并淡化显示过期读数,避免让两小时前的 60% 看起来还像实时数据。
Codex:向 app server 查询
Codex 自带 codex app-server,通过 stdin 和 stdout 进行 JSON-RPC 通信,每行一个 JSON 对象。只需三条消息:
{"id":1,"method":"initialize","params":{"clientInfo":{"name":"my-app","version":"1.0"}}}
{"method":"initialized","params":{}}
{"id":2,"method":"account/rateLimits/read","params":{}}
id: 2 对应的响应包含两个时间窗口:
{
"primary": { "usedPercent": 18, "windowDurationMins": 300, "resetsAt": 1761042000 },
"secondary": { "usedPercent": 81, "windowDurationMins": 10080, "resetsAt": 1761390000 }
}
windowDurationMins 可以告诉你,哪个是短期额度,哪个是每周额度。这些就是 OpenAI 服务器使用的数字,因此,当额度提前重置时(确实会发生),应用在下一次读取时就能发现。读取间隔为 30 秒。
菜单栏应用启动时,PATH 中的路径很少,而 Homebrew 的 codex 启动器需要 node,它却不在这些路径里。启动服务器之前,需要把 /opt/homebrew/bin 和可执行文件所在的目录加入 PATH。
执行 codex logout 后,服务器会返回身份验证错误。我的卡片当时还在显示上次保存的数字,看着一切正常,实际上数据已经过期好几个小时了。现在,应用会清空这些数字,并提示 "run codex login"。
另一个我在 MacBook 上一直觉得缺少的功能,是剪贴板历史。macOS 只记得你最后复制的内容。再复制一项,前一项就没了。我不想为此再买一个付费应用,于是就在同一个面板里加了 Clipboard 标签页:保留最近 30 次复制的内容,保存 24 小时,默认关闭,需要手动开启,而且会跳过密码管理器标记为私密的内容。既然已经在做这个面板,我还加了一个 System 标签页,用来查看 CPU、内存、存储和电池信息。
这个应用叫 Pikori。它免费提供 Claude Code 和 Codex 的两种额度及重置时间,在剩余额度降至 10% 时发送通知,还把最近复制的内容和 Mac 的运行状况放在同一个面板里。菜单栏里坐着一个像素小人,随着额度减少,它会变得紧张。不需要注册账号,数据也都留在你的 Mac 上。
pikori.io · 支持 macOS 13+、Apple silicon 和 Intel。
如果你也在做类似的东西,希望上面这两段代码能帮你少花些查找资料的时间。
如果需要进一步采取行动,你可以考虑屏蔽此人和/或举报滥用行为。