v1.55.0 — menu bar reads usage from the CLI status line (no oauth/usage fetch)
Menu bar drops its own subscription-% fetch — 429s killed at the root
The macOS menu bar no longer calls /api/oauth/usage itself. That token-shared burst across clients (the app launch fetch, the status line, every cdt-menubar status) was the sole cause of the recurring 429 rate limited state — the v1.54.0 cadence/jitter/launch-guard work only tamed it.
It is now a pure reader of ~/.claude/.cdt-usage.json, the cache the CLI status line already fills from Claude Code's native rate_limits payload. No network call and no Keychain read anywhere in the app — the strongest form of the read-only-credentials principle.
Changed
- Deleted
SubscriptionAPI.swift+Keychain.swiftand all the backoff/heartbeat/in-flight/rate-limit/token-fingerprint machinery inUsageStore.swift(~280 → ~115 lines). A 30s timer re-reads the local cache;refreshNow()/ wake-from-sleep just re-read. - The badge still shows session % over weekly %; the dropdown now shows Usage → Session / Weekly. Dropped (endpoint/Keychain-only) the plan label
Max 5x, weekly-Sonnet %, reset countdowns, and the 429 retry note. - Staleness, not errors: a reading older than 30 min is grayed with an "as of" time; an empty cache prompts
cdt-config statusline on(the status line is now the sole writer of session/weekly %). cdt-menubar statusis cache-only (no--live/--fresh).
Notes
- Enable the CDT status line (
cdt-config statusline on) so the menu bar has data to read. - After
/plugin update, runcdt-menubar build(or it auto-updates next session) to get the v1.55.0 app. A notarized DMG is a separate signed step (menubar/release.sh).
🤖 Generated with Claude Code