Windows and macOS tray Discord Rich Presence for OpenAI Codex. Detects Codex CLI and Codex desktop, shows model/effort, and lets you control Discord activity from a local Tauri settings window.
Features | Install | Usage | Development | Changelog
- Native Windows/macOS tray app built with Tauri and Rust.
- Single process app: no
codex-rpc-daemon.exesidecar. - Native Windows process scan for
codex.exe, no PowerShell polling. - macOS process scan for Codex CLI and Codex desktop.
- Detects Codex CLI vs Codex desktop.
- Discord RPC modes: Playing, Watching, Listening, Competing.
- Discord buttons support in Watching mode.
- Optional 5h and weekly usage display toggles.
- Live autosave for settings.
- Local preview of the Discord activity, including button preview.
- Tray quick toggles for RPC mode and usage visibility.
- Dark, System, and Light themes.
- Resizable settings window.
Download the latest release:
https://github.com/StealthyLabsHQ/codex-rpc/releases/latest
Recommended asset:
Codex RPC_0.3.4_x64-setup.exeCodex RPC_0.3.4_aarch64.dmgorCodex RPC_0.3.4_x64.dmgon macOS
Portable asset:
codex-rich-presence.execodex-rich-presence-macos-arm64orcodex-rich-presence-macos-x64
Run the app once. It starts in the system tray. Left-click the tray icon to open settings, or right-click for quick toggles and Quit.
The settings window controls:
- RPC mode: Playing, Watching, Listening, Competing.
- Two optional Discord buttons. Buttons are sent only in Watching mode.
- 5h usage visibility.
- Weekly usage visibility.
- Theme.
The tray menu controls:
- Open settings.
- Mode: Watching.
- Mode: Playing.
- Mode: Listening.
- Mode: Competing.
- Show 5h usage.
- Show week usage.
- Quit.
Settings are saved under:
%LOCALAPPDATA%\codex-rich-presence\rpc-buttons.json
~/Library/Application Support/codex-rich-presence/rpc-buttons.json
The live status file is:
%LOCALAPPDATA%\codex-rich-presence\status.txt
~/Library/Application Support/codex-rich-presence/status.txt
Codex CLI and Codex desktop can have similar process names, so Codex RPC does not rely on process name alone.
Detection uses:
- executable path;
- parent process name;
- native Windows process creation time.
CLI is detected when the path contains node_modules/@openai/codex, or when
the parent is a terminal/editor shell such as cmd.exe, pwsh.exe, wt.exe,
Code.exe, cursor.exe, zsh, bash, Terminal, iTerm2, Warp, Alacritty,
Hyper, Tabby, or ConEmu.
Everything else with a valid Codex executable path is treated as Codex desktop.
Codex RPC reads local Codex files only:
~\.codex\config.tomlfor model and reasoning effort.~\.codex\sessions\**\rollout-*.jsonlfor repo name and usage snapshots.
No Codex data is sent anywhere except the Discord Rich Presence payload through the local Discord IPC pipe.
Optional overrides:
| Variable | Default | Description |
|---|---|---|
DISCORD_CLIENT_ID |
bundled app id | Override Discord Application ID. |
SCAN_INTERVAL_MS |
5000 |
Codex process scan interval. Minimum 2000. |
IDLE_GRACE_MS |
10000 |
Keep last active state before clearing RPC. |
Settings refresh every 500ms so UI changes apply quickly. Process scanning stays at 5s by default to avoid unnecessary polling.
Requirements:
- Node.js 22+
- Rust/Cargo via rustup
- Windows: Visual Studio 2022 Build Tools with MSVC v143, Windows SDK, WebView2 Runtime
- macOS: Xcode Command Line Tools
Install dependencies:
npm installRun checks:
npm run build
npm test
cd src-tauri
cargo checkBuild Windows app:
npm run tauri:build:windowsOutputs:
bin\codex-rich-presence.exe
src-tauri\target\release\bundle\nsis\Codex RPC_0.3.4_x64-setup.exe
Build macOS app:
npm run tauri:build:macosOutputs:
bin/codex-rich-presence-macos-arm64
src-tauri/target/release/bundle/macos/Codex RPC.app
src-tauri/target/release/bundle/dmg/Codex RPC_0.3.4_aarch64.dmg
- Button URLs are limited to
http://andhttps://. - Discord IPC frame size is capped.
- RPC text fields are sanitized before they reach Discord.
- Process scanning uses native Windows APIs instead of shelling out.
- The app only reads local Codex config/session files and local Discord IPC.
MIT
