Problem / outcome
mindbase/apps/menubar-swift already runs as a native macOS menu bar app (MenuBarExtra +
FSEvents) with health monitoring and an auto-collection toggle, but it has no visibility into
AI coding tool usage/rate limits. Users who already have this app running have no single place
to see how close they are to hitting a rate limit across the coding assistants they use.
Evidence and current behavior
mindbase/apps/menubar-swift/Sources/MindBaseMenubar/MindBaseMenubar.swift(375 lines)
implements menu bar residency, health monitoring (URLSession), and an auto-collection toggle.
No rate-limit/usage/quota display exists (grep -i "rate.limit\|usage\|quota" against this
file returns zero matches).
- The app already has a
ConversationWatcher (FSEvents) monitoring ~/.claude, ~/.cursor,
and ~/Library/Application Support/Windsurf — i.e. it already knows where these tools keep
their local state, which is the natural place to also read rate-limit/usage data from.
Reproduction or baseline
Current: swift build --configuration release && ./.build/release/MindBaseMenubar, then opening
the menu shows only health status and the auto-collection toggle — no usage/rate-limit info.
Expected behavior
- The menu bar app's menu shows current rate-limit/usage status for the coding assistants it
already watches (at minimum Claude Code; extensible to others).
- The data is read from each tool's existing local state (no new login/credential required —
same local-first philosophy as the rest of the app).
- If a data source is temporarily unreadable, the app does not crash; it shows a clear
"unavailable" state for that source instead.
Scope
- Add rate-limit/usage display to
mindbase/apps/menubar-swift.
- Read rate-limit/usage data from each tool's existing local state files.
Non-goals
- Any change to how conversations are collected/stored (existing
ConversationWatcher behavior
is unchanged).
- Cross-tool routing/optimization logic — this Issue is display-only.
Acceptance criteria
Verification plan
| Criterion |
Verification |
Expected |
| AC-1 |
swift test --package-path mindbase/apps/menubar-swift (new test) |
exit 0; rate-limit display logic test passes |
| AC-2 |
Same, missing-data-source fallback test |
exit 0; no crash |
| AC-3 |
Existing test suite under Tests/MindBaseChatTests (or equivalent) |
exit 0 |
Risks, dependencies, rollout
- No dependency on other Issues; this is additive to the existing app.
Clarifications and assumptions
- Assumption: the exact source of rate-limit data (which local file/path per tool) is an
implementation detail left to the implementer; AC-1/AC-2 verify correctness by observed
behavior rather than by a specific file path.
Problem / outcome
mindbase/apps/menubar-swiftalready runs as a native macOS menu bar app (MenuBarExtra +FSEvents) with health monitoring and an auto-collection toggle, but it has no visibility into
AI coding tool usage/rate limits. Users who already have this app running have no single place
to see how close they are to hitting a rate limit across the coding assistants they use.
Evidence and current behavior
mindbase/apps/menubar-swift/Sources/MindBaseMenubar/MindBaseMenubar.swift(375 lines)implements menu bar residency, health monitoring (URLSession), and an auto-collection toggle.
No rate-limit/usage/quota display exists (
grep -i "rate.limit\|usage\|quota"against thisfile returns zero matches).
ConversationWatcher(FSEvents) monitoring~/.claude,~/.cursor,and
~/Library/Application Support/Windsurf— i.e. it already knows where these tools keeptheir local state, which is the natural place to also read rate-limit/usage data from.
Reproduction or baseline
Current:
swift build --configuration release && ./.build/release/MindBaseMenubar, then openingthe menu shows only health status and the auto-collection toggle — no usage/rate-limit info.
Expected behavior
already watches (at minimum Claude Code; extensible to others).
same local-first philosophy as the rest of the app).
"unavailable" state for that source instead.
Scope
mindbase/apps/menubar-swift.Non-goals
ConversationWatcherbehavioris unchanged).
Acceptance criteria
rate-limit percentage (5h/7d windows) is shown.
menu, then the app does not crash and shows an explicit "unavailable" indicator for that
source instead of stale or fabricated data.
this change (no regression).
Verification plan
swift test --package-path mindbase/apps/menubar-swift(new test)Tests/MindBaseChatTests(or equivalent)Risks, dependencies, rollout
Clarifications and assumptions
implementation detail left to the implementer; AC-1/AC-2 verify correctness by observed
behavior rather than by a specific file path.