返回全部作品

Claude 额度浮窗

订阅额度贴在桌面角上,悬停展开三条

Mac

Claude 的订阅额度分三档在走:当前会话、全模型周、单模型周。想知道还剩多少得去翻界面,而你真正需要知道的时刻,恰恰是正干到一半、最不想打断的时候。

这是一块置顶的毛玻璃浮窗。平时是超紧凑的一行——三个迷你进度条加百分比,占不了多少地方;鼠标移上去展开成完整三条,每条带各自的重置倒计时。

细节

  • 颜色分三档:低于 75% 蓝、75–90% 橙、高于 90% 红。左边那颗状态圆点取三档里最差的那一档——你只需要瞄一眼那个点。
  • 拖到哪记到哪,位置自动记忆。
  • 右键:刷新 / 粘贴新 token / 退出。
  • 默认每 60 秒刷新一次。

登录那道坎

浮窗要读额度接口,需要一个带 user:profile 权限的 OAuth 凭证。

这里有个很容易踩的坑:claude setup-token 生成的 token 只有 user:inference 权限,打不开额度接口。所以项目自带一个显式请求 user:profile 的登录流程,走浏览器授权、把回调地址里的 code 贴回终端。access token 八小时过期,浮窗用刷新 token 自动续期。

凭证存文件,不进 Keychain。 这不是图省事:.app 走的是 ad-hoc 签名,每次重新编译身份都变,Keychain 会因此反复弹密码框。存成一个 0600 的文件既没有弹窗,也能跨重编保留。

技术

Swift 6,Command Line Tools 就能编,不需要完整 Xcode。代码分两层:UsageCore 是纯逻辑库——模型、解析、网络、OAuth、凭证存储,全部可测;GUI 那层只管置顶面板和 SwiftUI 视图。没有 XCTest 环境,所以自测是一个独立的 SelfTest 可执行文件,用断言覆盖解析、倒计时、阈值和 ISO 日期。

数据来自 GET /api/oauth/usage,响应里的 limits 数组给出三档,resets_at 是 ISO-8601 字符串。

有一条网络上的坑值得单独说:浮窗的 URLSession 强制直连、绕过系统代理。装了 Shadowrocket 这类工具时,URLSession 会连不上 api.anthropic.com,而直连是通的——这个现象排查起来很费时间,因为同一台机器上浏览器和 curl 都是好的。

Claude 额度浮窗 — 1
Claude 额度浮窗 — 2
上线
2026
我的角色
独立开发
技术栈
SwiftSwiftUIAppKitOAuth