Seven verdicts, and it says which one
七种判决,而且它把话说出来
The large number is the answer, and the sentence beside it is the verdict. Three of the seven, drawn by the app's own renderer:
大数字是答案,旁边那句话是判决。七种里的三种,由 app 自己的渲染器绘制:
Makes it — two hours to the reset and at least 69 % still in hand when it arrives. Too close to call — the interval straddles the reset, so it says so instead of picking a side. Falls short — 35 minutes of runway against a reset an hour and a quarter away, and the gap is named. The needle is where the quota runs out; the red line is the reset.
到得了 —— 距重置两小时,到点至少还剩 69%。 临界 —— 区间跨过了重置那一刻,于是它就说「说不准」,而不是替你挑一边。 到不了 —— 还能跑 35 分,重置在 1 小时 15 分之后,缺口直接写出来。 针是额度见底的位置,红线是重置。
The rate is an interval, not a number
速率是区间,不是数字
Every reading these services hand back is a whole number, and long plateaus are normal. The error is not Gaussian noise to be smoothed away — it is quantisation. So there is no regression here, no EWMA and no Kalman filter: they would all be averaging an ε that does not exist. Two bounds instead, over a span of S hours:
这些服务给回来的每一条读数都是整数,长时间的平台期是常态。误差不是可以被抹平的 高斯噪声,是量化。所以这里没有回归、没有 EWMA、也没有卡尔曼 —— 它们都在平均一个不存在的 ε。 取而代之的是两条界,跨度 S 小时:
rate.high = (Δp + 1) / S
One expression, three properties worth having. A plateau yields only an upper bound, which gives a lower bound on endurance — so the app can say "at least this long" and mean it. A single-step jump has a lower bound of zero, so one step can never announce that you are going to run out. And a burst decays on its own as S grows. The width of the interval is where the uncertainty goes; there is no confidence knob, because there does not need to be one.
一个式子,三个想要的性质。平台期只给上界,于是有续航的下界 —— app 可以说「至少还能跑这么久」,并且这句话是真的。单级跳的下界必为零, 于是一步永远不能宣布你会用尽。爆发随 S 增长自行衰减。 不确定性的出口就是区间的宽度,不需要另设一个置信度参数,因为根本不需要。
What it reads
它读什么
Claude Code, from the real endpoint
Claude Code,读真实接口
The five-hour and weekly windows as actual percentages from
/api/oauth/usage, plus the current session's context. Thresholds come from the
server's own severity, not a number we invented.
五小时与周窗口的真实百分比,来自 /api/oauth/usage,
外加当前会话的上下文占用。阈值用服务端自己的 severity,不是我们瞎定的数字。
Codex, with no credentials at all
Codex,零凭据
Read from its own app server. Nothing is asked of you and nothing is stored.
读它自己的 app server。不问你要任何东西,也不存任何东西。
Six more, read-only
另外六家,只读
Cursor, Copilot, Devin, Grok and Antigravity, each gated on the app actually being installed and each with a timeout. See before you install — none of them has been verified against a real account.
Cursor、Copilot、Devin、Grok、Antigravity,每一家都以「装没装」为前提, 每一家都有超时。见装之前先看 —— 它们都没在真实账户上验证过。
What it cost, at list price
按目录价折算花了多少
A trophy page converts the work you actually did into what the same tokens would have cost at the published API rates, with the price table's source and date shipped alongside it.
战绩页把你实际做的事,按官方公布的 API 单价折算成等效成本 —— 价格表连同它的来源和核对日期一起打包在应用里。
It comes and finds you
它会来找你
The dashboard is the part a dozen other tools already do. This is the part that is actually worth installing something for: three hooks, merged into your existing Claude Code settings rather than written over them, with the original backed up byte for byte first.
看板那部分市面上已经有十几个实现。真正值得为之装一个东西的是这部分: 三个钩子,以合并方式写进你已有的 Claude Code 配置而不是覆盖它, 并且动手之前先逐字节备份原文件。
- Your quota reset. It tells you when you can start again, rather than you checking.
- Claude is waiting on you. A permission prompt has stalled — the menu bar steps aside and a notification arrives.
- You walked away. More than five minutes from the keyboard and the alert forwards to your phone through ntfy or Bark.
- 额度重置了。到点它主动告诉你可以继续干活,而不是你去查。
- Claude 在等你回话。权限确认卡住了 —— 菜单栏让位,通知弹出来。
- 你离座了。超过五分钟没碰键盘,提醒就通过 ntfy 或 Bark 转发到手机。
The menu bar at the size it really is — the wing, both Claude windows, Codex's state and the countdown to the next reset. The panel spells everything out; the menu bar is the one place where space is scarce enough to earn a silhouette. It never animates.
菜单栏,就是它真实的大小 —— 翼、Claude 的两个窗口、Codex 的状态, 以及到下一次重置的倒计时。面板里不用缩写;菜单栏是唯一一处空间紧张到值得用剪影的地方。 它不做动画。
It does not ask for your password
它不会问你要密码
If you are logged into Claude Code, the app reuses that login. You never re-enter an account, and this app never sees a password.
It does not need your permission either. macOS checks keychain access per
record and per program, and Claude Code creates its login record with the security
tool, so the record admits that tool. This app reads the record through the same tool, with the
same command Claude Code uses — so nothing asks, and signing in to Claude Code again changes
nothing.
It only reads. It never renews the login and never writes to the record. Up to 1.4.0 it did both: it asked once for keychain access and again after every sign-in, and on one machine a renewal it could not write back logged the command-line tool out. When the login has expired now, the panel says so and offers Open Claude Code; using Claude Code once renews it, and the numbers come back on their own.
Nothing here asks you to open a terminal. Signing in is a button that opens one
and does it for you; a Mac without Claude Code on it gets a button to the download page rather
than a command that answers command not found. Until 1.1.5 every dead end ended in
something to type.
Until 1.0.9 this page said no dialog ever appeared, on the grounds that the app
read the record through /usr/bin/security. It raised a prompt on every poll instead —
and at the time the app was also writing that record itself. 1.0.10 to 1.4.0 stopped using the
tool and asked you for keychain access; 1.5.0 stopped writing, and went back to it.
已经登录 Claude Code 的话,应用直接复用那个登录。不用重新输账号, 本应用也从不接触你的密码。
也不需要你授权。macOS 的钥匙串授权是按「条目 × 程序」给的,而 Claude Code
用 security 工具创建自己的登录记录,所以这条记录认这个工具。本应用通过同一个工具、
用 Claude Code 自己用的那条命令去读 —— 于是什么都不会问,重新登录 Claude Code 之后也一样。
它只读。从不续期这个登录,也从不写这条记录。1.4.0 及更早的版本两件都做: 要你授权一次钥匙串、每次重新登录后再授权一次,而且在一台机器上,一次写不回去的续期把命令行工具登出了。 现在登录过期时,面板会说明原因,并给一个 打开 Claude Code 按钮;用 Claude Code 一下, 登录就会续期,额度随后自动恢复。
这里不会让你去开终端。登录是一个按钮 —— 它替你打开终端并跑完;
没装 Claude Code 的 Mac 得到的是一个通往下载页的按钮,而不是一条会回你
command not found 的命令。1.1.5 之前,每一个死胡同的尽头都是一句要你敲的东西。
1.0.9 之前,这个页面写的是「永远不弹框」,理由是应用通过
/usr/bin/security 读记录。结果它每轮轮询都弹框 —— 而那时应用自己也在写这条记录。
1.0.10 到 1.4.0 不再用这个工具,改为请你授权钥匙串;1.5.0 不再写,又回到了它。
The token goes to api.anthropic.com and nowhere else. There is no
telemetry, no crash reporting and no account of any kind.
令牌只发往 api.anthropic.com,不去别处。没有统计、没有崩溃上报,
也不需要任何账号。
Before you install
装之前先看
Four things that are true of version 1.5.0 and are better said here than discovered later.
1.5.0 版的四件事,写在这里比让你自己发现要好。
- Before 1.0.13, this app could not open on any Mac except the one it was built on. It installed, it launched, and nothing appeared — no menu bar item, no window — because it crashed looking for its own fonts and string tables at a path that only existed on the build machine. Twelve releases went out that way, and the build machine could never notice. The assembled app now proves from inside itself that every resource is inside itself, and a build that cannot say so is refused. And on the first other Mac that ran it, the settings window then opened as a bare title bar — it took its height from a number that is 0 until the page has been laid out. Since 1.1.0 the page states its own height, the way the panel always has. If you downloaded an earlier version, this is why it showed nothing, or nothing you could change. And until 1.1.1 it redrew the menu bar about three thousand times a second while doing nothing, because assigning the icon made macOS re-resolve the button's appearance and that fired the observer that assigned the icon — half a core, idle. Measured before and after with the app's own counter: 36,601 redraws in 12 seconds, then 3 in 15.
- Claude Code and Codex are the two that are proven. The other five — Cursor, Copilot, Devin, Grok, Antigravity — have never been checked against a real account, because none of them is installed on the machine this was built on. They are read-only, gated on the app being present, and time out; but "it should work" is not "it works".
- It reads your Claude Code login and never renews it. Up to 1.4.0 the app renewed an
expired token itself and wrote the replacement back, and on 8 September 2026 that write-back
failed three times on one machine: each exchange had already retired the old refresh token,
each replacement was lost, and the login that machine's CLI shared had to be rebuilt with
claude auth login. Since 1.5.0 renewing is left to Claude Code, which can store what it renews. The trade: if you have not used Claude Code for a while and its login has expired, the quota stops until you open Claude Code again. - Apple Silicon, macOS 13 or later. No Intel build.
- 1.0.13 之前,这个应用在构建它的那台 Mac 以外根本打不开。 能安装、能启动,然后什么都不出现 —— 没有菜单栏图标、没有窗口 —— 因为它去一条只在构建机上存在的路径找自己的字体和字符串表,找不到就崩了。 十二个版本都是这样发出去的,而构建机永远发现不了。现在应用出包前必须从自身内部证明 每一项资源都在自身内部,证明不了的构建直接拒绝。而在第一台跑起来的别的 Mac 上,设置窗口接着又只开出一根标题栏 —— 它的高度取自一个在页面完成布局前恒为 0 的数。1.1.0 起,设置页像面板一样自己申报高度。 而在 1.1.1 之前,它闲着的时候每秒重画菜单栏约三千次 —— 设置图标会让 macOS 重新解析按钮外观, 而那又触发了那个负责设置图标的观察者,空转掉半个核。用应用自带的计数器前后各测一次: 12 秒 36,601 次,修复后 15 秒 3 次。如果你之前下载过、打开后什么都没有、有东西却改不了,或者风扇一直转,原因就是这些。
- 真正验证过的是 Claude Code 和 Codex 两家。另外五家 —— Cursor、Copilot、Devin、 Grok、Antigravity —— 从未在真实账户上验证过,因为开发机上一个都没装。 它们全部只读、以「装没装」为前提、并且有超时;但「应该能用」不等于「能用」。
- 它读你的 Claude Code 登录,但从不续期。1.4.0 及更早的版本会自己续期过期的令牌并写回。
2026 年 9 月 8 日,某台机器上这个写回连续失败了三次:每一次交换都已让服务器作废旧的 refresh token,
每一个替代品都丢了,那台机器上 CLI 共享的登录只能用
claude auth login重建。 1.5.0 起续期交给 Claude Code —— 只有它存得下自己换来的新令牌。代价是:如果你有一阵子没用 Claude Code、登录已经过期,额度会停住,直到你再打开 Claude Code。 - Apple Silicon,macOS 13 以上。没有 Intel 版本。
Free, and the source is public
免费,而且源码公开
No licence, no account, no paid tier. Around 10,200 lines of Swift with no third-party dependencies, 185 tests, and a handover document that explains why the awkward parts are the way they are.
不要授权、不要账号、没有付费档。约 10,200 行 Swift,零第三方依赖,185 个测试, 外加一份把「为什么这里写得这么别扭」讲清楚的交接说明。