Setup guide

Install, add the widget, pick a profile. A couple of minutes, start to finish.

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:

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.

Blank after updating from 0.2 or earlier? Remove the widget and drag out a fresh one. Widgets became configurable in 0.3, and macOS cannot migrate an already-placed widget across that change — it fails the timeline request outright (Intent configuration is required but was not provided). A widget configured under 0.3.0 or 0.3.1 likewise needs its profile picked again; the stored selection changed format in 0.3.2 and an old one reads back as unset, so the widget quietly shows the default account.

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 names each profile's Keychain item after the config folder it was signed into: Claude Code-credentials for the default ~/.claude, and Claude Code-credentials-<8 hex> — a hash of the folder path — for anything relocated with CLAUDE_CONFIG_DIR. That hash is taken over the literal string you exported, so ~/.claude-work, $HOME/.claude-work and /Users/you/.claude-work/ are three different items. The app tries the plausible spellings and shows the one it looks for beside Folder in Settings; if yours is unusual the profile reports no token. Tokens and cost still work either way, since those come from transcripts on disk.

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. On a non-default profile, compare the Keychain name in Settings against what you actually have:

security dump-keychain | grep -o '"svce"<blob>="Claude Code[^"]*"' | sort -u

No match means the folder path was spelled differently when you signed in — 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.