Native macOS menu-bar companion for Codex limits, local usage, reset windows, free reset credits, and API-equivalent cost.
- Remaining Codex 5-hour and weekly limits from local
~/.codex/sessions/**/*.jsonl. - Exact local reset time for each limit window.
- Free Codex rate-limit reset count from Codex Desktop persisted state.
- API-equivalent daily cost estimate based on observed token usage.
- Top token-heavy Codex runs for the day.
- Local history trends and a WidgetKit snapshot file for the desktop widget.
- Alerts when local Codex data is missing or remaining capacity is low.
Download the latest CodexOpsBoard.dmg from GitHub Releases, open it, and drag Codex Ops Board.app into Applications.
The app is currently distributed outside the Mac App Store and is ad-hoc signed for local/personal use. If macOS blocks launch, use Finder's contextual Open action once, or build locally with your own Developer ID signing identity.
Codex Ops Board includes Sparkle for in-app updates. Use Проверить обновления in the dashboard or menu-bar popup. Sparkle reads this appcast:
https://github.com/GanbarovEmin/CodexOpsBoard/releases/latest/download/appcast.xml
Release archives are signed with Sparkle EdDSA signatures. The public key is embedded in the app bundle as SUPublicEDKey; the private key must stay outside the repository.
Requirements:
- macOS 14+
- Xcode
- XcodeGen
- GitHub CLI for publishing releases
swift test
scripts/build_and_run.sh
scripts/package_app.shThe packaging script builds the app and widget extension, embeds Sparkle, ad-hoc signs the local bundle, installs it to /Applications/Codex Ops Board.app, and creates dist/CodexOpsBoard.dmg.
Make sure the release machine has the Sparkle private key that matches the embedded SUPublicEDKey.
By default the scripts read it from:
$HOME/.codex/secrets/codex-ops-board-sparkle-ed25519.keyThen publish:
scripts/release_github.shThis builds the DMG, writes dist/appcast.xml, signs the update archive with Sparkle EdDSA, and uploads both assets to the GitHub release tag.
Do not generate a new Sparkle key for a normal release. If you rotate the key, update SUPublicEDKey in project.yml, rebuild the app, and ship that new trust root intentionally.
The app reads only local files:
~/.codex/sessions~/.codex/config.toml~/.codex/.codex-global-state.json
It does not send telemetry. GitHub is contacted only when Sparkle checks for app updates.
Launch Codex Ops Board once, then open macOS widget editing and search for Codex Capacity.
The widget reads the latest local snapshot written by the main app:
~/Library/Application Support/CodexOpsBoard/widget-snapshot.json
Current limitation: WidgetKit gallery visibility may require a real Apple Developer signed/notarized build. The ad-hoc local build writes the snapshot and embeds the extension, but macOS may hide the widget extension from the gallery.

