Website: efim0v.github.io/brow
A macOS app that shows the usage and rate limits of every Claude Code account you have, right in the MacBook notch: the 5-hour limit, the weekly limit, and when each resets. One click signs you in to an account in a browser profile that belongs to that account alone.
It is for people who keep several Claude subscriptions and run a separate stream of AI-assisted work on each. Brow shows at a glance which account is close to its limit, which has room, and when each one frees up. It works with a single account too: Brow picks up ~/.claude by itself and shows that account's limits.
Download Brow for macOS or brew install --cask efim0v/tap/brow · macOS 26 or later, Apple silicon · install notes
Hover the notch: every account's 5-hour and weekly limits open out of it. Copy an account's launch command and Claude Code starts as that account.
The calendar marks every account's weekly resets and subscription renewals. Point at a day to see what frees up.
When an account's sign-in expires, the key next to it starts claude auth login for that account and opens the browser profile that belongs to it, already signed in to that account. Other accounts stay signed in.
All demos show made-up demo data.
Companion app: Grove. Grove gives each feature of a multi-repo project its own workspace for Claude Code and moves a session from one account to another. Brow tells you which account has room; Grove moves the work there. Each runs on its own, and they are built to be used together.
- Every account at a glance. For each account: the 5-hour limit, the weekly limit and any model-specific weekly limit, as percent used, with the time until each resets.
- A reset calendar. Weekly resets and estimated subscription renewals on a month grid, so you can see which account frees up when.
- Copy the launch command. One button copies the command that starts Claude Code as that account.
- Sign in again, in that account's own browser. Each account gets a separate browser profile — its own cookies, history and saved logins — so signing in to one never disturbs another. A second button opens that profile directly.
- Add an account in one click. Brow creates the account folder and opens Anthropic's own sign-in flow.
- Tokens kept fresh. Idle accounts are refreshed in the background, so the numbers do not go stale.
Separate browser profiles need Google Chrome, Chromium, Brave or Edge. Without one of them links open in your default browser, with no isolation. More detail on pacing, refresh and layout options is in docs/brow.md.
Collapsed, Brow shows two numbers beside the notch: how much of the 5-hour limit and of the weekly limit is used across your accounts. Hover and it opens into the panel above. The readouts can also sit in a strip below the notch:
Worth knowing before you run it:
- Brow reads Claude Code's sign-in token from the macOS Keychain and uses it only to call Anthropic's usage and profile endpoints. Those endpoints are not a documented public API and may change. No token is written to disk or logged, and nothing is sent anywhere else. If macOS withholds an account's token, that account shows a key; pressing it asks macOS for access.
- The fallback token refresh is on by default. If the normal refresh stops working Brow runs a tiny
claude -prequest, which spends a little limit and starts that account's 5-hour window. Turn it off in Settings → Accounts; the FAQ says exactly when it runs. - Each account's browser profile is a separate directory under
~/Library/Application Support/Brow/browser-profiles/. Brow sets the profile's name and allows third-party cookies in it so that sign-in works. - Signing in opens Terminal with
claude auth login; macOS asks once for permission to control Terminal.
This is an independent tool, not affiliated with or endorsed by Anthropic.
- macOS 26 or later; the prebuilt app is Apple silicon only. The notch layout is for MacBooks with a notch; on other displays Brow shows a pill.
- Xcode with Swift 6.2, to build.
- Claude Code.
- For separate browser profiles: Chrome, Chromium, Brave or Edge.
brew install --cask efim0v/tap/browOr download Brow.zip from the latest release, unzip it and move Brow.app to /Applications.
The build is signed ad hoc and is not notarized by Apple, so macOS blocks the first launch whichever way you installed it. Open System Settings → Privacy & Security, find the message about Brow and press Open Anyway — or clear the quarantine flag yourself:
xattr -dr com.apple.quarantine /Applications/Brow.appIf macOS withholds an account's Keychain item from Brow, that account shows an orange key and Settings → Accounts lists its token as Keychain access needed: press the key, or Grant Keychain access there, and choose Always Allow. Because the build is signed ad hoc, the key can come back after you update to a newer build.
SHA256SUMS.txt in the release is there to check the download against: with both files in one folder, run shasum -a 256 -c SHA256SUMS.txt.
Brow has no Dock icon: it lives in the notch, and its settings open from the ⚙ in the panel. Turn on Launch at login in Settings → General to start it when you log in.
Only through the fallback token refresh, and you can turn that off. Reading the limits is a request to Anthropic's usage endpoint, not to a model, and an idle account's token is kept fresh with claude doctor, which makes no model call.
The fallback is on by default. When an account's token has 30 minutes or less left and claude doctor did not renew it, Brow runs a one-turn claude -p request on Haiku in that account. That spends a sliver of the account's limit and starts its 5-hour window. Brow skips it when Anthropic has rejected the token or claude doctor timed out or could not start, runs it at most once every 30 minutes per account, and stops using it for an account after three attempts in a row that did not help. Settings → Accounts → Allow claude -p fallback turns it off.
From the Keychain item Claude Code keeps for each account: Claude Code-credentials for ~/.claude, Claude Code-credentials-<hash> for any other account folder. Brow reads it with macOS's security tool and falls back to the Keychain API; with older Claude Code installs it reads .credentials.json in the account folder instead. It uses the access token only and leaves renewing it to Claude Code.
Brow's own network requests go to two Anthropic endpoints and nowhere else: api.anthropic.com/api/oauth/usage for the numbers and, about once a day per account, api.anthropic.com/api/oauth/profile for the renewal estimate in the calendar. Brow has no analytics and no update check. The claude commands it runs make Claude Code's usual connections, and the per-account browser profiles open claude.ai.
macOS 26 or later; the prebuilt app is Apple silicon only. Brow sits at the top of the main display. If that display has a notch, the two readouts sit beside it (the default) or in a strip below it: Settings → General → Ears. Turn off Show readouts next to the notch in the same tab and nothing is drawn until the pointer reaches the notch. When the main display has no notch, an external display for instance, Brow shows a pill at the top centre instead.
-
If you turned on Launch at login, turn it off in Settings → General. Then quit Brow with ⌘Q while its Settings window is in front.
-
Delete the app:
brew uninstall --cask efim0v/tap/brow, or moveBrow.appfrom/Applicationsto the Trash. -
Close any browser window Brow opened for an account, then delete Brow's files: its settings, cached readings and per-account browser profiles (cookies and saved passwords included), the request-pacing file it keeps in Grove's folder, and what macOS stored for its network requests:
rm -rf ~/Library/Application\ Support/Brow rm -f ~/Library/Application\ Support/Grove/oauth-usage-ledger.json rm -rf ~/Library/Caches/dev.artemefimov.brow ~/Library/HTTPStorages/dev.artemefimov.brow
-
If you added Brow's
export BROWSER=…line to~/.zshrc, remove it.
If you deleted the app first and Brow is still listed in System Settings → General → Login Items & Extensions, remove it there. Account folders under ~/.claude-accounts belong to Claude Code and keep working without Brow.
Claude Code keeps each account in its own directory: ~/.claude for the default account and ~/.claude-accounts/<name> for the others. Both apps read those directories; neither talks to the other directly.
- Accounts. Brow creates account folders when you sign in; Grove picks them up and can launch any session under any of them.
- The browser router. Brow ships a small script that opens links in the right account's browser profile. When Brow is installed, Grove passes that script to every Claude Code session it starts, so a sign-in prompt from a session lands in the right profile.
- Shared code. The account, credential and usage logic lives in Grove's
GroveCorelibrary, which this package depends on.
The full picture, including how sessions are shared between accounts, is in Grove's README and in docs/grove-and-brow.md.
git clone https://github.com/efim0v/brow.git
cd brow
swift test # fetches GroveCore from the Grove repository
Scripts/build-brow.sh # -> dist/Brow.app
cp -R dist/Brow.app /Applications/The app is signed ad hoc by default. macOS then forgets the Keychain and Automation permissions on every rebuild; to keep them, set GROVE_SIGN_IDENTITY to your own Apple Development: Name (TEAMID) identity before building.
| Path | What it is |
|---|---|
Sources/BrowKit |
The app: notch panel and geometry, limits store, views, settings |
Sources/BrowApp |
Entry point |
Resources/brow-browser.sh |
The per-account browser router |
Tests/BrowKitTests |
About 150 tests |
docs |
Brow in detail, how Brow and Grove fit together |
The only dependency is GroveCore from the Grove repository.
- The screenshots in this README are regenerated with
DEMO_SCREENSHOTS_DIR="$PWD/docs/screenshots" swift test --filter DemoScreenshotTests. - The notch outline's tuning constants are in
Sources/BrowKit/Panel/NotchGeometry.swift; they are meant to be tuned by eye against the physical bezel.
GNU GPL v3. Version 0.2.0 and earlier were released under the MIT License.


