feat(skills): account-rotation — unified host-routed rotation skill; retire caam skill

Replaces the caam skill (which mis-advised on macOS). One symptom-triggered skill
routes by host: macOS+Claude -> claude-acct (Keychain swap); Codex/Gemini or any
Linux/WSL -> caam (file swap). caam CLI stays; it self-documents via --help.
Includes codex parity. heal-skill --check --strict: clean.
This commit is contained in:
Boden Fuller
2026-06-11 12:12:30 -04:00
parent 50b97d41bb
commit 3384f56381
15 changed files with 359 additions and 2820 deletions
+1 -1
View File
@@ -70,6 +70,7 @@ and [CDLC](https://github.com/boshu2/agentops/blob/main/docs/cdlc.md) for the ar
### supporting
- `account-rotation` — Use when you hit a usage/rate limit on a coding-agent subscription and need to switch accounts, or to spread swarm lanes across accounts. Routes by host+agent: macOS+Claude → claude-acct (Keychain swap); macOS+Codex/Gemini or any Linux/WSL → caam (file swap). One symptom, the right tool per host.
- `agent-mail` — Use when coordinating agents with Agent Mail locks, inboxes, threads, and conflict-prevention handoffs.
- `agent-native` — Make an out-of-session agent AgentOps-native with skills, the ao CLI, and CI instead of hooks.
- `agy-headless-evidence` — Run AGY headlessly via scheduled ticks or `agy -p`, capture agentapi JSONL evidence, and validate automated AGY loops or event streams.
@@ -81,7 +82,6 @@ and [CDLC](https://github.com/boshu2/agentops/blob/main/docs/cdlc.md) for the ar
- `beads-br` — Local-first issue tracker (beads_rust) for AI agents. Use when tracking tasks, managing dependencies, finding ready work, or syncing issues to git via JSONL.
- `beads-bv` — Graph-aware task triage with bv and br. Use when prioritizing work, finding bottlenecks, tracking dependencies, or managing local issues across projects.
- `beads-workflow` — Use when converting markdown plans into br beads with dependencies for implementation or swarm execution.
- `caam` — Use when switching AI coding CLI accounts quickly to recover from subscription rate limits or OAuth friction.
- `casr` — Resume sessions across Claude Code, Codex, Gemini, and other providers when switching agents or migrating active chat history.
- `cass` — Mine past agent sessions for working prompts, decisions, and patterns. Use when "what did I ask?", "find that prompt", session archaeology, or agent history.
- `cass-memory` — Use when starting non-trivial work, mining lessons, or preventing repeated mistakes with cm procedural memory.
+82 -82
View File
@@ -35,13 +35,13 @@ dispositions:
- skill: brainstorm
domain: "BC3 Loop"
hexagonal_role: domain
disposition: update
rationale: "Intent-shaping skill; should emit BDD-ready language"
disposition: merge-review
rationale: "Intent-shaping; fold into discovery"
- skill: bug-hunt
domain: "BC2 Validation"
hexagonal_role: domain
disposition: update
rationale: "Validation generator; needs acceptance examples and result contract"
disposition: merge-review
rationale: "Bug-finding generator; fold into review"
- skill: compile
domain: "BC1 Corpus"
hexagonal_role: supporting
@@ -50,8 +50,8 @@ dispositions:
- skill: complexity
domain: "BC2 Validation"
hexagonal_role: domain
disposition: update
rationale: "Generator for refactor work; add self-test and threshold evidence"
disposition: merge-review
rationale: "Refactor-hotspot finder; fold into refactor"
- skill: converter
domain: "BC4 Factory"
hexagonal_role: generic
@@ -65,8 +65,8 @@ dispositions:
- skill: burndown
domain: "BC3 Loop"
hexagonal_role: domain
disposition: keep
rationale: "Bounded epic-completion loop; terminating counterpart to evolve (finite target → all-merged → STOP)"
disposition: merge-review
rationale: "Bounded epic loop; fold into crank"
- skill: crank
domain: "BC3 Loop"
hexagonal_role: domain
@@ -80,13 +80,13 @@ dispositions:
- skill: deps
domain: "BC2 Validation"
hexagonal_role: driven-adapter
disposition: update
rationale: "Dependency risk generator; add threshold and no-network fallback tests"
disposition: merge-review
rationale: "Dependency risk audit; fold into security"
- skill: design
domain: "BC3 Loop"
hexagonal_role: domain
disposition: update
rationale: "Product-fit pre-discovery gate; should produce BDD-ready intent"
disposition: merge-review
rationale: "Product-fit gate; fold into discovery"
- skill: discovery
domain: "BC3 Loop"
hexagonal_role: domain
@@ -145,8 +145,8 @@ dispositions:
- skill: operating-loop-workflow
domain: "BC3 Loop"
hexagonal_role: driving-adapter
disposition: keep
rationale: "Installs + invokes the operating-loop Workflow so plugin users get the seven-move loop"
disposition: merge-review
rationale: "Loop workflow installer; fold into rpi"
- skill: perf
domain: "BC2 Validation"
hexagonal_role: domain
@@ -165,8 +165,8 @@ dispositions:
- skill: pr-implement
domain: "BC5 Runtime"
hexagonal_role: driving-adapter
disposition: update
rationale: "GitHub PR implementation adapter; map to loop slices"
disposition: merge-review
rationale: "Scoped PR impl; fold into implement"
- skill: pr-prep
domain: "BC5 Runtime"
hexagonal_role: driving-adapter
@@ -175,8 +175,8 @@ dispositions:
- skill: pr-research
domain: "BC5 Runtime"
hexagonal_role: driven-adapter
disposition: update
rationale: "Upstream repo research adapter; add clean source/citation self-test"
disposition: merge-review
rationale: "Upstream research; fold into pr-prep"
- skill: pre-mortem
domain: "BC2 Validation"
hexagonal_role: domain
@@ -195,13 +195,13 @@ dispositions:
- skill: quickstart
domain: "BC3 Loop"
hexagonal_role: driving-adapter
disposition: update
rationale: "Operator routing entrypoint; align to current 3.0 first-value path"
disposition: merge-review
rationale: "Next-action shower; fold into status"
- skill: ratchet
domain: "BC3 Loop"
hexagonal_role: domain
disposition: update
rationale: "Loop evidence ratchet; connect to cycle trace contract"
disposition: merge-review
rationale: "Brownian-ratchet gates; fold into flywheel"
- skill: recover
domain: "BC1 Corpus"
hexagonal_role: driving-adapter
@@ -230,8 +230,8 @@ dispositions:
- skill: reverse-engineer-rpi
domain: "BC1 Corpus"
hexagonal_role: supporting
disposition: update
rationale: "External product-spec extraction; ensure clean-room rules stay explicit"
disposition: cut-review
rationale: "Niche meta tool; rarely fires"
- skill: review
domain: "BC2 Validation"
hexagonal_role: driving-adapter
@@ -250,8 +250,8 @@ dispositions:
- skill: scenario
domain: "BC2 Validation"
hexagonal_role: supporting
disposition: update
rationale: "Holdout scenario manager; important for behavioral evals"
disposition: merge-review
rationale: "Holdout scenarios; fold into eval-outcomes"
- skill: scope
domain: "BC5 Runtime"
hexagonal_role: driven-adapter
@@ -260,8 +260,8 @@ dispositions:
- skill: session-bootstrap
domain: "BC5 Runtime"
hexagonal_role: driving-adapter
disposition: keep
rationale: "Universal init prompt; the fungibility contract for any-agent spawn (soc-vuu6.25)"
disposition: merge-review
rationale: "Init prompt; fold into inject"
- skill: security
domain: "BC2 Validation"
hexagonal_role: driven-adapter
@@ -275,8 +275,8 @@ dispositions:
- skill: ship-loop
domain: "BC5 Runtime"
hexagonal_role: driving-adapter
disposition: keep
rationale: "Bot-paired internal-ship PR cycle; distinct from pr-* contribute family"
disposition: merge-review
rationale: "Fast-lane ship; fold into crank"
- skill: skill-auditor
domain: "BC4 Factory"
hexagonal_role: supporting
@@ -320,13 +320,13 @@ dispositions:
- skill: trace
domain: "BC1 Corpus"
hexagonal_role: supporting
disposition: update
rationale: "Decision trace builder; align to provenance and cycle trace"
disposition: merge-review
rationale: "Decision tracing; fold into recover"
- skill: using-agentops
domain: "BC4 Factory"
hexagonal_role: generic
disposition: update
rationale: "Operator education; align to 3.0 first-value path"
disposition: merge-review
rationale: "Workflow explainer; fold into inject"
- skill: validate
domain: "BC2 Validation"
hexagonal_role: driving-adapter
@@ -335,8 +335,8 @@ dispositions:
- skill: vibe
domain: "BC2 Validation"
hexagonal_role: domain
disposition: update
rationale: "Code-readiness validator; add self-test and tighten result contract"
disposition: merge-review
rationale: "Quick-readiness check; fold into validate as a --quick mode"
- skill: eval-outcomes
domain: "BC2 Validation"
hexagonal_role: supporting
@@ -371,13 +371,13 @@ dispositions:
- skill: agy-rules-workflows
domain: "BC5 Runtime"
hexagonal_role: driving-adapter
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
disposition: merge-review
rationale: "Fold into agy-native"
- skill: bead-completion-audit
domain: "BC2 Validation"
hexagonal_role: supporting
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
disposition: merge-review
rationale: "Closed-bead evidence audit; fold into validate"
- skill: beads-br
domain: "BC3 Loop"
hexagonal_role: supporting
@@ -393,16 +393,16 @@ dispositions:
hexagonal_role: supporting
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
- skill: caam
- skill: account-rotation
domain: "BC5 Runtime"
hexagonal_role: supporting
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
rationale: "Unified host-routed account rotation (macOS+Claude->claude-acct Keychain swap; else->caam file swap); supersedes the retired caam skill."
- skill: casr
domain: "BC4 Factory"
hexagonal_role: supporting
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
disposition: merge-review
rationale: "Session resumer; fold into cass"
- skill: cass
domain: "BC5 Runtime"
hexagonal_role: supporting
@@ -411,13 +411,13 @@ dispositions:
- skill: cass-memory
domain: "BC5 Runtime"
hexagonal_role: supporting
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
disposition: merge-review
rationale: "Procedural memory; fold into cass"
- skill: cc-cron-ticks
domain: "BC5 Runtime"
hexagonal_role: driving-adapter
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
disposition: merge-review
rationale: "Fold into cc-hooks"
- skill: cc-hooks
domain: "BC5 Runtime"
hexagonal_role: supporting
@@ -426,18 +426,18 @@ dispositions:
- skill: cc-loop-driver
domain: "BC5 Runtime"
hexagonal_role: driving-adapter
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
disposition: merge-review
rationale: "Fold into cc-hooks"
- skill: cc-subagents
domain: "BC5 Runtime"
hexagonal_role: supporting
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
disposition: merge-review
rationale: "Fold into cc-hooks"
- skill: cc-worktree-isolation
domain: "BC5 Runtime"
hexagonal_role: supporting
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
disposition: merge-review
rationale: "Fold into cc-hooks"
- skill: codex-exec
domain: "BC5 Runtime"
hexagonal_role: driving-adapter
@@ -446,18 +446,18 @@ dispositions:
- skill: codex-goals
domain: "BC5 Runtime"
hexagonal_role: driving-adapter
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
disposition: merge-review
rationale: "Fold into codex-exec"
- skill: codex-mcp-plugins
domain: "BC5 Runtime"
hexagonal_role: driven-adapter
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
disposition: merge-review
rationale: "Fold into codex-exec"
- skill: codex-sandbox-evidence
domain: "BC5 Runtime"
hexagonal_role: supporting
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
disposition: merge-review
rationale: "Fold into codex-exec"
- skill: dcg
domain: "BC5 Runtime"
hexagonal_role: supporting
@@ -471,28 +471,28 @@ dispositions:
- skill: agy-mcp-plugins
domain: "BC5 Runtime"
hexagonal_role: driven-adapter
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
disposition: merge-review
rationale: "Fold into agy-native"
- skill: agy-project-worktree-permissions
domain: "BC5 Runtime"
hexagonal_role: supporting
disposition: keep
rationale: "Coverage-gap skill proving AGY project/worktree isolation invariants before the image joins quorum; clean-room AgentOps-owned."
disposition: merge-review
rationale: "Fold into agy-native"
- skill: agy-sidecar-scheduled-tick
domain: "BC5 Runtime"
hexagonal_role: supporting
disposition: keep
rationale: "Coverage-gap skill for recurring AGY loop ticks via Antigravity sidecar + agentapi evidence; clean-room AgentOps-owned."
disposition: merge-review
rationale: "Fold into agy-native"
- skill: cross-vendor-trust-gate
domain: "BC4 Factory"
hexagonal_role: domain
disposition: keep
rationale: "Coverage-gap skill operating the skill-factory final trust gate (cross-vendor parity); shared kernel with heal-skill."
disposition: merge-review
rationale: "Cross-family floor gate; fold into council/validate"
- skill: multi-model-triangulation
domain: "BC4 Factory"
hexagonal_role: supporting
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
disposition: merge-review
rationale: "Cross-model second opinion; fold into council --mixed"
- skill: ntm
domain: "BC5 Runtime"
hexagonal_role: supporting
@@ -501,23 +501,23 @@ dispositions:
- skill: ntm-browser-test-coordination
domain: "BC2 Validation"
hexagonal_role: supporting
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
disposition: merge-review
rationale: "Fold into ntm"
- skill: ntm-review-worker-orchestration
domain: "BC5 Runtime"
hexagonal_role: supporting
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
disposition: merge-review
rationale: "Fold into ntm"
- skill: operating-loop-skill
domain: "BC5 Runtime"
hexagonal_role: domain
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
disposition: merge-review
rationale: "The loop; fold into rpi"
- skill: planning-workflow
domain: "BC3 Loop"
hexagonal_role: supporting
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
disposition: merge-review
rationale: "Markdown planning; fold into plan"
- skill: rch
domain: "BC5 Runtime"
hexagonal_role: supporting
@@ -531,8 +531,8 @@ dispositions:
- skill: ubs
domain: "BC5 Runtime"
hexagonal_role: supporting
disposition: keep
rationale: "New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability."
disposition: merge-review
rationale: "UBS bug/security review; fold into review"
- skill: vibing-with-ntm
domain: "BC4 Factory"
hexagonal_role: supporting
@@ -541,5 +541,5 @@ dispositions:
- skill: codebase-audit
domain: "BC2 Validation"
hexagonal_role: supporting
disposition: keep
rationale: "Canonicalized from ~/.claude/skills ghost dir (cp-801l); domain-parameterized audit skill, AgentOps-owned."
disposition: merge-review
rationale: "Domain-parameterized audit; fold into review report-modes"
+41 -41
View File
@@ -59,50 +59,50 @@ Disposition meanings:
<!-- BEGIN:full-skill-map -->
| Skill | Domain | Hex role | First disposition | Rationale |
|---|---|---|---|---|
| `account-rotation` | BC5 Runtime | supporting | keep | Unified host-routed account rotation (macOS+Claude->claude-acct Keychain swap; else->caam file swap); supersedes the retired caam skill.. |
| `acfs` | BC5 Runtime | driving-adapter | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `agent-mail` | BC5 Runtime | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `agent-native` | BC5 Runtime | supporting | keep | Hookless reframe: makes out-of-session agents (Managed/SDK/sandbox) AgentOps-native via skills + ao CLI + CI; extends standards+converter, never a hook revival. |
| `agy-headless-evidence` | BC5 Runtime | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `agy-mcp-plugins` | BC5 Runtime | driven-adapter | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `agy-mcp-plugins` | BC5 Runtime | driven-adapter | merge-review | Fold into agy-native. |
| `agy-native` | BC5 Runtime | driving-adapter | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `agy-project-worktree-permissions` | BC5 Runtime | supporting | keep | Coverage-gap skill proving AGY project/worktree isolation invariants before the image joins quorum; clean-room AgentOps-owned.. |
| `agy-rules-workflows` | BC5 Runtime | driving-adapter | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `agy-sidecar-scheduled-tick` | BC5 Runtime | supporting | keep | Coverage-gap skill for recurring AGY loop ticks via Antigravity sidecar + agentapi evidence; clean-room AgentOps-owned.. |
| `agy-project-worktree-permissions` | BC5 Runtime | supporting | merge-review | Fold into agy-native. |
| `agy-rules-workflows` | BC5 Runtime | driving-adapter | merge-review | Fold into agy-native. |
| `agy-sidecar-scheduled-tick` | BC5 Runtime | supporting | merge-review | Fold into agy-native. |
| `autodev` | BC3 Loop | supporting | refactor | Must compose with PROGRAM.md and RPI as one vertical-slice executor. |
| `automation-shape-routing` | BC4 Factory | supporting | keep | Front-door router: decides Workflow vs NTM swarm vs plain skill, hands off to the right builder. |
| `bead-completion-audit` | BC2 Validation | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `bead-completion-audit` | BC2 Validation | supporting | merge-review | Closed-bead evidence audit; fold into validate. |
| `beads` | BC3 Loop | driven-adapter | update | Tracker adapter is core; add BDD/slice acceptance self-test. |
| `beads-br` | BC3 Loop | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `beads-bv` | BC3 Loop | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `beads-workflow` | BC3 Loop | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `bootstrap` | BC4 Factory | driving-adapter | update | First-run factory entrypoint; needs current 3.0/domain packet shape. |
| `brainstorm` | BC3 Loop | domain | update | Intent-shaping skill; should emit BDD-ready language. |
| `bug-hunt` | BC2 Validation | domain | update | Validation generator; needs acceptance examples and result contract. |
| `burndown` | BC3 Loop | domain | keep | Bounded epic-completion loop; terminating counterpart to evolve (finite target → all-merged → STOP). |
| `caam` | BC5 Runtime | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `casr` | BC4 Factory | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `brainstorm` | BC3 Loop | domain | merge-review | Intent-shaping; fold into discovery. |
| `bug-hunt` | BC2 Validation | domain | merge-review | Bug-finding generator; fold into review. |
| `burndown` | BC3 Loop | domain | merge-review | Bounded epic loop; fold into crank. |
| `casr` | BC4 Factory | supporting | merge-review | Session resumer; fold into cass. |
| `cass` | BC5 Runtime | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `cass-memory` | BC5 Runtime | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `cc-cron-ticks` | BC5 Runtime | driving-adapter | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `cass-memory` | BC5 Runtime | supporting | merge-review | Procedural memory; fold into cass. |
| `cc-cron-ticks` | BC5 Runtime | driving-adapter | merge-review | Fold into cc-hooks. |
| `cc-hooks` | BC5 Runtime | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `cc-loop-driver` | BC5 Runtime | driving-adapter | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `cc-subagents` | BC5 Runtime | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `cc-worktree-isolation` | BC5 Runtime | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `codebase-audit` | BC2 Validation | supporting | keep | Canonicalized from ~/.claude/skills ghost dir (cp-801l); domain-parameterized audit skill, AgentOps-owned.. |
| `cc-loop-driver` | BC5 Runtime | driving-adapter | merge-review | Fold into cc-hooks. |
| `cc-subagents` | BC5 Runtime | supporting | merge-review | Fold into cc-hooks. |
| `cc-worktree-isolation` | BC5 Runtime | supporting | merge-review | Fold into cc-hooks. |
| `codebase-audit` | BC2 Validation | supporting | merge-review | Domain-parameterized audit; fold into review report-modes. |
| `codex-exec` | BC5 Runtime | driving-adapter | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `codex-goals` | BC5 Runtime | driving-adapter | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `codex-mcp-plugins` | BC5 Runtime | driven-adapter | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `codex-sandbox-evidence` | BC5 Runtime | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `codex-goals` | BC5 Runtime | driving-adapter | merge-review | Fold into codex-exec. |
| `codex-mcp-plugins` | BC5 Runtime | driven-adapter | merge-review | Fold into codex-exec. |
| `codex-sandbox-evidence` | BC5 Runtime | supporting | merge-review | Fold into codex-exec. |
| `compile` | BC1 Corpus | supporting | refactor | Corpus compiler is core; align read/write flows to Corpus ports. |
| `complexity` | BC2 Validation | domain | update | Generator for refactor work; add self-test and threshold evidence. |
| `complexity` | BC2 Validation | domain | merge-review | Refactor-hotspot finder; fold into refactor. |
| `converter` | BC4 Factory | generic | keep | Cross-runtime packaging adapter (Codex/Cursor twins); skill-builder consumes it — live producer→consumer edge (resolved 2026-05-24). |
| `council` | BC2 Validation | domain | update | Core judgment gate; strengthen scenario and verdict self-test. |
| `crank` | BC3 Loop | domain | refactor | Wave executor; align with vertical-slice and conflict-free wave contract. |
| `cross-vendor-trust-gate` | BC4 Factory | domain | keep | Coverage-gap skill operating the skill-factory final trust gate (cross-vendor parity); shared kernel with heal-skill.. |
| `cross-vendor-trust-gate` | BC4 Factory | domain | merge-review | Cross-family floor gate; fold into council/validate. |
| `curate` | BC1 Corpus | supporting | keep | Designed-future canonical unified miner (m6v5.D Phase 1, epic soc-cp7pv); not redundant cruft — epic GO/REVERT is a separate decision (resolved KEEP 2026-05-24). |
| `dcg` | BC5 Runtime | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `deps` | BC2 Validation | driven-adapter | update | Dependency risk generator; add threshold and no-network fallback tests. |
| `design` | BC3 Loop | domain | update | Product-fit pre-discovery gate; should produce BDD-ready intent. |
| `deps` | BC2 Validation | driven-adapter | merge-review | Dependency risk audit; fold into security. |
| `design` | BC3 Loop | domain | merge-review | Product-fit gate; fold into discovery. |
| `discovery` | BC3 Loop | domain | update | Creates execution packets; add explicit loop-shape SELF-TEST. |
| `doc` | BC4 Factory | supporting | update | Documentation factory adapter; keep tied to doc-release gates. |
| `domain` | BC4 Factory | domain | keep | Ubiquitous-language kernel; central to DDD. |
@@ -115,53 +115,53 @@ Disposition meanings:
| `heal-skill` | BC4 Factory | supporting | update | Skill hygiene gate; should consume the new domain map. |
| `implement` | BC3 Loop | driving-adapter | update | Slice executor; enforce first-failing-test language. |
| `inject` | BC1 Corpus | driving-adapter | refactor | Context injection should be explicit CorpusReader adapter use. |
| `multi-model-triangulation` | BC4 Factory | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `multi-model-triangulation` | BC4 Factory | supporting | merge-review | Cross-model second opinion; fold into council --mixed. |
| `ntm` | BC5 Runtime | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `ntm-browser-test-coordination` | BC2 Validation | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `ntm-review-worker-orchestration` | BC5 Runtime | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `operating-loop-skill` | BC5 Runtime | domain | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `operating-loop-workflow` | BC3 Loop | driving-adapter | keep | Installs + invokes the operating-loop Workflow so plugin users get the seven-move loop. |
| `ntm-browser-test-coordination` | BC2 Validation | supporting | merge-review | Fold into ntm. |
| `ntm-review-worker-orchestration` | BC5 Runtime | supporting | merge-review | Fold into ntm. |
| `operating-loop-skill` | BC5 Runtime | domain | merge-review | The loop; fold into rpi. |
| `operating-loop-workflow` | BC3 Loop | driving-adapter | merge-review | Loop workflow installer; fold into rpi. |
| `perf` | BC2 Validation | domain | update | Performance generator; add thresholds and proof examples. |
| `plan` | BC3 Loop | domain | update | Must output vertical slices and wave-validity checks. |
| `planning-workflow` | BC3 Loop | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `planning-workflow` | BC3 Loop | supporting | merge-review | Markdown planning; fold into plan. |
| `post-mortem` | BC3 Loop | domain | update | Loop closeout; connect to next-work and ratchet evidence. |
| `pr-implement` | BC5 Runtime | driving-adapter | update | GitHub PR implementation adapter; map to loop slices. |
| `pr-implement` | BC5 Runtime | driving-adapter | merge-review | Scoped PR impl; fold into implement. |
| `pr-prep` | BC5 Runtime | driving-adapter | update | PR publication adapter; align to evidence and release discipline. |
| `pr-research` | BC5 Runtime | driven-adapter | update | Upstream repo research adapter; add clean source/citation self-test. |
| `pr-research` | BC5 Runtime | driven-adapter | merge-review | Upstream research; fold into pr-prep. |
| `pre-mortem` | BC2 Validation | domain | update | Plan risk gate; add scenario/verdict self-test. |
| `product` | BC3 Loop | domain | keep | Product intent source; important for loop work selection. |
| `push` | BC5 Runtime | driving-adapter | update | Git adapter; add branch/worktree disposition self-test. |
| `quickstart` | BC3 Loop | driving-adapter | update | Operator routing entrypoint; align to current 3.0 first-value path. |
| `ratchet` | BC3 Loop | domain | update | Loop evidence ratchet; connect to cycle trace contract. |
| `quickstart` | BC3 Loop | driving-adapter | merge-review | Next-action shower; fold into status. |
| `ratchet` | BC3 Loop | domain | merge-review | Brownian-ratchet gates; fold into flywheel. |
| `rch` | BC5 Runtime | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `recover` | BC1 Corpus | driving-adapter | refactor | Session recovery is valuable but currently structurally heavy. |
| `red-team` | BC2 Validation | supporting | update | Probe generator; add severity/evidence contract. |
| `refactor` | BC2 Validation | supporting | update | Refactor generator; align with complexity thresholds and TDD proof. |
| `release` | BC2 Validation | supporting | update | Release gate driver; keep tied to local CI and evidence export. |
| `research` | BC1 Corpus | driving-adapter | update | Knowledge acquisition entrypoint; add source/citation self-test. |
| `reverse-engineer-rpi` | BC1 Corpus | supporting | update | External product-spec extraction; ensure clean-room rules stay explicit. |
| `reverse-engineer-rpi` | BC1 Corpus | supporting | cut-review | Niche meta tool; rarely fires. |
| `review` | BC2 Validation | driving-adapter | update | Human-facing review gate; align to validator output contract. |
| `rpi` | BC3 Loop | supporting | refactor | Lifecycle orchestrator; should consume BDD intent and preserve objective spine. |
| `sbh` | BC5 Runtime | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `scaffold` | BC4 Factory | supporting | update | Code/artifact scaffolder; add non-goal and validation examples. |
| `scenario` | BC2 Validation | supporting | update | Holdout scenario manager; important for behavioral evals. |
| `scenario` | BC2 Validation | supporting | merge-review | Holdout scenarios; fold into eval-outcomes. |
| `scope` | BC5 Runtime | driven-adapter | keep | Runtime filesystem gate; hard boundary skill. |
| `security` | BC2 Validation | driven-adapter | keep | Canonical security skill: continuous release-gate driver (security-gate.sh) PLUS the composable primitive library (security_suite.py / prompt_redteam.py) collapsed in from security-suite (cp-qqq, 2026-06-07). |
| `session-bootstrap` | BC5 Runtime | driving-adapter | keep | Universal init prompt; the fungibility contract for any-agent spawn (soc-vuu6.25). |
| `session-bootstrap` | BC5 Runtime | driving-adapter | merge-review | Init prompt; fold into inject. |
| `shared` | BC4 Factory | domain | keep | Shared contracts; avoid broad edits. |
| `ship-loop` | BC5 Runtime | driving-adapter | keep | Bot-paired internal-ship PR cycle; distinct from pr-* contribute family. |
| `ship-loop` | BC5 Runtime | driving-adapter | merge-review | Fast-lane ship; fold into crank. |
| `skill-auditor` | BC4 Factory | supporting | update | Audit role should consume new quality/domain rubrics. |
| `skill-builder` | BC4 Factory | supporting | update | Builder should scaffold SELF-TEST and domain metadata by default. |
| `standards` | BC4 Factory | domain | keep | Current pilot upgraded with SELF-TEST; continue incremental patches. |
| `status` | BC3 Loop | driving-adapter | update | Operator state surface; should show loop/domain/evidence status. |
| `swarm` | BC5 Runtime | supporting | update | Multi-agent runtime adapter; align with conflict-free wave rules. |
| `test` | BC2 Validation | supporting | update | Test generator; central to first-failing-test loop. |
| `trace` | BC1 Corpus | supporting | update | Decision trace builder; align to provenance and cycle trace. |
| `ubs` | BC5 Runtime | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `using-agentops` | BC4 Factory | generic | update | Operator education; align to 3.0 first-value path. |
| `trace` | BC1 Corpus | supporting | merge-review | Decision tracing; fold into recover. |
| `ubs` | BC5 Runtime | supporting | merge-review | UBS bug/security review; fold into review. |
| `using-agentops` | BC4 Factory | generic | merge-review | Workflow explainer; fold into inject. |
| `using-atm` | BC4 Factory | supporting | keep | Shippable AgentOps-scoped guide for the ATM leg of the out-of-session substrate (ATM+Agent Mail+managed-agents): spawn agent panes that run the /rpi and /evolve skills over a bead queue. Replaces the dangling external ntm/vibing-with-ntm pointers in automation-shape-routing with an owned, skills-as-runtime skill.. |
| `validate` | BC2 Validation | driving-adapter | keep | Designed-future canonical unified validator (m6v5.D Phase 1, epic soc-cp7pv); not redundant cruft — epic GO/REVERT is a separate decision (resolved KEEP 2026-05-24). |
| `vibe` | BC2 Validation | domain | update | Code-readiness validator; add self-test and tighten result contract. |
| `vibe` | BC2 Validation | domain | merge-review | Quick-readiness check; fold into validate as a --quick mode. |
| `vibing-with-ntm` | BC4 Factory | supporting | keep | New factory-built skill from the four-vendor corpus expansion; keep as clean-room AgentOps-owned capability.. |
| `workflow-builder` | BC4 Factory | supporting | keep | Scaffolds Claude Workflow scripts (composite capability); counterpart to skill-builder. |
<!-- END:full-skill-map -->
-241
View File
@@ -1,241 +0,0 @@
---
name: caam
user-invocable: false
skill_api_version: 1
hexagonal_role: supporting
metadata:
tier: execution
description: "Use when switching AI coding CLI accounts quickly to recover from subscription rate limits or OAuth friction."
practices:
- pragmatic-programmer
---
<!-- TOC: Quick Start | THE EXACT PROMPT | Smart Rotation | TUI | Isolated Profiles | References -->
# CAAM — Coding Agent Account Manager
> **Core Problem:** You hit rate limits on your $200/mo Claude Max subscription. Browser OAuth takes 30-60 seconds. CAAM swaps accounts in ~50ms.
## Quick Start
```bash
# Install
curl -fsSL "https://raw.githubusercontent.com/Dicklesworthstone/coding_agent_account_manager/main/install.sh?$(date +%s)" | bash
# Backup current account
caam backup claude alice@gmail.com
# Clear, login with another account, backup that too
caam clear claude
claude # /login with bob@gmail.com
caam backup claude bob@gmail.com
# Switch instantly forever
caam activate claude alice@gmail.com # ~50ms
caam activate claude bob@gmail.com # ~50ms
```
---
## THE EXACT PROMPT — Daily Commands
### Check Status
```bash
caam status
```
Shows active profile for each tool based on content hash matching.
### Instant Switch
```bash
caam activate claude bob@gmail.com
```
Restores auth files from vault. ~50ms, no browser.
### Smart Auto-Switch
```bash
caam activate claude --auto
```
Rotation algorithm picks best profile based on health, recency, cooldowns.
### Mark Rate Limited
```bash
caam cooldown set claude
```
Marks current profile for 60min. Rotation skips it.
### Zero-Friction Aliases
```bash
# Add to .bashrc/.zshrc
alias claude='caam run claude --'
alias codex='caam run codex --'
alias gemini='caam run gemini --'
# Now these auto-failover on rate limits
claude "explain this code"
```
---
## How It Works
Each AI CLI stores OAuth tokens in plain files. CAAM backs them up and restores them:
```
~/.claude.json ←→ ~/.local/share/caam/vault/claude/alice@gmail.com/
~/.codex/auth.json ←→ ~/.local/share/caam/vault/codex/work@company.com/
```
**That's it.** No daemons, no databases, no network calls. Just `cp` with extra steps.
---
## Supported Tools
| Tool | Subscription | Auth Files |
|------|--------------|------------|
| **Claude Code** | Claude Max ($200/mo) | `~/.claude.json`, `~/.config/claude-code/auth.json` |
| **Codex CLI** | GPT Pro ($200/mo) | `~/.codex/auth.json` |
| **Gemini CLI** | Gemini Ultra (~$275/mo) | `~/.gemini/settings.json`, `~/.gemini/oauth_credentials.json` |
---
## Smart Rotation
When you have multiple accounts, rotation picks the best one:
```bash
# Preview what rotation would select
caam next claude
# Let it pick automatically
caam activate claude --auto
```
### Health Indicators
| Icon | Status | Meaning |
|------|--------|---------|
| 🟢 | Healthy | Token valid >1hr, no recent errors |
| 🟡 | Warning | Token expiring <1hr, minor issues |
| 🔴 | Critical | Token expired, repeated errors |
| ⚪ | Unknown | No health data yet |
### Rotation Algorithms
| Algorithm | Description |
|-----------|-------------|
| `smart` (default) | Cooldown + health + recency + jitter |
| `round_robin` | Sequential, skipping cooldowns |
| `random` | Random among non-cooldown |
---
## Cooldown Tracking
```bash
# Mark current profile (60min default)
caam cooldown set claude
# Specify profile and duration
caam cooldown set claude/work@company.com --minutes 120
# View active cooldowns
caam cooldown list
# Clear early
caam cooldown clear claude/work@company.com
```
---
## TUI Dashboard
```bash
caam tui
```
### Keybindings
| Key | Action |
|-----|--------|
| `↑/↓` | Navigate profiles |
| `Enter` | Activate selected |
| `p` | Set project association |
| `c` | Mark/clear cooldown |
| `r` | Refresh |
| `q` | Quit |
---
## Project Associations
Link profiles to directories:
```bash
cd ~/projects/work-app
caam project set claude work@company.com
# Now in this directory:
caam activate claude # Auto-uses work@company.com
```
---
## Command Reference
| Command | Description |
|---------|-------------|
| `caam backup <tool> <email>` | Save current auth to vault |
| `caam activate <tool> <email>` | Restore auth from vault |
| `caam activate <tool> --auto` | Auto-select best profile |
| `caam status [tool]` | Show active profiles |
| `caam ls [tool]` | List saved profiles |
| `caam clear <tool>` | Remove auth files (logout) |
| `caam run <tool> [-- args]` | Wrap with auto-failover |
| `caam cooldown set <profile>` | Mark as rate limited |
| `caam cooldown list` | Show active cooldowns |
| `caam next <tool>` | Preview rotation selection |
| `caam tui` | Interactive dashboard |
---
## Flywheel Integration
| Tool | Integration |
|------|-------------|
| **NTM** | Each tmux pane uses different account via isolated profiles |
| **Agent Mail** | Agents coordinate account switching across sessions |
| **CASS** | Search sessions by account for usage patterns |
---
## References
| Topic | Reference |
|-------|-----------|
| Complete commands | [COMMANDS.md](references/COMMANDS.md) |
| Isolated profiles | [ISOLATED-PROFILES.md](references/ISOLATED-PROFILES.md) |
| Vault structure | [VAULT.md](references/VAULT.md) |
---
## Validation
```bash
# Verify installation
caam --version
# Check all profiles
caam status
# Test switch
caam activate claude --auto && caam status
```
+57 -1633
View File
File diff suppressed because it is too large Load Diff
+34
View File
@@ -0,0 +1,34 @@
---
name: account-rotation
description: "Use when you hit a usage/rate limit on a coding-agent subscription and need to switch accounts, or to spread swarm lanes across accounts. Routes by host+agent: macOS+Claude → claude-acct (Keychain swap); macOS+Codex/Gemini or any Linux/WSL → caam (file swap)."
---
# account-rotation — switch coding-agent accounts on a rate limit
Route by host+agent, then let the tool do the swap:
```
macOS + Claude → claude-acct (Keychain layer)
macOS + Codex/Gemini → caam (file layer)
Linux / WSL + anything → caam (file layer)
```
**Why the route:** caam swaps the auth *file*, which is correct for file-based
auth (Codex, Gemini, Claude-on-Linux). But Claude Code on macOS reads the login
**Keychain** (`Claude Code-credentials`) and ignores that file — so caam is a
no-op for Claude-on-Mac. `claude-acct` swaps the Keychain token **and** the
`~/.claude.json` `.oauthAccount` identity (both required, or only the current
account works).
```bash
claude-acct {list|current|use <name>|login <name> [email]} # macOS + Claude
caam {status|next|use} <tool> # else
```
**Two capture traps:** (1) distinct token bytes ≠ distinct accounts — verify by
account *email*, not hash; (2) the browser captures whichever account the provider
is signed into — log out / use Incognito before each capture login.
**Live-session caveat:** rotation changes what a *new* process picks up, not the
running session. Rotate, then relaunch. Ideal for putting each swarm lane on its
own account for parallel quota.
+12
View File
@@ -0,0 +1,12 @@
# Execution Profile — account-rotation
When the user hits a usage/rate limit and wants to switch accounts (or to spread
swarm lanes across accounts):
1. Detect host (`uname`) and which agent CLI is being rotated.
2. Route: macOS+Claude → `claude-acct`; macOS+Codex/Gemini or any Linux/WSL → `caam`.
3. macOS+Claude only: a full account = Keychain token + `~/.claude.json` `.oauthAccount`;
`claude-acct use <name>` swaps both. caam is a no-op there (it swaps a file Claude ignores).
4. Capturing a new account: log out / use Incognito first (the browser captures the
currently-signed-in account); verify by account email, not token hash.
5. Rotation affects new processes, not the live session — relaunch to move yourself.
+1
View File
@@ -359,6 +359,7 @@ These are how skills chain in practice:
| **sbh** | execution | Disk-pressure defense for AI coding workloads. Use when: disk full, low space, ballast, cleanup, scan artifacts, emergency, sbh daemon, sbh status. |
| **ubs** | execution | Use when reviewing code with UBS for bugs, security issues, AI-generated quality, or pre-commit checks. |
| **vibing-with-ntm** | execution | Use when tending NTM agent swarms, unsticking panes, handling rate limits, or coordinating convergence. |
| **account-rotation** | execution | "Use when you hit a usage/rate limit on a coding-agent subscription and need to switch accounts, or to spread swarm lanes across accounts. Routes by host+agent: macOS+Claude → claude-acct (Keychain swap); macOS+Codex/Gemini or any Linux/WSL → caam (file swap). One symptom, the right tool per host." |
### Internal Skills (8) — `metadata.internal: true`
+97
View File
@@ -0,0 +1,97 @@
---
name: account-rotation
user-invocable: false
skill_api_version: 1
hexagonal_role: supporting
metadata:
tier: execution
description: "Use when you hit a usage/rate limit on a coding-agent subscription and need to switch accounts, or to spread swarm lanes across accounts. Routes by host+agent: macOS+Claude → claude-acct (Keychain swap); macOS+Codex/Gemini or any Linux/WSL → caam (file swap). One symptom, the right tool per host."
practices:
- pragmatic-programmer
---
<!-- 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`.
```bash
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):
```bash
caam status <tool> # vault + health
caam next <tool> # rotate to next non-cooldown account
caam use <tool> <profile>
caam --help # full surface
```
On 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:
```bash
# 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.
+34
View File
@@ -0,0 +1,34 @@
{
"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"
]
}
}
-108
View File
@@ -1,108 +0,0 @@
---
name: caam
user-invocable: false
skill_api_version: 1
hexagonal_role: supporting
metadata:
tier: execution
description: "Use when switching AI coding CLI accounts quickly to recover from subscription rate limits or OAuth friction."
practices:
- pragmatic-programmer
---
<!-- TOC: Quick Start | Daily Operations | Rotation Doctrine | Flywheel Integration | References -->
# CAAM — Coding Agent Account Manager
> **Core Problem:** You hit rate limits on your $200/mo Claude Max subscription. Browser OAuth takes 30-60 seconds. CAAM swaps accounts in ~50ms.
**Don't re-learn the command surface here.** `caam --help` (and per-subcommand `--help`) self-describes every command and flag; the full catalog also lives in [COMMANDS.md](references/COMMANDS.md). This skill carries the operating doctrine: how to seed the vault, when to rotate vs cooldown, and how CAAM fits the agent fleet.
## How It Works (why it's safe)
Each AI CLI stores OAuth tokens in plain files (e.g. `~/.claude.json`, `~/.codex/auth.json`, `~/.gemini/oauth_credentials.json`). CAAM backs them up to a local vault and restores them on activate. **No daemons, no databases, no network calls** — just `cp` with extra steps. Vault layout: [VAULT.md](references/VAULT.md).
Supported tools: Claude Code, Codex CLI, Gemini CLI (each on its own subscription).
## Quick Start — Seeding the Vault
```bash
# Install
curl -fsSL "https://raw.githubusercontent.com/Dicklesworthstone/coding_agent_account_manager/main/install.sh?$(date +%s)" | bash
# Backup current account
caam backup claude alice@gmail.com
# Clear, login with another account, backup that too
caam clear claude
claude # /login with bob@gmail.com
caam backup claude bob@gmail.com
# Switch instantly forever
caam activate claude alice@gmail.com # ~50ms, no browser
```
A profile must be **backed up once** before it can ever be activated. Seed every account you own up front — mid-rate-limit is the wrong time to discover an empty vault.
## Daily Operations
The four moves that cover almost every session:
```bash
caam status # which profile is active per tool (content-hash matched)
caam activate claude --auto # rotation picks best profile (health, recency, cooldowns)
caam cooldown set claude # mark current profile rate-limited (60min default); rotation skips it
caam next claude # preview what rotation would select, without switching
```
### Zero-Friction Aliases
```bash
# Add to .bashrc/.zshrc
alias claude='caam run claude --'
alias codex='caam run codex --'
alias gemini='caam run gemini --'
# Now these auto-failover on rate limits
claude "explain this code"
```
### Project Associations
Link profiles to directories so work and personal accounts never cross:
```bash
cd ~/projects/work-app
caam project set claude work@company.com
caam activate claude # in this directory, auto-uses work@company.com
```
## Rotation Doctrine
- **Hit a rate limit → `caam cooldown set <tool>` BEFORE switching.** Rotation can only skip profiles it knows are burned. Switching without marking the cooldown sends the next `--auto` right back into the limited account.
- **Prefer `--auto` over hand-picking** once ≥2 profiles exist — the default `smart` algorithm weighs cooldown, health, recency, and jitter. (`round_robin`/`random` exist; details in [COMMANDS.md](references/COMMANDS.md).)
- **Check `caam status` after any activate** — content-hash matching tells you what is actually live, not what you intended.
- The interactive dashboard is `caam tui` (blocks the terminal — keybindings self-described in-app). Agents should stick to the non-interactive commands above.
## Flywheel Integration
| Tool | Integration |
|------|-------------|
| **NTM** | Each tmux pane uses a different account via isolated profiles — see [ISOLATED-PROFILES.md](references/ISOLATED-PROFILES.md) |
| **Agent Mail** | Agents coordinate account switching across sessions |
| **CASS** | Search sessions by account for usage patterns |
## References
| Topic | Reference |
|-------|-----------|
| Complete commands | [COMMANDS.md](references/COMMANDS.md) |
| Isolated profiles | [ISOLATED-PROFILES.md](references/ISOLATED-PROFILES.md) |
| Vault structure | [VAULT.md](references/VAULT.md) |
## Validation
```bash
caam --version # verify installation
caam status # check all profiles
caam activate claude --auto && caam status # test switch
```
-302
View File
@@ -1,302 +0,0 @@
# CAAM Complete Command Reference
## Table of Contents
- [Auth File Swapping](#auth-file-swapping)
- [Smart Profile Management](#smart-profile-management)
- [Profile Isolation](#profile-isolation)
- [Configuration](#configuration)
---
## Auth File Swapping
### backup
Save current auth files to vault.
```bash
caam backup <tool> <email>
```
**Example:**
```bash
caam backup claude alice@gmail.com
```
### activate
Restore auth files from vault (instant switch).
```bash
caam activate <tool> <email> [flags]
```
**Flags:**
| Flag | Description |
|------|-------------|
| `--auto` | Use rotation algorithm to pick best |
| `--backup-current` | Backup current auth before switching |
| `--force` | Activate even if in cooldown |
**Aliases:** `switch`, `use`
**Examples:**
```bash
caam activate claude bob@gmail.com
caam activate claude --auto
caam switch codex work@company.com --backup-current
```
### status
Show which profile is currently active.
```bash
caam status [tool]
```
Uses content hashing to detect active profile, even if switched manually.
### ls
List all saved profiles in vault.
```bash
caam ls [tool]
```
### clear
Remove auth files (logout state).
```bash
caam clear <tool>
```
### delete
Remove a saved profile from vault.
```bash
caam delete <tool> <email>
```
### paths
Show auth file locations for each tool.
```bash
caam paths [tool]
```
Useful if tool updates change file locations.
### uninstall
Restore originals and remove caam data/config.
```bash
caam uninstall [flags]
```
**Flags:**
| Flag | Description |
|------|-------------|
| `--dry-run` | Show what would be restored/removed |
| `--keep-backups` | Keep vault after restoring originals |
| `--force` | Skip confirmation prompt |
---
## Smart Profile Management
### cooldown set
Mark profile as rate-limited.
```bash
caam cooldown set <provider/profile> [flags]
```
**Flags:**
| Flag | Default | Description |
|------|---------|-------------|
| `--minutes` | 60 | Cooldown duration |
**Examples:**
```bash
caam cooldown set claude # Current profile, 60min
caam cooldown set claude/work@co.com --minutes 120
```
### cooldown list
List active cooldowns with remaining time.
```bash
caam cooldown list
```
### cooldown clear
Clear cooldown for a profile.
```bash
caam cooldown clear <provider/profile>
caam cooldown clear --all
```
### next
Preview which profile rotation would select.
```bash
caam next <tool>
```
**Output:**
```
Recommended: bob@gmail.com
+ Healthy token (expires in 4h 32m)
+ Not used recently (2h ago)
Alternatives:
alice@gmail.com - Used recently (15m ago)
In cooldown:
carol@gmail.com - In cooldown (45m remaining)
```
### run
Wrap CLI with automatic failover on rate limits.
```bash
caam run <tool> [flags] [-- args]
```
**Flags:**
| Flag | Default | Description |
|------|---------|-------------|
| `--max-retries` | 1 | Maximum retry attempts |
| `--cooldown` | 60m | Cooldown after rate limit |
| `--algorithm` | smart | Rotation algorithm |
| `--quiet` | off | Suppress notifications |
**Example:**
```bash
caam run claude -- "explain this code"
```
### project set
Associate current directory with a profile.
```bash
caam project set <tool> <profile>
```
**Example:**
```bash
cd ~/projects/work-app
caam project set claude work@company.com
```
### project get
Show project associations for current directory.
```bash
caam project get [tool]
```
### tui
Interactive TUI dashboard.
```bash
caam tui
```
---
## Profile Isolation
For running multiple accounts simultaneously.
### profile add
Create isolated profile directory.
```bash
caam profile add <tool> <email>
```
### profile ls
List isolated profiles.
```bash
caam profile ls [tool]
```
### profile delete
Delete isolated profile.
```bash
caam profile delete <tool> <email>
```
### profile status
Show isolated profile status.
```bash
caam profile status <tool> <email>
```
### login
Run login flow for isolated profile.
```bash
caam login <tool> <email>
```
### exec
Run CLI with isolated profile.
```bash
caam exec <tool> <email> [-- args]
```
**Example:**
```bash
caam exec codex work@company.com -- "implement feature X"
```
---
## Configuration
Config file: `~/.caam/config.yaml`
```yaml
stealth:
rotation:
enabled: true
algorithm: smart # smart | round_robin | random
cooldown:
enabled: true # Warn when activating cooldown profiles
```
### config commands
```bash
caam config --list # Show all config
caam config --get key # Get specific value
caam config --set key=value # Set value
caam config --edit # Open in editor
```
-158
View File
@@ -1,158 +0,0 @@
# Isolated Profiles — Running Multiple Accounts Simultaneously
## Table of Contents
- [When to Use](#when-to-use)
- [Setup](#setup)
- [How It Works](#how-it-works)
- [Workflow Examples](#workflow-examples)
---
## When to Use
| Mode | Use Case |
|------|----------|
| **Vault Profiles** | Switch between accounts sequentially (most common) |
| **Isolated Profiles** | Run multiple accounts **at the same time** |
### Isolated Profile Use Cases
- Running work and personal accounts in parallel
- Multi-agent swarm with different account pools
- Testing across accounts simultaneously
- NTM panes with different accounts per pane
---
## Setup
### 1. Create Isolated Profiles
```bash
caam profile add codex work@company.com
caam profile add codex personal@gmail.com
```
### 2. Login to Each (One-Time)
```bash
caam login codex work@company.com # Opens browser
caam login codex personal@gmail.com # Opens browser
```
### 3. Run Simultaneously
```bash
# Terminal 1
caam exec codex work@company.com -- "implement feature X"
# Terminal 2
caam exec codex personal@gmail.com -- "review PR #123"
```
---
## How It Works
Each isolated profile gets its own `$HOME` and tool-specific home:
```
~/.local/share/caam/profiles/
└── codex/
└── work@company.com/
├── profile.json # Profile metadata
├── codex_home/ # Isolated CODEX_HOME
│ └── auth.json
└── home/ # Pseudo-HOME with symlinks
├── .ssh -> ~/.ssh
└── .gitconfig -> ~/.gitconfig
```
When you run `caam exec`:
1. Sets `$HOME` to the isolated home directory
2. Sets tool-specific env (e.g., `$CODEX_HOME`)
3. Symlinks your real `.ssh`, `.gitconfig`, etc.
4. Auth files are isolated, everything else is shared
---
## Workflow Examples
### Parallel Development
```bash
# Work project in one terminal
caam exec codex work@company.com -- "implement auth system"
# Personal project in another
caam exec codex personal@gmail.com -- "review my side project"
```
### NTM Integration
```bash
# Spawn agents with different accounts
ntm spawn myproject --cc=2
# Pane 1: Use work account
caam exec claude work@company.com -- "$(cat prompt.txt)"
# Pane 2: Use personal account
caam exec claude personal@gmail.com -- "$(cat prompt.txt)"
```
### Multi-Account Swarm
```bash
# Create profiles for all accounts
caam profile add claude alice@gmail.com
caam profile add claude bob@gmail.com
caam profile add claude carol@gmail.com
# Login to each
caam login claude alice@gmail.com
caam login claude bob@gmail.com
caam login claude carol@gmail.com
# Run in parallel across multiple terminals
for email in alice bob carol; do
caam exec claude ${email}@gmail.com -- "$(cat swarm_prompt.txt)" &
done
```
---
## Commands
| Command | Description |
|---------|-------------|
| `caam profile add <tool> <email>` | Create isolated profile |
| `caam profile ls [tool]` | List isolated profiles |
| `caam profile delete <tool> <email>` | Delete profile |
| `caam profile status <tool> <email>` | Show profile status |
| `caam login <tool> <email>` | Run login for isolated profile |
| `caam exec <tool> <email> [-- args]` | Run CLI with profile |
---
## Vault vs Isolated
| Feature | Vault | Isolated |
|---------|-------|----------|
| Accounts active | 1 at a time | Multiple simultaneously |
| Setup complexity | Lower | Higher |
| Switching speed | ~50ms | N/A (parallel) |
| Directory isolation | No | Yes |
| Use case | Sequential switching | Parallel execution |
### When to Use Each
**Use Vault Profiles when:**
- You switch accounts throughout the day
- Only one session active at a time
- Want simplest setup
**Use Isolated Profiles when:**
- You need accounts running in parallel
- Multi-agent swarm with account diversity
- Different accounts for different terminals
-195
View File
@@ -1,195 +0,0 @@
# Vault Structure and Internals
## Table of Contents
- [Directory Layout](#directory-layout)
- [Auth File Locations](#auth-file-locations)
- [How Detection Works](#how-detection-works)
- [Tips](#tips)
---
## Directory Layout
```
~/.local/share/caam/
├── vault/ # Saved auth profiles
│ ├── claude/
│ │ ├── alice@gmail.com/
│ │ │ ├── .claude.json # Backed up auth
│ │ │ ├── auth.json # From ~/.config/claude-code/
│ │ │ └── meta.json # Timestamp, original paths
│ │ └── bob@gmail.com/
│ │ └── ...
│ ├── codex/
│ │ └── work@company.com/
│ │ └── auth.json
│ └── gemini/
│ └── personal@gmail.com/
│ ├── settings.json
│ └── oauth_credentials.json
│
├── profiles/ # Isolated profiles (advanced)
│ └── codex/
│ └── work@company.com/
│ ├── profile.json # Profile metadata
│ ├── codex_home/ # Isolated CODEX_HOME
│ │ └── auth.json
│ └── home/ # Pseudo-HOME with symlinks
│ ├── .ssh -> ~/.ssh
│ └── .gitconfig -> ~/.gitconfig
│
├── state/ # Runtime state
│ ├── cooldowns.json # Active cooldown tracking
│ ├── health.json # Profile health scores
│ └── usage.json # Usage analytics
│
└── config.yaml # User configuration
```
---
## Auth File Locations
### Claude Code (Claude Max)
| File | Location |
|------|----------|
| Main auth | `~/.claude.json` |
| Claude Code auth | `~/.config/claude-code/auth.json` |
| Settings | `~/.claude/settings.json` |
**Login:** `/login` inside CLI
### Codex CLI (GPT Pro)
| File | Location |
|------|----------|
| Auth | `~/.codex/auth.json` (or `$CODEX_HOME/auth.json`) |
| Config | `~/.codex/config.toml` |
**Login:** `codex login` or `codex login --device-auth`
### Gemini CLI (Gemini Ultra)
| File | Location |
|------|----------|
| Settings | `~/.gemini/settings.json` |
| OAuth | `~/.gemini/oauth_credentials.json` |
| API Key | `~/.gemini/.env` |
**Login:** Start `gemini`, select "Login with Google"
---
## How Detection Works
`caam status` uses **content hashing**:
1. SHA-256 hash current auth files
2. Compare against all vault profiles
3. Match = that's what's active
### Benefits
- Profiles detected even if you switched manually
- No hidden state files that can desync
- Works correctly after reboots
- Self-healing if state gets corrupted
### Example
```bash
$ caam status
claude: alice@gmail.com (active)
Hash: a7f3b2c1d4...
Last switch: 2h ago
Health: 🟢 Healthy
codex: work@company.com (active)
Hash: e9b1d4f5c6...
Last switch: 30m ago
Health: 🟡 Token expiring soon
```
---
## Tips
### Use Email as Profile Name
Self-documenting — you'll never forget which account is which.
```bash
# Good
caam backup claude alice@gmail.com
# Bad
caam backup claude account1
```
### Backup Before Clearing
```bash
caam backup claude current@email.com && caam clear claude
```
Or use the flag:
```bash
caam activate claude new@email.com --backup-current
```
### Don't Sync Vault Across Machines
Auth tokens often contain machine-specific identifiers (device IDs). Backup and restore on each machine separately.
### Check Auth Paths After Tool Updates
```bash
caam paths
```
If locations change, CAAM will be updated. File an issue if you notice discrepancies.
---
## Meta File Format
Each vault profile includes `meta.json`:
```json
{
"email": "alice@gmail.com",
"tool": "claude",
"created_at": "2025-01-15T10:30:00Z",
"last_activated": "2025-01-18T14:22:00Z",
"original_paths": {
".claude.json": "/home/user/.claude.json",
"auth.json": "/home/user/.config/claude-code/auth.json"
},
"hash": "a7f3b2c1d4e5f6..."
}
```
---
## Config File
`~/.caam/config.yaml`:
```yaml
stealth:
rotation:
enabled: true
algorithm: smart # smart | round_robin | random
cooldown:
enabled: true # Warn when activating cooldown profiles
default_minutes: 60
health:
refresh_interval: 5m
penalty_decay_rate: 0.2 # 20% reduction every 5 minutes
analytics:
enabled: true
retention_days: 30
```
-59
View File
@@ -1,59 +0,0 @@
{
"name": "caam",
"skill_api_version": 1,
"form": "A",
"quality_score": 0.9,
"sections": [
{ "id": "title", "title": "CAAM — Coding Agent Account Manager", "type": "intro", "priority": "required" },
{ "id": "quickstart", "title": "Quick Start", "type": "procedure", "priority": "required" },
{ "id": "commands", "title": "THE EXACT PROMPT — Daily Commands", "type": "procedure", "priority": "required" },
{ "id": "howitworks", "title": "How It Works", "type": "overview", "priority": "required" },
{ "id": "tools", "title": "Supported Tools", "type": "table", "priority": "standard" },
{ "id": "rotation", "title": "Smart Rotation", "type": "procedure", "priority": "standard" },
{ "id": "cooldown", "title": "Cooldown Tracking", "type": "procedure", "priority": "standard" },
{ "id": "tui", "title": "TUI Dashboard", "type": "table", "priority": "standard" },
{ "id": "cmdref", "title": "Command Reference", "type": "table", "priority": "required" },
{ "id": "flywheel", "title": "Flywheel Integration", "type": "routing", "priority": "standard" },
{ "id": "references", "title": "References", "type": "routing", "priority": "required" },
{ "id": "validation", "title": "Validation", "type": "procedure", "priority": "required" }
],
"references": [
{ "file": "references/COMMANDS.md", "topic": "complete caam command reference" },
{ "file": "references/ISOLATED-PROFILES.md", "topic": "per-pane isolated profiles for NTM swarms" },
{ "file": "references/VAULT.md", "topic": "auth-file vault structure and layout" }
],
"metadata": {
"tier": "execution",
"stability": "stable",
"dependencies": ["ntm", "agent-mail", "cass"],
"hexagonal_role": "supporting",
"context_window": "inherit",
"practices": ["pragmatic-programmer"],
"triggers": [
"caam",
"switch AI CLI account",
"rate limit recovery",
"rotate Claude Max accounts",
"swap codex/gemini auth",
"account activate",
"OAuth friction",
"cooldown rate-limited profile",
"multi-account agent CLI"
],
"token_estimate": {
"minimal": 60,
"overview": 260,
"standard": 900,
"full": 1700
}
},
"output_contract": "An activated CLI auth profile (~50ms swap from the vault), a cooldown/rotation state update, or `caam status` showing the active profile per tool. No browser OAuth round-trip.",
"evidence": {
"sources": [
"skills/caam/SKILL.md",
"skills/caam/references/COMMANDS.md",
"skills/caam/references/ISOLATED-PROFILES.md",
"skills/caam/references/VAULT.md"
]
}
}