# Agent Teamsモード（T）- 調査・レビュー専用

## 概要

Claude Code公式の **Agent Teams**（実験的機能）をEnsembleの調査・レビュー専用モードとして統合。
**パターンA/B/Cとは別軸**の独立モードであり、コード実装ではなく調査・レビュー・設計探索に特化。

### パターンA/B/Cとの関係

```
【コード実装タスク】
  パターンA: 単純タスク（subagent直接）
  パターンB: 中規模タスク（tmux並列）
  パターンC: 大規模タスク（worktree分離）

【調査・レビュー・設計タスク】← Agent Teamsモード（T）
  モードT: 並列調査・レビュー（Agent Teams直接利用）
```

### 有効化

環境変数 `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` が設定されていること（`.claude/settings.json`で設定済み）。

---

## 適用ユースケース（公式準拠）

モードTは以下のユースケースに特化:

1. **並列コードレビュー**: 複数観点（セキュリティ/パフォーマンス/テストカバレッジ）での同時レビュー
2. **競合仮説によるデバッグ調査**: 異なる仮説を並列検証し、互いに反証
3. **技術調査・リサーチ**: 複数技術/ライブラリの並列評価
4. **新モジュール/機能の設計検討**: 異なるアプローチの並列探索
5. **クロスレイヤー変更の計画**: フロント/バック/テスト等の観点別計画

### 適用しないケース

- **コード実装タスク**: パターンA/B/Cを使用
- **順序依存タスク**: 順次実行が必要なタスク
- **長時間タスク**: 30分を超えるタスク（Agent Teamsの制約）
- **ファイル競合の多いタスク**: 複数メイトが同じファイルを編集する場合

---

## 判定ロジック（Conductor）

Conductorがタスク特性を分析し、自動判定:

```
タスク受領
    │
    ▼
[タスク特性は？]
    │
    ├─ コード実装 → パターンA/B/C選択
    │
    └─ 調査・レビュー・設計 → モードT
            │
            ├─ Agent Teams有効 → モードT実行
            │
            └─ Agent Teams無効 → 単一セッションで順次実行
```

### 判定基準

| 条件 | モードT | パターンA/B/C |
|------|---------|---------------|
| タスク種別 | 調査・レビュー・設計 | コード実装 |
| 並列性 | 複数観点の同時調査 | 複数ファイルの並列実装 |
| 成果物 | レポート・知見・設計案 | コード変更 |
| ワーカー間通信 | 必要（議論・反証） | 不要（独立作業） |

---

## 実行フロー

モードTでは、Conductorが**Team Lead**として直接操作する。

```
1. Conductorがタスク分析
   - 調査・レビュー系と判定 → モードT選択

2. 自然言語でチーム作成:
   例: 「Create an agent team to review PR #123 from multiple perspectives.
        Spawn three teammates: security, performance, and test coverage.
        Use Sonnet for all teammates.」

3. Delegate Modeを有効化（推奨）:
   - Shift+Tab を押下
   - Conductorを調整専用に制限（コード変更禁止）

4. 各teammateにタスクを割り当て:
   - 自然言語で指示: 「Review PR #123 for security vulnerabilities. Focus on authentication and authorization.」
   - 共有タスクリスト（~/.claude/tasks/）に自動登録

5. Teammatesが独立作業:
   - 各teammateが異なる観点で調査・レビュー
   - 必要に応じてメイト間でメッセージ交換（議論・反証）

6. 結果を統合:
   - Conductorが各メイトの結果を収集
   - 矛盾があれば調整・再調査
   - 最終レポートを作成

7. クリーンアップ:
   - 自然言語で指示: 「Clean up the team」
```

---

## モードTで使わないもの

Agent Teamsは**Conductor直接操作**のため、Ensemble通信インフラは不要:

- ❌ Dispatch（不要）
- ❌ queue/ディレクトリ（不要）
- ❌ send-keys通知（不要）
- ❌ pane-setup.sh（不要）
- ❌ ACKファイル（不要）
- ❌ completion-summary.yaml（不要）

Conductorが直接Agent Teamsを操作し、結果をユーザーに報告する。

---

## Ensemble独自プロトコル（最小限）

モードT利用時もEnsemble独自の以下を維持:

1. **計画立案**: Conductorがタスク分析・モードT判定・ユーザー承認
2. **ワークフロー選択**: simple/default/heavy（モードT選択後の詳細フロー）
3. **最終統合**: Conductorが各メイトの結果を統合・矛盾解消
4. **自己改善**: learnerによるMEMORY.md更新（必要に応じて）

**レビュー・改善層は不要**（Agent Teams自体が調査・レビュー用途のため）。

---

## Delegate Mode（推奨）

**Shift+Tab** で有効化。Conductorを調整専用に制限（コード変更禁止）。
Ensembleの「Conductor = 判断のみ」思想と完全に一致。

### メリット

- Conductorがコード変更を試みない（調査・レビュータスクで適切）
- トークンコストの削減
- 役割の明確化（調整 vs 調査の分離）

---

## Agent Teamsコンポーネント

| コンポーネント | 役割 |
|--------------|------|
| **Team lead** | Conductor。チーム作成・タスク分配・結果統合 |
| **Teammates** | 独立Claude Codeインスタンス。各観点で調査・レビュー |
| **Task list** | 共有タスクリスト（`~/.claude/tasks/{team-name}/`）。依存関係を自動管理 |
| **Mailbox** | メイト間メッセージング（議論・反証用） |

---

## 制約事項（公式）

Agent Teamsの公式制約事項（2025年2月時点）:

1. **セッション再開不可**: `/resume`でin-processメイトは復元されない
2. **タスクステータスのラグ**: メイトがタスク完了マークを忘れることがある
3. **シャットダウンが遅い**: メイトは現在のリクエスト完了を待つ
4. **1セッション1チーム**: 新チーム前にクリーンアップ必須
5. **ネスト不可**: メイトは自分のチーム/メイトを作れない
6. **リーダー固定**: チーム作成セッションがリーダー
7. **権限はスポーン時に継承**: 後から個別変更は可能だがスポーン時には不可
8. **splitペインはtmux/iTerm2必須**: VS Code、Windows Terminal、Ghostty非対応
9. **仕様変更の可能性**: リサーチプレビュー機能のため、将来の仕様変更あり

---

## ベストプラクティス

1. **十分なコンテキストを与える**: メイトはリードの会話履歴を引き継がない
2. **タスクの適切なサイズ**: 1メイトあたり5-6タスクが理想
3. **メイトの完了を待つ**: リードが自分で調査し始める場合は明示的に待機指示
4. **ファイル競合を避ける**: 各メイトが異なるファイルセットを担当
5. **モニタリング**: 定期的にチェックイン、うまくいかないアプローチはリダイレクト
6. **Delegate Modeを活用**: Conductorを調整専用に制限
7. **議論を促す**: メイト間でメッセージ交換を推奨（競合仮説の場合）
8. **矛盾を調整**: 結果統合時に矛盾があれば再調査を指示

---

## フォールバック

Agent Teams障害時は単一セッションで順次実行:

1. 自然言語で指示: 「Clean up the team」
2. Conductorが単一セッションで各観点を順次調査
3. 原因を記録（MEMORY.md更新用）

---

## 表示モード設定

Ensembleでは **tmux** を推奨（既にtmuxで管理しているため）。

`.claude/settings.json`:

```json
{
  "teammateMode": "tmux"  // or "auto" or "in-process"
}
```

---

*以上*
