Claude Managed Agentsにセルフホストサンドボックスとセッション中のエージェント設定変更が追加
Claude Managed Agentsに、ツール実行を自社インフラで行うセルフホストサンドボックス、セッションを中断せずにツール設定を変更するミッドセッション更新、大容量MCPツール出力の自動ファイルオフロードが追加された。これらはAIエージェントのデプロイメントモデルとランタイム制御の柔軟性を大幅に拡張する変更である。
背景
Managed Agentsはこれまで、ツール実行をAnthropicのクラウドコンテナ上でのみ行うcloudタイプの環境のみをサポートしていた。しかしエンタープライズ用途では、ファイルシステムの内容やネットワークエグレスを自社の境界内に留めたい、あるいは既存のVPCやコンテナ基盤を活用したいというニーズがある。今回の変更以前はoverview.mdの注意書きに「Cloud environments only」と明記されており、セルフホスト実行は不可能だった。
またセッション中のエージェント動作を変更する手段がエージェントオブジェクト自体の更新に限られており、一つのセッションのみ挙動を変えたい場合にも新バージョンが生成されてしまうという制約があった。
技術的な変更
セルフホストサンドボックス
エージェントループはAnthropicのオーケストレーション層に残しつつ、ツール実行だけを自社コンテナに移すアーキテクチャがconfig: {type: "self_hosted"}として実現された。接続モデルはアウトバウンドポーリングのみであり、Anthropicからワーカーホストへのインバウンド接続は発生しない。
セットアップの流れは以下の通りである:
-
config: {type: "self_hosted"}で環境を作成しenv_...を取得 - Console上の環境ページで環境キー(
sk-ant-oat01-...形式)を生成しANTHROPIC_ENVIRONMENT_KEYとして設定 -
EnvironmentWorker.run()またはCLIのant beta:worker pollでワーカーを起動 - セッション作成時は
cloud環境と同様にenvironment_id=env_...を指定するだけ
新たに追加されたshared/managed-agents-self-hosted-sandboxes.mdには、SDK経由の常時稼働ループとCLI経由の使用方法が記載されている。Python/TypeScript向けのEnvironmentWorkerクラスはanthropic.lib.environments / @anthropic-ai/sdk/helpers/beta/environmentsから、Go向けのWorkPollerはwork.poller()で利用できる(ただしGoにはauto_stopのオプトアウトなし)。
import asyncio
import os
from anthropic import AsyncAnthropic
from anthropic.lib.environments import EnvironmentWorker
async def main() -> None:
environment_key = os.environ["ANTHROPIC_ENVIRONMENT_KEY"]
environment_id = os.environ["ANTHROPIC_ENVIRONMENT_ID"]
async with AsyncAnthropic(auth_token=environment_key) as client:
await EnvironmentWorker(
client,
environment_id=environment_id,
environment_key=environment_key,
workdir="/workspace",
).run()
EnvironmentWorkerはclient.beta.*配下ではなく独立したクラスとして提供されており、environments.work.poller / stats / stopのみがクライアントメソッドとして存在する点に注意が必要だ。監視用のGET /v1/environments/{id}/work/stats(WorkQueueStats)とPOST /v1/environments/{id}/work/{work_id}/stop(StopWork)はどちらもx-api-key認証を使用し、ワーカーホストの外部から呼び出す制御プレーンAPIとして機能する。
cloudとの差分として、self_hostedではnetworkingブロックとpackagesフィールドは適用されない(egress制御は利用者側の責任)。リソースマウント(file、github_repository)やメモリストアの挙動も異なる点がmanaged-agents-self-hosted-sandboxes.mdに明記されている。
ミッドセッション エージェント設定更新
既存のPOST /v1/sessions/{id}(UpdateSession)エンドポイントを使い、セッションがidle状態のときにagent.tools、agent.mcp_servers(パーミッションポリシーを含む)、vault_idsを変更できるようになった。
client.beta.sessions.update(
session.id,
agent={
"tools": [
{"type": "agent_toolset_20260401"},
{"type": "mcp_toolset", "mcp_server_name": "linear"},
],
"mcp_servers": [{"type": "url", "name": "linear", "url": "https://mcp.linear.app/sse"}],
},
vault_ids=["vlt_..."],
)
この更新はセッションローカルなオーバーライドであり、エージェントオブジェクト自体には変更を加えず、新たなエージェントバージョンも生成しない。配列は完全置換セマンティクスを持つため、ツールを1つ追加したい場合はGETで現状を取得してから変更・POSTする必要がある。managed-agents-core.mdに「Updating the agent configuration mid-session」セクションが追加された。
大容量MCPツール出力とVaultエラーの挙動
managed-agents-tools.mdに2つの挙動が追記された。MCPツールが100Kトークン超の出力を返した場合、出力はサンドボックス内のファイルに自動オフロードされ、エージェントはトランケートされたプレビューとファイルパスを受け取ってreadで全内容を取得できる。設定は不要で自動的に動作する。
またVaultに無効な認証情報が設定されていてもsessions.create()はブロックされなくなった。セッション作成は成功し、MCPの認証失敗はsession.errorイベントで通知される。認証は次のsession.status_idle → session.status_running遷移時にリトライされる。
設計判断
エージェントループとツール実行の分離がセルフホストの核心的な設計である。オーケストレーション層をAnthropicが保持したまま実行環境だけを利用者に委譲することで、Anthropicはプロンプトキャッシュ・コンテキスト圧縮・イベントストリームといった付加価値を継続提供しつつ、利用者はデータの境界をコントロールできる。
アウトバウンドポーリングの採用は、利用者のファイアウォール変更やインバウンドポート開放を不要にする実用的な選択である。一方で常時稼働ループ(.run())と単発処理(.run_one())の両方を提供することで、常駐プロセスとWebhookドリブンなサーバーレス実行の双方に対応している。
ミッドセッション更新を「新しいAPIエンドポイントの追加」ではなく「既存UpdateSessionの拡張」として実装した点も注目される。新しい設定キーを追加するのではなく、既存のsessions.update()の対象フィールドを広げるだけで済んでおり、APIサーフェスを増やさずに機能を追加している。完全置換セマンティクスの採用は部分更新より実装が単純であるが、既存ツールリストへの追記には読み取り→変更→書き戻しが必要になるというトレードオフを伴う。
まとめ
今回の変更はManaged Agentsの実行モデルを「Anthropicが全て管理するcloudモード」から「ツール実行基盤を自社に持てるself_hostedモード」へと拡張し、セキュリティポリシーやコンプライアンス要件の厳しい環境への適用を可能にした。セッションローカルな設定変更・大容量出力の自動処理・Vault認証エラーの非ブロッキング化を組み合わせることで、実運用における摩擦が低減されている。