Anthropic Effective Harnesses for Long-Running Agents
AIエージェントが数時間から数日かかる複雑なプロジェクトを任される中、Anthropicは、複数の個別のコンテキストウィンドウにわたってエージェントが一貫した進捗を維持できるようにするため、2つの要素からなるソリューション(Initializer AgentとCoding Agent)を導入しました。
このハーネスは、エージェントが以前の作業の記憶を持たないセッションで作業しなければならないという中核的な課題に対処するものであり、単純なコンテキスト圧縮では大規模なソフトウェア開発には対応できません。
長時間実行エージェントの課題
単純なコンテキスト圧縮では、AIエージェントが複数のコンテキストウィンドウにわたって本番品質のプロジェクトを完了できるようにするには不十分です。Claude Agent SDKは、Opus 4.5のような高度なモデルを使用した場合でも、高レベルのプロンプトのみが与えられた場合に、2つの主要な障害モードを示します。
エージェントの障害モード1:過剰なスコープ設定
エージェントは、一度にあまりに多くの作業を完了しようとし、一発で実装することを目指す傾向があります。これにより、モデルが実装中にコンテキストを使い果たし、次のセッションが半分だけ実装され、文書化されていない機能から始まることがよくあります。後続のエージェントは、以前の状態を推測し、基本的な機能を復元しようとかなりの時間を費やさなければなりません。
エージェントの障害モード2:時期尚早な完了
プロジェクトの後半では、エージェントのインスタンスが既存の進捗を確認し、重要な機能が未完了のままでも、プロジェクト全体が完了したと時期尚早に宣言する可能性があります。
これらの障害には、構造化されたアプローチが必要です。まず、必要なすべての機能のための基盤環境を確立し、次に、各エージェントに、各セッションの終了時にクリーンでマージ可能な状態を維持しながら、小さな増分的な進捗を行うように促します。
2つの要素からなるエージェントソリューション
Anthropicは、専門化された2つの部分からなるハーネス構造を実装することで、これらの問題に対処しました。
Initializer Agent
最初のエージェントセッションは、専門化されたプロンプトを使用して初期環境を設定します。この設定には、init.shスクリプトの作成、エージェントのアクションを記録するためのclaude-progress.txtファイルの生成、追加されたファイルを文書化する初期gitコミットの実行が含まれます。この基盤により、エージェントがステップバイステップで機能ごとに作業するように設定されます。
Coding Agent
後続のすべてのセッションはCoding Agentが処理し、目標に向けて増分的な進捗を行うタスクが与えられます。重要なのは、このエージェントは各セッション後に環境をクリーンな状態に保たなければならないことです。「クリーンな状態」とは、コードが秩序立てられ、十分に文書化され、大きなバグがないことを意味し、メインブランチへのマージに適した状態です。
環境管理とワークフローの詳細
構造を強化し、エージェントが大規模で管理されていない変更を行うのを防ぐために、特定のプロンプトとアーティファクト管理技術が採用されました。
機能要件の定義
アプリを一発で実装しようとする傾向に対抗するため、Initializer Agentは、ユーザーの初期プロンプトを拡張する包括的な機能要件ファイルを作成するように促されます。claude.aiクローンの例では、これにより200以上の機能が生成され、すべて最初は「失敗」とマークされました。Coding Agentは、JSON形式を使用してpassesフィールドのステータスのみを変更することでこの機能ファイルを編集するように指示され、不適切な上書きのリスクを最小限に抑えます。
増分的な進捗の確保
初期環境がスキャフォールディングされた後、Coding Agentは一度に1つの機能のみに取り組むように指示されます。クリーンな状態を維持するために、モデルは説明的なコミットメッセージを使用してgitに進捗をコミットし、進捗ファイルに進捗の要約を書くように促されます。このgitの使用により、モデルは悪いコード変更を元に戻し、動作状態を回復できます。
堅牢なテストの実装
観察された主要な障害モードは、適切なエンドツーエンドのテストなしに機能を完了としてマークすることでした。モデルは単体テストを実行できますが、コードだけからは明らかではないバグを認識できないことがよくあります。ClaudeにPuppeteer MCPサーバーなどのテストツールが提供されたとき、パフォーマンスは劇的に向上し、エージェントが人間のユーザーと同じように機能をエンドツーエンドでテストできるようになりました。これにより、エージェントはそれ以外では見えないバグを特定して修正できるようになりました。
エージェントセッションの運用化
すべてのコーディングエージェントが安定した情報を得た状態で開始できるようにするために、各セッションの開始時に標準化された一連の手順が実行されます。
- ディレクトリ確認:
pwdを実行して作業ディレクトリを確認します。 - 状態の確認: gitログと進捗ファイルを読み、最近の作業を迅速に理解します。
- タスクの選択: 機能リストファイルを読み、まだ完了していない最優先の機能を選択します。
この起動ルーチンはトークンを節約し、エージェントが新しい機能の実装を試みる前に、まずアプリケーションの状態を確認(ローカル開発サーバーを実行し、基本的なエンドツーエンドテストを実施)することを保証し、既存のバグの悪化を防ぎます。
今後の研究方向性
この研究は、長時間実行エージェントハーネスに対する堅牢なソリューションのセットを提供しますが、いくつかの未解決の疑問が残っています。単一の汎用コーディングエージェントがコンテキスト全体で最適に機能するのか、それともマルチエージェントアーキテクチャがより良いパフォーマンスをもたらすのかは、現時点では不明です。専用のテストエージェントやコードクリーンアップエージェントなどの専門化されたエージェントは、ソフトウェア開発ライフサイクル全体にわたってサブタスクのパフォーマンスを向上させると仮定されています。さらに、現在のデモンストレーションはフルスタックのWebアプリ開発に最適化されており、今後の作業は、科学研究や金融モデリングなどの他の長時間実行エージェントタスクにこれらの教訓を一般化することに焦点を当てます。
エージェントセッションの運用化
すべてのコーディングエージェントが安定した情報を得た状態で開始できるようにするために、各セッションの開始時に標準化された一連の手順が実行されます。
- ディレクトリ確認:
pwdを実行して作業ディレクトリを確認します。 - 状態の確認: gitログと進捗ファイルを読み、最近の作業を迅速に理解します。
- タスクの選択: 機能リストファイルを読み、まだ完了していない最優先の機能を選択します。
この起動ルーチンはトークンを節約し、エージェントが新しい機能の実装を試みる前に、まずアプリケーションの状態を確認する(ローカル開発サーバーを実行し、基本的なエンドツーエンドテストを実行する)ことを保証し、既存のバグの悪化を防ぎます。
将来の研究方向
この研究は、長時間実行エージェントハーネスに対する堅牢なソリューションのセットを提供しますが、いくつかの未解決の疑問が残っています。単一の汎用コーディングエージェントがコンテキストを問わず最適に機能するのか、それともマルチエージェントアーキテクチャの方が優れたパフォーマンスをもたらすのかは、現時点では不明です。専用のテスティングエージェントやコードクリーンアップエージェントなどの専門化されたエージェントは、ソフトウェア開発ライフサイクル全体にわたってサブタスクのパフォーマンスを向上させると仮定されています。さらに、現在のデモンストレーションはフルスタックのWebアプリ開発に最適化されており、今後の作業は、科学研究や金融モデリングなど、他の長時間実行されるエージェントタスクにこれらの教訓を一般化することに焦点を当てます。
エージェントセッションの運用化
すべてのコーディングエージェントが安定した情報を得た状態で開始できるようにするために、各セッションの開始時に標準化された一連の手順が実行されます。
- ディレクトリの確認:
pwdを実行して作業ディレクトリを確認します。 - 状態の確認: gitログと進捗ファイルを読み、最近の作業を迅速に把握します。
- タスクの選択: 機能リストファイルを読み、まだ完了していない最優先の機能を選択します。
この起動ルーチンはトークンを節約し、エージェントが新しい機能の実装を試みる前に、まずアプリケーションの状態(ローカル開発サーバーの実行と基本的なエンドツーエンドテストの実施)を検証することを保証し、既存のバグの悪化を防ぎます。
今後の研究方向
この研究は、長時間実行エージェントハーネスに対する堅牢なソリューションのセットを提供しますが、いくつかの未解決の疑問が残っています。単一の汎用コーディングエージェントがコンテキストをまたいで最適に機能するのか、それともマルチエージェントアーキテクチャがより良いパフォーマンスをもたらすのかは、現時点では不明です。専用のテスティングエージェントやコードクリーンアップエージェントなどの専門化されたエージェントは、ソフトウェア開発ライフサイクル全体のサブタスクパフォーマンスを向上させると仮定されています。さらに、現在のデモンストレーションはフルスタックのWebアプリ開発に最適化されており、今後の作業は、科学研究や金融モデリングなど、他の長時間実行エージェントタスクへのこれらの教訓の一般化に焦点を当てます。