SpyBara
Go Premium

Documentation 2026-05-07 22:59 UTC to 2026-05-08 22:00 UTC

29 files changed +2,202 −1,647. View all changes and history on the product overview
2026
Sun 31 06:39 Sat 30 06:23 Fri 29 06:38 Thu 28 06:37 Wed 27 06:42 Tue 26 06:33 Sun 24 06:25 Sat 23 06:18 Fri 22 06:33 Thu 21 06:36 Wed 20 06:35 Tue 19 06:34 Mon 18 23:59 Sun 17 01:01 Fri 15 22:58 Thu 14 17:02 Wed 13 23:01 Tue 12 22:57 Mon 11 23:00 Sun 10 23:03 Sat 9 04:57 Fri 8 22:00 Thu 7 22:59 Tue 5 23:00 Mon 4 22:58 Sat 2 18:14 Fri 1 18:19
Details

14 14 

15## Kontrol pengaturan filesystem dengan settingSources15## Kontrol pengaturan filesystem dengan settingSources

16 16 

17Opsi sumber pengaturan ([`setting_sources`](/id/agent-sdk/python#claude-agent-options) di Python, [`settingSources`](/id/agent-sdk/typescript#setting-source) di TypeScript) mengontrol pengaturan berbasis filesystem mana yang dimuat SDK. Teruskan daftar eksplisit untuk memilih sumber tertentu, atau teruskan array kosong untuk menonaktifkan pengaturan pengguna, proyek, dan lokal.17Opsi sumber pengaturan ([`setting_sources`](/id/agent-sdk/python#claudeagentoptions) di Python, [`settingSources`](/id/agent-sdk/typescript#settingsource) di TypeScript) mengontrol pengaturan berbasis filesystem mana yang dimuat SDK. Teruskan daftar eksplisit untuk memilih sumber tertentu, atau teruskan array kosong untuk menonaktifkan pengaturan pengguna, proyek, dan lokal.

18 18 

19Contoh ini memuat pengaturan tingkat pengguna dan tingkat proyek dengan menetapkan `settingSources` ke `["user", "project"]`:19Contoh ini memuat pengaturan tingkat pengguna dan tingkat proyek dengan menetapkan `settingSources` ke `["user", "project"]`:

20 20 


65 ```65 ```

66</CodeGroup>66</CodeGroup>

67 67 

68Setiap sumber memuat pengaturan dari lokasi tertentu, di mana `<cwd>` adalah direktori kerja yang Anda teruskan melalui opsi `cwd` (atau direktori saat ini proses jika tidak diatur). Untuk definisi tipe lengkap, lihat [`SettingSource`](/id/agent-sdk/typescript#setting-source) (TypeScript) atau [`SettingSource`](/id/agent-sdk/python#setting-source) (Python).68Setiap sumber memuat pengaturan dari lokasi tertentu, di mana `<cwd>` adalah direktori kerja yang Anda teruskan melalui opsi `cwd`, atau direktori saat ini proses jika tidak diatur. Untuk definisi tipe lengkap, lihat [`SettingSource`](/id/agent-sdk/typescript#settingsource) (TypeScript) atau [`SettingSource`](/id/agent-sdk/python#settingsource) (Python).

69 69 

70| Sumber | Apa yang dimuat | Lokasi |70| Sumber | Apa yang dimuat | Lokasi |

71| :---------- | :------------------------------------------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------- |71| :---------- | :------------------------------------------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------- |


119 119 

120Skills adalah file markdown yang memberikan agen Anda pengetahuan khusus dan alur kerja yang dapat dipanggil. Tidak seperti `CLAUDE.md` (yang dimuat setiap sesi), skills dimuat sesuai permintaan. Agen menerima deskripsi skill pada startup dan memuat konten lengkap ketika relevan.120Skills adalah file markdown yang memberikan agen Anda pengetahuan khusus dan alur kerja yang dapat dipanggil. Tidak seperti `CLAUDE.md` (yang dimuat setiap sesi), skills dimuat sesuai permintaan. Agen menerima deskripsi skill pada startup dan memuat konten lengkap ketika relevan.

121 121 

122Skills ditemukan dari filesystem melalui `settingSources`. Dengan opsi default, skills pengguna dan proyek dimuat secara otomatis. Tool `Skill` diaktifkan secara default ketika Anda tidak menentukan `allowedTools`. Jika Anda menggunakan daftar allowlist `allowedTools`, sertakan `"Skill"` secara eksplisit.122Skills ditemukan dari filesystem melalui `settingSources`. Ketika opsi `skills` pada `query()` dihilangkan, skills pengguna dan proyek yang ditemukan diaktifkan dan tool Skill tersedia, sesuai dengan perilaku CLI. Untuk mengontrol skills mana yang diaktifkan, berikan `skills` sebagai `"all"`, daftar nama skill, atau `[]` untuk menonaktifkan semua. SDK mengaktifkan tool Skill secara otomatis ketika `skills` diatur, jadi Anda tidak perlu menambahkannya ke `allowedTools`.

123 123 

124<CodeGroup>124<CodeGroup>

125 ```python Python theme={null}125 ```python Python theme={null}


131 prompt="Review this PR using our code review checklist",131 prompt="Review this PR using our code review checklist",

132 options=ClaudeAgentOptions(132 options=ClaudeAgentOptions(

133 setting_sources=["user", "project"],133 setting_sources=["user", "project"],

134 allowed_tools=["Skill", "Read", "Grep", "Glob"],134 skills="all",

135 allowed_tools=["Read", "Grep", "Glob"],

135 ),136 ),

136 ):137 ):

137 if isinstance(message, ResultMessage) and message.subtype == "success":138 if isinstance(message, ResultMessage) and message.subtype == "success":


147 prompt: "Review this PR using our code review checklist",148 prompt: "Review this PR using our code review checklist",

148 options: {149 options: {

149 settingSources: ["user", "project"],150 settingSources: ["user", "project"],

150 allowedTools: ["Skill", "Read", "Grep", "Glob"]151 skills: "all",

152 allowedTools: ["Read", "Grep", "Glob"]

151 }153 }

152 })) {154 })) {

153 if (message.type === "result" && message.subtype === "success") {155 if (message.type === "result" && message.subtype === "success") {


258Agent SDK memberi Anda akses ke beberapa cara untuk memperluas perilaku agen Anda. Jika Anda tidak yakin mana yang digunakan, tabel ini memetakan tujuan umum ke pendekatan yang tepat.260Agent SDK memberi Anda akses ke beberapa cara untuk memperluas perilaku agen Anda. Jika Anda tidak yakin mana yang digunakan, tabel ini memetakan tujuan umum ke pendekatan yang tepat.

259 261 

260| Anda ingin... | Gunakan | Permukaan SDK |262| Anda ingin... | Gunakan | Permukaan SDK |

261| :--------------------------------------------------------------------------------------------------- | :----------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |263| :--------------------------------------------------------------------------------------------------- | :-------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

262| Atur konvensi proyek yang selalu diikuti agen Anda | [CLAUDE.md](/id/memory) | `settingSources: ["project"]` memuat secara otomatis |264| Atur konvensi proyek yang selalu diikuti agen Anda | [CLAUDE.md](/id/memory) | `settingSources: ["project"]` memuat secara otomatis |

263| Berikan agen materi referensi yang dimuat ketika relevan | [Skills](/id/agent-sdk/skills) | `settingSources` + `allowedTools: ["Skill"]` |265| Berikan agen materi referensi yang dimuat ketika relevan | [Skills](/id/agent-sdk/skills) | `settingSources` + `skills` option |

264| Jalankan alur kerja yang dapat digunakan kembali (deploy, review, release) | [Skills yang dapat dipanggil pengguna](/id/agent-sdk/skills) | `settingSources` + `allowedTools: ["Skill"]` |266| Jalankan alur kerja yang dapat digunakan kembali (deploy, review, release) | [User-invocable skills](/id/agent-sdk/skills) | `settingSources` + `skills` option |

265| Delegasikan subtask terisolasi ke konteks segar (research, review) | [Subagents](/id/agent-sdk/subagents) | Parameter `agents` + `allowedTools: ["Agent"]` |267| Delegasikan subtask terisolasi ke konteks segar (research, review) | [Subagents](/id/agent-sdk/subagents) | Parameter `agents` + `allowedTools: ["Agent"]` |

266| Koordinasikan beberapa instans Claude Code dengan daftar tugas bersama dan pesan inter-agen langsung | [Agent teams](/id/agent-teams) | Tidak dikonfigurasi langsung melalui opsi SDK. Agent teams adalah fitur CLI di mana satu sesi bertindak sebagai pemimpin tim, mengoordinasikan pekerjaan di seluruh rekan kerja independen |268| Koordinasikan beberapa instans Claude Code dengan daftar tugas bersama dan pesan inter-agen langsung | [Agent teams](/id/agent-teams) | Tidak dikonfigurasi langsung melalui opsi SDK. Agent teams adalah fitur CLI di mana satu sesi bertindak sebagai pemimpin tim, mengoordinasikan pekerjaan di seluruh rekan kerja independen |

267| Jalankan logika deterministik pada tool calls (audit, block, transform) | [Hooks](/id/agent-sdk/hooks) | Parameter `hooks` dengan callbacks, atau skrip shell dimuat melalui `settingSources` |269| Jalankan logika deterministik pada tool calls (audit, block, transform) | [Hooks](/id/agent-sdk/hooks) | Parameter `hooks` dengan callbacks, atau skrip shell dimuat melalui `settingSources` |

agent-sdk/mcp.md +772 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Hubungkan ke alat eksternal dengan MCP

6 

7> Konfigurasi server MCP untuk memperluas agen Anda dengan alat eksternal. Mencakup jenis transport, pencarian alat untuk set alat besar, autentikasi, dan penanganan kesalahan.

8 

9[Model Context Protocol (MCP)](https://modelcontextprotocol.io/docs/getting-started/intro) adalah standar terbuka untuk menghubungkan agen AI ke alat eksternal dan sumber data. Dengan MCP, agen Anda dapat menanyakan database, mengintegrasikan dengan API seperti Slack dan GitHub, dan terhubung ke layanan lain tanpa menulis implementasi alat khusus.

10 

11Server MCP dapat berjalan sebagai proses lokal, terhubung melalui HTTP, atau dieksekusi langsung dalam aplikasi SDK Anda.

12 

13<Note>

14 Halaman ini mencakup konfigurasi MCP untuk Agent SDK. Untuk menambahkan server MCP ke Claude Code CLI sehingga dimuat di setiap proyek, lihat [Cakupan instalasi MCP](/id/mcp#mcp-installation-scopes).

15</Note>

16 

17## Quickstart

18 

19Contoh ini terhubung ke server MCP [dokumentasi Claude Code](https://code.claude.com/docs) menggunakan [transport HTTP](#httpsse-servers) dan menggunakan [`allowedTools`](#allow-mcp-tools) dengan wildcard untuk mengizinkan semua alat dari server.

20 

21<CodeGroup>

22 ```typescript TypeScript theme={null}

23 import { query } from "@anthropic-ai/claude-agent-sdk";

24 

25 for await (const message of query({

26 prompt: "Use the docs MCP server to explain what hooks are in Claude Code",

27 options: {

28 mcpServers: {

29 "claude-code-docs": {

30 type: "http",

31 url: "https://code.claude.com/docs/mcp"

32 }

33 },

34 allowedTools: ["mcp__claude-code-docs__*"]

35 }

36 })) {

37 if (message.type === "result" && message.subtype === "success") {

38 console.log(message.result);

39 }

40 }

41 ```

42 

43 ```python Python theme={null}

44 import asyncio

45 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

46 

47 

48 async def main():

49 options = ClaudeAgentOptions(

50 mcp_servers={

51 "claude-code-docs": {

52 "type": "http",

53 "url": "https://code.claude.com/docs/mcp",

54 }

55 },

56 allowed_tools=["mcp__claude-code-docs__*"],

57 )

58 

59 async for message in query(

60 prompt="Use the docs MCP server to explain what hooks are in Claude Code",

61 options=options,

62 ):

63 if isinstance(message, ResultMessage) and message.subtype == "success":

64 print(message.result)

65 

66 

67 asyncio.run(main())

68 ```

69</CodeGroup>

70 

71Agen terhubung ke server dokumentasi, mencari informasi tentang hooks, dan mengembalikan hasilnya.

72 

73## Tambahkan server MCP

74 

75Anda dapat mengonfigurasi server MCP dalam kode saat memanggil `query()`, atau dalam file `.mcp.json` yang dimuat melalui [`settingSources`](#from-a-config-file).

76 

77### Dalam kode

78 

79Teruskan server MCP langsung dalam opsi `mcpServers`:

80 

81<CodeGroup>

82 ```typescript TypeScript theme={null}

83 import { query } from "@anthropic-ai/claude-agent-sdk";

84 

85 for await (const message of query({

86 prompt: "List files in my project",

87 options: {

88 mcpServers: {

89 filesystem: {

90 command: "npx",

91 args: ["-y", "@modelcontextprotocol/server-filesystem", "/Users/me/projects"]

92 }

93 },

94 allowedTools: ["mcp__filesystem__*"]

95 }

96 })) {

97 if (message.type === "result" && message.subtype === "success") {

98 console.log(message.result);

99 }

100 }

101 ```

102 

103 ```python Python theme={null}

104 import asyncio

105 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

106 

107 

108 async def main():

109 options = ClaudeAgentOptions(

110 mcp_servers={

111 "filesystem": {

112 "command": "npx",

113 "args": [

114 "-y",

115 "@modelcontextprotocol/server-filesystem",

116 "/Users/me/projects",

117 ],

118 }

119 },

120 allowed_tools=["mcp__filesystem__*"],

121 )

122 

123 async for message in query(prompt="List files in my project", options=options):

124 if isinstance(message, ResultMessage) and message.subtype == "success":

125 print(message.result)

126 

127 

128 asyncio.run(main())

129 ```

130</CodeGroup>

131 

132### Dari file konfigurasi

133 

134Buat file `.mcp.json` di root proyek Anda. File ini diambil ketika sumber pengaturan `project` diaktifkan, yang merupakan default untuk opsi `query()`. Jika Anda menetapkan `settingSources` secara eksplisit, sertakan `"project"` agar file ini dimuat:

135 

136```json theme={null}

137{

138 "mcpServers": {

139 "filesystem": {

140 "command": "npx",

141 "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/me/projects"]

142 }

143 }

144}

145```

146 

147## Izinkan alat MCP

148 

149Alat MCP memerlukan izin eksplisit sebelum Claude dapat menggunakannya. Tanpa izin, Claude akan melihat bahwa alat tersedia tetapi tidak akan dapat memanggilnya.

150 

151### Konvensi penamaan alat

152 

153Alat MCP mengikuti pola penamaan `mcp__<server-name>__<tool-name>`. Misalnya, server GitHub bernama `"github"` dengan alat `list_issues` menjadi `mcp__github__list_issues`.

154 

155### Berikan akses dengan allowedTools

156 

157Gunakan `allowedTools` untuk menentukan alat MCP mana yang dapat digunakan Claude:

158 

159```typescript hidelines={1,-1} theme={null}

160const _ = {

161 options: {

162 mcpServers: {

163 // your servers

164 },

165 allowedTools: [

166 "mcp__github__*", // All tools from the github server

167 "mcp__db__query", // Only the query tool from db server

168 "mcp__slack__send_message" // Only send_message from slack server

169 ]

170 }

171};

172```

173 

174Wildcard (`*`) memungkinkan Anda mengizinkan semua alat dari server tanpa mencantumkan masing-masing secara individual.

175 

176<Note>

177 **Lebih suka `allowedTools` daripada mode izin untuk akses MCP.** `permissionMode: "acceptEdits"` tidak secara otomatis menyetujui alat MCP (hanya edit file dan perintah Bash filesystem). `permissionMode: "bypassPermissions"` secara otomatis menyetujui alat MCP tetapi juga menonaktifkan semua prompt keamanan lainnya, yang lebih luas dari yang diperlukan. Wildcard dalam `allowedTools` memberikan akses ke server MCP yang Anda inginkan dan tidak lebih. Lihat [Mode izin](/id/agent-sdk/permissions#permission-modes) untuk perbandingan lengkap.

178</Note>

179 

180### Temukan alat yang tersedia

181 

182Untuk melihat alat apa yang disediakan server MCP, periksa dokumentasi server atau terhubung ke server dan periksa pesan init `system`:

183 

184```typescript theme={null}

185for await (const message of query({ prompt: "...", options })) {

186 if (message.type === "system" && message.subtype === "init") {

187 console.log("Available MCP tools:", message.mcp_servers);

188 }

189}

190```

191 

192## Jenis transport

193 

194Server MCP berkomunikasi dengan agen Anda menggunakan protokol transport yang berbeda. Periksa dokumentasi server untuk melihat transport mana yang didukungnya:

195 

196* Jika dokumen memberi Anda **perintah untuk dijalankan** (seperti `npx @modelcontextprotocol/server-github`), gunakan stdio

197* Jika dokumen memberi Anda **URL**, gunakan HTTP atau SSE

198* Jika Anda membangun alat Anda sendiri dalam kode, gunakan server MCP SDK

199 

200### Server stdio

201 

202Proses lokal yang berkomunikasi melalui stdin/stdout. Gunakan ini untuk server MCP yang Anda jalankan di mesin yang sama:

203 

204<Tabs>

205 <Tab title="Dalam kode">

206 <CodeGroup>

207 ```typescript TypeScript hidelines={1,-1} theme={null}

208 const _ = {

209 options: {

210 mcpServers: {

211 github: {

212 command: "npx",

213 args: ["-y", "@modelcontextprotocol/server-github"],

214 env: {

215 GITHUB_TOKEN: process.env.GITHUB_TOKEN

216 }

217 }

218 },

219 allowedTools: ["mcp__github__list_issues", "mcp__github__search_issues"]

220 }

221 };

222 ```

223 

224 ```python Python theme={null}

225 options = ClaudeAgentOptions(

226 mcp_servers={

227 "github": {

228 "command": "npx",

229 "args": ["-y", "@modelcontextprotocol/server-github"],

230 "env": {"GITHUB_TOKEN": os.environ["GITHUB_TOKEN"]},

231 }

232 },

233 allowed_tools=["mcp__github__list_issues", "mcp__github__search_issues"],

234 )

235 ```

236 </CodeGroup>

237 </Tab>

238 

239 <Tab title=".mcp.json">

240 ```json theme={null}

241 {

242 "mcpServers": {

243 "github": {

244 "command": "npx",

245 "args": ["-y", "@modelcontextprotocol/server-github"],

246 "env": {

247 "GITHUB_TOKEN": "${GITHUB_TOKEN}"

248 }

249 }

250 }

251 }

252 ```

253 </Tab>

254</Tabs>

255 

256### Server HTTP/SSE

257 

258Gunakan HTTP atau SSE untuk server MCP yang dihosting cloud dan API jarak jauh:

259 

260<Tabs>

261 <Tab title="Dalam kode">

262 <CodeGroup>

263 ```typescript TypeScript hidelines={1,-1} theme={null}

264 const _ = {

265 options: {

266 mcpServers: {

267 "remote-api": {

268 type: "sse",

269 url: "https://api.example.com/mcp/sse",

270 headers: {

271 Authorization: `Bearer ${process.env.API_TOKEN}`

272 }

273 }

274 },

275 allowedTools: ["mcp__remote-api__*"]

276 }

277 };

278 ```

279 

280 ```python Python theme={null}

281 options = ClaudeAgentOptions(

282 mcp_servers={

283 "remote-api": {

284 "type": "sse",

285 "url": "https://api.example.com/mcp/sse",

286 "headers": {"Authorization": f"Bearer {os.environ['API_TOKEN']}"},

287 }

288 },

289 allowed_tools=["mcp__remote-api__*"],

290 )

291 ```

292 </CodeGroup>

293 </Tab>

294 

295 <Tab title=".mcp.json">

296 ```json theme={null}

297 {

298 "mcpServers": {

299 "remote-api": {

300 "type": "sse",

301 "url": "https://api.example.com/mcp/sse",

302 "headers": {

303 "Authorization": "Bearer ${API_TOKEN}"

304 }

305 }

306 }

307 }

308 ```

309 </Tab>

310</Tabs>

311 

312Untuk HTTP (non-streaming), gunakan `"type": "http"` sebagai gantinya.

313 

314### Server MCP SDK

315 

316Tentukan alat khusus langsung dalam kode aplikasi Anda daripada menjalankan proses server terpisah. Lihat [panduan alat khusus](/id/agent-sdk/custom-tools) untuk detail implementasi.

317 

318## Pencarian alat MCP

319 

320Ketika Anda memiliki banyak alat MCP yang dikonfigurasi, definisi alat dapat mengonsumsi bagian signifikan dari jendela konteks Anda. Pencarian alat mengatasi ini dengan menahan definisi alat dari konteks dan memuat hanya yang Claude butuhkan untuk setiap giliran.

321 

322Pencarian alat diaktifkan secara default. Lihat [Pencarian alat](/id/agent-sdk/tool-search) untuk opsi konfigurasi dan detail.

323 

324Untuk detail lebih lanjut, termasuk praktik terbaik dan menggunakan pencarian alat dengan alat SDK khusus, lihat [panduan pencarian alat](/id/agent-sdk/tool-search).

325 

326## Autentikasi

327 

328Sebagian besar server MCP memerlukan autentikasi untuk mengakses layanan eksternal. Teruskan kredensial melalui variabel lingkungan dalam konfigurasi server.

329 

330### Teruskan kredensial melalui variabel lingkungan

331 

332Gunakan bidang `env` untuk meneruskan kunci API, token, dan kredensial lainnya ke server MCP:

333 

334<Tabs>

335 <Tab title="Dalam kode">

336 <CodeGroup>

337 ```typescript TypeScript hidelines={1,-1} theme={null}

338 const _ = {

339 options: {

340 mcpServers: {

341 github: {

342 command: "npx",

343 args: ["-y", "@modelcontextprotocol/server-github"],

344 env: {

345 GITHUB_TOKEN: process.env.GITHUB_TOKEN

346 }

347 }

348 },

349 allowedTools: ["mcp__github__list_issues"]

350 }

351 };

352 ```

353 

354 ```python Python theme={null}

355 options = ClaudeAgentOptions(

356 mcp_servers={

357 "github": {

358 "command": "npx",

359 "args": ["-y", "@modelcontextprotocol/server-github"],

360 "env": {"GITHUB_TOKEN": os.environ["GITHUB_TOKEN"]},

361 }

362 },

363 allowed_tools=["mcp__github__list_issues"],

364 )

365 ```

366 </CodeGroup>

367 </Tab>

368 

369 <Tab title=".mcp.json">

370 ```json theme={null}

371 {

372 "mcpServers": {

373 "github": {

374 "command": "npx",

375 "args": ["-y", "@modelcontextprotocol/server-github"],

376 "env": {

377 "GITHUB_TOKEN": "${GITHUB_TOKEN}"

378 }

379 }

380 }

381 }

382 ```

383 

384 Sintaks `${GITHUB_TOKEN}` memperluas variabel lingkungan saat runtime.

385 </Tab>

386</Tabs>

387 

388Lihat [Daftar masalah dari repositori](#list-issues-from-a-repository) untuk contoh kerja lengkap dengan logging debug.

389 

390### Header HTTP untuk server jarak jauh

391 

392Untuk server HTTP dan SSE, teruskan header autentikasi langsung dalam konfigurasi server:

393 

394<Tabs>

395 <Tab title="Dalam kode">

396 <CodeGroup>

397 ```typescript TypeScript hidelines={1,-1} theme={null}

398 const _ = {

399 options: {

400 mcpServers: {

401 "secure-api": {

402 type: "http",

403 url: "https://api.example.com/mcp",

404 headers: {

405 Authorization: `Bearer ${process.env.API_TOKEN}`

406 }

407 }

408 },

409 allowedTools: ["mcp__secure-api__*"]

410 }

411 };

412 ```

413 

414 ```python Python theme={null}

415 options = ClaudeAgentOptions(

416 mcp_servers={

417 "secure-api": {

418 "type": "http",

419 "url": "https://api.example.com/mcp",

420 "headers": {"Authorization": f"Bearer {os.environ['API_TOKEN']}"},

421 }

422 },

423 allowed_tools=["mcp__secure-api__*"],

424 )

425 ```

426 </CodeGroup>

427 </Tab>

428 

429 <Tab title=".mcp.json">

430 ```json theme={null}

431 {

432 "mcpServers": {

433 "secure-api": {

434 "type": "http",

435 "url": "https://api.example.com/mcp",

436 "headers": {

437 "Authorization": "Bearer ${API_TOKEN}"

438 }

439 }

440 }

441 }

442 ```

443 

444 Sintaks `${API_TOKEN}` memperluas variabel lingkungan saat runtime.

445 </Tab>

446</Tabs>

447 

448### Autentikasi OAuth2

449 

450[Spesifikasi MCP mendukung OAuth 2.1](https://modelcontextprotocol.io/specification/2025-03-26/basic/authorization) untuk otorisasi. SDK tidak menangani alur OAuth secara otomatis, tetapi Anda dapat meneruskan token akses melalui header setelah menyelesaikan alur OAuth dalam aplikasi Anda:

451 

452<CodeGroup>

453 ```typescript TypeScript theme={null}

454 // After completing OAuth flow in your app

455 const accessToken = await getAccessTokenFromOAuthFlow();

456 

457 const options = {

458 mcpServers: {

459 "oauth-api": {

460 type: "http",

461 url: "https://api.example.com/mcp",

462 headers: {

463 Authorization: `Bearer ${accessToken}`

464 }

465 }

466 },

467 allowedTools: ["mcp__oauth-api__*"]

468 };

469 ```

470 

471 ```python Python theme={null}

472 # After completing OAuth flow in your app

473 access_token = await get_access_token_from_oauth_flow()

474 

475 options = ClaudeAgentOptions(

476 mcp_servers={

477 "oauth-api": {

478 "type": "http",

479 "url": "https://api.example.com/mcp",

480 "headers": {"Authorization": f"Bearer {access_token}"},

481 }

482 },

483 allowed_tools=["mcp__oauth-api__*"],

484 )

485 ```

486</CodeGroup>

487 

488## Contoh

489 

490### Daftar masalah dari repositori

491 

492Contoh ini terhubung ke [server MCP GitHub](https://github.com/modelcontextprotocol/servers/tree/main/src/github) untuk mencantumkan masalah terbaru. Contoh ini mencakup logging debug untuk memverifikasi koneksi MCP dan panggilan alat.

493 

494Sebelum menjalankan, buat [token akses pribadi GitHub](https://github.com/settings/tokens) dengan cakupan `repo` dan atur sebagai variabel lingkungan:

495 

496```bash theme={null}

497export GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx

498```

499 

500<CodeGroup>

501 ```typescript TypeScript theme={null}

502 import { query } from "@anthropic-ai/claude-agent-sdk";

503 

504 for await (const message of query({

505 prompt: "List the 3 most recent issues in anthropics/claude-code",

506 options: {

507 mcpServers: {

508 github: {

509 command: "npx",

510 args: ["-y", "@modelcontextprotocol/server-github"],

511 env: {

512 GITHUB_TOKEN: process.env.GITHUB_TOKEN

513 }

514 }

515 },

516 allowedTools: ["mcp__github__list_issues"]

517 }

518 })) {

519 // Verify MCP server connected successfully

520 if (message.type === "system" && message.subtype === "init") {

521 console.log("MCP servers:", message.mcp_servers);

522 }

523 

524 // Log when Claude calls an MCP tool

525 if (message.type === "assistant") {

526 for (const block of message.message.content) {

527 if (block.type === "tool_use" && block.name.startsWith("mcp__")) {

528 console.log("MCP tool called:", block.name);

529 }

530 }

531 }

532 

533 // Print the final result

534 if (message.type === "result" && message.subtype === "success") {

535 console.log(message.result);

536 }

537 }

538 ```

539 

540 ```python Python theme={null}

541 import asyncio

542 import os

543 from claude_agent_sdk import (

544 query,

545 ClaudeAgentOptions,

546 ResultMessage,

547 SystemMessage,

548 AssistantMessage,

549 )

550 

551 

552 async def main():

553 options = ClaudeAgentOptions(

554 mcp_servers={

555 "github": {

556 "command": "npx",

557 "args": ["-y", "@modelcontextprotocol/server-github"],

558 "env": {"GITHUB_TOKEN": os.environ["GITHUB_TOKEN"]},

559 }

560 },

561 allowed_tools=["mcp__github__list_issues"],

562 )

563 

564 async for message in query(

565 prompt="List the 3 most recent issues in anthropics/claude-code",

566 options=options,

567 ):

568 # Verify MCP server connected successfully

569 if isinstance(message, SystemMessage) and message.subtype == "init":

570 print("MCP servers:", message.data.get("mcp_servers"))

571 

572 # Log when Claude calls an MCP tool

573 if isinstance(message, AssistantMessage):

574 for block in message.content:

575 if hasattr(block, "name") and block.name.startswith("mcp__"):

576 print("MCP tool called:", block.name)

577 

578 # Print the final result

579 if isinstance(message, ResultMessage) and message.subtype == "success":

580 print(message.result)

581 

582 

583 asyncio.run(main())

584 ```

585</CodeGroup>

586 

587### Tanyakan database

588 

589Contoh ini menggunakan [server MCP Postgres](https://github.com/modelcontextprotocol/servers/tree/main/src/postgres) untuk menanyakan database. String koneksi diteruskan sebagai argumen ke server. Agen secara otomatis menemukan skema database, menulis kueri SQL, dan mengembalikan hasilnya:

590 

591<CodeGroup>

592 ```typescript TypeScript theme={null}

593 import { query } from "@anthropic-ai/claude-agent-sdk";

594 

595 // Connection string from environment variable

596 const connectionString = process.env.DATABASE_URL;

597 

598 for await (const message of query({

599 // Natural language query - Claude writes the SQL

600 prompt: "How many users signed up last week? Break it down by day.",

601 options: {

602 mcpServers: {

603 postgres: {

604 command: "npx",

605 // Pass connection string as argument to the server

606 args: ["-y", "@modelcontextprotocol/server-postgres", connectionString]

607 }

608 },

609 // Allow only read queries, not writes

610 allowedTools: ["mcp__postgres__query"]

611 }

612 })) {

613 if (message.type === "result" && message.subtype === "success") {

614 console.log(message.result);

615 }

616 }

617 ```

618 

619 ```python Python theme={null}

620 import asyncio

621 import os

622 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

623 

624 

625 async def main():

626 # Connection string from environment variable

627 connection_string = os.environ["DATABASE_URL"]

628 

629 options = ClaudeAgentOptions(

630 mcp_servers={

631 "postgres": {

632 "command": "npx",

633 # Pass connection string as argument to the server

634 "args": [

635 "-y",

636 "@modelcontextprotocol/server-postgres",

637 connection_string,

638 ],

639 }

640 },

641 # Allow only read queries, not writes

642 allowed_tools=["mcp__postgres__query"],

643 )

644 

645 # Natural language query - Claude writes the SQL

646 async for message in query(

647 prompt="How many users signed up last week? Break it down by day.",

648 options=options,

649 ):

650 if isinstance(message, ResultMessage) and message.subtype == "success":

651 print(message.result)

652 

653 

654 asyncio.run(main())

655 ```

656</CodeGroup>

657 

658## Penanganan kesalahan

659 

660Server MCP dapat gagal terhubung karena berbagai alasan: proses server mungkin tidak terinstal, kredensial mungkin tidak valid, atau server jarak jauh mungkin tidak dapat dijangkau.

661 

662SDK mengirimkan pesan `system` dengan subtype `init` di awal setiap kueri. Pesan ini mencakup status koneksi untuk setiap server MCP. Periksa bidang `status` untuk mendeteksi kegagalan koneksi sebelum agen mulai bekerja:

663 

664<CodeGroup>

665 ```typescript TypeScript theme={null}

666 import { query } from "@anthropic-ai/claude-agent-sdk";

667 

668 for await (const message of query({

669 prompt: "Process data",

670 options: {

671 mcpServers: {

672 "data-processor": dataServer

673 }

674 }

675 })) {

676 if (message.type === "system" && message.subtype === "init") {

677 const failedServers = message.mcp_servers.filter((s) => s.status !== "connected");

678 

679 if (failedServers.length > 0) {

680 console.warn("Failed to connect:", failedServers);

681 }

682 }

683 

684 if (message.type === "result" && message.subtype === "error_during_execution") {

685 console.error("Execution failed");

686 }

687 }

688 ```

689 

690 ```python Python theme={null}

691 import asyncio

692 from claude_agent_sdk import query, ClaudeAgentOptions, SystemMessage, ResultMessage

693 

694 

695 async def main():

696 options = ClaudeAgentOptions(mcp_servers={"data-processor": data_server})

697 

698 async for message in query(prompt="Process data", options=options):

699 if isinstance(message, SystemMessage) and message.subtype == "init":

700 failed_servers = [

701 s

702 for s in message.data.get("mcp_servers", [])

703 if s.get("status") != "connected"

704 ]

705 

706 if failed_servers:

707 print(f"Failed to connect: {failed_servers}")

708 

709 if (

710 isinstance(message, ResultMessage)

711 and message.subtype == "error_during_execution"

712 ):

713 print("Execution failed")

714 

715 

716 asyncio.run(main())

717 ```

718</CodeGroup>

719 

720## Troubleshooting

721 

722### Server menunjukkan status "failed"

723 

724Periksa pesan `init` untuk melihat server mana yang gagal terhubung:

725 

726```typescript theme={null}

727if (message.type === "system" && message.subtype === "init") {

728 for (const server of message.mcp_servers) {

729 if (server.status === "failed") {

730 console.error(`Server ${server.name} failed to connect`);

731 }

732 }

733}

734```

735 

736Penyebab umum:

737 

738* **Variabel lingkungan yang hilang**: Pastikan token dan kredensial yang diperlukan diatur. Untuk server stdio, periksa bidang `env` cocok dengan apa yang diharapkan server.

739* **Server tidak terinstal**: Untuk perintah `npx`, verifikasi paket ada dan Node.js ada di PATH Anda.

740* **String koneksi tidak valid**: Untuk server database, verifikasi format string koneksi dan bahwa database dapat diakses.

741* **Masalah jaringan**: Untuk server HTTP/SSE jarak jauh, periksa URL dapat dijangkau dan firewall apa pun memungkinkan koneksi.

742 

743### Alat tidak dipanggil

744 

745Jika Claude melihat alat tetapi tidak menggunakannya, periksa bahwa Anda telah memberikan izin dengan `allowedTools`:

746 

747```typescript hidelines={1,-1} theme={null}

748const _ = {

749 options: {

750 mcpServers: {

751 // your servers

752 },

753 allowedTools: ["mcp__servername__*"] // Required for Claude to use the tools

754 }

755};

756```

757 

758### Timeout koneksi

759 

760SDK MCP memiliki timeout default 60 detik untuk koneksi server. Jika server Anda membutuhkan waktu lebih lama untuk memulai, koneksi akan gagal. Untuk server yang memerlukan waktu startup lebih lama, pertimbangkan:

761 

762* Menggunakan server yang lebih ringan jika tersedia

763* Pre-warming server sebelum memulai agen Anda

764* Memeriksa log server untuk penyebab inisialisasi lambat

765 

766## Sumber daya terkait

767 

768* **[Panduan alat khusus](/id/agent-sdk/custom-tools)**: Bangun server MCP Anda sendiri yang berjalan in-process dengan aplikasi SDK Anda

769* **[Izin](/id/agent-sdk/permissions)**: Kontrol alat MCP mana yang dapat digunakan agen Anda dengan `allowedTools` dan `disallowedTools`

770* **[Referensi SDK TypeScript](/id/agent-sdk/typescript)**: Referensi API lengkap termasuk opsi konfigurasi MCP

771* **[Referensi SDK Python](/id/agent-sdk/python)**: Referensi API lengkap termasuk opsi konfigurasi MCP

772* **[Direktori server MCP](https://github.com/modelcontextprotocol/servers)**: Jelajahi server MCP yang tersedia untuk database, API, dan lainnya

Details

834| `plugins` | `list[SdkPluginConfig]` | `[]` | Muat plugin kustom dari jalur lokal. Lihat [Plugins](/id/agent-sdk/plugins) untuk detail |834| `plugins` | `list[SdkPluginConfig]` | `[]` | Muat plugin kustom dari jalur lokal. Lihat [Plugins](/id/agent-sdk/plugins) untuk detail |

835| `sandbox` | [`SandboxSettings`](#sandboxsettings) ` \| None` | `None` | Konfigurasi perilaku sandbox secara programatis. Lihat [Sandbox settings](#sandboxsettings) untuk detail |835| `sandbox` | [`SandboxSettings`](#sandboxsettings) ` \| None` | `None` | Konfigurasi perilaku sandbox secara programatis. Lihat [Sandbox settings](#sandboxsettings) untuk detail |

836| `setting_sources` | `list[SettingSource] \| None` | `None` (CLI defaults: all sources) | Kontrol pengaturan filesystem mana yang akan dimuat. Teruskan `[]` untuk menonaktifkan pengaturan pengguna, proyek, dan lokal. Pengaturan kebijakan terkelola dimuat terlepas dari itu. Lihat [Use Claude Code features](/id/agent-sdk/claude-code-features#what-settingsources-does-not-control) |836| `setting_sources` | `list[SettingSource] \| None` | `None` (CLI defaults: all sources) | Kontrol pengaturan filesystem mana yang akan dimuat. Teruskan `[]` untuk menonaktifkan pengaturan pengguna, proyek, dan lokal. Pengaturan kebijakan terkelola dimuat terlepas dari itu. Lihat [Use Claude Code features](/id/agent-sdk/claude-code-features#what-settingsources-does-not-control) |

837| `skills` | `list[str] \| Literal["all"] \| None` | `None` | Skills yang tersedia untuk sesi. Teruskan `"all"` untuk mengaktifkan setiap skill yang ditemukan, atau daftar nama skill. Ketika diatur, SDK mengaktifkan tool Skill secara otomatis tanpa mencantumkannya dalam `allowed_tools`. Lihat [Skills](/id/agent-sdk/skills) |

837| `max_thinking_tokens` | `int \| None` | `None` | *Deprecated* - Token maksimal untuk blok thinking. Gunakan `thinking` sebagai gantinya |838| `max_thinking_tokens` | `int \| None` | `None` | *Deprecated* - Token maksimal untuk blok thinking. Gunakan `thinking` sebagai gantinya |

838| `thinking` | [`ThinkingConfig`](#thinkingconfig) ` \| None` | `None` | Mengontrol perilaku extended thinking. Mengambil prioritas atas `max_thinking_tokens` |839| `thinking` | [`ThinkingConfig`](#thinkingconfig) ` \| None` | `None` | Mengontrol perilaku extended thinking. Mengambil prioritas atas `max_thinking_tokens` |

839| `effort` | `Literal["low", "medium", "high", "xhigh", "max"] \| None` | `None` | Tingkat usaha untuk kedalaman thinking |840| `effort` | `Literal["low", "medium", "high", "xhigh", "max"] \| None` | `None` | Tingkat usaha untuk kedalaman thinking |

agent-sdk/sessions.md +324 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Bekerja dengan sesi

6 

7> Bagaimana sesi mempertahankan riwayat percakapan agen, dan kapan menggunakan continue, resume, dan fork untuk kembali ke run sebelumnya.

8 

9Sesi adalah riwayat percakapan yang dikumpulkan SDK saat agen Anda bekerja. Sesi berisi prompt Anda, setiap pemanggilan alat yang dibuat agen, setiap hasil alat, dan setiap respons. SDK menulisnya ke disk secara otomatis sehingga Anda dapat kembali ke sesi tersebut nanti.

10 

11Kembali ke sesi berarti agen memiliki konteks lengkap dari sebelumnya: file yang sudah dibaca, analisis yang sudah dilakukan, keputusan yang sudah dibuat. Anda dapat mengajukan pertanyaan lanjutan, pulih dari gangguan, atau bercabang untuk mencoba pendekatan berbeda.

12 

13<Note>

14 Sesi mempertahankan **percakapan**, bukan sistem file. Untuk membuat snapshot dan mengembalikan perubahan file yang dibuat agen, gunakan [file checkpointing](/id/agent-sdk/file-checkpointing).

15</Note>

16 

17Panduan ini mencakup cara memilih pendekatan yang tepat untuk aplikasi Anda, antarmuka SDK yang melacak sesi secara otomatis, cara menangkap ID sesi dan menggunakan `resume` dan `fork` secara manual, dan apa yang perlu diketahui tentang melanjutkan sesi di seluruh host.

18 

19## Pilih pendekatan

20 

21Seberapa banyak penanganan sesi yang Anda butuhkan tergantung pada bentuk aplikasi Anda. Manajemen sesi menjadi penting ketika Anda mengirim beberapa prompt yang harus berbagi konteks. Dalam satu panggilan `query()`, agen sudah mengambil sebanyak putaran yang diperlukan, dan prompt izin serta `AskUserQuestion` [ditangani dalam loop](/id/agent-sdk/user-input) (mereka tidak mengakhiri panggilan).

22 

23| Apa yang Anda bangun | Apa yang digunakan |

24| :--------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- |

25| Tugas sekali jalan: prompt tunggal, tanpa lanjutan | Tidak ada yang ekstra. Satu panggilan `query()` menanganinya. |

26| Obrolan multi-putaran dalam satu proses | [`ClaudeSDKClient` (Python) atau `continue: true` (TypeScript)](#automatic-session-management). SDK melacak sesi untuk Anda tanpa penanganan ID. |

27| Lanjutkan dari mana Anda berhenti setelah restart proses | `continue_conversation=True` (Python) / `continue: true` (TypeScript). Melanjutkan sesi terbaru di direktori, tidak perlu ID. |

28| Lanjutkan sesi masa lalu tertentu (bukan yang terbaru) | Tangkap ID sesi dan teruskan ke `resume`. |

29| Coba pendekatan alternatif tanpa kehilangan yang asli | Fork sesi. |

30| Tugas stateless, tidak ingin apa pun ditulis ke disk (TypeScript saja) | Atur [`persistSession: false`](/id/agent-sdk/typescript#options). Sesi hanya ada dalam memori untuk durasi panggilan. Python selalu bertahan ke disk. |

31 

32### Continue, resume, dan fork

33 

34Continue, resume, dan fork adalah bidang opsi yang Anda atur pada `query()` ([`ClaudeAgentOptions`](/id/agent-sdk/python#claudeagentoptions) di Python, [`Options`](/id/agent-sdk/typescript#options) di TypeScript).

35 

36**Continue** dan **resume** keduanya mengambil sesi yang ada dan menambahkannya. Perbedaannya adalah cara mereka menemukan sesi tersebut:

37 

38* **Continue** menemukan sesi terbaru di direktori saat ini. Anda tidak melacak apa pun. Bekerja dengan baik ketika aplikasi Anda menjalankan satu percakapan pada satu waktu.

39* **Resume** mengambil ID sesi tertentu. Anda melacak ID. Diperlukan ketika Anda memiliki beberapa sesi (misalnya, satu per pengguna dalam aplikasi multi-pengguna) atau ingin kembali ke sesi yang bukan yang terbaru.

40 

41**Fork** berbeda: fork membuat sesi baru yang dimulai dengan salinan riwayat asli. Asli tetap tidak berubah. Gunakan fork untuk mencoba arah berbeda sambil mempertahankan opsi untuk kembali.

42 

43## Manajemen sesi otomatis

44 

45Kedua SDK menawarkan antarmuka yang melacak status sesi untuk Anda di seluruh panggilan, sehingga Anda tidak perlu melewatkan ID secara manual. Gunakan ini untuk percakapan multi-putaran dalam satu proses.

46 

47### Python: `ClaudeSDKClient`

48 

49[`ClaudeSDKClient`](/id/agent-sdk/python#claudesdkclient) menangani ID sesi secara internal. Setiap panggilan ke `client.query()` secara otomatis melanjutkan sesi yang sama. Panggil [`client.receive_response()`](/id/agent-sdk/python#claudesdkclient) untuk mengulangi pesan untuk kueri saat ini. Klien harus digunakan sebagai manajer konteks async.

50 

51Contoh ini menjalankan dua kueri terhadap `client` yang sama. Yang pertama meminta agen untuk menganalisis modul; yang kedua memintanya untuk refactor modul tersebut. Karena kedua panggilan melalui instance klien yang sama, kueri kedua memiliki konteks lengkap dari yang pertama tanpa `resume` atau ID sesi eksplisit:

52 

53```python Python theme={null}

54import asyncio

55from claude_agent_sdk import (

56 ClaudeSDKClient,

57 ClaudeAgentOptions,

58 AssistantMessage,

59 ResultMessage,

60 TextBlock,

61)

62 

63 

64def print_response(message):

65 """Print only the human-readable parts of a message."""

66 if isinstance(message, AssistantMessage):

67 for block in message.content:

68 if isinstance(block, TextBlock):

69 print(block.text)

70 elif isinstance(message, ResultMessage):

71 cost = (

72 f"${message.total_cost_usd:.4f}"

73 if message.total_cost_usd is not None

74 else "N/A"

75 )

76 print(f"[done: {message.subtype}, cost: {cost}]")

77 

78 

79async def main():

80 options = ClaudeAgentOptions(

81 allowed_tools=["Read", "Edit", "Glob", "Grep"],

82 )

83 

84 async with ClaudeSDKClient(options=options) as client:

85 # First query: client captures the session ID internally

86 await client.query("Analyze the auth module")

87 async for message in client.receive_response():

88 print_response(message)

89 

90 # Second query: automatically continues the same session

91 await client.query("Now refactor it to use JWT")

92 async for message in client.receive_response():

93 print_response(message)

94 

95 

96asyncio.run(main())

97```

98 

99Lihat [referensi Python SDK](/id/agent-sdk/python#choosing-between-query-and-claudesdkclient) untuk detail tentang kapan menggunakan `ClaudeSDKClient` vs fungsi `query()` mandiri.

100 

101### TypeScript: `continue: true`

102 

103SDK TypeScript stabil (fungsi `query()` yang digunakan di seluruh dokumen ini, kadang-kadang disebut V1) tidak memiliki objek klien yang memegang sesi seperti `ClaudeSDKClient` Python. Sebagai gantinya, teruskan `continue: true` pada setiap panggilan `query()` berikutnya dan SDK mengambil sesi terbaru di direktori saat ini. Tidak perlu pelacakan ID.

104 

105Contoh ini membuat dua panggilan `query()` terpisah. Yang pertama membuat sesi segar; yang kedua menetapkan `continue: true`, yang memberitahu SDK untuk menemukan dan melanjutkan sesi terbaru di disk. Agen memiliki konteks lengkap dari panggilan pertama:

106 

107```typescript TypeScript theme={null}

108import { query } from "@anthropic-ai/claude-agent-sdk";

109 

110// First query: creates a new session

111for await (const message of query({

112 prompt: "Analyze the auth module",

113 options: { allowedTools: ["Read", "Glob", "Grep"] }

114})) {

115 if (message.type === "result" && message.subtype === "success") {

116 console.log(message.result);

117 }

118}

119 

120// Second query: continue: true resumes the most recent session

121for await (const message of query({

122 prompt: "Now refactor it to use JWT",

123 options: {

124 continue: true,

125 allowedTools: ["Read", "Edit", "Write", "Glob", "Grep"]

126 }

127})) {

128 if (message.type === "result" && message.subtype === "success") {

129 console.log(message.result);

130 }

131}

132```

133 

134<Note>

135 [API sesi V2](/id/agent-sdk/typescript-v2-preview) eksperimental, yang menyediakan `createSession()` dengan pola `send` / `stream`, sudah tidak digunakan lagi. Gunakan fungsi V1 `query()` dan opsi sesi yang dijelaskan di halaman ini sebagai gantinya.

136</Note>

137 

138## Gunakan opsi sesi dengan `query()`

139 

140### Tangkap ID sesi

141 

142Resume dan fork memerlukan ID sesi. Bacanya dari bidang `session_id` pada pesan hasil ([`ResultMessage`](/id/agent-sdk/python#resultmessage) di Python, [`SDKResultMessage`](/id/agent-sdk/typescript#sdkresultmessage) di TypeScript), yang ada di setiap hasil terlepas dari kesuksesan atau kesalahan. Di TypeScript ID juga tersedia lebih awal sebagai bidang langsung pada `SystemMessage` init; di Python itu bersarang di dalam `SystemMessage.data`.

143 

144<CodeGroup>

145 ```python Python theme={null}

146 import asyncio

147 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

148 

149 

150 async def main():

151 session_id = None

152 

153 async for message in query(

154 prompt="Analyze the auth module and suggest improvements",

155 options=ClaudeAgentOptions(

156 allowed_tools=["Read", "Glob", "Grep"],

157 ),

158 ):

159 if isinstance(message, ResultMessage):

160 session_id = message.session_id

161 if message.subtype == "success":

162 print(message.result)

163 

164 print(f"Session ID: {session_id}")

165 return session_id

166 

167 

168 session_id = asyncio.run(main())

169 ```

170 

171 ```typescript TypeScript theme={null}

172 import { query } from "@anthropic-ai/claude-agent-sdk";

173 

174 let sessionId: string | undefined;

175 

176 for await (const message of query({

177 prompt: "Analyze the auth module and suggest improvements",

178 options: { allowedTools: ["Read", "Glob", "Grep"] }

179 })) {

180 if (message.type === "result") {

181 sessionId = message.session_id;

182 if (message.subtype === "success") {

183 console.log(message.result);

184 }

185 }

186 }

187 

188 console.log(`Session ID: ${sessionId}`);

189 ```

190</CodeGroup>

191 

192### Lanjutkan berdasarkan ID

193 

194Teruskan ID sesi ke `resume` untuk kembali ke sesi tertentu tersebut. Agen mengambil dengan konteks lengkap dari mana pun sesi berakhir. Alasan umum untuk melanjutkan:

195 

196* **Lanjutkan tugas yang selesai.** Agen sudah menganalisis sesuatu; sekarang Anda ingin itu bertindak atas analisis tersebut tanpa membaca ulang file.

197* **Pulih dari batas.** Run pertama berakhir dengan `error_max_turns` atau `error_max_budget_usd` (lihat [Tangani hasil](/id/agent-sdk/agent-loop#handle-the-result)); lanjutkan dengan batas yang lebih tinggi.

198* **Mulai ulang proses Anda.** Anda menangkap ID sebelum shutdown dan ingin memulihkan percakapan.

199 

200Contoh ini melanjutkan sesi dari [Tangkap ID sesi](#capture-the-session-id) dengan prompt lanjutan. Karena Anda melanjutkan, agen sudah memiliki analisis sebelumnya dalam konteks:

201 

202<CodeGroup>

203 ```python Python theme={null}

204 # Earlier session analyzed the code; now build on that analysis

205 async for message in query(

206 prompt="Now implement the refactoring you suggested",

207 options=ClaudeAgentOptions(

208 resume=session_id,

209 allowed_tools=["Read", "Edit", "Write", "Glob", "Grep"],

210 ),

211 ):

212 if isinstance(message, ResultMessage) and message.subtype == "success":

213 print(message.result)

214 ```

215 

216 ```typescript TypeScript theme={null}

217 // Earlier session analyzed the code; now build on that analysis

218 for await (const message of query({

219 prompt: "Now implement the refactoring you suggested",

220 options: {

221 resume: sessionId,

222 allowedTools: ["Read", "Edit", "Write", "Glob", "Grep"]

223 }

224 })) {

225 if (message.type === "result" && message.subtype === "success") {

226 console.log(message.result);

227 }

228 }

229 ```

230</CodeGroup>

231 

232<Tip>

233 Jika panggilan `resume` mengembalikan sesi segar alih-alih riwayat yang diharapkan, penyebab paling umum adalah `cwd` yang tidak cocok. Sesi disimpan di bawah `~/.claude/projects/<encoded-cwd>/*.jsonl`, di mana `<encoded-cwd>` adalah direktori kerja absolut dengan setiap karakter non-alfanumerik diganti dengan `-` (jadi `/Users/me/proj` menjadi `-Users-me-proj`). Jika panggilan resume Anda berjalan dari direktori berbeda, SDK mencari di tempat yang salah. File sesi juga perlu ada di mesin saat ini.

234</Tip>

235 

236Untuk melanjutkan sesi di seluruh mesin atau di lingkungan serverless, cerminkan transkrip ke penyimpanan bersama dengan adaptor [`SessionStore`](/id/agent-sdk/session-storage).

237 

238### Fork untuk menjelajahi alternatif

239 

240Forking membuat sesi baru yang dimulai dengan salinan riwayat asli tetapi menyimpang dari titik itu. Fork mendapatkan ID sesi sendiri; ID asli dan riwayat tetap tidak berubah. Anda berakhir dengan dua sesi independen yang dapat Anda lanjutkan secara terpisah.

241 

242<Note>

243 Forking membuat cabang riwayat percakapan, bukan sistem file. Jika agen yang di-fork mengedit file, perubahan tersebut nyata dan terlihat oleh sesi apa pun yang bekerja di direktori yang sama. Untuk membuat cabang dan mengembalikan perubahan file, gunakan [file checkpointing](/id/agent-sdk/file-checkpointing).

244</Note>

245 

246Contoh ini dibangun di atas [Tangkap ID sesi](#capture-the-session-id): Anda sudah menganalisis modul auth di `session_id` dan ingin menjelajahi OAuth2 tanpa kehilangan utas yang berfokus pada JWT. Blok pertama fork sesi dan menangkap ID fork (`forked_id`); blok kedua melanjutkan `session_id` asli untuk melanjutkan jalur yang berfokus pada JWT. Anda sekarang memiliki dua ID sesi yang menunjuk ke dua riwayat terpisah:

247 

248<CodeGroup>

249 ```python Python theme={null}

250 # Fork: branch from session_id into a new session

251 forked_id = None

252 async for message in query(

253 prompt="Instead of JWT, implement OAuth2 for the auth module",

254 options=ClaudeAgentOptions(

255 resume=session_id,

256 fork_session=True,

257 ),

258 ):

259 if isinstance(message, ResultMessage):

260 forked_id = message.session_id # The fork's ID, distinct from session_id

261 if message.subtype == "success":

262 print(message.result)

263 

264 print(f"Forked session: {forked_id}")

265 

266 # Original session is untouched; resuming it continues the JWT thread

267 async for message in query(

268 prompt="Continue with the JWT approach",

269 options=ClaudeAgentOptions(resume=session_id),

270 ):

271 if isinstance(message, ResultMessage) and message.subtype == "success":

272 print(message.result)

273 ```

274 

275 ```typescript TypeScript theme={null}

276 // Fork: branch from sessionId into a new session

277 let forkedId: string | undefined;

278 

279 for await (const message of query({

280 prompt: "Instead of JWT, implement OAuth2 for the auth module",

281 options: {

282 resume: sessionId,

283 forkSession: true

284 }

285 })) {

286 if (message.type === "system" && message.subtype === "init") {

287 forkedId = message.session_id; // The fork's ID, distinct from sessionId

288 }

289 if (message.type === "result" && message.subtype === "success") {

290 console.log(message.result);

291 }

292 }

293 

294 console.log(`Forked session: ${forkedId}`);

295 

296 // Original session is untouched; resuming it continues the JWT thread

297 for await (const message of query({

298 prompt: "Continue with the JWT approach",

299 options: { resume: sessionId }

300 })) {

301 if (message.type === "result" && message.subtype === "success") {

302 console.log(message.result);

303 }

304 }

305 ```

306</CodeGroup>

307 

308## Lanjutkan di seluruh host

309 

310File sesi bersifat lokal untuk mesin yang membuatnya. Untuk melanjutkan sesi di host berbeda (pekerja CI, kontainer ephemeral, serverless), Anda memiliki dua opsi:

311 

312* **Pindahkan file sesi.** Pertahankan `~/.claude/projects/<encoded-cwd>/<session-id>.jsonl` dari run pertama dan pulihkan ke jalur yang sama di host baru sebelum memanggil `resume`. `cwd` harus cocok.

313* **Jangan andalkan resume sesi.** Tangkap hasil yang Anda butuhkan (output analisis, keputusan, diff file) sebagai status aplikasi dan teruskan ke prompt sesi segar. Ini sering lebih kuat daripada mengirim file transkrip.

314 

315Kedua SDK mengekspos fungsi untuk menghitung sesi di disk dan membaca pesan mereka: [`listSessions()`](/id/agent-sdk/typescript#listsessions) dan [`getSessionMessages()`](/id/agent-sdk/typescript#getsessionmessages) di TypeScript, [`list_sessions()`](/id/agent-sdk/python#list_sessions) dan [`get_session_messages()`](/id/agent-sdk/python#get_session_messages) di Python. Gunakan mereka untuk membangun pemilih sesi kustom, logika pembersihan, atau penampil transkrip.

316 

317Kedua SDK juga mengekspos fungsi untuk mencari dan mengubah sesi individual: [`get_session_info()`](/id/agent-sdk/python#get_session_info), [`rename_session()`](/id/agent-sdk/python#rename_session), dan [`tag_session()`](/id/agent-sdk/python#tag_session) di Python, dan [`getSessionInfo()`](/id/agent-sdk/typescript#getsessioninfo), [`renameSession()`](/id/agent-sdk/typescript#renamesession), dan [`tagSession()`](/id/agent-sdk/typescript#tagsession) di TypeScript. Gunakan mereka untuk mengorganisir sesi berdasarkan tag atau memberi mereka judul yang dapat dibaca manusia.

318 

319## Sumber daya terkait

320 

321* [Bagaimana loop agen bekerja](/id/agent-sdk/agent-loop): Pahami putaran, pesan, dan akumulasi konteks dalam sesi

322* [File checkpointing](/id/agent-sdk/file-checkpointing): Lacak dan kembalikan perubahan file di seluruh sesi

323* [Python `ClaudeAgentOptions`](/id/agent-sdk/python#claudeagentoptions): Referensi opsi sesi lengkap untuk Python

324* [TypeScript `Options`](/id/agent-sdk/typescript#options): Referensi opsi sesi lengkap untuk TypeScript

agent-sdk/skills.md +314 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Agent Skills dalam SDK

6 

7> Perluas Claude dengan kemampuan khusus menggunakan Agent Skills dalam Claude Agent SDK

8 

9## Ikhtisar

10 

11Agent Skills memperluas Claude dengan kemampuan khusus yang Claude secara otomatis memanggil ketika relevan. Skills dikemas sebagai file `SKILL.md` yang berisi instruksi, deskripsi, dan sumber daya pendukung opsional.

12 

13Untuk informasi komprehensif tentang Skills, termasuk manfaat, arsitektur, dan panduan penulisan, lihat [ikhtisar Agent Skills](https://platform.claude.com/docs/id/agents-and-tools/agent-skills/overview).

14 

15## Cara Skills Bekerja dengan SDK

16 

17Saat menggunakan Claude Agent SDK, Skills adalah:

18 

191. **Didefinisikan sebagai artefak filesystem**: Dibuat sebagai file `SKILL.md` di direktori tertentu (`.claude/skills/`)

202. **Dimuat dari filesystem**: Skills dimuat dari lokasi filesystem yang diatur oleh `settingSources` (TypeScript) atau `setting_sources` (Python)

213. **Ditemukan secara otomatis**: Setelah pengaturan filesystem dimuat, metadata Skill ditemukan saat startup dari direktori pengguna dan proyek; konten penuh dimuat saat dipicu

224. **Dipanggil oleh model**: Claude secara otomatis memilih kapan menggunakannya berdasarkan konteks

235. **Disaring melalui opsi `skills`**: Skills yang ditemukan diaktifkan secara default. Berikan daftar nama skill, `"all"`, atau `[]` untuk mengontrol mana yang tersedia dalam sesi

24 

25Tidak seperti subagents (yang dapat didefinisikan secara programatis), Skills harus dibuat sebagai artefak filesystem. SDK tidak menyediakan API programatis untuk mendaftarkan Skills.

26 

27<Note>

28 Skills ditemukan melalui sumber pengaturan filesystem. Dengan opsi `query()` default, SDK memuat sumber pengguna dan proyek, jadi skills di `~/.claude/skills/` dan `<cwd>/.claude/skills/` tersedia. Jika Anda menetapkan `settingSources` secara eksplisit, sertakan `'user'` atau `'project'` untuk mempertahankan penemuan skill, atau gunakan [opsi `plugins`](/id/agent-sdk/plugins) untuk memuat skills dari jalur tertentu.

29</Note>

30 

31## Menggunakan Skills dengan SDK

32 

33Atur opsi `skills` pada `query()` untuk mengontrol Skills mana yang tersedia untuk sesi. Ketika dihilangkan, Skills yang ditemukan diaktifkan dan alat Skill tersedia, sesuai dengan perilaku CLI. Berikan `"all"` untuk mengaktifkan setiap Skill yang ditemukan, daftar nama Skill untuk mengaktifkan hanya yang tersebut, atau `[]` untuk menonaktifkan semua. Ketika Anda menetapkan `skills`, SDK mengaktifkan alat Skill secara otomatis, jadi Anda tidak perlu mencantumkannya dalam `allowedTools`.

34 

35Setelah dikonfigurasi, Claude secara otomatis menemukan Skills dari filesystem dan memanggilnya ketika relevan dengan permintaan pengguna.

36 

37<CodeGroup>

38 ```python Python theme={null}

39 import asyncio

40 from claude_agent_sdk import query, ClaudeAgentOptions

41 

42 

43 async def main():

44 options = ClaudeAgentOptions(

45 cwd="/path/to/project", # Project with .claude/skills/

46 setting_sources=["user", "project"], # Load Skills from filesystem

47 skills="all", # Enable every discovered Skill

48 allowed_tools=["Read", "Write", "Bash"],

49 )

50 

51 async for message in query(

52 prompt="Help me process this PDF document", options=options

53 ):

54 print(message)

55 

56 

57 asyncio.run(main())

58 ```

59 

60 ```typescript TypeScript theme={null}

61 import { query } from "@anthropic-ai/claude-agent-sdk";

62 

63 for await (const message of query({

64 prompt: "Help me process this PDF document",

65 options: {

66 cwd: "/path/to/project", // Project with .claude/skills/

67 settingSources: ["user", "project"], // Load Skills from filesystem

68 skills: "all", // Enable every discovered Skill

69 allowedTools: ["Read", "Write", "Bash"]

70 }

71 })) {

72 console.log(message);

73 }

74 ```

75</CodeGroup>

76 

77Untuk mengaktifkan hanya Skills tertentu, berikan nama mereka. Nama cocok dengan bidang `name` di `SKILL.md` atau nama direktori Skill. Gunakan `plugin:skill` untuk Skills yang disediakan plugin.

78 

79<CodeGroup>

80 ```python Python theme={null}

81 options = ClaudeAgentOptions(skills=["pdf", "docx"])

82 ```

83 

84 ```typescript TypeScript theme={null}

85 const options = { skills: ["pdf", "docx"] };

86 ```

87</CodeGroup>

88 

89Opsi `skills` adalah filter konteks, bukan sandbox. Skills yang tidak tercantum disembunyikan dari model dan ditolak oleh alat Skill, tetapi file mereka tetap di disk dan dapat diakses melalui Read dan Bash.

90 

91## Lokasi Skill

92 

93Skills dimuat dari direktori filesystem berdasarkan konfigurasi `settingSources`/`setting_sources` Anda:

94 

95* **Project Skills** (`.claude/skills/`): Dibagikan dengan tim Anda melalui git - dimuat ketika `setting_sources` mencakup `"project"`

96* **User Skills** (`~/.claude/skills/`): Skills pribadi di semua proyek - dimuat ketika `setting_sources` mencakup `"user"`

97* **Plugin Skills**: Disertakan dengan plugin Claude Code yang diinstal

98 

99## Membuat Skills

100 

101Skills didefinisikan sebagai direktori yang berisi file `SKILL.md` dengan frontmatter YAML dan konten Markdown. Bidang `description` menentukan kapan Claude memanggil Skill Anda.

102 

103**Contoh struktur direktori**:

104 

105```bash theme={null}

106.claude/skills/processing-pdfs/

107└── SKILL.md

108```

109 

110Untuk panduan lengkap tentang membuat Skills, termasuk struktur SKILL.md, Skills multi-file, dan contoh, lihat:

111 

112* [Agent Skills dalam Claude Code](/id/skills): Panduan lengkap dengan contoh

113* [Agent Skills Best Practices](https://platform.claude.com/docs/id/agents-and-tools/agent-skills/best-practices): Panduan penulisan dan konvensi penamaan

114 

115## Pembatasan Alat

116 

117<Note>

118 Bidang frontmatter `allowed-tools` di SKILL.md hanya didukung saat menggunakan Claude Code CLI secara langsung. **Ini tidak berlaku saat menggunakan Skills melalui SDK**.

119 

120 Saat menggunakan SDK, kontrol akses alat melalui opsi `allowedTools` utama dalam konfigurasi query Anda.

121</Note>

122 

123Untuk mengontrol akses alat untuk Skills dalam aplikasi SDK, gunakan `allowedTools` untuk pra-persetujuan alat tertentu. Tanpa callback `canUseTool`, apa pun yang tidak ada dalam daftar ditolak:

124 

125<Note>

126 Pernyataan impor dari contoh pertama diasumsikan dalam cuplikan kode berikut.

127</Note>

128 

129<CodeGroup>

130 ```python Python theme={null}

131 options = ClaudeAgentOptions(

132 setting_sources=["user", "project"], # Load Skills from filesystem

133 skills="all",

134 allowed_tools=["Read", "Grep", "Glob"],

135 )

136 

137 async for message in query(prompt="Analyze the codebase structure", options=options):

138 print(message)

139 ```

140 

141 ```typescript TypeScript theme={null}

142 for await (const message of query({

143 prompt: "Analyze the codebase structure",

144 options: {

145 settingSources: ["user", "project"], // Load Skills from filesystem

146 skills: "all",

147 allowedTools: ["Read", "Grep", "Glob"],

148 permissionMode: "dontAsk" // Deny anything not in allowedTools

149 }

150 })) {

151 console.log(message);

152 }

153 ```

154</CodeGroup>

155 

156## Menemukan Skills yang Tersedia

157 

158Untuk melihat Skills mana yang tersedia dalam aplikasi SDK Anda, cukup tanyakan kepada Claude:

159 

160<CodeGroup>

161 ```python Python theme={null}

162 options = ClaudeAgentOptions(

163 setting_sources=["user", "project"], # Load Skills from filesystem

164 skills="all",

165 )

166 

167 async for message in query(prompt="What Skills are available?", options=options):

168 print(message)

169 ```

170 

171 ```typescript TypeScript theme={null}

172 for await (const message of query({

173 prompt: "What Skills are available?",

174 options: {

175 settingSources: ["user", "project"], // Load Skills from filesystem

176 skills: "all"

177 }

178 })) {

179 console.log(message);

180 }

181 ```

182</CodeGroup>

183 

184Claude akan mencantumkan Skills yang tersedia berdasarkan direktori kerja saat ini dan plugin yang diinstal.

185 

186## Menguji Skills

187 

188Uji Skills dengan mengajukan pertanyaan yang cocok dengan deskripsi mereka:

189 

190<CodeGroup>

191 ```python Python theme={null}

192 options = ClaudeAgentOptions(

193 cwd="/path/to/project",

194 setting_sources=["user", "project"], # Load Skills from filesystem

195 skills="all",

196 allowed_tools=["Read", "Bash"],

197 )

198 

199 async for message in query(prompt="Extract text from invoice.pdf", options=options):

200 print(message)

201 ```

202 

203 ```typescript TypeScript theme={null}

204 for await (const message of query({

205 prompt: "Extract text from invoice.pdf",

206 options: {

207 cwd: "/path/to/project",

208 settingSources: ["user", "project"], // Load Skills from filesystem

209 skills: "all",

210 allowedTools: ["Read", "Bash"]

211 }

212 })) {

213 console.log(message);

214 }

215 ```

216</CodeGroup>

217 

218Claude secara otomatis memanggil Skill yang relevan jika deskripsi cocok dengan permintaan Anda.

219 

220## Pemecahan Masalah

221 

222### Skills Tidak Ditemukan

223 

224**Periksa konfigurasi settingSources**: Skills ditemukan melalui sumber pengaturan `user` dan `project`. Jika Anda menetapkan `settingSources`/`setting_sources` secara eksplisit dan menghilangkan sumber tersebut, skills tidak dimuat:

225 

226<CodeGroup>

227 ```python Python theme={null}

228 # Skills not loaded: setting_sources excludes user and project

229 options = ClaudeAgentOptions(setting_sources=[], skills="all")

230 

231 # Skills loaded: user and project sources included

232 options = ClaudeAgentOptions(

233 setting_sources=["user", "project"],

234 skills="all",

235 )

236 ```

237 

238 ```typescript TypeScript theme={null}

239 // Skills not loaded: settingSources excludes user and project

240 const options = {

241 settingSources: [],

242 skills: "all"

243 };

244 

245 // Skills loaded: user and project sources included

246 const options = {

247 settingSources: ["user", "project"],

248 skills: "all"

249 };

250 ```

251</CodeGroup>

252 

253Untuk detail lebih lanjut tentang `settingSources`/`setting_sources`, lihat [referensi SDK TypeScript](/id/agent-sdk/typescript#settingsource) atau [referensi SDK Python](/id/agent-sdk/python#settingsource).

254 

255**Periksa direktori kerja**: SDK memuat Skills relatif terhadap opsi `cwd`. Pastikan itu menunjuk ke direktori yang berisi `.claude/skills/`:

256 

257<CodeGroup>

258 ```python Python theme={null}

259 # Ensure your cwd points to the directory containing .claude/skills/

260 options = ClaudeAgentOptions(

261 cwd="/path/to/project", # Must contain .claude/skills/

262 setting_sources=["user", "project"], # Loads skills from these sources

263 skills="all",

264 )

265 ```

266 

267 ```typescript TypeScript theme={null}

268 // Ensure your cwd points to the directory containing .claude/skills/

269 const options = {

270 cwd: "/path/to/project", // Must contain .claude/skills/

271 settingSources: ["user", "project"], // Loads skills from these sources

272 skills: "all"

273 };

274 ```

275</CodeGroup>

276 

277Lihat bagian "Menggunakan Skills dengan SDK" di atas untuk pola lengkapnya.

278 

279**Verifikasi lokasi filesystem**:

280 

281```bash theme={null}

282# Check project Skills

283ls .claude/skills/*/SKILL.md

284 

285# Check personal Skills

286ls ~/.claude/skills/*/SKILL.md

287```

288 

289### Skill Tidak Digunakan

290 

291**Periksa opsi `skills`**: Jika Anda melewatkan daftar `skills`, konfirmasi nama skill disertakan. Melewatkan `[]` menonaktifkan semua skills.

292 

293**Periksa deskripsi**: Pastikan itu spesifik dan mencakup kata kunci yang relevan. Lihat [Agent Skills Best Practices](https://platform.claude.com/docs/id/agents-and-tools/agent-skills/best-practices#writing-effective-descriptions) untuk panduan tentang menulis deskripsi yang efektif.

294 

295### Pemecahan Masalah Tambahan

296 

297Untuk pemecahan masalah Skills umum (sintaks YAML, debugging, dll.), lihat [bagian pemecahan masalah Claude Code Skills](/id/skills#troubleshooting).

298 

299## Dokumentasi Terkait

300 

301### Panduan Skills

302 

303* [Agent Skills dalam Claude Code](/id/skills): Panduan Skills lengkap dengan pembuatan, contoh, dan pemecahan masalah

304* [Agent Skills Overview](https://platform.claude.com/docs/id/agents-and-tools/agent-skills/overview): Ikhtisar konseptual, manfaat, dan arsitektur

305* [Agent Skills Best Practices](https://platform.claude.com/docs/id/agents-and-tools/agent-skills/best-practices): Panduan penulisan untuk Skills yang efektif

306* [Agent Skills Cookbook](https://platform.claude.com/cookbook/skills-notebooks-01-skills-introduction): Contoh Skills dan template

307 

308### Sumber Daya SDK

309 

310* [Subagents dalam SDK](/id/agent-sdk/subagents): Agen berbasis filesystem serupa dengan opsi programatis

311* [Slash Commands dalam SDK](/id/agent-sdk/slash-commands): Perintah yang dipanggil pengguna

312* [SDK Overview](/id/agent-sdk/overview): Konsep SDK umum

313* [Referensi SDK TypeScript](/id/agent-sdk/typescript): Dokumentasi API lengkap

314* [Referensi SDK Python](/id/agent-sdk/python): Dokumentasi API lengkap

agent-sdk/subagents.md +601 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Subagents dalam SDK

6 

7> Tentukan dan panggil subagents untuk mengisolasi konteks, menjalankan tugas secara paralel, dan menerapkan instruksi khusus dalam aplikasi Claude Agent SDK Anda.

8 

9Subagents adalah instans agen terpisah yang dapat dihasilkan oleh agen utama Anda untuk menangani subtask yang terfokus.

10Gunakan subagents untuk mengisolasi konteks bagi subtask yang terfokus, menjalankan beberapa analisis secara paralel, dan menerapkan instruksi khusus tanpa membuat prompt agen utama menjadi terlalu panjang.

11 

12Panduan ini menjelaskan cara mendefinisikan dan menggunakan subagents dalam SDK menggunakan parameter `agents`.

13 

14## Ikhtisar

15 

16Anda dapat membuat subagents dengan tiga cara:

17 

18* **Secara programatis**: gunakan parameter `agents` dalam opsi `query()` Anda ([TypeScript](/id/agent-sdk/typescript#agentdefinition), [Python](/id/agent-sdk/python#agentdefinition))

19* **Berbasis sistem file**: tentukan agents sebagai file markdown di direktori `.claude/agents/` (lihat [mendefinisikan subagents sebagai file](/id/sub-agents))

20* **Tujuan umum bawaan**: Claude dapat memanggil subagent `general-purpose` bawaan kapan saja melalui alat Agent tanpa Anda mendefinisikan apa pun

21 

22Panduan ini berfokus pada pendekatan programatis, yang direkomendasikan untuk aplikasi SDK.

23 

24Ketika Anda mendefinisikan subagents, Claude menentukan apakah akan memanggil mereka berdasarkan field `description` setiap subagent. Tulis deskripsi yang jelas yang menjelaskan kapan subagent harus digunakan, dan Claude akan secara otomatis mendelegasikan tugas yang sesuai. Anda juga dapat secara eksplisit meminta subagent berdasarkan nama dalam prompt Anda (misalnya, "Gunakan agen code-reviewer untuk...").

25 

26## Manfaat menggunakan subagents

27 

28### Isolasi konteks

29 

30Setiap subagent berjalan dalam percakapan segar mereka sendiri. Panggilan alat perantara dan hasil tetap berada di dalam subagent; hanya pesan finalnya yang kembali ke parent. Lihat [Apa yang diwarisi subagents](#what-subagents-inherit) untuk mengetahui dengan tepat apa yang ada dalam konteks subagent.

31 

32**Contoh:** subagent `research-assistant` dapat menjelajahi puluhan file tanpa konten apa pun yang terakumulasi dalam percakapan utama. Parent menerima ringkasan ringkas, bukan setiap file yang dibaca subagent.

33 

34### Paralelisasi

35 

36Beberapa subagents dapat berjalan secara bersamaan, secara dramatis mempercepat alur kerja yang kompleks.

37 

38**Contoh:** selama tinjauan kode, Anda dapat menjalankan subagents `style-checker`, `security-scanner`, dan `test-coverage` secara bersamaan, mengurangi waktu tinjauan dari menit menjadi detik.

39 

40### Instruksi dan pengetahuan khusus

41 

42Setiap subagent dapat memiliki prompt sistem yang disesuaikan dengan keahlian spesifik, praktik terbaik, dan batasan.

43 

44**Contoh:** subagent `database-migration` dapat memiliki pengetahuan terperinci tentang praktik terbaik SQL, strategi rollback, dan pemeriksaan integritas data yang akan menjadi kebisingan yang tidak perlu dalam instruksi agen utama.

45 

46### Pembatasan alat

47 

48Subagents dapat dibatasi pada alat tertentu, mengurangi risiko tindakan yang tidak diinginkan.

49 

50**Contoh:** subagent `doc-reviewer` mungkin hanya memiliki akses ke alat Read dan Grep, memastikan dapat menganalisis tetapi tidak pernah secara tidak sengaja memodifikasi file dokumentasi Anda.

51 

52## Membuat subagents

53 

54### Definisi programatis (direkomendasikan)

55 

56Tentukan subagents langsung dalam kode Anda menggunakan parameter `agents`. Contoh ini membuat dua subagents: peninjau kode dengan akses read-only dan runner test yang dapat menjalankan perintah. Alat `Agent` harus disertakan dalam `allowedTools` karena Claude memanggil subagents melalui alat Agent.

57 

58<CodeGroup>

59 ```python Python theme={null}

60 import asyncio

61 from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition

62 

63 

64 async def main():

65 async for message in query(

66 prompt="Review the authentication module for security issues",

67 options=ClaudeAgentOptions(

68 # Agent tool is required for subagent invocation

69 allowed_tools=["Read", "Grep", "Glob", "Agent"],

70 agents={

71 "code-reviewer": AgentDefinition(

72 # description tells Claude when to use this subagent

73 description="Expert code review specialist. Use for quality, security, and maintainability reviews.",

74 # prompt defines the subagent's behavior and expertise

75 prompt="""You are a code review specialist with expertise in security, performance, and best practices.

76 

77 When reviewing code:

78 - Identify security vulnerabilities

79 - Check for performance issues

80 - Verify adherence to coding standards

81 - Suggest specific improvements

82 

83 Be thorough but concise in your feedback.""",

84 # tools restricts what the subagent can do (read-only here)

85 tools=["Read", "Grep", "Glob"],

86 # model overrides the default model for this subagent

87 model="sonnet",

88 ),

89 "test-runner": AgentDefinition(

90 description="Runs and analyzes test suites. Use for test execution and coverage analysis.",

91 prompt="""You are a test execution specialist. Run tests and provide clear analysis of results.

92 

93 Focus on:

94 - Running test commands

95 - Analyzing test output

96 - Identifying failing tests

97 - Suggesting fixes for failures""",

98 # Bash access lets this subagent run test commands

99 tools=["Bash", "Read", "Grep"],

100 ),

101 },

102 ),

103 ):

104 if hasattr(message, "result"):

105 print(message.result)

106 

107 

108 asyncio.run(main())

109 ```

110 

111 ```typescript TypeScript theme={null}

112 import { query } from "@anthropic-ai/claude-agent-sdk";

113 

114 for await (const message of query({

115 prompt: "Review the authentication module for security issues",

116 options: {

117 // Agent tool is required for subagent invocation

118 allowedTools: ["Read", "Grep", "Glob", "Agent"],

119 agents: {

120 "code-reviewer": {

121 // description tells Claude when to use this subagent

122 description:

123 "Expert code review specialist. Use for quality, security, and maintainability reviews.",

124 // prompt defines the subagent's behavior and expertise

125 prompt: `You are a code review specialist with expertise in security, performance, and best practices.

126 

127 When reviewing code:

128 - Identify security vulnerabilities

129 - Check for performance issues

130 - Verify adherence to coding standards

131 - Suggest specific improvements

132 

133 Be thorough but concise in your feedback.`,

134 // tools restricts what the subagent can do (read-only here)

135 tools: ["Read", "Grep", "Glob"],

136 // model overrides the default model for this subagent

137 model: "sonnet"

138 },

139 "test-runner": {

140 description:

141 "Runs and analyzes test suites. Use for test execution and coverage analysis.",

142 prompt: `You are a test execution specialist. Run tests and provide clear analysis of results.

143 

144 Focus on:

145 - Running test commands

146 - Analyzing test output

147 - Identifying failing tests

148 - Suggesting fixes for failures`,

149 // Bash access lets this subagent run test commands

150 tools: ["Bash", "Read", "Grep"]

151 }

152 }

153 }

154 })) {

155 if ("result" in message) console.log(message.result);

156 }

157 ```

158</CodeGroup>

159 

160### Konfigurasi AgentDefinition

161 

162| Field | Type | Required | Description |

163| :---------------- | :---------------------------------------------------------- | :------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

164| `description` | `string` | Yes | Deskripsi bahasa alami tentang kapan menggunakan agen ini |

165| `prompt` | `string` | Yes | Prompt sistem agen yang mendefinisikan peran dan perilakunya |

166| `tools` | `string[]` | No | Array nama alat yang diizinkan. Jika dihilangkan, mewarisi semua alat |

167| `disallowedTools` | `string[]` | No | Array nama alat yang akan dihapus dari set alat agen |

168| `model` | `string` | No | Penggantian model untuk agen ini. Menerima alias seperti `'sonnet'`, `'opus'`, `'haiku'`, `'inherit'`, atau ID model lengkap. Default ke model utama jika dihilangkan |

169| `skills` | `string[]` | No | Daftar nama skill untuk dimuat sebelumnya ke dalam konteks agen saat startup. Skill yang tidak terdaftar tetap dapat dipanggil melalui alat Skill |

170| `memory` | `'user' \| 'project' \| 'local'` | No | Sumber memori untuk agen ini |

171| `mcpServers` | `(string \| object)[]` | No | Server MCP yang tersedia untuk agen ini, berdasarkan nama atau konfigurasi inline |

172| `maxTurns` | `number` | No | Jumlah maksimum putaran agentic sebelum agen berhenti |

173| `background` | `boolean` | No | Jalankan agen ini sebagai tugas latar belakang non-blocking saat dipanggil |

174| `effort` | `'low' \| 'medium' \| 'high' \| 'xhigh' \| 'max' \| number` | No | Tingkat upaya penalaran untuk agen ini |

175| `permissionMode` | `PermissionMode` | No | Mode izin untuk eksekusi alat dalam agen ini |

176 

177Dalam Python SDK, nama field ini menggunakan camelCase untuk mencocokkan format wire. Lihat referensi [`AgentDefinition`](/id/agent-sdk/python#agentdefinition) untuk detail.

178 

179<Note>

180 Subagents tidak dapat menghasilkan subagents mereka sendiri. Jangan sertakan `Agent` dalam array `tools` subagent.

181</Note>

182 

183### Definisi berbasis sistem file (alternatif)

184 

185Anda juga dapat mendefinisikan subagents sebagai file markdown di direktori `.claude/agents/`. Lihat [dokumentasi subagents Claude Code](/id/sub-agents) untuk detail tentang pendekatan ini. Agen yang didefinisikan secara programatis memiliki prioritas lebih tinggi daripada agen berbasis sistem file dengan nama yang sama.

186 

187<Note>

188 Bahkan tanpa mendefinisikan subagents khusus, Claude dapat menghasilkan subagent `general-purpose` bawaan ketika `Agent` ada dalam `allowedTools` Anda. Ini berguna untuk mendelegasikan tugas penelitian atau eksplorasi tanpa membuat agen khusus.

189</Note>

190 

191## Apa yang diwarisi subagents

192 

193Jendela konteks subagent dimulai segar (tidak ada percakapan parent) tetapi tidak kosong. Satu-satunya saluran dari parent ke subagent adalah string prompt alat Agent, jadi sertakan jalur file, pesan kesalahan, atau keputusan apa pun yang dibutuhkan subagent langsung dalam prompt itu.

194 

195| Subagent menerima | Subagent tidak menerima |

196| :--------------------------------------------------------------------- | :------------------------------------------------------------------------------------ |

197| Prompt sistem sendiri (`AgentDefinition.prompt`) dan prompt alat Agent | Riwayat percakapan parent atau hasil alat |

198| Project CLAUDE.md (dimuat melalui `settingSources`) | Konten skill yang dimuat sebelumnya, kecuali terdaftar dalam `AgentDefinition.skills` |

199| Definisi alat (diwarisi dari parent, atau subset dalam `tools`) | Prompt sistem parent |

200 

201<Note>

202 Parent menerima pesan final subagent verbatim sebagai hasil alat Agent, tetapi dapat merangkumnya dalam respons sendiri. Untuk mempertahankan output subagent verbatim dalam respons yang menghadap pengguna, sertakan instruksi untuk melakukannya dalam prompt atau opsi `systemPrompt` yang Anda berikan ke panggilan `query()` **utama**.

203</Note>

204 

205## Memanggil subagents

206 

207### Invokasi otomatis

208 

209Claude secara otomatis memutuskan kapan akan memanggil subagents berdasarkan tugas dan `description` setiap subagent. Misalnya, jika Anda mendefinisikan subagent `performance-optimizer` dengan deskripsi "Performance optimization specialist for query tuning", Claude akan memanggilnya ketika prompt Anda menyebutkan optimasi query.

210 

211Tulis deskripsi yang jelas dan spesifik sehingga Claude dapat mencocokkan tugas ke subagent yang tepat.

212 

213### Invokasi eksplisit

214 

215Untuk menjamin Claude menggunakan subagent tertentu, sebutkan berdasarkan nama dalam prompt Anda:

216 

217```text theme={null}

218"Use the code-reviewer agent to check the authentication module"

219```

220 

221Ini melewati pencocokan otomatis dan langsung memanggil subagent bernama.

222 

223### Konfigurasi agen dinamis

224 

225Anda dapat membuat definisi agen secara dinamis berdasarkan kondisi runtime. Contoh ini membuat peninjau keamanan dengan tingkat ketat yang berbeda, menggunakan model yang lebih kuat untuk tinjauan ketat.

226 

227<CodeGroup>

228 ```python Python theme={null}

229 import asyncio

230 from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition

231 

232 

233 # Factory function that returns an AgentDefinition

234 # This pattern lets you customize agents based on runtime conditions

235 def create_security_agent(security_level: str) -> AgentDefinition:

236 is_strict = security_level == "strict"

237 return AgentDefinition(

238 description="Security code reviewer",

239 # Customize the prompt based on strictness level

240 prompt=f"You are a {'strict' if is_strict else 'balanced'} security reviewer...",

241 tools=["Read", "Grep", "Glob"],

242 # Key insight: use a more capable model for high-stakes reviews

243 model="opus" if is_strict else "sonnet",

244 )

245 

246 

247 async def main():

248 # The agent is created at query time, so each request can use different settings

249 async for message in query(

250 prompt="Review this PR for security issues",

251 options=ClaudeAgentOptions(

252 allowed_tools=["Read", "Grep", "Glob", "Agent"],

253 agents={

254 # Call the factory with your desired configuration

255 "security-reviewer": create_security_agent("strict")

256 },

257 ),

258 ):

259 if hasattr(message, "result"):

260 print(message.result)

261 

262 

263 asyncio.run(main())

264 ```

265 

266 ```typescript TypeScript theme={null}

267 import { query, type AgentDefinition } from "@anthropic-ai/claude-agent-sdk";

268 

269 // Factory function that returns an AgentDefinition

270 // This pattern lets you customize agents based on runtime conditions

271 function createSecurityAgent(securityLevel: "basic" | "strict"): AgentDefinition {

272 const isStrict = securityLevel === "strict";

273 return {

274 description: "Security code reviewer",

275 // Customize the prompt based on strictness level

276 prompt: `You are a ${isStrict ? "strict" : "balanced"} security reviewer...`,

277 tools: ["Read", "Grep", "Glob"],

278 // Key insight: use a more capable model for high-stakes reviews

279 model: isStrict ? "opus" : "sonnet"

280 };

281 }

282 

283 // The agent is created at query time, so each request can use different settings

284 for await (const message of query({

285 prompt: "Review this PR for security issues",

286 options: {

287 allowedTools: ["Read", "Grep", "Glob", "Agent"],

288 agents: {

289 // Call the factory with your desired configuration

290 "security-reviewer": createSecurityAgent("strict")

291 }

292 }

293 })) {

294 if ("result" in message) console.log(message.result);

295 }

296 ```

297</CodeGroup>

298 

299## Mendeteksi invokasi subagent

300 

301Subagents dipanggil melalui alat Agent. Untuk mendeteksi ketika subagent dipanggil, periksa blok `tool_use` di mana `name` adalah `"Agent"`. Pesan dari dalam konteks subagent mencakup field `parent_tool_use_id`.

302 

303<Note>

304 Nama alat diubah dari `"Task"` menjadi `"Agent"` dalam Claude Code v2.1.63. Rilis SDK saat ini memancarkan `"Agent"` dalam blok `tool_use` tetapi masih menggunakan `"Task"` dalam daftar alat `system:init` dan dalam `result.permission_denials[].tool_name`. Memeriksa kedua nilai dalam `block.name` memastikan kompatibilitas di seluruh versi SDK.

305</Note>

306 

307Contoh ini mengulangi pesan yang dialirkan, mencatat ketika subagent dipanggil dan ketika pesan berikutnya berasal dari dalam konteks eksekusi subagent itu.

308 

309<Note>

310 Struktur pesan berbeda antara SDK. Dalam Python, blok konten diakses langsung melalui `message.content`. Dalam TypeScript, `SDKAssistantMessage` membungkus pesan Claude API, jadi konten diakses melalui `message.message.content`.

311</Note>

312 

313<CodeGroup>

314 ```python Python theme={null}

315 import asyncio

316 from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition

317 

318 

319 async def main():

320 async for message in query(

321 prompt="Use the code-reviewer agent to review this codebase",

322 options=ClaudeAgentOptions(

323 allowed_tools=["Read", "Glob", "Grep", "Agent"],

324 agents={

325 "code-reviewer": AgentDefinition(

326 description="Expert code reviewer.",

327 prompt="Analyze code quality and suggest improvements.",

328 tools=["Read", "Glob", "Grep"],

329 )

330 },

331 ),

332 ):

333 # Check for subagent invocation. Match both names: older SDK

334 # versions emitted "Task", current versions emit "Agent".

335 if hasattr(message, "content") and message.content:

336 for block in message.content:

337 if getattr(block, "type", None) == "tool_use" and block.name in (

338 "Task",

339 "Agent",

340 ):

341 print(f"Subagent invoked: {block.input.get('subagent_type')}")

342 

343 # Check if this message is from within a subagent's context

344 if hasattr(message, "parent_tool_use_id") and message.parent_tool_use_id:

345 print(" (running inside subagent)")

346 

347 if hasattr(message, "result"):

348 print(message.result)

349 

350 

351 asyncio.run(main())

352 ```

353 

354 ```typescript TypeScript theme={null}

355 import { query } from "@anthropic-ai/claude-agent-sdk";

356 

357 for await (const message of query({

358 prompt: "Use the code-reviewer agent to review this codebase",

359 options: {

360 allowedTools: ["Read", "Glob", "Grep", "Agent"],

361 agents: {

362 "code-reviewer": {

363 description: "Expert code reviewer.",

364 prompt: "Analyze code quality and suggest improvements.",

365 tools: ["Read", "Glob", "Grep"]

366 }

367 }

368 }

369 })) {

370 const msg = message as any;

371 

372 // Check for subagent invocation. Match both names: older SDK versions

373 // emitted "Task", current versions emit "Agent".

374 for (const block of msg.message?.content ?? []) {

375 if (block.type === "tool_use" && (block.name === "Task" || block.name === "Agent")) {

376 console.log(`Subagent invoked: ${block.input.subagent_type}`);

377 }

378 }

379 

380 // Check if this message is from within a subagent's context

381 if (msg.parent_tool_use_id) {

382 console.log(" (running inside subagent)");

383 }

384 

385 if ("result" in message) {

386 console.log(message.result);

387 }

388 }

389 ```

390</CodeGroup>

391 

392## Melanjutkan subagents

393 

394Subagents dapat dilanjutkan untuk melanjutkan dari mana mereka berhenti. Subagents yang dilanjutkan mempertahankan riwayat percakapan lengkap mereka, termasuk semua panggilan alat sebelumnya, hasil, dan penalaran. Subagent melanjutkan tepat di mana ia berhenti daripada memulai segar.

395 

396Ketika subagent selesai, Claude menerima ID agennya dalam hasil alat Agent. Untuk melanjutkan subagent secara programatis:

397 

3981. **Tangkap ID sesi**: Ekstrak `session_id` dari pesan selama query pertama

3992. **Ekstrak ID agen**: Parsing `agentId` dari konten pesan

4003. **Lanjutkan sesi**: Berikan `resume: sessionId` dalam opsi query kedua, dan sertakan ID agen dalam prompt Anda

401 

402<Note>

403 Anda harus melanjutkan sesi yang sama untuk mengakses transkrip subagent. Setiap panggilan `query()` memulai sesi baru secara default, jadi berikan `resume: sessionId` untuk melanjutkan dalam sesi yang sama.

404 

405 Jika Anda menggunakan agen khusus (bukan yang bawaan), Anda juga perlu memberikan definisi agen yang sama dalam parameter `agents` untuk kedua query.

406</Note>

407 

408Contoh di bawah mendemonstrasikan alur ini: query pertama menjalankan subagent dan menangkap ID sesi dan ID agen, kemudian query kedua melanjutkan sesi untuk mengajukan pertanyaan tindak lanjut yang memerlukan konteks dari analisis pertama.

409 

410<CodeGroup>

411 ```typescript TypeScript theme={null}

412 import { query, type SDKMessage } from "@anthropic-ai/claude-agent-sdk";

413 

414 // Helper to extract agentId from message content

415 // Stringify to avoid traversing different block types (TextBlock, ToolResultBlock, etc.)

416 function extractAgentId(message: SDKMessage): string | undefined {

417 if (!("message" in message)) return undefined;

418 // Stringify the content so we can search it without traversing nested blocks

419 const content = JSON.stringify(message.message.content);

420 const match = content.match(/agentId:\s*([a-f0-9-]+)/);

421 return match?.[1];

422 }

423 

424 let agentId: string | undefined;

425 let sessionId: string | undefined;

426 

427 // First invocation - use the Explore agent to find API endpoints

428 for await (const message of query({

429 prompt: "Use the Explore agent to find all API endpoints in this codebase",

430 options: { allowedTools: ["Read", "Grep", "Glob", "Agent"] }

431 })) {

432 // Capture session_id from ResultMessage (needed to resume this session)

433 if ("session_id" in message) sessionId = message.session_id;

434 // Search message content for the agentId (appears in Agent tool results)

435 const extractedId = extractAgentId(message);

436 if (extractedId) agentId = extractedId;

437 // Print the final result

438 if ("result" in message) console.log(message.result);

439 }

440 

441 // Second invocation - resume and ask follow-up

442 if (agentId && sessionId) {

443 for await (const message of query({

444 prompt: `Resume agent ${agentId} and list the top 3 most complex endpoints`,

445 options: { allowedTools: ["Read", "Grep", "Glob", "Agent"], resume: sessionId }

446 })) {

447 if ("result" in message) console.log(message.result);

448 }

449 }

450 ```

451 

452 ```python Python theme={null}

453 import asyncio

454 import json

455 import re

456 from claude_agent_sdk import query, ClaudeAgentOptions

457 

458 

459 def extract_agent_id(text: str) -> str | None:

460 """Extract agentId from Agent tool result text."""

461 match = re.search(r"agentId:\s*([a-f0-9-]+)", text)

462 return match.group(1) if match else None

463 

464 

465 async def main():

466 agent_id = None

467 session_id = None

468 

469 # First invocation - use the Explore agent to find API endpoints

470 async for message in query(

471 prompt="Use the Explore agent to find all API endpoints in this codebase",

472 options=ClaudeAgentOptions(allowed_tools=["Read", "Grep", "Glob", "Agent"]),

473 ):

474 # Capture session_id from ResultMessage (needed to resume this session)

475 if hasattr(message, "session_id"):

476 session_id = message.session_id

477 # Search message content for the agentId (appears in Agent tool results)

478 if hasattr(message, "content"):

479 # Stringify the content so we can search it without traversing nested blocks

480 content_str = json.dumps(message.content, default=str)

481 extracted = extract_agent_id(content_str)

482 if extracted:

483 agent_id = extracted

484 # Print the final result

485 if hasattr(message, "result"):

486 print(message.result)

487 

488 # Second invocation - resume and ask follow-up

489 if agent_id and session_id:

490 async for message in query(

491 prompt=f"Resume agent {agent_id} and list the top 3 most complex endpoints",

492 options=ClaudeAgentOptions(

493 allowed_tools=["Read", "Grep", "Glob", "Agent"], resume=session_id

494 ),

495 ):

496 if hasattr(message, "result"):

497 print(message.result)

498 

499 

500 asyncio.run(main())

501 ```

502</CodeGroup>

503 

504Transkrip subagent bertahan secara independen dari percakapan utama:

505 

506* **Pemadatan percakapan utama**: Ketika percakapan utama dipadatkan, transkrip subagent tidak terpengaruh. Mereka disimpan dalam file terpisah.

507* **Persistensi sesi**: Transkrip subagent bertahan dalam sesi mereka. Anda dapat melanjutkan subagent setelah memulai ulang Claude Code dengan melanjutkan sesi yang sama.

508* **Pembersihan otomatis**: Transkrip dibersihkan berdasarkan pengaturan `cleanupPeriodDays` (default: 30 hari).

509 

510## Pembatasan alat

511 

512Subagents dapat memiliki akses alat terbatas melalui field `tools`:

513 

514* **Hilangkan field**: agen mewarisi semua alat yang tersedia (default)

515* **Tentukan alat**: agen hanya dapat menggunakan alat yang terdaftar

516 

517Contoh ini membuat agen analisis read-only yang dapat memeriksa kode tetapi tidak dapat memodifikasi file atau menjalankan perintah.

518 

519<CodeGroup>

520 ```python Python theme={null}

521 import asyncio

522 from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition

523 

524 

525 async def main():

526 async for message in query(

527 prompt="Analyze the architecture of this codebase",

528 options=ClaudeAgentOptions(

529 allowed_tools=["Read", "Grep", "Glob", "Agent"],

530 agents={

531 "code-analyzer": AgentDefinition(

532 description="Static code analysis and architecture review",

533 prompt="""You are a code architecture analyst. Analyze code structure,

534 identify patterns, and suggest improvements without making changes.""",

535 # Read-only tools: no Edit, Write, or Bash access

536 tools=["Read", "Grep", "Glob"],

537 )

538 },

539 ),

540 ):

541 if hasattr(message, "result"):

542 print(message.result)

543 

544 

545 asyncio.run(main())

546 ```

547 

548 ```typescript TypeScript theme={null}

549 import { query } from "@anthropic-ai/claude-agent-sdk";

550 

551 for await (const message of query({

552 prompt: "Analyze the architecture of this codebase",

553 options: {

554 allowedTools: ["Read", "Grep", "Glob", "Agent"],

555 agents: {

556 "code-analyzer": {

557 description: "Static code analysis and architecture review",

558 prompt: `You are a code architecture analyst. Analyze code structure,

559 identify patterns, and suggest improvements without making changes.`,

560 // Read-only tools: no Edit, Write, or Bash access

561 tools: ["Read", "Grep", "Glob"]

562 }

563 }

564 }

565 })) {

566 if ("result" in message) console.log(message.result);

567 }

568 ```

569</CodeGroup>

570 

571### Kombinasi alat umum

572 

573| Kasus penggunaan | Alat | Deskripsi |

574| :----------------- | :-------------------------------------- | :-------------------------------------------------------------- |

575| Analisis read-only | `Read`, `Grep`, `Glob` | Dapat memeriksa kode tetapi tidak memodifikasi atau menjalankan |

576| Eksekusi test | `Bash`, `Read`, `Grep` | Dapat menjalankan perintah dan menganalisis output |

577| Modifikasi kode | `Read`, `Edit`, `Write`, `Grep`, `Glob` | Akses read/write penuh tanpa eksekusi perintah |

578| Akses penuh | Semua alat | Mewarisi semua alat dari parent (hilangkan field `tools`) |

579 

580## Troubleshooting

581 

582### Claude tidak mendelegasikan ke subagents

583 

584Jika Claude menyelesaikan tugas secara langsung daripada mendelegasikan ke subagent Anda:

585 

5861. **Sertakan alat Agent**: subagents dipanggil melalui alat Agent, jadi harus ada dalam `allowedTools`

5872. **Gunakan prompting eksplisit**: sebutkan subagent berdasarkan nama dalam prompt Anda (misalnya, "Gunakan agen code-reviewer untuk...")

5883. **Tulis deskripsi yang jelas**: jelaskan dengan tepat kapan subagent harus digunakan sehingga Claude dapat mencocokkan tugas dengan tepat

589 

590### Agen berbasis sistem file tidak dimuat

591 

592Agen yang didefinisikan dalam `.claude/agents/` dimuat saat startup saja. Jika Anda membuat file agen baru saat Claude Code berjalan, mulai ulang sesi untuk memuatnya.

593 

594### Windows: kegagalan prompt panjang

595 

596Di Windows, subagents dengan prompt yang sangat panjang mungkin gagal karena batasan panjang baris perintah (8191 karakter). Jaga prompt tetap ringkas atau gunakan agen berbasis sistem file untuk instruksi kompleks.

597 

598## Dokumentasi terkait

599 

600* [Subagents Claude Code](/id/sub-agents): dokumentasi subagent komprehensif termasuk definisi berbasis sistem file

601* [Ikhtisar SDK](/id/agent-sdk/overview): memulai dengan Claude Agent SDK

Details

358| `sessionStore` | [`SessionStore`](/id/agent-sdk/session-storage#the-sessionstore-interface) | `undefined` | Cerminkan transkrip sesi ke backend eksternal sehingga host apa pun dapat melanjutkannya. Lihat [Pertahankan sesi ke penyimpanan eksternal](/id/agent-sdk/session-storage) |358| `sessionStore` | [`SessionStore`](/id/agent-sdk/session-storage#the-sessionstore-interface) | `undefined` | Cerminkan transkrip sesi ke backend eksternal sehingga host apa pun dapat melanjutkannya. Lihat [Pertahankan sesi ke penyimpanan eksternal](/id/agent-sdk/session-storage) |

359| `settings` | `string \| Settings` | `undefined` | Objek [pengaturan](/id/settings) inline atau jalur ke file pengaturan. Mengisi lapisan flag-settings dalam [urutan preseden](/id/settings#settings-precedence). Ubah saat runtime dengan [`applyFlagSettings()`](#applyflagsettings) |359| `settings` | `string \| Settings` | `undefined` | Objek [pengaturan](/id/settings) inline atau jalur ke file pengaturan. Mengisi lapisan flag-settings dalam [urutan preseden](/id/settings#settings-precedence). Ubah saat runtime dengan [`applyFlagSettings()`](#applyflagsettings) |

360| `settingSources` | [`SettingSource`](#settingsource)`[]` | CLI defaults (all sources) | Kontrol pengaturan filesystem mana yang akan dimuat. Lewatkan `[]` untuk menonaktifkan pengaturan pengguna, proyek, dan lokal. Pengaturan kebijakan terkelola dimuat terlepas dari itu. Lihat [Gunakan fitur Claude Code](/id/agent-sdk/claude-code-features#what-settingsources-does-not-control) |360| `settingSources` | [`SettingSource`](#settingsource)`[]` | CLI defaults (all sources) | Kontrol pengaturan filesystem mana yang akan dimuat. Lewatkan `[]` untuk menonaktifkan pengaturan pengguna, proyek, dan lokal. Pengaturan kebijakan terkelola dimuat terlepas dari itu. Lihat [Gunakan fitur Claude Code](/id/agent-sdk/claude-code-features#what-settingsources-does-not-control) |

361| `skills` | `string[] \| 'all'` | `undefined` | Skills yang tersedia untuk sesi. Lewatkan `'all'` untuk mengaktifkan setiap skill yang ditemukan, atau daftar nama skill. Ketika diatur, SDK mengaktifkan tool Skill secara otomatis tanpa mencantumkannya dalam `allowedTools`. Lihat [Skills](/id/agent-sdk/skills) |

361| `spawnClaudeCodeProcess` | `(options: SpawnOptions) => SpawnedProcess` | `undefined` | Fungsi kustom untuk spawn proses Claude Code. Gunakan untuk menjalankan Claude Code di VM, kontainer, atau lingkungan jarak jauh |362| `spawnClaudeCodeProcess` | `(options: SpawnOptions) => SpawnedProcess` | `undefined` | Fungsi kustom untuk spawn proses Claude Code. Gunakan untuk menjalankan Claude Code di VM, kontainer, atau lingkungan jarak jauh |

362| `stderr` | `(data: string) => void` | `undefined` | Callback untuk output stderr |363| `stderr` | `(data: string) => void` | `undefined` | Callback untuk output stderr |

363| `strictMcpConfig` | `boolean` | `false` | Terapkan validasi MCP ketat |364| `strictMcpConfig` | `boolean` | `false` | Terapkan validasi MCP ketat |


528```529```

529 530 

530| Field | Diperlukan | Deskripsi |531| Field | Diperlukan | Deskripsi |

531| :------------------------------------ | :--------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |532| :------------------------------------ | :--------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

532| `description` | Ya | Deskripsi bahasa alami tentang kapan menggunakan agen ini |533| `description` | Ya | Deskripsi bahasa alami tentang kapan menggunakan agen ini |

533| `tools` | Tidak | Array nama tool yang diizinkan. Jika dihilangkan, mewarisi semua tool dari parent |534| `tools` | Tidak | Array nama tool yang diizinkan. Jika dihilangkan, mewarisi semua tool dari parent. Untuk preload Skills ke dalam konteks agen, gunakan field `skills` daripada mencantumkan `'Skill'` di sini |

534| `disallowedTools` | Tidak | Array nama tool untuk secara eksplisit tidak izinkan untuk agen ini |535| `disallowedTools` | Tidak | Array nama tool untuk secara eksplisit tidak izinkan untuk agen ini |

535| `prompt` | Ya | Prompt sistem agen |536| `prompt` | Ya | Prompt sistem agen |

536| `model` | Tidak | Penggantian model untuk agen ini. Menerima alias seperti `'sonnet'`, `'opus'`, `'haiku'`, `'inherit'`, atau ID model lengkap. Jika dihilangkan atau `'inherit'`, menggunakan model utama |537| `model` | Tidak | Penggantian model untuk agen ini. Menerima alias seperti `'sonnet'`, `'opus'`, `'haiku'`, `'inherit'`, atau ID model lengkap. Jika dihilangkan atau `'inherit'`, menggunakan model utama |


1176 transcript_path: string;1177 transcript_path: string;

1177 cwd: string;1178 cwd: string;

1178 permission_mode?: string;1179 permission_mode?: string;

1180 effort?: { level: string };

1179 agent_id?: string;1181 agent_id?: string;

1180 agent_type?: string;1182 agent_type?: string;

1181};1183};

Details

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.3> Use this file to discover all available pages before exploring further.

4 4 

5# TypeScript SDK V2 interface (preview)5# TypeScript SDK V2 session API (deprecated)

6 6 

7> Pratinjau SDK Agent TypeScript V2 yang disederhanakan, dengan pola send/stream berbasis sesi untuk percakapan multi-turn.7> Referensi untuk API sesi SDK Agent TypeScript V2 yang sudah usang, dengan pola send/stream berbasis sesi untuk percakapan multi-turn.

8 8 

9<Warning>9<Warning>

10 Antarmuka V2 adalah **pratinjau yang tidak stabil**. API mungkin berubah berdasarkan umpan balik sebelum menjadi stabil. Beberapa fitur seperti session forking hanya tersedia di [SDK V1](/id/agent-sdk/typescript).10 Fungsi API sesi V2 `unstable_v2_createSession`, `unstable_v2_resumeSession`, dan `unstable_v2_prompt` sudah usang dan akan dihapus dalam rilis mendatang. Gunakan [API V1 `query()`](/id/agent-sdk/typescript) sebagai gantinya.

11</Warning>11</Warning>

12 12 

13SDK Agent TypeScript Claude V2 menghilangkan kebutuhan untuk async generators dan koordinasi yield. Ini membuat percakapan multi-turn lebih sederhana, alih-alih mengelola status generator di seluruh turn, setiap turn adalah siklus `send()`/`stream()` terpisah. Permukaan API berkurang menjadi tiga konsep:13V2 adalah API sesi eksperimental yang menghilangkan kebutuhan untuk async generators dan koordinasi yield. Alih-alih mengelola status generator di seluruh turn, setiap turn adalah siklus `send()`/`stream()` terpisah. Permukaan API berkurang menjadi tiga konsep:

14 14 

15* `createSession()` / `resumeSession()`: Mulai atau lanjutkan percakapan15* `createSession()` / `resumeSession()`: Mulai atau lanjutkan percakapan

16* `session.send()`: Kirim pesan16* `session.send()`: Kirim pesan


380 380 

381## Ketersediaan fitur381## Ketersediaan fitur

382 382 

383Tidak semua fitur V1 tersedia di V2 belum. Berikut ini memerlukan penggunaan [SDK V1](/id/agent-sdk/typescript):383API sesi V2 tidak mendukung setiap fitur V1. Berikut ini memerlukan [SDK V1](/id/agent-sdk/typescript):

384 384 

385* Session forking (opsi `forkSession`)385* Session forking (opsi `forkSession`)

386* Beberapa pola input streaming lanjutan386* Beberapa pola input streaming lanjutan

387 387 

388## Umpan balik

389 

390Bagikan umpan balik Anda tentang antarmuka V2 sebelum menjadi stabil. Laporkan masalah dan saran melalui [GitHub Issues](https://github.com/anthropics/claude-code/issues).

391 

392## Lihat juga388## Lihat juga

393 389 

394* [Referensi TypeScript SDK (V1)](/id/agent-sdk/typescript) - Dokumentasi SDK V1 lengkap390* [Referensi TypeScript SDK (V1)](/id/agent-sdk/typescript) - Dokumentasi SDK V1 lengkap

agent-teams.md +1 −1

Details

420Jelajahi pendekatan terkait untuk pekerjaan paralel dan delegasi:420Jelajahi pendekatan terkait untuk pekerjaan paralel dan delegasi:

421 421 

422* **Delegasi ringan**: [subagents](/id/sub-agents) menelurkan agent pembantu untuk penelitian atau verifikasi dalam session Anda, lebih baik untuk tugas yang tidak memerlukan koordinasi inter-agent422* **Delegasi ringan**: [subagents](/id/sub-agents) menelurkan agent pembantu untuk penelitian atau verifikasi dalam session Anda, lebih baik untuk tugas yang tidak memerlukan koordinasi inter-agent

423* **Session paralel manual**: [Git worktrees](/id/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees) memungkinkan Anda menjalankan beberapa session Claude Code sendiri tanpa koordinasi tim otomatis423* **Session paralel manual**: [Git worktrees](/id/worktrees) memungkinkan Anda menjalankan beberapa session Claude Code sendiri tanpa koordinasi tim otomatis

424* **Bandingkan pendekatan**: lihat perbandingan [subagent vs tim agent](/id/features-overview#compare-similar-features) untuk rincian side-by-side424* **Bandingkan pendekatan**: lihat perbandingan [subagent vs tim agent](/id/features-overview#compare-similar-features) untuk rincian side-by-side

amazon-bedrock.md +1 −111

Details

76 </div>;76 </div>;

77};77};

78 78 

79export const Experiment = ({flag, treatment, children}) => {79<ContactSalesCard surface="bedrock" />

80 const VID_KEY = 'exp_vid';

81 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

82 const fnv1a = s => {

83 let h = 0x811c9dc5;

84 for (let i = 0; i < s.length; i++) {

85 h ^= s.charCodeAt(i);

86 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

87 }

88 return h >>> 0;

89 };

90 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

91 const [decision] = useState(() => {

92 const params = new URLSearchParams(location.search);

93 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

94 const force = params.get('gb-force');

95 if (force) {

96 for (const p of force.split(',')) {

97 const [k, v] = p.split(':');

98 if (k === flag) return {

99 variant: v || 'treatment',

100 track: false

101 };

102 }

103 }

104 if (navigator.globalPrivacyControl) {

105 return {

106 variant: 'control',

107 track: false

108 };

109 }

110 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

111 if (prefsMatch) {

112 try {

113 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

114 return {

115 variant: 'control',

116 track: false

117 };

118 }

119 } catch {

120 return {

121 variant: 'control',

122 track: false

123 };

124 }

125 } else {

126 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

127 if (!country || CONSENT_COUNTRIES.has(country)) {

128 return {

129 variant: 'control',

130 track: false

131 };

132 }

133 }

134 let vid;

135 try {

136 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

137 if (ajsMatch) {

138 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

139 } else {

140 vid = localStorage.getItem(VID_KEY);

141 if (!vid) {

142 vid = crypto.randomUUID();

143 }

144 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

145 }

146 try {

147 localStorage.setItem(VID_KEY, vid);

148 } catch {}

149 } catch {

150 return {

151 variant: 'control',

152 track: false

153 };

154 }

155 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

156 return {

157 variant,

158 track: true,

159 vid

160 };

161 });

162 useEffect(() => {

163 if (!decision.track) return;

164 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

165 method: 'POST',

166 headers: {

167 'Content-Type': 'application/json',

168 'x-service-name': 'claude_code_docs'

169 },

170 body: JSON.stringify({

171 events: [{

172 event_type: 'GrowthbookExperimentEvent',

173 event_data: {

174 device_id: decision.vid,

175 anonymous_id: decision.vid,

176 timestamp: new Date().toISOString(),

177 experiment_id: flag,

178 variation_id: decision.variant === 'treatment' ? 1 : 0,

179 environment: 'production'

180 }

181 }]

182 }),

183 keepalive: true

184 }).catch(() => {});

185 }, []);

186 return decision.variant === 'treatment' ? treatment : children;

187};

188 

189<Experiment flag="docs-contact-sales-cta" treatment={<ContactSalesCard surface="bedrock" />} />

190 80 

191## Prasyarat81## Prasyarat

192 82 

Details

84| `--permission-mode` | Mulai dalam [mode izin](/id/permission-modes) yang ditentukan. Menerima `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, atau `bypassPermissions`. Menimpa `defaultMode` dari file pengaturan | `claude --permission-mode plan` |84| `--permission-mode` | Mulai dalam [mode izin](/id/permission-modes) yang ditentukan. Menerima `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, atau `bypassPermissions`. Menimpa `defaultMode` dari file pengaturan | `claude --permission-mode plan` |

85| `--permission-prompt-tool` | Tentukan tool MCP untuk menangani prompt izin dalam mode non-interaktif | `claude -p --permission-prompt-tool mcp_auth_tool "query"` |85| `--permission-prompt-tool` | Tentukan tool MCP untuk menangani prompt izin dalam mode non-interaktif | `claude -p --permission-prompt-tool mcp_auth_tool "query"` |

86| `--plugin-dir` | Muat plugin dari direktori atau arsip `.zip` untuk sesi ini saja. Setiap flag mengambil satu jalur. Ulangi flag untuk beberapa plugin: `--plugin-dir A --plugin-dir B.zip` | `claude --plugin-dir ./my-plugin` |86| `--plugin-dir` | Muat plugin dari direktori atau arsip `.zip` untuk sesi ini saja. Setiap flag mengambil satu jalur. Ulangi flag untuk beberapa plugin: `--plugin-dir A --plugin-dir B.zip` | `claude --plugin-dir ./my-plugin` |

87| `--plugin-url` | Ambil arsip plugin `.zip` dari URL untuk sesi ini saja. Setiap flag mengambil satu URL. Ulangi flag untuk beberapa plugin | `claude --plugin-url https://example.com/plugin.zip` |87| `--plugin-url` | Ambil arsip plugin `.zip` dari URL untuk sesi ini saja. Ulangi flag untuk beberapa plugin, atau berikan URL yang dipisahkan spasi dalam satu nilai yang dikutip | `claude --plugin-url https://example.com/plugin.zip` |

88| `--print`, `-p` | Cetak respons tanpa mode interaktif (lihat [dokumentasi Agent SDK](/id/agent-sdk/overview) untuk detail penggunaan programatik) | `claude -p "query"` |88| `--print`, `-p` | Cetak respons tanpa mode interaktif (lihat [dokumentasi Agent SDK](/id/agent-sdk/overview) untuk detail penggunaan programatik) | `claude -p "query"` |

89| `--remote` | Buat sesi [web](/id/claude-code-on-the-web) baru di claude.ai dengan deskripsi tugas yang disediakan | `claude --remote "Fix the login bug"` |89| `--remote` | Buat sesi [web](/id/claude-code-on-the-web) baru di claude.ai dengan deskripsi tugas yang disediakan | `claude --remote "Fix the login bug"` |

90| `--remote-control`, `--rc` | Mulai sesi interaktif dengan [Remote Control](/id/remote-control#start-a-remote-control-session) diaktifkan sehingga Anda juga dapat mengontrolnya dari claude.ai atau aplikasi Claude. Secara opsional berikan nama untuk sesi | `claude --remote-control "My Project"` |90| `--remote-control`, `--rc` | Mulai sesi interaktif dengan [Remote Control](/id/remote-control#start-a-remote-control-session) diaktifkan sehingga Anda juga dapat mengontrolnya dari claude.ai atau aplikasi Claude. Secara opsional berikan nama untuk sesi | `claude --remote-control "My Project"` |


103| `--tools` | Batasi tools bawaan mana yang dapat digunakan Claude. Gunakan `""` untuk menonaktifkan semua, `"default"` untuk semua, atau nama tools seperti `"Bash,Edit,Read"` | `claude --tools "Bash,Edit,Read"` |103| `--tools` | Batasi tools bawaan mana yang dapat digunakan Claude. Gunakan `""` untuk menonaktifkan semua, `"default"` untuk semua, atau nama tools seperti `"Bash,Edit,Read"` | `claude --tools "Bash,Edit,Read"` |

104| `--verbose` | Aktifkan logging verbose, menampilkan output putaran penuh. Menimpa pengaturan [`viewMode`](/id/settings#available-settings) untuk sesi ini | `claude --verbose` |104| `--verbose` | Aktifkan logging verbose, menampilkan output putaran penuh. Menimpa pengaturan [`viewMode`](/id/settings#available-settings) untuk sesi ini | `claude --verbose` |

105| `--version`, `-v` | Keluarkan nomor versi | `claude -v` |105| `--version`, `-v` | Keluarkan nomor versi | `claude -v` |

106| `--worktree`, `-w` | Mulai Claude dalam [git worktree](/id/worktrees) terisolasi di `<repo>/.claude/worktrees/<name>`. Jika tidak ada nama yang diberikan, satu akan dibuat secara otomatis | `claude -w feature-auth` |106| `--worktree`, `-w` | Mulai Claude dalam [git worktree](/id/worktrees) terisolasi di `<repo>/.claude/worktrees/<name>`. Jika tidak ada nama yang diberikan, satu akan dibuat secara otomatis. Berikan `#<number>` atau URL pull request GitHub untuk mengambil PR itu dari `origin` dan membuat cabang worktree darinya | `claude -w feature-auth` |

107 107 

108### Flag prompt sistem108### Flag prompt sistem

109 109 

commands.md +21 −3

Details

12 12 

13Sebuah perintah hanya dikenali di awal pesan Anda. Teks yang mengikuti nama perintah diteruskan kepadanya sebagai argumen.13Sebuah perintah hanya dikenali di awal pesan Anda. Teks yang mengikuti nama perintah diteruskan kepadanya sebagai argumen.

14 14 

15Tabel di bawah mencantumkan semua perintah yang disertakan dalam Claude Code. Entri yang ditandai **[Skill](/id/skills#bundled-skills)** adalah skills bundel. Mereka menggunakan mekanisme yang sama dengan skills yang Anda tulis sendiri: prompt yang diberikan kepada Claude, yang juga dapat Claude panggil secara otomatis ketika relevan. Semuanya yang lain adalah perintah bawaan yang perilakunya dikodekan ke dalam CLI. Untuk menambahkan perintah Anda sendiri, lihat [skills](/id/skills).15## Perintah di seluruh alur kerja khas

16 

17Sebagian besar perintah berguna pada titik tertentu dalam sesi, dari pengaturan proyek hingga pengiriman perubahan.

18 

19**Sesi pertama di repo.** Jalankan `/init` untuk menghasilkan `CLAUDE.md` pemula, kemudian `/memory` untuk menyempurnakannya. Gunakan `/mcp` dan `/agents` untuk mengatur server atau subagent apa pun yang dibutuhkan proyek, dan `/permissions` untuk menetapkan aturan persetujuan yang Anda inginkan.

20 

21**Selama tugas.** `/plan` beralih ke plan mode sebelum perubahan besar. `/model` dan `/effort` menyesuaikan berapa banyak reasoning yang Anda keluarkan. Ketika percakapan menjadi panjang, `/context` menunjukkan ke mana jendela akan pergi dan `/compact` merangkumnya; gunakan `/btw` untuk pertanyaan sampingan cepat yang tidak boleh membengkak riwayat.

22 

23**Sebelum Anda mengirim.** `/diff` menampilkan apa yang berubah, `/simplify` meninjau file terbaru dan menerapkan perbaikan kualitas dan efisiensi, dan `/review` atau `/security-review` memberikan pembacaan pass read-only yang lebih dalam.

16 24 

17Tidak setiap perintah muncul untuk setiap pengguna. Ketersediaan tergantung pada platform, paket, dan lingkungan Anda. Misalnya, `/desktop` hanya muncul di macOS dan Windows, dan `/upgrade` hanya muncul di paket Pro dan Max.25**Antar sesi.** `/clear` memulai segar pada tugas baru sambil menyimpan memori proyek. `/resume` dan `/branch` memungkinkan Anda kembali ke atau fork percakapan sebelumnya. `/teleport` menarik sesi web ke terminal ini, dan `/remote-control` memungkinkan Anda melanjutkan sesi lokal ini dari perangkat lain.

26 

27**Ketika ada yang salah.** `/rewind` mengembalikan kode dan percakapan ke checkpoint. `/doctor` dan `/debug` mendiagnosis masalah instalasi dan runtime, dan `/feedback` melaporkan bug dengan konteks sesi terlampir.

28 

29## Semua perintah

30 

31Tabel di bawah mencantumkan semua perintah yang disertakan dalam Claude Code. Entri yang ditandai **[Skill](/id/skills#bundled-skills)** adalah skills bundel. Mereka menggunakan mekanisme yang sama dengan skills yang Anda tulis sendiri: prompt yang diberikan kepada Claude, yang juga dapat Claude panggil secara otomatis ketika relevan. Semuanya yang lain adalah perintah bawaan yang perilakunya dikodekan ke dalam CLI. Untuk menambahkan perintah Anda sendiri, lihat [skills](/id/skills).

18 32 

19Dalam tabel di bawah, `<arg>` menunjukkan argumen yang diperlukan dan `[arg]` menunjukkan argumen yang opsional.33Dalam tabel di bawah, `<arg>` menunjukkan argumen yang diperlukan dan `[arg]` menunjukkan argumen yang opsional.

20 34 

35<Note>

36 Tidak setiap perintah muncul untuk setiap pengguna. Ketersediaan tergantung pada platform, paket, dan lingkungan Anda. Misalnya, `/desktop` hanya muncul di macOS dan Windows, dan `/upgrade` hanya muncul di paket Pro dan Max.

37</Note>

38 

21| Perintah | Tujuan |39| Perintah | Tujuan |

22| :---------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |40| :---------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

23| `/add-dir <path>` | Tambahkan direktori kerja untuk akses file selama sesi saat ini. Sebagian besar konfigurasi `.claude/` [tidak ditemukan](/id/permissions#additional-directories-grant-file-access-not-configuration) dari direktori yang ditambahkan. Anda dapat nanti melanjutkan sesi dari direktori yang ditambahkan dengan `--continue` atau `--resume` |41| `/add-dir <path>` | Tambahkan direktori kerja untuk akses file selama sesi saat ini. Sebagian besar konfigurasi `.claude/` [tidak ditemukan](/id/permissions#additional-directories-grant-file-access-not-configuration) dari direktori yang ditambahkan. Anda dapat nanti melanjutkan sesi dari direktori yang ditambahkan dengan `--continue` atau `--resume` |


80| `/review [PR]` | Tinjau pull request secara lokal dalam sesi saat ini Anda. Untuk review berbasis cloud yang lebih dalam, lihat [`/ultrareview`](/id/ultrareview) |98| `/review [PR]` | Tinjau pull request secara lokal dalam sesi saat ini Anda. Untuk review berbasis cloud yang lebih dalam, lihat [`/ultrareview`](/id/ultrareview) |

81| `/rewind` | Putar ulang percakapan dan/atau kode ke titik sebelumnya, atau ringkas dari pesan yang dipilih. Lihat [checkpointing](/id/checkpointing). Alias: `/checkpoint`, `/undo` |99| `/rewind` | Putar ulang percakapan dan/atau kode ke titik sebelumnya, atau ringkas dari pesan yang dipilih. Lihat [checkpointing](/id/checkpointing). Alias: `/checkpoint`, `/undo` |

82| `/sandbox` | Alihkan [sandbox mode](/id/sandboxing). Tersedia hanya di platform yang didukung |100| `/sandbox` | Alihkan [sandbox mode](/id/sandboxing). Tersedia hanya di platform yang didukung |

83| `/schedule [description]` | Buat, perbarui, daftar, atau jalankan [routines](/id/routines). Claude memandu Anda melalui pengaturan secara percakapan. Alias: `/routines` |101| `/schedule [description]` | Buat, perbarui, daftar, atau jalankan [routines](/id/routines), yang dijalankan pada infrastruktur cloud yang dikelola Anthropic. Claude memandu Anda melalui pengaturan secara percakapan. Alias: `/routines` |

84| `/security-review` | Analisis perubahan yang tertunda pada cabang saat ini untuk kerentanan keamanan. Meninjau git diff dan mengidentifikasi risiko seperti injeksi, masalah auth, dan paparan data |102| `/security-review` | Analisis perubahan yang tertunda pada cabang saat ini untuk kerentanan keamanan. Meninjau git diff dan mengidentifikasi risiko seperti injeksi, masalah auth, dan paparan data |

85| `/setup-bedrock` | Konfigurasi autentikasi [Amazon Bedrock](/id/amazon-bedrock), region, dan model pins melalui wizard interaktif. Hanya terlihat ketika `CLAUDE_CODE_USE_BEDROCK=1` diatur. Pengguna Bedrock pertama kali juga dapat mengakses wizard ini dari layar login |103| `/setup-bedrock` | Konfigurasi autentikasi [Amazon Bedrock](/id/amazon-bedrock), region, dan model pins melalui wizard interaktif. Hanya terlihat ketika `CLAUDE_CODE_USE_BEDROCK=1` diatur. Pengguna Bedrock pertama kali juga dapat mengakses wizard ini dari layar login |

86| `/setup-vertex` | Konfigurasi autentikasi [Google Vertex AI](/id/google-vertex-ai), proyek, region, dan model pins melalui wizard interaktif. Hanya terlihat ketika `CLAUDE_CODE_USE_VERTEX=1` diatur. Pengguna Vertex AI pertama kali juga dapat mengakses wizard ini dari layar login |104| `/setup-vertex` | Konfigurasi autentikasi [Google Vertex AI](/id/google-vertex-ai), proyek, region, dan model pins melalui wizard interaktif. Hanya terlihat ketika `CLAUDE_CODE_USE_VERTEX=1` diatur. Pengguna Vertex AI pertama kali juga dapat mengakses wizard ini dari layar login |

desktop.md +18 −1

Details

564 564 

565Setiap entri memerlukan `id`, `name`, dan `sshHost`. Bidang `sshPort`, `sshIdentityFile`, dan `startDirectory` bersifat opsional. Pengguna juga dapat menambahkan `sshConfigs` ke `~/.claude/settings.json` mereka sendiri, yang merupakan tempat koneksi yang ditambahkan melalui dialog disimpan.565Setiap entri memerlukan `id`, `name`, dan `sshHost`. Bidang `sshPort`, `sshIdentityFile`, dan `startDirectory` bersifat opsional. Pengguna juga dapat menambahkan `sshConfigs` ke `~/.claude/settings.json` mereka sendiri, yang merupakan tempat koneksi yang ditambahkan melalui dialog disimpan.

566 566 

567#### Restrict which SSH hosts users can connect to

568 

569Administrator dapat membatasi sesi SSH Desktop ke set host yang disetujui dengan menambahkan `sshHostAllowlist` ke file [managed settings](/id/settings#settings-precedence). Ketika diatur, pengguna hanya dapat terhubung ke host yang nama hostname terselesaikannya cocok dengan salah satu pola. Atur ke array kosong untuk menonaktifkan sesi SSH sepenuhnya.

570 

571Contoh berikut memungkinkan koneksi ke host apa pun di bawah `devboxes.example.com` dan ke satu host bastion bernama:

572 

573```json theme={null}

574{

575 "sshHostAllowlist": ["*.devboxes.example.com", "bastion.example.com"]

576}

577```

578 

579Pola tidak peka huruf besar-kecil. `*` cocok dengan host apa pun, dan `*.example.com` cocok dengan `example.com` dan subdomain apa pun. Apa pun yang lain adalah kecocokan yang tepat. Pemeriksaan berjalan terhadap hostname setelah resolusi `~/.ssh/config` melalui `ssh -G`, sehingga alias `Host` dan entri `ProxyCommand`/`ProxyJump` diizinkan selama `HostName` yang terselesaikan cocok.

580 

581`sshHostAllowlist` dibaca dari managed settings saja; nilai dalam pengaturan pengguna atau proyek diabaikan. Hanya aplikasi Claude Desktop yang menghormati pengaturan ini; CLI Claude Code dan ekstensi IDE tidak membacanya, dan itu tidak membatasi perintah `ssh` yang dijalankan melalui alat Bash. Ini mengatur host mana yang terhubung oleh aplikasi Desktop, bukan egress jaringan, jadi pasangkan dengan kontrol jaringan organisasi Anda atau kontrol zero-trust jika Anda memerlukan batas yang keras.

582 

567## Konfigurasi Enterprise583## Konfigurasi Enterprise

568 584 

569Organisasi pada rencana Team atau Enterprise dapat mengelola perilaku aplikasi desktop melalui kontrol konsol admin, file pengaturan yang dikelola, dan kebijakan manajemen perangkat.585Organisasi pada rencana Team atau Enterprise dapat mengelola perilaku aplikasi desktop melalui kontrol konsol admin, file pengaturan yang dikelola, dan kebijakan manajemen perangkat.


582Pengaturan yang dikelola menimpa pengaturan proyek dan pengguna dan berlaku ketika Desktop menjalankan sesi CLI. Anda dapat mengatur kunci ini di file [managed settings](/id/settings#settings-precedence) organisasi Anda atau mendorongnya dari jarak jauh melalui konsol admin.598Pengaturan yang dikelola menimpa pengaturan proyek dan pengguna dan berlaku ketika Desktop menjalankan sesi CLI. Anda dapat mengatur kunci ini di file [managed settings](/id/settings#settings-precedence) organisasi Anda atau mendorongnya dari jarak jauh melalui konsol admin.

583 599 

584| Key | Description |600| Key | Description |

585| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |601| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

586| `permissions.disableBypassPermissionsMode` | atur ke `"disable"` untuk mencegah pengguna dari mengaktifkan Bypass permissions mode. |602| `permissions.disableBypassPermissionsMode` | atur ke `"disable"` untuk mencegah pengguna dari mengaktifkan Bypass permissions mode. |

587| `disableAutoMode` | atur ke `"disable"` untuk mencegah pengguna dari mengaktifkan [Auto](/id/permission-modes#eliminate-prompts-with-auto-mode) mode. Menghapus Auto dari pemilih mode. Juga diterima di bawah `permissions`. |603| `disableAutoMode` | atur ke `"disable"` untuk mencegah pengguna dari mengaktifkan [Auto](/id/permission-modes#eliminate-prompts-with-auto-mode) mode. Menghapus Auto dari pemilih mode. Juga diterima di bawah `permissions`. |

588| `autoMode` | sesuaikan apa yang dipercaya dan diblokir oleh pengklasifikasi auto mode di seluruh organisasi Anda. Lihat [Configure auto mode](/id/auto-mode-config). |604| `autoMode` | sesuaikan apa yang dipercaya dan diblokir oleh pengklasifikasi auto mode di seluruh organisasi Anda. Lihat [Configure auto mode](/id/auto-mode-config). |

589| `sshConfigs` | pre-configure [SSH connections](#pre-configure-ssh-connections-for-your-team) yang muncul di dropdown lingkungan. Pengguna tidak dapat mengedit atau menghapus koneksi yang dikelola. |605| `sshConfigs` | pre-configure [SSH connections](#pre-configure-ssh-connections-for-your-team) yang muncul di dropdown lingkungan. Pengguna tidak dapat mengedit atau menghapus koneksi yang dikelola. |

606| `sshHostAllowlist` | batasi [SSH sessions](#restrict-which-ssh-hosts-users-can-connect-to) ke host yang nama hostname yang diselesaikannya cocok dengan salah satu pola ini. Array kosong menonaktifkan sesi SSH. Dibaca dari pengaturan yang dikelola saja. |

590 607 

591File pengaturan yang dikelola yang disebarkan ke disk pada setiap mesin berlaku untuk sesi Desktop. Pengaturan yang dikelola yang didorong dari jarak jauh melalui konsol admin saat ini hanya mencapai sesi CLI dan IDE, jadi untuk penyebaran Desktop baik distribusikan file melalui MDM atau gunakan [kontrol konsol admin](#admin-console-controls) di atas.608File pengaturan yang dikelola yang disebarkan ke disk pada setiap mesin berlaku untuk sesi Desktop. Pengaturan yang dikelola yang didorong dari jarak jauh melalui konsol admin saat ini hanya mencapai sesi CLI dan IDE, jadi untuk penyebaran Desktop baik distribusikan file melalui MDM atau gunakan [kontrol konsol admin](#admin-console-controls) di atas.

592 609 

env-vars.md +3 −1

Details

92| `CLAUDE_CODE_EFFORT_LEVEL` | Atur tingkat upaya untuk model yang didukung. Nilai: `low`, `medium`, `high`, `xhigh`, `max`, atau `auto` untuk menggunakan default model. Tingkat yang tersedia tergantung pada model. Mengambil alih `/effort` dan pengaturan `effortLevel`. Lihat [Sesuaikan tingkat upaya](/id/model-config#adjust-effort-level) |92| `CLAUDE_CODE_EFFORT_LEVEL` | Atur tingkat upaya untuk model yang didukung. Nilai: `low`, `medium`, `high`, `xhigh`, `max`, atau `auto` untuk menggunakan default model. Tingkat yang tersedia tergantung pada model. Mengambil alih `/effort` dan pengaturan `effortLevel`. Lihat [Sesuaikan tingkat upaya](/id/model-config#adjust-effort-level) |

93| `CLAUDE_CODE_ENABLE_AWAY_SUMMARY` | Ganti ketersediaan [session recap](/id/interactive-mode#session-recap). Atur ke `0` untuk memaksa recap mati terlepas dari toggle `/config`. Atur ke `1` untuk memaksa recap aktif saat [`awaySummaryEnabled`](/id/settings#available-settings) adalah `false`. Mengambil alih pengaturan dan toggle `/config` |93| `CLAUDE_CODE_ENABLE_AWAY_SUMMARY` | Ganti ketersediaan [session recap](/id/interactive-mode#session-recap). Atur ke `0` untuk memaksa recap mati terlepas dari toggle `/config`. Atur ke `1` untuk memaksa recap aktif saat [`awaySummaryEnabled`](/id/settings#available-settings) adalah `false`. Mengambil alih pengaturan dan toggle `/config` |

94| `CLAUDE_CODE_ENABLE_BACKGROUND_PLUGIN_REFRESH` | Atur ke `1` untuk menyegarkan status plugin pada batas giliran dalam [mode non-interaktif](/id/headless) setelah instalasi latar belakang selesai. Dimatikan secara default karena penyegaran mengubah prompt sistem di tengah sesi, yang membatalkan [prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) untuk giliran itu |94| `CLAUDE_CODE_ENABLE_BACKGROUND_PLUGIN_REFRESH` | Atur ke `1` untuk menyegarkan status plugin pada batas giliran dalam [mode non-interaktif](/id/headless) setelah instalasi latar belakang selesai. Dimatikan secara default karena penyegaran mengubah prompt sistem di tengah sesi, yang membatalkan [prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) untuk giliran itu |

95| `CLAUDE_CODE_ENABLE_FINE_GRAINED_TOOL_STREAMING` | Mengontrol apakah input panggilan alat mengalir dari API saat Claude menghasilkannya. Tanpa ini, input alat besar seperti penulisan file panjang tiba hanya setelah Claude selesai menghasilkannya, yang dapat terlihat seperti sedang hang. Diaktifkan secara default untuk koneksi API Anthropic langsung. Atur ke `0` untuk menolak. Atur ke `1` untuk memaksa pengaktifan bahkan saat default sisi server mati. Tidak berpengaruh pada Bedrock, Vertex, Foundry, atau koneksi [gateway](/id/llm-gateway) |95| `CLAUDE_CODE_ENABLE_FINE_GRAINED_TOOL_STREAMING` | Mengontrol apakah input panggilan alat mengalir dari API saat Claude menghasilkannya. Tanpa ini, input alat besar seperti penulisan file panjang tiba hanya setelah Claude selesai menghasilkannya, yang dapat terlihat seperti sedang hang. Diaktifkan secara default pada API Anthropic. Pada Bedrock dan Vertex, diaktifkan per model di mana kontainer yang digunakan mendukungnya. Atur ke `0` untuk menolak. Atur ke `1` untuk memaksa pengaktifan saat merutekan melalui proxy melalui `ANTHROPIC_BASE_URL`, `ANTHROPIC_VERTEX_BASE_URL`, atau `ANTHROPIC_BEDROCK_BASE_URL`. Dimatikan secara default pada Foundry dan koneksi [gateway](/id/llm-gateway) |

96| `CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY` | Atur ke `1` untuk mengisi pemilih `/model` dari titik akhir `/v1/models` gateway Anda saat `ANTHROPIC_BASE_URL` menunjuk ke gateway yang kompatibel dengan Anthropic seperti LiteLLM, Kong, atau proxy internal. Dimatikan secara default karena gateway yang didukung oleh kunci API bersama akan menampilkan setiap pengguna setiap model yang dapat diakses kunci. Model yang ditemukan masih disaring oleh daftar allowlist [`availableModels`](/id/settings#available-settings) |96| `CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY` | Atur ke `1` untuk mengisi pemilih `/model` dari titik akhir `/v1/models` gateway Anda saat `ANTHROPIC_BASE_URL` menunjuk ke gateway yang kompatibel dengan Anthropic seperti LiteLLM, Kong, atau proxy internal. Dimatikan secara default karena gateway yang didukung oleh kunci API bersama akan menampilkan setiap pengguna setiap model yang dapat diakses kunci. Model yang ditemukan masih disaring oleh daftar allowlist [`availableModels`](/id/settings#available-settings) |

97| `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` | Atur ke `false` untuk menonaktifkan saran prompt (toggle "Prompt suggestions" di `/config`). Ini adalah prediksi yang diarsir yang muncul di input prompt Anda setelah Claude merespons. Lihat [Saran prompt](/id/interactive-mode#prompt-suggestions) |97| `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` | Atur ke `false` untuk menonaktifkan saran prompt (toggle "Prompt suggestions" di `/config`). Ini adalah prediksi yang diarsir yang muncul di input prompt Anda setelah Claude merespons. Lihat [Saran prompt](/id/interactive-mode#prompt-suggestions) |

98| `CLAUDE_CODE_ENABLE_TASKS` | Atur ke `1` untuk mengaktifkan sistem pelacakan tugas dalam mode non-interaktif (flag `-p`). Tugas aktif secara default dalam mode interaktif. Lihat [Daftar tugas](/id/interactive-mode#task-list) |98| `CLAUDE_CODE_ENABLE_TASKS` | Atur ke `1` untuk mengaktifkan sistem pelacakan tugas dalam mode non-interaktif (flag `-p`). Tugas aktif secara default dalam mode interaktif. Lihat [Daftar tugas](/id/interactive-mode#task-list) |


164| `CLAUDE_CODE_USE_POWERSHELL_TOOL` | Mengontrol alat PowerShell. Pada Windows tanpa Git Bash, alat diaktifkan secara otomatis; atur ke `0` untuk menonaktifkannya. Pada Windows dengan Git Bash diinstal, alat sedang diluncurkan secara progresif: atur ke `1` untuk memilih atau `0` untuk menolak. Pada Linux, macOS, dan WSL, atur ke `1` untuk mengaktifkannya, yang memerlukan `pwsh` di `PATH` Anda. Saat diaktifkan pada Windows, Claude dapat menjalankan perintah PowerShell secara native alih-alih merutekan melalui Git Bash. Lihat [Alat PowerShell](/id/tools-reference#powershell-tool) |164| `CLAUDE_CODE_USE_POWERSHELL_TOOL` | Mengontrol alat PowerShell. Pada Windows tanpa Git Bash, alat diaktifkan secara otomatis; atur ke `0` untuk menonaktifkannya. Pada Windows dengan Git Bash diinstal, alat sedang diluncurkan secara progresif: atur ke `1` untuk memilih atau `0` untuk menolak. Pada Linux, macOS, dan WSL, atur ke `1` untuk mengaktifkannya, yang memerlukan `pwsh` di `PATH` Anda. Saat diaktifkan pada Windows, Claude dapat menjalankan perintah PowerShell secara native alih-alih merutekan melalui Git Bash. Lihat [Alat PowerShell](/id/tools-reference#powershell-tool) |

165| `CLAUDE_CODE_USE_VERTEX` | Gunakan [Vertex](/id/google-vertex-ai) |165| `CLAUDE_CODE_USE_VERTEX` | Gunakan [Vertex](/id/google-vertex-ai) |

166| `CLAUDE_CONFIG_DIR` | Ganti direktori konfigurasi (default: `~/.claude`). Semua pengaturan, kredensial, riwayat sesi, dan plugin disimpan di bawah jalur ini. Berguna untuk menjalankan beberapa akun berdampingan: misalnya, `alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude'` |166| `CLAUDE_CONFIG_DIR` | Ganti direktori konfigurasi (default: `~/.claude`). Semua pengaturan, kredensial, riwayat sesi, dan plugin disimpan di bawah jalur ini. Berguna untuk menjalankan beberapa akun berdampingan: misalnya, `alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude'` |

167| `CLAUDE_EFFORT` | Atur secara otomatis dalam subprocess alat Bash dan perintah hook ke [tingkat upaya](/id/model-config#adjust-effort-level) aktif untuk giliran: `low`, `medium`, `high`, `xhigh`, atau `max`. Cocok dengan bidang `effort.level` yang diteruskan ke [hooks](/id/hooks). Hanya diatur saat model saat ini mendukung parameter upaya |

167| `CLAUDE_ENABLE_BYTE_WATCHDOG` | Atur ke `1` untuk memaksa pengaktifan byte-level streaming idle watchdog, atau atur ke `0` untuk memaksa menonaktifkannya. Saat tidak diatur, watchdog diaktifkan secara default untuk koneksi API Anthropic. Byte watchdog membatalkan koneksi saat tidak ada byte tiba di kawat untuk durasi yang diatur oleh `CLAUDE_STREAM_IDLE_TIMEOUT_MS`, dengan minimum 5 menit, terlepas dari watchdog tingkat peristiwa |168| `CLAUDE_ENABLE_BYTE_WATCHDOG` | Atur ke `1` untuk memaksa pengaktifan byte-level streaming idle watchdog, atau atur ke `0` untuk memaksa menonaktifkannya. Saat tidak diatur, watchdog diaktifkan secara default untuk koneksi API Anthropic. Byte watchdog membatalkan koneksi saat tidak ada byte tiba di kawat untuk durasi yang diatur oleh `CLAUDE_STREAM_IDLE_TIMEOUT_MS`, dengan minimum 5 menit, terlepas dari watchdog tingkat peristiwa |

168| `CLAUDE_ENABLE_STREAM_WATCHDOG` | Atur ke `1` untuk mengaktifkan event-level streaming idle watchdog. Dimatikan secara default. Untuk Bedrock, Vertex, dan Foundry, ini adalah satu-satunya idle watchdog yang tersedia. Konfigurasikan waktu tunggu dengan `CLAUDE_STREAM_IDLE_TIMEOUT_MS` |169| `CLAUDE_ENABLE_STREAM_WATCHDOG` | Atur ke `1` untuk mengaktifkan event-level streaming idle watchdog. Dimatikan secara default. Untuk Bedrock, Vertex, dan Foundry, ini adalah satu-satunya idle watchdog yang tersedia. Konfigurasikan waktu tunggu dengan `CLAUDE_STREAM_IDLE_TIMEOUT_MS` |

169| `CLAUDE_ENV_FILE` | Jalur ke skrip shell yang isinya Claude Code jalankan sebelum setiap perintah Bash dalam proses shell yang sama, sehingga ekspor dalam file terlihat oleh perintah. Gunakan untuk mempertahankan aktivasi virtualenv atau conda di seluruh perintah. Juga diisi secara dinamis oleh hook [SessionStart](/id/hooks#persist-environment-variables), [Setup](/id/hooks#setup), [CwdChanged](/id/hooks#cwdchanged), dan [FileChanged](/id/hooks#filechanged) |170| `CLAUDE_ENV_FILE` | Jalur ke skrip shell yang isinya Claude Code jalankan sebelum setiap perintah Bash dalam proses shell yang sama, sehingga ekspor dalam file terlihat oleh perintah. Gunakan untuk mempertahankan aktivasi virtualenv atau conda di seluruh perintah. Juga diisi secara dinamis oleh hook [SessionStart](/id/hooks#persist-environment-variables), [Setup](/id/hooks#setup), [CwdChanged](/id/hooks#cwdchanged), dan [FileChanged](/id/hooks#filechanged) |


205| `MAX_THINKING_TOKENS` | Ganti anggaran token [extended thinking](https://platform.claude.com/docs/en/build-with-claude/extended-thinking). Batas maksimal adalah [max output tokens](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison) model dikurangi satu. Atur ke `0` untuk menonaktifkan pemikiran sepenuhnya. Pada model dengan [penalaran adaptif](/id/model-config#adjust-effort-level), anggaran diabaikan kecuali penalaran adaptif dinonaktifkan melalui `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` |206| `MAX_THINKING_TOKENS` | Ganti anggaran token [extended thinking](https://platform.claude.com/docs/en/build-with-claude/extended-thinking). Batas maksimal adalah [max output tokens](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison) model dikurangi satu. Atur ke `0` untuk menonaktifkan pemikiran sepenuhnya. Pada model dengan [penalaran adaptif](/id/model-config#adjust-effort-level), anggaran diabaikan kecuali penalaran adaptif dinonaktifkan melalui `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` |

206| `MCP_CLIENT_SECRET` | Rahasia klien OAuth untuk server MCP yang memerlukan [kredensial yang dikonfigurasi sebelumnya](/id/mcp#use-pre-configured-oauth-credentials). Menghindari prompt interaktif saat menambahkan server dengan `--client-secret` |207| `MCP_CLIENT_SECRET` | Rahasia klien OAuth untuk server MCP yang memerlukan [kredensial yang dikonfigurasi sebelumnya](/id/mcp#use-pre-configured-oauth-credentials). Menghindari prompt interaktif saat menambahkan server dengan `--client-secret` |

207| `MCP_CONNECTION_NONBLOCKING` | Atur ke `true` dalam mode non-interaktif (`-p`) untuk melewati penantian koneksi MCP sepenuhnya. Berguna untuk pipeline skrip di mana alat MCP tidak diperlukan. Tanpa variabel ini, kueri pertama menunggu hingga 5 detik untuk koneksi server `--mcp-config`. Server yang dikonfigurasi dengan [`alwaysLoad: true`](/id/mcp#exempt-a-server-from-deferral) selalu memblokir startup terlepas dari variabel ini, karena alat mereka harus ada saat prompt pertama dibangun |208| `MCP_CONNECTION_NONBLOCKING` | Atur ke `true` dalam mode non-interaktif (`-p`) untuk melewati penantian koneksi MCP sepenuhnya. Berguna untuk pipeline skrip di mana alat MCP tidak diperlukan. Tanpa variabel ini, kueri pertama menunggu hingga 5 detik untuk koneksi server `--mcp-config`. Server yang dikonfigurasi dengan [`alwaysLoad: true`](/id/mcp#exempt-a-server-from-deferral) selalu memblokir startup terlepas dari variabel ini, karena alat mereka harus ada saat prompt pertama dibangun |

209| `MCP_CONNECT_TIMEOUT_MS` | Berapa lama kueri pertama menunggu, dalam milidetik, untuk batch koneksi MCP sebelum mengambil snapshot daftar alat (default: 5000). Server yang masih tertunda pada batas waktu terus terhubung di latar belakang tetapi tidak akan muncul sampai kueri berikutnya. Berbeda dari `MCP_TIMEOUT`, yang membatasi upaya koneksi server individual. Paling relevan untuk sesi non-interaktif yang mengeluarkan satu kueri dan memerlukan server yang terhubung lambat untuk terlihat |

208| `MCP_OAUTH_CALLBACK_PORT` | Port tetap untuk callback pengalihan OAuth, sebagai alternatif untuk `--callback-port` saat menambahkan server MCP dengan [kredensial yang dikonfigurasi sebelumnya](/id/mcp#use-pre-configured-oauth-credentials) |210| `MCP_OAUTH_CALLBACK_PORT` | Port tetap untuk callback pengalihan OAuth, sebagai alternatif untuk `--callback-port` saat menambahkan server MCP dengan [kredensial yang dikonfigurasi sebelumnya](/id/mcp#use-pre-configured-oauth-credentials) |

209| `MCP_REMOTE_SERVER_CONNECTION_BATCH_SIZE` | Jumlah maksimal server MCP jarak jauh (HTTP/SSE) untuk terhubung secara paralel selama startup (default: 20) |211| `MCP_REMOTE_SERVER_CONNECTION_BATCH_SIZE` | Jumlah maksimal server MCP jarak jauh (HTTP/SSE) untuk terhubung secara paralel selama startup (default: 20) |

210| `MCP_SERVER_CONNECTION_BATCH_SIZE` | Jumlah maksimal server MCP lokal (stdio) untuk terhubung secara paralel selama startup (default: 3) |212| `MCP_SERVER_CONNECTION_BATCH_SIZE` | Jumlah maksimal server MCP lokal (stdio) untuk terhubung secara paralel selama startup (default: 3) |

Details

249 249 

250 **Biaya konteks:** Rendah sampai digunakan. Skills hanya pengguna memiliki biaya nol sampai dipanggil.250 **Biaya konteks:** Rendah sampai digunakan. Skills hanya pengguna memiliki biaya nol sampai dipanggil.

251 251 

252 **Di subagents:** Skills bekerja berbeda di subagents. Alih-alih pemuatan on-demand, skills yang dilewatkan ke subagent sepenuhnya dimuat sebelumnya ke konteksnya saat peluncuran. Subagents tidak mewarisi skills dari sesi utama; Anda harus menentukannya secara eksplisit.252 **Di subagents:** Skills bekerja berbeda di subagents. Alih-alih pemuatan on-demand, skills yang tercantum di field `skills:` subagent sepenuhnya dimuat sebelumnya ke konteksnya saat peluncuran. Subagents masih dapat menemukan dan memanggil skills proyek, pengguna, dan plugin yang tidak tercantum melalui alat Skill.

253 253 

254 <Tip>Gunakan `disable-model-invocation: true` untuk skills dengan efek samping. Ini menghemat konteks dan memastikan hanya Anda yang memicunya.</Tip>254 <Tip>Gunakan `disable-model-invocation: true` untuk skills dengan efek samping. Ini menghemat konteks dan memastikan hanya Anda yang memicunya.</Tip>

255 </Tab>255 </Tab>

Details

76 </div>;76 </div>;

77};77};

78 78 

79export const Experiment = ({flag, treatment, children}) => {79<ContactSalesCard surface="vertex" />

80 const VID_KEY = 'exp_vid';

81 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

82 const fnv1a = s => {

83 let h = 0x811c9dc5;

84 for (let i = 0; i < s.length; i++) {

85 h ^= s.charCodeAt(i);

86 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

87 }

88 return h >>> 0;

89 };

90 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

91 const [decision] = useState(() => {

92 const params = new URLSearchParams(location.search);

93 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

94 const force = params.get('gb-force');

95 if (force) {

96 for (const p of force.split(',')) {

97 const [k, v] = p.split(':');

98 if (k === flag) return {

99 variant: v || 'treatment',

100 track: false

101 };

102 }

103 }

104 if (navigator.globalPrivacyControl) {

105 return {

106 variant: 'control',

107 track: false

108 };

109 }

110 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

111 if (prefsMatch) {

112 try {

113 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

114 return {

115 variant: 'control',

116 track: false

117 };

118 }

119 } catch {

120 return {

121 variant: 'control',

122 track: false

123 };

124 }

125 } else {

126 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

127 if (!country || CONSENT_COUNTRIES.has(country)) {

128 return {

129 variant: 'control',

130 track: false

131 };

132 }

133 }

134 let vid;

135 try {

136 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

137 if (ajsMatch) {

138 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

139 } else {

140 vid = localStorage.getItem(VID_KEY);

141 if (!vid) {

142 vid = crypto.randomUUID();

143 }

144 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

145 }

146 try {

147 localStorage.setItem(VID_KEY, vid);

148 } catch {}

149 } catch {

150 return {

151 variant: 'control',

152 track: false

153 };

154 }

155 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

156 return {

157 variant,

158 track: true,

159 vid

160 };

161 });

162 useEffect(() => {

163 if (!decision.track) return;

164 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

165 method: 'POST',

166 headers: {

167 'Content-Type': 'application/json',

168 'x-service-name': 'claude_code_docs'

169 },

170 body: JSON.stringify({

171 events: [{

172 event_type: 'GrowthbookExperimentEvent',

173 event_data: {

174 device_id: decision.vid,

175 anonymous_id: decision.vid,

176 timestamp: new Date().toISOString(),

177 experiment_id: flag,

178 variation_id: decision.variant === 'treatment' ? 1 : 0,

179 environment: 'production'

180 }

181 }]

182 }),

183 keepalive: true

184 }).catch(() => {});

185 }, []);

186 return decision.variant === 'treatment' ? treatment : children;

187};

188 

189<Experiment flag="docs-contact-sales-cta" treatment={<ContactSalesCard surface="vertex" />} />

190 80 

191## Prasyarat81## Prasyarat

192 82 

hooks.md +5 −4

Details

518Hook events menerima bidang-bidang ini sebagai JSON, selain bidang spesifik event yang didokumentasikan dalam setiap bagian [hook event](#hook-events). Untuk command hooks, JSON ini tiba melalui stdin. Untuk HTTP hooks, itu tiba sebagai badan permintaan POST.518Hook events menerima bidang-bidang ini sebagai JSON, selain bidang spesifik event yang didokumentasikan dalam setiap bagian [hook event](#hook-events). Untuk command hooks, JSON ini tiba melalui stdin. Untuk HTTP hooks, itu tiba sebagai badan permintaan POST.

519 519 

520| Bidang | Deskripsi |520| Bidang | Deskripsi |

521| :---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |521| :---------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

522| `session_id` | Pengenal sesi saat ini |522| `session_id` | Pengenal sesi saat ini |

523| `transcript_path` | Path ke JSON percakapan |523| `transcript_path` | Path ke JSON percakapan |

524| `cwd` | Direktori kerja saat hook dipanggil |524| `cwd` | Direktori kerja saat hook dipanggil |

525| `permission_mode` | [Mode izin](/id/permissions#permission-modes) saat ini: `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, `"dontAsk"`, atau `"bypassPermissions"`. Tidak semua events menerima bidang ini: lihat contoh JSON setiap event di bawah untuk memeriksa |525| `permission_mode` | [Mode izin](/id/permissions#permission-modes) saat ini: `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, `"dontAsk"`, atau `"bypassPermissions"`. Tidak semua events menerima bidang ini: lihat contoh JSON setiap event di bawah untuk memeriksa |

526| `effort` | Objek dengan bidang `level` yang menyimpan [tingkat effort](/id/model-config#adjust-effort-level) aktif untuk giliran: `"low"`, `"medium"`, `"high"`, `"xhigh"`, atau `"max"`. Jika effort yang diminta melebihi apa yang didukung model saat ini, ini adalah tingkat yang diturunkan yang sebenarnya digunakan model, bukan tingkat yang Anda minta. Objek cocok dengan bidang `effort` [status line](/id/statusline#available-data). Hadir untuk events yang dijalankan dalam konteks penggunaan tool, seperti `PreToolUse`, `PostToolUse`, `Stop`, dan `SubagentStop`, ketika model saat ini mendukung parameter effort. Tingkat juga tersedia untuk perintah hook dan tool Bash sebagai variabel lingkungan `$CLAUDE_EFFORT`. |

526| `hook_event_name` | Nama event yang dijalankan |527| `hook_event_name` | Nama event yang dijalankan |

527 528 

528Saat berjalan dengan `--agent` atau di dalam subagent, dua bidang tambahan disertakan:529Saat berjalan dengan `--agent` atau di dalam subagent, dua bidang tambahan disertakan:


1225 1226 

1226Jika tool yang ditunda tidak lagi tersedia saat Anda melanjutkan, proses keluar dengan `stop_reason: "tool_deferred_unavailable"` dan `is_error: true` sebelum hook dijalankan. Ini terjadi ketika server MCP yang menyediakan tool tidak terhubung untuk sesi yang dilanjutkan. Payload `deferred_tool_use` masih disertakan sehingga Anda dapat mengidentifikasi tool mana yang hilang.1227Jika tool yang ditunda tidak lagi tersedia saat Anda melanjutkan, proses keluar dengan `stop_reason: "tool_deferred_unavailable"` dan `is_error: true` sebelum hook dijalankan. Ini terjadi ketika server MCP yang menyediakan tool tidak terhubung untuk sesi yang dilanjutkan. Payload `deferred_tool_use` masih disertakan sehingga Anda dapat mengidentifikasi tool mana yang hilang.

1227 1228 

1228<Warning>1229<Note>

1229 `--resume` tidak mengembalikan mode izin dari sesi sebelumnya. Teruskan flag `--permission-mode` yang sama pada resume yang aktif saat tool ditunda. Claude Code mencatat peringatan jika mode berbeda.1230 `--resume` memulihkan mode izin yang aktif saat tool ditunda, jadi Anda tidak perlu meneruskan `--permission-mode` lagi. Pengecualiannya adalah `plan` dan `bypassPermissions`, yang tidak pernah dibawa. Meneruskan `--permission-mode` secara eksplisit pada resume menimpa nilai yang dipulihkan.

1230</Warning>1231</Note>

1231 1232 

1232### PermissionRequest1233### PermissionRequest

1233 1234 

memory.md +10 −0

Details

132Gunakan plan mode untuk perubahan di bawah `src/billing/`.132Gunakan plan mode untuk perubahan di bawah `src/billing/`.

133```133```

134 134 

135Symlink juga berfungsi jika Anda tidak perlu menambahkan konten khusus Claude:

136 

137```bash theme={null}

138ln -s AGENTS.md CLAUDE.md

139```

140 

141Di Windows, membuat symlink memerlukan hak istimewa Administrator atau Developer Mode, jadi gunakan impor `@AGENTS.md` sebagai gantinya.

142 

143Menjalankan [`/init`](/id/commands) di repo yang sudah memiliki `AGENTS.md` membacanya dan menggabungkan bagian yang relevan ke dalam `CLAUDE.md` yang dihasilkan. Itu juga membaca konfigurasi alat lain seperti `.cursorrules` dan `.windsurfrules`.

144 

135### Bagaimana file CLAUDE.md dimuat145### Bagaimana file CLAUDE.md dimuat

136 146 

137Claude Code membaca file CLAUDE.md dengan berjalan naik pohon direktori dari direktori kerja saat ini, memeriksa setiap direktori di sepanjang jalan untuk file `CLAUDE.md` dan `CLAUDE.local.md`. Ini berarti jika Anda menjalankan Claude Code di `foo/bar/`, itu memuat instruksi dari `foo/bar/CLAUDE.md`, `foo/CLAUDE.md`, dan file `CLAUDE.local.md` apa pun di sebelahnya.147Claude Code membaca file CLAUDE.md dengan berjalan naik pohon direktori dari direktori kerja saat ini, memeriksa setiap direktori di sepanjang jalan untuk file `CLAUDE.md` dan `CLAUDE.local.md`. Ini berarti jika Anda menjalankan Claude Code di `foo/bar/`, itu memuat instruksi dari `foo/bar/CLAUDE.md`, `foo/CLAUDE.md`, dan file `CLAUDE.local.md` apa pun di sebelahnya.

Details

76 </div>;76 </div>;

77};77};

78 78 

79export const Experiment = ({flag, treatment, children}) => {79<ContactSalesCard surface="foundry" />

80 const VID_KEY = 'exp_vid';

81 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

82 const fnv1a = s => {

83 let h = 0x811c9dc5;

84 for (let i = 0; i < s.length; i++) {

85 h ^= s.charCodeAt(i);

86 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

87 }

88 return h >>> 0;

89 };

90 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

91 const [decision] = useState(() => {

92 const params = new URLSearchParams(location.search);

93 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

94 const force = params.get('gb-force');

95 if (force) {

96 for (const p of force.split(',')) {

97 const [k, v] = p.split(':');

98 if (k === flag) return {

99 variant: v || 'treatment',

100 track: false

101 };

102 }

103 }

104 if (navigator.globalPrivacyControl) {

105 return {

106 variant: 'control',

107 track: false

108 };

109 }

110 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

111 if (prefsMatch) {

112 try {

113 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

114 return {

115 variant: 'control',

116 track: false

117 };

118 }

119 } catch {

120 return {

121 variant: 'control',

122 track: false

123 };

124 }

125 } else {

126 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

127 if (!country || CONSENT_COUNTRIES.has(country)) {

128 return {

129 variant: 'control',

130 track: false

131 };

132 }

133 }

134 let vid;

135 try {

136 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

137 if (ajsMatch) {

138 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

139 } else {

140 vid = localStorage.getItem(VID_KEY);

141 if (!vid) {

142 vid = crypto.randomUUID();

143 }

144 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

145 }

146 try {

147 localStorage.setItem(VID_KEY, vid);

148 } catch {}

149 } catch {

150 return {

151 variant: 'control',

152 track: false

153 };

154 }

155 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

156 return {

157 variant,

158 track: true,

159 vid

160 };

161 });

162 useEffect(() => {

163 if (!decision.track) return;

164 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

165 method: 'POST',

166 headers: {

167 'Content-Type': 'application/json',

168 'x-service-name': 'claude_code_docs'

169 },

170 body: JSON.stringify({

171 events: [{

172 event_type: 'GrowthbookExperimentEvent',

173 event_data: {

174 device_id: decision.vid,

175 anonymous_id: decision.vid,

176 timestamp: new Date().toISOString(),

177 experiment_id: flag,

178 variation_id: decision.variant === 'treatment' ? 1 : 0,

179 environment: 'production'

180 }

181 }]

182 }),

183 keepalive: true

184 }).catch(() => {});

185 }, []);

186 return decision.variant === 'treatment' ? treatment : children;

187};

188 

189<Experiment flag="docs-contact-sales-cta" treatment={<ContactSalesCard surface="foundry" />} />

190 80 

191## Prasyarat81## Prasyarat

192 82 

model-config.md +5 −1

Details

17 * Foundry: nama deployment17 * Foundry: nama deployment

18 * Vertex: nama versi18 * Vertex: nama versi

19 19 

20<Note>

21 `ANTHROPIC_BASE_URL` mengubah tempat permintaan dikirim, bukan model mana yang menjawabnya. Untuk merutekan Claude melalui gateway LLM, lihat [konfigurasi gateway LLM](/id/llm-gateway).

22</Note>

23 

20### Alias model24### Alias model

21 25 

22Alias model menyediakan cara yang nyaman untuk memilih pengaturan model tanpa perlu mengingat nomor versi yang tepat:26Alias model menyediakan cara yang nyaman untuk memilih pengaturan model tanpa perlu mengingat nomor versi yang tepat:


30| **`haiku`** | Menggunakan model Haiku yang cepat dan efisien untuk tugas sederhana |34| **`haiku`** | Menggunakan model Haiku yang cepat dan efisien untuk tugas sederhana |

31| **`sonnet[1m]`** | Menggunakan Sonnet dengan [jendela konteks 1 juta token](https://platform.claude.com/docs/id/build-with-claude/context-windows#1m-token-context-window) untuk sesi panjang |35| **`sonnet[1m]`** | Menggunakan Sonnet dengan [jendela konteks 1 juta token](https://platform.claude.com/docs/id/build-with-claude/context-windows#1m-token-context-window) untuk sesi panjang |

32| **`opus[1m]`** | Menggunakan Opus dengan [jendela konteks 1 juta token](https://platform.claude.com/docs/id/build-with-claude/context-windows#1m-token-context-window) untuk sesi panjang |36| **`opus[1m]`** | Menggunakan Opus dengan [jendela konteks 1 juta token](https://platform.claude.com/docs/id/build-with-claude/context-windows#1m-token-context-window) untuk sesi panjang |

33| **`opusplan`** | Mode khusus yang menggunakan `opus` selama plan mode, kemudian beralih ke `sonnet` untuk eksekusi |37| **`opusplan`** | Mode khusus yang menggunakan `opus` selama Plan Mode, kemudian beralih ke `sonnet` untuk eksekusi |

34 38 

35Di Anthropic API, `opus` diselesaikan ke Opus 4.7 dan `sonnet` diselesaikan ke Sonnet 4.6. Di Bedrock, Vertex, dan Foundry, `opus` diselesaikan ke Opus 4.6 dan `sonnet` diselesaikan ke Sonnet 4.5; model yang lebih baru tersedia di penyedia tersebut dengan memilih nama model lengkap secara eksplisit atau mengatur `ANTHROPIC_DEFAULT_OPUS_MODEL` atau `ANTHROPIC_DEFAULT_SONNET_MODEL`.39Di Anthropic API, `opus` diselesaikan ke Opus 4.7 dan `sonnet` diselesaikan ke Sonnet 4.6. Di Bedrock, Vertex, dan Foundry, `opus` diselesaikan ke Opus 4.6 dan `sonnet` diselesaikan ke Sonnet 4.5; model yang lebih baru tersedia di penyedia tersebut dengan memilih nama model lengkap secara eksplisit atau mengatur `ANTHROPIC_DEFAULT_OPUS_MODEL` atau `ANTHROPIC_DEFAULT_SONNET_MODEL`.

36 40 

overview.md +1 −635

Details

6 6 

7> Claude Code adalah alat pengkodean agentic yang membaca basis kode Anda, mengedit file, menjalankan perintah, dan terintegrasi dengan alat pengembangan Anda. Tersedia di terminal, IDE, aplikasi desktop, dan browser.7> Claude Code adalah alat pengkodean agentic yang membaca basis kode Anda, mengedit file, menjalankan perintah, dan terintegrasi dengan alat pengembangan Anda. Tersedia di terminal, IDE, aplikasi desktop, dan browser.

8 8 

9export const InstallConfigurator = ({defaultSurface = 'terminal'}) => {

10 const TERM = {

11 mac: {

12 label: 'macOS / Linux',

13 cmd: 'curl -fsSL https://claude.ai/install.sh | bash'

14 },

15 win: {

16 label: 'Windows'

17 },

18 brew: {

19 label: 'Homebrew',

20 cmd: 'brew install --cask claude-code'

21 },

22 winget: {

23 label: 'WinGet',

24 cmd: 'winget install Anthropic.ClaudeCode'

25 }

26 };

27 const WIN_VARIANTS = {

28 ps: 'irm https://claude.ai/install.ps1 | iex',

29 cmd: 'curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd'

30 };

31 const TABS = [{

32 key: 'terminal',

33 label: 'Terminal'

34 }, {

35 key: 'desktop',

36 label: 'Desktop'

37 }, {

38 key: 'vscode',

39 label: 'VS Code'

40 }, {

41 key: 'jetbrains',

42 label: 'JetBrains'

43 }];

44 const ALT_TARGETS = {

45 desktop: {

46 name: 'Desktop',

47 tagline: 'The full agent in a native app for macOS and Windows.',

48 installLabel: 'Download the app',

49 installHref: 'https://claude.com/download?utm_source=claude_code&utm_medium=docs&utm_content=configurator_desktop_download',

50 guideHref: '/en/desktop-quickstart'

51 },

52 vscode: {

53 name: 'VS Code',

54 tagline: 'Review diffs, manage context, and chat without leaving your editor.',

55 installLabel: 'Install from Marketplace',

56 installHref: 'https://marketplace.visualstudio.com/items?itemName=anthropic.claude-code',

57 altCmd: 'code --install-extension anthropic.claude-code',

58 guideHref: '/en/vs-code'

59 },

60 jetbrains: {

61 name: 'JetBrains',

62 tagline: 'Native plugin for IntelliJ, PyCharm, WebStorm, and other JetBrains IDEs.',

63 installLabel: 'Install from Marketplace',

64 installHref: 'https://plugins.jetbrains.com/plugin/27310-claude-code-beta-',

65 guideHref: '/en/jetbrains'

66 }

67 };

68 const PROVIDERS = [{

69 key: 'anthropic',

70 label: 'Anthropic'

71 }, {

72 key: 'bedrock',

73 label: 'Amazon Bedrock'

74 }, {

75 key: 'foundry',

76 label: 'Microsoft Foundry'

77 }, {

78 key: 'vertex',

79 label: 'Google Vertex AI'

80 }];

81 const PROVIDER_NOTICE = {

82 bedrock: <>

83 <strong>Configure your AWS account first.</strong> Running on Bedrock

84 requires model access enabled in the AWS console and IAM credentials.{' '}

85 <a href="/en/amazon-bedrock">Bedrock setup guide →</a>

86 </>,

87 vertex: <>

88 <strong>Configure your GCP project first.</strong> Running on Vertex AI

89 requires the Vertex API enabled and a service account with the right

90 permissions.{' '}

91 <a href="/en/google-vertex-ai">Vertex setup guide →</a>

92 </>,

93 foundry: <>

94 <strong>Configure your Azure resources first.</strong> Running on

95 Microsoft Foundry requires an Azure subscription with a Foundry resource

96 and model deployments provisioned.{' '}

97 <a href="/en/microsoft-foundry">Foundry setup guide →</a>

98 </>

99 };

100 const iconCheck = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

101 <polyline points="20 6 9 17 4 12" />

102 </svg>;

103 const iconCopy = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

104 <rect x="9" y="9" width="13" height="13" rx="2" />

105 <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />

106 </svg>;

107 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

108 <line x1="5" y1="12" x2="19" y2="12" />

109 <polyline points="12 5 19 12 12 19" />

110 </svg>;

111 const iconArrowUpRight = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

112 <line x1="7" y1="17" x2="17" y2="7" />

113 <polyline points="7 7 17 7 17 17" />

114 </svg>;

115 const iconInfo = (size = 16) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

116 <circle cx="12" cy="12" r="10" />

117 <line x1="12" y1="16" x2="12" y2="12" />

118 <line x1="12" y1="8" x2="12.01" y2="8" />

119 </svg>;

120 const [target, setTarget] = useState(defaultSurface);

121 const [team, setTeam] = useState(false);

122 const [provider, setProvider] = useState('anthropic');

123 const [pkg, setPkg] = useState(() => (/Win/).test(navigator.userAgent) ? 'win' : 'mac');

124 const [winCmd, setWinCmd] = useState(false);

125 const [copied, setCopied] = useState(null);

126 const copyTimer = useRef(null);

127 const handleCopy = async (text, key) => {

128 try {

129 await navigator.clipboard.writeText(text);

130 } catch {

131 const ta = document.createElement('textarea');

132 ta.value = text;

133 document.body.appendChild(ta);

134 ta.select();

135 document.execCommand('copy');

136 document.body.removeChild(ta);

137 }

138 clearTimeout(copyTimer.current);

139 setCopied(key);

140 copyTimer.current = setTimeout(() => setCopied(null), 1800);

141 };

142 const cardBodyCmd = (cmd, prompt) => {

143 const on = copied === 'term';

144 return <div className="cc-ic-card-body">

145 <span className="cc-ic-prompt">{prompt || '$'}</span>

146 <div className="cc-ic-cmd">{cmd}</div>

147 <button type="button" className={'cc-ic-copy' + (on ? ' cc-ic-copied' : '')} onClick={() => handleCopy(cmd, 'term')}>

148 {on ? iconCheck(13) : iconCopy(13)}

149 <span>{on ? 'Copied' : 'Copy'}</span>

150 </button>

151 </div>;

152 };

153 const isWinInstaller = pkg === 'win';

154 const isWinPrompt = pkg === 'win' || pkg === 'winget';

155 const terminalCmd = isWinInstaller ? WIN_VARIANTS[winCmd ? 'cmd' : 'ps'] : TERM[pkg].cmd;

156 const alt = ALT_TARGETS[target];

157 const showNotice = team && provider !== 'anthropic';

158 const STYLES = `

159.cc-ic {

160 --ic-slate: #141413;

161 --ic-clay: #d97757;

162 --ic-clay-deep: #c6613f;

163 --ic-gray-000: #ffffff;

164 --ic-gray-150: #f0eee6;

165 --ic-gray-550: #73726c;

166 --ic-gray-700: #3d3d3a;

167 --ic-border-subtle: rgba(31, 30, 29, 0.08);

168 --ic-border-default: rgba(31, 30, 29, 0.15);

169 --ic-border-strong: rgba(31, 30, 29, 0.3);

170 --ic-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Courier New', monospace;

171 font-family: 'Anthropic Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;

172 font-size: 14px; line-height: 1.5; color: var(--ic-slate);

173 margin: 8px 0 32px;

174}

175.dark .cc-ic {

176 --ic-slate: #f0eee6;

177 --ic-gray-000: #262624;

178 --ic-gray-150: #1f1e1d;

179 --ic-gray-550: #91908a;

180 --ic-gray-700: #bfbdb4;

181 --ic-border-subtle: rgba(240, 238, 230, 0.08);

182 --ic-border-default: rgba(240, 238, 230, 0.14);

183 --ic-border-strong: rgba(240, 238, 230, 0.28);

184}

185.dark .cc-ic-check { background: transparent; }

186.dark .cc-ic-card { border: 0.5px solid var(--ic-border-subtle); }

187.dark .cc-ic-p-pill.cc-ic-active { box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); }

188.cc-ic *, .cc-ic *::before, .cc-ic *::after { box-sizing: border-box; }

189.cc-ic a { text-decoration: none; }

190.cc-ic a:not([class]) { color: inherit; }

191.cc-ic button { font-family: inherit; cursor: pointer; }

192 

193.cc-ic-tab-strip {

194 display: inline-flex; gap: 2px;

195 padding: 4px; background: var(--ic-gray-150);

196 border-radius: 10px; overflow-x: auto;

197 max-width: 100%;

198}

199.cc-ic-tab {

200 appearance: none; background: none; border: none;

201 padding: 10px 18px; font-size: 15px; font-weight: 430;

202 color: var(--ic-gray-550); border-radius: 7px;

203 white-space: nowrap;

204 transition: color 0.12s, background-color 0.12s;

205}

206.cc-ic-tab:hover { color: var(--ic-gray-700); }

207.cc-ic-tab.cc-ic-active {

208 color: var(--ic-slate); font-weight: 500;

209 background: var(--ic-gray-000);

210 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);

211}

212.dark .cc-ic-tab.cc-ic-active { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); }

213 

214.cc-ic-team-wrap { padding: 16px 0 20px; }

215.cc-ic-team-toggle {

216 display: flex; align-items: center; gap: 12px; font-family: inherit;

217 padding: 12px 16px; font-size: 14px; font-weight: 430;

218 color: var(--ic-gray-700); cursor: pointer; user-select: none;

219 width: fit-content; background: var(--ic-gray-150);

220 border: 0.5px solid var(--ic-border-subtle); border-radius: 8px;

221 transition: border-color 0.15s;

222}

223.cc-ic-team-toggle:hover { border-color: var(--ic-border-default); }

224.cc-ic-team-toggle.cc-ic-checked {

225 background: rgba(217, 119, 87, 0.08);

226 border-color: rgba(217, 119, 87, 0.25);

227}

228.cc-ic-check {

229 width: 16px; height: 16px;

230 border: 1px solid var(--ic-border-strong); border-radius: 4px;

231 background: var(--ic-gray-000);

232 display: flex; align-items: center; justify-content: center;

233 flex-shrink: 0;

234}

235.cc-ic-check svg { color: #fff; display: none; }

236.cc-ic-team-toggle.cc-ic-checked .cc-ic-check { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); }

237.cc-ic-team-toggle.cc-ic-checked .cc-ic-check svg { display: block; }

238 

239.cc-ic-team-reveal { display: flex; flex-direction: column; gap: 12px; margin-bottom: 16px; }

240.cc-ic-sales {

241 display: flex; align-items: center; justify-content: space-between;

242 gap: 16px; padding: 14px 16px;

243 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

244 border-radius: 8px; flex-wrap: wrap;

245}

246.cc-ic-sales-text { font-size: 13px; color: var(--ic-gray-700); line-height: 1.5; flex: 1; min-width: 200px; }

247.cc-ic-sales-text strong { font-weight: 550; color: var(--ic-slate); }

248.cc-ic-sales-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

249.cc-ic-btn-clay {

250 display: inline-flex; align-items: center; gap: 8px;

251 background: var(--ic-clay-deep); color: #fff; border: none;

252 border-radius: 8px; padding: 8px 14px;

253 font-size: 13px; font-weight: 500;

254 transition: background-color 0.15s; white-space: nowrap;

255}

256.cc-ic-btn-clay:hover { background: var(--ic-clay); }

257.cc-ic-btn-ghost {

258 display: inline-flex; align-items: center; gap: 8px;

259 background: transparent; color: var(--ic-gray-700);

260 border: 0.5px solid var(--ic-border-default);

261 border-radius: 8px; padding: 8px 14px;

262 font-size: 13px; font-weight: 500;

263}

264.cc-ic-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

265 

266.cc-ic-provider-bar {

267 display: flex; align-items: center; gap: 12px;

268 padding: 14px 16px; background: var(--ic-gray-150);

269 border-radius: 8px; font-size: 13px; flex-wrap: wrap;

270}

271.cc-ic-provider-bar .cc-ic-label { color: var(--ic-gray-550); flex-shrink: 0; }

272.cc-ic-provider-pills { display: flex; gap: 4px; flex-wrap: wrap; }

273.cc-ic-p-pill {

274 appearance: none; border: none; background: transparent;

275 padding: 6px 12px; border-radius: 6px;

276 font-size: 13px; font-weight: 430; color: var(--ic-gray-700);

277 white-space: nowrap;

278}

279.cc-ic-p-pill:hover { background: rgba(0, 0, 0, 0.04); }

280.cc-ic-p-pill.cc-ic-active {

281 background: var(--ic-gray-000); color: var(--ic-slate);

282 font-weight: 500; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);

283}

284.cc-ic-provider-notice {

285 display: flex; padding: 16px 18px;

286 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

287 border-radius: 8px; gap: 14px; align-items: flex-start;

288}

289.cc-ic-provider-notice > svg { color: var(--ic-gray-550); margin-top: 2px; flex-shrink: 0; }

290.cc-ic-provider-notice-body { font-size: 14px; line-height: 1.55; color: var(--ic-gray-700); }

291.cc-ic-provider-notice-body strong { font-weight: 550; color: var(--ic-slate); }

292.cc-ic-provider-notice-body a { color: var(--ic-clay-deep); font-weight: 500; }

293.cc-ic-provider-notice-body a:hover { text-decoration: underline; }

294 

295.cc-ic-card { background: #141413; border-radius: 12px; overflow: hidden; }

296.cc-ic-subtabs {

297 display: flex; align-items: center;

298 background: #1a1918;

299 border-bottom: 0.5px solid rgba(255, 255, 255, 0.08);

300 padding: 0 8px; overflow-x: auto;

301}

302.cc-ic-subtab {

303 appearance: none; background: none; border: none;

304 padding: 12px 16px; font-size: 12px;

305 color: rgba(255, 255, 255, 0.5);

306 position: relative; white-space: nowrap;

307}

308.cc-ic-subtab:hover { color: rgba(255, 255, 255, 0.75); }

309.cc-ic-subtab.cc-ic-active { color: #fff; }

310.cc-ic-subtab.cc-ic-active::after {

311 content: ''; position: absolute;

312 left: 12px; right: 12px; bottom: -0.5px;

313 height: 2px; background: var(--ic-clay);

314}

315.cc-ic-shell-switch {

316 display: inline-flex; gap: 2px;

317 margin: 14px 26px 0; padding: 3px;

318 background: rgba(255, 255, 255, 0.06);

319 border: 0.5px solid rgba(255, 255, 255, 0.08);

320 border-radius: 8px;

321 font-family: inherit;

322}

323.cc-ic-shell-option {

324 font: inherit; font-size: 12px; font-weight: 500;

325 padding: 5px 12px; border-radius: 6px;

326 background: transparent; border: none;

327 color: rgba(255, 255, 255, 0.55);

328 cursor: pointer; user-select: none; white-space: nowrap;

329 transition: color 120ms ease, background-color 120ms ease;

330}

331.cc-ic-shell-option:hover { color: rgba(255, 255, 255, 0.85); }

332.cc-ic-shell-option.cc-ic-active {

333 background: rgba(255, 255, 255, 0.12);

334 color: #fff;

335 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);

336}

337 

338.cc-ic-card-body { padding: 24px 26px; display: flex; align-items: flex-start; gap: 14px; }

339.cc-ic-prompt {

340 color: var(--ic-clay); font-family: var(--ic-font-mono);

341 font-size: 17px; user-select: none; padding-top: 2px;

342}

343.cc-ic-cmd {

344 flex: 1; font-family: var(--ic-font-mono);

345 font-size: 17px; color: #f0eee6;

346 line-height: 1.55; white-space: pre-wrap; word-break: break-word;

347}

348.cc-ic-copy {

349 display: inline-flex; align-items: center; gap: 6px;

350 background: rgba(255, 255, 255, 0.08);

351 border: 0.5px solid rgba(255, 255, 255, 0.12);

352 color: rgba(255, 255, 255, 0.85);

353 padding: 7px 13px; border-radius: 8px;

354 font-size: 13px; font-weight: 500; flex-shrink: 0;

355}

356.cc-ic-copy:hover { background: rgba(255, 255, 255, 0.14); }

357.cc-ic-copy.cc-ic-copied { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); color: #fff; }

358 

359.cc-ic-below {

360 margin-top: 12px; font-size: 13px; color: var(--ic-gray-550);

361 display: flex; gap: 16px; flex-wrap: wrap; align-items: baseline;

362}

363.cc-ic-below a { color: var(--ic-gray-700); border-bottom: 0.5px solid var(--ic-border-default); }

364.cc-ic-below a:hover { color: var(--ic-clay-deep); border-bottom-color: var(--ic-clay-deep); }

365.cc-ic-handoff {

366 padding: 22px 24px;

367 background: linear-gradient(180deg, #faf9f4 0%, #f3f1e9 100%);

368 border: 0.5px solid var(--ic-border-default);

369 border-radius: 12px;

370 box-shadow: 0 1px 2px rgba(31, 30, 29, 0.04), 0 6px 16px -4px rgba(31, 30, 29, 0.06);

371}

372.dark .cc-ic-handoff {

373 background: linear-gradient(180deg, #262624 0%, #1f1e1d 100%);

374 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3), 0 6px 16px -4px rgba(0, 0, 0, 0.4);

375}

376.cc-ic-handoff-title {

377 font-size: 16px; font-weight: 550; color: var(--ic-slate);

378 letter-spacing: -0.01em; margin-bottom: 4px;

379}

380.cc-ic-handoff-sub {

381 font-size: 14px; line-height: 1.5; color: var(--ic-gray-700);

382 margin-bottom: 18px;

383}

384.cc-ic-handoff-actions { display: flex; gap: 10px; flex-wrap: wrap; }

385.cc-ic-handoff-alt {

386 margin-top: 12px; font-size: 12px; color: var(--ic-gray-550);

387}

388.cc-ic-handoff-alt code {

389 font-family: var(--ic-font-mono); font-size: 11px;

390 background: var(--ic-gray-150); padding: 2px 6px;

391 border-radius: 4px; color: var(--ic-gray-700);

392}

393.cc-ic-copy-sm {

394 appearance: none; border: none;

395 display: inline-flex; align-items: center; justify-content: center;

396 width: 22px; height: 22px;

397 margin-left: 4px; vertical-align: middle;

398 background: var(--ic-gray-150); color: var(--ic-gray-550);

399 border-radius: 4px;

400 transition: color 0.1s, background-color 0.1s;

401}

402.cc-ic-copy-sm:hover { color: var(--ic-gray-700); background: var(--ic-border-default); }

403.cc-ic-copy-sm.cc-ic-copied { background: var(--ic-clay-deep); color: #fff; }

404 

405@media (max-width: 720px) {

406 .cc-ic-tab { padding: 12px 14px; font-size: 14px; }

407 .cc-ic-sales-actions { width: 100%; }

408 .cc-ic-card-body { padding: 20px; }

409 .cc-ic-cmd { font-size: 15px; }

410}

411`;

412 return <div className="cc-ic not-prose">

413 <style>{STYLES}</style>

414 

415 {}

416 <div className="cc-ic-tab-strip" role="tablist">

417 {TABS.map(t => <button key={t.key} type="button" role="tab" aria-selected={target === t.key} className={'cc-ic-tab' + (target === t.key ? ' cc-ic-active' : '')} onClick={() => setTarget(t.key)}>

418 {t.label}

419 </button>)}

420 </div>

421 

422 {}

423 <div className="cc-ic-team-wrap">

424 <button type="button" role="switch" aria-checked={team} className={'cc-ic-team-toggle' + (team ? ' cc-ic-checked' : '')} onClick={() => setTeam(!team)}>

425 <span className="cc-ic-check">{iconCheck(11)}</span>

426 <span>

427 I’m buying for a team or company (SSO, AWS/Azure/GCP, central billing)

428 </span>

429 </button>

430 </div>

431 

432 {}

433 {team && <div className="cc-ic-team-reveal">

434 <div className="cc-ic-sales">

435 <div className="cc-ic-sales-text">

436 <strong>Set up your team:</strong> self-serve or talk to sales.

437 </div>

438 <div className="cc-ic-sales-actions">

439 <a href="https://claude.ai/upgrade?initialPlanType=team&amp;utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_get_started" className="cc-ic-btn-ghost">

440 Get started

441 </a>

442 <a href="https://www.anthropic.com/contact-sales?utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_contact_sales" className="cc-ic-btn-clay">

443 Contact sales {iconArrowRight()}

444 </a>

445 </div>

446 </div>

447 

448 <div className="cc-ic-provider-bar">

449 <span className="cc-ic-label">Run on</span>

450 <div className="cc-ic-provider-pills" role="radiogroup" aria-label="Provider">

451 {PROVIDERS.map(p => <button key={p.key} type="button" role="radio" aria-checked={provider === p.key} className={'cc-ic-p-pill' + (provider === p.key ? ' cc-ic-active' : '')} onClick={() => setProvider(p.key)}>

452 {p.label}

453 </button>)}

454 </div>

455 </div>

456 

457 {showNotice && <div className="cc-ic-provider-notice">

458 {iconInfo()}

459 <div className="cc-ic-provider-notice-body">

460 {PROVIDER_NOTICE[provider]}

461 </div>

462 </div>}

463 </div>}

464 

465 {}

466 {target === 'terminal' && <div className="cc-ic-card">

467 <div className="cc-ic-subtabs" role="tablist" aria-label="Install method">

468 {Object.keys(TERM).map(k => <button key={k} type="button" role="tab" aria-selected={pkg === k} className={'cc-ic-subtab' + (pkg === k ? ' cc-ic-active' : '')} onClick={() => setPkg(k)}>

469 {TERM[k].label}

470 </button>)}

471 </div>

472 {isWinInstaller && <div className="cc-ic-shell-switch" role="tablist" aria-label="Shell">

473 {[{

474 k: 'ps',

475 label: 'PowerShell'

476 }, {

477 k: 'cmd',

478 label: 'CMD'

479 }].map(({k, label}) => {

480 const active = k === 'cmd' === winCmd;

481 return <button key={k} type="button" role="tab" aria-selected={active} className={'cc-ic-shell-option' + (active ? ' cc-ic-active' : '')} onClick={() => setWinCmd(k === 'cmd')}>

482 {label}

483 </button>;

484 })}

485 </div>}

486 {cardBodyCmd(terminalCmd, isWinPrompt ? '>' : '$')}

487 </div>}

488 

489 {}

490 {target === 'terminal' && <div className="cc-ic-below">

491 {isWinInstaller && <span>

492 <a href="https://git-scm.com/downloads/win" target="_blank" rel="noopener">

493 Git for Windows

494 </a>{' '}

495 recommended. PowerShell is used if Git Bash is absent.

496 </span>}

497 {(pkg === 'brew' || pkg === 'winget') && <span>

498 Does not auto-update. Run{' '}

499 <code>{pkg === 'brew' ? 'brew upgrade claude-code' : 'winget upgrade Anthropic.ClaudeCode'}</code>{' '}

500 periodically.

501 </span>}

502 <a href="/en/troubleshoot-install">Installation troubleshooting</a>

503 </div>}

504 

505 {alt && <div className="cc-ic-handoff">

506 <div className="cc-ic-handoff-title">Claude Code for {alt.name}</div>

507 <div className="cc-ic-handoff-sub">{alt.tagline}</div>

508 <div className="cc-ic-handoff-actions">

509 <a href={alt.installHref} className="cc-ic-btn-clay" {...alt.installHref.startsWith('http') ? {

510 target: '_blank',

511 rel: 'noopener'

512 } : {}}>

513 {alt.installLabel} {iconArrowUpRight(13)}

514 </a>

515 <a href={alt.guideHref} className="cc-ic-btn-ghost">

516 {alt.name} guide {iconArrowRight(12)}

517 </a>

518 </div>

519 {alt.altCmd && <div className="cc-ic-handoff-alt">

520 or run <code>{alt.altCmd}</code>

521 <button type="button" className={'cc-ic-copy-sm' + (copied === 'alt' ? ' cc-ic-copied' : '')} onClick={() => handleCopy(alt.altCmd, 'alt')} aria-label="Copy command">

522 {copied === 'alt' ? iconCheck(11) : iconCopy(11)}

523 </button>

524 </div>}

525 </div>}

526 </div>;

527};

528 

529export const Experiment = ({flag, treatment, children}) => {

530 const VID_KEY = 'exp_vid';

531 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

532 const fnv1a = s => {

533 let h = 0x811c9dc5;

534 for (let i = 0; i < s.length; i++) {

535 h ^= s.charCodeAt(i);

536 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

537 }

538 return h >>> 0;

539 };

540 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

541 const [decision] = useState(() => {

542 const params = new URLSearchParams(location.search);

543 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

544 const force = params.get('gb-force');

545 if (force) {

546 for (const p of force.split(',')) {

547 const [k, v] = p.split(':');

548 if (k === flag) return {

549 variant: v || 'treatment',

550 track: false

551 };

552 }

553 }

554 if (navigator.globalPrivacyControl) {

555 return {

556 variant: 'control',

557 track: false

558 };

559 }

560 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

561 if (prefsMatch) {

562 try {

563 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

564 return {

565 variant: 'control',

566 track: false

567 };

568 }

569 } catch {

570 return {

571 variant: 'control',

572 track: false

573 };

574 }

575 } else {

576 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

577 if (!country || CONSENT_COUNTRIES.has(country)) {

578 return {

579 variant: 'control',

580 track: false

581 };

582 }

583 }

584 let vid;

585 try {

586 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

587 if (ajsMatch) {

588 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

589 } else {

590 vid = localStorage.getItem(VID_KEY);

591 if (!vid) {

592 vid = crypto.randomUUID();

593 }

594 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

595 }

596 try {

597 localStorage.setItem(VID_KEY, vid);

598 } catch {}

599 } catch {

600 return {

601 variant: 'control',

602 track: false

603 };

604 }

605 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

606 return {

607 variant,

608 track: true,

609 vid

610 };

611 });

612 useEffect(() => {

613 if (!decision.track) return;

614 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

615 method: 'POST',

616 headers: {

617 'Content-Type': 'application/json',

618 'x-service-name': 'claude_code_docs'

619 },

620 body: JSON.stringify({

621 events: [{

622 event_type: 'GrowthbookExperimentEvent',

623 event_data: {

624 device_id: decision.vid,

625 anonymous_id: decision.vid,

626 timestamp: new Date().toISOString(),

627 experiment_id: flag,

628 variation_id: decision.variant === 'treatment' ? 1 : 0,

629 environment: 'production'

630 }

631 }]

632 }),

633 keepalive: true

634 }).catch(() => {});

635 }, []);

636 return decision.variant === 'treatment' ? treatment : children;

637};

638 

639Claude Code adalah asisten pengkodean bertenaga AI yang membantu Anda membangun fitur, memperbaiki bug, dan mengotomatisasi tugas pengembangan. Ini memahami seluruh basis kode Anda dan dapat bekerja di berbagai file dan alat untuk menyelesaikan pekerjaan.9Claude Code adalah asisten pengkodean bertenaga AI yang membantu Anda membangun fitur, memperbaiki bug, dan mengotomatisasi tugas pengembangan. Ini memahami seluruh basis kode Anda dan dapat bekerja di berbagai file dan alat untuk menyelesaikan pekerjaan.

640 10 

641<div data-gb-slot="overview-install-configurator">

642 <Experiment flag="overview-install-configurator" treatment={<InstallConfigurator />} />

643</div>

644 

645## Memulai11## Memulai

646 12 

647Pilih lingkungan Anda untuk memulai. Sebagian besar permukaan memerlukan akun [langganan Claude](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=overview_pricing) atau [Konsol Anthropic](https://console.anthropic.com/). CLI Terminal dan VS Code juga mendukung [penyedia pihak ketiga](/id/third-party-integrations).13Pilih lingkungan Anda untuk memulai. Sebagian besar permukaan memerlukan akun [langganan Claude](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=overview_pricing) atau [Konsol Anthropic](https://console.anthropic.com/). CLI Terminal dan VS Code juga mendukung [penyedia pihak ketiga](/id/third-party-integrations).


798 <Accordion title="Sesuaikan dengan instruksi, skills, dan hooks" icon="sliders">164 <Accordion title="Sesuaikan dengan instruksi, skills, dan hooks" icon="sliders">

799 [`CLAUDE.md`](/id/memory) adalah file markdown yang Anda tambahkan ke root proyek Anda yang dibaca Claude Code di awal setiap sesi. Gunakan untuk menetapkan standar pengkodean, keputusan arsitektur, perpustakaan pilihan, dan daftar periksa tinjauan. Claude juga membangun [memori otomatis](/id/memory#auto-memory) saat bekerja, menyimpan pembelajaran seperti perintah build dan wawasan debugging di seluruh sesi tanpa Anda menulis apa pun.165 [`CLAUDE.md`](/id/memory) adalah file markdown yang Anda tambahkan ke root proyek Anda yang dibaca Claude Code di awal setiap sesi. Gunakan untuk menetapkan standar pengkodean, keputusan arsitektur, perpustakaan pilihan, dan daftar periksa tinjauan. Claude juga membangun [memori otomatis](/id/memory#auto-memory) saat bekerja, menyimpan pembelajaran seperti perintah build dan wawasan debugging di seluruh sesi tanpa Anda menulis apa pun.

800 166 

801 Buat [perintah khusus](/id/skills) untuk mengemas alur kerja yang dapat diulang yang dapat dibagikan tim Anda, seperti `/review-pr` atau `/deploy-staging`.167 Buat [skills](/id/skills) untuk mengemas alur kerja yang dapat diulang yang dapat dibagikan tim Anda, seperti `/review-pr` atau `/deploy-staging`.

802 168 

803 [Hooks](/id/hooks) memungkinkan Anda menjalankan perintah shell sebelum atau sesudah tindakan Claude Code, seperti pemformatan otomatis setelah setiap pengeditan file atau menjalankan lint sebelum commit.169 [Hooks](/id/hooks) memungkinkan Anda menjalankan perintah shell sebelum atau sesudah tindakan Claude Code, seperti pemformatan otomatis setelah setiap pengeditan file atau menjalankan lint sebelum commit.

804 </Accordion>170 </Accordion>

plugins.md +9 −1

Details

317 317 

318Untuk menguji plugin yang sudah dikemas sebagai arsip `.zip` dan dihosting di URL, seperti artefak build CI, gunakan `--plugin-url` sebagai gantinya. Claude Code mengambil arsip saat startup dan memuatnya hanya untuk sesi itu. Jika pengambilan gagal atau arsip tidak valid, Claude Code melaporkan kesalahan pemuatan plugin dan dimulai tanpanya. Pertimbangan [kepercayaan](/id/discover-plugins#security) yang sama berlaku seperti untuk sumber plugin apa pun: hanya arahkan flag ini ke arsip yang Anda kontrol atau percayai.318Untuk menguji plugin yang sudah dikemas sebagai arsip `.zip` dan dihosting di URL, seperti artefak build CI, gunakan `--plugin-url` sebagai gantinya. Claude Code mengambil arsip saat startup dan memuatnya hanya untuk sesi itu. Jika pengambilan gagal atau arsip tidak valid, Claude Code melaporkan kesalahan pemuatan plugin dan dimulai tanpanya. Pertimbangan [kepercayaan](/id/discover-plugins#security) yang sama berlaku seperti untuk sumber plugin apa pun: hanya arahkan flag ini ke arsip yang Anda kontrol atau percayai.

319 319 

320Untuk memuat beberapa plugins, ulangi flag untuk setiap URL:

321 

322```bash theme={null}

323claude --plugin-url https://example.com/my-plugin.zip --plugin-url https://example.com/other.zip

324```

325 

326Atau teruskan URL yang dipisahkan spasi sebagai satu argumen yang dikutip:

327 

320```bash theme={null}328```bash theme={null}

321claude --plugin-url https://example.com/my-plugin.zip329claude --plugin-url "https://example.com/my-plugin.zip https://example.com/other.zip"

322```330```

323 331 

324### Debug masalah plugin332### Debug masalah plugin

quickstart.md +3 −636

Details

6 6 

7> Selamat datang di Claude Code!7> Selamat datang di Claude Code!

8 8 

9export const InstallConfigurator = ({defaultSurface = 'terminal'}) => {

10 const TERM = {

11 mac: {

12 label: 'macOS / Linux',

13 cmd: 'curl -fsSL https://claude.ai/install.sh | bash'

14 },

15 win: {

16 label: 'Windows'

17 },

18 brew: {

19 label: 'Homebrew',

20 cmd: 'brew install --cask claude-code'

21 },

22 winget: {

23 label: 'WinGet',

24 cmd: 'winget install Anthropic.ClaudeCode'

25 }

26 };

27 const WIN_VARIANTS = {

28 ps: 'irm https://claude.ai/install.ps1 | iex',

29 cmd: 'curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd'

30 };

31 const TABS = [{

32 key: 'terminal',

33 label: 'Terminal'

34 }, {

35 key: 'desktop',

36 label: 'Desktop'

37 }, {

38 key: 'vscode',

39 label: 'VS Code'

40 }, {

41 key: 'jetbrains',

42 label: 'JetBrains'

43 }];

44 const ALT_TARGETS = {

45 desktop: {

46 name: 'Desktop',

47 tagline: 'The full agent in a native app for macOS and Windows.',

48 installLabel: 'Download the app',

49 installHref: 'https://claude.com/download?utm_source=claude_code&utm_medium=docs&utm_content=configurator_desktop_download',

50 guideHref: '/en/desktop-quickstart'

51 },

52 vscode: {

53 name: 'VS Code',

54 tagline: 'Review diffs, manage context, and chat without leaving your editor.',

55 installLabel: 'Install from Marketplace',

56 installHref: 'https://marketplace.visualstudio.com/items?itemName=anthropic.claude-code',

57 altCmd: 'code --install-extension anthropic.claude-code',

58 guideHref: '/en/vs-code'

59 },

60 jetbrains: {

61 name: 'JetBrains',

62 tagline: 'Native plugin for IntelliJ, PyCharm, WebStorm, and other JetBrains IDEs.',

63 installLabel: 'Install from Marketplace',

64 installHref: 'https://plugins.jetbrains.com/plugin/27310-claude-code-beta-',

65 guideHref: '/en/jetbrains'

66 }

67 };

68 const PROVIDERS = [{

69 key: 'anthropic',

70 label: 'Anthropic'

71 }, {

72 key: 'bedrock',

73 label: 'Amazon Bedrock'

74 }, {

75 key: 'foundry',

76 label: 'Microsoft Foundry'

77 }, {

78 key: 'vertex',

79 label: 'Google Vertex AI'

80 }];

81 const PROVIDER_NOTICE = {

82 bedrock: <>

83 <strong>Configure your AWS account first.</strong> Running on Bedrock

84 requires model access enabled in the AWS console and IAM credentials.{' '}

85 <a href="/en/amazon-bedrock">Bedrock setup guide →</a>

86 </>,

87 vertex: <>

88 <strong>Configure your GCP project first.</strong> Running on Vertex AI

89 requires the Vertex API enabled and a service account with the right

90 permissions.{' '}

91 <a href="/en/google-vertex-ai">Vertex setup guide →</a>

92 </>,

93 foundry: <>

94 <strong>Configure your Azure resources first.</strong> Running on

95 Microsoft Foundry requires an Azure subscription with a Foundry resource

96 and model deployments provisioned.{' '}

97 <a href="/en/microsoft-foundry">Foundry setup guide →</a>

98 </>

99 };

100 const iconCheck = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

101 <polyline points="20 6 9 17 4 12" />

102 </svg>;

103 const iconCopy = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

104 <rect x="9" y="9" width="13" height="13" rx="2" />

105 <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />

106 </svg>;

107 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

108 <line x1="5" y1="12" x2="19" y2="12" />

109 <polyline points="12 5 19 12 12 19" />

110 </svg>;

111 const iconArrowUpRight = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

112 <line x1="7" y1="17" x2="17" y2="7" />

113 <polyline points="7 7 17 7 17 17" />

114 </svg>;

115 const iconInfo = (size = 16) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

116 <circle cx="12" cy="12" r="10" />

117 <line x1="12" y1="16" x2="12" y2="12" />

118 <line x1="12" y1="8" x2="12.01" y2="8" />

119 </svg>;

120 const [target, setTarget] = useState(defaultSurface);

121 const [team, setTeam] = useState(false);

122 const [provider, setProvider] = useState('anthropic');

123 const [pkg, setPkg] = useState(() => (/Win/).test(navigator.userAgent) ? 'win' : 'mac');

124 const [winCmd, setWinCmd] = useState(false);

125 const [copied, setCopied] = useState(null);

126 const copyTimer = useRef(null);

127 const handleCopy = async (text, key) => {

128 try {

129 await navigator.clipboard.writeText(text);

130 } catch {

131 const ta = document.createElement('textarea');

132 ta.value = text;

133 document.body.appendChild(ta);

134 ta.select();

135 document.execCommand('copy');

136 document.body.removeChild(ta);

137 }

138 clearTimeout(copyTimer.current);

139 setCopied(key);

140 copyTimer.current = setTimeout(() => setCopied(null), 1800);

141 };

142 const cardBodyCmd = (cmd, prompt) => {

143 const on = copied === 'term';

144 return <div className="cc-ic-card-body">

145 <span className="cc-ic-prompt">{prompt || '$'}</span>

146 <div className="cc-ic-cmd">{cmd}</div>

147 <button type="button" className={'cc-ic-copy' + (on ? ' cc-ic-copied' : '')} onClick={() => handleCopy(cmd, 'term')}>

148 {on ? iconCheck(13) : iconCopy(13)}

149 <span>{on ? 'Copied' : 'Copy'}</span>

150 </button>

151 </div>;

152 };

153 const isWinInstaller = pkg === 'win';

154 const isWinPrompt = pkg === 'win' || pkg === 'winget';

155 const terminalCmd = isWinInstaller ? WIN_VARIANTS[winCmd ? 'cmd' : 'ps'] : TERM[pkg].cmd;

156 const alt = ALT_TARGETS[target];

157 const showNotice = team && provider !== 'anthropic';

158 const STYLES = `

159.cc-ic {

160 --ic-slate: #141413;

161 --ic-clay: #d97757;

162 --ic-clay-deep: #c6613f;

163 --ic-gray-000: #ffffff;

164 --ic-gray-150: #f0eee6;

165 --ic-gray-550: #73726c;

166 --ic-gray-700: #3d3d3a;

167 --ic-border-subtle: rgba(31, 30, 29, 0.08);

168 --ic-border-default: rgba(31, 30, 29, 0.15);

169 --ic-border-strong: rgba(31, 30, 29, 0.3);

170 --ic-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Courier New', monospace;

171 font-family: 'Anthropic Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;

172 font-size: 14px; line-height: 1.5; color: var(--ic-slate);

173 margin: 8px 0 32px;

174}

175.dark .cc-ic {

176 --ic-slate: #f0eee6;

177 --ic-gray-000: #262624;

178 --ic-gray-150: #1f1e1d;

179 --ic-gray-550: #91908a;

180 --ic-gray-700: #bfbdb4;

181 --ic-border-subtle: rgba(240, 238, 230, 0.08);

182 --ic-border-default: rgba(240, 238, 230, 0.14);

183 --ic-border-strong: rgba(240, 238, 230, 0.28);

184}

185.dark .cc-ic-check { background: transparent; }

186.dark .cc-ic-card { border: 0.5px solid var(--ic-border-subtle); }

187.dark .cc-ic-p-pill.cc-ic-active { box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); }

188.cc-ic *, .cc-ic *::before, .cc-ic *::after { box-sizing: border-box; }

189.cc-ic a { text-decoration: none; }

190.cc-ic a:not([class]) { color: inherit; }

191.cc-ic button { font-family: inherit; cursor: pointer; }

192 

193.cc-ic-tab-strip {

194 display: inline-flex; gap: 2px;

195 padding: 4px; background: var(--ic-gray-150);

196 border-radius: 10px; overflow-x: auto;

197 max-width: 100%;

198}

199.cc-ic-tab {

200 appearance: none; background: none; border: none;

201 padding: 10px 18px; font-size: 15px; font-weight: 430;

202 color: var(--ic-gray-550); border-radius: 7px;

203 white-space: nowrap;

204 transition: color 0.12s, background-color 0.12s;

205}

206.cc-ic-tab:hover { color: var(--ic-gray-700); }

207.cc-ic-tab.cc-ic-active {

208 color: var(--ic-slate); font-weight: 500;

209 background: var(--ic-gray-000);

210 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);

211}

212.dark .cc-ic-tab.cc-ic-active { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); }

213 

214.cc-ic-team-wrap { padding: 16px 0 20px; }

215.cc-ic-team-toggle {

216 display: flex; align-items: center; gap: 12px; font-family: inherit;

217 padding: 12px 16px; font-size: 14px; font-weight: 430;

218 color: var(--ic-gray-700); cursor: pointer; user-select: none;

219 width: fit-content; background: var(--ic-gray-150);

220 border: 0.5px solid var(--ic-border-subtle); border-radius: 8px;

221 transition: border-color 0.15s;

222}

223.cc-ic-team-toggle:hover { border-color: var(--ic-border-default); }

224.cc-ic-team-toggle.cc-ic-checked {

225 background: rgba(217, 119, 87, 0.08);

226 border-color: rgba(217, 119, 87, 0.25);

227}

228.cc-ic-check {

229 width: 16px; height: 16px;

230 border: 1px solid var(--ic-border-strong); border-radius: 4px;

231 background: var(--ic-gray-000);

232 display: flex; align-items: center; justify-content: center;

233 flex-shrink: 0;

234}

235.cc-ic-check svg { color: #fff; display: none; }

236.cc-ic-team-toggle.cc-ic-checked .cc-ic-check { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); }

237.cc-ic-team-toggle.cc-ic-checked .cc-ic-check svg { display: block; }

238 

239.cc-ic-team-reveal { display: flex; flex-direction: column; gap: 12px; margin-bottom: 16px; }

240.cc-ic-sales {

241 display: flex; align-items: center; justify-content: space-between;

242 gap: 16px; padding: 14px 16px;

243 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

244 border-radius: 8px; flex-wrap: wrap;

245}

246.cc-ic-sales-text { font-size: 13px; color: var(--ic-gray-700); line-height: 1.5; flex: 1; min-width: 200px; }

247.cc-ic-sales-text strong { font-weight: 550; color: var(--ic-slate); }

248.cc-ic-sales-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

249.cc-ic-btn-clay {

250 display: inline-flex; align-items: center; gap: 8px;

251 background: var(--ic-clay-deep); color: #fff; border: none;

252 border-radius: 8px; padding: 8px 14px;

253 font-size: 13px; font-weight: 500;

254 transition: background-color 0.15s; white-space: nowrap;

255}

256.cc-ic-btn-clay:hover { background: var(--ic-clay); }

257.cc-ic-btn-ghost {

258 display: inline-flex; align-items: center; gap: 8px;

259 background: transparent; color: var(--ic-gray-700);

260 border: 0.5px solid var(--ic-border-default);

261 border-radius: 8px; padding: 8px 14px;

262 font-size: 13px; font-weight: 500;

263}

264.cc-ic-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

265 

266.cc-ic-provider-bar {

267 display: flex; align-items: center; gap: 12px;

268 padding: 14px 16px; background: var(--ic-gray-150);

269 border-radius: 8px; font-size: 13px; flex-wrap: wrap;

270}

271.cc-ic-provider-bar .cc-ic-label { color: var(--ic-gray-550); flex-shrink: 0; }

272.cc-ic-provider-pills { display: flex; gap: 4px; flex-wrap: wrap; }

273.cc-ic-p-pill {

274 appearance: none; border: none; background: transparent;

275 padding: 6px 12px; border-radius: 6px;

276 font-size: 13px; font-weight: 430; color: var(--ic-gray-700);

277 white-space: nowrap;

278}

279.cc-ic-p-pill:hover { background: rgba(0, 0, 0, 0.04); }

280.cc-ic-p-pill.cc-ic-active {

281 background: var(--ic-gray-000); color: var(--ic-slate);

282 font-weight: 500; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);

283}

284.cc-ic-provider-notice {

285 display: flex; padding: 16px 18px;

286 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

287 border-radius: 8px; gap: 14px; align-items: flex-start;

288}

289.cc-ic-provider-notice > svg { color: var(--ic-gray-550); margin-top: 2px; flex-shrink: 0; }

290.cc-ic-provider-notice-body { font-size: 14px; line-height: 1.55; color: var(--ic-gray-700); }

291.cc-ic-provider-notice-body strong { font-weight: 550; color: var(--ic-slate); }

292.cc-ic-provider-notice-body a { color: var(--ic-clay-deep); font-weight: 500; }

293.cc-ic-provider-notice-body a:hover { text-decoration: underline; }

294 

295.cc-ic-card { background: #141413; border-radius: 12px; overflow: hidden; }

296.cc-ic-subtabs {

297 display: flex; align-items: center;

298 background: #1a1918;

299 border-bottom: 0.5px solid rgba(255, 255, 255, 0.08);

300 padding: 0 8px; overflow-x: auto;

301}

302.cc-ic-subtab {

303 appearance: none; background: none; border: none;

304 padding: 12px 16px; font-size: 12px;

305 color: rgba(255, 255, 255, 0.5);

306 position: relative; white-space: nowrap;

307}

308.cc-ic-subtab:hover { color: rgba(255, 255, 255, 0.75); }

309.cc-ic-subtab.cc-ic-active { color: #fff; }

310.cc-ic-subtab.cc-ic-active::after {

311 content: ''; position: absolute;

312 left: 12px; right: 12px; bottom: -0.5px;

313 height: 2px; background: var(--ic-clay);

314}

315.cc-ic-shell-switch {

316 display: inline-flex; gap: 2px;

317 margin: 14px 26px 0; padding: 3px;

318 background: rgba(255, 255, 255, 0.06);

319 border: 0.5px solid rgba(255, 255, 255, 0.08);

320 border-radius: 8px;

321 font-family: inherit;

322}

323.cc-ic-shell-option {

324 font: inherit; font-size: 12px; font-weight: 500;

325 padding: 5px 12px; border-radius: 6px;

326 background: transparent; border: none;

327 color: rgba(255, 255, 255, 0.55);

328 cursor: pointer; user-select: none; white-space: nowrap;

329 transition: color 120ms ease, background-color 120ms ease;

330}

331.cc-ic-shell-option:hover { color: rgba(255, 255, 255, 0.85); }

332.cc-ic-shell-option.cc-ic-active {

333 background: rgba(255, 255, 255, 0.12);

334 color: #fff;

335 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);

336}

337 

338.cc-ic-card-body { padding: 24px 26px; display: flex; align-items: flex-start; gap: 14px; }

339.cc-ic-prompt {

340 color: var(--ic-clay); font-family: var(--ic-font-mono);

341 font-size: 17px; user-select: none; padding-top: 2px;

342}

343.cc-ic-cmd {

344 flex: 1; font-family: var(--ic-font-mono);

345 font-size: 17px; color: #f0eee6;

346 line-height: 1.55; white-space: pre-wrap; word-break: break-word;

347}

348.cc-ic-copy {

349 display: inline-flex; align-items: center; gap: 6px;

350 background: rgba(255, 255, 255, 0.08);

351 border: 0.5px solid rgba(255, 255, 255, 0.12);

352 color: rgba(255, 255, 255, 0.85);

353 padding: 7px 13px; border-radius: 8px;

354 font-size: 13px; font-weight: 500; flex-shrink: 0;

355}

356.cc-ic-copy:hover { background: rgba(255, 255, 255, 0.14); }

357.cc-ic-copy.cc-ic-copied { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); color: #fff; }

358 

359.cc-ic-below {

360 margin-top: 12px; font-size: 13px; color: var(--ic-gray-550);

361 display: flex; gap: 16px; flex-wrap: wrap; align-items: baseline;

362}

363.cc-ic-below a { color: var(--ic-gray-700); border-bottom: 0.5px solid var(--ic-border-default); }

364.cc-ic-below a:hover { color: var(--ic-clay-deep); border-bottom-color: var(--ic-clay-deep); }

365.cc-ic-handoff {

366 padding: 22px 24px;

367 background: linear-gradient(180deg, #faf9f4 0%, #f3f1e9 100%);

368 border: 0.5px solid var(--ic-border-default);

369 border-radius: 12px;

370 box-shadow: 0 1px 2px rgba(31, 30, 29, 0.04), 0 6px 16px -4px rgba(31, 30, 29, 0.06);

371}

372.dark .cc-ic-handoff {

373 background: linear-gradient(180deg, #262624 0%, #1f1e1d 100%);

374 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3), 0 6px 16px -4px rgba(0, 0, 0, 0.4);

375}

376.cc-ic-handoff-title {

377 font-size: 16px; font-weight: 550; color: var(--ic-slate);

378 letter-spacing: -0.01em; margin-bottom: 4px;

379}

380.cc-ic-handoff-sub {

381 font-size: 14px; line-height: 1.5; color: var(--ic-gray-700);

382 margin-bottom: 18px;

383}

384.cc-ic-handoff-actions { display: flex; gap: 10px; flex-wrap: wrap; }

385.cc-ic-handoff-alt {

386 margin-top: 12px; font-size: 12px; color: var(--ic-gray-550);

387}

388.cc-ic-handoff-alt code {

389 font-family: var(--ic-font-mono); font-size: 11px;

390 background: var(--ic-gray-150); padding: 2px 6px;

391 border-radius: 4px; color: var(--ic-gray-700);

392}

393.cc-ic-copy-sm {

394 appearance: none; border: none;

395 display: inline-flex; align-items: center; justify-content: center;

396 width: 22px; height: 22px;

397 margin-left: 4px; vertical-align: middle;

398 background: var(--ic-gray-150); color: var(--ic-gray-550);

399 border-radius: 4px;

400 transition: color 0.1s, background-color 0.1s;

401}

402.cc-ic-copy-sm:hover { color: var(--ic-gray-700); background: var(--ic-border-default); }

403.cc-ic-copy-sm.cc-ic-copied { background: var(--ic-clay-deep); color: #fff; }

404 

405@media (max-width: 720px) {

406 .cc-ic-tab { padding: 12px 14px; font-size: 14px; }

407 .cc-ic-sales-actions { width: 100%; }

408 .cc-ic-card-body { padding: 20px; }

409 .cc-ic-cmd { font-size: 15px; }

410}

411`;

412 return <div className="cc-ic not-prose">

413 <style>{STYLES}</style>

414 

415 {}

416 <div className="cc-ic-tab-strip" role="tablist">

417 {TABS.map(t => <button key={t.key} type="button" role="tab" aria-selected={target === t.key} className={'cc-ic-tab' + (target === t.key ? ' cc-ic-active' : '')} onClick={() => setTarget(t.key)}>

418 {t.label}

419 </button>)}

420 </div>

421 

422 {}

423 <div className="cc-ic-team-wrap">

424 <button type="button" role="switch" aria-checked={team} className={'cc-ic-team-toggle' + (team ? ' cc-ic-checked' : '')} onClick={() => setTeam(!team)}>

425 <span className="cc-ic-check">{iconCheck(11)}</span>

426 <span>

427 I’m buying for a team or company (SSO, AWS/Azure/GCP, central billing)

428 </span>

429 </button>

430 </div>

431 

432 {}

433 {team && <div className="cc-ic-team-reveal">

434 <div className="cc-ic-sales">

435 <div className="cc-ic-sales-text">

436 <strong>Set up your team:</strong> self-serve or talk to sales.

437 </div>

438 <div className="cc-ic-sales-actions">

439 <a href="https://claude.ai/upgrade?initialPlanType=team&amp;utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_get_started" className="cc-ic-btn-ghost">

440 Get started

441 </a>

442 <a href="https://www.anthropic.com/contact-sales?utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_contact_sales" className="cc-ic-btn-clay">

443 Contact sales {iconArrowRight()}

444 </a>

445 </div>

446 </div>

447 

448 <div className="cc-ic-provider-bar">

449 <span className="cc-ic-label">Run on</span>

450 <div className="cc-ic-provider-pills" role="radiogroup" aria-label="Provider">

451 {PROVIDERS.map(p => <button key={p.key} type="button" role="radio" aria-checked={provider === p.key} className={'cc-ic-p-pill' + (provider === p.key ? ' cc-ic-active' : '')} onClick={() => setProvider(p.key)}>

452 {p.label}

453 </button>)}

454 </div>

455 </div>

456 

457 {showNotice && <div className="cc-ic-provider-notice">

458 {iconInfo()}

459 <div className="cc-ic-provider-notice-body">

460 {PROVIDER_NOTICE[provider]}

461 </div>

462 </div>}

463 </div>}

464 

465 {}

466 {target === 'terminal' && <div className="cc-ic-card">

467 <div className="cc-ic-subtabs" role="tablist" aria-label="Install method">

468 {Object.keys(TERM).map(k => <button key={k} type="button" role="tab" aria-selected={pkg === k} className={'cc-ic-subtab' + (pkg === k ? ' cc-ic-active' : '')} onClick={() => setPkg(k)}>

469 {TERM[k].label}

470 </button>)}

471 </div>

472 {isWinInstaller && <div className="cc-ic-shell-switch" role="tablist" aria-label="Shell">

473 {[{

474 k: 'ps',

475 label: 'PowerShell'

476 }, {

477 k: 'cmd',

478 label: 'CMD'

479 }].map(({k, label}) => {

480 const active = k === 'cmd' === winCmd;

481 return <button key={k} type="button" role="tab" aria-selected={active} className={'cc-ic-shell-option' + (active ? ' cc-ic-active' : '')} onClick={() => setWinCmd(k === 'cmd')}>

482 {label}

483 </button>;

484 })}

485 </div>}

486 {cardBodyCmd(terminalCmd, isWinPrompt ? '>' : '$')}

487 </div>}

488 

489 {}

490 {target === 'terminal' && <div className="cc-ic-below">

491 {isWinInstaller && <span>

492 <a href="https://git-scm.com/downloads/win" target="_blank" rel="noopener">

493 Git for Windows

494 </a>{' '}

495 recommended. PowerShell is used if Git Bash is absent.

496 </span>}

497 {(pkg === 'brew' || pkg === 'winget') && <span>

498 Does not auto-update. Run{' '}

499 <code>{pkg === 'brew' ? 'brew upgrade claude-code' : 'winget upgrade Anthropic.ClaudeCode'}</code>{' '}

500 periodically.

501 </span>}

502 <a href="/en/troubleshoot-install">Installation troubleshooting</a>

503 </div>}

504 

505 {alt && <div className="cc-ic-handoff">

506 <div className="cc-ic-handoff-title">Claude Code for {alt.name}</div>

507 <div className="cc-ic-handoff-sub">{alt.tagline}</div>

508 <div className="cc-ic-handoff-actions">

509 <a href={alt.installHref} className="cc-ic-btn-clay" {...alt.installHref.startsWith('http') ? {

510 target: '_blank',

511 rel: 'noopener'

512 } : {}}>

513 {alt.installLabel} {iconArrowUpRight(13)}

514 </a>

515 <a href={alt.guideHref} className="cc-ic-btn-ghost">

516 {alt.name} guide {iconArrowRight(12)}

517 </a>

518 </div>

519 {alt.altCmd && <div className="cc-ic-handoff-alt">

520 or run <code>{alt.altCmd}</code>

521 <button type="button" className={'cc-ic-copy-sm' + (copied === 'alt' ? ' cc-ic-copied' : '')} onClick={() => handleCopy(alt.altCmd, 'alt')} aria-label="Copy command">

522 {copied === 'alt' ? iconCheck(11) : iconCopy(11)}

523 </button>

524 </div>}

525 </div>}

526 </div>;

527};

528 

529export const Experiment = ({flag, treatment, children}) => {

530 const VID_KEY = 'exp_vid';

531 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

532 const fnv1a = s => {

533 let h = 0x811c9dc5;

534 for (let i = 0; i < s.length; i++) {

535 h ^= s.charCodeAt(i);

536 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

537 }

538 return h >>> 0;

539 };

540 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

541 const [decision] = useState(() => {

542 const params = new URLSearchParams(location.search);

543 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

544 const force = params.get('gb-force');

545 if (force) {

546 for (const p of force.split(',')) {

547 const [k, v] = p.split(':');

548 if (k === flag) return {

549 variant: v || 'treatment',

550 track: false

551 };

552 }

553 }

554 if (navigator.globalPrivacyControl) {

555 return {

556 variant: 'control',

557 track: false

558 };

559 }

560 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

561 if (prefsMatch) {

562 try {

563 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

564 return {

565 variant: 'control',

566 track: false

567 };

568 }

569 } catch {

570 return {

571 variant: 'control',

572 track: false

573 };

574 }

575 } else {

576 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

577 if (!country || CONSENT_COUNTRIES.has(country)) {

578 return {

579 variant: 'control',

580 track: false

581 };

582 }

583 }

584 let vid;

585 try {

586 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

587 if (ajsMatch) {

588 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

589 } else {

590 vid = localStorage.getItem(VID_KEY);

591 if (!vid) {

592 vid = crypto.randomUUID();

593 }

594 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

595 }

596 try {

597 localStorage.setItem(VID_KEY, vid);

598 } catch {}

599 } catch {

600 return {

601 variant: 'control',

602 track: false

603 };

604 }

605 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

606 return {

607 variant,

608 track: true,

609 vid

610 };

611 });

612 useEffect(() => {

613 if (!decision.track) return;

614 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

615 method: 'POST',

616 headers: {

617 'Content-Type': 'application/json',

618 'x-service-name': 'claude_code_docs'

619 },

620 body: JSON.stringify({

621 events: [{

622 event_type: 'GrowthbookExperimentEvent',

623 event_data: {

624 device_id: decision.vid,

625 anonymous_id: decision.vid,

626 timestamp: new Date().toISOString(),

627 experiment_id: flag,

628 variation_id: decision.variant === 'treatment' ? 1 : 0,

629 environment: 'production'

630 }

631 }]

632 }),

633 keepalive: true

634 }).catch(() => {});

635 }, []);

636 return decision.variant === 'treatment' ? treatment : children;

637};

638 

639Panduan cepat ini akan membuat Anda menggunakan bantuan pengkodean bertenaga AI dalam beberapa menit. Di akhir panduan, Anda akan memahami cara menggunakan Claude Code untuk tugas-tugas pengembangan umum.9Panduan cepat ini akan membuat Anda menggunakan bantuan pengkodean bertenaga AI dalam beberapa menit. Di akhir panduan, Anda akan memahami cara menggunakan Claude Code untuk tugas-tugas pengembangan umum.

640 10 

641<Experiment flag="quickstart-install-configurator" treatment={<InstallConfigurator />} />

642 

643## Sebelum Anda memulai11## Sebelum Anda memulai

644 12 

645Pastikan Anda memiliki:13Pastikan Anda memiliki:


647* Terminal atau command prompt yang terbuka15* Terminal atau command prompt yang terbuka

648 * Jika Anda belum pernah menggunakan terminal sebelumnya, lihat [panduan terminal](/id/terminal-guide)16 * Jika Anda belum pernah menggunakan terminal sebelumnya, lihat [panduan terminal](/id/terminal-guide)

649* Proyek kode untuk dikerjakan17* Proyek kode untuk dikerjakan

650* [Langganan Claude](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=quickstart_prereq) (Pro, Max, Teams, atau Enterprise), akun [Claude Console](https://console.anthropic.com/), atau akses melalui [penyedia cloud yang didukung](/id/third-party-integrations)18* [Langganan Claude](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=quickstart_prereq) (Pro, Max, Team, atau Enterprise), akun [Claude Console](https://console.anthropic.com/), atau akses melalui [penyedia cloud yang didukung](/id/third-party-integrations)

651 19 

652<Note>20<Note>

653 Panduan ini mencakup CLI terminal. Claude Code juga tersedia di [web](https://claude.ai/code), sebagai [aplikasi desktop](/id/desktop), di [VS Code](/id/vs-code) dan [IDE JetBrains](/id/jetbrains), di [Slack](/id/slack), dan di CI/CD dengan [GitHub Actions](/id/github-actions) dan [GitLab](/id/gitlab-ci-cd). Lihat [semua antarmuka](/id/overview#use-claude-code-everywhere).21 Panduan ini mencakup CLI terminal. Claude Code juga tersedia di [web](https://claude.ai/code), sebagai [aplikasi desktop](/id/desktop), di [VS Code](/id/vs-code) dan [IDE JetBrains](/id/jetbrains), di [Slack](/id/slack), dan di CI/CD dengan [GitHub Actions](/id/github-actions) dan [GitLab](/id/gitlab-ci-cd). Lihat [semua antarmuka](/id/overview#use-claude-code-everywhere).


727 95 

728Anda dapat masuk menggunakan salah satu jenis akun ini:96Anda dapat masuk menggunakan salah satu jenis akun ini:

729 97 

730* [Claude Pro, Max, Teams, atau Enterprise](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=quickstart_login) (direkomendasikan)98* [Claude Pro, Max, Team, atau Enterprise](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=quickstart_login) (direkomendasikan)

731* [Claude Console](https://console.anthropic.com/) (akses API dengan kredit prabayar). Pada login pertama, ruang kerja "Claude Code" secara otomatis dibuat di Console untuk pelacakan biaya terpusat.99* [Claude Console](https://console.anthropic.com/) (akses API dengan kredit prabayar). Pada login pertama, ruang kerja "Claude Code" secara otomatis dibuat di Console untuk pelacakan biaya terpusat.

732* [Amazon Bedrock, Google Vertex AI, atau Microsoft Foundry](/id/third-party-integrations) (penyedia cloud enterprise)100* [Amazon Bedrock, Google Vertex AI, atau Microsoft Foundry](/id/third-party-integrations) (penyedia cloud enterprise)

733 101 


899| `claude -p "query"` | Jalankan kueri sekali, lalu keluar | `claude -p "jelaskan fungsi ini"` |267| `claude -p "query"` | Jalankan kueri sekali, lalu keluar | `claude -p "jelaskan fungsi ini"` |

900| `claude -c` | Lanjutkan percakapan terbaru di direktori saat ini | `claude -c` |268| `claude -c` | Lanjutkan percakapan terbaru di direktori saat ini | `claude -c` |

901| `claude -r` | Lanjutkan percakapan sebelumnya | `claude -r` |269| `claude -r` | Lanjutkan percakapan sebelumnya | `claude -r` |

902| `claude commit` | Buat komit Git | `claude commit` |

903| `/clear` | Hapus riwayat percakapan | `/clear` |270| `/clear` | Hapus riwayat percakapan | `/clear` |

904| `/help` | Tampilkan perintah yang tersedia | `/help` |271| `/help` | Tampilkan perintah yang tersedia | `/help` |

905| `exit` atau Ctrl+C | Keluar dari Claude Code | `exit` |272| `exit` atau Ctrl+D | Keluar dari Claude Code | `exit` |

906 273 

907Lihat [referensi CLI](/id/cli-reference) untuk daftar lengkap perintah.274Lihat [referensi CLI](/id/cli-reference) untuk daftar lengkap perintah.

908 275 

settings.md +7 −3

Details

156`settings.json` mendukung sejumlah opsi:156`settings.json` mendukung sejumlah opsi:

157 157 

158| Kunci | Deskripsi | Contoh |158| Kunci | Deskripsi | Contoh |

159| :-------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------- |159| :-------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------- |

160| `agent` | Jalankan thread utama sebagai subagent bernama. Menerapkan prompt sistem subagent, pembatasan tool, dan model. Lihat [Panggil subagents secara eksplisit](/id/sub-agents#invoke-subagents-explicitly) | `"code-reviewer"` |160| `agent` | Jalankan thread utama sebagai subagent bernama. Menerapkan prompt sistem subagent, pembatasan tool, dan model. Lihat [Panggil subagents secara eksplisit](/id/sub-agents#invoke-subagents-explicitly) | `"code-reviewer"` |

161| `allowedChannelPlugins` | (Pengaturan yang dikelola saja) Daftar putih plugin channel yang dapat mendorong pesan. Menggantikan daftar putih Anthropic default saat diatur. Tidak terdefinisi = kembali ke default, array kosong = blokir semua plugin channel. Memerlukan `channelsEnabled: true`. Lihat [Batasi plugin channel mana yang dapat dijalankan](/id/channels#restrict-which-channel-plugins-can-run) | `[{ "marketplace": "claude-plugins-official", "plugin": "telegram" }]` |161| `allowedChannelPlugins` | (Pengaturan yang dikelola saja) Daftar putih plugin channel yang dapat mendorong pesan. Menggantikan daftar putih Anthropic default saat diatur. Tidak terdefinisi = kembali ke default, array kosong = blokir semua plugin channel. Memerlukan `channelsEnabled: true`. Lihat [Batasi plugin channel mana yang dapat dijalankan](/id/channels#restrict-which-channel-plugins-can-run) | `[{ "marketplace": "claude-plugins-official", "plugin": "telegram" }]` |

162| `allowedHttpHookUrls` | Daftar putih pola URL yang dapat ditargetkan oleh HTTP hooks. Mendukung `*` sebagai wildcard. Saat diatur, hooks dengan URL yang tidak cocok diblokir. Tidak terdefinisi = tidak ada pembatasan, array kosong = blokir semua HTTP hooks. Array digabungkan di seluruh sumber pengaturan. Lihat [Konfigurasi Hook](#hook-configuration) | `["https://hooks.example.com/*"]` |162| `allowedHttpHookUrls` | Daftar putih pola URL yang dapat ditargetkan oleh HTTP hooks. Mendukung `*` sebagai wildcard. Saat diatur, hooks dengan URL yang tidak cocok diblokir. Tidak terdefinisi = tidak ada pembatasan, array kosong = blokir semua HTTP hooks. Array digabungkan di seluruh sumber pengaturan. Lihat [Konfigurasi Hook](#hook-configuration) | `["https://hooks.example.com/*"]` |


211| `modelOverrides` | Peta ID model Anthropic ke ID model spesifik penyedia seperti ARN profil inferensi Bedrock. Setiap entri pemilih model menggunakan nilai yang dipetakan saat memanggil API penyedia. Lihat [Timpa ID model per versi](/id/model-config#override-model-ids-per-version) | `{"claude-opus-4-6": "arn:aws:bedrock:..."}` |211| `modelOverrides` | Peta ID model Anthropic ke ID model spesifik penyedia seperti ARN profil inferensi Bedrock. Setiap entri pemilih model menggunakan nilai yang dipetakan saat memanggil API penyedia. Lihat [Timpa ID model per versi](/id/model-config#override-model-ids-per-version) | `{"claude-opus-4-6": "arn:aws:bedrock:..."}` |

212| `otelHeadersHelper` | Skrip untuk menghasilkan header OpenTelemetry dinamis. Berjalan saat startup dan secara berkala. Atur interval penyegaran dengan [`CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS`](/id/env-vars). Lihat [Header dinamis](/id/monitoring-usage#dynamic-headers) | `/bin/generate_otel_headers.sh` |212| `otelHeadersHelper` | Skrip untuk menghasilkan header OpenTelemetry dinamis. Berjalan saat startup dan secara berkala. Atur interval penyegaran dengan [`CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS`](/id/env-vars). Lihat [Header dinamis](/id/monitoring-usage#dynamic-headers) | `/bin/generate_otel_headers.sh` |

213| `outputStyle` | Konfigurasikan gaya output untuk menyesuaikan prompt sistem. Lihat [dokumentasi gaya output](/id/output-styles) | `"Explanatory"` |213| `outputStyle` | Konfigurasikan gaya output untuk menyesuaikan prompt sistem. Lihat [dokumentasi gaya output](/id/output-styles) | `"Explanatory"` |

214| `parentSettingsBehavior` | {/* min-version: 2.1.133 */}(Pengaturan yang dikelola saja) Mengontrol apakah pengaturan yang dikelola yang disediakan secara terprogram oleh proses host penyematan, seperti Agent SDK atau ekstensi IDE, berlaku saat tingkat yang dikelola yang digunakan admin juga ada. `"first-wins"`: pengaturan yang disediakan parent dijatuhkan dan hanya tingkat admin yang berlaku. `"merge"`: pengaturan yang disediakan parent berlaku di bawah tingkat admin, disaring sehingga mereka dapat mengencangkan kebijakan tetapi tidak melonggarkannya. Tidak berpengaruh saat tidak ada tingkat admin yang digunakan. Default: `"first-wins"`. Memerlukan Claude Code v2.1.133 atau lebih baru | `"merge"` |

214| `permissions` | Lihat tabel di bawah untuk struktur izin. | |215| `permissions` | Lihat tabel di bawah untuk struktur izin. | |

215| `plansDirectory` | Sesuaikan di mana file rencana disimpan. Jalur relatif terhadap akar proyek. Default: `~/.claude/plans` | `"./plans"` |216| `plansDirectory` | Sesuaikan di mana file rencana disimpan. Jalur relatif terhadap akar proyek. Default: `~/.claude/plans` | `"./plans"` |

216| `pluginTrustMessage` | (Pengaturan yang dikelola saja) Pesan khusus ditambahkan ke peringatan kepercayaan plugin yang ditampilkan sebelum instalasi. Gunakan ini untuk menambahkan konteks spesifik organisasi, misalnya untuk mengonfirmasi bahwa plugin dari marketplace internal Anda telah disaring. | `"All plugins from our marketplace are approved by IT"` |217| `pluginTrustMessage` | (Pengaturan yang dikelola saja) Pesan khusus ditambahkan ke peringatan kepercayaan plugin yang ditampilkan sebelum instalasi. Gunakan ini untuk menambahkan konteks spesifik organisasi, misalnya untuk mengonfirmasi bahwa plugin dari marketplace internal Anda telah disaring. | `"All plugins from our marketplace are approved by IT"` |


255 256 

256### Pengaturan worktree257### Pengaturan worktree

257 258 

258Konfigurasikan bagaimana `--worktree` membuat dan mengelola git worktrees. Gunakan pengaturan ini untuk mengurangi penggunaan disk dan waktu startup di monorepo besar.259Konfigurasikan bagaimana `--worktree` membuat dan mengelola git worktrees.

259 260 

260| Kunci | Deskripsi | Contoh |261| Kunci | Deskripsi | Contoh |

261| :---------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :------------------------------------ |262| :---------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------ |

263| `worktree.baseRef` | Ref mana yang baru worktrees cabang dari. `"fresh"` (default) cabang dari `origin/<default-branch>` untuk pohon bersih yang cocok dengan remote. `"head"` cabang dari `HEAD` lokal Anda saat ini, jadi komit yang tidak didorong dan status cabang fitur ada di worktree. Berlaku untuk `--worktree`, tool `EnterWorktree`, dan isolasi subagent | `"head"` |

262| `worktree.symlinkDirectories` | Direktori untuk symlink dari repositori utama ke setiap worktree untuk menghindari duplikasi direktori besar di disk. Tidak ada direktori yang disymlink secara default | `["node_modules", ".cache"]` |264| `worktree.symlinkDirectories` | Direktori untuk symlink dari repositori utama ke setiap worktree untuk menghindari duplikasi direktori besar di disk. Tidak ada direktori yang disymlink secara default | `["node_modules", ".cache"]` |

263| `worktree.sparsePaths` | Direktori untuk diperiksa di setiap worktree melalui git sparse-checkout (mode cone). Hanya jalur yang terdaftar yang ditulis ke disk, yang lebih cepat di monorepo besar | `["packages/my-app", "shared/utils"]` |265| `worktree.sparsePaths` | Direktori untuk diperiksa di setiap worktree melalui git sparse-checkout (mode cone). Hanya jalur yang terdaftar yang ditulis ke disk, yang lebih cepat di monorepo besar | `["packages/my-app", "shared/utils"]` |

264 266 


318| `network.socksProxyPort` | Port proxy SOCKS5 yang digunakan jika Anda ingin membawa proxy Anda sendiri. Jika tidak ditentukan, Claude akan menjalankan proxy-nya sendiri. | `8081` |320| `network.socksProxyPort` | Port proxy SOCKS5 yang digunakan jika Anda ingin membawa proxy Anda sendiri. Jika tidak ditentukan, Claude akan menjalankan proxy-nya sendiri. | `8081` |

319| `enableWeakerNestedSandbox` | Aktifkan sandbox yang lebih lemah untuk lingkungan Docker tanpa hak istimewa (Linux dan WSL2 saja). **Mengurangi keamanan.** Default: false | `true` |321| `enableWeakerNestedSandbox` | Aktifkan sandbox yang lebih lemah untuk lingkungan Docker tanpa hak istimewa (Linux dan WSL2 saja). **Mengurangi keamanan.** Default: false | `true` |

320| `enableWeakerNetworkIsolation` | (macOS saja) Izinkan akses ke layanan kepercayaan TLS sistem (`com.apple.trustd.agent`) dalam sandbox. Diperlukan untuk tools berbasis Go seperti `gh`, `gcloud`, dan `terraform` untuk memverifikasi sertifikat TLS saat menggunakan `httpProxyPort` dengan proxy MITM dan CA khusus. **Mengurangi keamanan** dengan membuka jalur eksfiltrasi data potensial. Default: false | `true` |322| `enableWeakerNetworkIsolation` | (macOS saja) Izinkan akses ke layanan kepercayaan TLS sistem (`com.apple.trustd.agent`) dalam sandbox. Diperlukan untuk tools berbasis Go seperti `gh`, `gcloud`, dan `terraform` untuk memverifikasi sertifikat TLS saat menggunakan `httpProxyPort` dengan proxy MITM dan CA khusus. **Mengurangi keamanan** dengan membuka jalur eksfiltrasi data potensial. Default: false | `true` |

323| `bwrapPath` | (Pengaturan yang dikelola saja, Linux/WSL2) Jalur absolut ke binary bubblewrap (`bwrap`). Menimpa deteksi otomatis melalui `PATH`. Hanya dihormati dari [pengaturan yang dikelola](/id/settings#settings-precedence), bukan dari pengaturan pengguna atau proyek. Berguna saat `bwrap` diinstal di lokasi non-standar di lingkungan yang dikelola. | `/opt/admin/bwrap` |

324| `socatPath` | (Pengaturan yang dikelola saja, Linux/WSL2) Jalur absolut ke binary `socat` yang digunakan untuk proxy jaringan sandbox. Menimpa deteksi otomatis melalui `PATH`. Hanya dihormati dari pengaturan yang dikelola. | `/opt/admin/socat` |

321 325 

322#### Prefiks jalur sandbox326#### Prefiks jalur sandbox

323 327 

setup.md +2 −0

Details

398 398 

399Platform instalasi npm yang didukung adalah `darwin-arm64`, `darwin-x64`, `linux-x64`, `linux-arm64`, `linux-x64-musl`, `linux-arm64-musl`, `win32-x64`, dan `win32-arm64`. Manajer paket Anda harus memungkinkan dependensi opsional. Lihat [troubleshooting](/id/troubleshoot-install#native-binary-not-found-after-npm-install) jika biner hilang setelah instalasi.399Platform instalasi npm yang didukung adalah `darwin-arm64`, `darwin-x64`, `linux-x64`, `linux-arm64`, `linux-x64-musl`, `linux-arm64-musl`, `win32-x64`, dan `win32-arm64`. Manajer paket Anda harus memungkinkan dependensi opsional. Lihat [troubleshooting](/id/troubleshoot-install#native-binary-not-found-after-npm-install) jika biner hilang setelah instalasi.

400 400 

401Untuk upgrade instalasi npm, jalankan `npm install -g @anthropic-ai/claude-code@latest`. Hindari `npm update -g`, yang menghormati rentang semver dari instalasi asli dan mungkin tidak membawa Anda ke rilis terbaru.

402 

401<Warning>403<Warning>

402 JANGAN gunakan `sudo npm install -g` karena ini dapat menyebabkan masalah izin dan risiko keamanan. Jika Anda mengalami kesalahan izin, lihat [troubleshooting kesalahan izin](/id/troubleshoot-install#permission-errors-during-installation).404 JANGAN gunakan `sudo npm install -g` karena ini dapat menyebabkan masalah izin dan risiko keamanan. Jika Anda mengalami kesalahan izin, lihat [troubleshooting kesalahan izin](/id/troubleshoot-install#permission-errors-during-installation).

403</Warning>405</Warning>

sub-agents.md +3 −3

Details

262| :---------------- | :--------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |262| :---------------- | :--------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

263| `name` | Ya | Pengenal unik menggunakan huruf kecil dan tanda hubung |263| `name` | Ya | Pengenal unik menggunakan huruf kecil dan tanda hubung |

264| `description` | Ya | Kapan Claude harus mendelegasikan ke subagent ini |264| `description` | Ya | Kapan Claude harus mendelegasikan ke subagent ini |

265| `tools` | Tidak | [Alat](#available-tools) yang dapat digunakan subagent. Mewarisi semua alat jika dihilangkan |265| `tools` | Tidak | [Alat](#available-tools) yang dapat digunakan subagent. Mewarisi semua alat jika dihilangkan. Untuk memuat Skills ke dalam konteks, gunakan bidang `skills` daripada mencantumkan `Skill` di sini |

266| `disallowedTools` | Tidak | Alat untuk ditolak, dihapus dari daftar yang diwarisi atau ditentukan |266| `disallowedTools` | Tidak | Alat untuk ditolak, dihapus dari daftar yang diwarisi atau ditentukan |

267| `model` | Tidak | [Model](#choose-a-model) untuk digunakan: `sonnet`, `opus`, `haiku`, ID model lengkap (misalnya, `claude-opus-4-7`), atau `inherit`. Default ke `inherit` |267| `model` | Tidak | [Model](#choose-a-model) untuk digunakan: `sonnet`, `opus`, `haiku`, ID model lengkap (misalnya, `claude-opus-4-7`), atau `inherit`. Default ke `inherit` |

268| `permissionMode` | Tidak | [Mode izin](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, atau `plan`. Diabaikan untuk [subagent plugin](#choose-the-subagent-scope) |268| `permissionMode` | Tidak | [Mode izin](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, atau `plan`. Diabaikan untuk [subagent plugin](#choose-the-subagent-scope) |

269| `maxTurns` | Tidak | Jumlah maksimum putaran agentic sebelum subagent berhenti |269| `maxTurns` | Tidak | Jumlah maksimum putaran agentic sebelum subagent berhenti |

270| `skills` | Tidak | [Skills](/id/skills) untuk dimuat ke dalam konteks subagent saat startup. Konten skill lengkap disuntikkan, bukan hanya tersedia untuk invokasi. Subagent tidak mewarisi skills dari percakapan induk |270| `skills` | Tidak | [Skills](/id/skills) untuk dimuat ke dalam konteks subagent saat startup. Konten skill lengkap disuntikkan, bukan hanya deskripsi. Subagent masih dapat memanggil project, user, dan plugin skills yang tidak tercantum melalui alat Skill |

271| `mcpServers` | Tidak | [MCP servers](/id/mcp) tersedia untuk subagent ini. Setiap entri adalah nama server yang mereferensikan server yang sudah dikonfigurasi (misalnya, `"slack"`) atau definisi inline dengan nama server sebagai kunci dan [konfigurasi MCP server](/id/mcp#installing-mcp-servers) lengkap sebagai nilai. Diabaikan untuk [subagent plugin](#choose-the-subagent-scope) |271| `mcpServers` | Tidak | [MCP servers](/id/mcp) tersedia untuk subagent ini. Setiap entri adalah nama server yang mereferensikan server yang sudah dikonfigurasi (misalnya, `"slack"`) atau definisi inline dengan nama server sebagai kunci dan [konfigurasi MCP server](/id/mcp#installing-mcp-servers) lengkap sebagai nilai. Diabaikan untuk [subagent plugin](#choose-the-subagent-scope) |

272| `hooks` | Tidak | [Lifecycle hooks](#define-hooks-for-subagents) yang dibatasi pada subagent ini. Diabaikan untuk [subagent plugin](#choose-the-subagent-scope) |272| `hooks` | Tidak | [Lifecycle hooks](#define-hooks-for-subagents) yang dibatasi pada subagent ini. Diabaikan untuk [subagent plugin](#choose-the-subagent-scope) |

273| `memory` | Tidak | [Cakupan memori persisten](#enable-persistent-memory): `user`, `project`, atau `local`. Memungkinkan pembelajaran lintas sesi |273| `memory` | Tidak | [Cakupan memori persisten](#enable-persistent-memory): `user`, `project`, atau `local`. Memungkinkan pembelajaran lintas sesi |


418Implement API endpoints. Follow the conventions and patterns from the preloaded skills.418Implement API endpoints. Follow the conventions and patterns from the preloaded skills.

419```419```

420 420 

421Konten lengkap setiap skill disuntikkan ke dalam konteks subagent, bukan hanya tersedia untuk invokasi. Subagent tidak mewarisi skills dari percakapan induk; Anda harus mencantumkannya secara eksplisit.421Konten lengkap setiap skill yang tercantum disuntikkan ke dalam konteks subagent saat startup. Bidang ini mengontrol skill mana yang dimuat sebelumnya, bukan skill mana yang dapat diakses subagent: tanpanya, subagent masih dapat menemukan dan memanggil project, user, dan plugin skills melalui alat Skill selama eksekusi. Untuk mencegah subagent memanggil skills sama sekali, hilangkan `Skill` dari daftar [`tools`](#available-tools) atau tambahkan ke `disallowedTools`.

422 422 

423Anda tidak dapat preload skills yang menetapkan [`disable-model-invocation: true`](/id/skills#control-who-invokes-a-skill), karena preloading menarik dari set skills yang sama yang dapat diinvokasi Claude. Jika skill yang tercantum hilang atau dinonaktifkan, Claude Code melewatinya dan mencatat peringatan ke debug log.423Anda tidak dapat preload skills yang menetapkan [`disable-model-invocation: true`](/id/skills#control-who-invokes-a-skill), karena preloading menarik dari set skills yang sama yang dapat diinvokasi Claude. Jika skill yang tercantum hilang atau dinonaktifkan, Claude Code melewatinya dan mencatat peringatan ke debug log.

424 424 

Details

107set -as terminal-features 'xterm*:extkeys'107set -as terminal-features 'xterm*:extkeys'

108```108```

109 109 

110Baris `allow-passthrough` memungkinkan notifikasi dan pembaruan kemajuan mencapai iTerm2, Ghostty, atau Kitty alih-alih ditelan oleh tmux. Baris `extended-keys` memungkinkan tmux membedakan Shift+Enter dari Enter biasa sehingga pintasan baris baru bekerja.110Baris `allow-passthrough` memungkinkan notifikasi dan pembaruan kemajuan mencapai terminal luar alih-alih ditelan oleh tmux. Baris `extended-keys` memungkinkan tmux membedakan Shift+Enter dari Enter biasa sehingga pintasan baris baru bekerja.

111 111 

112## Cocokkan tema warna112## Cocokkan tema warna

113 113 

Details

6 6 

7> Pelajari bagaimana Claude Code dapat terintegrasi dengan berbagai layanan pihak ketiga dan infrastruktur untuk memenuhi persyaratan penyebaran enterprise.7> Pelajari bagaimana Claude Code dapat terintegrasi dengan berbagai layanan pihak ketiga dan infrastruktur untuk memenuhi persyaratan penyebaran enterprise.

8 8 

9export const ContactSalesCard = ({surface}) => {

10 const utm = content => `utm_source=claude_code&utm_medium=docs&utm_content=${surface}_${content}`;

11 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

12 <line x1="5" y1="12" x2="19" y2="12" />

13 <polyline points="12 5 19 12 12 19" />

14 </svg>;

15 const STYLES = `

16.cc-cs {

17 --cs-slate: #141413;

18 --cs-clay: #d97757;

19 --cs-clay-deep: #c6613f;

20 --cs-gray-000: #ffffff;

21 --cs-gray-700: #3d3d3a;

22 --cs-border-default: rgba(31, 30, 29, 0.15);

23 font-family: inherit;

24}

25.dark .cc-cs {

26 --cs-slate: #f0eee6;

27 --cs-gray-000: #262624;

28 --cs-gray-700: #bfbdb4;

29 --cs-border-default: rgba(240, 238, 230, 0.14);

30}

31.cc-cs-card {

32 display: flex; align-items: center; justify-content: space-between;

33 gap: 16px; padding: 14px 16px; margin: 0;

34 background: var(--cs-gray-000); border: 0.5px solid var(--cs-border-default);

35 border-radius: 8px; flex-wrap: wrap;

36}

37.cc-cs-text { font-size: 13px; color: var(--cs-gray-700); line-height: 1.5; flex: 1; min-width: 240px; }

38.cc-cs-text strong { font-weight: 550; color: var(--cs-slate); }

39.cc-cs-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

40.cc-cs-btn-clay {

41 display: inline-flex; align-items: center; gap: 8px;

42 background: var(--cs-clay-deep); color: #fff; border: none;

43 border-radius: 8px; padding: 8px 14px;

44 font-size: 13px; font-weight: 500;

45 transition: background-color 0.15s; white-space: nowrap;

46}

47.cc-cs-btn-clay:hover { background: var(--cs-clay); }

48.cc-cs-btn-ghost {

49 display: inline-flex; align-items: center; gap: 8px;

50 background: transparent; color: var(--cs-gray-700);

51 border: 0.5px solid var(--cs-border-default);

52 border-radius: 8px; padding: 8px 14px;

53 font-size: 13px; font-weight: 500;

54}

55.cc-cs-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

56.dark .cc-cs-btn-ghost:hover { background: rgba(255, 255, 255, 0.04); }

57@media (max-width: 720px) {

58 .cc-cs-actions { width: 100%; }

59}

60`;

61 return <div className="cc-cs not-prose">

62 <style>{STYLES}</style>

63 <div className="cc-cs-card">

64 <div className="cc-cs-text">

65 <strong>Deploying Claude Code across your organization?</strong> Talk to sales about enterprise plans, SSO, and centralized billing.

66 </div>

67 <div className="cc-cs-actions">

68 <a href={`https://claude.com/pricing?${utm('view_plans')}#plans-business`} className="cc-cs-btn-ghost">

69 View plans

70 </a>

71 <a href={`https://claude.com/contact-sales?${utm('contact_sales')}`} className="cc-cs-btn-clay">

72 Contact sales {iconArrowRight()}

73 </a>

74 </div>

75 </div>

76 </div>;

77};

78 

9Organisasi dapat menyebarkan Claude Code melalui Anthropic secara langsung atau melalui penyedia cloud. Halaman ini membantu Anda memilih konfigurasi yang tepat.79Organisasi dapat menyebarkan Claude Code melalui Anthropic secara langsung atau melalui penyedia cloud. Halaman ini membantu Anda memilih konfigurasi yang tepat.

10 80 

81<ContactSalesCard surface="third_party_overview" />

82 

11## Bandingkan opsi penyebaran83## Bandingkan opsi penyebaran

12 84 

13Untuk sebagian besar organisasi, Claude for Teams atau Claude for Enterprise memberikan pengalaman terbaik. Anggota tim mendapatkan akses ke Claude Code dan Claude di web dengan satu langganan, penagihan terpusat, dan tidak ada setup infrastruktur yang diperlukan.85Untuk sebagian besar organisasi, Claude for Teams atau Claude for Enterprise memberikan pengalaman terbaik. Anggota tim mendapatkan akses ke Claude Code dan Claude di web dengan satu langganan, penagihan terpusat, dan tidak ada setup infrastruktur yang diperlukan.


241 313 

242### Versi model pin untuk penyedia cloud314### Versi model pin untuk penyedia cloud

243 315 

244Jika Anda menyebarkan melalui [Bedrock](/id/amazon-bedrock), [Vertex AI](/id/google-vertex-ai), atau [Foundry](/id/microsoft-foundry), pin versi model tertentu menggunakan `ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL`, dan `ANTHROPIC_DEFAULT_HAIKU_MODEL`. Tanpa pinning, alias Claude Code menyelesaikan versi terbaru, yang dapat merusak pengguna ketika Anthropic merilis model baru yang belum diaktifkan di akun Anda. Lihat [Konfigurasi model](/id/model-config#pin-models-for-third-party-deployments) untuk detail.316Jika Anda menyebarkan melalui [Bedrock](/id/amazon-bedrock), [Vertex AI](/id/google-vertex-ai), atau [Foundry](/id/microsoft-foundry), pin versi model tertentu menggunakan `ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL`, dan `ANTHROPIC_DEFAULT_HAIKU_MODEL`. Tanpa pinning, alias model menyelesaikan versi terbaru, yang mungkin belum diaktifkan di akun Anda ketika Anthropic merilis pembaruan. Pinning memungkinkan Anda mengontrol kapan pengguna Anda pindah ke model baru. Lihat [Konfigurasi model](/id/model-config#pin-models-for-third-party-deployments) untuk apa yang dilakukan setiap penyedia ketika versi terbaru tidak tersedia.

245 317 

246### Konfigurasi kebijakan keamanan318### Konfigurasi kebijakan keamanan

247 319 

vs-code.md +3 −1

Details

32 32 

33Atau di VS Code, tekan `Cmd+Shift+X` (Mac) atau `Ctrl+Shift+X` (Windows/Linux) untuk membuka tampilan Extensions, cari "Claude Code", dan klik **Install**.33Atau di VS Code, tekan `Cmd+Shift+X` (Mac) atau `Ctrl+Shift+X` (Windows/Linux) untuk membuka tampilan Extensions, cari "Claude Code", dan klik **Install**.

34 34 

35Ekstensi juga dapat diinstal di fork VS Code lainnya seperti Windsurf atau Kiro. Cari "Claude Code" di tampilan Extensions editor Anda, atau instal dari [registri Open VSX](https://open-vsx.org/extension/Anthropic/claude-code). Jika editor Anda tidak dapat menginstal ekstensi, jalankan `claude` di terminal terintegrasi-nya. [CLI](/id/quickstart) berfungsi di terminal apa pun.

36 

35<Note>Jika ekstensi tidak muncul setelah instalasi, restart VS Code atau jalankan "Developer: Reload Window" dari Command Palette.</Note>37<Note>Jika ekstensi tidak muncul setelah instalasi, restart VS Code atau jalankan "Developer: Reload Window" dari Command Palette.</Note>

36 38 

37## Memulai39## Memulai


318| `environmentVariables` | `[]` | Atur variabel lingkungan untuk proses Claude. Gunakan pengaturan Claude Code sebagai gantinya untuk konfigurasi bersama. |320| `environmentVariables` | `[]` | Atur variabel lingkungan untuk proses Claude. Gunakan pengaturan Claude Code sebagai gantinya untuk konfigurasi bersama. |

319| `disableLoginPrompt` | `false` | Lewati prompt autentikasi (untuk setup penyedia pihak ketiga) |321| `disableLoginPrompt` | `false` | Lewati prompt autentikasi (untuk setup penyedia pihak ketiga) |

320| `allowDangerouslySkipPermissions` | `false` | Menambahkan [Auto mode](/id/permission-modes#eliminate-prompts-with-auto-mode) dan Bypass permissions ke pemilih mode. Auto mode memiliki [persyaratan plan, admin, model, dan provider](/id/permission-modes#eliminate-prompts-with-auto-mode), jadi mungkin tetap tidak tersedia bahkan dengan toggle ini aktif. Gunakan Bypass permissions hanya di sandbox tanpa akses internet. |322| `allowDangerouslySkipPermissions` | `false` | Menambahkan [Auto mode](/id/permission-modes#eliminate-prompts-with-auto-mode) dan Bypass permissions ke pemilih mode. Auto mode memiliki [persyaratan plan, admin, model, dan provider](/id/permission-modes#eliminate-prompts-with-auto-mode), jadi mungkin tetap tidak tersedia bahkan dengan toggle ini aktif. Gunakan Bypass permissions hanya di sandbox tanpa akses internet. |

321| `claudeProcessWrapper` | - | Jalur executable yang digunakan untuk meluncurkan proses Claude |323| `claudeProcessWrapper` | - | Executable yang digunakan untuk meluncurkan proses Claude. Jalur binary bundel dilewatkan sebagai argumen saat ada. Atur ini ke binary `claude` yang diinstal secara terpisah jika build ekstensi tidak menyertakan satu untuk platform Anda. |

322 324 

323## Ekstensi VS Code vs. Claude Code CLI325## Ekstensi VS Code vs. Claude Code CLI

324 326