Claude Managed Agentsにセルフホストサンドボックスとセッション中のエージェント設定変更が追加

anthropics/skills

Claude Managed Agentsに、ツール実行を自社インフラで行うセルフホストサンドボックス、セッションを中断せずにツール設定を変更するミッドセッション更新、大容量MCPツール出力の自動ファイルオフロードが追加された。これらはAIエージェントのデプロイメントモデルとランタイム制御の柔軟性を大幅に拡張する変更である。

背景

Managed Agentsはこれまで、ツール実行をAnthropicのクラウドコンテナ上でのみ行うcloudタイプの環境のみをサポートしていた。しかしエンタープライズ用途では、ファイルシステムの内容やネットワークエグレスを自社の境界内に留めたい、あるいは既存のVPCやコンテナ基盤を活用したいというニーズがある。今回の変更以前はoverview.mdの注意書きに「Cloud environments only」と明記されており、セルフホスト実行は不可能だった。

またセッション中のエージェント動作を変更する手段がエージェントオブジェクト自体の更新に限られており、一つのセッションのみ挙動を変えたい場合にも新バージョンが生成されてしまうという制約があった。

技術的な変更

セルフホストサンドボックス

エージェントループはAnthropicのオーケストレーション層に残しつつ、ツール実行だけを自社コンテナに移すアーキテクチャがconfig: {type: "self_hosted"}として実現された。接続モデルはアウトバウンドポーリングのみであり、Anthropicからワーカーホストへのインバウンド接続は発生しない。

セットアップの流れは以下の通りである:

  1. config: {type: "self_hosted"}で環境を作成しenv_...を取得
  2. Console上の環境ページで環境キーsk-ant-oat01-...形式)を生成しANTHROPIC_ENVIRONMENT_KEYとして設定
  3. EnvironmentWorker.run()またはCLIのant beta:worker pollでワーカーを起動
  4. セッション作成時は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向けのWorkPollerwork.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()

EnvironmentWorkerclient.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制御は利用者側の責任)。リソースマウント(filegithub_repository)やメモリストアの挙動も異なる点がmanaged-agents-self-hosted-sandboxes.mdに明記されている。

ミッドセッション エージェント設定更新

既存のPOST /v1/sessions/{id}(UpdateSession)エンドポイントを使い、セッションがidle状態のときagent.toolsagent.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_idlesession.status_running遷移時にリトライされる。

設計判断

エージェントループとツール実行の分離がセルフホストの核心的な設計である。オーケストレーション層をAnthropicが保持したまま実行環境だけを利用者に委譲することで、Anthropicはプロンプトキャッシュ・コンテキスト圧縮・イベントストリームといった付加価値を継続提供しつつ、利用者はデータの境界をコントロールできる。

アウトバウンドポーリングの採用は、利用者のファイアウォール変更やインバウンドポート開放を不要にする実用的な選択である。一方で常時稼働ループ(.run())と単発処理(.run_one())の両方を提供することで、常駐プロセスとWebhookドリブンなサーバーレス実行の双方に対応している。

ミッドセッション更新を「新しいAPIエンドポイントの追加」ではなく「既存UpdateSessionの拡張」として実装した点も注目される。新しい設定キーを追加するのではなく、既存のsessions.update()の対象フィールドを広げるだけで済んでおり、APIサーフェスを増やさずに機能を追加している。完全置換セマンティクスの採用は部分更新より実装が単純であるが、既存ツールリストへの追記には読み取り→変更→書き戻しが必要になるというトレードオフを伴う。

まとめ

今回の変更はManaged Agentsの実行モデルを「Anthropicが全て管理するcloudモード」から「ツール実行基盤を自社に持てるself_hostedモード」へと拡張し、セキュリティポリシーやコンプライアンス要件の厳しい環境への適用を可能にした。セッションローカルな設定変更・大容量出力の自動処理・Vault認証エラーの非ブロッキング化を組み合わせることで、実運用における摩擦が低減されている。

記事メタデータ

Generated by:
Claude Sonnet 4.6 for DiffDaily
LLM Trace:
6c6daf34

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

リード文(総論)、背景・技術詳細(各論)、まとめ(結論)の3部構成が明確に適用されており、設計判断セクションも含まれているため模範的です。

カスタムMarkdown構文 ✓ PASS

シンタックスハイライト・GitHubリンク記法の正確性

ファイル名付きシンタックスハイライト(`python:worker_example.py`)とPR番号のリンク記法が正しく使用されています。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

「オーケストレーション層」「アウトバウンドポーリング」「VPC」といった専門用語が適切に使用されており、対象読者であるエンジニアに適した技術レベルです。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各セクションとパラグラフが総論→各論の構成を保ち、多くの段落がトピックセンテンスで始まるため、非常に高い可読性を確保しています。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事内で引用されているコードブロック(`worker_example.py`, `session_update.py`)は、提供されたDiff内のコードと正確に一致しています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

「self-hosted sandboxes」「mid-session agent updates」「full-replacement semantics」など、PR Descriptionで使われている技術用語を正確に反映しています。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

「エージェントループとツール実行の分離」「アウトバウンドポーリングのみ」といった技術的な説明は、PR Descriptionの内容と完全に一致しており、正確です。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

記事内のすべての主張はPR DescriptionやDiffの内容に基づいており、根拠のない推測や創作(ハルシネーション)は検出されませんでした。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR番号「#1164」、バージョン「agent_toolset_20260401」、閾値「100Kトークン」など、すべての数値と固有名詞がPR情報と一致しています。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事のタイトルはPRの主題(CMAのアップデート)を的確に捉え、主要な変更点(セルフホストサンドボックス、ミッドセッション更新)を具体的に示しており、非常に分かりやすいです。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

PR情報に記載のないバージョンのサポート状況やリリース日程などの外部知識は含まれておらず、事実に忠実です。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

PRで導入された新機能について記述しており、時間表現の歪曲や誤解を招く表現はありません。