项目地址:https://github.com/xhwxt/zcode-token-usage-statusbar
平台:Windows / macOS | 依赖:Python 3.8+(零第三方依赖)| 许可:MIT
用 ZCode 干活的时候,我心里常年悬着三个问题:这次对话烧了多少 token?上下文窗口还剩多少,什么时候该开新会话?模型现在生成得快不快? ZCode 桌面客户端本身没有一个随时可见的答案,而 zcode-token-usage-statusbar 就是补上这块的悬浮状态栏——装完后它常驻对话窗口最底部,像汽车的油耗表一样,把每一轮请求的消耗实时摆在眼前。

它是什么、怎么工作的
先说清楚一个技术事实:这不是常规的 ZCode marketplace 插件。ZCode 的插件机制(plugin.json)只能提供 MCP、skills、commands、hooks,没有客户端 UI 能力——想在主窗口里画一个状态条,唯一的路线是往 app.asar 主入口注入一行 loader。所以它选择了"注入"这条路,这也是全文唯一需要你心理建设的点:它修改客户端文件,ZCode 每次升级覆盖 app.asar 后需要重跑一次安装。
数据侧则非常克制:只读本地 SQLite(~/.zcode/cli/db/db.sqlite),全程不联网、零轮询——空闲时零进程,有请求落库才触发刷新。不碰网络意味着它不构成额外的隐私面。
状态条上有什么
8 个模块,全部可以在 ⚙ 面板里独立开关:
- 生成速度:最近一次请求的 tokens/s,三档变色(≥70 绿 / 40–70 黄 / <40 红),模型快不快一眼可读;
- 上下文容量:微进度条 + 百分比,绿转黄转红;百万级大窗口提前在 40%/60% 预警。请求因超窗被拒时进度条亮红闪烁,并弹出三条处置建议(回滚上一轮 / 换大窗口模型或压缩会话 / 新开会话)——这是我个人觉得最贴心的设计,把"上下文爆炸"从一次莫名其妙的报错变成了可决策的信号;
- 本轮:最近一轮对话的消耗、缓存命中率、请求数、首 token 延迟;
- 会话累计:当前会话总消耗,明细里还有代码改动行数/文件数;多窗口各显各的,互不串数据;
- 工具调用:会话内工具调用总数,出错亮红色徽标;
- 今日合计:跨会话汇总当天用量;
- 子代理:后台子代理用量单独追踪,蓝色 ● 表示运行中,点击可看每个子代理的派发任务名与四项拆分;
- 设置面板:模块开关、上下文窗口手动覆盖、中英文界面即时切换。
安装:一条命令
前提很简单:Windows 或 macOS、Python 3.8+,没有任何第三方依赖。
git clone https://github.com/xhwxt/zcode-token-usage-statusbar.git
cd zcode-token-usage-statusbar
python install.py
我在 Windows 上的完整体验:脚本自动定位到了 ZCode 安装目录,复制运行时到 ~/.zcode/zcode-token-usage-statusbar/,重打包 asar(307MB,十几秒)、注册 MCP、装好 /usage 命令。唯一的小插曲:ZCode 正在运行时 asar 文件被占用、原子替换失败——安装器弹出了一个监控窗口,提示"完全退出 ZCode 后会自动完成替换"。我退出 ZCode,替换自动完成,重启后状态条就出现在窗口底部了。收尾逻辑不依赖计划任务,这个细节处理得挺稳。
两个提醒:
- ZCode 升级会覆盖 app.asar,状态条消失就重跑一次
python install.py,秒级完成; - 卸载同样一条命令:
python install.py --remove,它只增删自己的注入行,不依赖备份、不影响其它注入。
三种查询姿势
状态条是"看",真要查账还有三种方式:
- 对话内输入
/usage,直接在聊天里拉一份用量报告; - MCP 工具
token_usage(scope):让 Agent 自己查,scope 支持current / today / week / days:N / sessions:N / models:days / session:<id> / workspace:<目录>,可以按模型、按工作区聚合,子代理按parent_id归并去重,不会重复计数; - CLI:
python zusage.py now # 当前会话
python zusage.py today # 今日汇总
python zusage.py models 7 # 近 7 天按模型分布
python zusage.py watch 5 # 每 5 秒刷新
我装完随手跑了一下 zusage.py now,输出直接给出当前会话的轮次、请求数、input/output 拆分、缓存命中和最后活动时间——数据库里有什么,它就如实报什么。
几个值得说道的细节
- 口径诚实:合计 = input + output,缓存读取已含在 input 内,README 明确提醒你"不要重复相加";推理(thinking)token 只按厂商上报展示,不编数。对要写用量统计的人来说,这种把口径说破的文档比什么都重要。
- SSH 远程会话:桌面客户端连远端 zcode-server 时,数据落在远端机的库里,本地查不到。配置
config.json的remote段后,它自动切到 SSH 远端查询,条面出现 ☁ 徽标。远程办公场景算是被考虑到了。 - 更新很省心:
overlay.js改动在hot_reload开启时约 2 秒热更新免重启;zusage.py改动由常驻泵检测 mtime 自动重启。 - 上下文窗口自动识别:优先读 ZCode 原生 UI 的读数(服务端下发、跟随模型)→ 内置模型目录 →
config.json兜底,基本不用手动配。
已知限制
改客户端 asar 属于非官方路线,作者在 README 里没有回避这一点:依赖 EmbeddedAsarIntegrityValidation=0 这个 fuse,官方一旦收紧或改入口结构,注入路线即失效(届时 --remove 即恢复原样)。macOS 支持自 v60 起加入,但作者自述没有 macOS 设备、未经实测。Windows 是全功能实测平台,我这次安装也确实顺利。
总结
它解决的问题很小很具体——"我的 token 去哪了"——但完成度很高:只读、离线、零轮询、口径清晰、卸载干净、连"安装时 ZCode 没关"这种边缘情况都给了优雅的兜底。如果你每天重度使用 ZCode,装一个不亏。
- 仓库:https://github.com/xhwxt/zcode-token-usage-statusbar
- 深度文档(数据语义、性能实测、踩坑记录):仓库内
docs/design-notes.md(中文)