4 4
5# Hosting the Agent SDK5# Hosting the Agent SDK
6 6
7> Menerapkan Agent SDK dalam produksi: arsitektur subprocess, persistensi sesi, penskalaan, observabilitas, dan isolasi multi-tenant untuk Docker, Kubernetes, dan penyedia sandbox.7> Terapkan Agent SDK dalam produksi: arsitektur subprocess, persistensi sesi, penskalaan, observabilitas, dan isolasi multi-tenant untuk Docker, Kubernetes, dan penyedia sandbox.
8 8
9Agent SDK menjalankan dan mengawasi subprocess `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.9Agent SDK menjalankan dan mengawasi subprocess `claude` CLI yang memiliki shell, direktori kerja, dan file sesi di disk. Menghosting ini tidak seperti menghosting pembungkus API yang 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.
10 10
11Halaman ini mencakup self-hosting pada infrastruktur Anda sendiri: pahami [model subprocess](#the-subprocess-model), [pilih pola sesi](#choose-a-session-pattern), [sediakan kontainer](#provision-the-container), dan [tangani masalah produksi](#handle-production-concerns) seperti persistensi, observabilitas, autentikasi, dan isolasi multi-tenant. Untuk Dockerfile yang dapat digunakan dan manifes Kubernetes, lihat [hosting cookbook](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting).11Halaman ini mencakup self-hosting pada infrastruktur Anda sendiri. Untuk Dockerfile yang dapat digunakan dan manifes Kubernetes, lihat [hosting cookbook](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting).
12 12
13Jika Anda tidak memerlukan kontrol infrastruktur, isolasi khusus, atau data plane Anda sendiri, pertimbangkan [Managed Agents](https://platform.claude.com/docs/id/managed-agents/overview) 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.13Jika Anda tidak memerlukan kontrol infrastruktur, isolasi khusus, atau data plane Anda sendiri, pertimbangkan [Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) sebagai gantinya: REST API yang dihosting di mana Anthropic menjalankan agen dan sandbox, sehingga aplikasi Anda mengirim acara dan streaming kembali hasil tanpa infrastruktur hosting yang perlu dioperasikan.
14
15<Info>
16 Untuk pengerasan keamanan di luar sandboxing dasar, termasuk kontrol jaringan, manajemen kredensial, dan opsi isolasi, lihat [Secure Deployment](/id/agent-sdk/secure-deployment).
17</Info>
18 14
19<h2 id="the-subprocess-model">15<h2 id="the-subprocess-model">
20 Model subprocess16 Model subprocess
21</h2>17</h2>
22 18
23Setiap keputusan hosting di halaman ini mengikuti dari cara SDK menjalankan agen. Ketika kode Anda memanggil `query()`, SDK menjalankan proses CLI `claude` terpisah dan berkomunikasi dengannya melalui stdio. Subprocess tersebut memiliki shell, direktori kerja, dan transkrip sesi JSONL di disk lokal.19Setiap keputusan hosting di halaman ini mengikuti dari cara SDK menjalankan agen. Ketika kode Anda memanggil `query()`, SDK menspawn proses CLI `claude` terpisah dan berkomunikasi dengannya melalui stdio. Subprocess tersebut memiliki shell, direktori kerja, dan transkrip sesi JSONL di disk lokal.
20
21<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/agent-sdk/hosting-subprocess.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=9dac857ca9d3b1410c3734900c386004" className="dark:hidden" alt="Alur permintaan: klien ke aplikasi Anda, yang menspawn subprocess CLI claude melalui stdio di dalam kontainer; subprocess menulis ke disk lokal dan memanggil api.anthropic.com melalui HTTPS" width="920" height="220" data-path="images/agent-sdk/hosting-subprocess.svg" />
24 22
25<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/agent-sdk/hosting-subprocess.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=9dac857ca9d3b1410c3734900c386004" alt="Request flow: client to your app, which spawns a claude CLI subprocess over stdio inside the container; the subprocess writes to local disk and calls api.anthropic.com over HTTPS" width="920" height="220" data-path="images/agent-sdk/hosting-subprocess.svg" />23<img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/agent-sdk/hosting-subprocess-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=3fdeff3d7f44b2b67762668acfbb25f5" className="hidden dark:block" alt="Alur permintaan: klien ke aplikasi Anda, yang menspawn subprocess CLI claude melalui stdio di dalam kontainer; subprocess menulis ke disk lokal dan memanggil api.anthropic.com melalui HTTPS" width="920" height="220" data-path="images/agent-sdk/hosting-subprocess-dark.svg" />
26 24
27Satu sesi agen memetakan ke satu subprocess. Menjalankan N sesi bersamaan berarti N subprocess, masing-masing dengan pohon proses dan file transkrip sendiri. Secara default mereka semua mewarisi direktori kerja aplikasi Anda, jadi teruskan `cwd` pada setiap panggilan `query()` ketika sesi memerlukan sistem file terpisah:25Satu sesi agen memetakan ke satu subprocess. Menjalankan N sesi bersamaan berarti N subprocess, masing-masing dengan pohon proses dan file transkrip sendiri. Secara default, semuanya mewarisi direktori kerja aplikasi Anda. Ketika sesi membutuhkan sistem file terpisah, teruskan `cwd` yang berbeda dalam opsi panggilan `query()` setiap sesi:
28 26
29<CodeGroup>27<CodeGroup>
30 ```typescript TypeScript theme={null}28 ```typescript TypeScript theme={null}
31 query({ prompt, options: { cwd: "/work/session-a" } })29 import { query } from "@anthropic-ai/claude-agent-sdk";
30
31 for await (const message of query({
32 prompt: "Summarize the files in this directory",
33 options: { cwd: "/work/session-a" },
34 })) {
35 console.log(message);
36 }
32 ```37 ```
33 38
34 ```python Python theme={null}39 ```python Python theme={null}
35 query(prompt=prompt, options=ClaudeAgentOptions(cwd="/work/session-a"))40 import asyncio
41
42 from claude_agent_sdk import ClaudeAgentOptions, query
43
44
45 async def main():
46 async for message in query(
47 prompt="Summarize the files in this directory",
48 options=ClaudeAgentOptions(cwd="/work/session-a"),
49 ):
50 print(message)
51
52
53 asyncio.run(main())
36 ```54 ```
37</CodeGroup>55</CodeGroup>
38 56
57Contoh TypeScript di halaman ini menggunakan `await` tingkat atas, jadi simpan sebagai file `.mts` atau atur `"type": "module"` di `package.json`.
58
39<h3 id="state-that-lives-on-local-disk">59<h3 id="state-that-lives-on-local-disk">
40 State yang berada di disk lokal60 State yang hidup di disk lokal
41</h3>61</h3>
42 62
43Tiga 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.63Tiga jenis state agen hidup di sistem file kontainer secara default. Tidak satupun dari mereka yang bertahan dari restart kontainer, scale-down, atau perpindahan ke node yang berbeda.
44 64
45| State | Lokasi Default |65| State | Lokasi Default |
46| --------------------------- | ------------------------------------------------------------------------------------------ |66| ----------------------- | ------------------------------------------------------------------------------------------ |
47| Session transcripts | `~/.claude/projects/`, atau direktori `projects/` di bawah `CLAUDE_CONFIG_DIR` jika diatur |67| Transkrip sesi | `~/.claude/projects/`, atau direktori `projects/` di bawah `CLAUDE_CONFIG_DIR` jika diatur |
48| `CLAUDE.md` memory files | `~/.claude/CLAUDE.md` untuk user tier dan direktori kerja sesi untuk project tier |68| File memori `CLAUDE.md` | `~/.claude/CLAUDE.md` untuk tier pengguna dan direktori kerja sesi untuk tier proyek |
49| Working-directory artifacts | Direktori kerja sesi |69| Artefak direktori kerja | Direktori kerja sesi |
50 70
51Untuk mempertahankan transkrip di seluruh host, konfigurasikan adaptor [`SessionStore`](/id/agent-sdk/session-storage). Memory files dan artefak direktori kerja lainnya memerlukan strategi penyimpanan mereka sendiri, seperti volume yang dipasang atau sinkronisasi object-store.71Untuk mempertahankan transkrip di seluruh host, konfigurasikan adaptor [`SessionStore`](/docs/id/agent-sdk/session-storage). File memori dan artefak direktori kerja lainnya memerlukan strategi penyimpanan mereka sendiri, seperti volume yang dipasang atau sinkronisasi object-store.
52 72
53Untuk cara sesi, resumption, dan forking bekerja di tingkat API, lihat [Sessions](/id/agent-sdk/sessions).73Untuk cara sesi, resumption, dan forking bekerja di tingkat API, lihat [Sessions](/docs/id/agent-sdk/sessions).
54 74
55<h2 id="choose-a-session-pattern">75<h2 id="choose-a-session-pattern">
56 Pilih pola sesi76 Pilih pola sesi
66 86
67Contoh beban kerja termasuk investigasi dan perbaikan bug, ekstraksi faktur dan tanda terima, terjemahan dokumen, dan transformasi media.87Contoh beban kerja termasuk investigasi dan perbaikan bug, ekstraksi faktur dan tanda terima, terjemahan dokumen, dan transformasi media.
68 88
69Kontainer menjalankan entrypoint satu kali yang memanggil SDK dan keluar. Contoh di bawah menunjukkan versi TypeScript minimal. Simpan sebagai `entrypoint.mts` atau atur `"type": "module"` di `package.json` sehingga `await` tingkat atas tersedia.89Kontainer menjalankan entrypoint satu kali yang membaca tugas dari variabel lingkungan `TASK_PROMPT`, memanggil SDK, dan keluar.
70 90
71```typescript theme={null}91<CodeGroup>
72import { query } from "@anthropic-ai/claude-agent-sdk";92 ```typescript TypeScript theme={null}
93 import { query } from "@anthropic-ai/claude-agent-sdk";
73 94
74const prompt = process.env.TASK_PROMPT!;95 const prompt = process.env.TASK_PROMPT!;
75for await (const message of query({ prompt, options: { maxTurns: 20 } })) {96 for await (const message of query({ prompt, options: { maxTurns: 20 } })) {
76 console.log(message);97 console.log(message);
77}98 }
78```99 ```
100
101 ```python Python theme={null}
102 import asyncio
103 import os
104
105 from claude_agent_sdk import ClaudeAgentOptions, query
106
107
108 async def main():
109 async for message in query(
110 prompt=os.environ["TASK_PROMPT"],
111 options=ClaudeAgentOptions(max_turns=20),
112 ):
113 print(message)
114
115
116 asyncio.run(main())
117 ```
118</CodeGroup>
119
120Skrip mencetak setiap pesan saat tiba, termasuk pesan hasil yang `subtype`-nya adalah `success` ketika tugas selesai dalam batas giliran. Jika tugas mencapai batas 20 giliran, `subtype` pesan hasil adalah `error_max_turns` dan panggilan `query()` menimbulkan kesalahan setelah menghasilkannya, jadi bungkus loop dalam blok try jika kontainer perlu keluar dengan bersih. Lihat [Tangani hasil](/docs/id/agent-sdk/agent-loop#handle-the-result) untuk subtipe kesalahan.
79 121
80<h3 id="long-running-sessions">122<h3 id="long-running-sessions">
81 Sesi berjalan lama123 Sesi berjalan lama
85 127
86Contoh 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.128Contoh 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.
87 129
88Kontainer mengekspos endpoint HTTP atau WebSocket dan memetakan setiap sesi aktif ke kueri yang berumur panjang dan subproses di baliknya. Di TypeScript, gunakan [`streamInput()`](/id/agent-sdk/typescript#query-object) untuk menambahkan giliran ke sesi aktif dan [`startup()`](/id/agent-sdk/typescript#startup) untuk pra-pemanasan subproses sebelum lalu lintas masuk. Di Python, gunakan [`ClaudeSDKClient`](/id/agent-sdk/python#claudesdkclient) untuk menjaga sesi tetap terbuka di seluruh giliran. Ukuran kontainer sehingga dapat menampung jumlah maksimum sesi bersamaan dalam memori.130Kontainer mengekspos endpoint HTTP atau WebSocket dan memetakan setiap sesi aktif ke kueri berjalan lama dan subproses di belakangnya. Di TypeScript, gunakan [`streamInput()`](/docs/id/agent-sdk/typescript#query-object) untuk menambahkan giliran ke sesi aktif dan [`startup()`](/docs/id/agent-sdk/typescript#startup) untuk pra-pemanasan subproses sebelum lalu lintas masuk. Di Python, gunakan [`ClaudeSDKClient`](/docs/id/agent-sdk/python#claudesdkclient) untuk menjaga sesi tetap terbuka di seluruh giliran. Ukuran kontainer sehingga dapat menampung jumlah maksimum sesi bersamaan dalam memori.
89 131
90<h3 id="hybrid-sessions">132<h3 id="hybrid-sessions">
91 Sesi Hybrid133 Sesi Hybrid
92</h3>134</h3>
93 135
94Kontainer ephemeral yang terhidrasi dari [`SessionStore`](/id/agent-sdk/session-storage) 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.136Kontainer ephemeral yang terhidrasi dari [`SessionStore`](/docs/id/agent-sdk/session-storage) 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 ketika pengguna kembali.
95 137
96Contoh 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.138Contoh 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.
97 139
98Sesuaikan 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.140Sesuaikan 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.
99 141
100Pola ini bergantung pada melanjutkan sesi berdasarkan ID dengan penyimpanan bersama yang terlampir:142Pola bergantung pada melanjutkan sesi berdasarkan ID dengan penyimpanan bersama yang terlampir:
101 143
102<CodeGroup>144<CodeGroup>
103 ```typescript TypeScript theme={null}145 ```typescript TypeScript theme={null}
116 ```158 ```
117 159
118 ```python Python theme={null}160 ```python Python theme={null}
119 from claude_agent_sdk import query, ClaudeAgentOptions161 from claude_agent_sdk import query, ClaudeAgentOptions, SessionStore
162 import asyncio
163
164 user_input: str = ...
165 session_id: str = ... # looked up from your database by user
166 session_store: SessionStore = ... # S3, Redis, Postgres, or your own adapter
120 167
168
169 async def main():
121 async for message in query(170 async for message in query(
122 prompt=user_input,171 prompt=user_input,
123 options=ClaudeAgentOptions(172 options=ClaudeAgentOptions(
124 resume=session_id, # looked up from your database by user173 resume=session_id,
125 session_store=session_store, # S3, Redis, Postgres, or your own adapter174 session_store=session_store,
126 ),175 ),
127 ):176 ):
128 ...177 ...
178
179
180 asyncio.run(main())
129 ```181 ```
130</CodeGroup>182</CodeGroup>
131 183
132Lihat [Penyimpanan sesi](/id/agent-sdk/session-storage) untuk antarmuka `SessionStore` lengkap dan adaptor referensi.
133
134<h3 id="multi-agent-container">184<h3 id="multi-agent-container">
135 Kontainer multi-agen185 Kontainer multi-agen
136</h3>186</h3>
147 Sandboxing berbasis kontainer197 Sandboxing berbasis kontainer
148</h3>198</h3>
149 199
150Jalankan 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.200Jalankan SDK di dalam kontainer bersandbox untuk isolasi proses, batasan sumber daya, kontrol jaringan, dan sistem file yang bersifat sementara.
151 201
152Pertanyaan yang harus dijawab saat memilih penyedia:202Pertanyaan yang harus dijawab saat memilih penyedia:
153 203
154* **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.204* **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.
155* **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.205* **Cold-start latency**: berapa lama dari "membuat sandbox" hingga "siap menerima permintaan pertama." Pola ephemeral memerlukan start sub-detik. Pola long-running dapat mentoleransi lebih banyak.
156* **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.206* **Persistent storage**: apakah penyedia menawarkan volume yang tahan lama atau hanya disk ephemeral. Pola hybrid memerlukan penyimpanan yang tahan lama di suatu tempat, baik di dalam sandbox atau di sampingnya.
157* **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.207* **Pricing model**: per-detik, per-permintaan, atau penagihan per jam tetap. Harga per-detik cocok untuk beban kerja ephemeral yang bersifat bursty. Per jam cocok untuk sesi long-running.
158* **Jaringan**: dukungan untuk aturan egress khusus, proxy outbound, dan peering VPC pribadi untuk lingkungan yang diatur.208* **Networking**: dukungan untuk aturan egress khusus, proxy outbound, dan peering VPC pribadi untuk lingkungan yang diatur.
159
160Penyedia untuk dievaluasi:
161 209
162* [Modal Sandbox](https://modal.com/docs/guide/sandbox), dengan [demo implementation](https://modal.com/docs/examples/claude-slack-gif-creator)210Untuk opsi self-hosted seperti Docker, gVisor, dan Firecracker, serta konfigurasi isolasi terperinci, lihat [Isolation Technologies](/docs/id/agent-sdk/secure-deployment#isolation-technologies).
163* [Cloudflare Sandboxes](https://github.com/cloudflare/sandbox-sdk)
164* [Daytona](https://www.daytona.io/)
165* [E2B](https://e2b.dev/)
166* [Fly Machines](https://fly.io/docs/machines/)
167* [Vercel Sandbox](https://vercel.com/docs/functions/sandbox)
168
169Untuk opsi self-hosted seperti Docker, gVisor, dan Firecracker, dan konfigurasi isolasi terperinci, lihat [Isolation Technologies](/id/agent-sdk/secure-deployment#isolation-technologies).
170 211
171<h3 id="runtime-dependencies">212<h3 id="runtime-dependencies">
172 Dependensi runtime213 Runtime dependencies
173</h3>214</h3>
174 215
175Kontainer hanya memerlukan runtime bahasa SDK Anda:216Kontainer memerlukan runtime bahasa SDK Anda:
176 217
177* Python 3.10+ untuk Python SDK, atau Node.js 18+ untuk TypeScript SDK218* Python 3.10+ untuk Python SDK, atau Node.js 18+ untuk TypeScript SDK
178* Kedua paket SDK menggabungkan binary Claude Code asli untuk platform host, jadi tidak perlu instalasi Claude Code atau Node.js terpisah untuk CLI yang dihasilkan219* Baik TypeScript maupun Python SDK membundel binary Claude Code native untuk sebagian besar instalasi, dan CLI yang dihasilkan tidak memerlukan instalasi Node.js terpisah. Lihat [catatan instalasi quickstart](/docs/id/agent-sdk/quickstart) untuk instalasi yang memerlukan instalasi Claude Code native terpisah.
179 220
180Binary yang digabungkan disematkan ke versi paket SDK, jadi memperbarui SDK adalah cara Anda memperbarui CLI. SDK mengikuti semver: ambil rilis patch secara berkelanjutan dan tinjau changelog [TypeScript](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) atau [Python](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md) sebelum mengambil minor.221Binary yang dibundel disematkan ke versi paket SDK, jadi memperbarui SDK adalah cara Anda memperbarui CLI. SDK mengikuti semver: ambil rilis patch secara berkelanjutan dan tinjau changelog [TypeScript](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) atau [Python](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md) sebelum mengambil minor.
181 222
182<h3 id="resources">223<h3 id="resources">
183 Sumber daya224 Resources
184</h3>225</h3>
185 226
1861 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](#scaling-and-concurrency) untuk cara menghitung agent per host.2271 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](#scaling-and-concurrency) untuk cara menghitung agent per host.
187 228
188<h3 id="network">229<h3 id="network">
189 Jaringan230 Network
190</h3>231</h3>
191 232
192SDK memerlukan outbound HTTPS ke `api.anthropic.com`, atau ke endpoint regional penyedia Anda saat berjalan di Amazon Bedrock atau Google Cloud's Agent Platform. Jika agent Anda menggunakan [MCP servers](/id/agent-sdk/mcp) 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](/id/agent-sdk/secure-deployment) untuk pola lengkapnya.233SDK memerlukan outbound HTTPS ke `api.anthropic.com`, atau ke endpoint regional penyedia Anda saat berjalan di Amazon Bedrock atau Agent Platform Google Cloud. Jika agent Anda menggunakan [MCP servers](/docs/id/agent-sdk/mcp) atau tool eksternal, mereka memerlukan akses outbound ke endpoint tersebut juga. Untuk production, arahkan traffic outbound melalui egress proxy yang memberlakukan domain allowlists, menyuntikkan kredensial, dan mencatat permintaan. Lihat [Secure Deployment](/docs/id/agent-sdk/secure-deployment) untuk pola lengkapnya.
193 234
194Untuk 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.235Untuk 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.
195 236
196<h2 id="handle-production-concerns">237<h2 id="handle-production-concerns">
197 Menangani kekhawatiran produksi238 Tangani kekhawatiran produksi
198</h2>239</h2>
199 240
200Kerjakan keputusan-keputusan ini sebelum mengirimkan agen yang di-host sendiri.241Kerjakan keputusan-keputusan ini sebelum meluncurkan agen yang di-host sendiri.
201 242
202<h3 id="session-and-state-persistence">243<h3 id="session-and-state-persistence">
203 Persistensi sesi dan status244 Persistensi sesi dan status
204</h3>245</h3>
205 246
206Disk 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 adaptor [`SessionStore`](/id/agent-sdk/session-storage). Lihat [Implementasi referensi](/id/agent-sdk/session-storage#reference-implementations) untuk adaptor S3, Redis, dan Postgres serta suite kepatuhan untuk milik Anda sendiri.247Disk lokal default hilang saat restart, scale-down, atau perpindahan ke node yang berbeda. Untuk sesi apa pun yang diharapkan pengguna untuk lanjutkan, cerminkan transkrip ke penyimpanan yang tahan lama dengan adaptor [`SessionStore`](/docs/id/agent-sdk/session-storage). Lihat [Implementasi referensi](/docs/id/agent-sdk/session-storage#reference-implementations) untuk adaptor S3, Redis, dan Postgres serta suite kepatuhan untuk milik Anda sendiri.
207 248
208Tiga hal yang perlu diketahui tentang perilaku `SessionStore`:249Tiga hal yang perlu diketahui tentang perilaku `SessionStore`:
209 250
210* **Transkrip saja**: `SessionStore` mencerminkan transkrip, bukan file memori `CLAUDE.md` atau artefak direktori kerja lainnya. Pasang volume bersama atau sinkronkan yang lain secara terpisah.251* **Transkrip saja**: `SessionStore` mencerminkan transkrip, bukan file memori `CLAUDE.md` atau artefak direktori kerja lainnya. Pasang volume bersama atau sinkronkan yang lain secara terpisah.
211* **Cermin, bukan penggantian**: subprocess menulis ke disk lokal terlebih dahulu, dan penyimpanan menerima salinan setiap batch. Penulisan lokal tetap berwenang.252* **Cermin, bukan penggantian**: subprocess menulis ke disk lokal terlebih dahulu, dan SDK meneruskan salinan setiap batch ke toko. Transkrip lokal sesi segar bertahan lebih lama dari jalannya; sesi yang dilanjutkan dari toko menghapus salinan lokalnya di akhir, jadi toko menyimpan salinan yang tahan lama saja. Lihat [Arsitektur dual-write](/docs/id/agent-sdk/session-storage#dual-write-architecture).
212* **Pesan `mirror_error`**: batch yang ditolak penyimpanan dikirim hingga tiga kali total, dengan backoff singkat sebelum setiap percobaan ulang; panggilan yang habis waktu tidak dicoba ulang. Jika batch masih gagal, SDK melepasnya, memancarkan pesan `{ type: "system", subtype: "mirror_error" }`, dan melanjutkan kueri. Beri peringatan pada ini jika daya tahan penyimpanan penting.253* **Pesan `mirror_error`**: ketika SDK tidak dapat mengirimkan batch ke toko, SDK menghapus batch, memancarkan pesan `{ type: "system", subtype: "mirror_error" }`, dan melanjutkan kueri. Beri peringatan pada ini jika daya tahan toko penting. Lihat [Mirror writes adalah best-effort](/docs/id/agent-sdk/session-storage#mirror-writes-are-best-effort) untuk perilaku retry dan timeout.
213 254
214<h3 id="observability">255<h3 id="observability">
215 Observabilitas256 Observabilitas
216</h3>257</h3>
217 258
218Agen 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.259Agen Agent SDK adalah proses yang berumur panjang yang menelurkan 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.
219 260
220SDK mewarisi konfigurasi OpenTelemetry dari lingkungan. Atur variabel lingkungan OTEL di tingkat kontainer atau orchestrator sehingga setiap panggilan `query()` 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.261SDK mewarisi konfigurasi OpenTelemetry dari lingkungan. Atur variabel lingkungan OTEL di tingkat kontainer atau orchestrator sehingga setiap panggilan `query()` 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.
221 262
222```bash title=".env' theme={null}263```bash title=".env" theme={null}
223CLAUDE_CODE_ENABLE_TELEMETRY=1264CLAUDE_CODE_ENABLE_TELEMETRY=1
224CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1265CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1
225OTEL_TRACES_EXPORTER=otlp266OTEL_TRACES_EXPORTER=otlp
229OTEL_EXPORTER_OTLP_ENDPOINT=http://collector.example.com:4318270OTEL_EXPORTER_OTLP_ENDPOINT=http://collector.example.com:4318
230```271```
231 272
232Teks prompt dan input alat tidak disertakan dalam ekspor secara default. Lihat [Kontrol data sensitif dalam ekspor](/id/agent-sdk/observability#control-sensitive-data-in-exports) untuk flag opt-in, dan [Observabilitas](/id/agent-sdk/observability) untuk katalog sinyal lengkap.273Teks prompt dan input alat tidak disertakan dalam ekspor secara default. Lihat [Kontrol data sensitif dalam ekspor](/docs/id/agent-sdk/observability#control-sensitive-data-in-exports) untuk flag opt-in, dan [Observabilitas](/docs/id/agent-sdk/observability) untuk katalog sinyal lengkap.
233 274
234<h3 id="auth-and-secrets">275<h3 id="auth-and-secrets">
235 Otentikasi dan rahasia276 Auth dan rahasia
236</h3>277</h3>
237 278
238Tiga kekhawatiran otentikasi penting pada waktu hosting:279Tiga kekhawatiran auth penting pada waktu hosting:
239 280
240* **API Anthropic**: subprocess membaca `ANTHROPIC_API_KEY` dari lingkungannya. Suplai dari manajer rahasia Anda, atau atur `ANTHROPIC_BASE_URL` untuk merutekan panggilan model melalui proxy yang menyuntikkan kunci di luar kontainer. Lihat [Manajemen kredensial](/id/agent-sdk/secure-deployment#credential-management) untuk pola proxy dan [Ikhtisar SDK](/id/agent-sdk/overview#get-started) untuk metode otentikasi yang didukung.281* **Anthropic API**: subprocess membaca `ANTHROPIC_API_KEY` dari lingkungannya. Suplai dari manajer rahasia Anda, atau atur `ANTHROPIC_BASE_URL` untuk merutekan panggilan model melalui proxy yang menyuntikkan kunci di luar kontainer. Lihat [Manajemen kredensial](/docs/id/agent-sdk/secure-deployment#credential-management) untuk pola proxy dan [Setup dalam quickstart SDK](/docs/id/agent-sdk/quickstart#setup) untuk metode autentikasi yang didukung.
241* **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.282* **Inbound**: letakkan autentikasi di gateway di depan kontainer agen. Agen harus menerima permintaan yang sudah diautentikasi sebelumnya dan tidak boleh menjadi komponen yang memvalidasi token pengguna.
242* **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.283* **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.
243 284
244<h3 id="scaling-and-concurrency">285<h3 id="scaling-and-concurrency">
253agents per host = (host RAM - overhead) / (per-session RAM ceiling)294agents per host = (host RAM - overhead) / (per-session RAM ceiling)
254```295```
255 296
256Ukur batas RAM per-sesi dengan menjalankan sesi representatif ke panjang target Anda di bawah beban alat yang diharapkan dan mencatat RSS puncak. Titik awal 1 GiB dalam [Sumber Daya](#resources) adalah lantai, bukan batas.297Ukur ceiling per-sesi dengan menjalankan sesi representatif ke panjang target Anda di bawah beban alat yang diharapkan dan mencatat RSS puncak. Titik awal 1 GiB di [Resources](#resources) adalah lantai, bukan ceiling.
257
258Perutean horizontal-scale tergantung pada pola Anda. Untuk sesi yang berjalan lama, di mana kontainer menampung banyak sesi, jalankan pool kontainer di belakang load balancer dan pin setiap sesi ke satu kontainer menggunakan consistent hashing pada `sessionId`. Sesi yang disematkan terus mengenai kontainer yang sama, dan oleh karena itu subprocess yang sama yang berjalan, sampai dikeluarkan atau kontainer dimulai ulang.
259 298
260Fanout besar dari [subagen](/id/agent-sdk/subagents) bersamaan dari sesi tunggal dapat mencapai batas laju API. Pecahkan pekerjaan menjadi batch yang lebih kecil daripada mengeluarkan satu dispatch yang lebar.299Perutean horizontal-scale tergantung pada pola Anda. Untuk sesi yang berjalan lama, di mana kontainer menyimpan banyak sesi, jalankan pool kontainer di belakang load balancer dan pin setiap sesi ke satu kontainer menggunakan consistent hashing pada `sessionId`. Sesi yang disematkan terus mengenai kontainer yang sama, dan oleh karena itu subprocess yang sama yang berjalan, sampai dikeluarkan atau kontainer dimulai ulang.
261 300
262<h3 id="cost">301<h3 id="cost">
263 Biaya302 Biaya
264</h3>303</h3>
265 304
266Biaya 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](/id/agent-sdk/cost-tracking) untuk akuntansi token per-sesi.305Biaya 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](/docs/id/agent-sdk/cost-tracking) untuk akuntansi token per-sesi.
267 306
268<h3 id="multi-tenant-isolation">307<h3 id="multi-tenant-isolation">
269 Isolasi multi-tenant308 Isolasi multi-tenant
273 312
274Untuk mengisolasi tenant di dalam kontainer bersama:313Untuk mengisolasi tenant di dalam kontainer bersama:
275 314
276* Lewatkan `settingSources: []` dalam TypeScript atau `setting_sources=[]` dalam Python sehingga tidak ada pengaturan sistem file yang dimuat.315* Lewatkan `settingSources: []` di TypeScript atau `setting_sources=[]` di Python untuk melewati pengaturan pengguna, proyek, dan lokal.
277* Atur `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` dalam `env`. [Memori otomatis](/id/memory#auto-memory) di `~/.claude/projects/<project>/memory/` dimuat ke prompt sistem terlepas dari `settingSources`. Lihat [Apa yang settingSources tidak kontrol](/id/agent-sdk/claude-code-features#what-settingsources-does-not-control) untuk input lain yang dimuat tanpa syarat.316* Atur `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` di `env`. [Auto memory](/docs/id/memory#auto-memory) di `~/.claude/projects/<project>/memory/` dimuat ke prompt sistem terlepas dari `settingSources`. Lihat [Apa yang settingSources tidak kontrol](/docs/id/agent-sdk/claude-code-features#what-settingsources-does-not-control) untuk input lain yang dimuat tanpa syarat.
278* Arahkan `CLAUDE_CONFIG_DIR` ke direktori per-tenant sehingga tenant tidak berbagi konfigurasi global `~/.claude.json`.317* Arahkan `CLAUDE_CONFIG_DIR` ke direktori per-tenant sehingga tenant tidak berbagi config global `~/.claude.json`. Ketika setiap direktori config melayani satu direktori kerja dan Anda tidak berbagi [`SessionStore`](/docs/id/agent-sdk/session-storage) di seluruh tenant, Anda juga dapat mengatur [`CLAUDE_CODE_PROJECT_DIR_NAME`](/docs/id/sessions#name-the-project-directory-yourself) di `env` untuk menjaga jalur transkrip di bawahnya tetap pendek. Memerlukan Agent SDK TypeScript v0.3.234 atau lebih baru, atau Agent SDK Python v0.2.140 atau lebih baru.
279* Gunakan direktori kerja per-tenant. Lewatkan `cwd` secara eksplisit pada setiap panggilan `query()`.318* Gunakan direktori kerja per-tenant. Lewatkan `cwd` secara eksplisit pada setiap panggilan `query()`.
280* 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.319* 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.
281 320
282Contoh di bawah ini menerapkan empat opsi tingkat SDK bersama-sama. Bangun `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.321Contoh di bawah ini menerapkan pengaturan, auto memory, direktori config, dan opsi direktori kerja bersama-sama. Bangun `tenantDir` dan `configDir` sehingga setiap tenant mendapatkan jalur yang tidak dapat dibaca tenant lain. Di TypeScript, `env` menggantikan lingkungan subprocess, jadi sebarkan `...process.env` untuk menjaga variabel yang diwarisi seperti `PATH` dan `ANTHROPIC_API_KEY`. Di Python, `env` digabungkan di atas lingkungan yang diwarisi.
283 322
284<CodeGroup>323<CodeGroup>
285 ```typescript TypeScript theme={null}324 ```typescript TypeScript theme={null}
307 346
308 ```python Python theme={null}347 ```python Python theme={null}
309 from claude_agent_sdk import query, ClaudeAgentOptions348 from claude_agent_sdk import query, ClaudeAgentOptions
349 import asyncio
310 350
351 prompt: str = ...
352 tenant_dir: str = ...
353 config_dir: str = ...
354
355
356 async def main():
311 async for message in query(357 async for message in query(
312 prompt=prompt,358 prompt=prompt,
313 options=ClaudeAgentOptions(359 options=ClaudeAgentOptions(
320 ),366 ),
321 ):367 ):
322 ...368 ...
369
370
371 asyncio.run(main())
323 ```372 ```
324</CodeGroup>373</CodeGroup>
325 374
326Untuk kontrol jaringan per-tenant, lihat [Penerapan Aman](/id/agent-sdk/secure-deployment).
327
328<h2 id="known-limitations">375<h2 id="known-limitations">
329 Keterbatasan yang Diketahui376 Keterbatasan yang Diketahui
330</h2>377</h2>
331 378
332Rencanakan di sekitar ini dalam desain penyebaran Anda.379Rencanakan hal-hal ini dalam desain penyebaran Anda.
333 380
334| Keterbatasan | Apa yang harus dilakukan |381| Keterbatasan | Apa yang harus dilakukan |
335| ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |382| ------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
336| 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. |383| Tidak ada timeout sesi tingkat atas | Sesi tidak akan habis waktu dengan sendirinya. Atur `maxTurns` di TypeScript atau `max_turns` di Python untuk membatasi berapa banyak putaran penggunaan alat yang diambil agen sebelum berhenti. |
337| Pertumbuhan memori selama sesi panjang | Batasi panjang sesi atau daur ulang subproses secara berkala. Lihat [Penskalaan dan konkurensi](#scaling-and-concurrency). |384| Pertumbuhan memori selama sesi panjang | Batasi panjang sesi atau daur ulang subproses secara berkala. Lihat [Penskalaan dan konkurensi](#scaling-and-concurrency). |
338| Fanout subagen paralel besar dapat mencapai batas laju | Pecah pekerjaan menjadi batch yang lebih kecil daripada mengeluarkan satu pengiriman yang luas. |385| Fanout subagen paralel besar dapat mencapai batas laju | Pecah pekerjaan menjadi batch yang lebih kecil daripada mengeluarkan satu pengiriman yang luas. |
339| Tidak ada batas waktu dinding per subagen | Batasi setiap [subagen](/id/agent-sdk/subagents) 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. |386| Tidak ada batas waktu dinding per subagen | Batasi setiap [subagen](/docs/id/agent-sdk/subagents) dengan `maxTurns` di `AgentDefinition`-nya. `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` menetapkan watchdog stall yang aktif ketika subagen berhenti menghasilkan output; ini bukan batas waktu runtime total. |
387
388<h2 id="troubleshoot-deployment-failures">
389 Troubleshoot deployment failures
390</h2>
391
392Gunakan bagian ini ketika agen yang berfungsi di mesin Anda gagal dalam layanan yang diterapkan. Setiap item di bawah ini menamai kegagalan dan menautkan entri yang mencakupnya:
393
394* **CLI not found at service start**: di Python, kontainer atau manajer layanan menjalankan aplikasi Anda dengan `PATH` yang berbeda dari shell Anda, jadi instalasi yang berfungsi secara lokal tidak terlihat oleh proses. Di TypeScript, pembangunan gambar melewatkan dependensi opsional SDK, atau `pathToClaudeCodeExecutable` menunjuk ke file yang tidak ada di gambar. Lihat [Claude Code not found](/docs/id/agent-sdk/troubleshooting#clinotfounderror-claude-code-not-found).
395* **CLI present in the image but won't launch**: Claude Code tidak dapat dimulai dari biner yang tidak cocok dengan arsitektur kontainer atau libc, atau dari file yang kehilangan izin eksekusinya dalam pembangunan gambar. Lihat [Failed to start Claude Code](/docs/id/agent-sdk/troubleshooting#cliconnectionerror-failed-to-start-claude-code).
396* **Claude Code process exits mid-run**: kesalahan yang diterima aplikasi Anda tergantung pada bahasa SDK dan pada apakah CLI melaporkan hasil kesalahan terlebih dahulu. Entri di bawah [CLI process exit](/docs/id/agent-sdk/troubleshooting#cli-process-exit) mencakup setiap pesan.
340 397
341<h2 id="next-steps">398<h2 id="next-steps">
342 Langkah Berikutnya399 Langkah Berikutnya
343</h2>400</h2>
344 401
345* [Hosting cookbook](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb): panduan notebook dengan [kode yang dapat digunakan](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting) untuk Docker, Modal, dan Kubernetes.402* [Hosting cookbook](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb): panduan notebook dengan [kode yang dapat digunakan](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting) untuk Docker, Modal, dan Kubernetes.
346* [Session storage](/id/agent-sdk/session-storage): pertahankan transkrip di seluruh host dengan adaptor `SessionStore`.403* [Session storage](/docs/id/agent-sdk/session-storage): pertahankan transkrip di seluruh host dengan adaptor `SessionStore`.
347* [Observability](/id/agent-sdk/observability): ekspor jejak OTEL, metrik, dan log ke kolektor Anda.404* [Observability](/docs/id/agent-sdk/observability): ekspor jejak OTEL, metrik, dan log ke kolektor Anda.
348* [Secure deployment](/id/agent-sdk/secure-deployment): kontrol jaringan, manajemen kredensial, dan pengerasan isolasi.405* [Secure deployment](/docs/id/agent-sdk/secure-deployment): kontrol jaringan, manajemen kredensial, dan pengerasan isolasi.
349* [Cost tracking](/id/agent-sdk/cost-tracking): akuntansi token dan biaya per-sesi.406* [Cost tracking](/docs/id/agent-sdk/cost-tracking): akuntansi token dan biaya per-sesi.