mcpField
A
agent-teams

agent-teams

github.com/scientiacapitalエージェントワークフロー2870 回インストール4 週間前に更新
リポジトリ

agent-teams について

Claude Code で 2〜3 個のエージェントを並行稼働させるスキルです。各エージェントに別のターミナル、Git worktree、コンテキストを割り当て、リーダーがタスクファイルで調整して進捗を確認し、成果を統合します。ネイティブ Teams API を使う方法も扱います。

主な機能

  1. 01エージェントごとに Git worktree を分離
  2. 02タスクファイルで作業と契約を割り当て
  3. 03ブランチを監視して成果を統合
  4. 04ネイティブ Teams API による協調
  5. 05ファイル分離に応じて並列方式を選択

活用シーン

  1. 01共通契約に基づきフロントエンドとバックエンドを並行開発
  2. 02独立した機能を複数エージェントに割り当て
  3. 03一方がテストを書き、他方が機能を実装
  4. 04リファクタリングとコードレビューを並行実施

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/scientiacapital/skills --skill agent-teams

インストール後、Claude Code で/agent-teamsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

config.json
reference/
best-practices-full.md
context-engineering.md
prompt-templates.md
workflows-detailed.md
worktree-integration.md

詳細

同じコードベース上で並行して作業する 2〜3 体の Claude Code エージェントのチームを調整します。各エージェントはそれぞれ独自のターミナル、独自の git worktree、独自のコンテキストウィンドウで実行されます。チームリード(オーケストレーションを行うあなた、Claude)は、作業を分解し、焦点を絞ったプロンプトでエージェントを起動し、進捗を監視し、マージを調整します。

重要な原則: 各エージェントは共有メモリを一切持たない、まっさらな Claude セッションです。すべての調整はファイル(WORKTREE_TASK.md、共有コントラクト)と git(ブランチ、PR)を通じて行われます。エージェント間の実行時の通信はありません。

<quick_start> 環境変数を設定します(初回のみ):

export AGENT_TEAMS_MAX=3  # M1/8GB safe default

2 エージェントのチームを起動します:

"Set up a team: Agent 1 builds the API endpoints, Agent 2 builds the React components.
They share this contract: POST /api/tasks returns { id, title, status }."

何が起こるか:

  1. チームリードが worktree-manager を介して 2 つの worktree を作成します
  2. それぞれに焦点を絞ったプロンプト + コントラクトを含む WORKTREE_TASK.md を書き込みます
  3. 各エージェントをそれぞれ独自の Ghostty ターミナルで起動します
  4. エージェントは独立して作業し、チームリードが監視してマージします </quick_start>

<success_criteria> チームセッションは、次の条件を満たすときに成功です:

  • 各エージェントが自身の worktree で割り当てられたタスクを完了する
  • エージェントのブランチ間にマージコンフリクトがない(またはコンフリクトが簡単に解決できる)
  • 各エージェントのコンテキストが焦点を保っている(肥大化せず、無関係なコードを再読込しない)
  • マージ後にすべてのエージェントの作業がプロジェクトのテストスイートを通過する
  • 総実時間が逐次実行よりも短い </success_criteria>

前提条件

必須スキル: worktree-manager — agent-teams は worktree の作成、ポートの割り当て、ターミナルの起動のすべてを worktree-manager に委譲します。まずこれをインストールしてください。

推奨: プロジェクトに CLAUDE.md(開発コマンド、規約)を含む .claude/ ディレクトリがあること。プロジェクトにさらに .claude/agents/(カスタムサブエージェント)や .claude/settings.json(フック/パーミッション)がある場合、これらは各エージェントの worktree に自動的に伝播されます。

環境チェック:

# Agent teams config
echo "Max agents: ${AGENT_TEAMS_MAX:-3}"

# Worktree manager available?
ls ~/.claude/skills/worktree-manager/ 2>/dev/null && echo "worktree-manager: OK" || echo "worktree-manager: MISSING"

# Running agents (approximate)
pgrep -f "claude.*--model" | wc -l | xargs echo "Active Claude processes:"

# Memory pressure
vm_stat | grep "Pages free" | awk '{print "Free pages:", $3}'

<current_state> アクティブなエージェント: !pgrep -f "claude.*--model" 2>/dev/null | wc -l | tr -d ' ' 個の Claude プロセスが実行中

Worktree レジストリ: !cat ~/.claude/worktree-registry.json 2>/dev/null | jq -r '.worktrees[] | select(.status == "active") | "\(.project)/\(.branch)"' | head -5

メモリ: !memory_pressure 2>/dev/null | head -1 || echo "Unknown"

Git ステータス: !git status --short --branch 2>/dev/null | head -3 </current_state>

ハードウェア制約(M1/8GB)
リソース予算エージェントあたりシステム予約
RAM8 GB約 1.5 GB2 GB
CPU コア8共有—
最大エージェント数3——

経験則: memory_pressure が「WARN」以上を報告したら、2 エージェントに減らしてください。

<when_to_use>

エージェントチームをいつ使うか

次の場合に使います:

  • タスクが自然に 2〜3 の独立した作業ストリームに分解できる
  • 各ストリームが異なるファイルに触れる(コンフリクトのリスクが低い)
  • トークン効率よりも実時間の速さが重要
  • コンポーネント間に明確なコントラクト(API の形、共有型)がある

次の場合は使わないでください:

  • タスクが密結合している(すべての変更が同じファイルに触れる)
  • バッテリー残量が 30% 未満(エージェントは電力を急速に消費します)
  • メモリプレッシャーがすでに高い(memory_pressure を確認してください)
  • コードベースにテストがない(盲目的なマージはリスクが高い)

判断のヒューリスティック:

Can I describe each agent's task in <50 words?
  YES → Good candidate for agent teams
  NO  → Break it down more, or do it sequentially

軽量な代替手段: エージェントがファイル分離を必要としないタスク(異なるファイル、読み取り専用、レビュー)には、代わりに subagent-teams を使ってください。これは Claude ネイティブの Task ツールを使い、セッション内で並行エージェントを実行します — 起動が速く、worktree は不要です。下記の ネイティブ Teams API セクションも参照してください。

</when_to_use>

アーキテクチャ

┌──────────────────────────────────────────────────┐
│                   TEAM LEAD                       │
│            (this Claude session)                  │
│                                                   │
│  Responsibilities:                                │
│  • Decompose task into agent assignments          │
│  • Create worktrees (via worktree-manager)        │
│  • Write WORKTREE_TASK.md for each agent          │
│  • Monitor progress (git log, file checks)        │
│  • Coordinate merges back to main                 │
└─────────┬───────────────┬───────────────┬────────┘
          │               │               │
    ┌─────▼─────┐   ┌─────▼─────┐   ┌─────▼─────┐
    │  AGENT 1  │   │  AGENT 2  │   │  AGENT 3  │
    │           │   │           │   │           │
    │ Worktree: │   │ Worktree: │   │ Worktree: │
    │ ~/tmp/wt/ │   │ ~/tmp/wt/ │   │ ~/tmp/wt/ │
    │ proj/br-1 │   │ proj/br-2 │   │ proj/br-3 │
    │           │   │           │   │           │
    │ Terminal: │   │ Terminal: │   │ Terminal: │
    │ Ghostty 1 │   │ Ghostty 2 │   │ Ghostty 3 │
    └───────────┘   └───────────┘   └───────────┘
         │               │               │
         └───── git branches ─────────────┘
                     │
               [main branch]
コンテキストの分離

各エージェントは完全に別個の Claude セッションです。エージェントは:

  • 互いのコンテキストウィンドウを読み取ることができません
  • 互いにメッセージを送信できません
  • ファイルシステムと git を通じてのみ状態を共有します
  • 起動時に WORKTREE_TASK.md から自分のタスクを読み取ります
ファイルによる連携
ファイル目的書き込み元読み込み元
WORKTREE_TASK.mdエージェントの担当タスクとコンテキストチームリーダーエージェント
CONTRACT.md共有 API/インターフェース定義チームリーダーすべてのエージェント
.agent-statusエージェントによる進捗の自己報告エージェントチームリーダー
.claude/CLAUDE.mdプロジェクトの規約、開発コマンドプロジェクトエージェント(自動読み込み)
.claude/settings.jsonフック(自動フォーマット)、権限プロジェクトエージェント(自動読み込み)
.claude/agents/*.mdカスタムサブエージェントの定義プロジェクトエージェント(ディスパッチ時)
Git コミット作業成果物エージェントマージ時にチームリーダー

<display_modes>

表示モード

モードターミナル方法
in-process任意のターミナルすべてのチームメイトがメインターミナルに表示されます。Shift+Down で切り替え、Ctrl+T でタスクリストを表示します。
split-panetmux または iTerm2 のみチームメイトごとに専用のペインが割り当てられます。ペインをクリックして操作します。

設定:~/.claude/settings.json で "teammateMode": "auto" を指定します。CLI:claude --teammate-mode in-process。Ghostty で分割ペインを使うには tmux ラッパーが必要です。

分割ペインの設定

tmux: $TMUX が設定されている場合、自動検出されます。チームメイトごとに分割ペインが割り当てられます。Ctrl+B + 矢印キーで移動します。

iTerm2: AppleScript による自動化を使用します。チームメイトは現在のタブ内の分割ペインで開きます。

制限事項: Ghostty はプログラムによるペイン分割に対応していません。tmux ラッパーを使用してください:ghostty -e "tmux new-session"。推奨されるペインの最大数は 4 つ(リーダー + チームメイト 3 人)です。各ペインには約 120 列が必要です。

</display_modes>

<team_hooks>

チームフック

TeammateIdle フック

チームメイトが現在のターンを終えてアイドル状態になると実行されます。settings.json で設定します:

{
  "hooks": {
    "TeammateIdle": [{
      "hooks": [{
        "type": "command",
        "command": "bash -c 'echo \"Teammate idle — check TaskList for unassigned work\" >&2'"
      }]
    }]
  }
}

使用例: 次のタスクの自動割り当て、アイドル時間の記録、クリーンアップの開始。終了コード 2 はアイドル状態への移行をブロックし、チームメイトの作業を継続させます。マッチャーには対応していません。すべてのチームメイトに対して実行されます。

TaskCompleted フック

TaskUpdate によってタスクが完了としてマークされると実行されます。自動割り当てパイプラインに使用します:

{
  "hooks": {
    "TaskCompleted": [{
      "hooks": [{
        "type": "command",
        "command": "bash -c 'echo \"Task completed — assigning next unblocked task\" >&2'"
      }]
    }]
  }
}

終了コード 2 はタスクの完了をブロックし、タスクを in_progress のままにします。マッチャーには対応していません。

プラン承認フロー

mode: "plan" で起動されたチームメイトは、実装前にプランの承認を受ける必要があります:

  1. チームメイトが ExitPlanMode を呼び出す → チームリーダーに plan_approval_request を送信
  2. チームリーダーがレビュー → 承認またはフィードバック付きの却下を plan_approval_response で送信
  3. 承認された場合:チームメイトはプランモードを終了し、実装を開始
  4. 却下された場合:チームメイトはフィードバックを受け取り、プランを修正
// Approving a teammate's plan
SendMessage({
  type: "plan_approval_response",
  request_id: "abc-123",  // from plan_approval_request
  recipient: "architect",
  approve: true
})

</team_hooks>

ワークフロー

ワークフロー目的
1. チームを起動する分解 → JSON ロードマップ → worktree → タスクファイル → 起動 → 監視
2. WORKTREE_TASK.md を作成するコンテキスト、担当タスク、ファイルの境界、コントラクト、検証、完了手順
3. 進捗を監視するブランチごとの git log と .agent-status の確認
4. エージェントの作業をマージする計画した順序でマージし、都度テストして、--no-ff を使用
5. 非同期で引き継ぐ長時間かかるタスクには GitHub PR の @claude ボットを使用
6. プランモード分解を決定する前に、コードベースを読み取り専用で調査
7. ネイティブ Teams APIworktree を使わないセッション内チームに TeamCreate + TaskCreate + SendMessage を使用
8. プラン承認mode: "plan" のチームメイトは、実装前にリーダーの承認を受けるためプランを提出

ネイティブ API と Worktree の選択: 別々のファイルを扱う場合 → ネイティブ Teams API。同じファイルを扱う場合 → Worktree。リアルタイムのメッセージング → ネイティブ API。長時間実行するプロセス → Worktree。

手順ごとの説明、WORKTREE_TASK.md のテンプレート、マージ手順、ネイティブ Teams API の例については、reference/workflows-detailed.md を参照してください。

<use_cases>

チームのパターン

機能の並行開発

2~3 人のエージェントが、独立した機能を同時に開発します。競合リスクが最も低くなります。 最適な用途: スプリント形式で機能を並行開発する場合。 参照: 起動プロンプトについては reference/prompt-templates.md#feature-parallel を参照してください。

### フロントエンド/バックエンド 一方のエージェントが API を構築し、もう一方が UI を構築します。共有コントラクトで接続します。 **最適な用途:** API と UI を明確に分離できるフルスタック機能。 **参照:** エージェントの起動プロンプトについては、`reference/prompt-templates.md#frontend-backend` を参照してください。
テスト/実装(TDD ペア)

エージェント 1 が最初にテストを作成し、コミットしてプッシュします。エージェント 2 がテストをプルし、テストに合格するまで実装します。 最適な用途: テストカバレッジが重要な高品質コード。 参照: エージェントの起動プロンプトについては、reference/prompt-templates.md#test-implement を参照してください。

レビュー/リファクタリング

エージェント 1 がコードをリファクタリングします。エージェント 2 がリファクタリング後のコードをレビューし、改善案を作成します。 最適な用途: 別の視点が役立つ大規模なリファクタリングタスク。 参照: エージェントの起動プロンプトについては、reference/prompt-templates.md#review-refactor を参照してください。

</use_cases>

<best_practices>

ベストプラクティス

  • エージェントごとにコンテキストを分離する — WORKTREE_TASK.md には関連情報だけを記載し、タスクは 50 語未満にします
  • 外部状態を使用する — .agent-status、Git のコミット、WORKTREE_TASK.md を使用します(エージェント間で共有メモリはありません)
  • 指示を最初に記載する — タスクファイルの冒頭に最も重要な情報を記載します
  • コントラクトを先に定義する — エージェントを起動する前に、共有 API の構造を CONTRACT.md で定義します
  • マージの順序が重要 — 基盤(API)を利用側(UI)より先にし、各段階でテストを実行して、--no-ff を使用します
  • プロジェクト設定の継承 — .claude/ ディレクトリが自動的にコピーされ、エージェントは CLAUDE.md、フック、権限、カスタムサブエージェントを利用できます
  • チームフック — TeammateIdle と TaskCompleted フックは、作業の継続や完了のブロックに終了コード 2 を使用します

コンテキストエンジニアリング、セッションハーネスのパターン、権限モデル、フックの設定については、reference/best-practices-full.md を参照してください。

制限事項

M1/8GB の制約
  • エージェントは最大 3 つ — これを超えると、メモリ負荷によってスラッシングが発生します
  • GPU エージェントなし — すべてのエージェントは CPU バウンドの Claude セッションです
  • 起動時間 — 各エージェントの初期化には 5~10 秒かかります
調整に関する制限
  • リアルタイム通信なし — ワークツリーのエージェント同士はメッセージを送れません(ただし、ネイティブの Teams API エージェントは可能です。ワークフロー 7 を参照してください)
  • ファイルの競合 — 2 つのエージェントが同じファイルを編集した場合、手動での解決が必要です
  • コンテキストの共有なし — 各エージェントは WORKTREE_TASK.md のみを使って新たに開始します
  • 順次依存 — エージェント 2 がエージェント 1 の出力を必要とする場合、エージェント 2 は待機する必要があります
ネイティブの Agent Teams に関する制約

Claude Code のネイティブ Agent Teams における既知の制約:

制限事項詳細
セッションの再開不可/resume を実行しても、プロセス内のチームメイトは復元されません。再開されるのはリードエージェントのみです。
入れ子のチーム不可チームメイトはサブチームを起動できません。チーム階層は 1 段階のみです。
1 セッションにつき 1 チーム新しいチームを開始する前に、現在のチームをクリーンアップ(TeamDelete)してください。
リードは固定セッションの途中でチームメイトを昇格させたり、リーダーシップを移譲したりすることはできません。
起動時に権限を設定チームメイトの権限は起動時に設定されます。作成後はチームメイトごとに調整できますが、起動中は調整できません。
シャットダウンに時間がかかる場合があるチームメイトはシャットダウン前に現在のリクエストを完了します。余裕を持って段階的に終了してください。
このスキルの対象外
  • CI/CD パイプラインではありません — 自動テストには GitHub Actions を使用してください
  • サブエージェント用フレームワークではありません — サブエージェント(Claude に組み込まれた Task ツール)は 1 つのセッション内で実行されます。このスキルは別々のセッションを調整します。
  • 自動スケーリングではありません — チームの規模と割り当ては手動で決定します

トラブルシューティング

エージェントが WORKTREE_TASK.md を読まない

原因: エージェントが --dangerously-skip-permissions なしで起動されたか、タスクファイルがワークツリーのルートにありません。 対処方法: worktree-manager がタスクファイルをワークツリーのルートディレクトリに書き込むようにしてください。

エージェント間でマージ競合が発生する

原因: ファイルの境界に関する指示があったにもかかわらず、エージェントが重複するファイルを編集しました。 対処方法:

  1. WORKTREE_TASK.md で境界が明確だったか確認します
  2. main 上で競合を手動で解決します
  3. 次回は、ファイルの境界をより厳密に設定します
エージェントがコンテキストを使い果たす

原因: エージェントのタスクが広範すぎて、あまりにも多くのファイルを読み込んでしまいました。 修正: タスクをより小さな単位に分割してください。各エージェントが触れるファイルは 10 個未満にしてください。

メモリ圧迫 / システムの低下

原因: 利用可能な RAM に対してエージェントが多すぎます。 修正:

  1. エージェントを 2 個に減らす
  2. 必須でないアプリケーションを閉じる
  3. 起動前に memory_pressure を確認する
エージェントは完了したが作業内容が誤っている

原因: WORKTREE_TASK.md の検証ステップが不十分です。 修正: 明示的な検証コマンドを追加してください:

## Verification
1. Run: npm test -- --filter auth
2. Run: npx tsc --noEmit
3. Manually test: curl localhost:8100/api/auth/login

参照ファイル

より詳細なガイダンスが必要なときに、必要に応じて読み込んでください:

参照読み込むタイミング
reference/workflows-detailed.md起動、監視、マージ、非同期ハンドオフ、Native Teams API のステップバイステップ
reference/best-practices-full.mdコンテキストエンジニアリング、セッションハーネス、コントラクトファースト、フック設定
reference/context-engineering.mdエージェントプロンプトの設計、コンテキスト使用量の最適化、委任パターン
reference/worktree-integration.mdworktree-manager との連携、ポート割り当て、ターミナル戦略
reference/prompt-templates.md4 つのチームパターン向けのすぐに使える起動プロンプトが必要なとき

結果サイドカーを出力する

最終ステップとして、~/.claude/skill-analytics/last-outcome-agent-teams.json に書き込みます:

{"ts":"[UTC ISO8601]","skill":"agent-teams","version":"1.2.0","variant":"default",
 "status":"[success|partial|error]","runtime_ms":[estimated ms from start],
 "metrics":{"agents_spawned":[n],"tasks_delegated":[n],"merges_completed":[n]},
 "error":null,"session_id":"[YYYY-MM-DD]"}

一部のステージが失敗しても結果が生成された場合は、ステータスに "partial" を使用してください。出力が一切生成されなかった場合にのみ "error" を使用してください。

コメント