Everything ClaudeLimits does, and how to make it yours. It's a single menu-bar app — there's not much to learn, but here it all is.
ClaudeLimits ships as a regular .app. Move it to
/Applications and open it.
It's a small indie build, so the first launch goes through Gatekeeper. If macOS says it can't verify the developer, right-click the app → Open → Open, or allow it from System Settings → Privacy & Security.
Drag in, hit the warning on first launch, then right-click → Open to let it through — once only.
Once open, four numbers appear in your menu bar — and that's it. There's no window and no Dock
icon; the app is a menu-bar agent (LSUIElement).
The readout is two lines:
63% 2h ← 5-hour window
41% 4d ← weekly window
Each line is percent used followed by time until that window resets. Claude Code limits you on two clocks at once — a rolling 5-hour budget and a weekly one — so the top line is the 5-hour window and the bottom line is the week.
| You see | Means |
|---|---|
63% | 63% of that window's budget is used up |
2h / 45m / 4d | time left until it resets (hours / minutes / days) |
— or blank | data not available yet (still loading, or no token in the Keychain) |
Sometimes the readout shows something other than numbers. Here's what each state looks like:
Loading shows dots; no token shows lim/! in red; a 429 keeps the last good numbers and quietly retries.
Left-click the menu-bar icon and a small panel drops open — laid out
just like /usage inside Claude Code. It opens instantly, with no
fade or delay, and while it's open it updates live: the moment a fresh reply
lands from the server, the numbers and bars move on their own.
It's headed Plan usage, with an arrow → on the right that
takes you to claude.ai/settings/usage for the full picture. Below the heading are
three rows, each one a label, the percent used, the time until that window resets, and a
progress bar:
| Row | Means |
|---|---|
| 5-hour limit | The rolling 5-hour budget — the same short window as the top menu-bar line. |
| Weekly · all models | The weekly budget across every model combined. |
| Opus only / Sonnet only | The weekly per-model budget. Which one you see depends on your plan (see below). |
Each progress bar is tinted by load, so a glance tells you how much room is left: it stays neutral while you're comfortable, then shifts yellow, orange, and red as you fill up — the same 50 / 75 / 90% steps as the colour readout.
The third row is per-model, and it reads Opus only or Sonnet only depending on your plan — it surfaces whichever model your plan meters separately, so you won't see both at once.
429), the panel doesn't go blank.
It keeps the last good numbers on screen and shows a small retry in ~Nm until it's
allowed to fetch again. See Refresh cadence
& rate limits.Right-click (or ctrl-click) the menu-bar icon to open the menu. (A plain left-click opens the usage panel instead.)
The Auto-refresh in … line is read-only — a greyed-out countdown, not a button. It shows when the OAuth token will be silently refreshed in the background:
Greyed out and unclickable — purely informational. No action needed.
| Item | What it does |
|---|---|
| Refresh | Fetch the latest numbers right now |
| View | Switch between Mono and Colour — a tick marks the active one |
| Settings | Section heading for the three items below — Launch at login, Refresh on open only, and the auto-refresh status (see Settings) |
| · Launch at login | Start ClaudeLimits automatically with your Mac |
| · Refresh on open only | Stop background polling; refresh only when you open the panel (see Refresh cadence) |
| · Auto-refresh in … | Read-only countdown showing when the OAuth token will be silently refreshed in the background — no action needed |
| About & Permissions… | Shows exactly what the app accesses — Keychain, network, login item — and what it never touches |
| Product page ↗ | Open the ClaudeLimits product page in your browser |
| Restart | Relaunch the app |
| Quit | Stop the app |
All choices are remembered between launches.
About & Permissions… opens a small panel that spells out exactly what the app touches on your Mac — and, just as importantly, what it never touches:
It uses only the Keychain, two Anthropic hosts, and an optional login item — and never asks for Accessibility, Screen Recording, Full Disk Access, the camera, or the microphone.
ClaudeLimits reads the numbers straight from your account, the same way Claude Code does. It takes
your OAuth token from the Keychain entry Claude Code-credentials and calls
https://api.anthropic.com/api/oauth/usage. The result matches what
/usage shows inside Claude Code, to the digit — no estimates, no guesswork.
Polled every 10 minutes, because Anthropic rate-limits this endpoint — see Refresh cadence & rate limits below.
ClaudeLimits refreshes on its own every 10 minutes, not continuously. That's a deliberate choice, and it's worth explaining why — because the same endpoint that makes the numbers exact is also the one Anthropic guards most closely.
The figures come from /api/oauth/usage — the very endpoint Claude Code's own
/usage reads. Anthropic strictly rate-limits that endpoint. This is
not an account ban or anything to worry about: Claude Code and everything else keep working
normally. It's only this one endpoint that gets temporarily throttled if it's polled too eagerly.
We measured it directly. Polling once every 60 seconds, the server reliably starts replying
HTTP 429 (rate_limit_error) — its way of saying too often, slow
down. When it does, it also returns a Retry-After header of roughly
50–60 minutes: the window you're expected to stay quiet for.
If the server ever does return a 429, ClaudeLimits does the polite thing rather than
keep knocking — because knocking only extends the penalty. Specifically, it:
Retry-After exactly — it pauses for precisely the window
the server asked for, then resumes polling on its own.retry in ~Nm until it's allowed
back, so the readout never goes blank on you.For comparison, Claude Code's own /usage feels live for the same reason:
it caches the last answer rather than hitting the endpoint every second.
If you'd rather produce zero background traffic, there's a toggle for it.
Open Settings in the menu and turn on Refresh on open only.
Background polling stops completely: the numbers refresh only when you open the panel
(left-click the menu-bar icon) — exactly the way /usage behaves inside Claude Code,
fetching on demand rather than on a timer.
The same safeguards still apply. Even on open it won't fetch more than once every 10 minutes
(open it sooner and you simply see the last cached numbers), and it still honours a
Retry-After backoff after a 429. And while the panel is open, it
updates live the moment the server's reply lands.
Left: a quiet timer fetches on its own every 10 min. Right: nothing happens until you open the panel, then it pulls the numbers.
| Every 10 min (default) | On open only | |
|---|---|---|
| Background polling | Yes, every 10 min | None |
| When numbers refresh | On its own, plus on open | Only when you open the panel |
| Network traffic at rest | One request / 10 min | Zero |
| How fresh the numbers are | Always within 10 min | As of the last time you looked |
| Min interval between fetches | 10 minutes — and Retry-After backoff after a 429 — in both modes | |
Mono renders the numbers as a normal template glyph — it follows your menu-bar appearance (dark/light) like any other system icon, and stays visually quiet.
One neutral colour for everything — it inherits the menu-bar theme (dark or light) like any template icon.
Colour tints the percentage by how close you are to the cap, mirroring Claude's own warning steps. The time-to-reset next to it stays a calm grey — so your eye lands on the number that matters, not the clock:
| Used | Colour |
|---|---|
| < 50% | blue — plenty left |
| ≥ 50% | yellow — over halfway |
| ≥ 75% | orange — getting close |
| ≥ 90% | red — almost out |
The four steps side by side, the way the percentage actually shifts colour as the window fills:
Only the percentage takes the colour; the time-to-reset stays a calm grey.
There's almost nothing to tune — the app keeps its handful of settings in standard
UserDefaults under its bundle id com.kolocim.claudelimits.
You can adjust them from Terminal, then relaunch the app:
# view: "mono" or "color"
defaults write com.kolocim.claudelimits color_mode -bool true
# custom User-Agent for the usage request (advanced)
defaults write com.kolocim.claudelimits user_agent -string "claude-cli/1.0"
The menu's Settings section holds two toggles:
| Toggle | What it does |
|---|---|
| Launch at login | Start ClaudeLimits automatically with your Mac, so it quietly reappears in the menu bar after every reboot. Off by default. |
| Refresh on open only | Stop background polling entirely and refresh the numbers only when you open the panel — the most account-friendly mode, with zero background traffic. See Refresh cadence & rate limits for the full picture. Off by default. |
Both are toggled straight from the menu — no system dialogs, and your choice is remembered between launches.
No account, no sign-up, no analytics, no telemetry. Nothing about your usage ever leaves your
Mac, with a single exception: the app makes one request to Anthropic's own API
(api.anthropic.com) using your existing token — the exact same call Claude Code
itself makes. That's the only network traffic it ever produces.
—Claude Code isn't signed in on this Mac, so there's no token in the Keychain. Sign in once and press Refresh.
You may have been rate-limited for refreshing too often. The app handles this on its own: it waits out the window Anthropic asks for, keeps your last numbers on screen, and resumes its safe 10-minute polling automatically. See Refresh cadence & rate limits.
Gatekeeper. Right-click the app → Open → Open, or allow it in System Settings → Privacy & Security.