Codex Status Light is a native macOS menu bar app and Windows system tray app that turns your local Codex runtime into a simple red / yellow / green signal.
It is built for one job: let you glance at the tray and immediately know whether Codex is idle, busy, waiting on you, or stuck.
- shows a live tray light on
macOSandWindows - reads local Codex runtime signals directly from your machine
- distinguishes active work, approval waits, errors, and stalls
- opens a small detail panel when you want the exact reason behind the current light
When release assets are available, download the latest installer or app bundle from GitHub Releases.
macOS: download the.dmgWindows: download the.msiorNSIS .exe
If the Releases page is still empty, build from source with the commands below.
Unsigned internal builds may trigger the usual platform warnings:
macOS: useRight click -> Openthe first time, or allow it fromSystem Settings -> Privacy & SecurityWindows: SmartScreen may showMore info -> Run anyway
This app only works meaningfully on a machine where Codex has already run at least once.
It reads local runtime files from the user's .codex directory:
~/.codex/log/codex-tui.log~/.codex/logs_2.sqlite~/.codex/state_5.sqlite
On Windows, the same files are expected under %USERPROFILE%\\.codex\\....
If those files do not exist yet, the app stays in a neutral unavailable state instead of showing a fake green idle state.
Green: Codex is idle, settled, or has cleanly finished the last turnYellow: Codex is actively thinking, streaming, or running toolsYellow flashing: Codex is waiting for user approvalRed: Codex hit an error, was interrupted, or appears stalledNeutral: no reliable local Codex runtime signal is available yet
More detailed rules live in docs/status-signal-model.md.
- Launch the app.
- Keep it running in the menu bar or system tray.
- Click the tray light to open the detail panel.
- Use
Open Snapshotto inspect the latest status JSON if you want to debug. - Use
Open Codex Logto jump straight to the current Codex log file.
The native app reads Codex signals directly. It does not require the browser preview to stay open.
Install the app dependencies:
npm --prefix apps/status-light-shell installRun tests for the shared status engine:
npm testRun the native tray app in development:
npm run shell:devRun a forced status scenario to verify the lamps:
npm run shell:debug -- approvalBuild local bundles:
npm run shell:build:macnpm run shell:build:winapps/status-light-shell: native Tauri tray apppackages/status-engine: status parsing and signal mappingplugins/codex-status-light: optional Codex-side helper scaffolddocs: design notes and signal model