デフォルトでは、Managed AgentsはAnthropic管理のクラウドサンドボックス内でツールとコードを実行します。セルフホスト型サンドボックスでは、オーケストレーションはAnthropic側に残しつつ、ツール実行をユーザーが管理するインフラストラクチャに移すため、エージェントのコード、ファイルシステム、ネットワーク送信がユーザーの環境から外に出ることはありません。
ツール実行はユーザーのホスト上にとどまります。エージェントが読み書きするファイルシステム、起動するプロセス、到達可能なネットワークはすべてユーザーの管理下にあります。ツールの入力と出力は引き続きAnthropicのコントロールプレーン(Claudeが実行される場所)に送信されるため、モデルは結果を確認し、次に何をすべきかを判断できます。データフローの境界の詳細については、セキュリティモデルを参照してください。
セルフホスト型サンドボックスは、Claude Opus 4.8を含む、Managed Agentsで利用可能なすべてのClaudeモデルをサポートしています。モデルは環境ではなくエージェントで設定します。
| クラウド環境 | セルフホスト型サンドボックス | |
|---|---|---|
| ツールの実行場所 | Anthropic管理のサンドボックス | ユーザーのインフラストラクチャ |
| ネットワーク到達範囲 | Anthropicの送信制御 | ユーザーのネットワークポリシー |
| ファイルとGitHubリポジトリのマウント | Anthropicが管理 | ユーザーが管理 |
| ライフサイクル | Anthropicが管理 | ユーザーが管理 |
セルフホスティングは、エージェントがネットワーク境界外に出せないデータを操作する必要がある場合、パブリックにルーティングできない内部サービスにアクセスする必要がある場合、または組織独自のコンプライアンスおよび監査管理下で実行する必要がある場合に適しています。
Zero Data RetentionおよびHIPAA BAAの適格性については、APIとデータ保持を参照してください。
セルフホスティングはエージェントのコードがどこで実行されるかを制御します。MCPトンネルはAnthropicがユーザーのネットワーク内のMCPサーバーにどのように到達するかを制御します。これらは独立しています。Anthropicのクラウドサンドボックスで実行されているセッションでもトンネル経由でプライベートMCPサーバーに到達でき、セルフホスト型セッションでもトンネル経由またはパブリックのMCPサーバーのいずれかを使用できます。実行とツールアクセスの両方をユーザーの境界内にとどめたい場合は、両方を使用してください。
このガイドでは、任意の汎用サンドボックスプラットフォームでワーカーを構築する方法を説明します。Cloudflare、Daytona、Modal、Vercel向けのプラットフォーム固有のガイドも別途用意されています。
環境ワーカーは、ユーザー自身のインフラストラクチャ上で実行するプロセスです。Anthropicからツール実行リクエストを受信し、ローカルで実行します。self_hosted環境はワークキューとして機能します。セッションがこの環境に割り当てられると、Anthropicはそのセッションをワークアイテムとしてキューに追加します。ワーカーはそのキューからワークアイテムを取得し、それぞれに対して実行コンテキストを生成し、エージェントのスキル(エージェントにドメイン固有の専門知識を与える、再利用可能なファイルシステムベースのリソース)をダウンロードし、ツール呼び出しを実行して、結果を返送します。
ワークアイテムは環境のキューをポーリングすることで取得されます。継続的にポーリングする常時稼働ワーカー、またはsession.status_run_startedで起動してポーリングを開始するWebhookトリガー型ハンドラーのいずれかを使用します。
CLIとSDKの両方に、事前構築済みのワーカーが同梱されています。ant CLIは常時稼働パターンのみをサポートし、SDKは常時稼働とWebhookトリガー型の両方をサポートします。どちらも設定可能です。CLIフラグについてはリファレンスのセルフホスト型ワーカーを、SDKオプションについてはこのページのSDKヘルパーを参照してください。より細かい制御が必要な場合は、Environments Workエンドポイントを直接呼び出して独自のワーカーを実装してください。Claude Platform on AWSでは、GET /v1/environments/{id}/workリストエンドポイントとそのSDK相当機能は現在利用できません。その他のワークエンドポイント(poll、ack、heartbeat、stop、結果の送信、アイテムごとのget、stats)は通常どおり動作します。
/workspace: ツール実行とスキルダウンロードのシステムデフォルト作業ディレクトリです。CLIの--workdirフラグはデフォルトでカレントディレクトリになります。システムデフォルトに合わせるには--workdir /workspaceを渡してください。スキルは<workdir>/skills/<name>/にダウンロードされます。別の作業ディレクトリを使用する場合は、Claudeがスキルファイルを見つけられるようにエージェントのシステムプロンプトを更新してください。/mnt/session/outputs: ワーカーハーネスは、最終成果物をここに書き込むようClaudeに指示します。サンドボックスモードでは、セッション終了後に出力を取得できるように、このパスにホストディレクトリをマウントしてください。インプロセスモードでは、ワーカーのファイルツールは代わりに作業ディレクトリ配下に書き込むため、このパスは適用されません。以下が必要です。
/bin/bashがその正確なパスに存在すること)。TypeScript SDKは追加でunzip、tar、Node.js 22以降が必要です。Python SDKはアーカイブ展開に標準ライブラリを使用するため、追加のバイナリ要件はありません。これらの依存関係は固定パスで解決され、PATHのオーバーライドは考慮されません。ant CLIまたはAnthropic SDK**(Python、TypeScript、またはGo)。Claude Platform on AWSでは、ワーカーは環境キーではなく、AWS IAM(SigV4)またはAWSコンソールで生成されたAPIキーで認証します。ワーカーが実行されるIAMプリンシパルにAnthropicSelfHostedEnvironmentAccessマネージドポリシーをアタッチしてください。Claude Consoleで生成された環境キーは、Claude Platform on AWSエンドポイントでは機能しません。
スキルには、エージェントが直接実行する可能性のある実行可能ファイルが含まれる場合があります。CLIおよびSDKワーカーは、ダウンロードしたスキルファイルをサンドボックス内で自動的に実行可能としてマークします。スキルのダウンロードを手動で実装する場合は、実行権限の設定はユーザーの責任となります。
最もシンプルなセットアップには常時稼働を選択してください。長時間実行されるプロセスがキューを継続的にポーリングし、アウトバウンドHTTPSのみが必要です。アイドル状態のポーラーを実行したくない場合はWebhookトリガー型を選択してください。これにはAnthropicが到達可能なWebhookエンドポイントが必要です(エンドポイントのセットアップと署名検証についてはWebhookを参照してください)。
SDKは、異なる制御レベルの3つのヘルパーを提供します。EnvironmentWorkerはほとんどのユースケースをカバーします。セッションごとに独自のプロセスを起動する必要がある場合や、すでに取得済みのセッションに対してツールを実行する必要がある場合は、より低レベルのヘルパーを使用してください。
EnvironmentWorker: すぐに使えるワーカーです。ポーリング、セットアップ、実行をエンドツーエンドで処理します。
.run():無期限に実行され、セッションが到着するたびに処理します。SIGTERMで正常に終了します。.handle_item():保留中のセッションを1つ取得し、処理して終了します。work.poller(): ユーザーに代わってワークキューをポーリングし、取得した各セッションを渡します。セッションごとに何を行うかを自分で決定したい場合(たとえば、インプロセスでツールを実行するのではなくサンドボックスを起動する場合)に使用します。
drain:新しいワークを待つのではなく、キューが空になったらポーリングを停止するかどうか。block_ms:ワークが到着するまで待機する時間(ミリ秒単位)。1から999の間である必要があります(ポーリングごとの待機時間。ヘルパーは自動的に再ポーリングします)。ノンブロッキングチェックにはnull(PythonではNone、Goではparam.Null[int64]())を渡します。パラメータを省略すると、デフォルトの999ミリ秒のロングポーリングが使用されます。セッションごとに独自のプロセスを起動したい場合(たとえば、取得した各セッションに対してサンドボックスを起動する場合)は、ワークポーラーを直接使用します。
**AgentToolContextはツール呼び出しの実行コンテキストです。作業ディレクトリとパスポリシーを定義し、コンテキストマネージャーとして使用する場合はオプションでセッションのスキルをダウンロードします。beta_agent_toolset_20260401(env)**はAgentToolContextを受け取り、標準のツール実装(bash、read、write、edit、glob、grep)を返します。
EnvironmentWorkerを使用する場合: 両方とも自動的に管理されます。ツールリストをカスタマイズするにはtoolsファクトリを渡します。
EnvironmentWorker(client, ..., tools=lambda env: [beta_bash_tool(env), my_custom_tool])work.poller()とtool_runner()を使用する場合: client.beta.sessions.events.tool_runner()にtoolsとしてツールリストを渡します。そのリストを構築するには、AgentToolContextを自分でセットアップし、beta_agent_toolset_20260401(env)を呼び出します。
別のシェルから、(環境キーではなく)Claude APIキーを使用して、workers_pollingが1以上であることを確認します。
ant beta:environments:work stats --environment-id "$ANTHROPIC_ENVIRONMENT_ID"workers_pollingが0のままの場合、ワーカーがキューに到達していません。ワーカーホストでANTHROPIC_ENVIRONMENT_KEYとANTHROPIC_ENVIRONMENT_IDが設定されていることを確認してください。完全な統計レスポンスと他の言語の例については、キューの深さを読み取るを参照してください。
ワーカーが実行されたら、その環境をターゲットとするセッションを作成します。セッションは環境のワークキューに入り、ワーカーが取得するまでそこで待機します。ワーカーが接続されていない場合、セッションは失敗するのではなくキューに残ります。
Anthropicは、セルフホスト型サンドボックスにファイルやGitHubリポジトリをマウントしません。セッション固有のファイルを利用可能にするには、セッションのmetadataフィールドにファイル参照(S3パスやコミットSHAなど)を渡します。起動スクリプトまたは--on-workハンドラーは、取得したワークアイテムからそのメタデータを(Environments Workエンドポイント経由で)読み取り、ツール実行が開始される前にファイルを作業ディレクトリにステージングします。
メモリは現在、セルフホスト型サンドボックスではサポートされていません。
CLIフラグの完全なリストについてはリファレンスのセルフホスト型ワーカーを、SDKヘルパーオプションについてはSDKヘルパーを参照してください。
これらの呼び出しは、Claude APIキーで認証された監視または運用ツールから実行し、ワーカーフリートを監視および管理します。取得とキープアライブのループはワーカーヘルパー内で処理されるため、これらのエンドポイントを直接呼び出す必要はありません。
これらのエンドポイントは、環境キーではなく組織のAPIキーで認証します。ワーカーホストの外部から呼び出してください。ワーカーホストでANTHROPIC_API_KEYを設定すると、組織スコープの認証情報がエージェントのツール呼び出しに公開されてしまいます。
work.statsは環境のキュー状態を返します。
depthは、取得待ちのアイテム数です。この値に基づいてワーカーフリートをスケーリングしたり、バックログに対してアラートを設定したりします。pendingは、ワーカーが取得して現在処理中のアイテム数です。oldest_queued_atは、キュー内の最も古いアイテムのタイムスタンプです。キューが空の場合はnullです。workers_pollingは、過去30秒間にポーリングしたワーカーの数です。これを稼働状態のアラートに使用します。{
"type": "work_queue_stats",
"depth": 0,
"pending": 0,
"oldest_queued_at": null,
"workers_polling": 0
}work.stopを使用して、特定のセッションを処理しているワーカーに正常なシャットダウンを要求します。ワーカーは処理中のツール呼び出しを完了し、最終ステータスを送信して、セッションを解放します。現在のツール呼び出しの完了を待たずに即座に中断するには、リクエストボディにforce: trueを渡します。
これらの呼び出しはワーカーホストではなく運用ツールから実行されるため、ANTHROPIC_WORK_IDは自動的には設定されません。以下の例を実行する前に、対象のワークアイテムのIDに設定してください。
Was this page helpful?
セルフホスト型環境を作成する
Consoleで:Workspace > Environments > New > Self-hosted
またはAPI経由で:
client = anthropic.Anthropic()
environment = client.beta.environments.create(
name="self-hosted", config={"type": "self_hosted"}
)
print(environment.id)環境キーを生成する
Consoleで環境を開き、Generate environment keyをクリックします。環境をConsoleとAPIのどちらで作成したかにかかわらず、キーの生成はConsoleでのみ行えます。次に、ワーカーホストで環境IDとキーをエクスポートします。
export ANTHROPIC_ENVIRONMENT_KEY="sk-ant-oat01-..."
export ANTHROPIC_ENVIRONMENT_ID="env_..."reclaim_older_than_ms:応答しなくなったワーカーにリースされているワークアイテムを再取得します。auto_stop:イテレータが終了した後にワークアイテムに停止シグナルを送信するかどうか。Goのポーラーにはオプトアウトがなく、常に停止シグナルを送信するため、デタッチするのではなく、セッションが完了するまでループ本体でブロックしてください。client.beta.sessions.events.tool_runner(): セッションIDとツールリストを指定して、単一セッションのツール呼び出しを実行します。すでにワークを取得済みで、実行レイヤーのみが必要な場合に使用します。import asyncio
import os
from anthropic import AsyncAnthropic
from anthropic.types.beta.environments import BetaSelfHostedWork
async def launch_container(work: BetaSelfHostedWork) -> None:
# 独自のセッションごとのサンドボックスランチャーに置き換えてください。
# 起動したサンドボックスには ANTHROPIC_ENVIRONMENT_KEY を渡し、
# APIキーは決して渡さないでください。
print(f"claimed session {work.data.id}")
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:
async for work in client.beta.environments.work.poller(
environment_id=environment_id,
environment_key=environment_key,
auto_stop=False, # the launched sandbox owns the stop call
):
await launch_container(work)
asyncio.run(main())from anthropic.lib.tools.agent_toolset import (
AgentToolContext,
beta_agent_toolset_20260401,
)
async with AgentToolContext(
workdir="/workspace", client=client, session_id=work.data.id
) as env:
# skills downloaded to /workspace/skills/<name>/
tools = beta_agent_toolset_20260401(env)session = client.beta.sessions.create(
agent=agent.id,
environment_id=environment.id,
metadata={"input_file": "s3://my-bucket/data.csv"},
)import os
import anthropic
client = anthropic.Anthropic()
stats = client.beta.environments.work.stats(os.environ["ANTHROPIC_ENVIRONMENT_ID"])
print(f"depth={stats.depth} pending={stats.pending}")import os
import anthropic
client = anthropic.Anthropic()
work = client.beta.environments.work.stop(
os.environ["ANTHROPIC_WORK_ID"],
environment_id=os.environ["ANTHROPIC_ENVIRONMENT_ID"],
)
print(work.state)