Skip to content

v1.55.0 — menu bar reads usage from the CLI status line (no oauth/usage fetch)

Choose a tag to compare

@jaysonventura jaysonventura released this 26 Jun 15:29
f6cca2a

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.swift and all the backoff/heartbeat/in-flight/rate-limit/token-fingerprint machinery in UsageStore.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 status is 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, run cdt-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