MF Blogs 便利ツール
複数のAIエージェントが共有コンテキストを介して情報を受け渡す抽象図

記事

AIエージェント同士の情報共有で失敗しないための設計

Claude Codeのサブエージェントや複数AIエージェントが情報をやり取りするときに起きる、コンテキストの取りこぼし・上書き・誤伝達を防ぐ設計を整理します。共有コンテキストの置き場所、引き継ぎファイルの書き方、競合と差分の扱い、レビューゲートを公式仕様と運用の両面でまとめた、複数エージェントの連携ミスを減らしたい人向けの実務ガイドです。

0:00 0:00

Claude Codeのサブエージェントや複数AIエージェントを同時に走らせていると、ある段の調査結果が次の段に届かない、同じファイルを2つのエージェントが矛盾する方向に直す、といった「情報共有の失敗」が必ず出てきます。本記事は、どこに情報を置き、何を渡し、何を渡さないかを設計するための型を整理します。

結論:エージェント間の情報共有は「会話」ではなく「ファイル」で行う

Anthropic公式のサブエージェント仕様では、サブエージェントは独立したコンテキストを持ち、結果を呼び出し元のメインセッションに返したあと破棄されます(Sub-agents)。つまり、エージェント間に常設の通信路はありません。

ここから素直に出てくる原則が3つです。

  1. 共有したい中身はファイル化するNOTES/RESEARCH.mdNOTES/PLAN.mdのように、人間もAIも読める成果物にする
  2. メインセッションが司令塔になる:サブエージェント同士は直接話さない。メインがまとめて次に渡す
  3. 渡す情報は要約と判断材料に絞る:生ログや全文を流すと、次のエージェントのコンテキストを圧迫する

複数セッションをまたぐ恒常的な通信が必要なら、それはagent teamsの領域です。公式ドキュメントもサブエージェントとagent teamsを別物として扱っています。

エージェント間情報共有の3つの失敗パターン

実運用で起きやすい失敗は、おおむね次の3つに整理できます。

パターン症状根本原因
取りこぼし調査エージェントが見つけた事実が、実装エージェントに伝わらない引き継ぎファイルを作らず会話履歴に流した
上書き後段のエージェントが前段の結論を勝手に書き換える「確定/要検証」の区別を書いていない
誤伝達サマリーが原文と意味がずれる要約方針を依頼文で指定していない

どれも、メインセッションが情報を「ファイルに固定する/読み手の境界を明示する/要約方針を渡す」の3点をやっていれば防げます。

共有コンテキストの置き場所を3層に分ける

情報をどこに置くかは、寿命と読み手で分けると整理しやすくなります。

  • セッション内で完結する情報:メインセッションの会話とRead済みファイル参照。ターン終了とともに揮発する。サブエージェントには渡さない
  • タスク単位で持ち回る情報NOTES/配下のMarkdown(RESEARCH.mdPLAN.mdDECISIONS.md)。エージェント間の引き継ぎはここを介する
  • プロジェクト恒常の情報CLAUDE.mdとその@インポート先。前提・禁止事項・命名規則など、毎回必要な短い事実だけを置く

サブエージェントを起動するとき、メインから「@NOTES/PLAN.mdを読んで、ステップ2の範囲だけ実装して」と渡せば、共有コンテキストはほぼファイル経由で完結します。会話の中だけで進めると、別セッションに切り替えた瞬間に消えます。

引き継ぎファイルに書くべき3要素

サブエージェントの調査結果や計画を、次のエージェントが読んでもブレないようにするためには、引き継ぎファイルに最低限3つを書きます。

  1. 確定事項:再調査不要。公式情報や読んだソースコードに基づく
  2. 要検証事項:仮説・推測。次の段で確かめる対象
  3. 次段への入力:「次に何を、どのファイルで、どこまでやるか」の指示

依頼文テンプレートとしては次の形になります。

あなたはリポジトリ調査担当のサブエージェントです。
タスク: 認証フローに関わるファイルを列挙し、責務を1行ずつ書く。

出力先: NOTES/RESEARCH.md に追記する。次の3節を必ず立てる。

## 確定事項
- ファイル名と1行責務だけ列挙する
- 推測は書かない

## 要検証事項
- 読んでもわからなかった呼び出し関係
- 命名と実態がずれて見える箇所

## 次段への入力(実装エージェントへ)
- 編集すべきファイル候補
- 触らないでよいファイル

「確定/要検証/次段への入力」の3節を強制すると、後段のエージェントは「NOTES/RESEARCH.mdの確定事項だけ前提にしてよい」と機械的に判断できます。

「共有してはいけない情報」を明示する

情報共有設計は「何を渡すか」と同じくらい「何を渡さないか」が重要です。次の3つは原則として共有ファイルに書かないし、サブエージェントにも渡しません。

  • 秘密情報:APIキー、.envの中身、本番DBの接続文字列。渡し方の詳細は「Claude Codeに秘密情報を渡さないための実践ルール」にまとめています
  • 生ログ全文:エラー抜粋だけNOTES/に貼り、巨大ログは置かない。コンテキスト圧迫の原因になる
  • 判断者の頭の中:「なんとなくこっちが好み」のような未言語化のニュアンス。判断基準を文章化していないなら、メインセッションで人間が判断する

サブエージェントは親のMCPツール定義などを一定範囲で継承するため、不要な権限まで渡すとコンテキストとリスクの両方を増やします。サブエージェントごとにtoolsdisallowedToolsで道具立てを絞るのは、情報共有設計の一部です。

競合と上書きを避ける運用ルール

複数エージェントを並列で動かすと、同じファイル・同じNOTES/を同時に書き換える事故が起きます。次の運用で大半は防げます。

  • 書く担当を1段に1人にするNOTES/RESEARCH.mdは調査段だけが書く、PLAN.mdは計画段だけが書く、と決める。複数エージェントの並列ファンアウト時は「節を分けて担当」を依頼文で固定する(「複数のAIエージェントで調査を並列化する実践パターン」
  • コード変更は直列にする:影響範囲が重なるファイルを並列で書き換えない。並列にしたいなら、最初に影響範囲を調査エージェントで確定させ、メインが分配する
  • gitを最後の防波堤にする:意図しない上書きはgit diffでメインが必ず読む。/rewindは会話ロールバックでgitの代わりにはならない(公式のbest practicesも明記)

メインセッションがやるべきこと

情報共有のハブはあくまでメインセッションです。役割を整理すると次のとおりです。

役割やること
司令塔どのサブエージェントに何を任せるか決める
翻訳者前段の成果物を要約方針付きで次段に渡す
判定者「確定/要検証」の境界を引く
検収者サブエージェントの結果を採用するか差し戻すか決める
履歴管理NOTES/CLAUDE.mdの更新を最終確認する

「全部AIに任せる」と必ずこの5役のどれかが抜けます。とくに翻訳者と判定者は人間(またはメインセッションを操作する人)が持つのが原則です。

共有コンテキストのレビューゲート

引き継ぎファイルが増えてくると、内容そのものが古くなる・矛盾する問題が出ます。次のタイミングでメインが必ず読み直します。

  • 段の切り替わり(調査→計画、計画→実装、実装→レビュー)
  • セッションをまたぐ前(/clearclaude --resumeの直前)
  • 1日の終わり(翌日に持ち越すならNOTES/HANDOFF.mdに集約する)

このゲートを置かないと、3日後に「NOTES/PLAN.mdに書いた前提がもう違う」状態になります。コンテキスト全体の設計は「Claude Codeに必要な情報だけ渡すコンテキスト設計」、長いセッションでの整理は「Claude Codeで長い会話や大きなリポジトリを扱うコンテキスト管理術」にまとめています。

失敗時の戻し方

情報共有がうまくいかなかったとき、戻し方は失敗の起き方で変わります。

  • 引き継ぎファイルが浅い/間違っている:該当のNOTES/を破棄して、調査段から作り直す。実装まで進んでいたらgit restoreまたはgit reset --softで差し戻す
  • 後段が前段の確定事項を書き換えた:差分をgit diff NOTES/で確認し、確定セクションだけ前のバージョンに戻す
  • 複数エージェントが同じファイルを矛盾する方向に変えた:両方破棄し、メインが「触る順番」を決め直して直列でやり直す

/rewindは会話履歴を戻すだけで、ファイルやgitの状態は戻りません。情報共有が崩れたら、必ずgit側で復旧します。

チェックリスト

  • エージェント間で渡す情報はNOTES/配下のMarkdownに固定している
  • 引き継ぎファイルに「確定/要検証/次段への入力」の3節を立てている
  • サブエージェントは親のMCPツール定義などを継承する前提でツールを絞っている
  • 秘密情報・生ログ全文・未言語化のニュアンスは共有ファイルに書いていない
  • 書く担当は1段に1エージェントに固定している
  • 同一ファイルを並列で書き換えないよう影響範囲を先に確定している
  • 段の切り替わりでメインが必ずNOTES/を読み直している
  • 失敗時は/rewindではなくgitで戻している

次に読むおすすめ記事: