PROJECT · Open Source Beta

AI Coding Status Bar

一个运行在 macOS 菜单栏的 Codex 本地状态中心,用真实 Session 数据显示运行任务、最近对话与 Token Usage。

macOSCodexOpen Source
背景
使用 Codex 处理多个项目时,任务状态、Session 和 Token Usage 分散在终端与不同对话中。为了减少频繁切换,我希望在 Mac 桌面上随时看到真实的 AI Coding 运行状态。
要解决的问题
如何在不依赖云端模拟数据的前提下,准确识别本机 Codex 正在运行的任务、汇总当日 Token,并把跨项目历史整理成一个低资源占用的原生面板。
原有流程
  1. 在多个终端和 ChatGPT 对话之间切换,逐个确认任务是否仍在运行。
  2. 从 Session 日志中人工查找项目、任务与 Token 信息。
  3. 无法快速区分 Completed、Failed 与 Interrupted,也缺少统一的历史视图。
解决方案
使用 SwiftUI 构建原生菜单栏与可折叠窗口,通过本地 Collector 增量解析 Codex JSONL Session、Writer Lock 和可靠的账户限额响应,再统一写入 SQLite 并呈现为状态面板。
AI 与人工责任
Local Collector读取 Codex Session、Writer Lock 和 Token 事件,标准化任务状态并持续增量更新。
macOS App以 SwiftUI 菜单栏和桌面窗口呈现任务、用量、历史、隐私模式与诊断信息。
隐私边界数据默认只保存在本机;不上传任务标题、项目路径、Session 内容或 Token 历史。
工作流程或架构
  1. Codex Data Sources:读取本地 Session JSONL、Archived Sessions 与 Writer Locks。
  2. Collector:增量解析任务生命周期、Token Delta、项目路径和最近活动。
  3. Normalized Model:统一 Running、Completed、Failed、Interrupted 与 Unknown 状态。
  4. SQLite:保存 Checkpoint、任务、Token Events 与可靠的 Weekly Limit。
  5. SwiftUI:通过菜单栏和可折叠窗口展示跨项目实时状态。
  6. FSEvents:以文件变化驱动刷新,并保留 30 秒低频兜底检查。
处理流程
  1. 验证 Codex 本地数据目录、Session JSONL 格式、Token 事件与 Writer Lock 行为。
  2. 实现增量 Parser 与 SQLite Checkpoint,避免每次重新读取全部历史。
  3. 用真实 Session 验证 Running、Completed、Failed 与 Interrupted 状态。
  4. 加入跨项目 Recent Conversations、Today Tokens 和可靠的 Weekly Usage。
  5. 完成隐私模式、登录启动、诊断页和 Universal 2 自动构建。
  6. 通过 GitHub Actions 验证测试、Release 编译、DMG/ZIP 和双架构产物。
Demo 或截图
AI Coding Status Bar anonymized macOS dashboard
匿名化演示界面:项目名与任务内容使用通用英文文本,不包含真实工作信息。
当前结果
已公开发布 v1.2.0-beta.1:提供 Universal 2 DMG/ZIP、自动化测试、SHA-256 校验,以及真实 Codex 状态和 Token Usage 展示。
局限与风险
当前版本依赖 Codex 本地 JSONL、Writer Lock 与 app-server 等非稳定接口;纯云端 ChatGPT 对话没有可靠本地数据源,因此不会伪造展示。Beta 使用 ad-hoc 签名,首次打开可能需要 macOS 手动允许。
下一步计划
  1. 完成 Apple Developer ID 签名与 Notarization。
  2. 增加应用内自动更新与更完整的兼容性 Fixtures。
  3. 继续降低大型 Session 历史下的索引开销。
  4. 在 Collector 协议稳定后,再评估 Claude Code、Cursor 等新数据源。