TokenWatch

macOS menu bar · open source · local only

One glance at every AI account you're burning through.

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.

brew install --cask MetaPouch/tokenwatch/tokenwatch
Signed & notarized macOS 14+ MIT licensed Zero dependencies

Built for people who use more than one

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.

🔥 Cache temperature

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.

🕓 Last tool used

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.

Closest to the wall

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.

One dashboard, pick your provider

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.

🔒 Local only

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.

Open source

MIT licensed, clean-room Swift implementation, zero external dependencies. Read the source, audit the network calls, build it yourself.

Thirteen providers, one menu bar

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.

Claude OAuth Codex / ChatGPT auth.json OpenAI API API key Cursor local session GitHub Copilot reused sign-in Gemini OAuth Antigravity local token OpenRouter API key z.ai API key Kimi API key Amp CLI / API key Grok auth.json OpenCode Go API key

Get started

No account, no sign-up. Install, enable the providers you actually use, and TokenWatch reads whatever's already on your Mac.

Install

Via Homebrew, or download the signed & notarized DMG directly.

brew install --cask MetaPouch/tokenwatch/tokenwatch

Launch it

TokenWatch 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.

Open Settings

Click the menu bar icon, then the gear. You'll see all thirteen supported providers with a toggle each.

Enable what you use

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.

Read the menu bar

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.

Click for the full dashboard

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).

Roadmap

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.

SHIPPED

Cache temperature (Claude)

Warm/cold badge with hit ratio and expiry, read from local session transcripts — no extra network call.

SHIPPED

Last-tool-used menu bar indicator

The status item leads with whichever provider you were most recently active in, instead of an unlabeled percentage.

PLANNED

Cache temperature for Codex & OpenRouter

Same local-session-log approach, extended to Codex's `~/.codex/sessions` transcripts and OpenRouter's 10-minute sticky-routing window.

PLANNED

Per-model usage breakdown

Sum local session tokens per model over the last 7 days — which model actually burned your weekly limit.

PLANNED

Local cost estimation

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.

PLANNED

Historical usage charts

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.

PLANNED

Threshold notifications

A native notification when an enabled provider crosses 90% used, so you find out before the rate limit does it for you.

PLANNED

In-app auto-update

Sparkle-based update checks against signed release artifacts — still no telemetry, just "is there a newer signed build."