Claude Media
Agent Teamsが動かないときの対処法 — 出てこない・早期に止まる・tmuxが残る

Agent Teamsが動かないときの対処法 — 出てこない・早期に止まる・tmuxが残る

チームメイトが出てこない、勝手に止まる、tmuxが残る。Agent Teamsの5つの典型症状を、原因の切り分け方と対処コマンドまで追います。

Agent Teamsのトラブルは5つの症状に分かれる

「チームメイトが見えない」「勝手にチームが組まれる」「権限プロンプトが多い」「途中で止まる」「tmuxが残る」。Agent Teamsで困る場面は、この5つの症状で切り分けられます。設定で直るものと、設定では直らない制約があります。

前提として、Agent Teamsは実験的機能で、既定では無効です。settings.jsonのenvにCLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: "1"を設定しない限り、Claudeはチームを組みません。チームメイトのスポーンには対話セッションも要ります。-pフラグの非対話モードやAgent SDK経由では、この変数を有効にしていてもチームメイトは生成されません。名前を付けたサブエージェントは通常のSub-agentとして動きます。

「チームが動かない」と感じたら、まず環境変数と対話モードかどうかを見てください。

チームメイトが出てこない

指示を出してもチームメイトが1人も表示されないときは、次の順で確かめます。

手順

チームメイトが見えないときの確認順

  1. 1

    エージェントパネルを探す

    in-processモード(既定)では、チームメイトはプロンプト入力欄の下のエージェントパネルに出ます。上下矢印キーで選び、Enterで開きます。

  2. 2

    アイドル行が隠れていないか見る

    停止したのではなく、表示が畳まれているだけの場合があります。名前を呼んでメッセージを送ると、隠れた行は戻ります。

  3. 3

    タスクの複雑さを見直す

    チームを組むかどうかはClaudeが判断します。チームを組むほどでないと見なされた作業では、チームメイトは生成されません。サブエージェントだけが起動した場合も、同じパネルに並びます。パネルだけではチームかどうか区別できないので、明示的にAgent Teamsでの実行を頼み直します。

  4. 4

    split-paneを頼んだなら環境を見る

    tmuxがPATHにあるか、iTerm2ならit2 CLIとPython APIが有効かを確認します。

tmuxの有無は次のコマンドで分かります。何も出力されなければ、未インストールかPATH未設定です。

which tmux

iTerm2のPython APIは、iTerm2 → Settings → General → Magic → Enable Python APIでオンにします。

表示モードで原因が変わる

teammateModeはsettings.jsonに書く設定で、既定は"in-process"です。split-paneを使いたいときだけ値を変えます。

くらべる

in-processとsplit-paneの違い

どの端末でも動く

in-process(既定)

全員が同じターミナルの中で動き、追加のセットアップは要りません。

tmuxかiTerm2が必要

split-pane

チームメイトごとにペインが開きます。"auto"は、tmuxの中で動いているときか、iTerm2でit2があるかtmuxが入っているときだけsplit-paneにします。それ以外はin-processに戻るので、「ペインが開かない」の原因になりえます。この条件は2つのページで書き方が違います。Agent Teamsのページは「iTerm2でit2 CLIが入っているとき」、設定リファレンスのページは「iTerm2でit2がPATHにあるか、tmuxが入っているとき」です。"tmux"と"iterm2"は明示指定です。VS Codeの統合ターミナル、Windows Terminal、Ghosttyではsplit-paneは使えません。

claude --teammate-mode autoのように起動時のフラグでも指定できますが、このフラグはclaude --helpに出ません。v2.1.287のclaude --helpにはteammateを含む行がありません。ヘルプに無いからといって、フラグが無効なわけではありません。

アイドル行の非表示はバージョンで違う

3人を超えてアイドルのときは、超過分が「2 idle agents」のような1行にまとまります。Enterで展開し、Escで畳みます。

あゆみ

アイドル行の非表示ルールの変遷

  1. v2.1.181より前非表示なし

    アイドルになった行も表示されたままです。

  2. v2.1.181〜v2.1.198自分のターン終了の30秒後に隠れる

    他のチームメイトが稼働中でも、自分のターンが終われば30秒後に隠れました。

  3. v2.1.199以降全員アイドルになるまで隠れない

    パネル内に稼働中のチームメイトかサブエージェントが1人でもいれば、アイドル行は残ります。

手元の挙動が想定と違うときは、claude --versionでバージョンを確認してください。

Claudeがサブエージェントのつもりで勝手にチームを組む

Agent Teamsを有効にすると、通常のサブエージェント委任にも影響が出ます。Claudeは委任先のサブエージェントに自分で名前を付けることがあり、Agent Teamsが有効な間は、名前を付けられたサブエージェントがチームメイトとして起動します。頼んだ覚えのないチームが組まれる原因は、これです。

元の動作に戻すには、CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMSを0にします。

{
  "env": {
    "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "0"
  }
}

新しいセッションは要りません。設定ファイルを保存すると、Claude Codeは実行中のセッションにenvの値を再適用し、サブエージェントに名前を付けるたびに変数を読み直します。ユーザーのsettings.jsonの0は、シェルでexportした値より優先されます。

0にしても直らないときは、より優先度の高い設定ソースが1を指定しています。プロジェクト設定、ローカル設定、--settingsで渡した設定は、ユーザー設定の後に適用されます。managed settingsは最後に適用されるので、組織が有効にしている場合は管理者に変更を頼むことになります。

0にしても、Claudeがサブエージェントに名前を付けること自体は続きます。名前はSendMessageの宛先として使えます。

権限プロンプトが多すぎる

チームメイトの権限確認は、すべてリードのセッションに集まります。同時に動く人数が多いほど、リードへの確認が増えます。

チームメイトは、スポーン時点のリードの権限モードで始まります。引き継がれないのはdontAskモードだけです。リードを--dangerously-skip-permissionsで起動していれば、チームメイトも同じになります。スポーン時にチームメイトごとの権限モードは指定できません。スポーン後なら、個別に変更できます。

対処は、チームメイトをスポーンする前に、よく使う操作をpermissions設定のallowルールにしておくことです。/permissionsでダイアログを開き、頻出するBashコマンドやファイル操作を許可します。

ルール例効果
Bash(npm test *)効果npm testで始まるコマンドを確認なしで許可
Bash(git diff *)効果差分確認コマンドを確認なしで許可
Read効果ファイル読み取り全般を確認なしで許可

末尾のワイルドカードは、Bash(npm test:*)とBash(npm test *)のどちらでも同じ意味です。権限ダイアログで「Yes, and don't ask again」を選ぶと、スペース区切りの形で保存されます。コロン付きの形が認識されるのはパターンの末尾だけで、Bash(git:* push)のように途中に置くとコロンは文字として扱われます。

評価順はdeny、ask、allowで、最初に当たったものが結果を決めます。広いdenyを置くと、より細かいallowを足しても通りません。同じ理由で、askルールに当たる操作は、細かいallowがあってもプロンプトが出ます。denyにツール名だけを書くと、そのツールはClaudeの選択肢から消えます。Bash(rm *)のようにパターンを付けた場合は、ツール自体は残って該当の呼び出しだけが止まります。

チーム全員に共通する許可は、個別の指示ではなくsettings.jsonにまとめます。

チームメイトが早期に停止する

チームメイトは、エラーに遭遇するとリカバリーせずに止まることがあります。エージェントパネルで該当のチームメイトを選んでEnterを押すと、そこまでの出力を読めます。split-paneならペインをクリックします。

対処は2つあります。追加の指示を直接送るか、代わりのチームメイトをスポーンして引き継がせます。API呼び出しの失敗でリトライ待ちのin-processチームメイトは、リードか他のチームメイトからメッセージが届くと、リトライ遅延を待たずに再試行します。

リード自身が早く止まることもあります。未完了のタスクが残っているのにチーム全体が終わったと判断するケースです。続けるよう伝えれば再開します。

tmuxセッションが孤立して残る

Claude Codeのセッションが終わった後に、split-paneで使ったtmuxセッションが残ることがあります。クリーンアップが最後まで終わらなかった場合です。一覧を見て、チームが作ったものを手動で終了します。

tmux ls
tmux kill-session -t <session-name>

非対話セッションが終了時にチームの後片付けを待つ時間は、CLAUDE_CODE_TEAM_TEARDOWN_PARK_TIMEOUT_MSで変えられます。範囲は1000〜60000ミリ秒で、範囲外の値は無視されて既定の10000が使われます。v2.1.206以降の変数です。

tmuxにはOSによって制約があり、macOSでの動作が最も安定しています。iTerm2でsplit-paneを使うなら、tmux -CCで起動するのが推奨の入口です。

なお、チームの設定ディレクトリはセッション終了時に削除されますが、タスクリストのディレクトリはローカルに残ります。再開したセッションがタスクを引き継げるようにするためで、保持期間はcleanupPeriodDaysで決まります。tmuxの孤立とは別の話で、ディスクに残るファイルを見ても故障とは限りません。

Hooksで再発を防ぐ

ここまでは起きてから直す方法でした。Hooksを使うと、一部の症状は起きる前に止められます。

イベント発火するとき終了コード2での動き
TaskCreated発火するときタスクが作られるとき終了コード2での動き作成を取り消し、メッセージをClaudeに返す
TaskCompleted発火するときタスクが完了になるとき終了コード2での動き完了にせず、stderrのフィードバックを返す
TeammateIdle発火するときチームメイトがアイドルになるとき終了コード2での動きアイドルにせず、作業を続けさせる

粒度の粗いタスクはTaskCreatedで差し戻せます。チームサイズとタスク粒度の基準を、チェックリストではなくゲートとして強制できます。完了条件を満たさない完了はTaskCompletedで止められます。

注意点が2つあります。3つのイベントはどれもmatcherに対応せず、毎回発火します。TaskCreatedはTaskCreateツールを持たないセッションでは発火しません。もう1つは、JSONで{"continue": false}を返す場合の違いです。TeammateIdleとTaskCompletedではチームメイトを完全に止める指定になりますが、TaskCompletedはTaskUpdateツールが引き金のときこれを無視します。TaskCreatedではcontinue: falseは無視され、decision: "block"か終了コード2で取り消します。

設定はsettings.jsonのhooksに書きます。チームメイト全員に同じ基準が適用されます。

不具合ではなく仕様の制約であるケース

次の症状は、設定や再起動では解消しない既知の制約です。

症状実態
/resumeや/rewindの後にチームメイトが消えている実態in-processのチームメイトは復元されない。リードが存在しない相手へ送ろうとしたら、新しいチームメイトのスポーンを頼む
タスクが完了扱いにならず後続が止まる実態完了のマークを忘れることがある。作業が終わっているか確かめ、手動でステータスを更新するかリードに催促する
2つ目のチームを作れない実態1セッションにチームは1つ。追加の名前付きチームは作れず、チームを別セッションと共有することもできない
チームメイトが自分のチームメイトを作れない実態チームを管理できるのはリードだけ。ネストはできない
リードを交代できない実態メインセッションが生涯リード。チームメイトを昇格できない
in-processのチームメイトが起動したサブエージェントがバックグラウンドで動かない実態background: trueの定義はエラーになる。run_in_background: trueもエラーか、フォアグラウンドでの実行になる
終了に時間がかかる実態チームメイトは今のリクエストかツール呼び出しを終えてから止まる

同じセッションの中で、止まっているin-processチームメイトにメッセージを送ると、Claude Codeは会話を復元して再開させます。

これらはCLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMSやtmuxの有無とは無関係です。Sub-agentsの設計とも異なる、Agent Teams固有の制約です。

まとめ

設定で直るのは表示モード・環境変数・権限の3系統です。最後の表に当たる症状は設定では解消しないので、チームを作り直す前提で運用を組みます。

この記事を共有:XはてブLinkedIn