claude CLI yang memiliki shell, direktori kerja, dan file sesi di disk. Menghosting ini tidak seperti menghosting pembungkus API stateless. Setiap agen yang berjalan adalah proses yang berumur panjang yang terikat pada status lokal, yang membentuk cara Anda mengalokasikan sumber daya, mempertahankan sesi, dan menskalakan di seluruh tenant.
Halaman ini mencakup self-hosting pada infrastruktur Anda sendiri: pahami model subprocess, pilih pola sesi, sediakan kontainer, dan tangani masalah produksi seperti persistensi, observabilitas, autentikasi, dan isolasi multi-tenant. Untuk Dockerfile yang dapat digunakan dan manifes Kubernetes, lihat hosting cookbook.
Jika Anda tidak memerlukan kontrol infrastruktur, isolasi khusus, atau data plane Anda sendiri, pertimbangkan Managed Agents sebagai gantinya: REST API yang dihosting di mana Anthropic menjalankan agen dan sandbox, sehingga aplikasi Anda mengirim peristiwa dan streaming kembali hasil tanpa infrastruktur hosting untuk dioperasikan.
Untuk pengerasan keamanan di luar sandboxing dasar, termasuk kontrol jaringan, manajemen kredensial, dan opsi isolasi, lihat Secure Deployment.
Model subprocess
Setiap keputusan hosting di halaman ini mengikuti dari cara SDK menjalankan agen. Ketika kode Anda memanggilquery(), SDK menjalankan proses CLI claude terpisah dan berkomunikasi dengannya melalui stdio. Subprocess tersebut memiliki shell, direktori kerja, dan transkrip sesi JSONL di disk lokal.
cwd pada setiap panggilan query() ketika sesi memerlukan sistem file terpisah:
State yang berada di disk lokal
Tiga jenis state agen berada di sistem file kontainer secara default. Tidak satupun dari mereka bertahan dari restart kontainer, scale-down, atau perpindahan ke node yang berbeda.| State | Lokasi Default |
|---|---|
| Session transcripts | ~/.claude/projects/, atau direktori projects/ di bawah CLAUDE_CONFIG_DIR jika diatur |
CLAUDE.md memory files | ~/.claude/CLAUDE.md untuk user tier dan direktori kerja sesi untuk project tier |
| Working-directory artifacts | Direktori kerja sesi |
SessionStore. Memory files dan artefak direktori kerja lainnya memerlukan strategi penyimpanan mereka sendiri, seperti volume yang dipasang atau sinkronisasi object-store.
Untuk cara sesi, resumption, dan forking bekerja di tingkat API, lihat Sessions.
Pilih pola sesi
Empat pola ini mencakup siklus hidup sesi: berapa lama kontainer hidup relatif terhadap sesi yang dilayaninya. Untuk tempat kontainer berjalan, panduan hosting memiliki kode yang dapat digunakan untuk Docker lokal, Modal, dan Kubernetes. Pilih pola sesi di sini dan target penerapan dari panduan.Sesi Ephemeral
Buat kontainer untuk setiap tugas pengguna dan hancurkan ketika tugas selesai. Terbaik untuk tugas sekali jalan. Pengguna mungkin masih berinteraksi dengan AI saat tugas sedang diselesaikan, tetapi setelah selesai kontainer dihancurkan. Contoh beban kerja termasuk investigasi dan perbaikan bug, ekstraksi faktur dan tanda terima, terjemahan dokumen, dan transformasi media. Kontainer menjalankan entrypoint satu kali yang memanggil SDK dan keluar. Contoh di bawah menunjukkan versi TypeScript minimal. Simpan sebagaientrypoint.mts atau atur "type": "module" di package.json sehingga await tingkat atas tersedia.
Sesi berjalan lama
Jalankan instans kontainer persisten, sering kali menghosting beberapa proses SDK per kontainer, untuk melayani pekerjaan yang sedang berlangsung. Terbaik untuk agen yang mengambil tindakan otonom, melayani konten, atau menangani aliran pesan volume tinggi. Contoh beban kerja termasuk agen email yang menyeleksi dan merespons surat masuk, pembuat situs yang menghosting situs yang dapat diedit per pengguna melalui port kontainer, dan chatbot yang menangani lalu lintas berkelanjutan dari platform seperti Slack. Kontainer mengekspos endpoint HTTP atau WebSocket dan memetakan setiap sesi aktif ke kueri yang berumur panjang dan subproses di baliknya. Di TypeScript, gunakanstreamInput() untuk menambahkan giliran ke sesi aktif dan startup() untuk pra-pemanasan subproses sebelum lalu lintas masuk. Di Python, gunakan ClaudeSDKClient untuk menjaga sesi tetap terbuka di seluruh giliran. Ukuran kontainer sehingga dapat menampung jumlah maksimum sesi bersamaan dalam memori.
Sesi Hybrid
Kontainer ephemeral yang terhidrasi dariSessionStore saat startup dan mempertahankan pembaruan kembali. Terbaik untuk sesi yang mencakup banyak interaksi tetapi menganggur di antara mereka. Kontainer berhenti selama periode menganggur dan kembali hidup ketika pengguna kembali.
Contoh beban kerja termasuk manajer proyek pribadi dengan check-in intermiten, penelitian mendalam yang dijeda dan dilanjutkan selama berjam-jam, dan agen dukungan pelanggan yang memuat riwayat tiket di seluruh interaksi.
Sesuaikan waktu tunggu idle penyedia Anda dengan seberapa sering Anda mengharapkan pengguna kembali. Mematikan kontainer tanpa SessionStore yang dikonfigurasi kehilangan transkrip dengannya, jadi penyimpanan diperlukan untuk pola ini, bukan opsional.
Pola ini bergantung pada melanjutkan sesi berdasarkan ID dengan penyimpanan bersama yang terlampir:
SessionStore lengkap dan adaptor referensi.
Kontainer multi-agen
Jalankan beberapa subproses SDK di dalam satu kontainer. Terbaik untuk agen yang harus berkolaborasi erat, misalnya simulasi multi-agen di mana agen berinteraksi satu sama lain di lingkungan bersama. Berikan setiap agen direktori kerjanya sendiri sehingga mereka tidak menimpa file satu sama lain, dan isolasi pemuatan pengaturan sehingga fileCLAUDE.md per-agen tidak bocor di seluruh agen. Lihat Isolasi multi-penyewa untuk opsi spesifik.
Menyediakan kontainer
Sandboxing berbasis kontainer
Jalankan SDK di dalam kontainer bersandbox untuk isolasi proses, batasan sumber daya, kontrol jaringan, dan sistem file yang bersifat sementara. Beberapa penyedia mengkhususkan diri dalam lingkungan kontainer bersandbox yang sesuai dengan model Agent SDK. Pertanyaan yang harus dijawab saat memilih penyedia:- Siapa yang menjalankan sandbox: penyedia sandbox-as-a-service mengoperasikan infrastruktur untuk Anda, sementara opsi self-hosted memberikan perangkat lunak untuk dijalankan di server Anda sendiri.
- Latensi cold-start: berapa lama dari “buat sandbox” hingga “siap menerima permintaan pertama.” Pola ephemeral memerlukan start sub-detik. Pola long-running dapat mentoleransi lebih banyak.
- Penyimpanan persisten: apakah penyedia menawarkan volume tahan lama atau hanya disk ephemeral. Pola hybrid memerlukan penyimpanan tahan lama di suatu tempat, baik di dalam sandbox atau di sampingnya.
- Model penetapan harga: per-detik, per-permintaan, atau penagihan per jam tetap. Penetapan harga per-detik cocok untuk beban kerja ephemeral yang bersifat bursty. Per jam cocok untuk sesi long-running.
- Jaringan: dukungan untuk aturan egress khusus, proxy outbound, dan peering VPC pribadi untuk lingkungan yang diatur.
- Modal Sandbox, dengan demo implementation
- Cloudflare Sandboxes
- Daytona
- E2B
- Fly Machines
- Vercel Sandbox
Dependensi runtime
Kontainer hanya memerlukan runtime bahasa SDK Anda:- Python 3.10+ untuk Python SDK, atau Node.js 18+ untuk TypeScript SDK
- Kedua paket SDK menggabungkan binary Claude Code asli untuk platform host, jadi tidak perlu instalasi Claude Code atau Node.js terpisah untuk CLI yang dihasilkan
Sumber daya
1 GiB RAM, 5 GiB disk, dan 1 CPU per agent adalah titik awal yang wajar untuk instance yang baru dimulai. Penggunaan memori tumbuh dengan panjang sesi dan aktivitas tool, jadi ukuran untuk panjang sesi dan concurrency yang benar-benar Anda butuhkan daripada baseline idle. Lihat Scaling and concurrency untuk cara menghitung agent per host.Jaringan
SDK memerlukan outbound HTTPS keapi.anthropic.com, atau ke endpoint regional penyedia Anda saat berjalan di Bedrock atau Vertex. Jika agent Anda menggunakan MCP servers atau tool eksternal, mereka memerlukan akses outbound ke endpoint tersebut juga. Untuk production, arahkan traffic outbound melalui proxy egress yang memberlakukan allowlist domain, menyuntikkan kredensial, dan mencatat permintaan. Lihat Secure Deployment untuk pola lengkapnya.
Untuk traffic inbound, ekspos port HTTP atau WebSocket di kontainer. Aplikasi Anda menangani permintaan klien di port tersebut dan memanggil SDK secara internal; subprocess itu sendiri tidak mendengarkan di jaringan.
Menangani kekhawatiran produksi
Kerjakan keputusan-keputusan ini sebelum mengirimkan agen yang di-host sendiri.Persistensi sesi dan status
Disk lokal default hilang saat restart, scale-down, atau perpindahan ke node yang berbeda. Untuk sesi apa pun yang diharapkan pengguna untuk dilanjutkan, cerminkan transkrip ke penyimpanan yang tahan lama dengan adaptorSessionStore. Lihat Implementasi referensi untuk adaptor S3, Redis, dan Postgres serta suite kepatuhan untuk milik Anda sendiri.
Tiga hal yang perlu diketahui tentang perilaku SessionStore:
- Transkrip saja:
SessionStoremencerminkan transkrip, bukan file memoriCLAUDE.mdatau artefak direktori kerja lainnya. Pasang volume bersama atau sinkronkan yang lain secara terpisah. - Cermin, bukan penggantian: subprocess menulis ke disk lokal terlebih dahulu, dan penyimpanan menerima salinan setiap batch. Penulisan lokal tetap berwenang.
- Pesan
mirror_error: jika penyimpanan menolak atau habis waktu, SDK memancarkan pesan{ type: "system", subtype: "mirror_error" }dan melanjutkan kueri tanpa percobaan ulang. Beri peringatan pada ini jika daya tahan penyimpanan penting.
Observabilitas
Agen Agent SDK adalah proses yang berumur panjang yang menjalankan panggilan alat di banyak putaran API. Tanpa telemetri, Anda tidak dapat melihat alat mana yang berjalan, berapa lama waktu yang dibutuhkan, atau di mana sesi terhenti. SDK mewarisi konfigurasi OpenTelemetry dari lingkungan. Atur variabel lingkungan OTEL di tingkat kontainer atau orchestrator sehingga setiap panggilanquery() mengekspor span, metrik, dan peristiwa log ke kolektor Anda. Contoh di bawah ini mengaktifkan ekspor OTLP untuk ketiga sinyal. CLAUDE_CODE_ENHANCED_TELEMETRY_BETA hanya diperlukan untuk jejak; abaikan jika Anda hanya mengekspor metrik dan log.
".env'
Otentikasi dan rahasia
Tiga kekhawatiran otentikasi penting pada waktu hosting:- API Anthropic: subprocess membaca
ANTHROPIC_API_KEYdari lingkungannya. Suplai dari manajer rahasia Anda, atau aturANTHROPIC_BASE_URLuntuk merutekan panggilan model melalui proxy yang menyuntikkan kunci di luar kontainer. Lihat Manajemen kredensial untuk pola proxy dan Ikhtisar SDK untuk metode otentikasi yang didukung. - Inbound: letakkan otentikasi di gateway di depan kontainer agen. Agen harus menerima permintaan yang telah diautentikasi sebelumnya dan tidak boleh menjadi komponen yang memvalidasi token pengguna.
- Alat outbound: jaga kredensial alat keluar dari lingkungan agen. Rutekan panggilan outbound melalui proxy yang menyuntikkan kunci API setelah permintaan meninggalkan kontainer. Agen membuat panggilan; proxy menambahkan kredensial.
Penskalaan dan konkurensi
Setiap sesi berjalan di subprocess-nya sendiri, jadi konkurensi pada host dibatasi oleh berapa banyak subprocess yang dapat ditampung RAM-nya. Ukuran setiap host dengan rumus ini:sessionId. Sesi yang disematkan terus mengenai kontainer yang sama, dan oleh karena itu subprocess yang sama yang berjalan, sampai dikeluarkan atau kontainer dimulai ulang.
Fanout besar dari subagen bersamaan dari sesi tunggal dapat mencapai batas laju API. Pecahkan pekerjaan menjadi batch yang lebih kecil daripada mengeluarkan satu dispatch yang lebar.
Biaya
Biaya token Anthropic biasanya mendominasi biaya infrastruktur kontainer dengan urutan besarnya atau lebih. Kontainer yang disediakan secara minimal berjalan kira-kira $0,05 per jam, sementara sesi agen panjang tunggal dapat menghabiskan dolar dalam token. Lihat Pelacakan biaya untuk akuntansi token per-sesi.Isolasi multi-tenant
Perilaku SDK default membaca pengaturan dan file memoriCLAUDE.md dari sistem file. Dalam kontainer bersama yang melayani beberapa tenant, file-file tersebut dapat membocorkan konteks satu tenant ke sesi tenant lain.
Untuk mengisolasi tenant di dalam kontainer bersama:
- Lewatkan
settingSources: []dalam TypeScript atausetting_sources=[]dalam Python sehingga tidak ada pengaturan sistem file yang dimuat. - Atur
CLAUDE_CODE_DISABLE_AUTO_MEMORY=1dalamenv. Memori otomatis di~/.claude/projects/<project>/memory/dimuat ke prompt sistem terlepas darisettingSources. Lihat Apa yang settingSources tidak kontrol untuk input lain yang dimuat tanpa syarat. - Arahkan
CLAUDE_CONFIG_DIRke direktori per-tenant sehingga tenant tidak berbagi konfigurasi global~/.claude.json. - Gunakan direktori kerja per-tenant. Lewatkan
cwdsecara eksplisit pada setiap panggilanquery(). - Terapkan aturan egress per-tenant di proxy Anda, seperti IP outbound yang berbeda, kredensial, atau daftar allowlist domain, sehingga tenant yang dikompromikan tidak dapat mengeksfiltrasikan data melalui kebijakan outbound tenant lain.
tenantDir dan configDir sehingga setiap tenant mendapatkan jalur yang tidak dapat dibaca tenant lain. Dalam TypeScript, env menggantikan lingkungan subprocess, jadi sebarkan ...process.env untuk menjaga variabel yang diwarisi seperti PATH dan ANTHROPIC_API_KEY. Dalam Python, env digabungkan di atas lingkungan yang diwarisi.
Keterbatasan yang Diketahui
Rencanakan di sekitar ini dalam desain penyebaran Anda.| Keterbatasan | Apa yang harus dilakukan |
|---|---|
| Tidak ada timeout sesi tingkat atas | Sesi tidak akan timeout dengan sendirinya. Atur maxTurns dalam Options untuk membatasi berapa banyak putaran penggunaan alat yang diambil agen sebelum berhenti. |
| Pertumbuhan memori selama sesi panjang | Batasi panjang sesi atau daur ulang subproses secara berkala. Lihat Penskalaan dan konkurensi. |
| Fanout subagen paralel besar dapat mencapai batas laju | Pecah pekerjaan menjadi batch yang lebih kecil daripada mengeluarkan satu pengiriman yang luas. |
| Tidak ada batas waktu dinding per subagen | Batasi setiap subagen dengan maxTurns dalam AgentDefinition-nya. Hanya untuk subagen latar belakang, CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS menetapkan watchdog stall yang aktif ketika subagen run_in_background berhenti menghasilkan output; ini bukan batas waktu runtime total. |
Langkah Berikutnya
- Hosting cookbook: panduan notebook dengan kode yang dapat digunakan untuk Docker, Modal, dan Kubernetes.
- Session storage: pertahankan transkrip di seluruh host dengan adaptor
SessionStore. - Observability: ekspor jejak OTEL, metrik, dan log ke kolektor Anda.
- Secure deployment: kontrol jaringan, manajemen kredensial, dan pengerasan isolasi.
- Cost tracking: akuntansi token dan biaya per-sesi.