Setup guide
Before you start
You need macOS 14 or later and a working Claude Code install that you have signed into at least once. Claude Usage reads only what Claude Code already stores on your Mac — it has no account of its own and nothing to sign up for.
Install
With Homebrew:
brew tap saeedkolivand/tap
brew trust --cask saeedkolivand/tap/claude-usage
brew install --cask claude-usage
The trust step is not optional. Since Homebrew 6.0,
third-party taps must be trusted explicitly before Homebrew will
evaluate their code — a response to a real incident where a
compromised tap was used to ship malware. Trusting one cask by name
is the narrowest scope; brew trust saeedkolivand/tap
would cover everything in the tap, now and in future.
Prefer a download? Grab the .dmg from
Releases
and drag the app to Applications. Builds are ad-hoc signed rather
than notarized, so macOS quarantines them and will call the app
damaged on first launch. The cask clears that for you; after a manual
install, run:
xattr -dr com.apple.quarantine "/Applications/Claude Usage.app"
First launch
Claude Usage has no Dock icon — it lives in the menu bar. On first run two things happen:
-
macOS asks for Keychain access. Claude Code keeps
its access token in the login Keychain, and reading it from another
app needs your say-so. Choose Always Allow so it
stops asking. Decline and the limit gauges show
--; tokens and cost still work, since those come from transcripts on disk. - History backfills once. The app reads your whole transcript archive to seed the 14-day chart, which can take a few seconds on a busy machine. It happens once, in the background.
Add the widget
Right-click the desktop, choose Edit Widgets, find Claude Usage, and drag out the size you want. The app must have run at least once for the widget to appear.
A freshly placed widget shows a placeholder for up to a minute. That is expected: macOS creates the widget's sandbox container the first time it runs, and the app fills it on the next poll.
Not showing up at all? Run killall chronod to make macOS
rescan its widget extensions.
Configure a widget
Right-click any placed widget and choose Edit Widget. Each one is configured separately, so you can place several with different scopes.
Profile
Which Claude account this widget shows. Most people have one and can ignore this.
Project
Leave it empty for the whole account. Pick a project and the widget narrows to that working directory: today's tokens and cost, its share of the week, and a 7-day chart.
A project-scoped widget has no limit gauges, and that is deliberate rather than missing. The 5-hour and weekly percentages are reported per account, so there is no such thing as a single project's limit.
Settings
Open them from the menu bar popover.
Profile
Which account the menu bar itself shows. A profile is a Claude Code
config folder — one logged-in account. Relocating that folder with
CLAUDE_CONFIG_DIR is the only way Claude Code supports
more than one, so that is what the list looks for:
~/.claude, anything beside it whose name starts with
.claude, and folders you add with
Add Folder…. A folder counts when it contains a
projects directory.
One caveat on macOS. Claude Code stores its token in
the login Keychain under a single name, with no per-account variant,
so only your default profile can read a token from there. A second
profile needs its own .credentials.json inside its
config folder. Without one it reports no token rather than
borrowing the default account's token and showing you the wrong
percentages. Tokens and cost still work either way.
Menu bar shows
Whether the number in the menu bar is the 5-hour window or the
weekly one. Past your red threshold it gains a
! prefix — menu bar items are drawn as template images,
so colour would be stripped and a symbol is the only signal that
survives.
Amber and Red thresholds
Where the gauges change colour, defaulting to 50% and 80%. They also travel to the widgets, so everything agrees.
Open at login
Registers the app as a login item. This needs a properly signed build; on an ad-hoc one the toggle reports the error rather than silently flipping back.
Updates
Shows the running version and whether a newer release exists,
checking GitHub four times a day. Check Now forces
one. Nothing is ever downloaded or installed for you — update with
brew upgrade --cask claude-usage, or the link to the
release notes.
User-Agent (Advanced)
Sent to the usage endpoint. It must begin with
claude-code/ or the API serves a heavily rate-limited
bucket. Only worth touching if the version string ever goes stale.
If something looks wrong
"Sign in with Claude Code"
No usable token. Run claude once and sign in. If you use
a non-default profile, check it has its own
.credentials.json — see the profile caveat above.
"No connection", or numbers marked outdated
The usage endpoint didn't answer. The app keeps showing the last good figures and labels them outdated rather than blanking the display. It retries on its own; Refresh forces one immediately.
"No Claude Code data found"
No config folder with a projects directory was found. If
yours lives somewhere unusual, add it with
Add Folder… in Settings.
Tokens and cost look low
Cost is computed from token counts in your local transcripts, so it only covers what Claude Code wrote to disk. On Pro and Max plans it is notional equivalent API spend, not money you were charged.
Still stuck?
Open an issue on GitHub.