Track your AI coding subscriptions from the macOS menu bar.
OpenUsage shows how much of each AI plan you've used: session and weekly limits, credits, and balances, all in one panel. The limits closest to running out sit right in the menu bar.
| Light | Dark | |
|---|---|---|
| Priority | ![]() |
![]() |
| All Usage | ![]() |
![]() |
-
Homebrew:
brew install --cask openusage
-
Direct download: grab the latest universal DMG from the releases page, open it, and drag OpenUsage to your Applications folder.
The app updates itself with signed, notarized Sparkle updates. Requires macOS 15 (Sequoia) or later, on Apple Silicon or Intel.
- Claude: session, weekly, model limits, extra usage (Enterprise spend), rate-limit resets
- ChatGPT: session, weekly, Spark, extra usage, credit limit, rate-limit resets, daily tokens
- Cursor: total usage, model usage, extra usage, requests, credits, daily spend and tokens
- Antigravity: Gemini and Claude quotas
- Copilot: credits, extra usage, chat, completions, organization billing
- Devin: daily and weekly quota, extra usage
- Grok: weekly limit, extra usage
- Muse Code: session, weekly
- Ollama: session, weekly, monthly, extra usage, daily usage and tokens
- OpenCode: session, weekly, monthly
- OpenRouter: balance, spend, key limit, budget
- Z.ai: session, weekly, web searches, rate-limit resets
- CLIProxyAPI hubs: every Claude, ChatGPT, Antigravity, Devin, and Grok login on a CLIProxyAPI server
Add your accounts from the app's Accounts screen. OpenUsage never reads other tools' credentials, files, or logs. See Accounts. Coming from 0.7.x? See Upgrading from 0.7.x.
- Menu bar. The limits closest to running out, at a glance.
- Priority. What's running low, what's used up, and which accounts need you.
- All Usage. Every account and limit in one place, with resets and your pace.
- Your layout. Pin the metrics you care about, hide the rest, and drag everything into your order.
- Rate-limit resets. See and spend Claude and ChatGPT resets.
- Share. Copy a picture of your usage to the clipboard.
- Notifications. A heads-up before a limit runs out, or before a weekly limit resets with most of it unused.
- Priority limits. Choose how much left turns a limit orange or red, see limits you're burning through too fast while they still have plenty left, and see limits about to reset mostly unused.
- Global shortcut. Toggle the panel from anywhere.
- Command line. Your usage as JSON, for scripts and agents.
- Automatic updates. Signed, notarized updates, with an optional beta channel.
- Proxy support. Route provider requests through a SOCKS5, HTTP, or HTTPS proxy.
How everything works, in docs/:
- Dashboard
- Accounts and CLIProxyAPI hubs
- Providers
- Menu bar
- Settings
- Refreshing
- Command line
- Updates
- Proxy
- Privacy, including optional daily provider account counts
Build from source
swift build # debug build
script/test_quiet.sh # run the tests without them taking the keyboard or the screen
./script/build_and_run.sh # build and launch the dev app from dist/script/test_quiet.sh takes swift test arguments such as --filter. The dev app has its own
bundle identifier, so it runs beside an installed OpenUsage. See debugging.
To learn the code, read the architecture overview, adding a provider, and AGENTS.md.
Releasing
Push a v* tag on main to build, sign, notarize, and publish a release:
- A plain tag (
v0.8.0) ships to everyone. - A pre-release tag (
v0.8.0-beta.1) ships to the beta channel.
The pipeline is release.yml, and the steps are in the
release-swift skill.
The workflow needs these repository secrets (Settings → Secrets and variables → Actions):
| Secret | What it is |
|---|---|
APPLE_CERTIFICATE |
base64 of your Developer ID Application .p12 |
APPLE_CERTIFICATE_PASSWORD |
the password set when exporting that .p12 |
APPLE_ID |
the Apple ID email used for notarization |
APPLE_PASSWORD |
an app-specific password for that Apple ID |
APPLE_TEAM_ID |
your Apple Developer team ID |
SPARKLE_PUBLIC_KEY |
base64 EdDSA public key, baked into the build as SUPublicEDKey |
SPARKLE_PRIVATE_KEY |
base64 EdDSA private key used to sign the DMG |
POSTHOG_CLI_API_KEY |
PostHog personal API key used to upload dSYMs for crash symbolication |
POSTHOG_CLI_PROJECT_ID |
numeric PostHog project ID the dSYMs upload to |
- Export the Developer ID Application certificate, with its private key, from Keychain Access as a
.p12. Then runbase64 -i DeveloperID.p12 | pbcopy. - Create the app-specific password at appleid.apple.com → Sign-In and Security → App-Specific Passwords.
- Generate the Sparkle key pair once with Sparkle's
generate_keystool. If the two keys don't match, signing is silently skipped. - The
POSTHOG_CLI_*secrets only upload dSYMs so crash reports symbolicate. WithoutPOSTHOG_CLI_API_KEY, the workflow skips the upload with a warning and the release still ships. The key comes from PostHog → Settings → Personal API keys, and the project ID is the number in your project URL. - Keep the repository public, because Sparkle fetches the DMG and appcast anonymously. After the first
release, confirm that Settings → Pages → Source is GitHub Actions;
deploy-pages.ymlpublishesgh-pages.
Contributing
Pull requests are issue-first:
- Comment on an issue.
- Wait for a maintainer to add the
approvedlabel and assign it to you. - Open your PR with
Fixes #123.
Automation closes external PRs that skip this. Read CONTRIBUTING.md first. Report security issues privately per SECURITY.md. The OpenUsage name and logo are covered by the trademark policy.



