Show HN: Predictive load balancing for Claude accounts Developer Yasyf released cc-pool, a macOS tool that predictively load-balances Claude Code sessions across multiple Claude Max/Pro subscriptions by selecting the account with the most remaining usage headroom before each session starts. The tool installs via Homebrew, wraps the `claude` command, and stores secrets in the macOS Keychain, ensuring no proxy or manual switching is needed. Predictive, start-of-session load-balancing across multiple Claude subscriptions — for macOS. Run several Claude Max/Pro subscriptions and you hit the same wall every week: one account pegged at its 5-hour or weekly limit while another sits idle. cc-pool launches every Claude Code session on the emptiest account, picked from live 5-hour / 7-day usage before the session starts — predictive, not reactive. No proxy in the request path, no manual switching, no waiting for a rate-limit error to learn you picked wrong. After setup, claude is an alias for ccp run and the pooling disappears into the background. Two hard guarantees underwrite the design: plain claude on ~/.claude keeps working untouched — the pool can never log it out — and secrets stay in the macOS Keychain, never in cc-pool's database. How it works how-it-works has the details. brew tap yasyf/cc-pool https://github.com/yasyf/cc-pool brew install yasyf/cc-pool/cc-pool macOS only. The binary installs as cc-pool with a ccp symlink; the default build is pure Go. Pool two subscriptions and launch Claude on the emptiest one, in about five minutes. 1. Run ccp. On an empty pool it walks you through logging in each subscription — every account gets its own claude /login : bash $ ccp ✓ Set up cc-pool on this machine. How do you want to log in? Log in now, in this terminal claude opens its /login flow right here; finish it and ccp closes claude for you Name for this account optional work@example.com ✓ Added work@example.com. Add another account? Yes the second login runs the same way ✓ Added personal@example.com. Your pool now has 2 accounts. Launch Claude on the emptiest account: ccp run Wrap claude to always launch on the emptiest account? Yes ✓ Wrapped claude — added an alias to ~/.zshrc. Restart your shell or run source ~/.zshrc to use it now. Run command claude for plain ~/.claude. 2. Check the pool. ccp status --plain prints the table once; bare ccp status or bare ccp , now that accounts exist opens a live TUI with per-account score breakdowns: bash $ ccp status --plain ACCOUNT SCORE 5h used 7d used LIVE RESETS ▸ work@example.com 68.1 22% 46% 0 6:00 PM personal@example.com 34.8 61% 70% 0 4:30 PM ▸ = next pick · score higher = emptier · 5h/7d = % used updated 3:58 PM 3. Launch. Run claude now wrapped . It announces its pick on stderr, then execs the real claude — cc-pool is gone from the process tree before Claude Code draws its first frame: bash $ claude Selected work@example.com · 5h 22% used · 7d 46% used The Selected line names the account marked ▸ in step 2 — that match is your verification. From here on, every claude lands on whichever account has the most headroom. The quickstart wraps claude with alias claude='ccp run' . command claude bypasses it — plain claude on ~/.claude , one keystroke away. Prefer to leave claude untouched? Decline the prompt or pass ccp add --no-alias and pick your own name: alias cl='ccp run' ccp run forwards every argument to claude verbatim — no -- separator needed. Bare ccp with flags is shorthand for the same thing: ccp run --resume ccp -p "summarize this repo" auto-converts to ccp run -p ... CCP ACCOUNT=2 ccp run forces account 2 instead of auto-selecting. Repeated launches from the same directory stick to one account for prompt-cache continuity; those announce Reusing work@example.com pinned instead of Selected . Selection refuses to burn a nearly-reset window: an account with an exhausted plan window is never picked while any account has headroom, and ccp select --wait blocks until one does. If the whole pool is exhausted, the launch falls back to the least-bad account and warns loudly on stderr — that session bills pay-as-you-go credits if extra usage is enabled, or rate-limits until the window resets. ccp select prints the chosen config dir on stdout and nothing else. Set the plugin root too, so the session writes canonical plugin paths into the shared ~/.claude/plugins ccp run and ccp env both do this for you : CLAUDE CODE PLUGIN CACHE DIR="$HOME/.claude/plugins" CLAUDE CONFIG DIR=$ ccp select claude ~/.claude is never moved and never registered as a pool account. It stays the canonical config dir, so plain claude keeps working exactly as before, and is the shared base every pooled account mirrors. The pool never touches plain claude's credential or login identity. Every account, including your main subscription, joins with its own claude /login , so its token chain is fully independent of plain claude's. Claude Code namespaces its Keychain credential per config dir : the default ~/.claude uses the item Claude Code-credentials ; a custom CLAUDE CONFIG DIR gets a suffixed item Claude Code-credentials-