Reuses your Claude Code login
Reads the OAuth token from the Claude Code-credentials Keychain entry. No new accounts, no API keys, no setup forms.
Live plan limits, today's spend, weekly cap, and per-model breakdown — pulled from your existing Claude Code login.
Features
Claude Code logs everything locally; Anthropic exposes per-plan usage via an OAuth endpoint. Claude Status stitches both together in a tiny native menu bar item.
Reads the OAuth token from the Claude Code-credentials Keychain entry. No new accounts, no API keys, no setup forms.
Extra Usage in USD for Enterprise. Five-hour + weekly buckets for Pro & Max. Same numbers as claude.ai/settings/usage.
Stacked-bar charts split Opus, Sonnet, and Haiku spend across today and this week, with API-equivalent USD next to each.
Token counts come from ~/.claude/projects/*.jsonl. The Anthropic API call is opt-in and configurable; pick a refresh rate from 1 min to manual.
Swift + SwiftUI MenuBarExtra. Around 1.5k lines. No Electron, no background daemons, no JavaScript runtime.
Auditable end-to-end. Distributed via a Homebrew cask, signed with an Apple Developer ID and notarized by Apple.
Claude Code can leave several Claude Code-credentials entries in your Keychain — an old one from before a username change, another from an older build. Claude Status picks the one with the latest expiry, and the Diagnostics tab shows you exactly which that was, alongside every entry it considered.
It's strictly read-only: the app never writes to your Keychain and has no delete button. Stale entries are harmless, so if you'd rather tidy up, each unused row hands you the exact security delete-generic-password command to run yourself. No token is ever displayed or copied.
Screenshots
The dropdown adapts to the data your plan exposes. Enterprise users see live $ spend against their monthly cap. Pro and Max users see their 5-hour and weekly utilization.
How it works
Reads the OAuth blob Claude Code wrote to svce="Claude Code-credentials". Picks the freshest entry by expiresAt so a stale older login never wins.
Streams ~/.claude/projects/**/*.jsonl line by line, filters by timestamp window, aggregates input / output / cache-read / cache-write per model.
GET api.anthropic.com/api/oauth/usage with the Bearer token. Honors Retry-After on 429s, keeps the last good value on the screen during backoff.
Install
$ brew tap bcollard/claude-status
$ brew trust --tap bcollard/claude-status
$ brew install --cask claude-status
Privacy
No analytics, no telemetry. No third-party SDKs. The binary makes one HTTPS call: api.anthropic.com/api/oauth/usage, the same endpoint Claude Code calls.
Local logs stay local. Session JSONL files are read in-process. We extract token counts; we never read the conversation content beyond "usage": {…} blocks.
Keychain access is explicit. macOS prompts you on first launch to allow access to Claude Code-credentials. You can revoke it anytime via Keychain Access.
API is opt-out. In Options → Refresh, pick Manual only to disable auto-polling entirely. The local-log charts still work.
Source on GitHub. ~1.5k lines of Swift. Read it, audit it, fork it.
FAQ
Yes for all current consumer/business plans: Pro, Max, Team, Enterprise. The dropdown adapts to the fields the API returns — Enterprise gets the Extra Usage row, Pro/Max get five-hour and weekly utilization.
No. Claude Status is free and the source is open. There's no in-app purchase, no subscription, no "pro tier" to unlock.
No. It reads the usage blocks of ~/.claude/projects/*.jsonl for token counts, and the OAuth blob in your Keychain. It never opens the rest of the message content.
No. The API is polled every 5 minutes by default. On 429 Too Many Requests the app backs off, honors any Retry-After header, and shows the last known good numbers in the meantime.
Yes. Options → Refresh → Manual only. The local-log charts (today / this week with per-model breakdown) keep working — only the plan-level rows go quiet.
Open Options → Diagnostics. Claude Code can leave several Claude Code-credentials entries in your Keychain, and the tab shows every one it found, each entry's expiry, and which one is In use. Claude Code also refreshes tokens in memory without always writing them back, so a claude /logout followed by a fresh login is the reliable way to write a new entry.
Deliberately not. Extra entries are inert — the app picks the one with the latest expiry, so a stale entry can never win — and removing the wrong one would log you out of Claude Code. Instead, each unused row in Diagnostics gives you the exact security delete-generic-password command, so the destructive step stays in your own shell.
macOS 14 Sonoma or later. The app uses MenuBarExtra and the new SMAppService launch-at-login API.
Today, yes — the release build is arm64. A universal (arm64 + x86_64) build is planned. Open an issue on GitHub if you need it sooner.
Reading another app's Keychain entry from inside the App Store sandbox would need a shared keychain access group entitlement that only Anthropic can grant. The Homebrew cask path avoids that.
The dropdown shows what a given token mix would cost on the Anthropic API. On a plan, you're not actually billed per token — but the figure is a useful comparison. Rates are public list pricing.