Menu bar · Native macOS · MIT

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.

macOS 14+ ~8 MB binary 0 dependencies 227 tests
MyUsage 3 sec ago
Claude
Claude Code Max
5-hour 47%
resets 2h 14m · 16:30
Weekly 62%
resets 5d 12h · Tue 09:00
This month ~$543.57⊕ 3
Codex
Codex Plus
5-hour 6%
resets 4h 46m · 19:00
Why MyUsage

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.

What you get

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.

MyUsage
Claude
Claude Code Max
Weekly 62%
resets Sun
This month ~$543.57⊕ 3

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.

MyUsage
Claude
Claude Code Max
Daily cap 88%
resets in 4h · 18:30 projected 145%

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.

MyUsage
Claude
Claude Code Max
Weekly 62%
resets Tue 09:00
sonnet42%
design14%
cowork6%

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

Providers

Two camps: tokens-you-compute-dollars vs. dollars-given.

Provider Data source What you see
Claude
Claude Code
OAuth API
~/.claude/.credentials.json
5 h session + weekly bars · per-bucket breakdown · burn-rate projection · monthly cost (multi-device)
Codex
Codex
OAuth API
~/.codex/auth.json
5 h session + weekly bars · burn-rate projection · monthly cost (multi-device) · credits
Cursor
Cursor
Local SQLite + Connect RPC
state.vscdb
Included quota + on-demand budget bars · billing-cycle countdown
Antigravity
Antigravity
Local language server probe Per-model quota bars · IDE running indicator
Architecture

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.

Mac · Air Mac · Studio Mac · mini SYNC FOLDER devices/7F3C…/ devices/4E91…/ devices/B8D7…/ writes own subfolder reads peer subfolders

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.

Install

Three drags, then it's running.

  1. Download the latest MyUsage-<version>.zip from GitHub Releases, unzip.
  2. Drag MyUsage.app to /Applications/.
  3. First launch: right-click → Open (Gatekeeper will prompt once, then remember).
Why the Gatekeeper warning? MyUsage is ad-hoc signed (no paid Apple Developer certificate). The binary is the same one published in GitHub Releases — verify with the attached .sha256. See the full install guide if Gatekeeper blocks you.
Project background

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.