One menu bar for every AI coding tool, across every Mac.
MyUsage talks to Claude Code, Codex, Cursor, and Antigravity, and aggregates usage across every Mac you own — through a folder you already sync. No backend. Free, MIT, zero third-party dependencies.
The provider UIs each show only what their device knows.
If you use Claude Code, Codex, Cursor, or Antigravity — and especially if you use them across more than one Mac — the official UIs only show what's happening on the device you're sitting at. You hit a weekly limit on Friday afternoon because your laptop has been chewing through tokens all morning while your desktop's "remaining" number lied to you.
That's the gap MyUsage fills. Each Mac runs the app, talks to the providers it has credentials for, and writes a tiny JSONL snapshot into a folder you already sync. The popover then shows the aggregate across every Mac sharing that folder. No MyUsage backend exists; the sync transport is whatever you already use.
A small surface that does one thing well.
Multi-device aggregation
Each Mac drops a per-device JSONL into <sync-folder>/devices/<id>/. Use iCloud, Syncthing, Dropbox, NAS — same to MyUsage. The popover totals across every Mac sharing that folder.
Burn-rate projection — alarm only
When current burn rate would push a limit past 100% before reset, the bar gets a dashed marker overflowing past the right edge plus a projected 145% note in warn-amber. Healthy projections stay silent — the bar fill alone tells you you have headroom.
Per-bucket weekly breakdown
Anthropic's /api/oauth/usage exposes plan-dependent sub-caps — model families and product lines (Claude Design, Cowork, OAuth apps). MyUsage surfaces every non-zero bucket as an indented row under the weekly bar. Plans without sub-caps show none.
Limit-pressure notifications
Native macOS notifications fire the moment any tracked limit crosses your warn / crit threshold (default 80% / 95%, both tunable). Idempotent — the same percent across two refreshes never double-fires.
UNUserNotificationCenter · per-provider state machine · resets on window rollover
Privacy-respecting device identity
Multi-device sync uses a salted SHA-256 of IOPlatformUUID, reshaped to RFC 4122 UUIDv4 form. The raw hardware UUID never leaves the process. Reinstalling re-derives the same ID — no ghost devices.
SHA-256 ( "MyUsage.v1" │ IOPlatformUUID ) → RFC 4122
In-app update channel
On launch, MyUsage checks GitHub Releases and shows a banner when a newer tag is available. The banner can fetch the new .zip for you and open Finder pre-positioned for the drag into /Applications.
No Sparkle · no auto-install · explicit drag
Two camps: tokens-you-compute-dollars vs. dollars-given.
| Provider | Data source | What you see |
|---|---|---|
OAuth API~/.claude/.credentials.json | 5 h session + weekly bars · per-bucket breakdown · burn-rate projection · monthly cost (multi-device) | |
OAuth API~/.codex/auth.json | 5 h session + weekly bars · burn-rate projection · monthly cost (multi-device) · credits | |
Local SQLite + Connect RPCstate.vscdb | Included quota + on-demand budget bars · billing-cycle countdown | |
| Local language server probe | Per-model quota bars · IDE running indicator |
A folder you already sync.
The "no backend" claim is load-bearing — there is genuinely no MyUsage-operated server anywhere. Each Mac writes a per-device snapshot into a folder you already sync (iCloud, Syncthing, Dropbox, NFS, anything). The popover reads every other device's folder and totals them.
The device ID is a salted SHA-256 of IOPlatformUUID, reshaped to RFC 4122 UUIDv4 form, cached in UserDefaults. Reinstalling MyUsage on a Mac re-derives the same ID. Read the multi-device sync deep dive for the full design and edge cases.
Three drags, then it's running.
- Download the latest
MyUsage-<version>.zipfrom GitHub Releases, unzip. - Drag
MyUsage.appto/Applications/. - First launch: right-click → Open (Gatekeeper will prompt once, then remember).
.sha256. See the full install guide if Gatekeeper blocks you.
Built for this exact problem, by someone who has it.
MyUsage is open source under MIT, written entirely in Swift 6 / SwiftUI. The codebase ships ~227 unit tests covering the parsing, sync, and notification layers. The whole binary is under 8 MB because there are zero third-party dependencies — everything runs on first-party Apple frameworks.
The development story (multi-device sync architecture, locally-computed cost pipeline) lives in the blog. Release history in the CHANGELOG.