caam について
CAAMは、Claude Code、Codex CLI、Gemini CLIの認証ファイルをバックアップし、アカウントを切り替えるGo製コマンドラインツールです。分離したプロファイルでの並行実行や、ローテーション選択、レート制限後の自動切り替えにも対応します。
主な機能
- 01認証プロファイルのバックアップと即時切り替え
- 02コンテンツハッシュによる有効アカウントの識別
- 03並行セッション用のアカウントディレクトリ分離
- 04状態とクールダウンに基づくアカウント選択
- 05レート制限後の自動フェイルオーバー
- 06ターミナルダッシュボードとプロジェクト別設定
活用シーン
- 01使用制限に達した後に別アカウントへ切り替え
- 02別々のターミナルで複数アカウントを同時実行
- 03プロジェクトのディレクトリに応じてアカウントを選択
- 04アカウント状態の確認とクールダウンの管理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dicklesworthstone/ agent_flywheel_clawdbot_skills_and_integrations --skill caamインストール後、Claude Code で/caamを入力して読み込まれたか確認します。
詳細
CAAM — コーディングエージェントのアカウントマネージャー
定額制のAIコーディングサブスクリプション(Claude Max、GPT Pro、Gemini Ultra)でアカウントを即座に切り替えるためのGo製CLIです。レート制限に達したとき、ブラウザーでのOAuth認証に30~60秒かける代わりに、約50msでアカウントを切り替えられます。
これが必要な理由
定額制のAIコーディングサブスクリプションに、月額200~275ドルを支払っています。これらのプランには、請求額の上限ではなく、時間の経過とともにリセットされるローリング方式の使用制限があります。作業の途中で制限に達すると、次のようになります。
問題点:
/login → browser opens → sign out of Google → sign into different Google →
authorize app → wait for redirect → back to terminal
複数のツールを使っていると、1日に5回以上、毎回30~60秒も作業が中断されます。
解決策:
caam activate claude [email protected] # ~50ms, done
ブラウザーも、面倒なOAuth認証の手順も必要ありません。作業の流れを中断することなく続けられます。
仕組み
各AI CLIは、OAuthトークンをプレーンテキストのファイルに保存します。CAAMはそれらをバックアップし、復元します。
~/.claude.json ←→ ~/.local/share/caam/vault/claude/[email protected]/
~/.codex/auth.json ←→ ~/.local/share/caam/vault/codex/[email protected]/
これだけです。 デーモンも、データベースも、ネットワーク通信もありません。ちょっとした手順を加えたcpにすぎません。
これで機能する理由
OAuthトークンはベアラートークンです。つまり、トークンを持っていればアクセスできます。CLIツールは、トークンファイルにすでに含まれている情報以外で、マシンを識別しません。ファイルを入れ替えることは、その認証済みセッションとして「振る舞う」ことと同じです。
プロファイルの検出
caam statusはコンテンツハッシュを使います。
- 現在の認証ファイルのSHA-256ハッシュを計算します
- すべての保管庫プロファイルと比較します
- 一致すれば、そのプロファイルが有効です
この仕組みにより、次のことが可能です。
- 手動で切り替えた場合もプロファイルを検出できます
- 同期がずれる可能性のある隠し状態ファイルはありません
- 再起動後も正しく動作します
クイックスタート
# Install
curl -fsSL "https://raw.githubusercontent.com/Dicklesworthstone/coding_agent_account_manager/main/install.sh?$(date +%s)" | bash
# Backup current account
caam backup claude [email protected]
# Clear and login to another account
caam clear claude
claude # /login with [email protected]
caam backup claude [email protected]
# Switch instantly forever
caam activate claude [email protected] # < 100ms
caam activate claude [email protected] # < 100ms
# Check status
caam status
2つの動作モード
1. 保管庫プロファイル(シンプルな切り替え)
認証ファイルをその場で入れ替えます。ツールごとに有効にできるアカウントは1つです。即座に切り替えられます。
caam backup claude [email protected]
caam activate claude [email protected]
次のような場合に使用します: アカウントを順番に切り替えたい場合(最も一般的な使い方)。
2. 分離プロファイル(並行セッション)
ディレクトリを完全に分離して、複数のアカウントを同時に実行します。
caam profile add codex [email protected]
caam profile add codex [email protected]
caam exec codex [email protected] -- "implement feature X"
caam exec codex [email protected] -- "review code"
各プロファイルには独自の$HOMEと$CODEX_HOMEが割り当てられ、実際の.ssh、.gitconfigなどへのシンボリックリンクが作成されます。
次のような場合に使用します: 別々のターミナルで2つのアカウントを同時に実行する必要がある場合。
対応ツール
| ツール | サブスクリプション | 認証ファイル |
|---|---|---|
| Claude Code | Claude Max(月額200ドル) | ~/.claude.json、~/.config/claude-code/auth.json、~/.claude/settings.json |
| Codex CLI | GPT Pro(月額200ドル) | ~/.codex/auth.json(または$CODEX_HOME/auth.json) |
| Gemini CLI | Gemini Ultra(月額約275ドル) | ~/.gemini/settings.json、~/.gemini/oauth_credentials.json、~/.gemini/.env |
ツール固有の詳細
Claude Code(Claude Max)
- ログイン: CLI内で
/loginを実行します - レート制限: 5時間のローリング方式の使用枠
- 補足: 制限に達すると、レート制限のメッセージが表示されます。作業を続けるには、アカウントを切り替えてください。
Codex CLI(GPT Pro)
- ログイン:
codex loginまたはcodex login --device-auth(ヘッドレス環境の場合) - 補足:
CODEX_HOMEに対応しています。CAAMは~/.codex/config.tomlにcli_auth_credentials_store = "file"を書き込み、ファイルベースの認証を適用します。
Gemini CLI(Google One AI Premium)
- ログイン:
geminiを起動し、「Login with Google」を選択するか、/authを使ってモードを切り替えます - 補足: OAuthキャッシュは
oauth_credentials.jsonに保存され、APIキー方式では.envが使われます。
コマンドリファレンス
認証ファイルの入れ替え(主な機能)
| コマンド | 説明 |
|---|---|
caam backup <tool> <email> | 現在の認証ファイルを保管庫に保存します |
caam activate <tool> <email> | 保管庫から認証ファイルを復元します(即座に切り替え) |
caam status [tool] | 現在有効なプロファイルを表示します |
caam ls [tool] | 保管庫に保存されているすべてのプロファイルを一覧表示します |
caam delete <tool> <email> | 保存済みのプロファイルを削除します |
caam paths [tool] | 各ツールの認証ファイルの場所を表示します |
caam clear <tool> | 認証ファイルを削除します(ログアウト状態) |
caam uninstall | 元のファイルを復元し、caamのデータと設定を削除します |
エイリアス: caam switchとcaam useはcaam activateと同様に動作します
有効化オプション
| フラグ | 説明 |
|---|---|
--auto | ローテーションアルゴリズムを使って最適なプロファイルを選択します |
--backup-current | 切り替え前に現在の認証情報をバックアップします |
--force | プロファイルがクールダウン中でも有効化します |
アンインストールオプション
| フラグ | 説明 |
|---|---|
--dry-run | 復元または削除される内容を表示します |
--keep-backups | 元の状態を復元した後もボールトを保持します |
--force | 確認プロンプトをスキップします |
スマートプロファイル管理
| コマンド | 説明 |
|---|---|
caam activate <tool> --auto | ローテーションアルゴリズムを使って最適なプロファイルを自動選択します |
caam next <tool> | ローテーションで選択されるプロファイルをプレビューします |
caam run <tool> [-- args] | レート制限時に自動フェイルオーバーするよう CLI をラップします |
caam cooldown set <provider/profile> | プロファイルをレート制限中としてマークします(デフォルト:60min) |
caam cooldown list | 有効なクールダウンと残り時間を一覧表示します |
caam cooldown clear <provider/profile> | プロファイルのクールダウンを解除します |
caam cooldown clear --all | すべての有効なクールダウンを解除します |
caam project set <tool> <profile> | 現在のディレクトリをプロファイルに関連付けます |
caam project get [tool] | 現在のディレクトリに関連付けられたプロファイルを表示します |
caam tui | 対話型 TUI ダッシュボード |
プロファイルの分離(上級者向け)
| コマンド | 説明 |
|---|---|
caam profile add <tool> <email> | 分離されたプロファイルディレクトリを作成します |
caam profile ls [tool] | 分離されたプロファイルを一覧表示します |
caam profile delete <tool> <email> | 分離されたプロファイルを削除します |
caam profile status <tool> <email> | 分離されたプロファイルのステータスを表示します |
caam login <tool> <email> | 分離されたプロファイルのログインフローを実行します |
caam exec <tool> <email> [-- args] | 分離されたプロファイルを使って CLI を実行します |
スマートプロファイル管理
複数のプロバイダーで複数のアカウントを利用している場合、どのアカウントに利用枠の余裕があるかを手動で把握するのは面倒です。スマートプロファイル管理を使うと、この判断を自動化できます。
プロファイルの健全性スコア
各プロファイルには健全性インジケーターが表示されます。
| アイコン | ステータス | 意味 |
|---|---|---|
| 🟢 | 正常 | トークンが1時間を超えて有効で、最近エラーが発生していません |
| 🟡 | 警告 | トークンの有効期限が1時間以内、または軽微な問題があります |
| 🔴 | 重大 | トークンの有効期限が切れているか、直近1時間にエラーが繰り返し発生しています |
| ⚪ | 不明 | 健全性データがまだありません |
健全性スコアは、次の要素を組み合わせて算出されます。
- トークンの有効期限:OAuth トークンの有効期限までの時間
- エラー履歴:最近の認証エラーまたはレート制限エラー
- ペナルティスコア:蓄積された問題(指数減衰により5分ごとに20%減少)
- プラン種別:Enterprise/Pro プランにはわずかなスコア上昇が適用されます
エラーが発生しない状態が約30分続くと、ペナルティスコアはほぼゼロに戻ります。
トークンの事前更新
CAAM は OAuth トークンの有効期限が切れる前に自動で更新し、セッション途中での認証失敗を防ぎます。
スマートローテーションアルゴリズム
caam activate claude --auto を実行すると、次のアルゴリズムが使われます。
| アルゴリズム | 説明 |
|---|---|
| smart(デフォルト) | 複数要素を考慮します:クールダウン状態、健全性、直近の利用状況(過去30分以内の利用を回避)、プラン種別、ランダムな揺らぎ |
| round_robin | クールダウン中のプロファイルをスキップしながら順番にローテーションします |
| random | クールダウン中でないプロファイルからランダムに選択します |
~/.caam/config.yaml で設定します。
stealth:
rotation:
enabled: true
algorithm: smart # smart | round_robin | random
cooldown:
enabled: true # Warn when activating cooldown profiles
クールダウンの追跡
アカウントがレート制限に達したときは、ローテーションでスキップされるようにマークします。
# Mark current Claude profile (default: 60 min cooldown)
caam cooldown set claude
# Specify profile and duration
caam cooldown set claude/[email protected] --minutes 120
# View active cooldowns
caam cooldown list
# Clear a cooldown early
caam cooldown clear claude/[email protected]
stealth.cooldown.enabled: true の場合、クールダウン中のプロファイルを有効化すると警告が表示され、確認を求められます。--force を使うと回避できます。
caam run による自動フェイルオーバー
レート制限を自動的に処理するため、CLI の実行をラップします。
caam run claude -- "explain this code"
# If Claude hits rate limit mid-session:
# 1. Current profile goes into cooldown
# 2. Next best profile selected via rotation
# 3. Command re-executed with new account
オプション:
| フラグ | デフォルト | 説明 |
|---|---|---|
--max-retries N | 1 | 最大再試行回数 |
--cooldown DURATION | 60m | レート制限後のクールダウン時間 |
--algorithm NAME | smart | ローテーションアルゴリズム |
--quiet | off | プロファイル切り替え通知を抑制します |
手間いらずのエイリアス:
alias claude='caam run claude --'
alias codex='caam run codex --'
alias gemini='caam run gemini --'
これで claude "explain this" はレート制限を透過的に処理します。
プロジェクトとプロファイルの関連付け
プロファイルをプロジェクトディレクトリに関連付けます。
cd ~/projects/work-app
caam project set claude [email protected]
# Now whenever you're in this directory
caam activate claude # Automatically uses [email protected]
関連付けはカスケードします。/home/user/projects に設定すると、より具体的な関連付けがない限り、すべてのサブディレクトリに適用されます。
TUI ショートカット: p を押すと、現在のプロファイルを作業ディレクトリのデフォルトに設定できます。
ローテーション候補のプレビュー
$ caam next claude
Recommended: [email protected]
+ Healthy token (expires in 4h 32m)
+ Not used recently (2h ago)
Alternatives:
[email protected] - Used recently (15m ago)
In cooldown:
[email protected] - In cooldown (45m remaining)
ローテーションの選択内容を把握したり、条件付きロジックをスクリプト化したりする際に便利です。
使用状況の分析
CAAM はプロファイル全体の有効化パターンとセッション時間を追跡し、使用状況の分布を把握できるようにします。
TUI ダッシュボード
プロファイルを視覚的に管理するための、対話型ターミナル UI です。
caam tui
TUI の機能
- ヘルスインジケーター付きの視覚的なプロファイル一覧
- クールダウン状態の表示
- ステータスバーでのプロジェクト関連付け表示
- ホットリロード:別のターミナルでプロファイルが変更されると自動更新します
TUI のキー割り当て
| キー | 操作 |
|---|---|
↑/↓ | プロファイルを移動 |
Enter | 選択したプロファイルを有効化 |
p | プロジェクトを関連付け |
c | クールダウンを設定/解除 |
r | 更新 |
q | 終了 |
Vault の構成
~/.local/share/caam/
├── vault/ # Saved auth profiles
│ ├── claude/
│ │ ├── [email protected]/
│ │ │ ├── .claude.json # Backed up auth
│ │ │ ├── auth.json # From ~/.config/claude-code/
│ │ │ └── meta.json # Timestamp, original paths
│ │ └── [email protected]/
│ ├── codex/
│ │ └── [email protected]/
│ │ └── auth.json
│ └── gemini/
│ └── [email protected]/
│ └── settings.json
│
└── profiles/ # Isolated profiles (advanced)
└── codex/
└── [email protected]/
├── profile.json # Profile metadata
├── codex_home/ # Isolated CODEX_HOME
│ └── auth.json
└── home/ # Pseudo-HOME with symlinks
├── .ssh -> ~/.ssh
└── .gitconfig -> ~/.gitconfig
ワークフローの例
日常的なワークフロー
# Morning: Check what's active
caam status
# claude: [email protected] (active)
# codex: [email protected] (active)
# gemini: [email protected] (active)
# Afternoon: Hit Claude usage limit
caam activate claude [email protected]
claude # Continue immediately with new account
複数アカウントの初期設定
# 1. Login to first account using normal flow
claude # /login → authenticate with [email protected]
# 2. Backup the auth using email as profile name
caam backup claude [email protected]
# 3. Clear and login to second account
caam clear claude
claude # /login → authenticate with [email protected]
# 4. Backup that too
caam backup claude [email protected]
# 5. Switch instantly forever!
caam activate claude [email protected] # < 100ms
caam activate claude [email protected] # < 100ms
並行セッションの設定
# Create isolated profiles
caam profile add codex [email protected]
caam profile add codex [email protected]
# Login to each (one-time, opens browser)
caam login codex [email protected]
caam login codex [email protected]
# Run simultaneously in different terminals
caam exec codex [email protected] -- "implement auth system"
caam exec codex [email protected] -- "review PR #123"
スマートローテーションのワークフロー
# Let rotation pick the best profile
caam activate claude --auto
# Using rotation: claude/[email protected]
# Recommended: [email protected]
# + Healthy token (expires in 4h 32m)
# + Not used recently (2h ago)
# Hit a rate limit? Mark it
caam cooldown set claude
# Recorded cooldown for claude/[email protected] until 14:30 (58m remaining)
# Next activation picks another profile automatically
caam activate claude --auto
# Using rotation: claude/[email protected]
手間いらずモード
# Add aliases to .bashrc/.zshrc
alias claude='caam run claude --'
alias codex='caam run codex --'
# Use tools normally
claude "explain this authentication flow"
# If rate limited mid-session, caam automatically:
# 1. Marks current profile as in cooldown
# 2. Selects next best profile via rotation
# 3. Re-runs command with new profile
# All transparent - you just see the output
インストール
# One-liner (recommended)
curl -fsSL "https://raw.githubusercontent.com/Dicklesworthstone/coding_agent_account_manager/main/install.sh?$(date +%s)" | bash
# From source
git clone https://github.com/Dicklesworthstone/coding_agent_account_manager
cd coding_agent_account_manager
go build -o caam ./cmd/caam
sudo mv caam /usr/local/bin/
# Go install
go install github.com/Dicklesworthstone/coding_agent_account_manager/cmd/caam@latest
ヒント
- 実際のメールアドレスをプロファイル名に使用する — 説明的で、どのアカウントか忘れません
- クリアする前にバックアップする:
caam backup claude [email protected] && caam clear claude - --backup-current フラグを使用する:
caam activate claude [email protected] --backup-current - ステータスをこまめに確認する:
caam statusで、すべてのツールで現在有効なものを確認できます - Vault をマシン間で同期しない — 認証トークンにはマシン固有の識別子が含まれていることがよくあります
caam pathsを使用する — ツールのアップデートで認証ファイルの場所が変更された場合、現在のパスを確認できます
よくある質問
Q:API キーでも使えますか? いいえ。CAAM は OAuth を使用する固定料金のサブスクリプションプラン(Claude Max、GPT Pro、Gemini Ultra)向けです。API キーは切り替える必要がないため、別々のキーを使用してください。
Q:これは利用規約に違反しますか? いいえ。正規に購入したご自身のサブスクリプションを使用します。CAAM はローカルの認証ファイルを管理するものであり、アカウントの共有やレート制限の回避、API トラフィックの変更は行いません。各アカウントには引き続き個別の使用制限が適用されます。
Q:ツールのアップデートで認証ファイルの場所が変更された場合はどうなりますか?
caam paths を実行すると、現在の場所を確認できます。場所が変更された場合は、CAAM を更新します。相違に気付いた場合は、issue を登録してください。
Q:Vault をマシン間で同期できますか? 同期しないでください。認証トークンにはマシン固有の識別子(デバイス ID など)が含まれていることがよくあります。各マシンで個別にバックアップと復元を行ってください。
Q:Vault プロファイルと分離プロファイルの違いは何ですか?
- Vault プロファイル(
backup/activate):認証情報をその場で切り替え、一度に有効にできるアカウントは 1 つです - 分離プロファイル(
profile add/exec):ディレクトリを完全に分離し、複数のアカウントを同時に実行できます
Q:切り替えると実行中のセッションに影響しますか? 実行中の CLI で認証エラーが発生する場合があります。新しいセッションを開始する前に切り替え、セッションの実行中には切り替えないことをおすすめします。
Q:現在どのアカウントを使用しているか確認するにはどうすればよいですか?
caam status を実行してください。コンテンツハッシュの照合に基づき、各ツールで有効なプロファイルが表示されます。
Flywheel との統合
| ツール | 統合方法 |
|---|---|
| NTM | 各 tmux ペインで、分離されたプロファイルを使って異なるアカウントを利用できます |
| Agent Mail | エージェントはセッション間でアカウントの切り替えを調整できます |
| CASS | アカウント別にセッションを検索し、利用パターンを追跡できます |
| DCG | 相互作用はありません(CAAM は認証を管理し、DCG はコマンドを保護します) |