English | 简体中文
A native macOS menu bar utility that reads data from the local codex app-server and displays:
- Remaining capacity in the rolling 7-day window
- Time until the next reset
- Available reset credits, shown only when the count is greater than zero
The app is read-only. It does not consume reset credits or directly read or record Codex authentication files.
- macOS 13 or later
- Codex CLI installed and signed in with a ChatGPT account
Regular users do not need Xcode. Xcode is only required for development or building the app from source.
The app automatically checks these common Codex CLI locations:
/opt/homebrew/bin/codex
/usr/local/bin/codex
You can also select the codex executable manually from the app popover.
- Download the latest
CodexUsageStatus-<version>-macos-universal.zipfrom the project releases page. - Double-click the ZIP file to extract
CodexUsageStatus.app. - Drag
CodexUsageStatus.appinto the Applications folder. - Open
CodexUsageStatusfrom Applications. - Look for the usage display on the right side of the macOS menu bar.
This is a menu bar app. It does not open a normal window or show an icon in the Dock.
A release signed and notarized by Apple can be opened normally. If you received an ad-hoc signed development build, right-click the app in Finder, choose Open, and confirm Open again. Only do this for packages from a source you trust.
Open Terminal and run:
codex --versionIf a version number appears, the Codex CLI is installed. If Terminal reports command not found and Node.js with npm is already installed, use the official installation command:
npm install --global @openai/codexSign in with your ChatGPT account:
codex loginComplete the browser sign-in flow, then verify the session:
codex login statusCodex Usage Status reuses the Codex CLI session. You do not need to enter an API key in the app.
The current version supports Codex signed in with a ChatGPT account. API key and Amazon Bedrock authentication cannot provide the account usage shown by this app.
The menu bar uses a compact metric layout:
76% │ 1d 2h │ 2
LEFT │ RESET │ CARDS
LEFTis the remaining percentage in the rolling 7-day window.RESETis the time until the next reset. It updates locally once per minute.CARDSis the number of available reset credits. The entire column is hidden when the count is zero or unavailable.…means the app is loading data.--means data is currently unavailable. Click the menu bar area to see the error.
Click the usage display in the menu bar to open the details popover. It includes:
- Remaining weekly capacity and a progress bar
- Relative and exact reset times
- Available reset credits
- Last update and estimated next refresh times
Use the refresh button in the upper-right corner to fetch fresh data immediately.
Choose one of the available intervals in the Automatic refresh section:
- 10 minutes, the default
- 30 minutes
- 1 hour
The selection is saved automatically. The app also reconciles usage after the Mac wakes from sleep and when a quota reset is reached.
After moving the app into Applications, enable Launch at login in the details popover. If macOS asks for approval, open:
System Settings → General → Login Items & Extensions
Click the usage display in the menu bar, then click Quit at the bottom of the popover.
Run codex --version in Terminal first. If Terminal can find it but the app cannot:
- Open the app popover.
- Find Codex CLI.
- Click Choose….
- Select the actual
codexexecutable.
Common locations:
/opt/homebrew/bin/codex
/usr/local/bin/codex
Run:
codex loginAfter signing in, return to the app and click the refresh button.
- Open Activity Monitor and search for
CodexUsageStatusto confirm that it is running. - If the menu bar is full, quit some other menu bar utilities.
- Remember that this app does not appear in the Dock.
- Click the refresh button in the details popover.
- Check that the Codex CLI is still signed in.
- Check whether automatic refresh is set to 1 hour.
- When existing data becomes stale, the app retries with bounded delays of 1, 2, 5, 10, and 30 seconds.
Confirm that the app is in the Applications folder, then turn Launch at login off and on again. If it still fails, check System Settings → General → Login Items & Extensions for a pending approval.
Development requires Xcode 26 because the project uses Swift 6. Regular users do not need to run these commands.
xcodebuild \
-project CodexUsageStatus.xcodeproj \
-scheme CodexUsageStatus \
-destination 'platform=macOS' \
-derivedDataPath /tmp/codex-usage-status-derived \
CODE_SIGNING_ALLOWED=NO \
build
xcodebuild \
-project CodexUsageStatus.xcodeproj \
-scheme CodexUsageStatus \
-destination 'platform=macOS' \
-derivedDataPath /tmp/codex-usage-status-derived \
CODE_SIGNING_ALLOWED=NO \
testTo run the optional integration test against the locally installed Codex CLI:
xcodebuild \
-project CodexUsageStatus.xcodeproj \
-scheme CodexUsageStatus \
-destination 'platform=macOS' \
-derivedDataPath /tmp/codex-usage-status-derived \
CODE_SIGNING_ALLOWED=NO \
'SWIFT_ACTIVE_COMPILATION_CONDITIONS=$(inherited) CODEX_INTEGRATION_TESTS' \
-only-testing:CodexUsageStatusTests/ProtocolDecodingTests/testLiveCodexAppServerWhenEnabled \
testTo use Launch at login in a local build, build with Sign to Run Locally, move the app into /Applications, and then enable the setting.
Run:
./scripts/package-release.shThe script creates a Release build and writes these files to dist/:
CodexUsageStatus.app
CodexUsageStatus-0.1.0-macos-universal.zip
CodexUsageStatus-0.1.0-macos-universal.zip.sha256
The ZIP supports both Apple silicon and Intel Macs. Without a distribution certificate, the script uses an ad-hoc signature. This is suitable for local testing or trusted distribution, but macOS will show a security warning on first launch.
For public distribution, sign with a Developer ID Application certificate and submit the app to Apple for notarization:
DEVELOPER_ID_APPLICATION="Developer ID Application: Your Name (TEAMID)" \
NOTARYTOOL_PROFILE="codex-usage-status-notary" \
./scripts/package-release.shNOTARYTOOL_PROFILE is the profile name previously stored in Keychain with xcrun notarytool store-credentials. After signing and notarization, upload the ZIP and .sha256 file to the project releases page. Users can then install the app without Xcode.
- Available intervals are 10 minutes, 30 minutes, and 1 hour; the default is 10 minutes.
- The menu bar reset countdown updates locally once per minute without making a network request.
- A manual refresh recalculates the next scheduled refresh.
- The app reconciles usage when the quota resets or after waking from sleep with stale data.
account/rateLimits/updatednotifications merge usage fields locally and do not bypass the selected polling interval.