Are you the author? Sign in to claim
macOS menu bar AI usage monitor for multiple Claude and Codex accounts: quota, rate limits, and a smart launcher for Cla
by Jetto
Every AI subscription you own, at a glance, in your macOS menu bar,
plus a launcher that puts every session on the account whose quota goes furthest.
English · 繁體中文 · 简体中文 · 日本語 · 한국어
Tally is a native macOS menu bar AI usage monitor for Claude and Codex rate limits, built for people who run multiple Claude (Max/Pro) and Codex subscriptions and are tired of guessing which account still has room: every account's 5-hour session, weekly, and top-model quota windows sit side by side under a fleet gauge that pools them into one combined budget and forecasts how long it lasts at your measured pace, and the Smart pick starts every new session on the account whose quota goes furthest right now, weighing reset times, not just remaining percent, then follows through mid-conversation: rate-limit handoff, flagship-model rescue, and a status-line signal that shows which account is burning.
Menu bar usage meters already exist; what did not exist is one built for people who own several subscriptions at once:
~/.claude* login and Codex install is its own card: N accounts
side by side, not a single-account fallback chain. Drag cards to reorder; the order applies
everywhere.--no-handoff or TALLY_AUTO_HANDOFF=0).
If the server silently downgrades your model, a sibling account that can still serve your primary
model takes the conversation over instead, and only when nobody can does your configured
fallback pairing apply. Non-urgent switches wait for a quiet moment between turns./model one by one. A model or effort you typed
yourself is never touched, and --no-follow opts a session out.claude / codex commands
follow your launch policy; one click removes them just as cleanly.tally status --json (and to check the binding window before heavy multi-agent work);
removed just as cleanly.tally CLI. tally claude [args…], tally resume (move this directory's latest
conversation to another account), tally claude --account <name>, tally status
(add --json for a versioned machine-readable report: every account's windows, reset
times, and which account a launch would land on right now, ready for your own scripts,
hooks, and agent skills), tally add <provider> (log in one more account: next free
number picked and the config directory created for you; the main account's harness,
CLAUDE.md/AGENTS.md, skills, hooks, agents, settings, and conversation history, is
symlinked in by default so one setup serves every account, opt out with --no-share),
tally best-dir <provider>, all script-friendly.claude -p "/usage" and
codex app-server), which talk to their vendors with their own first-party identity and manage
their own credentials. Account discovery only checks that a login exists (an attribute probe);
nothing is ever read out.tally launcher reads a local snapshot
(~/.tally/snapshot.json: percentages and paths, never tokens), so opening ten terminals
costs zero extra reads.CLAUDE_CONFIG_DIR=~/.claude2 claude and log in), and/or~/.codex)Download the latest notarized DMG from Releases, drag Tally.app into Applications, and launch it. Updates arrive automatically in-app.
To use the tally CLI, link the copy bundled inside the app onto your PATH:
ln -s /Applications/Tally.app/Contents/Helpers/tally /usr/local/bin/tally
brew install xcodegen # once
git clone https://github.com/jettoai/tally && cd tally
xcodegen generate
xcodebuild build -project Tally.xcodeproj -scheme Tally -configuration Release -destination 'platform=macOS'
xcodebuild build -project Tally.xcodeproj -scheme TallyCLI -configuration Release -destination 'platform=macOS'
Then move Tally.app from DerivedData to /Applications, and put the tally binary on your PATH:
ln -s <build-products>/tally /usr/local/bin/tally
Or skip the symlink and the aliases entirely: Settings → Integrations installs the CLI tool,
the shell shims (bare claude / codex follow your policy), and the status line signal, each
with one click and a clean removal.
Optional shell sugar:
alias c='tally claude'
alias cc='tally claude --continue'
Tally ships in English, 繁體中文, 简体中文, 日本語, and 한국어, switchable live from Settings
with no relaunch. Every string lives in one Xcode String Catalog
(Tally/Resources/Localizable.xcstrings), so adding a
language is a single-file PR that fills in one more column. The bar is "reads like the OS, not
like a translation"; corrections to existing languages are as welcome as new ones.
Issues and pull requests are welcome. To get building, follow "Build from source" above; two conventions keep the project healthy:
project.yml is the single source of truth; Tally.xcodeproj is generated by XcodeGen and
never edited by hand.L("…") helper and the String Catalog, with all five
languages filled in.Keep each PR to one intent, and put the why in the description.
How is Tally different from ccusage or other usage trackers? Tools like ccusage are terminal CLIs that estimate token spend from local logs, and most menu bar meters watch a single account. Tally is a native GUI that shows the quota windows the vendors actually enforce (5-hour, weekly, top-model), across multiple Claude and Codex accounts at once, and adds a launcher that acts on those numbers. Read-only, on your own paid subscriptions.
Why does macOS never ask me for keychain permission? Because Tally never reads a credential: usage comes through the providers' own CLIs, and account discovery is an attribute-only Keychain probe (no secret returned → no consent prompt).
What happens when every account is capped?
Nothing dramatic: the dashboard shows it, tally claude warns and launches the bare CLI, and
auto-handoff stays put rather than looping.
Does auto-handoff lose my conversation? No: it resumes the same session transcript on the next account (additively; your original transcript is never modified). An interrupted tool call may re-run once after the switch.
Will the status line integration break my custom status line? No. Your own command keeps running exactly as before, fed the same session JSON; Tally only appends its signal, skips the account name if you already show one, restores your original registration byte-for-byte on removal, and falls back to running your command directly if the tally binary ever disappears.
Tally builds on a trail mapped by some excellent projects:
⚠️ Experimentelle Skill-Sammlung für deutsches Recht (Arbeits-, Gesellschafts-, Insolvenz-, Datenschutz-, Prozessrecht u
191 agents, 155 skills, and 82 plugins cross-compatible with Claude Code, Cursor, and Codex
Manage multiple Claude Code agents from TUI or Web with tmux and git worktrees
Project management using GitHub Issues + Git worktrees for parallel agent execution