Skip to content

Repository files navigation

Codex Ops Board

Native macOS menu-bar companion for Codex limits, local usage, reset windows, free reset credits, and API-equivalent cost.

Codex Ops Board dashboard

What It Shows

  • 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.

Codex Ops Board update controls

Install

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.

Updates

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.

Build

Requirements:

  • macOS 14+
  • Xcode
  • XcodeGen
  • GitHub CLI for publishing releases
swift test
scripts/build_and_run.sh
scripts/package_app.sh

The 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.

Publish A Release

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.key

Then publish:

scripts/release_github.sh

This 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.

Data Stays Local

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.

Widget

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.

About

Native macOS companion for monitoring Codex limits, reset windows, free resets, and local usage cost.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages