
Account Rotation
- 22 installs
- 416 repo stars
- Updated August 5, 2026
- boshu2/agentops
account-rotation is a Claude skill that routes coding-agent account swaps to the right tool (claude-acct or caam) by host and agent when you hit a rate limit or spread swarm lanes.
About
A router skill for switching coding-agent accounts when you hit a usage or rate limit, or to spread parallel swarm lanes across accounts for more quota. It routes to the right tool by host and agent: claude-acct swaps the Keychain token plus identity for Claude on macOS, and caam swaps the auth file for Codex, Gemini, and Claude on Linux/WSL. It exists because caam's file swap is a no-op for Claude on macOS, whose token lives in the login Keychain.
- Routes coding-agent account swaps by host and agent: claude-acct for macOS+Claude Keychain, caam for file-based auth
- Explains why caam is a no-op for Claude on macOS because the token lives in the login Keychain
- Spreads swarm lanes across separate accounts for parallel quota before launch
Account Rotation by the numbers
- 22 all-time installs (skills.sh)
- Ranked #1,273 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
account-rotation capabilities & compatibility
- Capabilities
- account rotation · swarm lane management · rate limit handling
- Platforms
- macOS · Linux · WSL
What account-rotation says it does
caam swaps the auth **file** (`~/.claude/.credentials.json`, codex/gemini auth files). Correct for file-based auth — **Codex, Gemini, and Claude-on-Linux.**
A running agent process holds its token in memory; rotation changes what a **new** process picks up, not the live session.
Parallel quota = put each lane on a different account **before** launching it:
npx skills add https://github.com/boshu2/agentops --skill account-rotationAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 22 |
|---|---|
| repo stars | ★ 416 |
| Last updated | August 5, 2026 |
| Repository | boshu2/agentops ↗ |
What it does
Switch coding-agent accounts on a rate limit and spread swarm lanes across accounts for parallel quota, routing by host and agent.
Who is it for?
Operators running multi-account agent swarms who need to rotate past Claude Max / Codex Pro / Gemini usage limits.
Skip if: Single-account developers who never hit rate limits or run parallel agent lanes.
When should I use this skill?
When you hit a usage limit on a subscription agent and want to keep working on a fresh account, or when spreading swarm lanes across accounts.
What you get
The account swap actually takes on the correct credential layer, and swarm lanes run on separate accounts for parallel quota.
- Active account swapped per host+agent
- Swarm lanes on separate accounts
By the numbers
- 3-line quick-start routing table (macOS+Claude, macOS+Codex/Gemini, Linux/WSL)
- 2 capture-discipline traps
Files
<!-- TOC: Quick Start | Why the Route Exists | claude-acct (Mac+Claude) | caam (everything else) | Capture Discipline | Live-Session Caveat | Swarm Lanes -->
account-rotation — switch coding-agent accounts on a rate limit
The moment: you hit a usage limit on a Claude Max / Codex Pro / Gemini
subscription and want to keep working on a fresh account, or you're spreading
swarm lanes across accounts for parallel quota. The tool depends on the host
— because the credential layer differs by OS+agent. This skill routes; the
tools do the swap.
Quick Start — route first
macOS + Claude → claude-acct (Keychain layer)
macOS + Codex/Gemini → caam (file layer)
Linux / WSL + anything → caam (file layer)Why the route exists (the load-bearing fact)
caam swaps the auth file (~/.claude/.credentials.json, codex/gemini auth files). Correct for file-based auth — Codex, Gemini, and Claude-on-Linux. But current Claude Code on macOS stores its token in the login Keychain (security service Claude Code-credentials) and ignores that file. So caam activate/next for Claude on Mac are no-ops — they swap a file Claude doesn't read. That one exception is the whole reason this router exists.
macOS + Claude → claude-acct (Keychain swap)
A full Claude account on Mac = two pieces, both swapped together: the Keychain token + the ~/.claude.json `.oauthAccount` identity block (claude auth status reads the email from the latter; a token-only swap leaves the identity pinned to the last login → "only the current account works"). claude-acct swaps both via security add/delete-generic-password -A (-A = no GUI prompt, so headless workers don't stall) + a JSON splice of .oauthAccount.
claude-acct list # captured accounts → real email each maps to
claude-acct current # which account a NEW claude starts on
claude-acct use <name> # swap (token + identity)
claude-acct login <name> [email] # one-time capture (see Capture Discipline)Tool: dotfiles/bin/claude-acct.
macOS+Codex/Gemini & all Linux/WSL → caam (file swap)
caam is the adopted file-based rotator and is correct here. It self-documents (there is intentionally no caam skill — the CLI is the doc):
caam status <tool> # vault + health
caam next <tool> # rotate to next non-cooldown account
caam use <tool> <profile>
caam --help # full surfaceOn bushido (Ubuntu) this is the only rotator you need — file-based auth means caam's swap actually takes.
Capture Discipline (the two traps — apply to both tools)
1. Distinct token bytes ≠ distinct accounts. OAuth re-issues a fresh token each login, so N logins to the same account produce N different hashes. Verify by account email, not token hash. (claude-acct warns on collision.) 2. The browser captures whichever account the provider is signed into. Email login-hints are ignored when a session exists. Log out (or use a Private/Incognito window) before each capture login, or it re-grabs the current account.
Live-Session Caveat
A running agent process holds its token in memory; rotation changes what a new process picks up, not the live session. To move the session you're in: rotate, then relaunch the CLI. Exactly right for spawning swarm lanes.
Swarm Lanes (the real unlock)
Parallel quota = put each lane on a different account before launching it:
# Mac (Claude)
claude-acct use acct-a && <spawn lane A>; claude-acct use acct-b && <spawn lane B>
# Linux / Codex
caam use codex acct-a && <spawn lane A>; caam next codex && <spawn lane B>A dispatcher's limit-hit hook calls claude-acct use on Mac / caam next on Linux, then re-dispatches the lane's work.
Navi-rotate (the cross-model helper rotates a peer — trilateral)
In the trilateral (2 Claude builders + 1 Codex Navi), the Navi runs on a DIFFERENT runtime/account, so it is UNAFFECTED by a builder's Claude rate limit — making it the right agent to rotate a limited builder. navi-rotate (dotfiles/bin/navi-rotate) wraps claude-acct with rotation-order + peer-relaunch signaling, so the move is one repeatable command:
navi-rotate <peer-tmux-session> [--to <account>] [--dry-run]
# Navi: next account (claude-acct list order) -> claude-acct use <next>
# -> am + atm signal the peer to relaunch.Per the Live-Session Caveat: the swap lands on the peer's NEXT launch, not its live session — continuity rides the durable substrate (worktree + bead + handoff), so the peer resumes from its last bead on the fresh account. This is the repeatable, cross-model-driven form of the dispatcher limit-hit hook above. Routed correctly: the swap is always claude-acct for Mac+Claude (NEVER caam).
{
"name": "account-rotation",
"skill_api_version": 1,
"form": "A",
"quality_score": 0.9,
"sections": [
{ "id": "title", "title": "account-rotation — switch coding-agent accounts on a rate limit", "type": "intro", "priority": "required" },
{ "id": "quickstart", "title": "Quick Start", "type": "procedure", "priority": "required" },
{ "id": "why", "title": "Why the Route Exists", "type": "overview", "priority": "required" },
{ "id": "claude", "title": "macOS + Claude", "type": "procedure", "priority": "required" },
{ "id": "caam", "title": "Codex/Gemini & Linux", "type": "procedure", "priority": "required" },
{ "id": "capture", "title": "Capture Discipline", "type": "procedure", "priority": "required" },
{ "id": "livecaveat", "title": "Live-Session Caveat", "type": "overview", "priority": "required" },
{ "id": "swarm", "title": "Swarm Lanes", "type": "procedure", "priority": "standard" }
],
"references": [],
"metadata": {
"tier": "execution",
"stability": "stable",
"dependencies": [],
"hexagonal_role": "supporting",
"context_window": "inherit",
"practices": ["pragmatic-programmer"],
"triggers": [
"rate limited switch account",
"usage limit hit, rotate account",
"switch coding-agent account",
"rotate Claude Max / Codex Pro accounts",
"spread swarm lanes across accounts",
"caam doesn't switch Claude on Mac",
"account-rotation"
]
}
}
Related skills
FAQ
Why doesn't caam work for Claude on macOS?
Claude Code on macOS stores its token in the login Keychain and ignores the auth file caam swaps, so caam activate/next are no-ops for Claude on Mac; use claude-acct instead.
Does rotation move my live session?
No. A running agent holds its token in memory; rotation changes what a new process picks up, so you must relaunch the CLI to move to the new account.