Skip to content

Latest commit

 

History

History
376 lines (262 loc) · 17.1 KB

File metadata and controls

376 lines (262 loc) · 17.1 KB

⚡ Codex Rate Watcher

再也不会在编程途中被限速打断

一款面向并行 agent 时代的 macOS 菜单栏应用,实时监控 OpenAI Codex(ChatGPT Pro / Team)的额度健康度 —— 支持多账号运营、智能接力,以及通过 iCloud 汇总多设备 token 总账。

en zh-CN ja ko es fr de

macOS Swift License Zero Dependencies

Codex Rate Watcher — 实时监控 OpenAI Codex ChatGPT 速率限制的 macOS 菜单栏应用

实时配额监控 · 消耗速率预测 · 多账号运营 · iCloud 多设备总账 · 飞书签名自动同步


☁️ v2.7.0 重点功能:ICLOUD 多设备 TOKEN LEDGER 同步

多台 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/>本机补充行"]
Loading

只要另一台 Mac 也登录了同一个 Apple ID,并至少运行过一次应用,Token Cost 视图就可以从 Local Device 自动切到 All Devices


🧭 并行 Agent 让额度问题变成“账号运营问题”

当 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,低余额惩罚)。一键切换,当前认证自动备份;这些账号池也会直接喂给接力规划和切换建议。

🍎 Apple 渠道订阅也能用

如果你的 ChatGPT Plus 是通过 App Store 订阅的,也没问题。Codex Rate Watcher 读取的是你本机的 Codex 登录态,而不是支付渠道。

Apple 收据:通过 App Store 订阅 ChatGPT Plus(月度)

💸 Token Cost 悬停详情

现在 Token Cost 卡片已经支持按天悬停查看详情。鼠标沿着柱状图横向移动时,可以直接看到对应日期、当天成本、token 总量、cache 占比和主模型,不用再额外打开完整 dashboard。

分享预览卡片现在也改成了 token 消耗优先 的展示方式:大字主指标直接显示 token burn,按 API 价格估算出的金额下沉到小字说明里,导出的图片会先强调使用量,再补充价格语境。

Token Cost 卡片悬停详情:展示单日日期、成本、tokens、cache 占比与主模型

🔗 飞书 URL Preview 签名自动同步

如果你想把同一份 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
  • 全设备或本机都能选 —— 默认写合并后的总量,也可以切成仅本机视角

飞书签名 URL 卡片:展示一行 token 摘要和 Copy URL 操作

快速配置

  1. 先准备好飞书自定义 slot 的 credentialslot-id

  2. 生成可以直接复制到飞书签名里的 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 卡片里填写并保存可选跳转地址;留空时复制出来的就是上面的短链接。

  3. 先在本地预览这次会写入什么内容:

    swift run codex-rate lark-signature --slot-id <slot-id> --dry-run
  4. 手动写一次,或者保存配置让菜单栏应用后续自动同步:

    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 多设备 Token Ledger 同步

开启 iCloud Drive 后,Codex Rate Watcher 会通过你自己的 iCloud Drive,把低风险的 token 消耗账本在多台 Mac 之间自动合并。

  • 总览看全部设备 —— Token Cost dashboard 可以把今日、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
  1. 下载对应芯片的 .zip 文件
  2. 解压后将 Codex Rate Watcher.app 拖入 /Applications
  3. 启动——它会出现在菜单栏(不在 Dock 中)
  4. 确保 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.app

调试窗口模式

swift run CodexRateWatcherNative -- --window

以独立窗口启动,而非菜单栏弹窗——适合截图和 UI 调试。

CLI 补充命令

# 预览准备写入飞书 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)

消耗速率预测引擎

预测器使用线性回归分析时间序列用量样本:

  1. 筛选当前速率限制窗口内的样本(按 reset_at 匹配)
  2. 选取近期样本(主配额回溯 3h,周配额回溯 3d)
  3. 计算 Δ 用量 / Δ 时间 → 每小时消耗率
  4. 预测 剩余 / 速率 → 耗尽时间
  5. 如果窗口在耗尽前重置 → "按当前速率,重置前不会耗尽"

智能账号评分

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