この記事は、Anthropic が長期にわたるエージェント作業のためのホスト型サービスである Claude Managed Agents をどのように設計したかを説明している。出発点は、エージェントハーネスには Claude が単独ではできないことについての前提が組み込まれており、その前提はモデルの改善とともに古くなるという認識である。記事が挙げる例は、あるモデルの コンテキスト不安 に対処するためにハーネスへ追加したコンテキストリセットが、後のモデルでは無用の重荷になったというものだ。Anthropic は 1 つのハーネスに固定するのではなく、「まだ考えられていないプログラム」のためのシステムを構築することを目指した。その際に借用したのは、オペレーティングシステムがハードウェアを、ハードウェアよりも長く使い続けられるほど汎用的な抽象へと仮想化したときのアプローチである。
記事が説明する設計、すなわち Brain/Hands/Session 分割 は、エージェントをセッション(起きたことすべてを記録する追記専用ログ)、ハーネス(Claude を呼び出し、そのツール呼び出しを振り分けるループ)、サンドボックス(Claude がコードを実行しファイルを編集する場所)に仮想化し、それぞれを他の要素についてほとんど前提を置かないインターフェースの背後に置く。記事は最後に Managed Agents を メタハーネス と呼んでいる。Claude を取り巻くインターフェースについては明確な方針を持つが、その上で動く特定のハーネスについては方針を持たない、という意味である。
要点
- Anthropic は当初、セッション、ハーネス、サンドボックスを 1 つのコンテナで実行していたため、コンテナは「ペット」になっていた。コンテナが故障するとセッションが失われ、デバッグするには、しばしばユーザーデータを保持しているコンテナでシェルを開く必要があった。
- ハーネスをコンテナの外に移すことで、コンテナは「家畜(cattle)」になった。ハーネスは
execute(name, input) → stringを通じて他のツールと同じようにコンテナを呼び出し、停止したコンテナはツール呼び出しのエラーとして Claude に返され、新しいコンテナはprovision({resources})で用意できる。 - ハーネスもステートレスである。セッションログはハーネスの外にあるため、故障したハーネスは
wake(sessionId)で再起動し、getSession(id)でログを読み戻して最後のイベントから再開でき、進行に合わせてemitEvent(id, event)でセッションに書き込む。 - 結合された設計では、Claude が生成したコードが認証情報と同じ場所で実行されていたため、プロンプトインジェクションは Claude に自身の環境を読ませるよう仕向けるだけでよかった。記事の構造的な対策は、トークンをサンドボックスから決して到達できないようにすることである。Git トークンはサンドボックスの初期化時にリポジトリをクローンするために使われてローカルのリモートに組み込まれ、MCP ツールは保管庫(vault)から OAuth 認証情報を取得するプロキシを通じて呼び出される。そのため、ハーネスがいかなる認証情報も知ることはない。
- セッションは Claude のコンテキストウィンドウではない。コンパクション、メモリファイル、コンテキストの削減は、いずれも何を残すかについて不可逆な判断を下す。これに対してセッションはすべてのイベントを永続的に保存し、ハーネスが
getEvents()でその位置指定のスライスを選べるようにして、コンテキストエンジニアリングはハーネスに委ねる。 - セッションが必要とするときにだけコンテナを用意することで、保留中のイベントをログから取り出した時点ですぐに推論を開始できる。Anthropic は、これにより最初のトークンまでの時間(time-to-first-token)が p50 で約 60%、p95 で 90% 以上短縮されたと報告している。
- 同じ分離によって、ハーネスはネットワークピアリングなしで顧客自身の VPC 内のリソースに到達でき、多数のステートレスな頭脳を起動でき、1 つの頭脳が多数の手を使えるようになる。記事は、ハーネスはサンドボックスがコンテナなのか、スマートフォンなのか、ポケモンのエミュレーターなのかを知らないこと、そして頭脳同士が手を受け渡せることを指摘している。
- Anthropic は、単一のコンテナから始めたのは以前のモデルが複数の実行環境について推論できなかったからであり、知能がスケールするにつれて単一のコンテナが制約になったと書いている。
背景
これは Anthropic が自社製品のアーキテクチャについて自ら説明したものであり、性能の数値はそのサービスについてのものである。記事は、効果的なエージェントの構築や長時間稼働する作業のためのハーネス設計を扱う Anthropic Engineering Blog の一連の記事の中に自らを位置づけ、その中心的な賭けを明言している。将来のモデルが必要とするコンテキストエンジニアリングは予測できないため、インターフェースが保証するのはセッションが永続的であり、問い合わせに利用できることだけであり、コンテキスト管理はその上で動くハーネスに押し出す、というものである。記事は、このシステムが受け入れられる汎用ハーネスの例として Claude Code を挙げ、タスク固有のハーネスと並べている。