Multiple Claude accounts
Pool several Claude accounts with ccas, quick-swap between them, and auto-rotate to another account when one hits a usage limit.
ccas can hold a pool of Claude accounts for you. You can quick-swap between
them, and have it automatically rotate to another account when the one you're
on hits a usage limit. Because everything routes through the
Claude proxy, the active account is applied server-side,
the proxy injects it for you, so switching takes effect without re-logging in.
Adding accounts
There are two ways to add an account, and the difference matters for reliability.
ccas account login (recommended)
Authorizes a dedicated login that the pool owns outright - its own OAuth
authorization, separate from any device. Because Claude refresh tokens are
single-use and rotate on every refresh, an account the pool shares with a
device (see add below) can get signed out of the pool when that device refreshes
the same token. A dedicated login never collides, so usage, alerts, and rate-limit
tracking stay reliable even while you use the same account in Claude Code locally.
ccas account login # authorize a dedicated pool login (opens a browser)
ccas account login "Work Max" # ...with a custom labelIt runs the same Claude sign-in you already know: it prints/opens an authorize URL, you approve in the browser, and paste back the code shown on the page.
ccas account add (snapshot)
Captures a snapshot of the account you're currently logged into in Claude Code.
Quick, but it shares that device's token with the pool - fine for an account you
don't also use locally, but prefer login for one you do.
ccas account add # snapshot the currently logged-in account
ccas account add "Work Max" # ...with a custom labelccas account also auto-detects the account you're currently logged into. If
it isn't in the pool yet, it offers to add it on the spot:
ccas account
# › Logged into Claude as you@example.com (Acme), which isn't in the pool.
# Add it to the pool now? (Y/n)Switching
ccas account # list the pool + pick a slot interactively
ccas account 2 # switch to slot 2Switching sets that account active server-side (so the proxy uses it) and writes it into your local Claude Code, so the account shown in Claude Code matches the one your requests actually use. Restart Claude Code to pick it up.
Autoswitch
Turn on autoswitch and ccas rotates to another eligible account the moment the
active one hits a usage limit, no manual action:
ccas account autoswitch on
ccas account autoswitch offHow it picks the next account:
- Both the 5-hour and the weekly limit trigger a switch.
- It prefers an account of equal or higher tier (it won't drop you from a Max account to a Pro one), and only downgrades if nothing equal-or-higher is free.
- A just-limited account is put on cooldown so it isn't immediately re-picked.
- There's no automatic switch-back, once it moves, it stays until the next limit (or you switch manually).
If the auto-detected tier for a slot is wrong, override it from the AI → Accounts page in the dashboard (it feeds the ranking above).
Model routing
Autoswitch treats every model the same. If you want finer control, the AI → Routing page in your dashboard lets you decide which accounts serve which models.
Send a model to specific accounts
For each model family (Opus, Sonnet, Haiku, Fable, and anything else) you can pick an ordered list of accounts. Requests for that family are served top to bottom: if the first account is at its limit, the next one in the list takes over, and so on.
Accounts you leave out of a list never serve that model, even when every account in the list is capped. That is what makes a list like "Fable only ever uses account 1" hold.
Routing is decided per request, not per session. So if you are working in Fable and it starts four Sonnet subagents, those subagents each follow Sonnet's list while your Fable work stays on Fable's. One session can spread across several accounts, each model billed where you sent it.
Block a model
Set a family to Block this model and requests for it are refused right away with a clear message. Nothing reaches Anthropic and nothing is billed. Useful if you want to keep an expensive model off a shared pool entirely.
Adaptive routing (on by default)
Your active account is used for your requests, and only you can change it (or
an account genuinely hitting its limit). Picking an account in the dashboard, the
Stream Deck plugin, the desktop widget or ccas account applies everywhere
immediately, across every session and every machine, and nothing will move you
off it.
Two rules apply when an account does have to be chosen for you.
Smaller plans are used first. If you have a Pro seat and a Max seat, ordinary work goes to the Pro one first. Accounts that hold a dedicated weekly allowance for a single model are kept back, because that allowance can only ever be spent on that model but comes out of the same weekly budget as everything else.
A model with a dedicated allowance keeps its account to itself. While a session is using such a model, that session's other models are sent elsewhere, so subagents do not eat the budget the main work needs. Sessions using ordinary models simply share your active account as normal.
Both rules can be turned off individually on the routing page.
Choose how switching picks
If you would rather have a fixed rule, you can replace adaptive routing:
- Adaptive (the default) is the behavior described above.
- Usage only drains whichever account's weekly window resets soonest, then prefers the most 5-hour headroom. It ignores what each account can run.
- Slot order goes strictly account 1, then 2, then 3.
- Most headroom first always jumps to the emptiest 5-hour window.
- Custom order follows a ranking you set yourself.
Keeping accounts warm
An account's 5-hour window only starts when that account is first used. So an account you have not touched has not started its window yet, and a pool ends up running one account at a time rather than all at once.
Turn on Keep accounts warm on the accounts page and, as soon as any session starts doing real work, every other account is sent one tiny request to start its window. They then run and reset together, so the whole pool's capacity is available in the same period.
Accounts already running are left alone, and an account whose window ends while you are still working is restarted on your next request. It costs one minimal request per idle account per 5 hours, which is why it is off by default. The per-account Warm button is unchanged and still warms only that account.
Seeing which account is serving
The status line shows your active account as usual. If a session genuinely has
work on more than one account at once, a small +1 is added so you can tell.
Donation burn order
If you donate spare capacity from more than one account, this page is also where you set the order they are lent out in. Turning donation on or off for an account stays on the Accounts page.
The dashboard
The AI → Accounts page in your dashboard shows every pooled account with a plan badge (deeper/red = pricier tier) and live usage bars for each usage window your plan actually has: the 5-hour window, the weekly limit, and any per-model weekly cap (for example Fable). If a plan does not have one of these (for example a Pro plan with no weekly cap, or a plan without per-model access), that bar simply is not shown. There is also a Warm 5h control that starts an idle account's 5-hour window without switching to it. From there you can set the active account, toggle autoswitch, rename, or remove an account. Usage refreshes automatically about every 2 minutes.
See your usage at a glance
Two optional add-ons keep your pool's usage in front of you without opening the dashboard. Both read a personal, read-only usage token, so they can only show your usage and switch the active account.
macOS desktop widget
A set of desktop cards, one per account, showing 5-hour, weekly, and any per-model weekly (for example Fable) usage, the reset countdown, and which account is active. Click a card to switch to it. Get it from the Accounts page in the dashboard (the macOS widget button): your usage token is baked in, so there is no setup. It runs in Übersicht, a free desktop-widget app. Unzip the download and double-click the widget to install.
Stream Deck
One key per account on an Elgato Stream Deck, each showing a chosen usage window (5-hour, weekly, or the per-model weekly like Fable) and reset, plus a tap-to-switch key. Download the plugin from the Accounts page and paste in your usage token. Account names come from your dashboard, so renaming an account updates the key on its next refresh.
Commands
| Command | What it does |
|---|---|
ccas account | List the pool with live usage; offers to add the account you're logged into if it's new. |
ccas account <N> | Switch to the account in slot N (and write it into Claude Code locally). |
ccas account login [label] | Authorize a dedicated pool login (recommended). |
ccas account add [label] | Snapshot the currently logged-in account into a slot. |
ccas account autoswitch on|off | Auto-rotate to another account on a usage limit. |
ccas account rename <N> <label> | Rename a slot. |
Removing an account and overriding a slot's tier are done from the AI → Accounts page in the dashboard rather than the CLI.
Live usage across your accounts is also exposed as a small read-only API, see Usage API.
Connection types
Every pooled account is connected one of two ways, shown as a badge on the Accounts page:
- Fully authenticated (green check): the account was added with
ccas account login, which mints a dedicated login the pool owns outright. Nothing you do in Claude Code on your devices can sign it out. This is the recommended way to pair every account. - Legacy connection (amber): the account was added as a snapshot of a
device's login (
ccas account addor the first-run import). It shares that device's rotating token, so normal Claude Code use can sign it out of the pool without warning.
Upgrading is one command and keeps the same account:
ccas account loginSign into the account in your browser, approve, paste the code back - done. The CLI and dashboard will nudge you until every account is fully authenticated; the nudges disappear once they are.
Usage donations
If an account of yours has spare weekly capacity, you can donate it. When another user has hit the limits on every account they own, their requests are served through a donating account instead of stopping, and the usage counts against the donor's stats at normal model prices.
Donations are designed so they never cost you anything you were going to use:
- A donating account only serves while its weekly window is under pace, meaning below the steady burn rate that would land exactly at 100% at reset. The moment it catches up to pace, it stops donating. Donations can only soak up capacity that would otherwise have expired unused.
- The account also stops donating before its 5-hour window fills, so your own sessions are never locked out by a donated burst.
- Fable is never available through donations, no matter what the donating account's plan allows. Recipients can use the other models (Opus, Sonnet, Haiku, and so on).
- Donations are anonymous in both directions. A recipient only ever sees the
name HEP.GG DONATION (it even gets a rainbow in
ccasand the status line); nothing about the donor is visible.
Donating
Each account card on the AI -> Accounts page has a Donate spare usage toggle. Turning it off applies immediately: the next donated request simply moves on to another donor, or stops if none remain.
When you donate more than one account, the burn order field controls which is drained first: order 1 is used until it reaches pace, then order 2, and so on. Leave it blank to follow the slot order.
You can also block specific users by username (everyone is allowed by default), or whitelist them. Whitelisting is how you share an account with someone you trust, and it does two things:
- They can be served from your donating accounts even if they have no Claude accounts of their own.
- Your account is used before theirs, rather than only once they run out. So if you have lent someone a login just to get Claude Code running, they spend the account you meant for them instead of burning the borrowed one. If your shared capacity reaches pace, they fall back to their own accounts automatically.
Blocking and whitelisting both match on the person's Hep.gg username, not on whichever Claude account they happen to be signed into.
Receiving
Receiving is on by default and only ever engages when every account you own is at its limits, so there is nothing to set up. While a donation is serving you, the Accounts page shows a banner and your active account reads as HEP.GG DONATION. As soon as one of your own accounts frees up, requests switch back automatically. You can opt out entirely with the Accept donated usage toggle.
Your dashboard tracks both directions separately: usage you have donated to others (included in your own totals, since your accounts served it) and donated usage you have received (kept separate from your totals).