Secara default, Managed Agents mengeksekusi alat dan kode di dalam sandbox cloud yang dikelola Anthropic. Sandbox yang di-hosting sendiri (self-hosted sandbox) mempertahankan orkestrasi di sisi Anthropic tetapi memindahkan eksekusi alat ke infrastruktur yang Anda kendalikan, sehingga kode agen, filesystem, dan egress jaringan tidak pernah meninggalkan lingkungan Anda.
Eksekusi alat tetap berada di host Anda: filesystem yang dibaca dan ditulis oleh agen, proses yang dijalankannya, dan jaringan yang dapat dijangkaunya semuanya berada di bawah kendali Anda. Input dan output alat tetap mengalir ke control plane Anthropic (tempat Claude berjalan) sehingga model dapat melihat hasil dan menentukan apa yang harus dilakukan selanjutnya. Lihat model keamanan untuk batas aliran data selengkapnya.
Sandbox yang di-hosting sendiri mendukung semua model Claude yang tersedia di Managed Agents, termasuk Claude Opus 4.8. Model dikonfigurasi pada agen, bukan pada lingkungan.
| Lingkungan cloud | Sandbox yang di-hosting sendiri | |
|---|---|---|
| Tempat alat berjalan | Sandbox yang dikelola Anthropic | Infrastruktur Anda |
| Jangkauan jaringan | Kontrol egress Anthropic | Kebijakan jaringan Anda |
| Pemasangan file dan repo GitHub | Dikelola oleh Anthropic | Dikelola oleh Anda |
| Siklus hidup | Dikelola oleh Anthropic | Dikelola oleh Anda |
Hosting sendiri cocok ketika agen perlu beroperasi pada data yang tidak boleh meninggalkan batas jaringan Anda, menjangkau layanan internal yang tidak dapat dirutekan secara publik, atau berjalan di bawah kontrol kepatuhan dan audit organisasi Anda sendiri.
Untuk kelayakan Zero Data Retention dan HIPAA BAA, lihat API dan retensi data.
Hosting sendiri mengontrol di mana kode agen dieksekusi. MCP tunnel mengontrol bagaimana Anthropic menjangkau server MCP di jaringan Anda. Keduanya independen: sesi yang berjalan di sandbox cloud Anthropic tetap dapat menjangkau server MCP privat melalui tunnel, dan sesi yang di-hosting sendiri dapat menggunakan server MCP yang di-tunnel maupun yang publik. Gunakan keduanya ketika Anda ingin eksekusi dan akses alat tetap berada di dalam batas Anda.
Panduan ini menjelaskan cara membangun worker dengan platform sandboxing generik apa pun. Panduan tambahan yang spesifik untuk platform tersedia untuk AWS Lambda MicroVMs, Blaxel, Cloudflare, Daytona, E2B, GKE Agent Sandbox, Modal, Namespace, Superserve, dan Vercel.
"Environment worker" (pekerja lingkungan) adalah proses yang Anda jalankan di infrastruktur Anda sendiri. Proses ini menerima permintaan eksekusi alat dari Anthropic dan menjalankannya secara lokal. Lingkungan self_hosted bertindak sebagai antrean kerja: ketika sebuah sesi ditugaskan ke lingkungan tersebut, Anthropic memasukkan sesi itu ke antrean sebagai item kerja. Worker Anda mengklaim item kerja dari antrean tersebut, membuat konteks eksekusi untuk masing-masing item, mengunduh skills milik agen (sumber daya berbasis filesystem yang dapat digunakan kembali dan memberi agen keahlian spesifik domain), menjalankan panggilan alat, dan mengirimkan kembali hasilnya.
Item kerja diklaim dengan melakukan polling pada antrean lingkungan: baik oleh worker yang selalu aktif (always-on) yang melakukan polling secara terus-menerus, atau handler yang dipicu webhook yang bangun saat session.status_run_started dan mulai melakukan polling.
CLI dan SDK keduanya menyertakan worker yang sudah jadi. CLI ant hanya mendukung pola always-on; SDK mendukung baik always-on maupun yang dipicu webhook. Keduanya dapat dikonfigurasi: lihat Self-hosted worker di referensi untuk flag CLI, dan SDK helpers di halaman ini untuk opsi SDK. Untuk kontrol lebih, panggil endpoint Environments Work secara langsung dan implementasikan worker Anda sendiri.
/workspace: direktori kerja default sistem untuk eksekusi alat dan pengunduhan skill. Flag --workdir pada CLI secara default menggunakan direktori saat ini; berikan --workdir /workspace agar sesuai dengan default sistem. Skill diunduh ke <workdir>/skills/<name>/. Jika Anda menggunakan direktori kerja yang berbeda, perbarui prompt sistem agen Anda agar Claude dapat menemukan file skill tersebut./mnt/session/outputs: harness worker menginstruksikan Claude untuk menulis hasil akhir di sini. Dalam mode sandbox, pasang (mount) direktori host pada path ini untuk mengambil output setelah sesi berakhir. Dalam mode in-process, alat file milik worker menulis di bawah direktori kerja, sehingga path ini tidak berlaku.Anda memerlukan:
/bin/bash pada path persis tersebut. Alat bash milik worker memanggilnya secara langsung, tanpa memeriksa PATH. SDK TypeScript juga memerlukan unzip dan tar pada PATH serta Node.js 22 atau yang lebih baru; SDK Python dan Go menggunakan pustaka standar mereka untuk ekstraksi arsip dan tidak memiliki persyaratan biner tambahan.ant atau SDK Anthropic (Python, TypeScript, atau Go) pada host worker.Pada Claude Platform on AWS, worker mengautentikasi dengan AWS IAM (SigV4) atau kunci API yang dibuat di AWS Console, bukan kunci lingkungan. Lampirkan managed policy AnthropicSelfHostedEnvironmentAccess ke principal IAM tempat worker Anda berjalan. Kunci lingkungan yang dibuat di Claude Console tidak berfungsi dengan endpoint Claude Platform on AWS.
Buat lingkungan yang di-hosting sendiri
Di Console: Workspace > Environments > New > Self-hosted
Atau melalui API:
client = anthropic.Anthropic()
environment = client.beta.environments.create(
name="self-hosted", config={"type": "self_hosted"}
)
print(environment.id)Buat kunci lingkungan
Di Console, buka lingkungan tersebut dan klik Generate environment key. Pembuatan kunci hanya dapat dilakukan melalui Console, terlepas dari apakah Anda membuat lingkungan melalui Console atau API. Kemudian ekspor ID lingkungan dan kuncinya pada host worker:
export ANTHROPIC_ENVIRONMENT_KEY="sk-ant-oat01-..."
export ANTHROPIC_ENVIRONMENT_ID="env_..."Skill dapat menyertakan executable yang mungkin dijalankan langsung oleh agen. Worker CLI dan SDK mempertahankan izin executable yang tercatat dalam bundel skill saat mengekstraknya. Jika Anda mengimplementasikan pengunduhan skill secara manual, Anda bertanggung jawab untuk mengatur izin executable.
Pilih always-on untuk penyiapan paling sederhana: proses yang berjalan lama melakukan polling antrean secara terus-menerus dan hanya memerlukan HTTPS keluar. Pilih dipicu webhook untuk menghindari menjalankan poller yang menganggur; ini memerlukan endpoint webhook yang dapat dijangkau Anthropic (lihat Webhooks untuk penyiapan endpoint dan verifikasi tanda tangan).
Instal CLI ant
Jalankan ini pada host worker.
Untuk lingkungan Linux, unduh biner rilis secara langsung.
VERSION=1.15.0
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
case $(uname -m) in
x86_64) ARCH=amd64 ;;
aarch64) ARCH=arm64 ;;
esac
curl -fsSL "https://github.com/anthropics/anthropic-cli/releases/download/v${VERSION}/ant_${VERSION}_${OS}_${ARCH}.tar.gz" \
| sudo tar -xz -C /usr/local/bin antAnda dapat menemukan semua rilis di halaman rilis GitHub.
Jalankan worker
In-process
ant beta:worker poll mengklaim item kerja yang ditugaskan ke lingkungan, mengunduh skill, mengeksekusi panggilan alat di direktori kerja, dan mengirimkan kembali hasilnya. Perintah ini membaca ANTHROPIC_ENVIRONMENT_KEY dan ANTHROPIC_ENVIRONMENT_ID dari environment.
ant beta:worker poll \
--workdir "/workspace"Worker keluar dengan bersih saat menerima SIGTERM atau SIGINT, menyelesaikan panggilan alat yang sedang berjalan sebelum berhenti.
Sandbox per sesi
Jika Anda memerlukan isolasi yang lebih kuat (filesystem yang baru, batas sumber daya, atau kontrol jaringan per sesi), jalankan setiap sesi di sandbox-nya sendiri. Bangun image dengan ant terinstal dan ant beta:worker run sebagai entrypoint. Image dasar harus menyediakan /bin/bash; curl hanya digunakan pada saat build. Ketika sandbox dimulai, ia membaca detail sesi dari variabel environment, menangani sesi tersebut, dan keluar:
FROM your-base-image
ARG ANT_VERSION=1.15.0
ARG TARGETARCH
RUN ARCH=$([ "$TARGETARCH" = "arm64" ] && echo arm64 || echo amd64) && \
curl -fsSL "https://github.com/anthropics/anthropic-cli/releases/download/v${ANT_VERSION}/ant_${ANT_VERSION}_linux_${ARCH}.tar.gz" \
| tar -xz -C /usr/local/bin ant
WORKDIR /workspace
VOLUME /mnt/session/outputs
ENTRYPOINT ["ant", "beta:worker", "run"]Kemudian tulis skrip spawn yang meneruskan detail sesi ke sandbox yang baru. Poller menyuntikkan ANTHROPIC_SESSION_ID, ANTHROPIC_WORK_ID, ANTHROPIC_ENVIRONMENT_ID, dan ANTHROPIC_ENVIRONMENT_KEY ke environment skrip tersebut. ANTHROPIC_BASE_URL bersifat opsional dan hanya diteruskan jika telah diatur pada host poller; variabel ini menimpa endpoint API default. Dalam contoh ini, /host/outputs adalah direktori host yang Anda pilih; direktori ini di-bind-mount ke /mnt/session/outputs milik sandbox sehingga Anda dapat mengambil hasil sesi setelah sandbox keluar.
#!/bin/bash
# spawn.sh: dipanggil sekali untuk setiap item pekerjaan yang diklaim
mkdir -p "/host/outputs/$ANTHROPIC_SESSION_ID"
exec docker run --rm \
-e ANTHROPIC_SESSION_ID -e ANTHROPIC_ENVIRONMENT_KEY \
-e ANTHROPIC_WORK_ID -e ANTHROPIC_ENVIRONMENT_ID -e ANTHROPIC_BASE_URL \
-v "/host/outputs/$ANTHROPIC_SESSION_ID":/mnt/session/outputs \
your-imageMulai poller dengan mengarahkannya ke skrip tersebut:
ant beta:worker poll \
--on-work ./spawn.shSDK menyediakan tiga helper pada tingkat kontrol yang berbeda. EnvironmentWorker mencakup sebagian besar kasus penggunaan; turun ke helper tingkat lebih rendah ketika Anda perlu meluncurkan proses per sesi Anda sendiri atau menjalankan alat terhadap sesi yang sudah diklaim.
EnvironmentWorker: worker siap pakai. Menangani polling, penyiapan, dan eksekusi dari awal hingga akhir.
.run(): berjalan tanpa batas waktu, mengambil sesi saat sesi tersebut tiba..handle_item(): menangani satu item kerja yang telah diklaim lalu keluar. Berikan pengidentifikasi work, session, dan environment secara eksplisit, atau biarkan ia membaca variabel ANTHROPIC_* yang diatur oleh ant beta:worker poll --on-work untuk proses yang dijalankannya.work.poller(): melakukan polling antrean kerja atas nama Anda dan memberikan setiap sesi yang diklaim. Gunakan ini ketika Anda ingin menentukan apa yang terjadi untuk setiap sesi, misalnya meluncurkan sandbox alih-alih menjalankan alat secara in-process.
drain: apakah berhenti melakukan polling setelah antrean kosong alih-alih menunggu pekerjaan baru.block_ms: berapa lama menunggu pekerjaan tiba sebelum kembali, dalam milidetik. Harus antara 1 dan 999 (waktu tunggu per polling; helper melakukan polling ulang secara otomatis). Berikan null (None di Python, param.Null[int64]() di Go) untuk pemeriksaan non-blocking; menghilangkan parameter ini menggunakan long-poll default 999 ms.reclaim_older_than_ms: mengklaim ulang item kerja yang telah diklaim tetapi tidak pernah di-acknowledge dalam jumlah milidetik ini.auto_stop: apakah mengirimkan sinyal stop untuk setiap item kerja setelah badan loop Anda selesai dengannya. Poller Go tidak memiliki opsi untuk menonaktifkan ini dan selalu mengirimkan sinyal stop, jadi blokir di badan loop hingga sesi selesai alih-alih melepaskannya.client.beta.sessions.events.tool_runner(): menjalankan panggilan alat untuk satu sesi, dengan ID sesi dan daftar alat. Gunakan ketika Anda sudah mengklaim pekerjaan dan hanya memerlukan lapisan eksekusi.Gunakan work poller secara langsung ketika Anda ingin meluncurkan proses per sesi Anda sendiri, misalnya menjalankan sandbox untuk setiap sesi yang diklaim:
import asyncio
import os
from anthropic import AsyncAnthropic
from anthropic.types.beta.environments import BetaSelfHostedWork
async def launch_container(work: BetaSelfHostedWork) -> None:
# Ganti dengan peluncur sandbox per-sesi Anda sendiri. Teruskan
# ANTHROPIC_ENVIRONMENT_KEY ke dalam sandbox yang diluncurkan, jangan pernah
# kunci API Anda.
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())AgentToolContext adalah konteks eksekusi untuk panggilan alat. Ia mendefinisikan direktori kerja dan kebijakan path, serta dapat mengunduh skill milik sesi. beta_agent_toolset_20260401(env) menerima AgentToolContext dan mengembalikan implementasi alat standar (bash, read, write, edit, glob, grep).
Dengan EnvironmentWorker: keduanya dikelola secara otomatis. Berikan factory tools untuk menyesuaikan daftar alat:
EnvironmentWorker(client, ..., tools=lambda env: [beta_bash_tool(env), my_custom_tool])Dengan work.poller() dan tool_runner(): berikan daftar alat sebagai tools ke client.beta.sessions.events.tool_runner(). Untuk membangun daftar tersebut, siapkan AgentToolContext sendiri dan panggil beta_agent_toolset_20260401(env):
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 diunduh ke /workspace/skills/<name>/
tools = beta_agent_toolset_20260401(env)Dari shell terpisah, dengan ANTHROPIC_API_KEY diatur ke kunci API Claude Anda (bukan kunci lingkungan), pastikan workers_polling setidaknya bernilai 1:
ant beta:environments:work stats --environment-id "$ANTHROPIC_ENVIRONMENT_ID"Jika workers_polling tetap 0, worker tidak menjangkau antrean: pastikan ANTHROPIC_ENVIRONMENT_KEY dan ANTHROPIC_ENVIRONMENT_ID telah diatur pada host worker. Lihat Membaca kedalaman antrean untuk respons statistik lengkap dan contoh bahasa lainnya.
Setelah worker Anda berjalan, buat sesi yang menargetkan lingkungan tersebut. Atur AGENT_ID ke ID agen yang Anda catat di Sebelum Anda mulai. Sesi masuk ke antrean kerja lingkungan dan menunggu di sana hingga worker mengklaimnya; jika tidak ada worker yang terhubung, sesi tetap berada dalam antrean alih-alih gagal.
Anthropic tidak memasang file atau repositori GitHub ke dalam sandbox yang di-hosting sendiri. Untuk membuat file spesifik sesi tersedia, berikan referensi file (seperti path S3 atau SHA commit) di field metadata sesi. Skrip spawn atau handler --on-work Anda membaca metadata tersebut dari item kerja yang diklaim (poller CLI menyalurkan JSON item kerja ke stdin skrip, dan handler SDK dapat membacanya melalui endpoint Environments Work) dan menyiapkan file ke direktori kerja sebelum eksekusi alat dimulai.
session = client.beta.sessions.create(
agent=agent.id,
environment_id=environment.id,
metadata={"input_file": "s3://my-bucket/data.csv"},
)Memory saat ini tidak didukung dengan sandbox yang di-hosting sendiri.
Lihat Self-hosted worker di referensi untuk daftar lengkap flag CLI, dan SDK helpers untuk opsi helper SDK.
Panggilan-panggilan ini dijalankan dari perangkat pemantauan atau operasi Anda, diautentikasi dengan kunci API Claude Anda, untuk mengamati dan mengelola armada worker. Loop klaim dan keep-alive ditangani di dalam helper worker, sehingga Anda tidak memanggil endpoint tersebut secara langsung.
Endpoint ini mengautentikasi dengan kunci API organisasi Anda, bukan kunci lingkungan. Panggil endpoint ini dari luar host worker. Mengatur ANTHROPIC_API_KEY pada host worker akan mengekspos kredensial berlingkup organisasi ke panggilan alat agen.
work.stats mengembalikan status antrean untuk sebuah lingkungan:
depth adalah jumlah item yang menunggu untuk diklaim. Skalakan armada worker Anda atau buat peringatan berdasarkan backlog menggunakan nilai ini.pending adalah jumlah item yang telah diklaim oleh worker dan sedang diproses.oldest_queued_at adalah timestamp item tertua yang masih dalam antrean atau sedang diproses, atau null jika tidak ada.workers_polling adalah jumlah worker yang telah melakukan polling dalam 30 detik terakhir. Gunakan ini untuk peringatan liveness.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}"){
"type": "work_queue_stats",
"depth": 0,
"pending": 0,
"oldest_queued_at": null,
"workers_polling": 0
}Gunakan work.stop untuk meminta worker yang menangani sesi tertentu agar mematikannya dengan bersih. Worker menyelesaikan panggilan alat yang sedang berjalan, mengirimkan status akhir, dan melepaskan sesi. Berikan force: true di body permintaan (dengan CLI, berikan --force) untuk menginterupsi segera alih-alih menunggu panggilan alat saat ini selesai.
Karena panggilan ini dijalankan dari perangkat operasi Anda dan bukan dari host worker, ANTHROPIC_WORK_ID tidak diatur secara otomatis. Atur variabel ini ke ID item kerja target sebelum menjalankan contoh berikut. Untuk menemukan ID item kerja, daftarkan item kerja lingkungan melalui endpoint Environments Work.
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)Model tanggung jawab bersama untuk lingkungan sandbox yang di-hosting sendiri.
Buat sesi untuk menjalankan agen Anda dan mulai mengeksekusi tugas.
Hubungkan Claude secara aman ke server MCP yang berjalan di jaringan privat Anda tanpa membuka port masuk atau mengekspos layanan ke internet publik.
Was this page helpful?