一款面向并行 agent 时代的 macOS 菜单栏应用,实时监控 OpenAI Codex(ChatGPT Pro / Team)的额度健康度 —— 支持多账号运营、智能接力,以及通过 iCloud 汇总多设备 token 总账。
实时配额监控 · 消耗速率预测 · 多账号运营 · iCloud 多设备总账 · 飞书签名自动同步
多台 Mac,一份总账。
Codex Rate Watcher 现在可以通过你自己的 iCloud Drive,把多台 Mac 上的精简 token ledger 自动合并。 你会同时看到全部设备总览、按账号拆分的 burn,以及当前电脑的本机补充行。 认证信息、原始 session 日志、skill、MCP 配置仍然只保存在本机。
flowchart LR
A["本机<br/>精简 token ledger"] --> C["iCloud Drive<br/>Codex Rate Watcher / token-ledgers"]
B["另一台 Mac<br/>精简 token ledger"] --> C
C --> D["合并后的快照"]
D --> E["All Devices<br/>今日 / 7D / 30D / 90D"]
D --> F["账号榜单<br/>按账号看 burn"]
D --> G["This Mac<br/>本机补充行"]
只要另一台 Mac 也登录了同一个 Apple ID,并至少运行过一次应用,Token Cost 视图就可以从 Local Device 自动切到 All Devices。
当 Codex 同时跑在多台 Mac、多个账号上时,问题就不再只是“今天花了多少 token”。
你真正需要知道的是:
- 现在该让哪个账号继续顶住
- 今天的 burn 到底来自本机还是别的设备
- 整个账号池能不能撑到下一次 reset
- 应该继续 stay,还是立刻 switch / relay
Codex Rate Watcher 就是围绕这套运营闭环设计的:盯当前账号、给下一个账号排序、预测接力 runway,现在再把低风险 token ledger 合并成一份多设备总览。
你正处于心流状态,和 Codex 结对编程,重构一个关键模块——然后突然,速率限制的墙迎面撞来。没有警告,没有倒计时,只有一个冰冷的 429 Too Many Requests。
你等待,你刷新,你完全不知道配额什么时候重置,也不知道自己消耗了多快。
Codex Rate Watcher 彻底解决这个问题。
Codex Rate Watcher 驻留在 macOS 菜单栏,让你对 OpenAI Codex / ChatGPT 的速率限制用量一目了然:
| 能力 | 描述 |
|---|---|
| 📊 实时配额追踪 | 同时监控 5 小时主配额、周配额和代码审查配额 |
| 🔥 消耗速率预测 | 精确预测配额耗尽时间(如"预计 1h32min 后耗尽,14:30 重置") |
| ⏰ 重置倒计时 | 每张配额卡片都显示重置时间——不仅仅是被封锁时 |
| 👥 多账号运营 | 自动捕获账号快照,支持推荐切换与账号接力 |
| 🧠 智能切换 | 加权评分算法推荐最佳切换目标 |
| ☁️ iCloud 多设备同步 | 多台 Mac 的低风险 token ledger 自动合并,auth 和原始 session 继续只留本机 |
| 🔗 飞书 URL Preview 签名同步 | 可把 token 汇总写进飞书自定义 slot,并跟随菜单栏应用刷新自动更新 |
| 🔄 孤儿快照自动整合 | 启动时自动发现并注册未索引的认证快照 |
| 🏷️ 套餐标识 | UI 中清晰标注 Plus / Team |
| 🎨 深色主题 UI | Linear 风格设计,配额卡片颜色编码 |
大多数开发者只有在 Codex 停止响应之后才发现自己撞了限速墙。Codex Rate Watcher 能同时追踪三个配额维度 —— 5 小时主窗口、周聚合窗口和代码审查限制 —— 在菜单栏一眼全览。
内置预测器使用线性回归分析真实用量样本,精确告诉你每个配额什么时候会耗尽。不用猜,不用心算 —— 直接显示 "预计 1h32min 后耗尽,14:30 重置"。
重置时间不只在你被封锁时才显示。每张配额卡片始终显示重置时间,即使你正在活跃编程中。你随时知道还有多少余量,以及下一个窗口何时开启。
重度用户通常不是“一台电脑、一个账号”的模型,而是多个 Codex 身份、多台 Mac、还要尽量不断流地继续干活。应用会自动捕获认证快照,并通过加权可用性算法为每个配置文件评分(主配额 × 3.2 + 周配额 × 0.45 + 审查 × 0.08,低余额惩罚)。一键切换,当前认证自动备份;这些账号池也会直接喂给接力规划和切换建议。
如果你的 ChatGPT Plus 是通过 App Store 订阅的,也没问题。Codex Rate Watcher 读取的是你本机的 Codex 登录态,而不是支付渠道。
现在 Token Cost 卡片已经支持按天悬停查看详情。鼠标沿着柱状图横向移动时,可以直接看到对应日期、当天成本、token 总量、cache 占比和主模型,不用再额外打开完整 dashboard。
分享预览卡片现在也改成了 token 消耗优先 的展示方式:大字主指标直接显示 token burn,按 API 价格估算出的金额下沉到小字说明里,导出的图片会先强调使用量,再补充价格语境。
如果你想把同一份 token 视图带到应用外面,Codex Rate Watcher 现在可以把精简摘要写进飞书自定义 URL Preview slot,并由菜单栏应用持续维护最新值。
- 一次写入或持续同步都支持 —— 可以用
codex-rate lark-signature手动写一次,也可以保存配置后让应用自动同步 - 跟随刷新链路自动更新 —— 菜单栏应用在正常刷新和认证变化后都会尝试回写,不需要额外 cron
- 自动控噪 —— 值没变就不写;值变了也会限制为最多每分钟同步一次
- 紧凑但能看懂 —— 默认文案现在是
Token 今日268.6M/$94 · 7天3.4B/$1.3k · 30天8.2B/$3.3k - 全设备或本机都能选 —— 默认写合并后的总量,也可以切成仅本机视角
-
先准备好飞书自定义 slot 的
credential和slot-id。 -
生成可以直接复制到飞书签名里的 URL。
t=负责展示动态签名文案。默认生成的 URL 不带点击落地页,避免飞书预览抓取时跟随跳转而不展示 token:swift run codex-rate lark-signature --slot-id <slot-id> --signature-url
生成出来的 URL 形态是:
https://l.garyyang.work/?t=%7B%7Bslot%20id%3D%22<slot-id>%22%7D%7D如果确实想让点击后跳到别的页面,可以在菜单栏 UI 的
LARK SIGNATURE卡片里填写并保存可选跳转地址;留空时复制出来的就是上面的短链接。 -
先在本地预览这次会写入什么内容:
swift run codex-rate lark-signature --slot-id <slot-id> --dry-run
-
手动写一次,或者保存配置让菜单栏应用后续自动同步:
swift run codex-rate lark-signature --credential <credential> --slot-id <slot-id> swift run codex-rate lark-signature --credential <credential> --slot-id <slot-id> --enable-auto-sync
如果你的飞书签名链接长这样:https://l.garyyang.work/?t=Token%20...,那它是静态链接,后面不会自动更新。要想让菜单栏应用持续改值,签名链接本身必须读取 {{slot id="..."}}。如果签名链接里带了 u=,飞书预览抓取可能会跟随跳转到目标页,导致 token 文案不展示;优先使用只包含动态 t={{slot ...}} 的短链接。
开启 iCloud Drive 后,Codex Rate Watcher 会通过你自己的 iCloud Drive,把低风险的 token 消耗账本在多台 Mac 之间自动合并。
- 总览看全部设备 ——
Token Costdashboard 可以把今日、7 天、30 天、90 天的用量汇总成多设备总值 - 细项按账号拆开 —— 账号榜单仍然会告诉你是哪一个账号贡献了主要 burn
- 保留本机上下文 —— 合并视图里仍然会保留
This Mac/ 本机补充行,方便区分“当前电脑”和“所有设备”的差异 - 自动生效 —— 同一个 Apple ID 下,在另一台 Mac 上运行应用后,只要出现新的 ledger,界面就会从
Local Device自动切到All Devices - 边界明确 —— 目前只同步精简后的 token ledger;
~/.codex/auth.json、原始~/.codex/sessions/**/*.jsonl、skill 和 MCP 配置仍然只保存在本机
孤儿快照自动整合引擎在启动时扫描配置文件目录,自动发现未索引的认证快照并注册(SHA256 指纹去重)。即使索引文件损坏,你的账号也不会丢失。
通过可配置阈值通知(50%、30%、15%、5%)提前预警配额耗尽。告警通过 macOS 原生通知推送,按重置周期自动去重,同一告警不会重复打扰。随着配额下降,紧急程度自动升级 —— 低阈值告警会附带提示音,即使你正在专注编码也能及时注意到。
菜单栏图标不再是静态的。它会根据配额健康度实时变色 —— 余量充足时为绿色,用量攀升时为黄色,需要减速时为橙色,配额告急时为红色。无需打开面板即可一目了然,让你随时掌握配额状态。
所有数据默认保存在本地。应用仅与官方 ChatGPT Usage API 通信(chatgpt.com/backend-api/wham/usage)。无分析、无遥测、无第三方服务。你的认证令牌绝不离开本机;iCloud 同步也只会镜像精简后的 token ledger,不会同步认证信息、原始会话日志、skill 或 MCP 配置。
- 菜单栏状态 —— 剩余百分比始终可见
- 五级可用性排序 —— 可用 → 即将耗尽 → 已封锁 → 错误 → 未验证
- 认证文件监听 —— 通过 kqueue 实时检测
codex login - 套餐标识 —— 主卡片标题清晰显示 Plus / Team
- 调试窗口模式 ——
--window标志启动独立窗口 - 零依赖 —— 纯 Apple 系统框架,无第三方包
- 自动化 CI 发布 —— GitHub Actions 在每个版本标签自动构建 Apple Silicon 和 Intel 双架构
.app包
在 Releases 页面下载预编译的 .app 包——无需安装 Xcode 或 Swift 工具链。
| 芯片 | 下载 |
|---|---|
| Apple Silicon(M1 / M2 / M3 / M4) | 最新版 — Apple Silicon |
| Intel(x86_64) | 最新版 — Intel |
- 下载对应芯片的
.zip文件 - 解压后将 Codex Rate Watcher.app 拖入
/Applications - 启动——它会出现在菜单栏(不在 Dock 中)
- 确保 Codex CLI 已登录(
~/.codex/auth.json必须存在)
首次启动: 应用未经公证。请右键 → 打开,或前往系统设置 → 隐私与安全性 → 仍要打开。
如果你更喜欢自行编译:
- macOS 14(Sonoma)或更高版本
- Codex CLI 已安装并登录(
~/.codex/auth.json) - Swift 6.2+(Xcode 26 或 swift.org 工具链)
# 克隆仓库
git clone https://github.com/sinoon/codex-rate-watcher.git
cd codex-rate-watcher
# 直接运行(调试模式)
swift run
# 或构建 release .app 包
swift build -c release
./scripts/build_app.sh 1.0.0
# → dist/Codex Rate Watcher.appswift run CodexRateWatcherNative -- --window以独立窗口启动,而非菜单栏弹窗——适合截图和 UI 调试。
# 预览准备写入飞书 URL Preview 签名槽位的文案
swift run codex-rate lark-signature --slot-id <slot-id> --dry-run
# 生成可以直接复制到飞书签名里的 URL
swift run codex-rate lark-signature --slot-id <slot-id> --signature-url
# 将最新 token 汇总写入飞书自定义 slot
swift run codex-rate lark-signature --credential <credential> --slot-id <slot-id>
# 保存飞书 slot 配置,让菜单栏应用在每次刷新后自动同步
swift run codex-rate lark-signature --credential <credential> --slot-id <slot-id> --enable-auto-sync
# 查看或关闭已保存的自动同步配置
swift run codex-rate lark-signature --show-auto-sync
swift run codex-rate lark-signature --disable-auto-sync启用自动同步后,菜单栏应用会复用这份配置,在每次刷新后自动更新飞书 slot。实际行为是:启动时先同步一次,之后每 60 秒刷新一次,检测到认证变化后也会再触发一次同步。
~/.codex/auth.json ← Codex CLI 登录时写入
│
▼
AuthStore(读取令牌)
│
▼
UsageAPIClient ──────────► chatgpt.com/backend-api/wham/usage
│
▼
UsageMonitor(每 60 秒轮询)
│ │
│ ▼
│ SampleStore(持久化样本)
│ │
│ ▼
│ UsageEstimator(消耗速率预测)
│
▼
AuthProfileStore(多账号管理)
│ │
│ ▼
│ AuthFileWatcher(检测账号变更)
│
▼
AppDelegate(状态栏)◄──► PopoverViewController(GUI)
预测器使用线性回归分析时间序列用量样本:
- 筛选当前速率限制窗口内的样本(按
reset_at匹配) - 选取近期样本(主配额回溯 3h,周配额回溯 3d)
- 计算
Δ 用量 / Δ 时间→ 每小时消耗率 - 预测
剩余 / 速率→ 耗尽时间 - 如果窗口在耗尽前重置 → "按当前速率,重置前不会耗尽"
score = min(主配额%, 周配额%) × 3.2 // 均衡可用性(最高权重)
score += 主配额% × 1.1 // 5h 余量
score += 周配额% × 0.45 // 周余量
score += 审查配额% × 0.08 // 代码审查余量
if 即将耗尽: score -= 28 // 惩罚
if 当前账号: score += 4 // 留任奖励
得分最高的账号被推荐。切换时自动备份当前 auth.json。
所有数据保存在本地。除了调用官方 ChatGPT Usage API,没有任何数据离开你的电脑。
~/Library/Application Support/CodexRateWatcherNative/
├── samples.json # 用量历史(保留 10 天)
├── profiles.json # 账号配置文件索引
├── auth-profiles/ # 保存的 auth.json 快照(SHA256 指纹)
└── auth-backups/ # 切换前的 auth.json 备份
| 组件 | 技术 |
|---|---|
| 语言 | Swift 6.2 |
| UI 框架 | AppKit(纯代码,无 SwiftUI/XIB) |
| 构建系统 | Swift Package Manager |
| 并发 | Swift Concurrency(async/await, Actor) |
| 网络 | URLSession |
| 加密 | CryptoKit(SHA256 指纹) |
| 文件监听 | GCD DispatchSource(kqueue) |
| 依赖 | 无 —— 纯系统框架 |
欢迎贡献!你可以:
- 提交 Issue 报告 Bug 或提出功能需求
- 提交 Pull Request
- 分享你的多账号工作流技巧
MIT © 2026


