macOS menu bar · open source · local only
TokenWatch sits in your menu bar and shows session, weekly, and credit usage across the AI subscriptions, routing providers, and API keys you actually use — and tells you which one you just used, and whether its prompt cache is still warm.
Every provider's own dashboard is a different tab, a different login, a different layout. TokenWatch normalizes all of it into one glance — and adds two things none of them show you on their own.
Claude's prompt cache goes cold 5 minutes after your last message — the next one re-reads your whole context at full price. TokenWatch reads your local session logs and shows warm (cheap) or cold (full price) before you hit send, with the hit ratio and exact expiry time, scoped to whichever session you were just in.
The menu bar leads with whichever tool you were just in — name, usage percent, and its cache state — instead of making you guess which of thirteen possible providers the number belongs to. Run several Claude Code sessions at once? Hover the icon to see which project the cache state is describing.
No recent activity to show instead? The icon falls back to whichever enabled provider is closest to its limit, colored green, amber, or red, so a rate limit never surprises you mid-task.
Click the icon for a provider picker with each service's real logo, not a wall of cards — pick Claude and see every locally active session's cache state, not just the newest; pick anyone else and see session/weekly percent, credit balances, reset times, and spend, every bar colored green/amber/red by how close it is to the limit, from the same renderer for all thirteen.
API keys live in the macOS Keychain. Every credential goes straight to that provider's own API over HTTPS and nowhere else — no telemetry, no relay server, no account. See SECURITY.md for the full accounting.
MIT licensed, clean-room Swift implementation, zero external dependencies. Read the source, audit the network calls, build it yourself.
One account per provider, polled on your own schedule. TokenWatch reads each provider's own local credentials — CLI Keychain items, OAuth token files, API keys you paste in — and talks to each provider's usage API directly.
No account, no sign-up. Install, enable the providers you actually use, and TokenWatch reads whatever's already on your Mac.
Via Homebrew, or download the signed & notarized DMG directly.
brew install --cask MetaPouch/tokenwatch/tokenwatchTokenWatch is a menu-bar-only app — no Dock icon, no window. Look for the icon in your menu bar; it opens System Settings' privacy prompts only if a provider needs Keychain or file access you haven't granted that tool yet.
Click the menu bar icon, then the gear. You'll see all thirteen supported providers with a toggle each.
Already signed into Claude Code, Codex, Cursor, Gemini, Copilot, Grok, or Antigravity via their own CLI or app? Just flip the toggle — TokenWatch reads the credential that's already there. For OpenRouter, z.ai, Kimi, OpenCode Go, Amp, or a raw OpenAI key, paste the key into the field that appears next to the toggle.
It leads with whichever tool you were most recently in and its cache state (today: Claude). No recent activity anywhere? It falls back to whichever enabled provider is closest to its limit.
One card per enabled provider: usage percent, resets, credit balances, spend. Refresh on demand with the toolbar button, or let it poll on its own schedule (default 5 minutes, adjustable in Settings).
Everything below stays true to the one rule this app doesn't bend on: local only, nothing leaves your device. No feature here needs a server we operate.
Warm/cold badge with hit ratio and expiry, read from local session transcripts — no extra network call.
The status item leads with whichever provider you were most recently active in, instead of an unlabeled percentage.
Same local-session-log approach, extended to Codex's `~/.codex/sessions` transcripts and OpenRouter's 10-minute sticky-routing window.
Sum local session tokens per model over the last 7 days — which model actually burned your weekly limit.
Estimate today's/this week's spend from local token counts and public pricing tables — no Admin API key required, the way ccusage does it for Claude.
A sparkline of usage over the last 7/30 days per provider — the data model already has a chart line type, just no provider populates it yet.
A native notification when an enabled provider crosses 90% used, so you find out before the rate limit does it for you.
Sparkle-based update checks against signed release artifacts — still no telemetry, just "is there a newer signed build."