Skip to content

サブエージェントによる自律的なプロジェクト管理

複数の параллельных 工作ストリームを持つ複雑なプロジェクトを管理することは疲れます。常にコンテキストを切り替え、ツール間でステータスを追跡し、手動でハンドオフを調整します。

このユースケースでは、サブエージェントがタスクに対して自律的に動作し、中央オーケストレータではなく共有状態ファイルを介して調整する分散型プロジェクト管理パターンを実装します。

課題点

従来のオーケストレーターパターンはボトルネックを作成します — メ인이交通整理になります。複雑なプロジェクト(マルチリポジトリのリファクタリング、リサーチスプリント、コンテンツパイプライン)では、常に監視なしに並行して動作できるエージェントが必要です。

できること

  • 分散型調整: エージェントは共有STATE.yamlファイルを読み書き
  • 並列実行: 複数のサブエージェントが独立したタスクで同時に動作
  • オーケストレータオーバーヘッドなし: メインセッションは薄く 유지(CEOパターン — 戦略のみ)
  • 自己文書化: すべてのタスク状態はバージョン管理ファイルに永続化

コアパターン:STATE.yaml

各プロジェクトは単一の情報源として機能するSTATE.yamlファイルを维持します:

yaml
# STATE.yaml - プロジェクト調整ファイル
project: website-redesign
updated: 2026-02-10T14:30:00Z

tasks:
  - id: homepage-hero
    status: in_progress
    owner: pm-frontend
    started: 2026-02-10T12:00:00Z
    notes: "レスポンシブレイアウトを作業中"
    
  - id: api-auth
    status: done
    owner: pm-backend
    completed: 2026-02-10T14:00:00Z
    output: "src/api/auth.ts"
    
  - id: content-migration
    status: blocked
    owner: pm-content
    blocked_by: api-auth
    notes: "新しいエンドポイントスキーマを待機中"

next_actions:
  - "pm-content: api-authが完了したらマイグレーションを再開"
  - "pm-frontend: ヒーローをデザインチームとレビュー"

動作方法

  1. メインエージェントがタスクを受信 → スコープを 指定してサブエージェントを生成
  2. サブエージェントがSTATE.yamlを読む → 割り当てられたタスクを見つける
  3. サブエージェントが自律的に作業 → 進捗に応じてSTATE.yamlを更新
  4. 他のエージェントがSTATE.yamlをポーリング → ブロックされていない作業を Picks up
  5. メインエージェントが定期的にチェックイン → 状態を確認し、優先順位を調整

必要なスキル

  • サブエージェント管理用のsessions_spawn / sessions_send
  • STATE.yaml用のファイルシステムアクセス
  • 状態バージョン管理用のGit(オプションですが推奨)

セットアップ:AGENTS.md構成

text
## PM委譲パターン

メインセッション = オーケストレータのみ。すべての実行はサブエージェントに行く。

ワークフロー:
1. 新しいタスクが到着
2. PROJECT_REGISTRY.mdで既存のPMを確認
3. PMが存在 → sessions_send(label="pm-xxx", message="[task]")
4. 新しいプロジェクト → sessions_spawn(label="pm-xxx", task="[task]")
5. PMが実行、STATE.yamlを更新、報告
6. メインエージェントがユーザーに要約

ルール:
- メインセッション:最大0〜2ツールコール(spawn/sendのみ)
- PMは独自のSTATE.yamlファイルを所有
- PMは並列サブタスク用にサブサブエージェントを生成 가능
- すべての状態の変更をgitにコミット

例:PMの生成

text
User: "Authモジュールをリファクタリングしてドキュメントを更新"

メインエージェント:
1. レジストリを確認 → アクティブなpm-authなし
2. 生成: sessions_spawn(
     label="pm-auth-refactor",
     task="Authモジュールをリファクタリング、ドキュメントを更新。STATE.yamlで追跡"
   )
3. 応答: "pm-auth-refactorを生成しました。完了したら報告します。"

PMサブエージェント:
1. タスクの内訳でSTATE.yamlを作成
2. タスクを処理し、ステータスを更新
3. 変更をコミット
4. メインに完了を報告

重要な洞察

  • STATE.yaml > オーケストレータ: ファイルベースの調整はメッセージパッシングより良くスケール
  • Git as 監査ログ: 完全な履歴のためにSTATE.yamlの変更をコミット
  • ラベルの規則が重要: 簡単な追跡のためにpm-{project}-{scope}を使用
  • 薄いメインセッション: メインエージェントがするほど速く応答

基づいたもの

このパターンはNicholas Carliniのアプローチに触発されました — 自律的に動作するコーディングエージェントへ — エージェントを微观管理するのではなく、自己組織化させます。

関連リンク

MITライセンスでリリース