Claude CodeのAgent Teamは、リーダーエージェントが複数のチームメイトエージェントを起動し、タスクリストで作業を割り振る仕組みです。
# Agent Team の構造
Leader(オーケストレーター)
├── TaskCreate # タスクリスト作成
├── Task # チームメイト起動(並列可)
├── SendMessage # チームメイトへの指示
└── TaskUpdate # 進捗管理
Teammate A(Haiku / Sonnet)
├── 自分のタスクを TaskGet で取得
├── 作業実行(Read, Write, Bash等)
├── SendMessage でリーダーに報告
└── TaskUpdate で完了を記録
Teammate B(Haiku / Sonnet)
└── ... 同様に独立して作業
一見するとただのタスク並列化ツールですが、使い込んでいくと気づくことがあります。チームメイトは「関数」ではなく「人格を持ったエージェント」として振る舞うということです。コンテキストを渡し、判断を委ね、結果を受け取る。その構造は、人間のチームマネジメントと驚くほど似ています。
人間のチームと同じで、リーダーエージェントには目的と制約を渡し、個々のメンバーには具体的な作業指示を渡します。
ただし、リーダーに「丸投げ」するのとは違います。成功基準と制約は明確にする必要がある。「比較レポート」が何を含むべきか、CSVで出すのかMarkdownで出すのか、これらはリーダーへの入力として渡します。
Agent Team最大の落とし穴はファイル競合です。2つのエージェントが同じファイルを同時に編集すると、後から書いた方が先の変更を上書きします。
# BAD: 2エージェントが同じファイルを触る
Task 1: "APIハンドラーとバリデーションを実装" → src/handler.ts
Task 2: "エラーハンドリングを実装" → src/handler.ts ← 衝突!
# GOOD: ファイル所有権を分離
Task 1: "APIハンドラーを実装" → src/handler.ts
Task 2: "バリデーションを実装" → src/validator.ts
Task 3: "エラー型を定義" → src/errors.ts
これは「高凝集・低結合」というソフトウェア設計の原則そのものです。タスクの境界が明確であれば、エージェント同士のコミュニケーションコストも下がる。
人間のチームなら「さっき言った件だけど」で通じます。Agent Teamでは通じません。各チームメイトは独立したコンテキストで起動されるため、リーダーとの会話履歴を持っていません。
# BAD: 暗黙の前提に依存
"先ほどの設計に基づいて、APIを実装してください"
→ チームメイトは「先ほどの設計」を知らない
# GOOD: 必要な情報をすべて含める
"以下の仕様に基づいてAPIを実装してください:
- エンドポイント: GET /api/users/:id
- レスポンス型: { id: string, name: string, email: string }
- 認証: Bearer Token必須
- 実装先: src/handlers/user.ts
- 参照ファイル: src/types/user.ts(型定義あり)"
01_design.md)と、チームメイトは Read でそのファイルを読める。メッセージで全部渡すより確実。
Agent Teamでは各チームメイトに異なるモデルを割り当てられます。これは「誰を採用するか」と同じ判断です。
| モデル | 得意なこと | チームでの役割 | コスト感覚 |
|---|---|---|---|
| Haiku | 定型作業、データ整形、単純調査 | ジュニアエンジニア・リサーチャー | 安い(大量起動OK) |
| Sonnet | コード実装、設計判断、レビュー | ミドルエンジニア | 中程度 |
| Opus | アーキテクチャ設計、複雑な推論 | シニアエンジニア・テックリード | 高い(要所で使う) |
実際のプロジェクトでは、企業調査のような「量が必要な単純作業」は Haiku を 5〜10 体並列で走らせ、設計やレビューは Sonnet に任せています。Opus はリーダー自身(オーケストレーター)に使うことが多い。
# 企業リサーチの例: Haiku ワーカー × N + Sonnet 集約
Phase 1: リーダー(Opus)が戦略を立案
Phase 2: 調査チームメイト × 10(Haiku)が各社を並列調査
Phase 3: 集約チームメイト × 1(Sonnet)がCSVにまとめる
# コスト: Haiku 10体 ≈ Sonnet 1体分
# 速度: 10社を並列調査 → 逐次の 1/10 の時間
人間のチームでは「Aさんの作業が終わったらBさんが始める」という暗黙の理解がありますが、Agent Teamでは addBlockedBy で明示的に宣言します。
# タスク依存関係の設計
[Task 1] OpenAPI スキーマ設計 ← 最初に完了すべき
↓ blocks
[Task 2] フロントエンド実装 ← Task 1 に依存
[Task 3] バックエンド実装 ← Task 1 に依存
↓ blocks (Task 2 + Task 3)
[Task 4] 結合テスト ← Task 2, 3 両方に依存
# TaskUpdate で依存関係を設定
TaskUpdate: { taskId: "2", addBlockedBy: ["1"] }
TaskUpdate: { taskId: "3", addBlockedBy: ["1"] }
TaskUpdate: { taskId: "4", addBlockedBy: ["2", "3"] }
依存関係を正しく設計すると、Task 2 と Task 3 が自動的に並列実行されます。逆に、依存関係の設計を間違えると、本来並列にできる作業が逐次実行になり、時間もコストも無駄になる。
全タスクをチームメイトに投げて最後にまとめて確認する、というのは失敗パターンです。人間のチームでも同じで、手戻りが大きい。
# 悪い例: 全部終わってからレビュー
Phase 1: 計画 → Phase 2: 全部実装 → Phase 3: レビュー
↑ ここで問題発覚 → 全部やり直し
# 良い例: フェーズごとにリーダーが確認
Phase 1: 計画 → Leader Review
Phase 2: 設計 → Leader Review
Phase 3: 実装 → Leader Review
Phase 4: テスト
↑ 各フェーズで軌道修正できる
実際の運用では、リーダーが Phase 1 の成果物(例: 01_strategy.md)を Read で確認し、問題があれば SendMessage でチームメイトに修正指示を出します。Phase 2 以降に進む前に検証するのがポイント。
Agent Teamのチームメイトは、作業が終わっても自動的にはシャットダウンしない(idle状態で待機する)。明示的に終了させないと、リソースが残り続けます。
# 正しい終了手順
1. 全タスクの完了を TaskList で確認
2. 各チームメイトに SendMessage (type: "shutdown_request")
3. チームメイトが SendMessage (type: "shutdown_response", approve: true)
4. 全員シャットダウン後に TeamDelete でクリーンアップ
# 忘れると...
- idle 状態のエージェントがバックグラウンドに残る
- チームファイル (~/.claude/teams/) が蓄積
- タスクファイル (~/.claude/tasks/) が蓄積
実際に運用しているAgent Teamのワークフローを紹介します。営業ターゲット企業を10社並列で調査し、CSVにまとめるタスクです。
# Phase 1: リーダーが計画(Opus)
├── リサーチ戦略を策定 → 01_strategy.md
├── 調査対象企業リストを作成 → 02_company_list.md
└── ユーザーに確認を求める
# Phase 2: Haiku チームメイト × N が並列調査
├── Teammate A → 03_companies/company-a.md
├── Teammate B → 03_companies/company-b.md
├── Teammate C → 03_companies/company-c.md
└── ... 各自が1社を担当(ファイル競合なし)
# Phase 3: Sonnet チームメイトが集約
└── 全 .md を読み込み → 04_summary.csv + 04_summary_notes.md
# Phase 4: リーダーがレビュー&クリーンアップ
├── 成果物の品質確認
├── チームメイトをシャットダウン
└── TeamDelete
このワークフローの設計ポイント:
03_companies/ ディレクトリ内で各自が独立ファイルを編集Agent Teamは強力だが、常に最適解ではありません。Claude Codeには3段階の委任レイヤーがあり、タスクの性質によって使い分ける必要がある。
| レイヤー | 概要 | 通信方向 | コスト |
|---|---|---|---|
| 単一セッション | あなたとClaudeの1対1 | 直接対話 | 低 |
| Subagent | 並列ワーカーが親に報告 | 一方向(子→親) | 中 |
| Agent Team | ワーカー同士が直接協調 | 双方向(P2P) | 高 |
「並列化したいか?」ではなく、タスクの性質から逆算して判断します。
# Q1: タスクを「同じ形の小タスク」に分解できるか?
タスクの構造は?
│
├── 同じ作業の繰り返し(N社調査、N件変換、Nページ要約…)
│ │
│ └── 各小タスクの結果を 突き合わせる 必要がある?
│ │
│ ├── No → Subagent
│ │ 例: 10社の企業調査 → 各社独立に調べてCSVに集約
│ │
│ └── Yes → Agent Team(Swarm + 集約フェーズ)
│ 例: 5つの仮説を並列検証 → 最善案をリーダーが選択
│
├── 異なる専門性が必要な工程の連鎖(設計→実装→テスト…)
│ │
│ └── 一部の工程を 同時に進められる か?
│ │
│ ├── No → 単一セッション
│ │ 例: 1ファイルの修正 → 逐次で十分
│ │
│ └── Yes → Agent Team(Pipeline)
│ 例: FE設計 ∥ API調査 → 結合 → テスト
│
└── 1つの集中した作業(バグ修正1件、設定変更…)
│
└── 単一セッション
Agent Teamのオーバーヘッドがタスク本体より大きくなる
実績から見えた「並列化して効果が高いタスク」と「やめておいた方がいいタスク」を整理します。
| タスクの性質 | 推奨 | 並列化の効果 | 実例 |
|---|---|---|---|
| 同じ型の調査 × N | Subagent | 大(所要時間 1/N) | 10社の企業調査、PDF各章の要約 |
| 異なる観点からの原因調査 | Agent Team | 大(アンカリングバイアス回避) | バグの5仮説並列検証(control-center-fix) |
| 独立モジュールの同時実装 | Agent Team | 大(所要時間 1/2〜1/3) | freee API ∥ 税額計算エンジン |
| テキスト ∥ ビジュアル生成 | Agent Team | 中(ボトルネック分散) | slide-planner ∥ visual-designer |
| 多角的コードレビュー | Agent Team | 中(観点の網羅性向上) | セキュリティ ∥ パフォーマンス ∥ 型安全 |
| 同一ファイルの逐次修正 | 単一セッション | 逆効果(ファイル競合) | 1つのコンポーネントの段階的改善 |
| 30分以内で終わる小タスク | 単一セッション | 逆効果(オーバーヘッド > 本体) | typo修正、設定値変更、1関数追加 |
Agent Teamにはタスク本体とは別の「起動コスト」がかかります。これが小さなタスクの時間短縮を打ち消してしまう。
# Agent Team の起動コスト内訳
1. TeamCreate ← チーム設定ファイル生成
2. TaskCreate × N ← タスクリスト作成・依存関係設定
3. Task(起動)× N ← チームメイトの起動・コンテキスト読込
4. SendMessage × M ← 進捗報告・完了通知のやりとり
5. shutdown × N ← 全員のシャットダウン
6. TeamDelete ← クリーンアップ
# 例: 「1関数追加」を Agent Team でやると…
単一セッション:
実作業 5分
合計 5分
Agent Team(3人):
起動コスト 3分 (TeamCreate + TaskCreate + メイト起動)
コンテキスト共有 2分 (各メイトが既存コードをRead)
実作業 5分 (並列化しても1人で足りるので短縮なし)
通信・集約 2分 (SendMessage + リーダー確認)
終了処理 2分 (shutdown × 3 + TeamDelete)
合計 14分 ← 2.8倍遅い
起動コストの問題は時間だけではありません。トークン消費も大きい。
# トークン消費の比較(同じタスクを完了する場合)
単一セッション:
入力: ユーザー指示 + ファイル読込
出力: 実装コード
合計: 〜1x
Agent Team(3人チーム):
リーダー入力: ユーザー指示 + ファイル読込 + 設計判断 0.5x
メイトA入力: タスク指示 + ファイル読込 + 実装 0.8x
メイトB入力: タスク指示 + ファイル読込 + 実装 0.8x
メイトC入力: タスク指示 + ファイル読込 + 実装 0.8x
リーダー集約: 全メイトの報告受信 + レビュー 0.5x
通信オーバーヘッド: SendMessage × 6〜10往復 0.5x
合計: 〜4x
# 30分タスクの並列化 → 時間は変わらず、コストだけ4倍
# 3時間タスクの並列化 → 時間が1/3に短縮、コスト4倍でも価値あり
Agent Teamには大きく4つの構成パターンがあります。タスクの性質に合わせて選択します。
ワーカーが自律的にタスクキューから仕事を取って処理する。各ワーカーは交換可能で、タスクの独立性が高い場合に最適。
Leader(オーケストレーター)
┌────┼────┐
↓ ↓ ↓
Worker Worker Worker
(企業A) (企業B) (企業C)
↓ ↓ ↓
└────┼────┘
集約・CSV出力
# 適: 企業調査、ファイル変換、大量コードレビュー
# 不適: タスク間に依存関係がある場合
各フェーズを専門エージェントが担当する。前工程の完了を待って次に進む。並列化可能なフェーズは並走させる。
# Figma → 実装パイプラインの実例
Phase 1 (Sequential): Figma分析 → ボックスモデル → レスポンシブ → レビュー
Phase 2 (Parallel): Frontend設計 ∥ API調査
Phase 3 (Parallel): FEレビュー ∥ (Backend設計 → DB設計)
Phase 4 (Converge): 全体整合性レビュー
# 適: 段階が明確で各段階に異なる専門性が必要
# 不適: 全工程が密結合な場合
同じ問題に複数エージェントが異なるアプローチで取り組み、リーダーが最善の解を選択する。
同じバグ
┌────┼────┐
↓ ↓ ↓
仮説A 仮説B 仮説C
"状態管理" "API応答" "型の不整合"
↓ ↓ ↓
└────┼────┘
Leader が最も説得力のある解を採用
# なぜ有効か:
# 逐次調査だとアンカリングバイアスが発生する。
# 最初の仮説に引きずられて後続の調査が偏る。
# 並列で独立検証すると、生き残った仮説の信頼性が高い。
メインワーカーの作業を別のエージェントがリアルタイム監視する。本番環境への変更やセキュリティが重要な操作で使う。
Worker(実行) → Watcher(監視) → 問題検出 → ロールバック
# 例: DBマイグレーション
Worker: マイグレーション実行
Watcher: SELECT COUNT(*) で行数監視 + エラーログ監視
異常検知 → Worker に SendMessage で停止指示
# 適: 本番変更、破壊的操作、金融系処理
7原則やパターンは「うまくいった結果」を整理したものです。ここでは実際にやらかした失敗を共有します。
リーダーとの会話で「さっきの仕様で」と言って通じたので、チームメイトにも同じ調子で指示を出した。結果、チームメイトは仕様を知らないので見当違いの実装をした。
01_spec.md を Read せよ」と明記「品質を上げたいから全員Opus」にした。企業調査10社で、1社あたり Haiku なら数百円のところ、Opus だと数千円。合計で10倍以上のコスト差になった。品質差は調査タスクではほぼ感じなかった。
慎重になりすぎて Task 1 → Task 2 → Task 3 → Task 4 → Task 5 と全部直列に繋げた。Agent Teamを使う意味がなく、単一セッションの方が速かった。
# やってしまったこと(Agent Teamの意味なし)
Task 1 → Task 2 → Task 3 → Task 4 → Task 5
# 所要時間: 単一セッションと同じ + チーム管理のオーバーヘッド
# 本来のあるべき姿
Task 1 ──→ Task 3 ──→ Task 5
Task 2 ──→ Task 4 ──↗
# 所要時間: 約半分
# 問い: 「このタスクは本当に前のタスクの出力が必要か?」
# 答えがNoなら並列化できる
「全員に伝えたいこと」をすべて broadcast で送った。5人チームなら1回のbroadcastで5通のメッセージが飛ぶ。3回broadcastすれば15通。各メッセージに対してチームメイトが反応するので、トークン消費が指数的に増えた。
対策: broadcastは「全員停止」「方針変更」など緊急時のみ。通常は type: "message" で特定のチームメイトに個別送信する。
作業が終わって満足し、shutdown_request を送らずにセッションを閉じた。~/.claude/teams/ と ~/.claude/tasks/ にゴミファイルが蓄積し、次のセッションで名前衝突が起きた。
対策: 全タスク完了を確認 → 各チームメイトに shutdown_request → TeamDelete。これをリーダーのプロンプトに「必ず最後に実行する手順」として書いておく。
Agent Teamのコストは直感より大きくなりがちです。特に Plan Mode を使うと想像以上にトークンを消費します。
| 構成 | トークン倍率(単一セッション比) | 向いているタスク |
|---|---|---|
| 単一セッション | 1x | 小〜中規模の実装・修正 |
| Subagent × 3 | 〜2x | 独立した並列調査 |
| Agent Team 3人 | 〜4x | 相互依存のある並列作業 |
| Agent Team 3人 + Plan Mode | 〜7x | 大規模設計・アーキテクチャ決定 |
# コスト最適化されたチーム構成の例
Leader: Opus ← 全体統括・品質判定
Researcher: Haiku ← Web調査(5-10体並列OK)
Implementer: Sonnet ← コード実装
Reviewer: Sonnet ← コードレビュー
# Haiku 10体のコスト ≈ Sonnet 1体分
# 10社並列調査が Sonnet 1回分のコストで完了
ここまで原則やパターンを紹介してきましたが、「で、実際どうなの?」が気になるはずです。2026年2月の約1ヶ月間で運用した全チームの実績を、タスク分類別に公開します。エンジニアリングだけでなく、事業開発・リサーチ・資料作成まで幅広いタスクを実行した。
| 分類 | チーム数 | 総エージェント数 | 成果物 |
|---|---|---|---|
| 実装(モバイルアプリ) | 2 | 29〜32 | Tier0機能実装 + E2Eテスト |
| 不具合修正 | 2 | 26〜32 | 17タスク(認証・再生・Control Center) |
| 新規機能開発 | 1 | 3 | 14ファイル / 3,538行 |
| 提案資料生成 | 5 | 12〜23 | 5デッキ / 91スライド |
| 調査・監査 | 1 | 10 | 9レポート / 40+プロフィール |
| 事業リサーチ | 3 | 5〜10 | 市場調査レポート / 戦略ガイド / キャリア計画 |
| ビジネスモデル分析 | 9回 | 1〜3 | 9企業分析 + 21ジャンルCSV |
| 社内勉強会資料 | 1 | 1〜3 | Claude製品ガイド(ビジネスサイド向け) |
プロダクトのTier0機能として、動画の音声バックグラウンド再生と連続再生をReact Nativeで実装した。最大29エージェントが並列に動く、最も実装に集中したチーム。
# チーム構成: 29 エージェント
Leader: Opus ← 設計方針・タスク分割・統合レビュー
# 5タスクのPipeline + Swarm
Task 1: "現在のバックグラウンド再生実装を監査し問題点を特定" ✓
Task 2: "バックグラウンド音声再生の安定化と修正" ✓
Task 3: "バックグラウンド連続再生(プレイリスト自動進行)を実装" ✓
Task 4: "MiniPlayer UIを実装" ✓
Task 5: "iOS実機でバックグラウンド再生・連続再生をテスト" ✓
# 技術スコープ
├── TrackPlayer ネイティブモジュール統合
├── バックグラウンドオーディオ・ライフサイクル管理
├── キュー管理(プレイリスト自動進行)
├── iOS Control Center / Now Playing 対応
├── MiniPlayer UIコンポーネント
└── Appium E2Eテスト
このチームの特徴は「調査と実装を並列化」した点です。Task 1(監査)の途中で既にTask 2〜4の実装が開始される。調査エージェントが発見した問題をSendMessageでリアルタイムに実装エージェントへ共有し、待ち時間を最小化した。
Readで読み解きながら進めた。Appium E2Eテストで最終検証まで自動化。
bg-audio-playbackチームの成果物で発覚したNow Playing表示のバグを、26エージェントの専用チームで修正。調査10タスクという大規模な原因特定フェーズを経て修正に至った。
# チーム構成: 26 エージェント
Leader: Opus ← 調査戦略・仮説管理
# 10タスク(Competing Hypotheses パターン)
Task 1: "TrackPlayer バックグラウンドオーディオ遷移フロー調査"
Task 2: "iOS Now Playing 要件と TrackPlayer ネイティブ動作調査"
Task 3: "track-url-resolver とオーディオURL処理調査"
Task 4: "バックグラウンド再生の次トラック処理コード調査"
Task 5: "TrackPlayer キューとイベントシステム調査"
Task 6: "Appium でバックグラウンド次トラックテスト"
Task 7: "バックグラウンド次トラック自動再生の修正実装" ← 実装
Task 8: "now-playing-video コンテンツIDの発生源調査"
Task 9: "フォアグラウンド復帰時のナビゲーションフロー調査"
Task 10: "now-playing-video コンテンツIDバグ修正" ← 実装
10タスク中8タスクが「調査」で、実装は2タスクのみ。これは前述のCompeting Hypotheses パターンの実例です。5つの異なる観点(TrackPlayer遷移、iOS要件、URL処理、キュー管理、コンテンツID)から並列に原因を探り、最も確度の高い仮説に基づいて修正を行った。
モバイルアプリ実装チームの共通点と、他の分類との違いをまとめます。
| 特徴 | 実装タスク | 提案資料・リサーチ |
|---|---|---|
| チームサイズ | 26〜32 エージェント | 10〜23 エージェント |
| タスク期間 | 2〜11日間 | 1日(集中スプリント) |
| 調査:実装比率 | 調査 60〜80% / 実装 20〜40% | 調査 0% / 生成 100% |
| エージェント間通信 | 高頻度(発見の共有が必要) | 低頻度(各自独立作業) |
| テスト | Appium E2E + Mobile MCP | 目視確認 |
| 最適パターン | Pipeline + Competing Hypotheses | Pipeline + Swarm |
# 実装タスクの典型的なチーム構成
Leader(Opus)
├── Phase 1: 並列調査
│ ├── auth-investigator ← 認証フロー専門
│ ├── nav-investigator ← ナビゲーション状態専門
│ ├── track-investigator ← TrackPlayerネイティブ専門
│ ├── queue-investigator ← キュー管理専門
│ └── url-investigator ← URL解決専門
│
├── Phase 2: 仮説統合(Leader自身が判断)
│
├── Phase 3: 修正実装
│ └── mobile-fixer ← 修正を実装
│
└── Phase 4: 検証
└── e2e-tester ← Appium でテスト実行
# ポイント:
# 1. 調査エージェントは「観点」で分ける(ファイルではない)
# 2. 仮説統合はLeaderが行う(最も判断力が高いモデル)
# 3. 修正実装は最小限のエージェントで(ファイル競合回避)
モバイルアプリで「数日放置後にログインしてもローディングが終わらない」という再現が難しいバグ。Mobile MCPでシミュレータのスクリーンショットを撮りながら原因を特定するパイプライン型チームを組んだ。
# チーム構成
Leader: Opus ← 全体統括・修正方針決定
# 4タスクのPipeline
Task 1: "Mobile MCPでアプリの現状確認・エラー特定" ✓ completed
Task 2: "mobileパッケージのコード構造・エラー調査" ✓ completed
Task 3: "frontendの実装パターンを参考にmobileのAPI修正" ✓ completed
Task 4: "Mobile MCPで修正後の動作検証" ⧖ in_progress
# ポイント: Task 1 と Task 4 でMobile MCPスクリーンショットを使い
# 「目で見て確認」する Watchdog 的な検証を組み込んだ
Readで読み取り、同じパターンで mobile を修正した。「動いているコードを参考にする」という戦略が、型エラーやAPIの使い方ミスを防いだ。
同時期に別のタスクリストで、SWRのenabledオプション修正やReact Navigationのパッチなど3つの独立したバグ修正も並列実行していた。こちらはSwarm型で、各バグが独立した別ファイルを対象としていたためファイル競合なし。
freee会計APIと連携して確定申告の数値を自動計算するTypeScriptツール。2つの専門エージェントが並列で別モジュールを実装するPipeline型。
# チーム構成(全員 Opus + typescript-pro)
Leader: Opus ← 設計・タスク分割・統合レビュー
freee-connector: Opus ← OAuth2認証・APIクライアント・データ取得
tax-engine: Opus ← 所得税計算・消費税計算・税制定数
# 成果物: 14ファイル / 2,730行
src/freee/
├── types.ts (157行) Zodスキーマ
├── auth.ts (103行) OAuth2フロー
├── client.ts (203行) APIエンドポイント
└── data-fetcher.ts (57行) 一括データ取得
src/tax/
├── types.ts (206行) 税額計算の入出力型
├── constants.ts (480行) 令和7年分税制定数
└── calc.ts (1,350行) 所得税・消費税計算
ただし、このチームは全員Opusを使った。前述の「失敗2: 全員Opus」に該当するが、税額計算のようなドメイン精度が重要なタスクではOpusの判断力が効いた。コスト最適化より正確性を優先した判断は正しかった。
1ヶ月で5つの提案資料をAgent Teamで生成した。最大23エージェントの大規模チーム。
| デッキ | 日付 | エージェント数 | スライド数 | 形式 |
|---|---|---|---|---|
| NE運用最適化提案 | 2/16 | 23 | 11 | Google Slides + PPTX + PDF |
| Claude製品ガイド | 2/17 | 16 | 24 | Google Slides + PPTX + PDF |
| Cowork研修資料 | 2/17 | - | 23 | Google Slides |
| UCP解説 | 2/17 | - | 21 | Google Slides |
| おさる×MOSH提案 | 2/20 | - | 12 | Google Slides |
# 提案資料生成のAgent Team構成
Leader(Opus): ソースMD分析 → 最終レビュー
↓
slide-planner(Sonnet): スライド構成 + 発表者ノート設計
∥ ← 並列
visual-designer(Sonnet): HTML→PNG ビジュアルアセット生成
↓ ← 両方完了後
deck-assembler(Sonnet): gogcli でGoogle Slidesデッキ組立
# 成果物フォルダ(1デッキあたり約20ファイル)
proposal-slides/YYYY-MM-DD-{slug}/
├── 01_structure.json # スライド構成仕様
├── 02_slide_plan.md # テキストコンテンツ
├── 02_speaker_notes/ # 発表者ノート
├── 03_assets/html/ # 自己完結HTML(1920x1080)
├── 03_assets/png/ # Playwrightスクリーンショット
├── 04_deck_info.json # デッキID・URL
└── output.pptx / .pdf # エクスポート
ネクストエンジンの自動化状況を診断し、改善戦略を策定する10エージェントのSwarm型チーム。各エージェントが設定項目・連携状態・エラーログなどを並列に調査し、リーダーがレポートに統合した。
同じリサーチ領域では、/bizgram-analyze コマンドによる企業分析も9件実施。企業分析と、美容・フィットネス・ヨガなどジャンル別のクリエイター調査(各20〜40プロフィール)を生成した。
Agent Teamはコードを書くだけのものではない。/bizgram-analyzeコマンドで企業のビジネスモデルを図解化する作業を9件実行した。Web検索で企業情報を収集し、3×3の9マスフレームワーク(図解総研のビズグラム形式)に落とし込む。
# ビジネスモデル分析のAgent構成
Leader(Opus/Sonnet): 企業URL受け取り → 最終レビュー
↓
web-researcher(Haiku): WebSearchで企業サイト・IR・記事を収集
↓
model-analyst(Sonnet): 収集データから9マス図解 + Mermaid生成
# 分析対象の例
├── 競合サービス分析
├── 提案先企業のビジネス構造把握
└── 自社サービスのポジショニング整理
# 成果物
bizgram-outputs/YYYY-MM-DD-{company}.md
├── 9マス図解(テキスト + Mermaid)
├── モノ・カネ・情報の流れ
├── 収益モデルの特徴
└── 差別化要因の分析
プラットフォーム事業のターゲット分析として、21ジャンル×各20〜50プロフィールのクリエイター調査を実行した。ヨガ、パーソナルトレーニング、メイクアップ、占い、起業副業など、ジャンルごとにCSVファイルを生成する大規模なSwarm型タスク。
# 21ジャンルのクリエイター市場調査
Leader(Opus): ジャンル選定 → チームメイト割り当て → CSV統合
# 各チームメイトが1ジャンルを担当(Swarm型)
genre-01(Haiku): ヨガ・ピラティス → 01_ヨガピラティス.csv
genre-02(Haiku): パーソナルトレーニング → 02_パーソナルトレーニング.csv
genre-03(Haiku): ダンス・バレエ → 03_ダンスバレエ.csv
...
genre-21(Haiku): ライフスタイル・その他 → 21_ライフスタイルその他.csv
# 各CSVに含まれるカラム
名前, プラットフォームURL, Instagram, フォロワー数,
提供サービス, 価格帯, ターゲット層, 差別化ポイント
「海外で成功しているインディーハッカーのパターン分析」「ソロ開発者のグローバルSaaS戦略」といった事業開発リサーチもAgent Teamで実行した。
# 事業リサーチの実績
"海外インディーハッカー調査"
├── Reddit / Indie Hackers / Hacker News から収益データ収集
├── 成功パターンの分類(SaaS / API / マーケットプレイス)
└── 出力: indie-hacker-global-business-research-2026.md
"ソロ開発者グローバルSaaS戦略"
├── 市場規模・参入障壁・収益モデルの調査
├── 実証済みビジネスモデルパターンの整理
└── 出力: solo-developer-global-saas-strategy-guide.md
"キャリア開発計画"
├── 自分の現在地と目標のギャップ分析
├── 6ヶ月のマイルストーン設計
└── 出力: executive-development-2026.md
「Claude製品をビジネスサイドのメンバーにどう説明するか」という社内勉強会用の資料も生成した。技術者向けではなく、非エンジニアが読んで理解できることが品質基準。
# 社内勉強会資料の構成
"Claude製品の使い分けガイド(ビジネスサイド向け)"
├── 3つの製品の全体像(Chat / Code / API)
├── 各製品の使い分けフローチャート
├── 具体的な業務別ユースケース
├── 料金プラン比較表
└── 導入ステップ(非エンジニア向け手順書)
# プロンプトの工夫
→ 「エンジニア用語を使わず、業務の言葉で書く」を指示
→ 「各セクションに "こんな場面で使える" を1つ以上入れる」
→ 「スクリーンショットの代わりに操作手順を箇条書きで」
1ヶ月の実績から見えた傾向をまとめます。
| 分類 | 最適パターン | 推奨モデル | 品質を上げるコツ |
|---|---|---|---|
| 実装タスク | Pipeline + Competing Hypotheses | Lead: Opus / 調査: 多数並列 | 調査を「観点」で分割して並列化する。修正は最小エージェントで。Appium E2Eで検証を自動化する |
| 不具合修正 | Pipeline + Watchdog | Lead: Opus | 「動いているコード」を参照先として明示する。修正前後でスクリーンショットを撮って視覚的に検証する |
| 新規機能開発 | Pipeline(並列フェーズ付き) | 全員: Opus or Sonnet | 共有型定義をPhase 1で確定する。ドメイン知識はプロンプトに全部書く(「調べて」は危険) |
| 提案資料生成 | Pipeline(slide-planner ∥ visual-designer → assembler) | Lead: Opus / Worker: Sonnet | ソースMDの品質が最終品質を決める。テキストとビジュアルは必ず並列化する |
| 調査・監査 | Swarm | Worker: Haiku / 集約: Sonnet | 1エージェント1企業(1トピック)を厳守。集約フェーズにだけSonnetを使う |
| 事業リサーチ | Pipeline(収集→分析→構造化) | Lead: Opus / Worker: Sonnet | 検索ソースを限定する(site:指定)。数値には必ずソースURLを併記させる |
| ビジネスモデル分析 | Pipeline(Web収集→図解生成) | Sonnet or Haiku | IR情報が充実した企業ほど精度が高い。フレームワーク(9マス等)をプロンプトに明示する |
| 社内資料・勉強会 | 単体 or Pipeline | Sonnet | 「誰が読むか」をプロンプトに明記。技術用語禁止・業務シーン例示の指示が効く |
# Agent Team 月次実績
チーム起動回数: 11
総エージェント起動数: 〜150
最大チームサイズ: 32 エージェント(fix-mobile-auth-refresh)
# 実装成果物
モバイルアプリ実装: 2チーム(音声再生・Control Center対応)
実装タスク: 15タスク(bg-audio 5 + control-center 10)
生成コード(ツール): 3,538行(TypeScript / freee-shinkoku)
生成スライド: 91枚(5デッキ)
バグ修正タスク: 17タスク(認証・再生・ナビゲーション)
# 非エンジニアリング成果物
企業分析レポート: 9件(ビジネスモデル図解)
クリエイター市場調査: 21ジャンル(各20〜50プロフィール / CSV出力)
事業リサーチレポート: 3件(海外市場・SaaS戦略・キャリア計画)
社内勉強会資料: 1件(ビジネスサイド向けClaude製品ガイド)
# 完了率
チーム完走率: 100%(途中クラッシュゼロ)
bg-audio タスク完了: 100%(5/5)
control-center タスク: 進行中(10タスク)
# 品質指標
ファイル競合: 0件(1エージェント1ファイル原則を遵守)
型エラー: 0件(Zodスキーマ + strict TypeScript)
E2Eテスト: Appium自動化(モバイル実装チーム)
手戻り: 1件(gogcli ノートAPI制約)
「良い出力が欲しいから全員Opusにしよう」は、全社員をシニアエンジニアで固めるようなもの。コストが爆発する上に、単純作業にオーバースペックなモデルを使っても品質は変わりません。
1つのチームメイトに複数ファイルの実装を任せると、コンテキストウィンドウを圧迫して品質が落ちます。タスクは小さく、エージェントは多くが基本。
SendMessage の type: "broadcast" はチームメンバー全員にメッセージを送ります。N人のチームなら N回のメッセージ送信が発生し、コストが線形に増加する。特定のメンバーへの個別メッセージをデフォルトにすべき。
すべてのタスクを直列に繋げると、Agent Teamの意味がない。「本当に前のタスクの出力が必要か?」を考え、可能な限り並列化する。
# BAD: 全部直列(Agent Teamの意味なし)
Task 1 → Task 2 → Task 3 → Task 4 → Task 5
# GOOD: 可能な限り並列
Task 1 ──→ Task 3 ──→ Task 5
Task 2 ──→ Task 4 ──↗
Agent Teamの各チームメイトは独立したコンテキストで動いています。リーダーとの会話履歴を持たず、他のチームメイトの作業も見えません。しかし「共有できない」わけではなく、明示的に設計すれば複数の方法でコンテキストを共有できます。
| 方法 | 共有タイミング | 永続性 | 適用場面 |
|---|---|---|---|
| 1. 起動プロンプト埋め込み | チームメイト起動時 | セッション中ずっと有効 | 仕様・API設計・型定義の共有 |
| 2. 中間ファイル方式 | 任意のタイミング | ファイルが存在する限り | 段階的に確定する設計情報 |
| 3. CLAUDE.md | 自動(起動時に読み込み) | 永続 | コーディング規約・アーキテクチャ |
| 4. 共有タスクリスト | TaskGet で都度参照 | チーム存続中 | タスク間の依存情報・進捗 |
| 5. SendMessage | リアルタイム | 受信者の会話履歴のみ | 作業中の発見・方針変更 |
| 6. チーム設定ファイル | Read で都度参照 | チーム存続中 | メンバー構成の把握 |
チームメイトを Task(team_name=..., prompt=...) で起動する際、prompt に仕様全体を埋め込む方法です。最も確実にコンテキストを渡せます。
# チームメイト起動時にプロンプトに仕様を埋め込む
Task(
team_name = "freee-shinkoku",
name = "freee-connector",
prompt = """
あなたは freee-connector 担当です。
## 実装するファイル
### src/freee/auth.ts - OAuth2認証
- getAuthorizationUrl(clientId, redirectUri): 認証URL生成
- exchangeCode(clientId, clientSecret, code, redirectUri): トークン取得
- refreshToken(clientId, clientSecret, refreshToken): リフレッシュ
- OAuth2エンドポイント: https://accounts.secure.freee.co.jp/...
### src/freee/client.ts - APIクライアント
- getCompanies(): GET /api/1/companies
- getDeals(companyId, params): GET /api/1/deals
- レート制限対応: 429 → 指数バックオフ
## 注意事項
- 金額は全てint(円単位)。float禁止
- any型禁止(unknownを使用)
"""
)
これは実際の freee-shinkoku チームで使ったパターンです。各チームメイトに80行超の詳細プロンプトを渡し、API仕様、エンドポイント、型定義、エラーハンドリング方針まで含めました。チームメイトは起動直後から迷いなく実装を開始できます。
リーダーが設計や仕様をファイルに書き出し、チームメイトのプロンプトに「まずこのファイルを Read せよ」と指示する方法です。
# Phase 1: リーダーが設計書を書き出す
Write("design/01_api_spec.md", api_design_content)
Write("design/02_db_schema.md", db_schema_content)
# Phase 2: チームメイトに「先にファイルを読め」と指示
Task(
name = "backend-engineer",
prompt = """
まず以下のファイルを Read で読んでから実装を開始してください:
1. design/01_api_spec.md(API仕様)
2. design/02_db_schema.md(DBスキーマ)
実装先: src/handlers/
"""
)
# 別のチームメイトも同じファイルを参照できる
Task(
name = "frontend-engineer",
prompt = """
まず design/01_api_spec.md を Read で読み、
API仕様に合わせたフロントエンド実装を行ってください。
"""
)
この方法の最大の強みは、Phase 1 で確定した設計を Phase 2 の複数チームメイトが同時に参照できることです。提案資料生成の proposal-slides チームでは、01_structure.json をリーダーが生成し、slide-planner と visual-designer の2名が並列で読み込んで作業しました。
01_spec.md → 02_design.md → 03_impl/)。チームメイトは番号で作業の前後関係を直感的に理解できる。
プロジェクトの CLAUDE.md は、同じ作業ディレクトリで起動されたすべてのエージェントに自動的に読み込まれます。チームメイトの cwd を同じディレクトリに設定すれば、コーディング規約やアーキテクチャの方針を暗黙的に共有できます。
# プロジェクトの CLAUDE.md に書いておくと全員が従う
## コーディング規約
- TypeScript strict モード
- any 型禁止(unknown を使用)
- 金額は int(円単位)、float 禁止
## アーキテクチャ
- API: Hono + Zod バリデーション
- DB: Prisma ORM
- テスト: Vitest
## ファイル構成
src/
├── handlers/ # APIハンドラー
├── services/ # ビジネスロジック
├── types/ # 型定義
└── utils/ # ユーティリティ
# → チームメイト全員がこの構成に従って実装する
Agent Teamの全メンバーは同じタスクリスト(~/.claude/tasks/{team-name}/)にアクセスできます。TaskGet でタスクの description を読めば、他のチームメイトに割り当てられたタスクの内容も確認できます。
# タスクの description にコンテキストを含める
TaskCreate(
subject = "OAuth2認証モジュール実装",
description = """
freee OAuth2フローを実装する。
- 認証URL: https://accounts.secure.freee.co.jp/public_api/authorize
- トークンURL: https://accounts.secure.freee.co.jp/public_api/token
- スコープ: read write
- トークン保存先: .freee-tokens.json
[依存] Task #1 の型定義(src/freee/types.ts)が必要。
先に TaskGet(#1) で型定義の詳細を確認すること。
"""
)
# 別のチームメイトが TaskGet で内容を確認できる
# → 自分のタスクとの整合性を自発的にチェック可能
作業中に発見した情報や方針変更を、SendMessage で特定のチームメイトに直接伝えます。
# 作業中に発見した問題を関係者に即座に共有
SendMessage(
type = "message",
recipient = "frontend-engineer",
content = """
APIレスポンスの型が変わりました。
変更前: { users: User[] }
変更後: { data: User[], meta: { total: number } }
src/types/api.ts を更新済みなので Read で確認してください。
"""
)
# 注意: broadcast は全員に送信されるため、
# 「全員停止」「根本方針変更」以外では使わない
チーム設定ファイル(~/.claude/teams/{team-name}/config.json)は全メンバーが Read で参照できます。メンバー名・役割・作業ディレクトリが記載されており、「誰に何を聞けばいいか」を把握できます。
# チームメイトはチーム設定を読んでメンバー構成を把握できる
Read("~/.claude/teams/freee-shinkoku/config.json")
# → members 配列から以下がわかる:
# - "freee-connector": freee API連携担当(型定義は彼に聞く)
# - "tax-engine": 税額計算ロジック担当
# - "team-lead": オーケストレーター
# これにより、チームメイト同士が
# 「型定義について freee-connector に SendMessage する」
# といった自発的な連携が可能になる
# コンテキスト共有の使い分け
起動前に確定している情報?
├── Yes → 方法1: プロンプト埋め込み(最も確実)
│ └── 例: API仕様、型定義、実装ルール
└── No → 情報は全チームメイト共通?
├── Yes → 方法3: CLAUDE.md(自動読み込み)
│ └── 例: コーディング規約、アーキテクチャ方針
└── No → 情報はファイルとして残すべき?
├── Yes → 方法2: 中間ファイル(最も汎用)
│ └── 例: 設計書、スキーマ、中間成果物
└── No → 方法5: SendMessage(即時通知)
└── 例: 方針変更、発見した問題
Agent Teamの設計は、実は企業の組織論と驚くほど共通しています。50年以上の研究蓄積がある組織論を応用すれば、Agent Teamの設計をさらに洗練できます。ここでは5つの組織論を紹介し、そのうち現在のClaude Codeの仕組みだけでは実現できない3つについて、具体的なツール設計を示します。
| 組織論 | 核心のアイデア | Agent Teamへの応用 | 実現状況 |
|---|---|---|---|
| Inverse Conway Maneuver | 組織構造がシステム構造を決める。逆に、望むアーキテクチャに合わせて組織を設計する | コードのモジュール境界に合わせてエージェントを配置 | 実現可能 |
| Team Topologies | 4種のチーム型と3種の連携モードで認知負荷を管理 | エージェント間の連携契約を明示化 | 要ツール設計 |
| RACI Matrix | 各タスクのResponsible/Accountable/Consulted/Informedを明確化 | メッセージルーティングの自動化 | 要ツール設計 |
| SECI Model(野中郁次郎) | 暗黙知→形式知の変換サイクルで組織の知識を創造 | チーム横断の学習・知識蓄積 | 要ツール設計 |
| Andon Cord(トヨタ) | 品質問題を発見したら誰でもラインを止められる | エージェントが品質問題で全体を一時停止 | 要ツール設計 |
Mel Conwayが1967年に発見した法則: 「システムの構造は、それを設計する組織のコミュニケーション構造を反映する」。逆コンウェイ戦略はこれを逆手に取り、望むシステム構造に合わせて組織を設計します。
# 望むアーキテクチャ(マイクロサービス的な分離)
src/
├── auth/ # 認証ドメイン
├── payment/ # 決済ドメイン
├── notification/ # 通知ドメイン
└── shared/types/ # 共有型定義
# → エージェント構成をアーキテクチャに合わせる
Agent "auth-engineer" → src/auth/ のみ担当
Agent "payment-engineer" → src/payment/ のみ担当
Agent "notification-engineer" → src/notification/ のみ担当
Agent "type-architect" → src/shared/types/ を先に確定
# 各エージェントがドメイン境界を越えないため、
# 自然とクリーンなモジュール分離が維持される
これは原則2「1エージェント1ファイル」の上位概念です。「1エージェント1ドメイン」にすることで、DDD(Domain-Driven Design)の Bounded Context とエージェント境界が一致し、意図しないドメイン汚染を防げます。
Matthew SkeltonとManuel PaisのTeam Topologiesは、チーム間の連携を3つのモードに分類します。
| 連携モード | 企業組織での例 | Agent Teamでの対応 |
|---|---|---|
| Collaboration | 2チームが共同で新機能開発 | 2エージェントが同じファイルを参照・相互レビュー |
| X-as-a-Service | プラットフォームチームがAPIを提供 | エージェントAが仕様書を出力、Bがそれを消費 |
| Facilitating | SREチームが他チームの運用改善を支援 | レビューアーエージェントが実装を検証して改善提案 |
現在のClaude Code Agent Teamには「連携モード」を定義する仕組みがありません。全エージェントがフラットに SendMessage で通信するため、あるエージェントの出力が別のエージェントにとって「仕様書」なのか「相談」なのか「参考情報」なのかが曖昧になります。
チームの連携契約をJSON定義し、エージェント間通信を構造化します。
{
"agents": {
"api-designer": { "type": "complicated-subsystem", "domain": "API設計" },
"frontend": { "type": "stream-aligned", "domain": "UI実装" },
"backend": { "type": "stream-aligned", "domain": "サーバー実装" },
"reviewer": { "type": "enabling", "domain": "品質保証" }
},
"interactions": [
{
"from": "api-designer",
"to": ["frontend", "backend"],
"mode": "x-as-a-service",
"contract": "design/openapi-spec.yaml",
// ↑ api-designerはこのファイルを「成果物」として出力し、
// frontendとbackendはこれを「入力仕様」として消費する
},
{
"from": "frontend",
"to": "backend",
"mode": "collaboration",
"shared_files": ["src/types/"],
// ↑ 型定義を双方が参照・更新する(ファイルの共同所有)
},
{
"from": "reviewer",
"to": ["frontend", "backend"],
"mode": "facilitating",
// ↑ reviewerは実装を検証し改善提案するが、自らは書き換えない
}
]
}
この定義があれば、リーダーのプロンプトに「interactions 定義に従ってチームメイトを起動・連携させよ」と書くだけで、曖昧だった通信パターンが契約になります。
# X-as-a-Service モード: 一方通行の仕様提供
Phase 1: api-designer → design/openapi-spec.yaml を出力
Phase 2: frontend, backend が spec.yaml を Read して並列実装
# frontendはapi-designerに直接質問しない(契約で定義済み)
# Collaboration モード: 双方向の共同作業
Phase 2: frontend ⟷ backend が src/types/ を共同編集
# 型変更時は SendMessage で相互通知
# Facilitating モード: 検証と改善提案
Phase 3: reviewer が frontend, backend の成果物をレビュー
# 直接修正はしない。改善点をメッセージで指摘する
RACI Matrixは企業の責任分担を4つの役割で明確にするフレームワークです。Agent Teamでは「誰に何の粒度で情報を送るか」を自動化できます。
| 役割 | 定義 | Agent Teamでの行動 | 受け取る情報 |
|---|---|---|---|
| Responsible | 作業を実行する | タスクを担当するエージェント | タスクの全詳細 |
| Accountable | 最終承認する | リーダー(またはレビューア) | 成果物 + 判断ポイント |
| Consulted | 事前に意見を求められる | 関連ドメインのエージェント | 設計概要 + 質問 |
| Informed | 事後に報告を受ける | 影響を受ける周辺エージェント | 1行サマリーのみ |
現在の Agent Team では SendMessage の宛先を手動で選ぶ必要があり、リーダーの判断で「誰に送るか」「どの粒度で送るか」が変わってしまいます。
タスク完了時に RACI 定義を読み込み、役割に応じた粒度でメッセージを自動送信するシステムです。
{
"tasks": {
"api-design": {
"R": "api-designer",
"A": "team-lead",
"C": ["frontend", "backend"],
"I": ["reviewer"]
},
"frontend-impl": {
"R": "frontend",
"A": "team-lead",
"C": ["api-designer"],
"I": ["backend"]
}
}
}
# api-designer がタスク完了すると、Auto-Router が:
# 1. team-lead(A)に全文レポートを送信 → 承認要求
# 2. frontend, backend(C)に設計概要 + 「意見ありますか?」を送信
# 3. reviewer(I)に「API設計完了」の1行通知のみ送信
// PostToolUse フックで TaskUpdate(status: "completed") を検知
function onTaskCompleted(taskId: string, output: string) {
const raci = readRaciConfig(teamName);
const task = raci.tasks[taskId];
// Accountable: 全文 + 承認要求
sendMessage(task.A, {
content: `タスク完了: ${output}\n\n承認をお願いします。`,
summary: `${taskId} 完了 - 承認要求`
});
// Consulted: 要約 + 意見求む
for (const agent of task.C) {
sendMessage(agent, {
content: `${taskId} が完了しました。\n概要: ${summarize(output)}\n影響がありそうな点があればお知らせください。`,
summary: `${taskId} 完了 - レビュー依頼`
});
}
// Informed: 1行通知のみ
for (const agent of task.I) {
sendMessage(agent, {
content: `[通知] ${taskId} が完了しました。`,
summary: `${taskId} 完了通知`
});
}
}
野中郁次郎のSECIモデルは、知識創造を4つのプロセスで説明します。Agent Teamの最大の弱点は、チームが終了するとすべての知識が消えることです。
| プロセス | 変換 | 企業での例 | Agent Team での現状 |
|---|---|---|---|
| Socialization | 暗黙知 → 暗黙知 | OJT、ペアプログラミング | SendMessage での情報共有 |
| Externalization | 暗黙知 → 形式知 | ベストプラクティスの文書化 | チーム終了で消滅 |
| Combination | 形式知 → 形式知 | マニュアルの統合・体系化 | チーム横断の統合なし |
| Internalization | 形式知 → 暗黙知 | 研修、標準手順の実践 | CLAUDE.mdで部分的に実現 |
人間の組織では、プロジェクトが終わっても参加者の頭に経験が残ります。しかし Agent Team は TeamDelete した瞬間にすべてが消えます。次に同種のプロジェクトを始めても、前回の失敗を繰り返す可能性があります。
チーム終了時に自動でレトロスペクティブを生成し、知識を永続化する仕組みです。
# 知識の永続化ディレクトリ
~/.claude/memory/team-learnings/
├── retros/ # 自動生成レトロスペクティブ
│ ├── 2026-02-15-freee-shinkoku.md
│ ├── 2026-02-20-proposal-slides.md
│ └── 2026-02-25-bg-audio-playback.md
├── patterns/ # 成功パターン集
│ ├── effective-prompts.md # よく効いたプロンプト設計
│ ├── cost-optimization.md # コスト最適化の知見
│ └── parallel-patterns.md # 並列化パターン
└── anti-patterns/ # 失敗パターン集
├── context-sharing-failures.md
└── over-parallelization.md
# .claude/settings.json に追加するフック
{
"hooks": {
"PreToolUse": [
{
"matcher": "TeamDelete",
"script": "~/.claude/hooks/generate-retro.sh"
}
]
}
}
# generate-retro.sh の動作:
# 1. チームのタスクリストを読み込み
# 2. 完了タスクの description, blockedBy, 所要時間を集計
# 3. レトロスペクティブを自動生成:
# - チーム構成(メンバー数、モデル配分)
# - タスク完了率、並列化率
# - ボトルネックになったタスク
# - 使えたパターン / 改善すべき点
# 4. ~/.claude/memory/team-learnings/retros/ に保存
# Retrospective: freee-shinkoku (2026-02-15)
## チーム構成
- リーダー: Opus(オーケストレーション)
- freee-connector: Opus(API連携実装)
- tax-engine: Opus(税額計算エンジン)
## 成果
- 14ファイル / 3,538行のTypeScriptコード
- 全タスク完了率: 100%
## 学び
- [有効] 起動プロンプトに80行の詳細仕様を埋め込み → 追加指示ゼロ
- [有効] 金額int/float禁止ルールをプロンプトに明記 → 端数処理バグなし
- [改善] 3名全員Opusは過剰。freee-connectorはSonnetで十分だった
- [改善] freee APIのレート制限429をプロンプトで言及したが、
実際のテストは不足
## 次回への推奨
- API連携系エージェントはSonnetで起動すること
- テストタスクを独立した4番目のエージェントに分離すること
蓄積されたレトロスペクティブは、次のチーム起動時にリーダーのプロンプトへ自動注入できます:
# 新チーム起動時のリーダープロンプト
"""
## 過去の学び(自動注入)
~/.claude/memory/team-learnings/retros/ を Read して、
同種プロジェクトの学びを活かしてください。
特に以下を確認:
- 同じドメインの過去レトロ
- anti-patterns/ の回避すべきパターン
- patterns/ の有効なプロンプト設計
"""
トヨタ生産方式のAndon Cord(あんどん紐)は、生産ラインの作業者が品質問題を発見したとき、ラインを止めて問題解決を優先する仕組みです。
現在の Agent Team では、あるエージェントが致命的な問題を発見しても、他のエージェントは知らずに作業を続けてしまいます。broadcast で全員に通知しても、受信側が「作業を止めるべきか」を判断する基準がありません。
# チームメイトが品質問題を発見した場合の手順
# 1. Andon ファイルを作成(全エージェントが監視)
Write(".claude/andon/{team-name}.json", {
"triggered_by": "backend-engineer",
"severity": "critical",
"reason": "DB スキーマの外部キー制約が全エンドポイントに影響",
"timestamp": "2026-02-28T14:30:00Z"
})
# 2. PreToolUse フックが全エージェントの Write/Edit を一時停止
# → "Andon が発動中です。.claude/andon/ を確認してください"
# 3. リーダーが問題を確認し、解決策を決定
# 4. Andon ファイルを削除 → 全エージェントの作業再開
Bash("rm .claude/andon/{team-name}.json")
# PreToolUse フック例:
# if [ -f ".claude/andon/${TEAM_NAME}.json" ]; then
# echo "BLOCK: Andon発動中。作業を一時停止してください。"
# exit 1
# fi
# 組織論をAgent Teamに適用するロードマップ
Phase 1: 今すぐできること
├── Inverse Conway Maneuver
│ └── ディレクトリ構造 = エージェント境界
└── CLAUDE.md による組織文化の共有
└── コーディング規約・アーキテクチャ方針
Phase 2: プロンプト設計で実現
├── Team Topologies の連携モード
│ └── .claude/team-topologies/*.json をリーダーが参照
├── RACI Matrix
│ └── .claude/raci/*.json に基づきリーダーが手動ルーティング
└── Andon の簡易版
└── "問題発見時は broadcast + 全員作業停止" をプロンプトに明記
Phase 3: フック / スクリプトで自動化
├── RACI Auto-Router
│ └── PostToolUse フックで TaskUpdate を検知 → 自動送信
├── Andon Signal
│ └── PreToolUse フックでファイル存在チェック → 強制停止
└── Organizational Memory
└── TeamDelete 前にレトロ自動生成 → memory/ に永続化
# 推奨: Phase 1 → 2 を今日から実践し、
# Phase 3 は繰り返し使うチーム構成が固まってから投資する
| 原則 | 人間チームでの対応 | Agent Teamでの実装 |
|---|---|---|
| Why/What の分離 | リーダーに方針、メンバーにタスク | リーダーPromptに目的、TaskCreateに作業 |
| ファイル所有権 | コード所有権(CODEOWNERS) | 1エージェント1ファイル |
| 自己完結コンテキスト | 仕様書・設計書の共有 | 中間成果物をファイルに書き出す |
| 適材適所 | ジュニア/シニアの役割分担 | Haiku/Sonnet/Opusのモデル選択 |
| 依存関係の明示 | ガントチャート、Jiraの依存設定 | addBlockedBy/addBlocks |
| 中間レビュー | PR レビュー、デイリースタンドアップ | フェーズ間でリーダーが成果物を確認 |
| 終了処理 | プロジェクト完了、振り返り | shutdown_request → TeamDelete |
これまでの内容をまとめると、Agent Teamの活用は3つの問いに集約されます: