SpyBara
Go Premium

Documentation 2026-05-04 22:58 UTC to 2026-05-05 23:00 UTC

20 files changed +1,777 −158. 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

agent-sdk/agent-loop.md +395 −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# Cara kerja agent loop

6 

7> Pahami lifecycle pesan, eksekusi tool, context window, dan arsitektur yang menggerakkan agent SDK Anda.

8 

9Agent SDK memungkinkan Anda untuk menyematkan autonomous agent loop Claude Code dalam aplikasi Anda sendiri. SDK adalah paket standalone yang memberikan Anda kontrol programatik atas tools, permissions, cost limits, dan output. Anda tidak perlu menginstal Claude Code CLI untuk menggunakannya.

10 

11Ketika Anda memulai agent, SDK menjalankan [execution loop yang sama yang menggerakkan Claude Code](/id/how-claude-code-works#the-agentic-loop): Claude mengevaluasi prompt Anda, memanggil tools untuk mengambil tindakan, menerima hasilnya, dan mengulangi sampai tugas selesai. Halaman ini menjelaskan apa yang terjadi di dalam loop tersebut sehingga Anda dapat membangun, debug, dan mengoptimalkan agent Anda secara efektif.

12 

13## Loop sekilas

14 

15Setiap sesi agent mengikuti siklus yang sama:

16 

17<img src="https://mintcdn.com/claude-code/gvy2DIUELtNA8qD3/images/agent-loop-diagram.svg?fit=max&auto=format&n=gvy2DIUELtNA8qD3&q=85&s=192e1bd6c8a2950a16e5ee0b94e27e26" alt="Agent loop: prompt masuk, Claude mengevaluasi, cabang ke tool calls atau final answer" width="680" height="150" data-path="images/agent-loop-diagram.svg" />

18 

191. **Terima prompt.** Claude menerima prompt Anda, bersama dengan system prompt, tool definitions, dan conversation history. SDK menghasilkan [`SystemMessage`](#message-types) dengan subtype `"init"` yang berisi session metadata.

202. **Evaluasi dan respons.** Claude mengevaluasi state saat ini dan menentukan cara melanjutkan. Ini dapat merespons dengan teks, meminta satu atau lebih tool calls, atau keduanya. SDK menghasilkan [`AssistantMessage`](#message-types) yang berisi teks dan permintaan tool call apa pun.

213. **Eksekusi tools.** SDK menjalankan setiap tool yang diminta dan mengumpulkan hasilnya. Setiap set hasil tool umpan balik ke Claude untuk keputusan berikutnya. Anda dapat menggunakan [hooks](/id/agent-sdk/hooks) untuk mengintersepsi, memodifikasi, atau memblokir tool calls sebelum dijalankan.

224. **Ulangi.** Langkah 2 dan 3 berulang sebagai siklus. Setiap siklus penuh adalah satu turn. Claude terus memanggil tools dan memproses hasil sampai menghasilkan respons tanpa tool calls.

235. **Kembalikan hasil.** SDK menghasilkan [`AssistantMessage`](#message-types) final dengan respons teks (tanpa tool calls), diikuti oleh [`ResultMessage`](#message-types) dengan teks final, token usage, cost, dan session ID.

24 

25Pertanyaan cepat ("file apa yang ada di sini?") mungkin membutuhkan satu atau dua turn memanggil `Glob` dan merespons dengan hasilnya. Tugas kompleks ("refactor modul auth dan perbarui tests") dapat merantai puluhan tool calls di banyak turn, membaca file, mengedit kode, dan menjalankan tests, dengan Claude menyesuaikan pendekatannya berdasarkan setiap hasil.

26 

27## Turns dan messages

28 

29Turn adalah satu round trip di dalam loop: Claude menghasilkan output yang mencakup tool calls, SDK menjalankan tools tersebut, dan hasilnya umpan balik ke Claude secara otomatis. Ini terjadi tanpa menghasilkan kontrol kembali ke kode Anda. Turns berlanjut sampai Claude menghasilkan output tanpa tool calls, di mana titik loop berakhir dan hasil final dikirimkan.

30 

31Pertimbangkan seperti apa sesi penuh untuk prompt "Fix the failing tests in auth.ts".

32 

33Pertama, SDK mengirim prompt Anda ke Claude dan menghasilkan [`SystemMessage`](#message-types) dengan session metadata. Kemudian loop dimulai:

34 

351. **Turn 1:** Claude memanggil `Bash` untuk menjalankan `npm test`. SDK menghasilkan [`AssistantMessage`](#message-types) dengan tool call, menjalankan perintah, kemudian menghasilkan [`UserMessage`](#message-types) dengan output (tiga kegagalan).

362. **Turn 2:** Claude memanggil `Read` pada `auth.ts` dan `auth.test.ts`. SDK mengembalikan konten file dan menghasilkan `AssistantMessage`.

373. **Turn 3:** Claude memanggil `Edit` untuk memperbaiki `auth.ts`, kemudian memanggil `Bash` untuk menjalankan kembali `npm test`. Ketiga tests lulus. SDK menghasilkan `AssistantMessage`.

384. **Turn final:** Claude menghasilkan respons hanya teks tanpa tool calls: "Fixed the auth bug, all three tests pass now." SDK menghasilkan `AssistantMessage` final dengan teks ini, kemudian [`ResultMessage`](#message-types) dengan teks yang sama ditambah cost dan usage.

39 

40Itu adalah empat turns: tiga dengan tool calls, satu respons hanya teks final.

41 

42Anda dapat membatasi loop dengan `max_turns` / `maxTurns`, yang menghitung tool-use turns saja. Misalnya, `max_turns=2` dalam loop di atas akan berhenti sebelum langkah edit. Anda juga dapat menggunakan `max_budget_usd` / `maxBudgetUsd` untuk membatasi turns berdasarkan threshold pengeluaran.

43 

44Tanpa batas, loop berjalan sampai Claude selesai sendiri, yang baik untuk tugas yang well-scoped tetapi dapat berjalan lama pada prompts open-ended ("improve this codebase"). Menetapkan budget adalah default yang baik untuk production agents. Lihat [Turns dan budget](#turns-dan-budget) di bawah untuk referensi opsi.

45 

46## Message types

47 

48Saat loop berjalan, SDK menghasilkan aliran messages. Setiap message membawa tipe yang memberi tahu Anda tahap loop mana yang berasal darinya. Lima tipe inti adalah:

49 

50* **`SystemMessage`:** session lifecycle events. Field `subtype` membedakannya: `"init"` adalah message pertama (session metadata), dan `"compact_boundary"` menyala setelah [compaction](#automatic-compaction). Di TypeScript, compact boundary adalah tipe [`SDKCompactBoundaryMessage`](/id/agent-sdk/typescript#sdkcompactboundarymessage) tersendiri daripada subtype dari `SDKSystemMessage`.

51* **`AssistantMessage`:** dipancarkan setelah setiap respons Claude, termasuk yang hanya teks final. Berisi text content blocks dan tool call blocks dari turn itu.

52* **`UserMessage`:** dipancarkan setelah setiap eksekusi tool dengan tool result content yang dikirim kembali ke Claude. Juga dipancarkan untuk input pengguna apa pun yang Anda stream mid-loop.

53* **`StreamEvent`:** hanya dipancarkan ketika partial messages diaktifkan. Berisi raw API streaming events (text deltas, tool input chunks). Lihat [Stream responses](/id/agent-sdk/streaming-output).

54* **`ResultMessage`:** menandai akhir dari agent loop. Berisi hasil teks final, token usage, cost, dan session ID. Periksa field `subtype` untuk menentukan apakah tugas berhasil atau mencapai batas. Sejumlah kecil trailing system events, seperti `prompt_suggestion`, dapat tiba setelahnya, jadi iterasi stream hingga selesai daripada break pada hasil. Lihat [Handle the result](#handle-the-result).

55 

56Lima tipe ini mencakup lifecycle agent loop penuh di kedua SDK. TypeScript SDK juga menghasilkan additional observability events (hook events, tool progress, rate limits, task notifications) yang memberikan detail ekstra tetapi tidak diperlukan untuk menjalankan loop. Lihat [Python message types reference](/id/agent-sdk/python#message-types) dan [TypeScript message types reference](/id/agent-sdk/typescript#message-types) untuk daftar lengkap.

57 

58### Handle messages

59 

60Messages mana yang Anda handle tergantung pada apa yang Anda bangun:

61 

62* **Final results only:** handle `ResultMessage` untuk mendapatkan output, cost, dan apakah tugas berhasil atau mencapai batas.

63* **Progress updates:** handle `AssistantMessage` untuk melihat apa yang dilakukan Claude setiap turn, termasuk tools mana yang dipanggilnya.

64* **Live streaming:** aktifkan partial messages (`include_partial_messages` di Python, `includePartialMessages` di TypeScript) untuk mendapatkan `StreamEvent` messages secara real time. Lihat [Stream responses in real-time](/id/agent-sdk/streaming-output).

65 

66Cara Anda memeriksa message types tergantung pada SDK:

67 

68* **Python:** periksa message types dengan `isinstance()` terhadap classes yang diimpor dari `claude_agent_sdk` (misalnya, `isinstance(message, ResultMessage)`).

69* **TypeScript:** periksa field string `type` (misalnya, `message.type === "result"`). `AssistantMessage` dan `UserMessage` membungkus raw API message dalam field `.message`, jadi content blocks berada di `message.message.content`, bukan `message.content`.

70 

71<Accordion title="Contoh: Periksa message types dan handle results">

72 <CodeGroup>

73 ```python Python theme={null}

74 from claude_agent_sdk import query, AssistantMessage, ResultMessage

75 

76 async for message in query(prompt="Summarize this project"):

77 if isinstance(message, AssistantMessage):

78 print(f"Turn completed: {len(message.content)} content blocks")

79 if isinstance(message, ResultMessage):

80 if message.subtype == "success":

81 print(message.result)

82 else:

83 print(f"Stopped: {message.subtype}")

84 ```

85 

86 ```typescript TypeScript theme={null}

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

88 

89 for await (const message of query({ prompt: "Summarize this project" })) {

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

91 console.log(`Turn completed: ${message.message.content.length} content blocks`);

92 }

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

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

95 console.log(message.result);

96 } else {

97 console.log(`Stopped: ${message.subtype}`);

98 }

99 }

100 }

101 ```

102 </CodeGroup>

103</Accordion>

104 

105## Tool execution

106 

107Tools memberikan agent Anda kemampuan untuk mengambil tindakan. Tanpa tools, Claude hanya dapat merespons dengan teks. Dengan tools, Claude dapat membaca file, menjalankan perintah, mencari kode, dan berinteraksi dengan layanan eksternal.

108 

109### Built-in tools

110 

111SDK mencakup tools yang sama yang menggerakkan Claude Code:

112 

113| Kategori | Tools | Apa yang mereka lakukan |

114| :------------------ | :----------------------------------------------- | :--------------------------------------------------------------------------- |

115| **File operations** | `Read`, `Edit`, `Write` | Baca, modifikasi, dan buat file |

116| **Search** | `Glob`, `Grep` | Temukan file berdasarkan pola, cari konten dengan regex |

117| **Execution** | `Bash` | Jalankan shell commands, scripts, git operations |

118| **Web** | `WebSearch`, `WebFetch` | Cari web, ambil dan parse halaman |

119| **Discovery** | `ToolSearch` | Temukan dan muat tools secara dinamis on-demand daripada preloading semuanya |

120| **Orchestration** | `Agent`, `Skill`, `AskUserQuestion`, `TodoWrite` | Spawn subagents, invoke skills, tanya pengguna, track tasks |

121 

122Melampaui built-in tools, Anda dapat:

123 

124* **Hubungkan layanan eksternal** dengan [MCP servers](/id/agent-sdk/mcp) (databases, browsers, APIs)

125* **Tentukan custom tools** dengan [custom tool handlers](/id/agent-sdk/custom-tools)

126* **Muat project skills** melalui [setting sources](/id/agent-sdk/claude-code-features) untuk reusable workflows

127 

128### Tool permissions

129 

130Claude menentukan tools mana yang akan dipanggil berdasarkan tugas, tetapi Anda mengontrol apakah panggilan tersebut diizinkan untuk dieksekusi. Anda dapat auto-approve tools spesifik, memblokir yang lain sepenuhnya, atau memerlukan approval untuk semuanya. Tiga opsi bekerja bersama untuk menentukan apa yang berjalan:

131 

132* **`allowed_tools` / `allowedTools`** auto-approves tools yang terdaftar. Agent read-only dengan `["Read", "Glob", "Grep"]` dalam daftar allowed tools-nya menjalankan tools tersebut tanpa prompting. Tools yang tidak terdaftar masih tersedia tetapi memerlukan permission.

133* **`disallowed_tools` / `disallowedTools`** memblokir tools yang terdaftar, terlepas dari pengaturan lainnya. Lihat [Permissions](/id/agent-sdk/permissions) untuk urutan aturan yang diperiksa sebelum tool berjalan.

134* **`permission_mode` / `permissionMode`** mengontrol apa yang terjadi pada tools yang tidak tercakup oleh allow atau deny rules. Lihat [Permission mode](#permission-mode) untuk mode yang tersedia.

135 

136Anda juga dapat scope individual tools dengan rules seperti `"Bash(npm *)"` untuk mengizinkan hanya perintah spesifik. Lihat [Permissions](/id/agent-sdk/permissions) untuk full rule syntax.

137 

138Ketika tool ditolak, Claude menerima rejection message sebagai tool result dan biasanya mencoba pendekatan berbeda atau melaporkan bahwa tidak dapat melanjutkan.

139 

140### Parallel tool execution

141 

142Ketika Claude meminta multiple tool calls dalam satu turn, kedua SDK dapat menjalankannya secara concurrent atau sequential tergantung pada tool. Read-only tools (seperti `Read`, `Glob`, `Grep`, dan MCP tools yang ditandai sebagai read-only) dapat berjalan secara concurrent. Tools yang memodifikasi state (seperti `Edit`, `Write`, dan `Bash`) berjalan secara sequential untuk menghindari conflicts.

143 

144Custom tools default ke sequential execution. Untuk mengaktifkan parallel execution untuk custom tool, set `readOnlyHint` dalam annotationsnya. Kedua [TypeScript](/id/agent-sdk/typescript#tool) dan [Python](/id/agent-sdk/python#tool) SDKs menggunakan field name ini dari MCP SDK.

145 

146## Control how the loop runs

147 

148Anda dapat membatasi berapa banyak turns yang diambil loop, berapa banyak biayanya, seberapa dalam Claude bernalar, dan apakah tools memerlukan approval sebelum berjalan. Semua ini adalah fields pada [`ClaudeAgentOptions`](/id/agent-sdk/python#claudeagentoptions) (Python) / [`Options`](/id/agent-sdk/typescript#options) (TypeScript).

149 

150### Turns dan budget

151 

152| Opsi | Apa yang dikontrolnya | Default |

153| :--------------------------------------------- | :---------------------------- | :-------------- |

154| Max turns (`max_turns` / `maxTurns`) | Maximum tool-use round trips | Tidak ada batas |

155| Max budget (`max_budget_usd` / `maxBudgetUsd`) | Maximum cost sebelum berhenti | Tidak ada batas |

156 

157Ketika salah satu batas tercapai, SDK mengembalikan `ResultMessage` dengan error subtype yang sesuai (`error_max_turns` atau `error_max_budget_usd`). Lihat [Handle the result](#handle-the-result) untuk cara memeriksa subtypes ini dan [`ClaudeAgentOptions`](/id/agent-sdk/python#claudeagentoptions) / [`Options`](/id/agent-sdk/typescript#options) untuk syntax.

158 

159### Effort level

160 

161Opsi `effort` mengontrol berapa banyak reasoning yang diterapkan Claude. Lower effort levels menggunakan fewer tokens per turn dan mengurangi cost. Tidak semua models mendukung effort parameter. Lihat [Effort](https://platform.claude.com/docs/en/build-with-claude/effort) untuk models mana yang mendukungnya.

162 

163| Level | Behavior | Baik untuk |

164| :--------- | :-------------------------------- | :-------------------------------------------------- |

165| `"low"` | Minimal reasoning, fast responses | File lookups, listing directories |

166| `"medium"` | Balanced reasoning | Routine edits, standard tasks |

167| `"high"` | Thorough analysis | Refactors, debugging |

168| `"xhigh"` | Extended reasoning depth | Coding dan agentic tasks; recommended pada Opus 4.7 |

169| `"max"` | Maximum reasoning depth | Multi-step problems memerlukan deep analysis |

170 

171Jika Anda tidak set `effort`, Python SDK membiarkan parameter unset dan menunda ke model's default behavior. TypeScript SDK defaults ke `"high"`.

172 

173<Note>

174 `effort` trades latency dan token cost untuk reasoning depth dalam setiap respons. [Extended thinking](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) adalah fitur terpisah yang menghasilkan visible chain-of-thought blocks dalam output. Mereka independen: Anda dapat set `effort: "low"` dengan extended thinking diaktifkan, atau `effort: "max"` tanpanya.

175</Note>

176 

177Gunakan lower effort untuk agents yang melakukan simple, well-scoped tasks (seperti listing files atau menjalankan single grep) untuk mengurangi cost dan latency. Set `effort` dalam top-level `query()` options untuk seluruh sesi, atau per subagent dengan field `effort` pada [`AgentDefinition`](/id/agent-sdk/subagents#agentdefinition-configuration) untuk override session level.

178 

179### Permission mode

180 

181Opsi permission mode (`permission_mode` di Python, `permissionMode` di TypeScript) mengontrol apakah agent meminta approval sebelum menggunakan tools:

182 

183| Mode | Behavior |

184| :------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

185| `"default"` | Tools yang tidak tercakup oleh allow rules memicu approval callback Anda; tidak ada callback berarti deny |

186| `"acceptEdits"` | Auto-approves file edits dan common filesystem commands (`mkdir`, `touch`, `mv`, `cp`, dll.); Bash commands lainnya mengikuti default rules |

187| `"plan"` | Read-only tools berjalan; Claude mengeksplorasi dan menghasilkan plan tanpa mengedit source files Anda |

188| `"dontAsk"` | Tidak pernah prompt. Tools pre-approved oleh [permission rules](/id/settings#permission-settings) berjalan, semuanya lainnya ditolak |

189| `"auto"` (TypeScript only) | Menggunakan model classifier untuk approve atau deny setiap tool call. Lihat [Auto mode](/id/permission-modes#eliminate-prompts-with-auto-mode) untuk availability dan behavior |

190| `"bypassPermissions"` | Menjalankan semua allowed tools tanpa bertanya. Tidak dapat digunakan saat berjalan sebagai root pada Unix. Gunakan hanya dalam isolated environments di mana tindakan agent tidak dapat mempengaruhi systems yang Anda pedulikan |

191 

192Untuk interactive applications, gunakan `"default"` dengan tool approval callback untuk surface approval prompts. Untuk autonomous agents pada dev machine, `"acceptEdits"` auto-approves file edits dan common filesystem commands (`mkdir`, `touch`, `mv`, `cp`, dll.) sambil masih gating Bash commands lainnya di belakang allow rules. Reserve `"bypassPermissions"` untuk CI, containers, atau isolated environments lainnya. Lihat [Permissions](/id/agent-sdk/permissions) untuk full details.

193 

194### Model

195 

196Jika Anda tidak set `model`, SDK menggunakan Claude Code's default, yang tergantung pada authentication method dan subscription Anda. Set secara eksplisit (misalnya, `model="claude-sonnet-4-6"`) untuk pin model spesifik atau untuk menggunakan smaller model untuk faster, cheaper agents. Lihat [models](https://platform.claude.com/docs/en/about-claude/models) untuk available IDs.

197 

198## The context window

199 

200Context window adalah total jumlah informasi yang tersedia untuk Claude selama sesi. Ini tidak reset antara turns dalam sesi. Semuanya terakumulasi: system prompt, tool definitions, conversation history, tool inputs, dan tool outputs. Content yang tetap sama di seluruh turns (system prompt, tool definitions, CLAUDE.md) secara otomatis [prompt cached](https://platform.claude.com/docs/en/build-with-claude/prompt-caching), yang mengurangi cost dan latency untuk repeated prefixes.

201 

202### What consumes context

203 

204Berikut adalah cara setiap komponen mempengaruhi context dalam SDK:

205 

206| Sumber | Ketika dimuat | Dampak |

207| :----------------------- | :---------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |

208| **System prompt** | Setiap request | Small fixed cost, selalu present |

209| **CLAUDE.md files** | Session start, melalui [`settingSources`](/id/agent-sdk/claude-code-features) | Full content dalam setiap request (tetapi prompt-cached, jadi hanya request pertama yang membayar full cost) |

210| **Tool definitions** | Setiap request | Setiap tool menambahkan schemanya; gunakan [MCP tool search](/id/agent-sdk/mcp#mcp-tool-search) untuk load tools on-demand daripada semuanya sekaligus |

211| **Conversation history** | Terakumulasi di seluruh turns | Tumbuh dengan setiap turn: prompts, responses, tool inputs, tool outputs |

212| **Skill descriptions** | Session start, melalui setting sources | Short summaries; full content dimuat hanya ketika invoked |

213 

214Large tool outputs mengkonsumsi significant context. Membaca file besar atau menjalankan command dengan verbose output dapat menggunakan ribuan tokens dalam satu turn. Context terakumulasi di seluruh turns, jadi longer sessions dengan banyak tool calls membangun significantly lebih banyak context daripada short ones.

215 

216### Automatic compaction

217 

218Ketika context window mendekati limitnya, SDK secara otomatis compacts conversation: ini merangkum older history untuk membebaskan space, menjaga most recent exchanges dan key decisions Anda tetap intact. SDK memancarkan message dengan `type: "system"` dan `subtype: "compact_boundary"` dalam stream ketika ini terjadi (di Python ini adalah `SystemMessage`; di TypeScript ini adalah tipe [`SDKCompactBoundaryMessage`](/id/agent-sdk/typescript#sdkcompactboundarymessage) terpisah).

219 

220Compaction menggantikan older messages dengan summary, jadi specific instructions dari early dalam conversation mungkin tidak dipertahankan. Persistent rules milik CLAUDE.md (dimuat melalui [`settingSources`](/id/agent-sdk/claude-code-features)) daripada dalam initial prompt, karena CLAUDE.md content di-re-inject pada setiap request.

221 

222Anda dapat customize compaction behavior dalam beberapa cara:

223 

224* **Summarization instructions dalam CLAUDE.md:** Compactor membaca CLAUDE.md Anda seperti context lainnya, jadi Anda dapat menyertakan section yang memberi tahu apa yang dipertahankan saat merangkum. Section header adalah free-form (bukan magic string); compactor matches pada intent.

225* **`PreCompact` hook:** Jalankan custom logic sebelum compaction terjadi, misalnya untuk archive full transcript. Hook menerima field `trigger` (`manual` atau `auto`). Lihat [hooks](/id/agent-sdk/hooks).

226* **Manual compaction:** Kirim `/compact` sebagai prompt string untuk trigger compaction on demand. (Slash commands yang dikirim dengan cara ini adalah SDK inputs, bukan CLI-only shortcuts. Lihat [slash commands dalam SDK](/id/agent-sdk/slash-commands).)

227 

228<Accordion title="Contoh: Summarization instructions dalam CLAUDE.md">

229 Tambahkan section ke CLAUDE.md proyek Anda yang memberi tahu compactor apa yang dipertahankan. Nama header tidak special; gunakan label yang jelas apa pun.

230 

231 ```markdown CLAUDE.md theme={null}

232 # Summary instructions

233 

234 When summarizing this conversation, always preserve:

235 - The current task objective and acceptance criteria

236 - File paths that have been read or modified

237 - Test results and error messages

238 - Decisions made and the reasoning behind them

239 ```

240</Accordion>

241 

242### Keep context efficient

243 

244Beberapa strategi untuk long-running agents:

245 

246* **Gunakan subagents untuk subtasks.** Setiap subagent dimulai dengan fresh conversation (tidak ada prior message history, meskipun dimuat system prompt dan project-level context seperti CLAUDE.md sendiri). Ini tidak melihat parent's turns, dan hanya final responsenya kembali ke parent sebagai tool result. Main agent's context tumbuh oleh summary itu, bukan oleh full subtask transcript. Lihat [What subagents inherit](/id/agent-sdk/subagents#what-subagents-inherit) untuk details.

247* **Jadilah selective dengan tools.** Setiap tool definition mengambil context space. Gunakan field `tools` pada [`AgentDefinition`](/id/agent-sdk/subagents#agentdefinition-configuration) untuk scope subagents ke minimum set yang mereka butuhkan, dan gunakan [MCP tool search](/id/agent-sdk/mcp#mcp-tool-search) untuk load tools on demand daripada preloading semuanya.

248* **Perhatikan MCP server costs.** Setiap MCP server menambahkan semua tool schemas-nya ke setiap request. Beberapa servers dengan banyak tools dapat mengkonsumsi significant context sebelum agent melakukan pekerjaan apa pun. Tool `ToolSearch` dapat membantu dengan loading tools on-demand daripada preloading semuanya. Lihat [MCP tool search](/id/agent-sdk/mcp#mcp-tool-search) untuk configuration.

249* **Gunakan lower effort untuk routine tasks.** Set [effort](#effort-level) ke `"low"` untuk agents yang hanya perlu membaca files atau list directories. Ini mengurangi token usage dan cost.

250 

251Untuk detailed breakdown dari per-feature context costs, lihat [Understand context costs](/id/features-overview#understand-context-costs).

252 

253## Sessions dan continuity

254 

255Setiap interaksi dengan SDK membuat atau melanjutkan sesi. Capture session ID dari `ResultMessage.session_id` (tersedia di kedua SDKs) untuk resume nanti. TypeScript SDK juga mengeksposnya sebagai direct field pada init `SystemMessage`; di Python ini nested dalam `SystemMessage.data`.

256 

257Ketika Anda resume, full context dari previous turns dipulihkan: files yang dibaca, analysis yang dilakukan, dan actions yang diambil. Anda juga dapat fork sesi untuk branch ke pendekatan berbeda tanpa memodifikasi original.

258 

259Lihat [Session management](/id/agent-sdk/sessions) untuk full guide pada resume, continue, dan fork patterns.

260 

261<Note>

262 Di Python, `ClaudeSDKClient` menangani session IDs secara otomatis di seluruh multiple calls. Lihat [Python SDK reference](/id/agent-sdk/python#choosing-between-query-and-claudesdkclient) untuk details.

263</Note>

264 

265## Handle the result

266 

267Ketika loop berakhir, `ResultMessage` memberi tahu Anda apa yang terjadi dan memberikan output. Field `subtype` (tersedia di kedua SDKs) adalah cara utama untuk memeriksa termination state.

268 

269| Result subtype | Apa yang terjadi | Field `result` tersedia? |

270| :------------------------------------ | :------------------------------------------------------------------- | :----------------------: |

271| `success` | Claude menyelesaikan tugas secara normal | Ya |

272| `error_max_turns` | Mencapai batas `maxTurns` sebelum selesai | Tidak |

273| `error_max_budget_usd` | Mencapai batas `maxBudgetUsd` sebelum selesai | Tidak |

274| `error_during_execution` | Error mengganggu loop (misalnya, API failure atau cancelled request) | Tidak |

275| `error_max_structured_output_retries` | Structured output validation gagal setelah configured retry limit | Tidak |

276 

277Field `result` (final text output) hanya present pada variant `success`, jadi selalu periksa subtype sebelum membacanya. Semua result subtypes membawa `total_cost_usd`, `usage`, `num_turns`, dan `session_id` sehingga Anda dapat track cost dan resume bahkan setelah errors. Di Python, `total_cost_usd` dan `usage` diketik sebagai optional dan mungkin `None` pada beberapa error paths, jadi guard sebelum formatting mereka. Lihat [Tracking costs dan usage](/id/agent-sdk/cost-tracking) untuk details tentang interpreting `usage` fields.

278 

279Hasil juga mencakup field `stop_reason` (`string | null` di TypeScript, `str | None` di Python) yang menunjukkan mengapa model berhenti generating pada final turn-nya. Common values adalah `end_turn` (model selesai secara normal), `max_tokens` (mencapai output token limit), dan `refusal` (model menolak request). Pada error result subtypes, `stop_reason` membawa value dari last assistant response sebelum loop berakhir. Untuk mendeteksi refusals, periksa `stop_reason === "refusal"` (TypeScript) atau `stop_reason == "refusal"` (Python). Lihat [`SDKResultMessage`](/id/agent-sdk/typescript#sdkresultmessage) (TypeScript) atau [`ResultMessage`](/id/agent-sdk/python#resultmessage) (Python) untuk full type.

280 

281## Hooks

282 

283[Hooks](/id/agent-sdk/hooks) adalah callbacks yang menyala pada points spesifik dalam loop: sebelum tool berjalan, setelah dikembalikan, ketika agent selesai, dan sebagainya. Beberapa commonly used hooks adalah:

284 

285| Hook | Ketika menyala | Common uses |

286| :------------------------------- | :------------------------------------- | :---------------------------------------- |

287| `PreToolUse` | Sebelum tool dieksekusi | Validate inputs, block dangerous commands |

288| `PostToolUse` | Setelah tool dikembalikan | Audit outputs, trigger side effects |

289| `UserPromptSubmit` | Ketika prompt dikirim | Inject additional context ke prompts |

290| `Stop` | Ketika agent selesai | Validate hasil, save session state |

291| `SubagentStart` / `SubagentStop` | Ketika subagent spawned atau completed | Track dan aggregate parallel task results |

292| `PreCompact` | Sebelum context compaction | Archive full transcript sebelum merangkum |

293 

294Hooks berjalan dalam application process Anda, bukan di dalam agent's context window, jadi mereka tidak mengkonsumsi context. Hooks juga dapat short-circuit loop: `PreToolUse` hook yang menolak tool call mencegahnya dari executing, dan Claude menerima rejection message sebagai gantinya.

295 

296Kedua SDKs mendukung semua events di atas. TypeScript SDK mencakup additional events yang Python belum dukung. Lihat [Control execution dengan hooks](/id/agent-sdk/hooks) untuk complete event list, per-SDK availability, dan full callback API.

297 

298## Put it all together

299 

300Contoh ini menggabungkan key concepts dari halaman ini ke dalam single agent yang memperbaiki failing tests. Ini mengkonfigurasi agent dengan allowed tools (auto-approved sehingga agent berjalan secara autonomous), project settings, dan safety limits pada turns dan reasoning effort. Saat loop berjalan, ini menangkap session ID untuk potential resumption, handles final result, dan prints total cost.

301 

302<CodeGroup>

303 ```python Python theme={null}

304 import asyncio

305 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

306 

307 

308 async def run_agent():

309 session_id = None

310 

311 async for message in query(

312 prompt="Find and fix the bug causing test failures in the auth module",

313 options=ClaudeAgentOptions(

314 allowed_tools=[

315 "Read",

316 "Edit",

317 "Bash",

318 "Glob",

319 "Grep",

320 ], # Listing tools here auto-approves them (no prompting)

321 setting_sources=[

322 "project"

323 ], # Load CLAUDE.md, skills, hooks from current directory

324 max_turns=30, # Prevent runaway sessions

325 effort="high", # Thorough reasoning for complex debugging

326 ),

327 ):

328 # Handle the final result

329 if isinstance(message, ResultMessage):

330 session_id = message.session_id # Save for potential resumption

331 

332 if message.subtype == "success":

333 print(f"Done: {message.result}")

334 elif message.subtype == "error_max_turns":

335 # Agent ran out of turns. Resume with a higher limit.

336 print(f"Hit turn limit. Resume session {session_id} to continue.")

337 elif message.subtype == "error_max_budget_usd":

338 print("Hit budget limit.")

339 else:

340 print(f"Stopped: {message.subtype}")

341 if message.total_cost_usd is not None:

342 print(f"Cost: ${message.total_cost_usd:.4f}")

343 

344 

345 asyncio.run(run_agent())

346 ```

347 

348 ```typescript TypeScript theme={null}

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

350 

351 let sessionId: string | undefined;

352 

353 for await (const message of query({

354 prompt: "Find and fix the bug causing test failures in the auth module",

355 options: {

356 allowedTools: ["Read", "Edit", "Bash", "Glob", "Grep"], // Listing tools here auto-approves them (no prompting)

357 settingSources: ["project"], // Load CLAUDE.md, skills, hooks from current directory

358 maxTurns: 30, // Prevent runaway sessions

359 effort: "high" // Thorough reasoning for complex debugging

360 }

361 })) {

362 // Save the session ID to resume later if needed

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

364 sessionId = message.session_id;

365 }

366 

367 // Handle the final result

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

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

370 console.log(`Done: ${message.result}`);

371 } else if (message.subtype === "error_max_turns") {

372 // Agent ran out of turns. Resume with a higher limit.

373 console.log(`Hit turn limit. Resume session ${sessionId} to continue.`);

374 } else if (message.subtype === "error_max_budget_usd") {

375 console.log("Hit budget limit.");

376 } else {

377 console.log(`Stopped: ${message.subtype}`);

378 }

379 console.log(`Cost: $${message.total_cost_usd.toFixed(4)}`);

380 }

381 }

382 ```

383</CodeGroup>

384 

385## Next steps

386 

387Sekarang Anda memahami loop, berikut adalah tempat untuk pergi tergantung pada apa yang Anda bangun:

388 

389* **Belum menjalankan agent?** Mulai dengan [quickstart](/id/agent-sdk/quickstart) untuk mendapatkan SDK terinstal dan lihat contoh lengkap berjalan end to end.

390* **Siap untuk hook ke proyek Anda?** [Load CLAUDE.md, skills, dan filesystem hooks](/id/agent-sdk/claude-code-features) sehingga agent mengikuti project conventions Anda secara otomatis.

391* **Membangun interactive UI?** Aktifkan [streaming](/id/agent-sdk/streaming-output) untuk menampilkan live text dan tool calls saat loop berjalan.

392* **Butuh tighter control atas apa yang dapat dilakukan agent?** Lock down tool access dengan [permissions](/id/agent-sdk/permissions), dan gunakan [hooks](/id/agent-sdk/hooks) untuk audit, block, atau transform tool calls sebelum dieksekusi.

393* **Menjalankan long atau expensive tasks?** Offload isolated work ke [subagents](/id/agent-sdk/subagents) untuk keep main context Anda lean.

394 

395Untuk broader conceptual picture dari agentic loop (bukan SDK-specific), lihat [How Claude Code works](/id/how-claude-code-works).

agent-sdk/hooks.md +25 −25

Details

166| `WorktreeCreate` | Tidak | Ya | Git worktree dibuat | Track isolated workspaces |166| `WorktreeCreate` | Tidak | Ya | Git worktree dibuat | Track isolated workspaces |

167| `WorktreeRemove` | Tidak | Ya | Git worktree dihapus | Bersihkan workspace resources |167| `WorktreeRemove` | Tidak | Ya | Git worktree dihapus | Bersihkan workspace resources |

168 168 

169## Configure hooks169## Konfigurasi hooks

170 170 

171Untuk mengonfigurasi hook, berikan di field `hooks` dari opsi agent Anda (`ClaudeAgentOptions` di Python, object `options` di TypeScript):171Untuk mengonfigurasi hook, berikan di field `hooks` dari opsi agent Anda (`ClaudeAgentOptions` di Python, object `options` di TypeScript):

172 172 


236Callback Anda mengembalikan object dengan dua kategori fields:236Callback Anda mengembalikan object dengan dua kategori fields:

237 237 

238* **Top-level fields** mengontrol percakapan: `systemMessage` menyuntikkan pesan ke dalam percakapan yang terlihat oleh model, dan `continue` (`continue_` di Python) menentukan apakah agent terus berjalan setelah hook ini.238* **Top-level fields** mengontrol percakapan: `systemMessage` menyuntikkan pesan ke dalam percakapan yang terlihat oleh model, dan `continue` (`continue_` di Python) menentukan apakah agent terus berjalan setelah hook ini.

239* **`hookSpecificOutput`** mengontrol operasi saat ini. Fields di dalamnya tergantung pada tipe hook event. Untuk hooks `PreToolUse`, di sinilah Anda menetapkan `permissionDecision` (`"allow"`, `"deny"`, atau `"ask"`), `permissionDecisionReason`, dan `updatedInput`. Di TypeScript SDK, `permissionDecision` juga menerima `"defer"` untuk mengakhiri query dan [resume nanti](/id/hooks#defer-a-tool-call-for-later); nilai ini tidak tersedia di Python SDK. Untuk hooks `PostToolUse`, Anda dapat menetapkan `additionalContext` untuk menambahkan informasi ke hasil tool.239* **`hookSpecificOutput`** mengontrol operasi saat ini. Fields di dalamnya tergantung pada tipe hook event. Untuk hooks `PreToolUse`, di sinilah Anda menetapkan `permissionDecision` (`"allow"`, `"deny"`, atau `"ask"`), `permissionDecisionReason`, dan `updatedInput`. Di TypeScript SDK, `permissionDecision` juga menerima `"defer"` untuk mengakhiri query dan [resume nanti](/id/hooks#defer-a-tool-call-for-later); nilai ini tidak tersedia di Python SDK. Untuk hooks `PostToolUse`, Anda dapat menetapkan `additionalContext` untuk menambahkan informasi ke hasil tool, atau `updatedToolOutput` untuk mengganti output tool sepenuhnya sebelum Claude melihatnya.

240 240 

241Kembalikan `{}` untuk mengizinkan operasi tanpa perubahan. SDK callback hooks menggunakan format output JSON yang sama dengan [Claude Code shell command hooks](/id/hooks#json-output), yang mendokumentasikan setiap field dan opsi spesifik event. Untuk definisi tipe SDK, lihat referensi SDK [TypeScript](/id/agent-sdk/typescript#sync-hook-json-output) dan [Python](/id/agent-sdk/python#sync-hook-json-output).241Kembalikan `{}` untuk mengizinkan operasi tanpa perubahan. SDK callback hooks menggunakan format output JSON yang sama dengan [Claude Code shell command hooks](/id/hooks#json-output), yang mendokumentasikan setiap field dan opsi spesifik event. Untuk definisi tipe SDK, lihat referensi SDK [TypeScript](/id/agent-sdk/typescript#sync-hook-json-output) dan [Python](/id/agent-sdk/python#sync-hook-json-output).

242 242 


274 Async outputs tidak dapat memblokir, memodifikasi, atau menyuntikkan konteks ke dalam operasi karena agent telah melanjutkan. Gunakan hanya untuk side effects seperti logging, metrics, atau notifikasi.274 Async outputs tidak dapat memblokir, memodifikasi, atau menyuntikkan konteks ke dalam operasi karena agent telah melanjutkan. Gunakan hanya untuk side effects seperti logging, metrics, atau notifikasi.

275</Note>275</Note>

276 276 

277## Examples277## Contoh

278 278 

279### Modify tool input279### Modifikasi input tool

280 280 

281Contoh ini intercepts pemanggilan Write tool dan menulis ulang argumen `file_path` untuk menambahkan `/sandbox`, mengalihkan semua penulisan file ke direktori sandboxed. Callback mengembalikan `updatedInput` dengan jalur yang dimodifikasi dan `permissionDecision: 'allow'` untuk auto-approve operasi yang ditulis ulang:281Contoh ini mengintersepsi pemanggilan tool Write dan menulis ulang argumen `file_path` untuk menambahkan `/sandbox`, mengalihkan semua penulisan file ke direktori sandboxed. Callback mengembalikan `updatedInput` dengan jalur yang dimodifikasi dan `permissionDecision: 'allow'` untuk auto-approve operasi yang ditulis ulang:

282 282 

283<CodeGroup>283<CodeGroup>

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


329 Ketika menggunakan `updatedInput`, Anda juga harus menyertakan `permissionDecision: 'allow'`. Selalu kembalikan object baru daripada mutating `tool_input` asli.329 Ketika menggunakan `updatedInput`, Anda juga harus menyertakan `permissionDecision: 'allow'`. Selalu kembalikan object baru daripada mutating `tool_input` asli.

330</Note>330</Note>

331 331 

332### Add context and block a tool332### Tambahkan konteks dan blokir tool

333 333 

334Contoh ini memblokir setiap upaya untuk menulis ke direktori `/etc` dan menggunakan dua output fields bersama-sama: `permissionDecision: 'deny'` menghentikan pemanggilan tool, sementara `systemMessage` menyuntikkan reminder ke dalam percakapan sehingga agent menerima konteks tentang mengapa operasi diblokir dan menghindari mencoba lagi:334Contoh ini memblokir setiap upaya untuk menulis ke direktori `/etc` dan menggunakan dua output fields bersama-sama: `permissionDecision: 'deny'` menghentikan pemanggilan tool, sementara `systemMessage` menyuntikkan pengingat ke dalam percakapan sehingga agent menerima konteks tentang mengapa operasi diblokir dan menghindari mencoba lagi:

335 335 

336<CodeGroup>336<CodeGroup>

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


375 ```375 ```

376</CodeGroup>376</CodeGroup>

377 377 

378### Auto-approve specific tools378### Auto-approve tools spesifik

379 379 

380Secara default, agent dapat meminta permission sebelum menggunakan tools tertentu. Contoh ini auto-approves read-only filesystem tools (Read, Glob, Grep) dengan mengembalikan `permissionDecision: 'allow'`, membiarkan mereka berjalan tanpa konfirmasi pengguna sambil meninggalkan semua tools lainnya tunduk pada pemeriksaan permission normal:380Secara default, agent dapat meminta permission sebelum menggunakan tools tertentu. Contoh ini auto-approves read-only filesystem tools (Read, Glob, Grep) dengan mengembalikan `permissionDecision: 'allow'`, membiarkan mereka berjalan tanpa konfirmasi pengguna sambil meninggalkan semua tools lainnya tunduk pada pemeriksaan permission normal:

381 381 


417 ```417 ```

418</CodeGroup>418</CodeGroup>

419 419 

420### Chain multiple hooks420### Daftarkan multiple hooks

421 421 

422Hooks dieksekusi dalam urutan mereka muncul di array. Jaga setiap hook fokus pada tanggung jawab tunggal dan chain multiple hooks untuk logika kompleks:422Ketika event terjadi, semua hooks yang cocok berjalan secara paralel. Untuk keputusan permission, hasil yang paling ketat menang: satu `deny` memblokir pemanggilan tool terlepas dari apa yang dikembalikan hooks lainnya. Karena urutan penyelesaian tidak dapat diprediksi, tulis setiap hook untuk bertindak secara independen daripada mengandalkan hook lain yang telah berjalan terlebih dahulu.

423 

424Contoh di bawah ini mendaftarkan tiga pemeriksaan independen untuk setiap pemanggilan tool:

423 425 

424<CodeGroup>426<CodeGroup>

425 ```python Python theme={null}427 ```python Python theme={null}

426 options = ClaudeAgentOptions(428 options = ClaudeAgentOptions(

427 hooks={429 hooks={

428 "PreToolUse": [430 "PreToolUse": [

429 HookMatcher(hooks=[rate_limiter]), # First: check rate limits431 HookMatcher(hooks=[authorization_check]),

430 HookMatcher(hooks=[authorization_check]), # Second: verify permissions432 HookMatcher(hooks=[input_validator]),

431 HookMatcher(hooks=[input_sanitizer]), # Third: sanitize inputs433 HookMatcher(hooks=[audit_logger]),

432 HookMatcher(hooks=[audit_logger]), # Last: log the action

433 ]434 ]

434 }435 }

435 )436 )


439 const options = {440 const options = {

440 hooks: {441 hooks: {

441 PreToolUse: [442 PreToolUse: [

442 { hooks: [rateLimiter] }, // First: check rate limits443 { hooks: [authorizationCheck] },

443 { hooks: [authorizationCheck] }, // Second: verify permissions444 { hooks: [inputValidator] },

444 { hooks: [inputSanitizer] }, // Third: sanitize inputs445 { hooks: [auditLogger] }

445 { hooks: [auditLogger] } // Last: log the action

446 ]446 ]

447 }447 }

448 };448 };

449 ```449 ```

450</CodeGroup>450</CodeGroup>

451 451 

452### Filter with regex matchers452### Filter dengan regex matchers

453 453 

454Gunakan pola regex untuk mencocokkan multiple tools. Contoh ini mendaftarkan tiga matchers dengan scope berbeda: yang pertama memicu `file_security_hook` hanya untuk file modification tools, yang kedua memicu `mcp_audit_hook` untuk tool MCP apa pun (tools yang namanya dimulai dengan `mcp__`), dan yang ketiga memicu `global_logger` untuk setiap pemanggilan tool terlepas dari nama:454Gunakan pola regex untuk mencocokkan multiple tools. Contoh ini mendaftarkan tiga matchers dengan scope berbeda: yang pertama memicu `file_security_hook` hanya untuk file modification tools, yang kedua memicu `mcp_audit_hook` untuk tool MCP apa pun (tools yang namanya dimulai dengan `mcp__`), dan yang ketiga memicu `global_logger` untuk setiap pemanggilan tool terlepas dari nama:

455 455 


487 ```487 ```

488</CodeGroup>488</CodeGroup>

489 489 

490### Track subagent activity490### Lacak aktivitas subagent

491 491 

492Gunakan hooks `SubagentStop` untuk monitor ketika subagents menyelesaikan pekerjaan mereka. Lihat tipe input lengkap di referensi SDK [TypeScript](/id/agent-sdk/typescript#hook-input) dan [Python](/id/agent-sdk/python#hook-input). Contoh ini logs ringkasan setiap kali subagent selesai:492Gunakan hooks `SubagentStop` untuk memantau ketika subagents menyelesaikan pekerjaan mereka. Lihat tipe input lengkap di referensi SDK [TypeScript](/id/agent-sdk/typescript#hook-input) dan [Python](/id/agent-sdk/python#hook-input). Contoh ini mencatat ringkasan setiap kali subagent selesai:

493 493 

494<CodeGroup>494<CodeGroup>

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


530 ```530 ```

531</CodeGroup>531</CodeGroup>

532 532 

533### Make HTTP requests from hooks533### Buat HTTP requests dari hooks

534 534 

535Hooks dapat melakukan operasi asynchronous seperti HTTP requests. Tangkap errors di dalam hook Anda daripada membiarkan mereka menyebar, karena exception yang tidak ditangani dapat mengganggu agent.535Hooks dapat melakukan operasi asynchronous seperti HTTP requests. Tangkap errors di dalam hook Anda daripada membiarkan mereka menyebar, karena exception yang tidak ditangani dapat mengganggu agent.

536 536 

537Contoh ini mengirim webhook setelah setiap tool selesai, logging tool mana yang berjalan dan kapan. Hook menangkap errors sehingga webhook yang gagal tidak mengganggu agent:537Contoh ini mengirim webhook setelah setiap tool selesai, mencatat tool mana yang berjalan dan kapan. Hook menangkap errors sehingga webhook yang gagal tidak mengganggu agent:

538 538 

539<CodeGroup>539<CodeGroup>

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


619 ```619 ```

620</CodeGroup>620</CodeGroup>

621 621 

622### Forward notifications to Slack622### Teruskan notifikasi ke Slack

623 623 

624Gunakan hooks `Notification` untuk menerima notifikasi sistem dari agent dan meneruskannya ke layanan eksternal. Notifications terjadi untuk tipe event spesifik: `permission_prompt` (Claude memerlukan permission), `idle_prompt` (Claude menunggu input), `auth_success` (authentication selesai), dan `elicitation_dialog` (Claude meminta pengguna). Setiap notifikasi mencakup field `message` dengan deskripsi yang dapat dibaca manusia dan secara opsional `title`.624Gunakan hooks `Notification` untuk menerima notifikasi sistem dari agent dan meneruskannya ke layanan eksternal. Notifikasi terjadi untuk tipe event spesifik: `permission_prompt` (Claude memerlukan permission), `idle_prompt` (Claude menunggu input), `auth_success` (authentication selesai), dan `elicitation_dialog` (Claude meminta pengguna). Setiap notifikasi mencakup field `message` dengan deskripsi yang dapat dibaca manusia dan secara opsional `title`.

625 625 

626Contoh ini meneruskan setiap notifikasi ke channel Slack. Ini memerlukan [Slack incoming webhook URL](https://api.slack.com/messaging/webhooks), yang Anda buat dengan menambahkan app ke workspace Slack Anda dan mengaktifkan incoming webhooks:626Contoh ini meneruskan setiap notifikasi ke channel Slack. Ini memerlukan [Slack incoming webhook URL](https://api.slack.com/messaging/webhooks), yang Anda buat dengan menambahkan app ke workspace Slack Anda dan mengaktifkan incoming webhooks:

627 627 

agent-sdk/migration-guide.md +289 −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# Migrasi ke Claude Agent SDK

6 

7> Panduan untuk migrasi Claude Code TypeScript dan Python SDKs ke Claude Agent SDK

8 

9## Ringkasan

10 

11Claude Code SDK telah diubah namanya menjadi **Claude Agent SDK** dan dokumentasinya telah diorganisir ulang. Perubahan ini mencerminkan kemampuan SDK yang lebih luas untuk membangun agen AI di luar sekadar tugas pengkodean.

12 

13## Apa yang Berubah

14 

15| Aspek | Lama | Baru |

16| :--------------------- | :-------------------------- | :------------------------------- |

17| **Nama Paket (TS/JS)** | `@anthropic-ai/claude-code` | `@anthropic-ai/claude-agent-sdk` |

18| **Paket Python** | `claude-code-sdk` | `claude-agent-sdk` |

19| **Lokasi Dokumentasi** | Dokumentasi Claude Code | API Guide → Bagian Agent SDK |

20 

21<Note>

22 **Perubahan Dokumentasi:** Dokumentasi Agent SDK telah dipindahkan dari dokumentasi Claude Code ke API Guide di bawah bagian [Agent SDK](/id/agent-sdk/overview) yang didedikasikan. Dokumentasi Claude Code sekarang fokus pada alat CLI dan fitur otomasi.

23</Note>

24 

25## Langkah-Langkah Migrasi

26 

27### Untuk Proyek TypeScript/JavaScript

28 

29**1. Uninstall paket lama:**

30 

31```bash theme={null}

32npm uninstall @anthropic-ai/claude-code

33```

34 

35**2. Install paket baru:**

36 

37```bash theme={null}

38npm install @anthropic-ai/claude-agent-sdk

39```

40 

41**3. Perbarui impor Anda:**

42 

43Ubah semua impor dari `@anthropic-ai/claude-code` ke `@anthropic-ai/claude-agent-sdk`:

44 

45```typescript theme={null}

46// Sebelumnya

47import { query, tool, createSdkMcpServer } from "@anthropic-ai/claude-code";

48 

49// Sesudahnya

50import { query, tool, createSdkMcpServer } from "@anthropic-ai/claude-agent-sdk";

51```

52 

53**4. Perbarui dependensi package.json:**

54 

55Jika Anda memiliki paket yang terdaftar di `package.json` Anda, perbarui:

56 

57Sebelumnya:

58 

59```json theme={null}

60{

61 "dependencies": {

62 "@anthropic-ai/claude-code": "^0.0.42"

63 }

64}

65```

66 

67Sesudahnya:

68 

69```json theme={null}

70{

71 "dependencies": {

72 "@anthropic-ai/claude-agent-sdk": "^0.2.0"

73 }

74}

75```

76 

77Itu saja! Tidak ada perubahan kode lain yang diperlukan.

78 

79### Untuk Proyek Python

80 

81**1. Uninstall paket lama:**

82 

83```bash theme={null}

84pip uninstall claude-code-sdk

85```

86 

87**2. Install paket baru:**

88 

89```bash theme={null}

90pip install claude-agent-sdk

91```

92 

93**3. Perbarui impor Anda:**

94 

95Ubah semua impor dari `claude_code_sdk` ke `claude_agent_sdk`:

96 

97```python theme={null}

98# Sebelumnya

99from claude_code_sdk import query, ClaudeCodeOptions

100 

101# Sesudahnya

102from claude_agent_sdk import query, ClaudeAgentOptions

103```

104 

105**4. Perbarui nama tipe:**

106 

107Ubah `ClaudeCodeOptions` menjadi `ClaudeAgentOptions`:

108 

109```python theme={null}

110# Sebelumnya

111from claude_code_sdk import query, ClaudeCodeOptions

112 

113options = ClaudeCodeOptions(model="claude-opus-4-7")

114 

115# Sesudahnya

116from claude_agent_sdk import query, ClaudeAgentOptions

117 

118options = ClaudeAgentOptions(model="claude-opus-4-7")

119```

120 

121**5. Tinjau [perubahan yang merusak](#breaking-changes)**

122 

123Buat perubahan kode apa pun yang diperlukan untuk menyelesaikan migrasi.

124 

125## Perubahan yang merusak

126 

127<Warning>

128 Untuk meningkatkan isolasi dan konfigurasi eksplisit, Claude Agent SDK v0.1.0 memperkenalkan perubahan yang merusak bagi pengguna yang bermigrasi dari Claude Code SDK. Tinjau bagian ini dengan hati-hati sebelum bermigrasi.

129</Warning>

130 

131### Python: ClaudeCodeOptions diubah nama menjadi ClaudeAgentOptions

132 

133**Apa yang berubah:** Tipe Python SDK `ClaudeCodeOptions` telah diubah nama menjadi `ClaudeAgentOptions`.

134 

135**Migrasi:**

136 

137```python theme={null}

138# SEBELUMNYA (claude-code-sdk)

139from claude_code_sdk import query, ClaudeCodeOptions

140 

141options = ClaudeCodeOptions(model="claude-opus-4-7", permission_mode="acceptEdits")

142 

143# SESUDAHNYA (claude-agent-sdk)

144from claude_agent_sdk import query, ClaudeAgentOptions

145 

146options = ClaudeAgentOptions(model="claude-opus-4-7", permission_mode="acceptEdits")

147```

148 

149**Mengapa ini berubah:** Nama tipe sekarang cocok dengan branding "Claude Agent SDK" dan memberikan konsistensi di seluruh konvensi penamaan SDK.

150 

151### Prompt sistem tidak lagi default

152 

153**Apa yang berubah:** SDK tidak lagi menggunakan prompt sistem Claude Code secara default.

154 

155**Migrasi:**

156 

157<CodeGroup>

158 ```typescript TypeScript theme={null}

159 // SEBELUMNYA (v0.0.x) - Menggunakan prompt sistem Claude Code secara default

160 const result = query({ prompt: "Hello" });

161 

162 // SESUDAHNYA (v0.1.0) - Menggunakan prompt sistem minimal secara default

163 // Untuk mendapatkan perilaku lama, secara eksplisit minta preset Claude Code:

164 const result = query({

165 prompt: "Hello",

166 options: {

167 systemPrompt: { type: "preset", preset: "claude_code" }

168 }

169 });

170 

171 // Atau gunakan prompt sistem kustom:

172 const result = query({

173 prompt: "Hello",

174 options: {

175 systemPrompt: "You are a helpful coding assistant"

176 }

177 });

178 ```

179 

180 ```python Python theme={null}

181 # SEBELUMNYA (v0.0.x) - Menggunakan prompt sistem Claude Code secara default

182 async for message in query(prompt="Hello"):

183 print(message)

184 

185 # SESUDAHNYA (v0.1.0) - Menggunakan prompt sistem minimal secara default

186 # Untuk mendapatkan perilaku lama, secara eksplisit minta preset Claude Code:

187 from claude_agent_sdk import query, ClaudeAgentOptions

188 

189 async for message in query(

190 prompt="Hello",

191 options=ClaudeAgentOptions(

192 system_prompt={"type": "preset", "preset": "claude_code"} # Gunakan preset

193 ),

194 ):

195 print(message)

196 

197 # Atau gunakan prompt sistem kustom:

198 async for message in query(

199 prompt="Hello",

200 options=ClaudeAgentOptions(system_prompt="You are a helpful coding assistant"),

201 ):

202 print(message)

203 ```

204</CodeGroup>

205 

206**Mengapa ini berubah:** Memberikan kontrol dan isolasi yang lebih baik untuk aplikasi SDK. Anda sekarang dapat membangun agen dengan perilaku kustom tanpa mewarisi instruksi yang berfokus pada CLI dari Claude Code.

207 

208### Default sumber pengaturan

209 

210Default ini secara singkat diubah di v0.1.0 dan kemudian dikembalikan, jadi tidak ada tindakan migrasi yang diperlukan.

211 

212**Perilaku saat ini:** Menghilangkan `settingSources` pada `query()` memuat pengaturan pengguna, proyek, dan sistem file lokal, cocok dengan CLI. Ini termasuk file `~/.claude/settings.json`, `.claude/settings.json`, `.claude/settings.local.json`, file CLAUDE.md, dan perintah kustom.

213 

214Untuk menjalankan terisolasi dari pengaturan sistem file, teruskan array kosong:

215 

216<CodeGroup>

217 ```typescript TypeScript theme={null}

218 const result = query({

219 prompt: "Hello",

220 options: {

221 settingSources: [] // Tidak ada pengaturan sistem file yang dimuat

222 }

223 });

224 

225 // Atau muat hanya sumber tertentu:

226 const result = query({

227 prompt: "Hello",

228 options: {

229 settingSources: ["project"] // Hanya pengaturan proyek

230 }

231 });

232 ```

233 

234 ```python Python theme={null}

235 from claude_agent_sdk import query, ClaudeAgentOptions

236 

237 async for message in query(

238 prompt="Hello",

239 options=ClaudeAgentOptions(setting_sources=[]), # Tidak ada pengaturan sistem file yang dimuat

240 ):

241 print(message)

242 

243 # Atau muat hanya sumber tertentu:

244 async for message in query(

245 prompt="Hello",

246 options=ClaudeAgentOptions(

247 setting_sources=["project"] # Hanya pengaturan proyek

248 ),

249 ):

250 print(message)

251 ```

252</CodeGroup>

253 

254Isolasi sangat penting untuk pipeline CI/CD, aplikasi yang diterapkan, lingkungan pengujian, dan sistem multi-tenant di mana kustomisasi lokal tidak boleh bocor.

255 

256<Note>

257 SDK v0.1.0 secara singkat default ke tidak ada pengaturan yang dimuat; ini dikembalikan dalam rilis berikutnya. Python SDK 0.1.59 dan lebih awal memperlakukan daftar kosong sama dengan menghilangkan opsi, jadi upgrade sebelum mengandalkan `setting_sources=[]`. Lihat [Apa yang settingSources tidak kontrol](/id/agent-sdk/claude-code-features#what-settingsources-does-not-control) untuk input yang dibaca bahkan ketika `settingSources` adalah `[]`.

258</Note>

259 

260## Mengapa Pengubahan Nama?

261 

262Claude Code SDK awalnya dirancang untuk tugas pengkodean, tetapi telah berkembang menjadi kerangka kerja yang kuat untuk membangun semua jenis agen AI. Nama baru "Claude Agent SDK" lebih mencerminkan kemampuannya:

263 

264* Membangun agen bisnis (asisten hukum, penasihat keuangan, dukungan pelanggan)

265* Membuat agen pengkodean khusus (bot SRE, pengulas keamanan, agen tinjauan kode)

266* Mengembangkan agen kustom untuk domain apa pun dengan penggunaan alat, integrasi MCP, dan banyak lagi

267 

268## Mendapatkan Bantuan

269 

270Jika Anda mengalami masalah apa pun selama migrasi:

271 

272**Untuk TypeScript/JavaScript:**

273 

2741. Periksa bahwa semua impor diperbarui untuk menggunakan `@anthropic-ai/claude-agent-sdk`

2752. Verifikasi bahwa package.json Anda memiliki nama paket baru

2763. Jalankan `npm install` untuk memastikan dependensi diperbarui

277 

278**Untuk Python:**

279 

2801. Periksa bahwa semua impor diperbarui untuk menggunakan `claude_agent_sdk`

2812. Verifikasi bahwa requirements.txt atau pyproject.toml Anda memiliki nama paket baru

2823. Jalankan `pip install claude-agent-sdk` untuk memastikan paket terinstal

283 

284## Langkah Berikutnya

285 

286* Jelajahi [Ringkasan Agent SDK](/id/agent-sdk/overview) untuk mempelajari fitur yang tersedia

287* Lihat [Referensi SDK TypeScript](/id/agent-sdk/typescript) untuk dokumentasi API terperinci

288* Tinjau [Referensi SDK Python](/id/agent-sdk/python) untuk dokumentasi khusus Python

289* Pelajari tentang [Custom Tools](/id/agent-sdk/custom-tools) dan [Integrasi MCP](/id/agent-sdk/mcp)

agent-sdk/permissions.md +242 −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# Konfigurasi izin

6 

7> Kontrol bagaimana agen Anda menggunakan alat dengan mode izin, hooks, dan aturan allow/deny deklaratif.

8 

9Claude Agent SDK menyediakan kontrol izin untuk mengelola bagaimana Claude menggunakan alat. Gunakan mode izin dan aturan untuk menentukan apa yang diizinkan secara otomatis, dan callback [`canUseTool`](/id/agent-sdk/user-input) untuk menangani segalanya di runtime.

10 

11<Note>

12 Halaman ini mencakup mode izin dan aturan. Untuk membangun alur persetujuan interaktif di mana pengguna menyetujui atau menolak permintaan alat di runtime, lihat [Tangani persetujuan dan input pengguna](/id/agent-sdk/user-input).

13</Note>

14 

15## Bagaimana izin dievaluasi

16 

17Ketika Claude meminta alat, SDK memeriksa izin dalam urutan ini:

18 

19<Steps>

20 <Step title="Hooks">

21 Jalankan [hooks](/id/agent-sdk/hooks) terlebih dahulu. Hook dapat menolak panggilan sepenuhnya atau meneruskannya. Hook yang mengembalikan `allow` tidak melewati aturan deny dan ask di bawah; aturan tersebut dievaluasi terlepas dari hasil hook.

22 </Step>

23 

24 <Step title="Deny rules">

25 Periksa aturan `deny` (dari `disallowed_tools` dan [settings.json](/id/settings#permission-settings)). Jika aturan deny cocok, alat diblokir, bahkan dalam mode `bypassPermissions`.

26 </Step>

27 

28 <Step title="Permission mode">

29 Terapkan [mode izin](#permission-modes) yang aktif. `bypassPermissions` menyetujui semua yang mencapai langkah ini. `acceptEdits` menyetujui operasi file. Mode lain jatuh melalui.

30 </Step>

31 

32 <Step title="Allow rules">

33 Periksa aturan `allow` (dari `allowed_tools` dan settings.json). Jika aturan cocok, alat disetujui.

34 </Step>

35 

36 <Step title="canUseTool callback">

37 Jika tidak diselesaikan oleh salah satu di atas, panggil callback [`canUseTool`](/id/agent-sdk/user-input) Anda untuk keputusan. Dalam mode `dontAsk`, langkah ini dilewati dan alat ditolak.

38 </Step>

39</Steps>

40 

41<img src="https://mintcdn.com/claude-code/FEspvVUyRuaWjm0s/images/agent-sdk/permissions-flow.svg?fit=max&auto=format&n=FEspvVUyRuaWjm0s&q=85&s=a1759b0cf4541281a9fdd8f5348228e8" alt="Diagram alur evaluasi izin" width="920" height="260" data-path="images/agent-sdk/permissions-flow.svg" />

42 

43Halaman ini berfokus pada **aturan allow dan deny** serta **mode izin**. Untuk langkah lainnya:

44 

45* **Hooks:** jalankan kode khusus untuk mengizinkan, menolak, atau memodifikasi permintaan alat. Lihat [Kontrol eksekusi dengan hooks](/id/agent-sdk/hooks).

46* **canUseTool callback:** minta persetujuan pengguna di runtime. Lihat [Tangani persetujuan dan input pengguna](/id/agent-sdk/user-input).

47 

48## Aturan allow dan deny

49 

50`allowed_tools` dan `disallowed_tools` (TypeScript: `allowedTools` / `disallowedTools`) menambahkan entri ke daftar aturan allow dan deny dalam alur evaluasi di atas. Mereka mengontrol apakah panggilan alat disetujui, bukan apakah alat tersedia untuk Claude.

51 

52| Opsi | Efek |

53| :------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------- |

54| `allowed_tools=["Read", "Grep"]` | `Read` dan `Grep` disetujui secara otomatis. Alat yang tidak tercantum di sini masih ada dan jatuh melalui mode izin dan `canUseTool`. |

55| `disallowed_tools=["Bash"]` | `Bash` selalu ditolak. Aturan deny diperiksa terlebih dahulu dan berlaku di setiap mode izin, termasuk `bypassPermissions`. |

56 

57Untuk agen yang terkunci, pasangkan `allowedTools` dengan `permissionMode: "dontAsk"`. Alat yang tercantum disetujui; apa pun yang lain ditolak sepenuhnya daripada meminta:

58 

59```typescript theme={null}

60const options = {

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

62 permissionMode: "dontAsk"

63};

64```

65 

66<Warning>

67 **`allowed_tools` tidak membatasi `bypassPermissions`.** `allowed_tools` hanya pra-menyetujui alat yang Anda cantumkan. Alat yang tidak tercantum tidak cocok dengan aturan allow apa pun dan jatuh melalui mode izin, di mana `bypassPermissions` menyetujuinya. Menetapkan `allowed_tools=["Read"]` bersama dengan `permission_mode="bypassPermissions"` masih menyetujui setiap alat, termasuk `Bash`, `Write`, dan `Edit`. Jika Anda memerlukan `bypassPermissions` tetapi ingin alat tertentu diblokir, gunakan `disallowed_tools`.

68</Warning>

69 

70Anda juga dapat mengonfigurasi aturan allow, deny, dan ask secara deklaratif di `.claude/settings.json`. Aturan ini dibaca ketika sumber pengaturan `project` diaktifkan, yang merupakan default untuk opsi `query()`. Jika Anda menetapkan `setting_sources` (TypeScript: `settingSources`) secara eksplisit, sertakan `"project"` agar aturan diterapkan. Lihat [Pengaturan izin](/id/settings#permission-settings) untuk sintaks aturan.

71 

72## Mode izin

73 

74Mode izin memberikan kontrol global atas bagaimana Claude menggunakan alat. Anda dapat menetapkan mode izin saat memanggil `query()` atau mengubahnya secara dinamis selama sesi streaming.

75 

76### Mode yang tersedia

77 

78SDK mendukung mode izin ini:

79 

80| Mode | Deskripsi | Perilaku alat |

81| :----------------------- | :-------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------- |

82| `default` | Perilaku izin standar | Tidak ada persetujuan otomatis; alat yang tidak cocok memicu callback `canUseTool` Anda |

83| `dontAsk` | Tolak daripada meminta | Apa pun yang tidak pra-disetujui oleh `allowed_tools` atau aturan ditolak; `canUseTool` tidak pernah dipanggil |

84| `acceptEdits` | Terima otomatis edit file | Edit file dan [operasi sistem file](#accept-edits-mode-acceptedits) (`mkdir`, `rm`, `mv`, dll.) disetujui secara otomatis |

85| `bypassPermissions` | Lewati semua pemeriksaan izin | Semua alat berjalan tanpa prompt izin (gunakan dengan hati-hati) |

86| `plan` | Mode perencanaan | Alat baca saja berjalan; Claude menganalisis dan merencanakan tanpa mengedit file sumber Anda |

87| `auto` (TypeScript saja) | Persetujuan yang diklasifikasikan model | Pengklasifikasi model menyetujui atau menolak setiap panggilan alat. Lihat [Mode Auto](/id/permission-modes#eliminate-prompts-with-auto-mode) untuk ketersediaan |

88 

89<Warning>

90 **Warisan subagen:** Ketika induk menggunakan `bypassPermissions`, `acceptEdits`, atau `auto`, semua subagen mewarisi mode tersebut dan tidak dapat ditimpa per subagen. Subagen mungkin memiliki prompt sistem yang berbeda dan perilaku yang kurang terbatas daripada agen utama Anda, jadi mewarisi `bypassPermissions` memberikan mereka akses sistem penuh dan otonom tanpa prompt persetujuan apa pun.

91</Warning>

92 

93### Tetapkan mode izin

94 

95Anda dapat menetapkan mode izin sekali saat memulai kueri, atau mengubahnya secara dinamis saat sesi aktif.

96 

97<Tabs>

98 <Tab title="Pada waktu kueri">

99 Teruskan `permission_mode` (Python) atau `permissionMode` (TypeScript) saat membuat kueri. Mode ini berlaku untuk seluruh sesi kecuali diubah secara dinamis.

100 

101 <CodeGroup>

102 ```python Python theme={null}

103 import asyncio

104 from claude_agent_sdk import query, ClaudeAgentOptions

105 

106 

107 async def main():

108 async for message in query(

109 prompt="Help me refactor this code",

110 options=ClaudeAgentOptions(

111 permission_mode="default", # Set the mode here

112 ),

113 ):

114 if hasattr(message, "result"):

115 print(message.result)

116 

117 

118 asyncio.run(main())

119 ```

120 

121 ```typescript TypeScript theme={null}

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

123 

124 async function main() {

125 for await (const message of query({

126 prompt: "Help me refactor this code",

127 options: {

128 permissionMode: "default" // Set the mode here

129 }

130 })) {

131 if ("result" in message) {

132 console.log(message.result);

133 }

134 }

135 }

136 

137 main();

138 ```

139 </CodeGroup>

140 </Tab>

141 

142 <Tab title="Selama streaming">

143 Panggil `set_permission_mode()` (Python) atau `setPermissionMode()` (TypeScript) untuk mengubah mode di tengah sesi. Mode baru berlaku segera untuk semua permintaan alat berikutnya. Ini memungkinkan Anda memulai dengan pembatasan dan melonggarkan izin seiring kepercayaan berkembang, misalnya beralih ke `acceptEdits` setelah meninjau pendekatan awal Claude.

144 

145 <CodeGroup>

146 ```python Python theme={null}

147 import asyncio

148 from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions

149 

150 

151 async def main():

152 async with ClaudeSDKClient(

153 options=ClaudeAgentOptions(

154 permission_mode="default", # Start in default mode

155 )

156 ) as client:

157 await client.query("Help me refactor this code")

158 

159 # Change mode dynamically mid-session

160 await client.set_permission_mode("acceptEdits")

161 

162 # Process messages with the new permission mode

163 async for message in client.receive_response():

164 if hasattr(message, "result"):

165 print(message.result)

166 

167 

168 asyncio.run(main())

169 ```

170 

171 ```typescript TypeScript theme={null}

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

173 

174 async function main() {

175 const q = query({

176 prompt: "Help me refactor this code",

177 options: {

178 permissionMode: "default" // Start in default mode

179 }

180 });

181 

182 // Change mode dynamically mid-session

183 await q.setPermissionMode("acceptEdits");

184 

185 // Process messages with the new permission mode

186 for await (const message of q) {

187 if ("result" in message) {

188 console.log(message.result);

189 }

190 }

191 }

192 

193 main();

194 ```

195 </CodeGroup>

196 </Tab>

197</Tabs>

198 

199### Detail mode

200 

201#### Mode terima edit (`acceptEdits`)

202 

203Menyetujui operasi file secara otomatis sehingga Claude dapat mengedit kode tanpa meminta. Alat lain (seperti perintah Bash yang bukan operasi sistem file) masih memerlukan izin normal.

204 

205**Operasi yang disetujui secara otomatis:**

206 

207* Edit file (alat Edit, Write)

208* Perintah sistem file: `mkdir`, `touch`, `rm`, `rmdir`, `mv`, `cp`, `sed`

209 

210Keduanya hanya berlaku untuk jalur di dalam direktori kerja atau `additionalDirectories`. Jalur di luar cakupan itu dan penulisan ke jalur yang dilindungi masih meminta.

211 

212**Gunakan ketika:** Anda mempercayai edit Claude dan menginginkan iterasi yang lebih cepat, seperti selama prototyping atau saat bekerja di direktori terisolasi.

213 

214#### Mode jangan tanya (`dontAsk`)

215 

216Mengonversi prompt izin apa pun menjadi penolakan. Alat yang pra-disetujui oleh `allowed_tools`, aturan allow settings.json, atau hook berjalan normal. Segalanya ditolak tanpa memanggil `canUseTool`.

217 

218**Gunakan ketika:** Anda menginginkan permukaan alat yang tetap dan eksplisit untuk agen headless dan lebih suka penolakan keras daripada ketergantungan diam pada `canUseTool` yang tidak ada.

219 

220#### Mode lewati izin (`bypassPermissions`)

221 

222Menyetujui semua penggunaan alat secara otomatis tanpa prompt. Hooks masih dijalankan dan dapat memblokir operasi jika diperlukan.

223 

224<Warning>

225 Gunakan dengan sangat hati-hati. Claude memiliki akses sistem penuh dalam mode ini. Hanya gunakan di lingkungan terkontrol di mana Anda mempercayai semua operasi yang mungkin.

226 

227 `allowed_tools` tidak membatasi mode ini. Setiap alat disetujui, bukan hanya yang Anda cantumkan. Aturan deny (`disallowed_tools`), aturan `ask` eksplisit, dan hooks dievaluasi sebelum pemeriksaan mode dan masih dapat memblokir alat.

228</Warning>

229 

230#### Mode rencana (`plan`)

231 

232Membatasi Claude ke alat baca saja. Claude dapat membaca file dan menjalankan perintah shell baca saja untuk menjelajahi basis kode tetapi tidak mengedit file sumber Anda. Claude dapat menggunakan `AskUserQuestion` untuk mengklarifikasi persyaratan sebelum menyelesaikan rencana. Lihat [Tangani persetujuan dan input pengguna](/id/agent-sdk/user-input#handle-clarifying-questions) untuk menangani prompt ini.

233 

234**Gunakan ketika:** Anda ingin Claude mengusulkan perubahan tanpa menjalankannya, seperti selama tinjauan kode atau ketika Anda perlu menyetujui perubahan sebelum dibuat.

235 

236## Sumber daya terkait

237 

238Untuk langkah lain dalam alur evaluasi izin:

239 

240* [Tangani persetujuan dan input pengguna](/id/agent-sdk/user-input): prompt persetujuan interaktif dan pertanyaan klarifikasi

241* [Panduan hooks](/id/agent-sdk/hooks): jalankan kode khusus di titik kunci dalam siklus hidup agen

242* [Aturan izin](/id/settings#permission-settings): aturan allow/deny deklaratif di `settings.json`

Details

113#### Parameter113#### Parameter

114 114 

115| Parameter | Tipe | Deskripsi |115| Parameter | Tipe | Deskripsi |

116| :------------- | :----------------------------------------------- | :----------------------------------------------------------------------- |116| :------------- | :---------------------------------------------- | :----------------------------------------------------------------------- |

117| `name` | `str` | Pengenal unik untuk tool |117| `name` | `str` | Pengenal unik untuk tool |

118| `description` | `str` | Deskripsi yang dapat dibaca manusia tentang apa yang dilakukan tool |118| `description` | `str` | Deskripsi yang dapat dibaca manusia tentang apa yang dilakukan tool |

119| `input_schema` | `type \| dict[str, Any]` | Skema yang mendefinisikan parameter input tool (lihat di bawah) |119| `input_schema` | `type \| dict[str, Any]` | Skema yang mendefinisikan parameter input tool (lihat di bawah) |

120| `annotations` | [`ToolAnnotations`](#tool-annotations)` \| None` | Anotasi tool MCP opsional yang memberikan petunjuk perilaku kepada klien |120| `annotations` | [`ToolAnnotations`](#toolannotations)` \| None` | Anotasi tool MCP opsional yang memberikan petunjuk perilaku kepada klien |

121 121 

122#### Opsi skema input122#### Opsi skema input

123 123 


267| `first_prompt` | `str \| None` | Prompt pengguna bermakna pertama dalam sesi |267| `first_prompt` | `str \| None` | Prompt pengguna bermakna pertama dalam sesi |

268| `git_branch` | `str \| None` | Cabang Git di akhir sesi |268| `git_branch` | `str \| None` | Cabang Git di akhir sesi |

269| `cwd` | `str \| None` | Direktori kerja untuk sesi |269| `cwd` | `str \| None` | Direktori kerja untuk sesi |

270| `tag` | `str \| None` | Tag sesi yang ditetapkan pengguna (lihat [`tag_session()`](#tag-session)) |270| `tag` | `str \| None` | Tag sesi yang ditetapkan pengguna (lihat [`tag_session()`](#tag_session)) |

271| `created_at` | `int \| None` | Waktu pembuatan sesi dalam milidetik sejak epoch |271| `created_at` | `int \| None` | Waktu pembuatan sesi dalam milidetik sejak epoch |

272 272 

273#### Contoh273#### Contoh


343| `session_id` | `str` | diperlukan | UUID sesi untuk dicari |343| `session_id` | `str` | diperlukan | UUID sesi untuk dicari |

344| `directory` | `str \| None` | `None` | Jalur direktori proyek. Ketika dihilangkan, mencari di semua direktori proyek |344| `directory` | `str \| None` | `None` | Jalur direktori proyek. Ketika dihilangkan, mencari di semua direktori proyek |

345 345 

346Mengembalikan [`SDKSessionInfo`](#return-type-sdk-session-info), atau `None` jika sesi tidak ditemukan.346Mengembalikan [`SDKSessionInfo`](#return-type-sdksessioninfo), atau `None` jika sesi tidak ditemukan.

347 347 

348#### Contoh348#### Contoh

349 349 


381 381 

382#### Contoh382#### Contoh

383 383 

384Ganti nama sesi terbaru sehingga lebih mudah ditemukan nanti. Judul baru muncul di [`SDKSessionInfo.custom_title`](#return-type-sdk-session-info) pada pembacaan berikutnya.384Ganti nama sesi terbaru sehingga lebih mudah ditemukan nanti. Judul baru muncul di [`SDKSessionInfo.custom_title`](#return-type-sdksessioninfo) pada pembacaan berikutnya.

385 385 

386```python theme={null}386```python theme={null}

387from claude_agent_sdk import list_sessions, rename_session387from claude_agent_sdk import list_sessions, rename_session


476| `set_permission_mode(mode)` | Ubah mode izin untuk sesi saat ini |476| `set_permission_mode(mode)` | Ubah mode izin untuk sesi saat ini |

477| `set_model(model)` | Ubah model untuk sesi saat ini. Teruskan `None` untuk reset ke default |477| `set_model(model)` | Ubah model untuk sesi saat ini. Teruskan `None` untuk reset ke default |

478| `rewind_files(user_message_id)` | Pulihkan file ke keadaan mereka pada pesan pengguna yang ditentukan. Memerlukan `enable_file_checkpointing=True`. Lihat [File checkpointing](/id/agent-sdk/file-checkpointing) |478| `rewind_files(user_message_id)` | Pulihkan file ke keadaan mereka pada pesan pengguna yang ditentukan. Memerlukan `enable_file_checkpointing=True`. Lihat [File checkpointing](/id/agent-sdk/file-checkpointing) |

479| `get_mcp_status()` | Dapatkan status semua server MCP yang dikonfigurasi. Mengembalikan [`McpStatusResponse`](#mcp-status-response) |479| `get_mcp_status()` | Dapatkan status semua server MCP yang dikonfigurasi. Mengembalikan [`McpStatusResponse`](#mcpstatusresponse) |

480| `reconnect_mcp_server(server_name)` | Coba lagi menghubungkan ke server MCP yang gagal atau terputus |480| `reconnect_mcp_server(server_name)` | Coba lagi menghubungkan ke server MCP yang gagal atau terputus |

481| `toggle_mcp_server(server_name, enabled)` | Aktifkan atau nonaktifkan server MCP di tengah sesi. Menonaktifkan menghapus toolnya |481| `toggle_mcp_server(server_name, enabled)` | Aktifkan atau nonaktifkan server MCP di tengah sesi. Menonaktifkan menghapus toolnya |

482| `stop_task(task_id)` | Hentikan tugas latar belakang yang sedang berjalan. [`TaskNotificationMessage`](#task-notification-message) dengan status `"stopped"` mengikuti dalam aliran pesan |482| `stop_task(task_id)` | Hentikan tugas latar belakang yang sedang berjalan. [`TaskNotificationMessage`](#tasknotificationmessage) dengan status `"stopped"` mengikuti dalam aliran pesan |

483| `get_server_info()` | Dapatkan informasi server termasuk ID sesi dan kemampuan |483| `get_server_info()` | Dapatkan informasi server termasuk ID sesi dan kemampuan |

484| `disconnect()` | Putuskan sambungan dari Claude |484| `disconnect()` | Putuskan sambungan dari Claude |

485 485 


791 effort: Literal["low", "medium", "high", "max"] | None = None791 effort: Literal["low", "medium", "high", "max"] | None = None

792 enable_file_checkpointing: bool = False792 enable_file_checkpointing: bool = False

793 session_store: SessionStore | None = None793 session_store: SessionStore | None = None

794 session_store_flush: SessionStoreFlushMode = "batched"

794```795```

795 796 

796| Properti | Tipe | Default | Deskripsi |797| Properti | Tipe | Default | Deskripsi |

797| :---------------------------- | :------------------------------------------------------------------------------------- | :--------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |798| :---------------------------- | :------------------------------------------------------------------------------------ | :--------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

798| `tools` | `list[str] \| ToolsPreset \| None` | `None` | Konfigurasi tools. Gunakan `{"type": "preset", "preset": "claude_code"}` untuk tools default Claude Code |799| `tools` | `list[str] \| ToolsPreset \| None` | `None` | Konfigurasi tools. Gunakan `{"type": "preset", "preset": "claude_code"}` untuk tools default Claude Code |

799| `allowed_tools` | `list[str]` | `[]` | Tools untuk auto-approve tanpa prompt. Ini tidak membatasi Claude hanya pada tools ini; tools yang tidak terdaftar jatuh ke `permission_mode` dan `can_use_tool`. Gunakan `disallowed_tools` untuk memblokir tools. Lihat [Permissions](/id/agent-sdk/permissions#allow-and-deny-rules) |800| `allowed_tools` | `list[str]` | `[]` | Tools untuk auto-approve tanpa prompt. Ini tidak membatasi Claude hanya pada tools ini; tools yang tidak terdaftar jatuh ke `permission_mode` dan `can_use_tool`. Gunakan `disallowed_tools` untuk memblokir tools. Lihat [Permissions](/id/agent-sdk/permissions#allow-and-deny-rules) |

800| `system_prompt` | `str \| SystemPromptPreset \| None` | `None` | Konfigurasi system prompt. Teruskan string untuk prompt kustom, atau gunakan `{"type": "preset", "preset": "claude_code"}` untuk system prompt Claude Code. Tambahkan `"append"` untuk memperluas preset |801| `system_prompt` | `str \| SystemPromptPreset \| None` | `None` | Konfigurasi system prompt. Teruskan string untuk prompt kustom, atau gunakan `{"type": "preset", "preset": "claude_code"}` untuk system prompt Claude Code. Tambahkan `"append"` untuk memperluas preset |


808| `enable_file_checkpointing` | `bool` | `False` | Aktifkan pelacakan perubahan file untuk rewinding. Lihat [File checkpointing](/id/agent-sdk/file-checkpointing) |809| `enable_file_checkpointing` | `bool` | `False` | Aktifkan pelacakan perubahan file untuk rewinding. Lihat [File checkpointing](/id/agent-sdk/file-checkpointing) |

809| `model` | `str \| None` | `None` | Model Claude yang akan digunakan |810| `model` | `str \| None` | `None` | Model Claude yang akan digunakan |

810| `fallback_model` | `str \| None` | `None` | Model fallback yang akan digunakan jika model utama gagal |811| `fallback_model` | `str \| None` | `None` | Model fallback yang akan digunakan jika model utama gagal |

811| `betas` | `list[SdkBeta]` | `[]` | Fitur beta untuk diaktifkan. Lihat [`SdkBeta`](#sdk-beta) untuk opsi yang tersedia |812| `betas` | `list[SdkBeta]` | `[]` | Fitur beta untuk diaktifkan. Lihat [`SdkBeta`](#sdkbeta) untuk opsi yang tersedia |

812| `output_format` | `dict[str, Any] \| None` | `None` | Format output untuk respons terstruktur (misalnya, `{"type": "json_schema", "schema": {...}}`). Lihat [Structured outputs](/id/agent-sdk/structured-outputs) untuk detail |813| `output_format` | `dict[str, Any] \| None` | `None` | Format output untuk respons terstruktur (misalnya, `{"type": "json_schema", "schema": {...}}`). Lihat [Structured outputs](/id/agent-sdk/structured-outputs) untuk detail |

813| `permission_prompt_tool_name` | `str \| None` | `None` | Nama tool MCP untuk prompt izin |814| `permission_prompt_tool_name` | `str \| None` | `None` | Nama tool MCP untuk prompt izin |

814| `cwd` | `str \| Path \| None` | `None` | Direktori kerja saat ini |815| `cwd` | `str \| Path \| None` | `None` | Direktori kerja saat ini |


820| `max_buffer_size` | `int \| None` | `None` | Byte maksimal saat membuffer stdout CLI |821| `max_buffer_size` | `int \| None` | `None` | Byte maksimal saat membuffer stdout CLI |

821| `debug_stderr` | `Any` | `sys.stderr` | *Deprecated* - Objek seperti file untuk output debug. Gunakan callback `stderr` sebagai gantinya |822| `debug_stderr` | `Any` | `sys.stderr` | *Deprecated* - Objek seperti file untuk output debug. Gunakan callback `stderr` sebagai gantinya |

822| `stderr` | `Callable[[str], None] \| None` | `None` | Fungsi callback untuk output stderr dari CLI |823| `stderr` | `Callable[[str], None] \| None` | `None` | Fungsi callback untuk output stderr dari CLI |

823| `can_use_tool` | [`CanUseTool`](#can-use-tool) ` \| None` | `None` | Fungsi callback izin tool. Lihat [Permission types](#can-use-tool) untuk detail |824| `can_use_tool` | [`CanUseTool`](#canusetool) ` \| None` | `None` | Fungsi callback izin tool. Lihat [Permission types](#canusetool) untuk detail |

824| `hooks` | `dict[HookEvent, list[HookMatcher]] \| None` | `None` | Konfigurasi hook untuk mengintersepsi event |825| `hooks` | `dict[HookEvent, list[HookMatcher]] \| None` | `None` | Konfigurasi hook untuk mengintersepsi event |

825| `user` | `str \| None` | `None` | Pengenal pengguna |826| `user` | `str \| None` | `None` | Pengenal pengguna |

826| `include_partial_messages` | `bool` | `False` | Sertakan event streaming pesan parsial. Ketika diaktifkan, pesan [`StreamEvent`](#stream-event) dihasilkan |827| `include_partial_messages` | `bool` | `False` | Sertakan event streaming pesan parsial. Ketika diaktifkan, pesan [`StreamEvent`](#streamevent) dihasilkan |

827| `fork_session` | `bool` | `False` | Ketika melanjutkan dengan `resume`, fork ke ID sesi baru alih-alih melanjutkan sesi asli |828| `fork_session` | `bool` | `False` | Ketika melanjutkan dengan `resume`, fork ke ID sesi baru alih-alih melanjutkan sesi asli |

828| `agents` | `dict[str, AgentDefinition] \| None` | `None` | Subagent yang didefinisikan secara programatis |829| `agents` | `dict[str, AgentDefinition] \| None` | `None` | Subagent yang didefinisikan secara programatis |

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

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

831| `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) |832| `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) |

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

833| `thinking` | [`ThinkingConfig`](#thinking-config) ` \| None` | `None` | Mengontrol perilaku extended thinking. Mengambil prioritas atas `max_thinking_tokens` |834| `thinking` | [`ThinkingConfig`](#thinkingconfig) ` \| None` | `None` | Mengontrol perilaku extended thinking. Mengambil prioritas atas `max_thinking_tokens` |

834| `effort` | `Literal["low", "medium", "high", "max"] \| None` | `None` | Tingkat usaha untuk kedalaman thinking |835| `effort` | `Literal["low", "medium", "high", "max"] \| None` | `None` | Tingkat usaha untuk kedalaman thinking |

835| `session_store` | [`SessionStore`](/id/agent-sdk/session-storage#the-session-store-interface) ` \| None` | `None` | Cerminkan transkrip sesi ke backend eksternal sehingga host apa pun dapat melanjutkannya. Lihat [Persist sessions to external storage](/id/agent-sdk/session-storage) |836| `session_store` | [`SessionStore`](/id/agent-sdk/session-storage#the-sessionstore-interface) ` \| None` | `None` | Cerminkan transkrip sesi ke backend eksternal sehingga host apa pun dapat melanjutkannya. Lihat [Persist sessions to external storage](/id/agent-sdk/session-storage) |

837| `session_store_flush` | `Literal["batched", "eager"]` | `"batched"` | Kapan membuang entri transkrip yang dicerminkan ke `session_store`. `"batched"` membuang sekali per putaran atau ketika buffer penuh; `"eager"` memicu pembilasan latar belakang setelah setiap frame. Diabaikan ketika `session_store` adalah `None` |

836 838 

837### `OutputFormat`839### `OutputFormat`

838 840 


1031| `maxTurns` | Tidak | Jumlah maksimal putaran agentic sebelum agent berhenti |1033| `maxTurns` | Tidak | Jumlah maksimal putaran agentic sebelum agent berhenti |

1032| `background` | Tidak | Jalankan agent ini sebagai tugas latar belakang non-blocking ketika dipanggil |1034| `background` | Tidak | Jalankan agent ini sebagai tugas latar belakang non-blocking ketika dipanggil |

1033| `effort` | Tidak | Tingkat usaha reasoning untuk agent ini. Menerima tingkat bernama atau integer |1035| `effort` | Tidak | Tingkat usaha reasoning untuk agent ini. Menerima tingkat bernama atau integer |

1034| `permissionMode` | Tidak | Mode izin untuk eksekusi tool dalam agent ini. Lihat [`PermissionMode`](#permission-mode) |1036| `permissionMode` | Tidak | Mode izin untuk eksekusi tool dalam agent ini. Lihat [`PermissionMode`](#permissionmode) |

1035 1037 

1036<Note>1038<Note>

1037 Field `AgentDefinition` menggunakan camelCase, seperti `disallowedTools`, `permissionMode`, dan `maxTurns`. Nama-nama ini memetakan langsung ke format wire yang dibagikan dengan SDK TypeScript. Ini berbeda dari `ClaudeAgentOptions`, yang menggunakan Python snake\_case untuk field tingkat atas yang setara seperti `disallowed_tools` dan `permission_mode`. Karena `AgentDefinition` adalah dataclass, melewatkan keyword snake\_case menimbulkan `TypeError` pada waktu konstruksi.1039 Field `AgentDefinition` menggunakan camelCase, seperti `disallowedTools`, `permissionMode`, dan `maxTurns`. Nama-nama ini memetakan langsung ke format wire yang dibagikan dengan SDK TypeScript. Ini berbeda dari `ClaudeAgentOptions`, yang menggunakan Python snake\_case untuk field tingkat atas yang setara seperti `disallowed_tools` dan `permission_mode`. Karena `AgentDefinition` adalah dataclass, melewatkan keyword snake\_case menimbulkan `TypeError` pada waktu konstruksi.


1045PermissionMode = Literal[1047PermissionMode = Literal[

1046 "default", # Standard permission behavior1048 "default", # Standard permission behavior

1047 "acceptEdits", # Auto-accept file edits1049 "acceptEdits", # Auto-accept file edits

1048 "plan", # Planning mode - no execution1050 "plan", # Planning mode - read-only tools only

1049 "dontAsk", # Deny anything not pre-approved instead of prompting1051 "dontAsk", # Deny anything not pre-approved instead of prompting

1050 "bypassPermissions", # Bypass all permission checks (use with caution)1052 "bypassPermissions", # Bypass all permission checks (use with caution)

1051]1053]


1081```1083```

1082 1084 

1083| Field | Tipe | Deskripsi |1085| Field | Tipe | Deskripsi |

1084| :------------ | :----------------------- | :---------------------------------------------------- |1086| :------------ | :----------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1085| `signal` | `Any \| None` | Dicadangkan untuk dukungan sinyal abort di masa depan |1087| `signal` | `Any \| None` | Dicadangkan untuk dukungan sinyal abort di masa depan |

1086| `suggestions` | `list[PermissionUpdate]` | Saran pembaruan izin dari CLI |1088| `suggestions` | `list[PermissionUpdate]` | Saran pembaruan izin dari CLI. Prompt Bash menyertakan saran dengan destinasi `localSettings`, jadi mengembalikannya dalam `updated_permissions` menulis aturan ke `.claude/settings.local.json` dan bertahan di seluruh sesi. |

1087 1089 

1088### `PermissionResult`1090### `PermissionResult`

1089 1091 


1289 1291 

1290### `McpServerStatusConfig`1292### `McpServerStatusConfig`

1291 1293 

1292Konfigurasi server MCP seperti yang dilaporkan oleh [`get_mcp_status()`](#methods). Ini adalah union dari semua varian transport [`McpServerConfig`](#mcp-server-config) ditambah varian output-only `claudeai-proxy` untuk server yang di-proxy melalui claude.ai.1294Konfigurasi server MCP seperti yang dilaporkan oleh [`get_mcp_status()`](#methods). Ini adalah union dari semua varian transport [`McpServerConfig`](#mcpserverconfig) ditambah varian output-only `claudeai-proxy` untuk server yang di-proxy melalui claude.ai.

1293 1295 

1294```python theme={null}1296```python theme={null}

1295McpServerStatusConfig = (1297McpServerStatusConfig = (


1301)1303)

1302```1304```

1303 1305 

1304`McpSdkServerConfigStatus` adalah bentuk yang dapat diserialisasi dari [`McpSdkServerConfig`](#mcp-sdk-server-config) dengan hanya field `type` (`"sdk"`) dan `name` (`str`); `instance` dalam proses dihilangkan. `McpClaudeAIProxyServerConfig` memiliki field `type` (`"claudeai-proxy"`), `url` (`str`), dan `id` (`str`).1306`McpSdkServerConfigStatus` adalah bentuk yang dapat diserialisasi dari [`McpSdkServerConfig`](#mcpsdkserverconfig) dengan hanya field `type` (`"sdk"`) dan `name` (`str`); `instance` dalam proses dihilangkan. `McpClaudeAIProxyServerConfig` memiliki field `type` (`"claudeai-proxy"`), `url` (`str`), dan `id` (`str`).

1305 1307 

1306### `McpStatusResponse`1308### `McpStatusResponse`

1307 1309 


1314 1316 

1315### `McpServerStatus`1317### `McpServerStatus`

1316 1318 

1317Status server MCP yang terhubung, terdapat dalam [`McpStatusResponse`](#mcp-status-response).1319Status server MCP yang terhubung, terdapat dalam [`McpStatusResponse`](#mcpstatusresponse).

1318 1320 

1319```python theme={null}1321```python theme={null}

1320class McpServerStatus(TypedDict):1322class McpServerStatus(TypedDict):


1328```1330```

1329 1331 

1330| Field | Tipe | Deskripsi |1332| Field | Tipe | Deskripsi |

1331| :----------- | :-------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |1333| :----------- | :----------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1332| `name` | `str` | Nama server |1334| `name` | `str` | Nama server |

1333| `status` | `str` | Salah satu dari `"connected"`, `"failed"`, `"needs-auth"`, `"pending"`, atau `"disabled"` |1335| `status` | `str` | Salah satu dari `"connected"`, `"failed"`, `"needs-auth"`, `"pending"`, atau `"disabled"` |

1334| `serverInfo` | `dict` (opsional) | Nama dan versi server (`{"name": str, "version": str}`) |1336| `serverInfo` | `dict` (opsional) | Nama dan versi server (`{"name": str, "version": str}`) |

1335| `error` | `str` (opsional) | Pesan error jika server gagal terhubung |1337| `error` | `str` (opsional) | Pesan error jika server gagal terhubung |

1336| `config` | [`McpServerStatusConfig`](#mcp-server-status-config) (opsional) | Konfigurasi server. Bentuk yang sama seperti [`McpServerConfig`](#mcp-server-config) (stdio, SSE, HTTP, atau SDK), ditambah varian `claudeai-proxy` untuk server yang terhubung melalui claude.ai |1338| `config` | [`McpServerStatusConfig`](#mcpserverstatusconfig) (opsional) | Konfigurasi server. Bentuk yang sama seperti [`McpServerConfig`](#mcpserverconfig) (stdio, SSE, HTTP, atau SDK), ditambah varian `claudeai-proxy` untuk server yang terhubung melalui claude.ai |

1337| `scope` | `str` (opsional) | Scope konfigurasi |1339| `scope` | `str` (opsional) | Scope konfigurasi |

1338| `tools` | `list` (opsional) | Tools yang disediakan oleh server ini, masing-masing dengan field `name`, `description`, dan `annotations` |1340| `tools` | `list` (opsional) | Tools yang disediakan oleh server ini, masing-masing dengan field `name`, `description`, dan `annotations` |

1339 1341 


1416```1418```

1417 1419 

1418| Field | Tipe | Deskripsi |1420| Field | Tipe | Deskripsi |

1419| :------------------- | :------------------------------------------------------------- | :-------------------------------------------------------------------------------------------- |1421| :------------------- | :----------------------------------------------------------- | :------------------------------------------------------------------------------------------- |

1420| `content` | `list[ContentBlock]` | Daftar blok konten dalam respons |1422| `content` | `list[ContentBlock]` | Daftar blok konten dalam respons |

1421| `model` | `str` | Model yang menghasilkan respons |1423| `model` | `str` | Model yang menghasilkan respons |

1422| `parent_tool_use_id` | `str \| None` | ID penggunaan tool jika ini adalah respons bersarang |1424| `parent_tool_use_id` | `str \| None` | ID penggunaan tool jika ini adalah respons bersarang |

1423| `error` | [`AssistantMessageError`](#assistant-message-error) ` \| None` | Tipe error jika respons mengalami error |1425| `error` | [`AssistantMessageError`](#assistantmessageerror) ` \| None` | Tipe error jika respons mengalami error |

1424| `usage` | `dict[str, Any] \| None` | Penggunaan token per-pesan (kunci yang sama seperti [`ResultMessage.usage`](#result-message)) |1426| `usage` | `dict[str, Any] \| None` | Penggunaan token per-pesan (kunci yang sama seperti [`ResultMessage.usage`](#resultmessage)) |

1425| `message_id` | `str \| None` | ID pesan API. Beberapa pesan dari satu putaran berbagi ID yang sama |1427| `message_id` | `str \| None` | ID pesan API. Beberapa pesan dari satu putaran berbagi ID yang sama |

1426 1428 

1427### `AssistantMessageError`1429### `AssistantMessageError`


1481| `cache_creation_input_tokens` | `int` | Token yang digunakan untuk membuat entri cache baru. |1483| `cache_creation_input_tokens` | `int` | Token yang digunakan untuk membuat entri cache baru. |

1482| `cache_read_input_tokens` | `int` | Token yang dibaca dari entri cache yang ada. |1484| `cache_read_input_tokens` | `int` | Token yang dibaca dari entri cache yang ada. |

1483 1485 

1484Dict `model_usage` memetakan nama model ke penggunaan per-model. Kunci dict dalam menggunakan camelCase karena nilai diteruskan tanpa modifikasi dari proses CLI yang mendasar, cocok dengan tipe [`ModelUsage`](/id/agent-sdk/typescript#model-usage) TypeScript:1486Dict `model_usage` memetakan nama model ke penggunaan per-model. Kunci dict dalam menggunakan camelCase karena nilai diteruskan tanpa modifikasi dari proses CLI yang mendasar, cocok dengan tipe [`ModelUsage`](/id/agent-sdk/typescript#modelusage) TypeScript:

1485 1487 

1486| Kunci | Tipe | Deskripsi |1488| Kunci | Tipe | Deskripsi |

1487| -------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |1489| -------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |


1527```1529```

1528 1530 

1529| Field | Tipe | Deskripsi |1531| Field | Tipe | Deskripsi |

1530| :---------------- | :---------------------------------- | :------------------------- |1532| :---------------- | :-------------------------------- | :------------------------- |

1531| `rate_limit_info` | [`RateLimitInfo`](#rate-limit-info) | Status rate limit saat ini |1533| `rate_limit_info` | [`RateLimitInfo`](#ratelimitinfo) | Status rate limit saat ini |

1532| `uuid` | `str` | Pengenal event unik |1534| `uuid` | `str` | Pengenal event unik |

1533| `session_id` | `str` | Pengenal sesi |1535| `session_id` | `str` | Pengenal sesi |

1534 1536 

1535### `RateLimitInfo`1537### `RateLimitInfo`

1536 1538 

1537Status rate limit yang dibawa oleh [`RateLimitEvent`](#rate-limit-event).1539Status rate limit yang dibawa oleh [`RateLimitEvent`](#ratelimitevent).

1538 1540 

1539```python theme={null}1541```python theme={null}

1540RateLimitStatus = Literal["allowed", "allowed_warning", "rejected"]1542RateLimitStatus = Literal["allowed", "allowed_warning", "rejected"]


1812 1814 

1813Parameter:1815Parameter:

1814 1816 

1815* `input`: Input hook yang kuat dengan union yang dibedakan berdasarkan `hook_event_name` (lihat [`HookInput`](#hook-input))1817* `input`: Input hook yang kuat dengan union yang dibedakan berdasarkan `hook_event_name` (lihat [`HookInput`](#hookinput))

1816* `tool_use_id`: Pengenal penggunaan tool opsional (untuk hook terkait tool)1818* `tool_use_id`: Pengenal penggunaan tool opsional (untuk hook terkait tool)

1817* `context`: Konteks hook dengan informasi tambahan1819* `context`: Konteks hook dengan informasi tambahan

1818 1820 

1819Mengembalikan [`HookJSONOutput`](#hook-json-output) yang mungkin berisi:1821Mengembalikan [`HookJSONOutput`](#hookjsonoutput) yang mungkin berisi:

1820 1822 

1821* `decision`: `"block"` untuk memblokir tindakan1823* `decision`: `"block"` untuk memblokir tindakan

1822* `systemMessage`: Pesan sistem untuk ditambahkan ke transkrip1824* `systemMessage`: Pesan sistem untuk ditambahkan ke transkrip


3109```3111```

3110 3112 

3111| Properti | Tipe | Default | Deskripsi |3113| Properti | Tipe | Default | Deskripsi |

3112| :-------------------------- | :------------------------------------------------------ | :------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3114| :-------------------------- | :---------------------------------------------------- | :------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

3113| `enabled` | `bool` | `False` | Aktifkan mode sandbox untuk eksekusi perintah |3115| `enabled` | `bool` | `False` | Aktifkan mode sandbox untuk eksekusi perintah |

3114| `autoAllowBashIfSandboxed` | `bool` | `True` | Auto-approve perintah bash ketika sandbox diaktifkan |3116| `autoAllowBashIfSandboxed` | `bool` | `True` | Auto-approve perintah bash ketika sandbox diaktifkan |

3115| `excludedCommands` | `list[str]` | `[]` | Perintah yang selalu melewati pembatasan sandbox (misalnya, `["docker"]`). Ini berjalan tanpa sandbox secara otomatis tanpa keterlibatan model |3117| `excludedCommands` | `list[str]` | `[]` | Perintah yang selalu melewati pembatasan sandbox (misalnya, `["docker"]`). Ini berjalan tanpa sandbox secara otomatis tanpa keterlibatan model |

3116| `allowUnsandboxedCommands` | `bool` | `True` | Izinkan model untuk meminta menjalankan perintah di luar sandbox. Ketika `True`, model dapat mengatur `dangerouslyDisableSandbox` dalam input tool, yang jatuh kembali ke [sistem izin](#permissions-fallback-for-unsandboxed-commands) |3118| `allowUnsandboxedCommands` | `bool` | `True` | Izinkan model untuk meminta menjalankan perintah di luar sandbox. Ketika `True`, model dapat mengatur `dangerouslyDisableSandbox` dalam input tool, yang jatuh kembali ke [sistem izin](#permissions-fallback-for-unsandboxed-commands) |

3117| `network` | [`SandboxNetworkConfig`](#sandbox-network-config) | `None` | Konfigurasi sandbox spesifik jaringan |3119| `network` | [`SandboxNetworkConfig`](#sandboxnetworkconfig) | `None` | Konfigurasi sandbox spesifik jaringan |

3118| `ignoreViolations` | [`SandboxIgnoreViolations`](#sandbox-ignore-violations) | `None` | Konfigurasi pelanggaran sandbox mana yang akan diabaikan |3120| `ignoreViolations` | [`SandboxIgnoreViolations`](#sandboxignoreviolations) | `None` | Konfigurasi pelanggaran sandbox mana yang akan diabaikan |

3119| `enableWeakerNestedSandbox` | `bool` | `False` | Aktifkan sandbox bersarang yang lebih lemah untuk kompatibilitas |3121| `enableWeakerNestedSandbox` | `bool` | `False` | Aktifkan sandbox bersarang yang lebih lemah untuk kompatibilitas |

3120 3122 

3121#### Contoh penggunaan3123#### Contoh penggunaan

agent-sdk/streaming-output.md +396 −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# Stream responses in real-time

6 

7> Dapatkan respons real-time dari Agent SDK saat teks dan tool calls streaming masuk

8 

9Secara default, Agent SDK menghasilkan objek `AssistantMessage` lengkap setelah Claude selesai menghasilkan setiap respons. Untuk menerima pembaruan inkremental saat teks dan tool calls dihasilkan, aktifkan partial message streaming dengan mengatur `include_partial_messages` (Python) atau `includePartialMessages` (TypeScript) ke `true` dalam opsi Anda.

10 

11<Tip>

12 Halaman ini mencakup output streaming (menerima token secara real-time). Untuk input modes (cara Anda mengirim pesan), lihat [Send messages to agents](/id/agent-sdk/streaming-vs-single-mode). Anda juga dapat [stream responses using the Agent SDK via the CLI](/id/headless).

13</Tip>

14 

15## Enable streaming output

16 

17Untuk mengaktifkan streaming, atur `include_partial_messages` (Python) atau `includePartialMessages` (TypeScript) ke `true` dalam opsi Anda. Ini menyebabkan SDK menghasilkan pesan `StreamEvent` yang berisi raw API events saat tiba, selain `AssistantMessage` dan `ResultMessage` yang biasa.

18 

19Kode Anda kemudian perlu:

20 

211. Memeriksa tipe setiap pesan untuk membedakan `StreamEvent` dari tipe pesan lainnya

222. Untuk `StreamEvent`, ekstrak field `event` dan periksa `type`-nya

233. Cari event `content_block_delta` di mana `delta.type` adalah `text_delta`, yang berisi chunk teks aktual

24 

25Contoh di bawah mengaktifkan streaming dan mencetak chunk teks saat tiba. Perhatikan pemeriksaan tipe bersarang: pertama untuk `StreamEvent`, kemudian untuk `content_block_delta`, kemudian untuk `text_delta`:

26 

27<CodeGroup>

28 ```python Python theme={null}

29 from claude_agent_sdk import query, ClaudeAgentOptions

30 from claude_agent_sdk.types import StreamEvent

31 import asyncio

32 

33 

34 async def stream_response():

35 options = ClaudeAgentOptions(

36 include_partial_messages=True,

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

38 )

39 

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

41 if isinstance(message, StreamEvent):

42 event = message.event

43 if event.get("type") == "content_block_delta":

44 delta = event.get("delta", {})

45 if delta.get("type") == "text_delta":

46 print(delta.get("text", ""), end="", flush=True)

47 

48 

49 asyncio.run(stream_response())

50 ```

51 

52 ```typescript TypeScript theme={null}

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

54 

55 for await (const message of query({

56 prompt: "List the files in my project",

57 options: {

58 includePartialMessages: true,

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

60 }

61 })) {

62 if (message.type === "stream_event") {

63 const event = message.event;

64 if (event.type === "content_block_delta") {

65 if (event.delta.type === "text_delta") {

66 process.stdout.write(event.delta.text);

67 }

68 }

69 }

70 }

71 ```

72</CodeGroup>

73 

74## StreamEvent reference

75 

76Ketika partial messages diaktifkan, Anda menerima raw Claude API streaming events yang dibungkus dalam objek. Tipe memiliki nama berbeda di setiap SDK:

77 

78* **Python**: `StreamEvent` (import dari `claude_agent_sdk.types`)

79* **TypeScript**: `SDKPartialAssistantMessage` dengan `type: 'stream_event'`

80 

81Keduanya berisi raw Claude API events, bukan teks terakumulasi. Anda perlu mengekstrak dan mengakumulasi text deltas sendiri. Berikut adalah struktur setiap tipe:

82 

83<CodeGroup>

84 ```python Python theme={null}

85 @dataclass

86 class StreamEvent:

87 uuid: str # Unique identifier for this event

88 session_id: str # Session identifier

89 event: dict[str, Any] # The raw Claude API stream event

90 parent_tool_use_id: str | None # Parent tool ID if from a subagent

91 ```

92 

93 ```typescript TypeScript theme={null}

94 type SDKPartialAssistantMessage = {

95 type: "stream_event";

96 event: BetaRawMessageStreamEvent; // From Anthropic SDK

97 parent_tool_use_id: string | null;

98 uuid: UUID;

99 session_id: string;

100 };

101 ```

102</CodeGroup>

103 

104Field `event` berisi raw streaming event dari [Claude API](https://platform.claude.com/docs/en/build-with-claude/streaming#event-types). Tipe event umum meliputi:

105 

106| Event Type | Description |

107| :-------------------- | :------------------------------------------- |

108| `message_start` | Awal pesan baru |

109| `content_block_start` | Awal blok konten baru (teks atau tool use) |

110| `content_block_delta` | Pembaruan inkremental ke konten |

111| `content_block_stop` | Akhir blok konten |

112| `message_delta` | Pembaruan tingkat pesan (stop reason, usage) |

113| `message_stop` | Akhir pesan |

114 

115## Message flow

116 

117Dengan partial messages diaktifkan, Anda menerima pesan dalam urutan ini:

118 

119```text theme={null}

120StreamEvent (message_start)

121StreamEvent (content_block_start) - text block

122StreamEvent (content_block_delta) - text chunks...

123StreamEvent (content_block_stop)

124StreamEvent (content_block_start) - tool_use block

125StreamEvent (content_block_delta) - tool input chunks...

126StreamEvent (content_block_stop)

127StreamEvent (message_delta)

128StreamEvent (message_stop)

129AssistantMessage - complete message with all content

130... tool executes ...

131... more streaming events for next turn ...

132ResultMessage - final result

133```

134 

135Tanpa partial messages diaktifkan (`include_partial_messages` di Python, `includePartialMessages` di TypeScript), Anda menerima semua tipe pesan kecuali `StreamEvent`. Tipe umum meliputi `SystemMessage` (inisialisasi sesi), `AssistantMessage` (respons lengkap), `ResultMessage` (hasil akhir), dan pesan batas kompak yang menunjukkan kapan riwayat percakapan dikompres (`SDKCompactBoundaryMessage` di TypeScript; `SystemMessage` dengan subtype `"compact_boundary"` di Python).

136 

137## Stream text responses

138 

139Untuk menampilkan teks saat dihasilkan, cari event `content_block_delta` di mana `delta.type` adalah `text_delta`. Ini berisi chunk teks inkremental. Contoh di bawah mencetak setiap chunk saat tiba:

140 

141<CodeGroup>

142 ```python Python theme={null}

143 from claude_agent_sdk import query, ClaudeAgentOptions

144 from claude_agent_sdk.types import StreamEvent

145 import asyncio

146 

147 

148 async def stream_text():

149 options = ClaudeAgentOptions(include_partial_messages=True)

150 

151 async for message in query(prompt="Explain how databases work", options=options):

152 if isinstance(message, StreamEvent):

153 event = message.event

154 if event.get("type") == "content_block_delta":

155 delta = event.get("delta", {})

156 if delta.get("type") == "text_delta":

157 # Print each text chunk as it arrives

158 print(delta.get("text", ""), end="", flush=True)

159 

160 print() # Final newline

161 

162 

163 asyncio.run(stream_text())

164 ```

165 

166 ```typescript TypeScript theme={null}

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

168 

169 for await (const message of query({

170 prompt: "Explain how databases work",

171 options: { includePartialMessages: true }

172 })) {

173 if (message.type === "stream_event") {

174 const event = message.event;

175 if (event.type === "content_block_delta" && event.delta.type === "text_delta") {

176 process.stdout.write(event.delta.text);

177 }

178 }

179 }

180 

181 console.log(); // Final newline

182 ```

183</CodeGroup>

184 

185## Stream tool calls

186 

187Tool calls juga streaming secara inkremental. Anda dapat melacak kapan tools dimulai, menerima input mereka saat dihasilkan, dan melihat kapan mereka selesai. Contoh di bawah melacak tool yang sedang dipanggil dan mengakumulasi input JSON saat streaming masuk. Ini menggunakan tiga tipe event:

188 

189* `content_block_start`: tool dimulai

190* `content_block_delta` dengan `input_json_delta`: chunk input tiba

191* `content_block_stop`: tool call selesai

192 

193<CodeGroup>

194 ```python Python theme={null}

195 from claude_agent_sdk import query, ClaudeAgentOptions

196 from claude_agent_sdk.types import StreamEvent

197 import asyncio

198 

199 

200 async def stream_tool_calls():

201 options = ClaudeAgentOptions(

202 include_partial_messages=True,

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

204 )

205 

206 # Track the current tool and accumulate its input JSON

207 current_tool = None

208 tool_input = ""

209 

210 async for message in query(prompt="Read the README.md file", options=options):

211 if isinstance(message, StreamEvent):

212 event = message.event

213 event_type = event.get("type")

214 

215 if event_type == "content_block_start":

216 # New tool call is starting

217 content_block = event.get("content_block", {})

218 if content_block.get("type") == "tool_use":

219 current_tool = content_block.get("name")

220 tool_input = ""

221 print(f"Starting tool: {current_tool}")

222 

223 elif event_type == "content_block_delta":

224 delta = event.get("delta", {})

225 if delta.get("type") == "input_json_delta":

226 # Accumulate JSON input as it streams in

227 chunk = delta.get("partial_json", "")

228 tool_input += chunk

229 print(f" Input chunk: {chunk}")

230 

231 elif event_type == "content_block_stop":

232 # Tool call complete - show final input

233 if current_tool:

234 print(f"Tool {current_tool} called with: {tool_input}")

235 current_tool = None

236 

237 

238 asyncio.run(stream_tool_calls())

239 ```

240 

241 ```typescript TypeScript theme={null}

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

243 

244 // Track the current tool and accumulate its input JSON

245 let currentTool: string | null = null;

246 let toolInput = "";

247 

248 for await (const message of query({

249 prompt: "Read the README.md file",

250 options: {

251 includePartialMessages: true,

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

253 }

254 })) {

255 if (message.type === "stream_event") {

256 const event = message.event;

257 

258 if (event.type === "content_block_start") {

259 // New tool call is starting

260 if (event.content_block.type === "tool_use") {

261 currentTool = event.content_block.name;

262 toolInput = "";

263 console.log(`Starting tool: ${currentTool}`);

264 }

265 } else if (event.type === "content_block_delta") {

266 if (event.delta.type === "input_json_delta") {

267 // Accumulate JSON input as it streams in

268 const chunk = event.delta.partial_json;

269 toolInput += chunk;

270 console.log(` Input chunk: ${chunk}`);

271 }

272 } else if (event.type === "content_block_stop") {

273 // Tool call complete - show final input

274 if (currentTool) {

275 console.log(`Tool ${currentTool} called with: ${toolInput}`);

276 currentTool = null;

277 }

278 }

279 }

280 }

281 ```

282</CodeGroup>

283 

284## Build a streaming UI

285 

286Contoh ini menggabungkan text dan tool streaming menjadi UI yang kohesif. Ini melacak apakah agent saat ini mengeksekusi tool (menggunakan flag `in_tool`) untuk menampilkan indikator status seperti `[Using Read...]` saat tools berjalan. Teks streaming secara normal ketika tidak dalam tool, dan penyelesaian tool memicu pesan "done". Pola ini berguna untuk antarmuka chat yang perlu menampilkan progress selama tugas agent multi-langkah.

287 

288<CodeGroup>

289 ```python Python theme={null}

290 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

291 from claude_agent_sdk.types import StreamEvent

292 import asyncio

293 import sys

294 

295 

296 async def streaming_ui():

297 options = ClaudeAgentOptions(

298 include_partial_messages=True,

299 allowed_tools=["Read", "Bash", "Grep"],

300 )

301 

302 # Track whether we're currently in a tool call

303 in_tool = False

304 

305 async for message in query(

306 prompt="Find all TODO comments in the codebase", options=options

307 ):

308 if isinstance(message, StreamEvent):

309 event = message.event

310 event_type = event.get("type")

311 

312 if event_type == "content_block_start":

313 content_block = event.get("content_block", {})

314 if content_block.get("type") == "tool_use":

315 # Tool call is starting - show status indicator

316 tool_name = content_block.get("name")

317 print(f"\n[Using {tool_name}...]", end="", flush=True)

318 in_tool = True

319 

320 elif event_type == "content_block_delta":

321 delta = event.get("delta", {})

322 # Only stream text when not executing a tool

323 if delta.get("type") == "text_delta" and not in_tool:

324 sys.stdout.write(delta.get("text", ""))

325 sys.stdout.flush()

326 

327 elif event_type == "content_block_stop":

328 if in_tool:

329 # Tool call finished

330 print(" done", flush=True)

331 in_tool = False

332 

333 elif isinstance(message, ResultMessage):

334 # Agent finished all work

335 print(f"\n\n--- Complete ---")

336 

337 

338 asyncio.run(streaming_ui())

339 ```

340 

341 ```typescript TypeScript theme={null}

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

343 

344 // Track whether we're currently in a tool call

345 let inTool = false;

346 

347 for await (const message of query({

348 prompt: "Find all TODO comments in the codebase",

349 options: {

350 includePartialMessages: true,

351 allowedTools: ["Read", "Bash", "Grep"]

352 }

353 })) {

354 if (message.type === "stream_event") {

355 const event = message.event;

356 

357 if (event.type === "content_block_start") {

358 if (event.content_block.type === "tool_use") {

359 // Tool call is starting - show status indicator

360 process.stdout.write(`\n[Using ${event.content_block.name}...]`);

361 inTool = true;

362 }

363 } else if (event.type === "content_block_delta") {

364 // Only stream text when not executing a tool

365 if (event.delta.type === "text_delta" && !inTool) {

366 process.stdout.write(event.delta.text);

367 }

368 } else if (event.type === "content_block_stop") {

369 if (inTool) {

370 // Tool call finished

371 console.log(" done");

372 inTool = false;

373 }

374 }

375 } else if (message.type === "result") {

376 // Agent finished all work

377 console.log("\n\n--- Complete ---");

378 }

379 }

380 ```

381</CodeGroup>

382 

383## Known limitations

384 

385Beberapa fitur SDK tidak kompatibel dengan streaming:

386 

387* **Extended thinking**: ketika Anda secara eksplisit mengatur `max_thinking_tokens` (Python) atau `maxThinkingTokens` (TypeScript), pesan `StreamEvent` tidak dipancarkan. Anda hanya akan menerima pesan lengkap setelah setiap giliran. Perhatikan bahwa thinking dinonaktifkan secara default di SDK, jadi streaming bekerja kecuali Anda mengaktifkannya.

388* **Structured output**: hasil JSON muncul hanya di `ResultMessage.structured_output` akhir, bukan sebagai streaming deltas. Lihat [structured outputs](/id/agent-sdk/structured-outputs) untuk detail.

389 

390## Next steps

391 

392Sekarang bahwa Anda dapat stream teks dan tool calls secara real-time, jelajahi topik terkait ini:

393 

394* [Interactive vs one-shot queries](/id/agent-sdk/streaming-vs-single-mode): pilih antara input modes untuk use case Anda

395* [Structured outputs](/id/agent-sdk/structured-outputs): dapatkan respons JSON yang diketik dari agent

396* [Permissions](/id/agent-sdk/permissions): kontrol tools mana yang dapat digunakan agent

agent-sdk/todo-tracking.md +189 −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# Daftar Todo

6 

7> Lacak dan tampilkan todos menggunakan Claude Agent SDK untuk manajemen tugas yang terorganisir

8 

9Pelacakan todo menyediakan cara terstruktur untuk mengelola tugas dan menampilkan kemajuan kepada pengguna. Claude Agent SDK mencakup fungsionalitas todo bawaan yang membantu mengorganisir alur kerja yang kompleks dan membuat pengguna tetap terinformasi tentang perkembangan tugas.

10 

11### Siklus Hidup Todo

12 

13Todos mengikuti siklus hidup yang dapat diprediksi:

14 

151. **Dibuat** sebagai `pending` ketika tugas diidentifikasi

162. **Diaktifkan** menjadi `in_progress` ketika pekerjaan dimulai

173. **Diselesaikan** ketika tugas selesai dengan sukses

184. **Dihapus** ketika semua tugas dalam grup selesai

19 

20### Kapan Todos Digunakan

21 

22SDK secara otomatis membuat todos untuk:

23 

24* **Tugas multi-langkah yang kompleks** memerlukan 3 atau lebih tindakan yang berbeda

25* **Daftar tugas yang disediakan pengguna** ketika beberapa item disebutkan

26* **Operasi non-trivial** yang mendapat manfaat dari pelacakan kemajuan

27* **Permintaan eksplisit** ketika pengguna meminta organisasi todo

28 

29## Contoh

30 

31### Memantau Perubahan Todo

32 

33<CodeGroup>

34 ```typescript TypeScript theme={null}

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

36 

37 for await (const message of query({

38 prompt: "Optimize my React app performance and track progress with todos",

39 options: { maxTurns: 15 }

40 })) {

41 // Todo updates are reflected in the message stream

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

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

44 if (block.type === "tool_use" && block.name === "TodoWrite") {

45 const todos = block.input.todos;

46 

47 console.log("Todo Status Update:");

48 todos.forEach((todo, index) => {

49 const status =

50 todo.status === "completed" ? "✅" : todo.status === "in_progress" ? "🔧" : "❌";

51 console.log(`${index + 1}. ${status} ${todo.content}`);

52 });

53 }

54 }

55 }

56 }

57 ```

58 

59 ```python Python theme={null}

60 from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ToolUseBlock

61 

62 async for message in query(

63 prompt="Optimize my React app performance and track progress with todos",

64 options=ClaudeAgentOptions(max_turns=15),

65 ):

66 # Todo updates are reflected in the message stream

67 if isinstance(message, AssistantMessage):

68 for block in message.content:

69 if isinstance(block, ToolUseBlock) and block.name == "TodoWrite":

70 todos = block.input["todos"]

71 

72 print("Todo Status Update:")

73 for i, todo in enumerate(todos):

74 status = (

75 "✅"

76 if todo["status"] == "completed"

77 else "🔧"

78 if todo["status"] == "in_progress"

79 else "❌"

80 )

81 print(f"{i + 1}. {status} {todo['content']}")

82 ```

83</CodeGroup>

84 

85### Tampilan Kemajuan Real-time

86 

87<CodeGroup>

88 ```typescript TypeScript theme={null}

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

90 

91 class TodoTracker {

92 private todos: any[] = [];

93 

94 displayProgress() {

95 if (this.todos.length === 0) return;

96 

97 const completed = this.todos.filter((t) => t.status === "completed").length;

98 const inProgress = this.todos.filter((t) => t.status === "in_progress").length;

99 const total = this.todos.length;

100 

101 console.log(`\nProgress: ${completed}/${total} completed`);

102 console.log(`Currently working on: ${inProgress} task(s)\n`);

103 

104 this.todos.forEach((todo, index) => {

105 const icon =

106 todo.status === "completed" ? "✅" : todo.status === "in_progress" ? "🔧" : "❌";

107 const text = todo.status === "in_progress" ? todo.activeForm : todo.content;

108 console.log(`${index + 1}. ${icon} ${text}`);

109 });

110 }

111 

112 async trackQuery(prompt: string) {

113 for await (const message of query({

114 prompt,

115 options: { maxTurns: 20 }

116 })) {

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

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

119 if (block.type === "tool_use" && block.name === "TodoWrite") {

120 this.todos = block.input.todos;

121 this.displayProgress();

122 }

123 }

124 }

125 }

126 }

127 }

128 

129 // Usage

130 const tracker = new TodoTracker();

131 await tracker.trackQuery("Build a complete authentication system with todos");

132 ```

133 

134 ```python Python theme={null}

135 from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ToolUseBlock

136 from typing import List, Dict

137 

138 

139 class TodoTracker:

140 def __init__(self):

141 self.todos: List[Dict] = []

142 

143 def display_progress(self):

144 if not self.todos:

145 return

146 

147 completed = len([t for t in self.todos if t["status"] == "completed"])

148 in_progress = len([t for t in self.todos if t["status"] == "in_progress"])

149 total = len(self.todos)

150 

151 print(f"\nProgress: {completed}/{total} completed")

152 print(f"Currently working on: {in_progress} task(s)\n")

153 

154 for i, todo in enumerate(self.todos):

155 icon = (

156 "✅"

157 if todo["status"] == "completed"

158 else "🔧"

159 if todo["status"] == "in_progress"

160 else "❌"

161 )

162 text = (

163 todo["activeForm"]

164 if todo["status"] == "in_progress"

165 else todo["content"]

166 )

167 print(f"{i + 1}. {icon} {text}")

168 

169 async def track_query(self, prompt: str):

170 async for message in query(prompt=prompt, options=ClaudeAgentOptions(max_turns=20)):

171 if isinstance(message, AssistantMessage):

172 for block in message.content:

173 if isinstance(block, ToolUseBlock) and block.name == "TodoWrite":

174 self.todos = block.input["todos"]

175 self.display_progress()

176 

177 

178 # Usage

179 tracker = TodoTracker()

180 await tracker.track_query("Build a complete authentication system with todos")

181 ```

182</CodeGroup>

183 

184## Dokumentasi Terkait

185 

186* [Referensi TypeScript SDK](/id/agent-sdk/typescript)

187* [Referensi Python SDK](/id/agent-sdk/python)

188* [Mode Streaming vs Mode Tunggal](/id/agent-sdk/streaming-vs-single-mode)

189* [Alat Kustom](/id/agent-sdk/custom-tools)

Details

41#### Parameter41#### Parameter

42 42 

43| Parameter | Tipe | Deskripsi |43| Parameter | Tipe | Deskripsi |

44| :-------- | :---------------------------------------------------------------- | :------------------------------------------------------------------- |44| :-------- | :--------------------------------------------------------------- | :------------------------------------------------------------------- |

45| `prompt` | `string \| AsyncIterable<`[`SDKUserMessage`](#sdkuser-message)`>` | Prompt input sebagai string atau async iterable untuk mode streaming |45| `prompt` | `string \| AsyncIterable<`[`SDKUserMessage`](#sdkusermessage)`>` | Prompt input sebagai string atau async iterable untuk mode streaming |

46| `options` | [`Options`](#options) | Objek konfigurasi opsional (lihat tipe Options di bawah) |46| `options` | [`Options`](#options) | Objek konfigurasi opsional (lihat tipe Options di bawah) |

47 47 

48#### Pengembalian48#### Pengembalian

49 49 

50Mengembalikan objek [`Query`](#query-object) yang memperluas `AsyncGenerator<`[`SDKMessage`](#sdk-message)`, void>` dengan metode tambahan.50Mengembalikan objek [`Query`](#query-object) yang memperluas `AsyncGenerator<`[`SDKMessage`](#sdkmessage)`, void>` dengan metode tambahan.

51 51 

52### `startup()`52### `startup()`

53 53 

54Pra-pemanasan subprocess CLI dengan menspawnya dan menyelesaikan handshake inisialisasi sebelum prompt tersedia. Handle [`WarmQuery`](#warm-query) yang dikembalikan menerima prompt nanti dan menulisnya ke proses yang sudah siap, sehingga panggilan `query()` pertama diselesaikan tanpa membayar biaya spawn dan inisialisasi subprocess secara inline.54Pra-pemanasan subprocess CLI dengan menspawnya dan menyelesaikan handshake inisialisasi sebelum prompt tersedia. Handle [`WarmQuery`](#warmquery) yang dikembalikan menerima prompt nanti dan menulisnya ke proses yang sudah siap, sehingga panggilan `query()` pertama diselesaikan tanpa membayar biaya spawn dan inisialisasi subprocess secara inline.

55 55 

56```typescript theme={null}56```typescript theme={null}

57function startup(params?: {57function startup(params?: {


69 69 

70#### Pengembalian70#### Pengembalian

71 71 

72Mengembalikan `Promise<`[`WarmQuery`](#warm-query)`>` yang diselesaikan setelah subprocess telah dispawn dan menyelesaikan handshake inisialisasinya.72Mengembalikan `Promise<`[`WarmQuery`](#warmquery)`>` yang diselesaikan setelah subprocess telah dispawn dan menyelesaikan handshake inisialisasinya.

73 73 

74#### Contoh74#### Contoh

75 75 


104#### Parameter104#### Parameter

105 105 

106| Parameter | Tipe | Deskripsi |106| Parameter | Tipe | Deskripsi |

107| :------------ | :------------------------------------------------------------------ | :----------------------------------------------------------------------------- |107| :------------ | :---------------------------------------------------------------- | :----------------------------------------------------------------------------- |

108| `name` | `string` | Nama tool |108| `name` | `string` | Nama tool |

109| `description` | `string` | Deskripsi tentang apa yang dilakukan tool |109| `description` | `string` | Deskripsi tentang apa yang dilakukan tool |

110| `inputSchema` | `Schema extends AnyZodRawShape` | Skema Zod yang mendefinisikan parameter input tool (mendukung Zod 3 dan Zod 4) |110| `inputSchema` | `Schema extends AnyZodRawShape` | Skema Zod yang mendefinisikan parameter input tool (mendukung Zod 3 dan Zod 4) |

111| `handler` | `(args, extra) => Promise<`[`CallToolResult`](#call-tool-result)`>` | Fungsi asinkron yang mengeksekusi logika tool |111| `handler` | `(args, extra) => Promise<`[`CallToolResult`](#calltoolresult)`>` | Fungsi asinkron yang mengeksekusi logika tool |

112| `extras` | `{ annotations?: `[`ToolAnnotations`](#tool-annotations)` }` | Anotasi tool MCP opsional yang memberikan petunjuk perilaku kepada klien |112| `extras` | `{ annotations?: `[`ToolAnnotations`](#toolannotations)` }` | Anotasi tool MCP opsional yang memberikan petunjuk perilaku kepada klien |

113 113 

114#### `ToolAnnotations`114#### `ToolAnnotations`

115 115 


186| `firstPrompt` | `string \| undefined` | Prompt pengguna bermakna pertama dalam sesi |186| `firstPrompt` | `string \| undefined` | Prompt pengguna bermakna pertama dalam sesi |

187| `gitBranch` | `string \| undefined` | Cabang Git di akhir sesi |187| `gitBranch` | `string \| undefined` | Cabang Git di akhir sesi |

188| `cwd` | `string \| undefined` | Direktori kerja untuk sesi |188| `cwd` | `string \| undefined` | Direktori kerja untuk sesi |

189| `tag` | `string \| undefined` | Tag sesi yang ditetapkan pengguna (lihat [`tagSession()`](#tag-session)) |189| `tag` | `string \| undefined` | Tag sesi yang ditetapkan pengguna (lihat [`tagSession()`](#tagsession)) |

190| `createdAt` | `number \| undefined` | Waktu pembuatan dalam milidetik sejak epoch, dari timestamp entri pertama |190| `createdAt` | `number \| undefined` | Waktu pembuatan dalam milidetik sejak epoch, dari timestamp entri pertama |

191 191 

192#### Contoh192#### Contoh


270| `sessionId` | `string` | required | UUID sesi yang akan dicari |270| `sessionId` | `string` | required | UUID sesi yang akan dicari |

271| `options.dir` | `string` | `undefined` | Jalur direktori proyek. Ketika dihilangkan, mencari di semua direktori proyek |271| `options.dir` | `string` | `undefined` | Jalur direktori proyek. Ketika dihilangkan, mencari di semua direktori proyek |

272 272 

273Mengembalikan [`SDKSessionInfo`](#return-type-sdk-session-info), atau `undefined` jika sesi tidak ditemukan.273Mengembalikan [`SDKSessionInfo`](#return-type-sdksessioninfo), atau `undefined` jika sesi tidak ditemukan.

274 274 

275### `renameSession()`275### `renameSession()`

276 276 


323| `abortController` | `AbortController` | `new AbortController()` | Pengontrol untuk membatalkan operasi |323| `abortController` | `AbortController` | `new AbortController()` | Pengontrol untuk membatalkan operasi |

324| `additionalDirectories` | `string[]` | `[]` | Direktori tambahan yang dapat diakses Claude |324| `additionalDirectories` | `string[]` | `[]` | Direktori tambahan yang dapat diakses Claude |

325| `agent` | `string` | `undefined` | Nama agen untuk thread utama. Agen harus didefinisikan dalam opsi `agents` atau dalam pengaturan |325| `agent` | `string` | `undefined` | Nama agen untuk thread utama. Agen harus didefinisikan dalam opsi `agents` atau dalam pengaturan |

326| `agents` | `Record<string, [`AgentDefinition`](#agent-definition)>` | `undefined` | Tentukan subagen secara terprogram |326| `agents` | `Record<string, [`AgentDefinition`](#agentdefinition)>` | `undefined` | Tentukan subagen secara terprogram |

327| `allowDangerouslySkipPermissions` | `boolean` | `false` | Aktifkan bypass izin. Diperlukan saat menggunakan `permissionMode: 'bypassPermissions'` |327| `allowDangerouslySkipPermissions` | `boolean` | `false` | Aktifkan bypass izin. Diperlukan saat menggunakan `permissionMode: 'bypassPermissions'` |

328| `allowedTools` | `string[]` | `[]` | Tool untuk auto-approve tanpa prompt. Ini tidak membatasi Claude hanya pada tool ini; tool yang tidak terdaftar jatuh ke `permissionMode` dan `canUseTool`. Gunakan `disallowedTools` untuk memblokir tool. Lihat [Izin](/id/agent-sdk/permissions#allow-and-deny-rules) |328| `allowedTools` | `string[]` | `[]` | Tool untuk auto-approve tanpa prompt. Ini tidak membatasi Claude hanya pada tool ini; tool yang tidak terdaftar jatuh ke `permissionMode` dan `canUseTool`. Gunakan `disallowedTools` untuk memblokir tool. Lihat [Izin](/id/agent-sdk/permissions#allow-and-deny-rules) |

329| `betas` | [`SdkBeta`](#sdk-beta)`[]` | `[]` | Aktifkan fitur beta |329| `betas` | [`SdkBeta`](#sdkbeta)`[]` | `[]` | Aktifkan fitur beta |

330| `canUseTool` | [`CanUseTool`](#can-use-tool) | `undefined` | Fungsi izin kustom untuk penggunaan tool |330| `canUseTool` | [`CanUseTool`](#canusetool) | `undefined` | Fungsi izin kustom untuk penggunaan tool |

331| `continue` | `boolean` | `false` | Lanjutkan percakapan terbaru |331| `continue` | `boolean` | `false` | Lanjutkan percakapan terbaru |

332| `cwd` | `string` | `process.cwd()` | Direktori kerja saat ini |332| `cwd` | `string` | `process.cwd()` | Direktori kerja saat ini |

333| `debug` | `boolean` | `false` | Aktifkan mode debug untuk proses Claude Code |333| `debug` | `boolean` | `false` | Aktifkan mode debug untuk proses Claude Code |


341| `extraArgs` | `Record<string, string \| null>` | `{}` | Argumen tambahan |341| `extraArgs` | `Record<string, string \| null>` | `{}` | Argumen tambahan |

342| `fallbackModel` | `string` | `undefined` | Model yang digunakan jika model utama gagal |342| `fallbackModel` | `string` | `undefined` | Model yang digunakan jika model utama gagal |

343| `forkSession` | `boolean` | `false` | Saat melanjutkan dengan `resume`, fork ke ID sesi baru alih-alih melanjutkan sesi asli |343| `forkSession` | `boolean` | `false` | Saat melanjutkan dengan `resume`, fork ke ID sesi baru alih-alih melanjutkan sesi asli |

344| `hooks` | `Partial<Record<`[`HookEvent`](#hook-event)`, `[`HookCallbackMatcher`](#hook-callback-matcher)`[]>>` | `{}` | Callback hook untuk event |344| `hooks` | `Partial<Record<`[`HookEvent`](#hookevent)`, `[`HookCallbackMatcher`](#hookcallbackmatcher)`[]>>` | `{}` | Callback hook untuk event |

345| `includePartialMessages` | `boolean` | `false` | Sertakan event pesan parsial |345| `includePartialMessages` | `boolean` | `false` | Sertakan event pesan parsial |

346| `maxBudgetUsd` | `number` | `undefined` | Hentikan query ketika estimasi biaya sisi klien mencapai nilai USD ini. Dibandingkan dengan estimasi yang sama seperti `total_cost_usd`; lihat [Lacak biaya dan penggunaan](/id/agent-sdk/cost-tracking) untuk peringatan akurasi |346| `maxBudgetUsd` | `number` | `undefined` | Hentikan query ketika estimasi biaya sisi klien mencapai nilai USD ini. Dibandingkan dengan estimasi yang sama seperti `total_cost_usd`; lihat [Lacak biaya dan penggunaan](/id/agent-sdk/cost-tracking) untuk peringatan akurasi |

347| `maxThinkingTokens` | `number` | `undefined` | *Deprecated:* Gunakan opsi `thinking` sebagai gantinya. Token maksimum untuk proses pemikiran |347| `maxThinkingTokens` | `number` | `undefined` | *Deprecated:* Gunakan opsi `thinking` sebagai gantinya. Token maksimum untuk proses pemikiran |

348| `maxTurns` | `number` | `undefined` | Putaran agen maksimum (perjalanan round-trip penggunaan tool) |348| `maxTurns` | `number` | `undefined` | Putaran agen maksimum (perjalanan round-trip penggunaan tool) |

349| `mcpServers` | `Record<string, [`McpServerConfig`](#mcp-server-config)>` | `{}` | Konfigurasi server MCP |349| `mcpServers` | `Record<string, [`McpServerConfig`](#mcpserverconfig)>` | `{}` | Konfigurasi server MCP |

350| `model` | `string` | Default dari CLI | Model Claude yang akan digunakan |350| `model` | `string` | Default dari CLI | Model Claude yang akan digunakan |

351| `outputFormat` | `{ type: 'json_schema', schema: JSONSchema }` | `undefined` | Tentukan format output untuk hasil agen. Lihat [Output terstruktur](/id/agent-sdk/structured-outputs) untuk detail |351| `outputFormat` | `{ type: 'json_schema', schema: JSONSchema }` | `undefined` | Tentukan format output untuk hasil agen. Lihat [Output terstruktur](/id/agent-sdk/structured-outputs) untuk detail |

352| `pathToClaudeCodeExecutable` | `string` | Auto-resolved dari biner asli bundel | Jalur ke executable Claude Code. Hanya diperlukan jika dependensi opsional dilewati selama instalasi atau platform Anda tidak dalam set yang didukung |352| `pathToClaudeCodeExecutable` | `string` | Auto-resolved dari biner asli bundel | Jalur ke executable Claude Code. Hanya diperlukan jika dependensi opsional dilewati selama instalasi atau platform Anda tidak dalam set yang didukung |

353| `permissionMode` | [`PermissionMode`](#permission-mode) | `'default'` | Mode izin untuk sesi |353| `permissionMode` | [`PermissionMode`](#permissionmode) | `'default'` | Mode izin untuk sesi |

354| `permissionPromptToolName` | `string` | `undefined` | Nama tool MCP untuk prompt izin |354| `permissionPromptToolName` | `string` | `undefined` | Nama tool MCP untuk prompt izin |

355| `persistSession` | `boolean` | `true` | Ketika `false`, menonaktifkan persistensi sesi ke disk. Sesi tidak dapat dilanjutkan nanti |355| `persistSession` | `boolean` | `true` | Ketika `false`, menonaktifkan persistensi sesi ke disk. Sesi tidak dapat dilanjutkan nanti |

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

357| `promptSuggestions` | `boolean` | `false` | Aktifkan saran prompt. Mengirimkan pesan `prompt_suggestion` setelah setiap putaran dengan prompt pengguna berikutnya yang diprediksi |357| `promptSuggestions` | `boolean` | `false` | Aktifkan saran prompt. Mengirimkan pesan `prompt_suggestion` setelah setiap putaran dengan prompt pengguna berikutnya yang diprediksi |

358| `resume` | `string` | `undefined` | ID sesi untuk dilanjutkan |358| `resume` | `string` | `undefined` | ID sesi untuk dilanjutkan |

359| `resumeSessionAt` | `string` | `undefined` | Lanjutkan sesi pada UUID pesan tertentu |359| `resumeSessionAt` | `string` | `undefined` | Lanjutkan sesi pada UUID pesan tertentu |

360| `sandbox` | [`SandboxSettings`](#sandbox-settings) | `undefined` | Konfigurasi perilaku sandbox secara terprogram. Lihat [Pengaturan sandbox](#sandbox-settings) untuk detail |360| `sandbox` | [`SandboxSettings`](#sandboxsettings) | `undefined` | Konfigurasi perilaku sandbox secara terprogram. Lihat [Pengaturan sandbox](#sandboxsettings) untuk detail |

361| `sessionId` | `string` | Auto-generated | Gunakan UUID tertentu untuk sesi alih-alih auto-generate |361| `sessionId` | `string` | Auto-generated | Gunakan UUID tertentu untuk sesi alih-alih auto-generate |

362| `sessionStore` | [`SessionStore`](/id/agent-sdk/session-storage#the-session-store-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) |362| `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) |

363| `settingSources` | [`SettingSource`](#setting-source)`[]` | 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) |363| `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) |

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

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

366| `strictMcpConfig` | `boolean` | `false` | Terapkan validasi MCP ketat |366| `strictMcpConfig` | `boolean` | `false` | Terapkan validasi MCP ketat |

367| `systemPrompt` | `string \| { type: 'preset'; preset: 'claude_code'; append?: string; excludeDynamicSections?: boolean }` | `undefined` (minimal prompt) | Konfigurasi prompt sistem. Lewatkan string untuk prompt kustom, atau `{ type: 'preset', preset: 'claude_code' }` untuk menggunakan prompt sistem Claude Code. Saat menggunakan bentuk objek preset, tambahkan `append` untuk memperluas dengan instruksi tambahan, dan atur `excludeDynamicSections: true` untuk memindahkan konteks per-sesi ke pesan pengguna pertama untuk [reuse prompt-cache yang lebih baik di seluruh mesin](/id/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines) |367| `systemPrompt` | `string \| { type: 'preset'; preset: 'claude_code'; append?: string; excludeDynamicSections?: boolean }` | `undefined` (minimal prompt) | Konfigurasi prompt sistem. Lewatkan string untuk prompt kustom, atau `{ type: 'preset', preset: 'claude_code' }` untuk menggunakan prompt sistem Claude Code. Saat menggunakan bentuk objek preset, tambahkan `append` untuk memperluas dengan instruksi tambahan, dan atur `excludeDynamicSections: true` untuk memindahkan konteks per-sesi ke pesan pengguna pertama untuk [reuse prompt-cache yang lebih baik di seluruh mesin](/id/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines) |

368| `thinking` | [`ThinkingConfig`](#thinking-config) | `{ type: 'adaptive' }` untuk model yang didukung | Mengontrol perilaku pemikiran/penalaran Claude. Lihat [`ThinkingConfig`](#thinking-config) untuk opsi |368| `thinking` | [`ThinkingConfig`](#thinkingconfig) | `{ type: 'adaptive' }` untuk model yang didukung | Mengontrol perilaku pemikiran/penalaran Claude. Lihat [`ThinkingConfig`](#thinkingconfig) untuk opsi |

369| `toolConfig` | [`ToolConfig`](#tool-config) | `undefined` | Konfigurasi untuk perilaku tool bawaan. Lihat [`ToolConfig`](#tool-config) untuk detail |369| `toolConfig` | [`ToolConfig`](#toolconfig) | `undefined` | Konfigurasi untuk perilaku tool bawaan. Lihat [`ToolConfig`](#toolconfig) untuk detail |

370| `tools` | `string[] \| { type: 'preset'; preset: 'claude_code' }` | `undefined` | Konfigurasi tool. Lewatkan array nama tool atau gunakan preset untuk mendapatkan tool default Claude Code |370| `tools` | `string[] \| { type: 'preset'; preset: 'claude_code' }` | `undefined` | Konfigurasi tool. Lewatkan array nama tool atau gunakan preset untuk mendapatkan tool default Claude Code |

371 371 

372### Objek `Query`372### Objek `Query`


410| `initializationResult()` | Mengembalikan hasil inisialisasi lengkap termasuk perintah yang didukung, model, info akun, dan konfigurasi gaya output |410| `initializationResult()` | Mengembalikan hasil inisialisasi lengkap termasuk perintah yang didukung, model, info akun, dan konfigurasi gaya output |

411| `supportedCommands()` | Mengembalikan perintah slash yang tersedia |411| `supportedCommands()` | Mengembalikan perintah slash yang tersedia |

412| `supportedModels()` | Mengembalikan model yang tersedia dengan info tampilan |412| `supportedModels()` | Mengembalikan model yang tersedia dengan info tampilan |

413| `supportedAgents()` | Mengembalikan subagen yang tersedia sebagai [`AgentInfo`](#agent-info)`[]` |413| `supportedAgents()` | Mengembalikan subagen yang tersedia sebagai [`AgentInfo`](#agentinfo)`[]` |

414| `mcpServerStatus()` | Mengembalikan status server MCP yang terhubung |414| `mcpServerStatus()` | Mengembalikan status server MCP yang terhubung |

415| `accountInfo()` | Mengembalikan informasi akun |415| `accountInfo()` | Mengembalikan informasi akun |

416| `reconnectMcpServer(serverName)` | Sambungkan kembali server MCP berdasarkan nama |416| `reconnectMcpServer(serverName)` | Sambungkan kembali server MCP berdasarkan nama |


493| `background` | Tidak | Jalankan agen ini sebagai tugas latar belakang non-blocking ketika dipanggil |493| `background` | Tidak | Jalankan agen ini sebagai tugas latar belakang non-blocking ketika dipanggil |

494| `memory` | Tidak | Sumber memori untuk agen ini: `'user'`, `'project'`, atau `'local'` |494| `memory` | Tidak | Sumber memori untuk agen ini: `'user'`, `'project'`, atau `'local'` |

495| `effort` | Tidak | Tingkat usaha penalaran untuk agen ini. Menerima tingkat bernama atau integer |495| `effort` | Tidak | Tingkat usaha penalaran untuk agen ini. Menerima tingkat bernama atau integer |

496| `permissionMode` | Tidak | Mode izin untuk eksekusi tool dalam agen ini. Lihat [`PermissionMode`](#permission-mode) |496| `permissionMode` | Tidak | Mode izin untuk eksekusi tool dalam agen ini. Lihat [`PermissionMode`](#permissionmode) |

497| `criticalSystemReminder_EXPERIMENTAL` | Tidak | Eksperimental: Pengingat kritis ditambahkan ke prompt sistem |497| `criticalSystemReminder_EXPERIMENTAL` | Tidak | Eksperimental: Pengingat kritis ditambahkan ke prompt sistem |

498 498 

499### `AgentMcpServerSpec`499### `AgentMcpServerSpec`


626 | "default" // Perilaku izin standar626 | "default" // Perilaku izin standar

627 | "acceptEdits" // Auto-accept edit file627 | "acceptEdits" // Auto-accept edit file

628 | "bypassPermissions" // Bypass semua pemeriksaan izin628 | "bypassPermissions" // Bypass semua pemeriksaan izin

629 | "plan" // Mode perencanaan - tidak ada eksekusi629 | "plan" // Mode perencanaan - tool read-only saja

630 | "dontAsk" // Jangan prompt untuk izin, tolak jika tidak pre-approved630 | "dontAsk" // Jangan prompt untuk izin, tolak jika tidak pre-approved

631 | "auto"; // Gunakan classifier model untuk approve atau deny setiap tool call631 | "auto"; // Gunakan classifier model untuk approve atau deny setiap tool call

632```632```


651```651```

652 652 

653| Opsi | Tipe | Deskripsi |653| Opsi | Tipe | Deskripsi |

654| :--------------- | :------------------------------------------- | :------------------------------------------------------------------------ |654| :--------------- | :------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

655| `signal` | `AbortSignal` | Signaled jika operasi harus dibatalkan |655| `signal` | `AbortSignal` | Signaled jika operasi harus dibatalkan |

656| `suggestions` | [`PermissionUpdate`](#permission-update)`[]` | Saran pembaruan izin sehingga pengguna tidak diprompt lagi untuk tool ini |656| `suggestions` | [`PermissionUpdate`](#permissionupdate)`[]` | Saran pembaruan izin sehingga pengguna tidak diprompt lagi untuk tool ini. Prompt Bash menyertakan saran dengan [destination](#permissionupdatedestination) `localSettings`, jadi mengembalikannya dalam `updatedPermissions` menulis aturan ke `.claude/settings.local.json` dan bertahan di seluruh sesi. |

657| `blockedPath` | `string` | Jalur file yang memicu permintaan izin, jika berlaku |657| `blockedPath` | `string` | Jalur file yang memicu permintaan izin, jika berlaku |

658| `decisionReason` | `string` | Menjelaskan mengapa permintaan izin ini dipicu |658| `decisionReason` | `string` | Menjelaskan mengapa permintaan izin ini dipicu |

659| `toolUseID` | `string` | Pengenal unik untuk tool call spesifik ini dalam pesan asisten |659| `toolUseID` | `string` | Pengenal unik untuk tool call spesifik ini dalam pesan asisten |


2379 | McpClaudeAIProxyServerConfig;2379 | McpClaudeAIProxyServerConfig;

2380```2380```

2381 2381 

2382Lihat [`McpServerConfig`](#mcp-server-config) untuk detail tentang setiap tipe transport.2382Lihat [`McpServerConfig`](#mcpserverconfig) untuk detail tentang setiap tipe transport.

2383 2383 

2384### `AccountInfo`2384### `AccountInfo`

2385 2385 


2825```2825```

2826 2826 

2827| Properti | Tipe | Default | Deskripsi |2827| Properti | Tipe | Default | Deskripsi |

2828| :-------------------------- | :------------------------------------------------------ | :---------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2828| :-------------------------- | :---------------------------------------------------- | :---------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

2829| `enabled` | `boolean` | `false` | Aktifkan mode sandbox untuk eksekusi perintah |2829| `enabled` | `boolean` | `false` | Aktifkan mode sandbox untuk eksekusi perintah |

2830| `autoAllowBashIfSandboxed` | `boolean` | `true` | Auto-approve perintah bash ketika sandbox diaktifkan |2830| `autoAllowBashIfSandboxed` | `boolean` | `true` | Auto-approve perintah bash ketika sandbox diaktifkan |

2831| `excludedCommands` | `string[]` | `[]` | Perintah yang selalu bypass pembatasan sandbox (misalnya, `['docker']`). Ini berjalan unsandboxed secara otomatis tanpa keterlibatan model |2831| `excludedCommands` | `string[]` | `[]` | Perintah yang selalu bypass pembatasan sandbox (misalnya, `['docker']`). Ini berjalan unsandboxed secara otomatis tanpa keterlibatan model |

2832| `allowUnsandboxedCommands` | `boolean` | `true` | Izinkan model untuk meminta menjalankan perintah di luar sandbox. Ketika `true`, model dapat mengatur `dangerouslyDisableSandbox` dalam input tool, yang jatuh kembali ke [sistem izin](#permissions-fallback-for-unsandboxed-commands) |2832| `allowUnsandboxedCommands` | `boolean` | `true` | Izinkan model untuk meminta menjalankan perintah di luar sandbox. Ketika `true`, model dapat mengatur `dangerouslyDisableSandbox` dalam input tool, yang jatuh kembali ke [sistem izin](#permissions-fallback-for-unsandboxed-commands) |

2833| `network` | [`SandboxNetworkConfig`](#sandbox-network-config) | `undefined` | Konfigurasi sandbox spesifik jaringan |2833| `network` | [`SandboxNetworkConfig`](#sandboxnetworkconfig) | `undefined` | Konfigurasi sandbox spesifik jaringan |

2834| `filesystem` | [`SandboxFilesystemConfig`](#sandbox-filesystem-config) | `undefined` | Konfigurasi sandbox spesifik filesystem untuk pembatasan baca/tulis |2834| `filesystem` | [`SandboxFilesystemConfig`](#sandboxfilesystemconfig) | `undefined` | Konfigurasi sandbox spesifik filesystem untuk pembatasan baca/tulis |

2835| `ignoreViolations` | `Record<string, string[]>` | `undefined` | Peta kategori pelanggaran ke pola untuk diabaikan (misalnya, `{ file: ['/tmp/*'], network: ['localhost'] }`) |2835| `ignoreViolations` | `Record<string, string[]>` | `undefined` | Peta kategori pelanggaran ke pola untuk diabaikan (misalnya, `{ file: ['/tmp/*'], network: ['localhost'] }`) |

2836| `enableWeakerNestedSandbox` | `boolean` | `false` | Aktifkan sandbox bersarang yang lebih lemah untuk kompatibilitas |2836| `enableWeakerNestedSandbox` | `boolean` | `false` | Aktifkan sandbox bersarang yang lebih lemah untuk kompatibilitas |

2837| `ripgrep` | `{ command: string; args?: string[] }` | `undefined` | Konfigurasi biner ripgrep kustom untuk lingkungan sandbox |2837| `ripgrep` | `{ command: string; args?: string[] }` | `undefined` | Konfigurasi biner ripgrep kustom untuk lingkungan sandbox |

data-usage.md +1 −1

Details

67 67 

68Diagram di bawah menunjukkan bagaimana Claude Code terhubung ke layanan eksternal selama instalasi dan operasi normal. Garis solid menunjukkan koneksi yang diperlukan, sementara garis putus-putus mewakili alur data opsional atau yang dimulai pengguna.68Diagram di bawah menunjukkan bagaimana Claude Code terhubung ke layanan eksternal selama instalasi dan operasi normal. Garis solid menunjukkan koneksi yang diperlukan, sementara garis putus-putus mewakili alur data opsional atau yang dimulai pengguna.

69 69 

70<img src="https://mintcdn.com/claude-code/YcBW2H7CArGcduPb/images/claude-code-data-flow.svg?fit=max&auto=format&n=YcBW2H7CArGcduPb&q=85&s=b600a89f84fc86f9ff7be00a466c0635" alt="Diagram menunjukkan koneksi eksternal Claude Code: install/update terhubung ke server distribusi, dan permintaan pengguna terhubung ke layanan Anthropic termasuk auth Console, public-api, dan secara opsional Statsig, Sentry, dan pelaporan bug" width="720" height="520" data-path="images/claude-code-data-flow.svg" />70<img src="https://mintcdn.com/claude-code/RcOyXc06Ja8cuvMZ/images/claude-code-data-flow.svg?fit=max&auto=format&n=RcOyXc06Ja8cuvMZ&q=85&s=b5be40abf333defe984993af89546c19" alt="Diagram menunjukkan koneksi eksternal Claude Code: install/update terhubung ke server distribusi, dan permintaan pengguna terhubung ke layanan Anthropic termasuk auth Console, public-api, dan secara opsional Statsig, Sentry, dan pelaporan bug" width="720" height="520" data-path="images/claude-code-data-flow.svg" />

71 71 

72Claude Code berjalan secara lokal. Untuk berinteraksi dengan LLM, Claude Code mengirimkan data melalui jaringan. Data ini mencakup semua prompt pengguna dan output model, dienkripsi dalam transit melalui TLS 1.2+. Claude Code kompatibel dengan sebagian besar VPN dan proxy LLM populer.72Claude Code berjalan secara lokal. Untuk berinteraksi dengan LLM, Claude Code mengirimkan data melalui jaringan. Data ini mencakup semua prompt pengguna dan output model, dienkripsi dalam transit melalui TLS 1.2+. Claude Code kompatibel dengan sebagian besar VPN dan proxy LLM populer.

73 73 

desktop.md +5 −3

Details

282 282 

283### Bekerja secara paralel dengan sesi283### Bekerja secara paralel dengan sesi

284 284 

285Klik **+ New session** di sidebar, atau tekan **Cmd+N** di macOS atau **Ctrl+N** di Windows, untuk bekerja pada beberapa tugas secara paralel. Tekan **Ctrl+Tab** dan **Ctrl+Shift+Tab** untuk bersiklus melalui sesi di sidebar. Untuk repositori Git, setiap sesi mendapatkan salinan proyek Anda yang terisolasi menggunakan [Git worktrees](/id/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees), sehingga perubahan dalam satu sesi tidak mempengaruhi sesi lain sampai Anda melakukan commit.285Klik **+ New session** di sidebar, atau tekan **Cmd+N** di macOS atau **Ctrl+N** di Windows, untuk bekerja pada beberapa tugas secara paralel. Tekan **Ctrl+Tab** dan **Ctrl+Shift+Tab** untuk bersiklus melalui sesi di sidebar. Untuk repositori Git, setiap sesi mendapatkan salinan proyek Anda yang terisolasi menggunakan [Git worktrees](/id/worktrees), sehingga perubahan dalam satu sesi tidak mempengaruhi sesi lain sampai Anda melakukan commit.

286 

287Untuk melihat dua sesi sekaligus, tahan **Cmd** di macOS atau **Ctrl** di Windows dan klik sesi di sidebar. Sesi terbuka di pane kedua di samping yang sudah Anda buka. Saat split aktif, mengklik sesi sidebar lain mengganti pane mana pun yang memiliki fokus. Tekan **Cmd+\\** di macOS atau **Ctrl+\\** di Windows untuk menutup pane yang difokuskan dan kembali ke sesi tunggal.

286 288 

287Worktrees disimpan di `<project-root>/.claude/worktrees/` secara default. Anda dapat mengubah ini ke direktori kustom di Settings → Claude Code di bawah "Worktree location". Anda juga dapat mengatur awalan cabang yang ditambahkan ke setiap nama cabang worktree, yang berguna untuk menjaga cabang yang dibuat Claude tetap terorganisir. Untuk menghapus worktree ketika selesai, arahkan ke sesi di sidebar dan klik ikon archive. Untuk memiliki sesi mengarsipkan diri mereka sendiri ketika pull request mereka digabungkan atau ditutup, aktifkan **Auto-archive after PR merge or close** di Settings → Claude Code. Auto-archive hanya berlaku untuk sesi lokal yang telah selesai berjalan.289Worktrees disimpan di `<project-root>/.claude/worktrees/` secara default. Anda dapat mengubah ini ke direktori kustom di Settings → Claude Code di bawah "Worktree location". Anda juga dapat mengatur awalan cabang yang ditambahkan ke setiap nama cabang worktree, yang berguna untuk menjaga cabang yang dibuat Claude tetap terorganisir. Untuk menghapus worktree ketika selesai, arahkan ke sesi di sidebar dan klik ikon archive. Untuk memiliki sesi mengarsipkan diri mereka sendiri ketika pull request mereka digabungkan atau ditutup, aktifkan **Auto-archive after PR merge or close** di Settings → Claude Code. Auto-archive hanya berlaku untuk sesi lokal yang telah selesai berjalan.

288 290 

289Untuk menyertakan file yang diabaikan git seperti `.env` di worktree baru, buat file [`.worktreeinclude`](/id/common-workflows#copy-gitignored-files-to-worktrees) di root proyek Anda.291Untuk menyertakan file yang diabaikan git seperti `.env` di worktree baru, buat file [`.worktreeinclude`](/id/worktrees#copy-gitignored-files-into-worktrees) di root proyek Anda.

290 292 

291<Note>293<Note>

292 Isolasi sesi memerlukan [Git](https://git-scm.com/downloads). Sebagian besar Mac menyertakan Git secara default. Jalankan `git --version` di Terminal untuk memeriksa. Di Windows, Git diperlukan agar tab Code berfungsi: [unduh Git untuk Windows](https://git-scm.com/downloads/win), pasang, dan mulai ulang aplikasi. Jika Anda mengalami kesalahan Git, tanyakan Claude di tab [Cowork](https://claude.com/product/cowork) untuk membantu memecahkan masalah setup Anda.294 Isolasi sesi memerlukan [Git](https://git-scm.com/downloads). Sebagian besar Mac menyertakan Git secara default. Jalankan `git --version` di Terminal untuk memeriksa. Di Windows, Git diperlukan agar tab Code berfungsi: [unduh Git untuk Windows](https://git-scm.com/downloads/win), pasang, dan mulai ulang aplikasi. Jika Anda mengalami kesalahan Git, tanyakan Claude di tab [Cowork](https://claude.com/product/cowork) untuk membantu memecahkan masalah setup Anda.


516 518 

517Untuk mengatur variabel lingkungan untuk sesi lokal dan dev server di platform apa pun, buka dropdown lingkungan di kotak prompt, arahkan ke **Local**, dan klik ikon gear untuk membuka editor lingkungan lokal. Variabel yang Anda simpan di sini disimpan terenkripsi di mesin Anda dan berlaku untuk setiap sesi lokal dan server pratinjau yang Anda mulai. Anda juga dapat menambahkan variabel ke kunci `env` di file `~/.claude/settings.json` Anda, meskipun ini hanya mencapai sesi Claude dan bukan dev server. Lihat [environment variables](/id/env-vars) untuk daftar lengkap variabel yang didukung.519Untuk mengatur variabel lingkungan untuk sesi lokal dan dev server di platform apa pun, buka dropdown lingkungan di kotak prompt, arahkan ke **Local**, dan klik ikon gear untuk membuka editor lingkungan lokal. Variabel yang Anda simpan di sini disimpan terenkripsi di mesin Anda dan berlaku untuk setiap sesi lokal dan server pratinjau yang Anda mulai. Anda juga dapat menambahkan variabel ke kunci `env` di file `~/.claude/settings.json` Anda, meskipun ini hanya mencapai sesi Claude dan bukan dev server. Lihat [environment variables](/id/env-vars) untuk daftar lengkap variabel yang didukung.

518 520 

519[Extended thinking](/id/common-workflows#use-extended-thinking-thinking-mode) diaktifkan secara default, yang meningkatkan kinerja pada tugas penalaran kompleks tetapi menggunakan token tambahan. Untuk menonaktifkan pemikiran sepenuhnya, atur `MAX_THINKING_TOKENS` ke `0` di editor lingkungan lokal. Pada model dengan [adaptive reasoning](/id/model-config#adjust-effort-level), nilai `MAX_THINKING_TOKENS` apa pun yang lain diabaikan karena adaptive reasoning mengontrol kedalaman pemikiran sebagai gantinya. Pada Opus 4.6 dan Sonnet 4.6, atur `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` ke `1` untuk menggunakan anggaran pemikiran tetap; Opus 4.7 selalu menggunakan adaptive reasoning dan tidak memiliki mode anggaran tetap.521[Extended thinking](/id/model-config#extended-thinking) diaktifkan secara default, yang meningkatkan kinerja pada tugas penalaran kompleks tetapi menggunakan token tambahan. Untuk menonaktifkan pemikiran sepenuhnya, atur `MAX_THINKING_TOKENS` ke `0` di editor lingkungan lokal. Pada model dengan [adaptive reasoning](/id/model-config#adjust-effort-level), nilai `MAX_THINKING_TOKENS` apa pun yang lain diabaikan karena adaptive reasoning mengontrol kedalaman pemikiran sebagai gantinya. Pada Opus 4.6 dan Sonnet 4.6, atur `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` ke `1` untuk menggunakan anggaran pemikiran tetap; Opus 4.7 selalu menggunakan adaptive reasoning dan tidak memiliki mode anggaran tetap.

520 522 

521### Remote sessions523### Remote sessions

522 524 

Details

12 Untuk cara loop agentic inti bekerja, lihat [Cara Claude Code Bekerja](/id/how-claude-code-works).12 Untuk cara loop agentic inti bekerja, lihat [Cara Claude Code Bekerja](/id/how-claude-code-works).

13</Note>13</Note>

14 14 

15**Baru di Claude Code?** Mulai dengan [CLAUDE.md](/id/memory) untuk konvensi proyek. Tambahkan ekstensi lain sesuai kebutuhan Anda.15**Baru di Claude Code?** Mulai dengan [CLAUDE.md](/id/memory) untuk konvensi proyek, kemudian tambahkan ekstensi lain [saat pemicu spesifik muncul](#build-your-setup-over-time).

16 16 

17## Ikhtisar17## Ikhtisar

18 18 


23* **[MCP](/id/mcp)** menghubungkan Claude ke layanan dan alat eksternal23* **[MCP](/id/mcp)** menghubungkan Claude ke layanan dan alat eksternal

24* **[Subagents](/id/sub-agents)** menjalankan loop mereka sendiri dalam konteks terisolasi, mengembalikan ringkasan24* **[Subagents](/id/sub-agents)** menjalankan loop mereka sendiri dalam konteks terisolasi, mengembalikan ringkasan

25* **[Agent teams](/id/agent-teams)** mengoordinasikan beberapa sesi independen dengan tugas bersama dan pesan peer-to-peer25* **[Agent teams](/id/agent-teams)** mengoordinasikan beberapa sesi independen dengan tugas bersama dan pesan peer-to-peer

26* **[Hooks](/id/hooks)** berjalan di luar loop sepenuhnya sebagai skrip deterministik26* **[Hooks](/id/hooks-guide)** berjalan pada acara siklus hidup dan dapat menjalankan skrip, permintaan HTTP, prompt, atau subagent

27* **[Plugins](/id/plugins)** dan **[marketplaces](/id/plugin-marketplaces)** mengemas dan mendistribusikan fitur-fitur ini27* **[Plugins](/id/plugins)** dan **[marketplaces](/id/plugin-marketplaces)** mengemas dan mendistribusikan fitur-fitur ini

28 28 

29[Skills](/id/skills) adalah ekstensi paling fleksibel. Skill adalah file markdown yang berisi pengetahuan, alur kerja, atau instruksi. Anda dapat memanggil skills dengan perintah seperti `/deploy`, atau Claude dapat memuatnya secara otomatis ketika relevan. Skills dapat berjalan dalam percakapan Anda saat ini atau dalam konteks terisolasi melalui subagents.29[Skills](/id/skills) adalah ekstensi paling fleksibel. Skill adalah file markdown yang berisi pengetahuan, alur kerja, atau instruksi. Anda dapat memanggil skills dengan perintah seperti `/deploy`, atau Claude dapat memuatnya secara otomatis ketika relevan. Skills dapat berjalan dalam percakapan Anda saat ini atau dalam konteks terisolasi melalui subagents.


33Fitur berkisar dari konteks yang selalu aktif yang Claude lihat setiap sesi, hingga kemampuan on-demand yang dapat Anda atau Claude panggil, hingga otomasi latar belakang yang berjalan pada acara tertentu. Tabel di bawah menunjukkan apa yang tersedia dan kapan masing-masing masuk akal.33Fitur berkisar dari konteks yang selalu aktif yang Claude lihat setiap sesi, hingga kemampuan on-demand yang dapat Anda atau Claude panggil, hingga otomasi latar belakang yang berjalan pada acara tertentu. Tabel di bawah menunjukkan apa yang tersedia dan kapan masing-masing masuk akal.

34 34 

35| Fitur | Apa yang dilakukannya | Kapan menggunakannya | Contoh |35| Fitur | Apa yang dilakukannya | Kapan menggunakannya | Contoh |

36| ---------------------------------- | ------------------------------------------------------------------ | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |36| ---------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |

37| **CLAUDE.md** | Konteks persisten dimuat setiap percakapan | Konvensi proyek, aturan "selalu lakukan X" | "Gunakan pnpm, bukan npm. Jalankan tes sebelum commit." |37| **CLAUDE.md** | Konteks persisten dimuat setiap percakapan | Konvensi proyek, aturan "selalu lakukan X" | "Gunakan pnpm, bukan npm. Jalankan tes sebelum commit." |

38| **Skill** | Instruksi, pengetahuan, dan alur kerja yang dapat digunakan Claude | Konten yang dapat digunakan kembali, dokumen referensi, tugas yang dapat diulang | `/deploy` menjalankan daftar periksa deployment Anda; skill dokumen API dengan pola endpoint |38| **Skill** | Instruksi, pengetahuan, dan alur kerja yang dapat digunakan Claude | Konten yang dapat digunakan kembali, dokumen referensi, tugas yang dapat diulang | `/deploy` menjalankan daftar periksa deployment Anda; skill dokumen API dengan pola endpoint |

39| **Subagent** | Konteks eksekusi terisolasi yang mengembalikan hasil ringkasan | Isolasi konteks, tugas paralel, pekerja khusus | Tugas penelitian yang membaca banyak file tetapi hanya mengembalikan temuan kunci |39| **Subagent** | Konteks eksekusi terisolasi yang mengembalikan hasil ringkasan | Isolasi konteks, tugas paralel, pekerja khusus | Tugas penelitian yang membaca banyak file tetapi hanya mengembalikan temuan kunci |

40| **[Agent teams](/id/agent-teams)** | Mengoordinasikan beberapa sesi Claude Code independen | Penelitian paralel, pengembangan fitur baru, debugging dengan hipotesis bersaing | Spawn reviewer untuk memeriksa keamanan, performa, dan tes secara bersamaan |40| **[Agent teams](/id/agent-teams)** | Mengoordinasikan beberapa sesi Claude Code independen | Penelitian paralel, pengembangan fitur baru, debugging dengan hipotesis bersaing | Spawn reviewer untuk memeriksa keamanan, performa, dan tes secara bersamaan |

41| **MCP** | Terhubung ke layanan eksternal | Data atau tindakan eksternal | Kueri database Anda, posting ke Slack, kontrol browser |41| **MCP** | Terhubung ke layanan eksternal | Data atau tindakan eksternal | Kueri database Anda, posting ke Slack, kontrol browser |

42| **Hook** | Skrip deterministik yang berjalan pada acara | Otomasi yang dapat diprediksi, tidak ada LLM yang terlibat | Jalankan ESLint setelah setiap edit file |42| **Hook** | Skrip, permintaan HTTP, prompt, atau subagent yang dipicu oleh acara | Otomasi yang harus berjalan pada setiap acara yang cocok | Jalankan ESLint setelah setiap edit file |

43 43 

44**[Plugins](/id/plugins)** adalah lapisan pengemasan. Plugin menggabungkan skills, hooks, subagents, dan MCP servers menjadi satu unit yang dapat diinstal. Plugin skills memiliki namespace (seperti `/my-plugin:review`) sehingga beberapa plugin dapat hidup berdampingan. Gunakan plugins ketika Anda ingin menggunakan kembali setup yang sama di beberapa repositori atau mendistribusikan ke orang lain melalui **[marketplace](/id/plugin-marketplaces)**.44**[Plugins](/id/plugins)** adalah lapisan pengemasan. Plugin menggabungkan skills, hooks, subagents, dan MCP servers menjadi satu unit yang dapat diinstal. Plugin skills memiliki namespace (seperti `/my-plugin:review`) sehingga beberapa plugin dapat hidup berdampingan. Gunakan plugins ketika Anda ingin menggunakan kembali setup yang sama di beberapa repositori atau mendistribusikan ke orang lain melalui **[marketplace](/id/plugin-marketplaces)**.

45 45 

46### Bangun setup Anda seiring waktu

47 

48Anda tidak perlu mengonfigurasi semuanya di awal. Setiap fitur memiliki pemicu yang dapat dikenali, dan sebagian besar tim menambahkannya dalam urutan yang kira-kira seperti ini:

49 

50| Pemicu | Tambahkan |

51| :---------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- |

52| Claude mendapatkan konvensi atau perintah yang salah dua kali | Tambahkan ke [CLAUDE.md](/id/memory) |

53| Anda terus mengetik prompt yang sama untuk memulai tugas | Simpan sebagai [skill](/id/skills) yang dapat dipanggil pengguna |

54| Anda menempel playbook yang sama atau prosedur multi-langkah ke chat untuk ketiga kalinya | Tangkap sebagai [skill](/id/skills) |

55| Anda terus menyalin data dari tab browser yang Claude tidak bisa lihat | Hubungkan sistem itu sebagai [server MCP](/id/mcp) |

56| Tugas sampingan membanjiri percakapan Anda dengan output yang tidak akan Anda referensikan lagi | Arahkan melalui [subagent](/id/sub-agents) |

57| Anda ingin sesuatu terjadi setiap kali tanpa bertanya | Tulis [hook](/id/hooks-guide) |

58| Repositori kedua membutuhkan setup yang sama | Paket sebagai [plugin](/id/plugins) |

59 

60Pemicu yang sama memberi tahu Anda kapan harus memperbarui apa yang sudah Anda miliki. Kesalahan berulang atau komentar tinjauan berulang adalah edit CLAUDE.md, bukan koreksi satu kali dalam chat. Alur kerja yang terus Anda sesuaikan dengan tangan adalah skill yang memerlukan revisi lain.

61 

46### Bandingkan fitur serupa62### Bandingkan fitur serupa

47 63 

48Beberapa fitur dapat terlihat serupa. Berikut cara membedakannya.64Beberapa fitur dapat terlihat serupa. Berikut cara membedakannya.


55 * **Subagents** adalah pekerja terisolasi yang berjalan terpisah dari percakapan utama Anda71 * **Subagents** adalah pekerja terisolasi yang berjalan terpisah dari percakapan utama Anda

56 72 

57 | Aspek | Skill | Subagent |73 | Aspek | Skill | Subagent |

58 | ----------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------------------- |74 | ----------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------------------- |

59 | **Apa itu** | Instruksi, pengetahuan, atau alur kerja yang dapat digunakan kembali | Pekerja terisolasi dengan konteksnya sendiri |75 | **Apa itu** | Instruksi, pengetahuan, atau alur kerja yang dapat digunakan kembali | Pekerja terisolasi dengan konteksnya sendiri |

60 | **Manfaat utama** | Bagikan konten di seluruh konteks | Isolasi konteks. Pekerjaan terjadi secara terpisah, hanya ringkasan yang kembali |76 | **Manfaat utama** | Bagikan konten di seluruh konteks | Isolasi konteks. Pekerjaan terjadi secara terpisah, hanya ringkasan yang kembali |

77 | **Dampak [context window](/id/context-window)** | Menambah jendela utama Anda | Menggunakan jendela terpisah dengan token input dan output sendiri |

61 | **Terbaik untuk** | Materi referensi, alur kerja yang dapat dipanggil | Tugas yang membaca banyak file, pekerjaan paralel, pekerja khusus |78 | **Terbaik untuk** | Materi referensi, alur kerja yang dapat dipanggil | Tugas yang membaca banyak file, pekerjaan paralel, pekerja khusus |

62 79 

63 **Skills dapat berupa referensi atau tindakan.** Skills referensi memberikan pengetahuan yang Claude gunakan sepanjang sesi Anda (seperti panduan gaya API Anda). Skills tindakan memberi tahu Claude untuk melakukan sesuatu yang spesifik (seperti `/deploy` yang menjalankan alur kerja deployment Anda).80 **Skills dapat berupa referensi atau tindakan.** Skills referensi memberikan pengetahuan yang Claude gunakan sepanjang sesi Anda (seperti panduan gaya API Anda). Skills tindakan memberi tahu Claude untuk melakukan sesuatu yang spesifik (seperti `/deploy` yang menjalankan alur kerja deployment Anda).


142 159 

143 Contoh: Server MCP menghubungkan Claude ke database Anda. Skill mengajarkan Claude model data Anda, pola kueri umum, dan tabel mana yang digunakan untuk tugas berbeda.160 Contoh: Server MCP menghubungkan Claude ke database Anda. Skill mengajarkan Claude model data Anda, pola kueri umum, dan tabel mana yang digunakan untuk tugas berbeda.

144 </Tab>161 </Tab>

162 

163 <Tab title="Hook vs Skill">

164 Hook berjalan pada acara siklus hidup; skill dimuat ke dalam konteks untuk Claude terapkan.

165 

166 | Aspek | Hook | Skill |

167 | ----------------- | ------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |

168 | **Berjalan** | Perintah shell, permintaan HTTP, prompt LLM, atau subagent | Instruksi yang Claude baca dan ikuti |

169 | **Dipicu oleh** | [Acara siklus hidup](/id/hooks#hook-events) seperti `PostToolUse` atau `SessionStart` | Anda mengetik `/<name>`, atau Claude mencocokkan deskripsi dengan tugas Anda |

170 | **Determinisme** | Selalu berjalan pada acaranya; pemicu dijamin | Claude menginterpretasikan instruksi; hasil dapat bervariasi |

171 | **Biaya konteks** | Nol kecuali hook mengembalikan output | Deskripsi dimuat setiap sesi; konten penuh dimuat saat digunakan |

172 | **Terbaik untuk** | Linting setelah edit, memblokir perintah yang tidak aman, logging, notifikasi | Alur kerja yang memerlukan penalaran, materi referensi, tugas multi-langkah |

173 

174 **Gunakan hook** ketika tindakan harus terjadi dengan cara yang sama setiap kali dan tidak perlu Claude berpikir. Misalnya: format saat simpan, tolak `rm -rf /`, posting pesan Slack ketika sesi berakhir.

175 

176 **Gunakan skill** ketika Claude harus memutuskan cara menerapkan langkah-langkahnya, atau ketika kontennya adalah pengetahuan daripada skrip. Misalnya: daftar periksa `/release`, panduan gaya API Anda, playbook debugging.

177 

178 **Letakkan guardrails di hooks.** Instruksi seperti "jangan pernah edit `.env`" di CLAUDE.md atau skill adalah permintaan, bukan jaminan. Hook `PreToolUse` yang memblokir edit adalah penegakan. Jika aturan harus berlaku setiap kali, buat hook daripada instruksi prompt.

179 

180 **Output hook mendarat di konteks.** Hook `PostToolUse` yang menjalankan linter Anda memberi umpan balik hasil sebagai teks yang Claude baca; skill `/fix-lint` memberi tahu Claude cara menyelesaikannya.

181 </Tab>

145</Tabs>182</Tabs>

146 183 

147### Pahami bagaimana fitur berlapis184### Pahami bagaimana fitur berlapis


151* **File CLAUDE.md** bersifat aditif: semua tingkat berkontribusi konten ke konteks Claude secara bersamaan. File dari direktori kerja Anda dan di atas dimuat saat peluncuran; subdirektori dimuat saat Anda bekerja di dalamnya. Ketika instruksi bertentangan, Claude menggunakan penilaian untuk merekonsiliasi mereka, dengan instruksi yang lebih spesifik biasanya mengambil alih. Lihat [bagaimana file CLAUDE.md dimuat](/id/memory#how-claudemd-files-load).188* **File CLAUDE.md** bersifat aditif: semua tingkat berkontribusi konten ke konteks Claude secara bersamaan. File dari direktori kerja Anda dan di atas dimuat saat peluncuran; subdirektori dimuat saat Anda bekerja di dalamnya. Ketika instruksi bertentangan, Claude menggunakan penilaian untuk merekonsiliasi mereka, dengan instruksi yang lebih spesifik biasanya mengambil alih. Lihat [bagaimana file CLAUDE.md dimuat](/id/memory#how-claudemd-files-load).

152* **Skills dan subagents** menimpa berdasarkan nama: ketika nama yang sama ada di beberapa tingkat, satu definisi menang berdasarkan prioritas (terkelola > pengguna > proyek untuk skills; terkelola > bendera CLI > proyek > pengguna > plugin untuk subagents). Plugin skills adalah [namespaced](/id/plugins#add-skills-to-your-plugin) untuk menghindari konflik. Lihat [penemuan skill](/id/skills#where-skills-live) dan [cakupan subagent](/id/sub-agents#choose-the-subagent-scope).189* **Skills dan subagents** menimpa berdasarkan nama: ketika nama yang sama ada di beberapa tingkat, satu definisi menang berdasarkan prioritas (terkelola > pengguna > proyek untuk skills; terkelola > bendera CLI > proyek > pengguna > plugin untuk subagents). Plugin skills adalah [namespaced](/id/plugins#add-skills-to-your-plugin) untuk menghindari konflik. Lihat [penemuan skill](/id/skills#where-skills-live) dan [cakupan subagent](/id/sub-agents#choose-the-subagent-scope).

153* **Server MCP** menimpa berdasarkan nama: lokal > proyek > pengguna. Lihat [cakupan MCP](/id/mcp#scope-hierarchy-and-precedence).190* **Server MCP** menimpa berdasarkan nama: lokal > proyek > pengguna. Lihat [cakupan MCP](/id/mcp#scope-hierarchy-and-precedence).

154* **Hooks** bergabung: semua hook terdaftar api untuk acara pencocokan mereka terlepas dari sumber. Lihat [hooks](/id/hooks).191* **Hooks** bergabung: semua hook terdaftar berjalan untuk acara pencocokan mereka terlepas dari sumber. Lihat [hooks](/id/hooks-guide).

155 192 

156### Gabungkan fitur193### Gabungkan fitur

157 194 


168 205 

169## Pahami biaya konteks206## Pahami biaya konteks

170 207 

171Setiap fitur yang Anda tambahkan mengonsumsi beberapa konteks Claude. Terlalu banyak dapat mengisi jendela konteks Anda, tetapi juga dapat menambah kebisingan yang membuat Claude kurang efektif; skills mungkin tidak dipicu dengan benar, atau Claude mungkin kehilangan jejak konvensi Anda. Memahami trade-off ini membantu Anda membangun setup yang efektif.208Setiap fitur yang Anda tambahkan mengonsumsi beberapa konteks Claude. Terlalu banyak dapat mengisi jendela konteks Anda, tetapi juga dapat menambah kebisingan yang membuat Claude kurang efektif; skills mungkin tidak dipicu dengan benar, atau Claude mungkin kehilangan jejak konvensi Anda. Memahami trade-off ini membantu Anda membangun setup yang efektif. Untuk tampilan interaktif tentang bagaimana fitur-fitur ini bergabung dalam sesi yang berjalan, lihat [Jelajahi context window](/id/context-window).

172 209 

173### Biaya konteks berdasarkan fitur210### Biaya konteks berdasarkan fitur

174 211 


178| -------------- | ---------------------------- | ------------------------------------------------ | ------------------------------------------------ |215| -------------- | ---------------------------- | ------------------------------------------------ | ------------------------------------------------ |

179| **CLAUDE.md** | Awal sesi | Konten penuh | Setiap permintaan |216| **CLAUDE.md** | Awal sesi | Konten penuh | Setiap permintaan |

180| **Skills** | Awal sesi + ketika digunakan | Deskripsi di awal, konten penuh ketika digunakan | Rendah (deskripsi setiap permintaan)\* |217| **Skills** | Awal sesi + ketika digunakan | Deskripsi di awal, konten penuh ketika digunakan | Rendah (deskripsi setiap permintaan)\* |

181| **Server MCP** | Awal sesi | Semua definisi alat dan skema | Setiap permintaan |218| **Server MCP** | Awal sesi | Nama alat; skema penuh on demand | Rendah sampai alat digunakan |

182| **Subagents** | Ketika dispawn | Konteks segar dengan skills yang ditentukan | Terisolasi dari sesi utama |219| **Subagents** | Ketika dispawn | Konteks segar dengan skills yang ditentukan | Terisolasi dari sesi utama |

183| **Hooks** | Saat dipicu | Tidak ada (berjalan secara eksternal) | Nol, kecuali hook mengembalikan konteks tambahan |220| **Hooks** | Saat dipicu | Tidak ada (berjalan secara eksternal) | Nol, kecuali hook mengembalikan konteks tambahan |

184 221 


188 225 

189Setiap fitur dimuat pada titik berbeda dalam sesi Anda. Tab di bawah menjelaskan kapan masing-masing dimuat dan apa yang masuk ke konteks.226Setiap fitur dimuat pada titik berbeda dalam sesi Anda. Tab di bawah menjelaskan kapan masing-masing dimuat dan apa yang masuk ke konteks.

190 227 

191<img src="https://mintcdn.com/claude-code/6yTCYq1p37ZB8-CQ/images/context-loading.svg?fit=max&auto=format&n=6yTCYq1p37ZB8-CQ&q=85&s=5a58ce953a35a2412892015e2ad6cb67" alt="Pemuatan konteks: CLAUDE.md dan MCP dimuat saat awal sesi dan tetap di setiap permintaan. Skills memuat deskripsi di awal, konten penuh saat invokasi. Subagents mendapat konteks terisolasi. Hooks berjalan secara eksternal." width="720" height="410" data-path="images/context-loading.svg" />228<img src="https://mintcdn.com/claude-code/6yTCYq1p37ZB8-CQ/images/context-loading.svg?fit=max&auto=format&n=6yTCYq1p37ZB8-CQ&q=85&s=5a58ce953a35a2412892015e2ad6cb67" alt="Pemuatan konteks: CLAUDE.md dimuat saat awal sesi dan tetap di setiap permintaan. Nama alat MCP dimuat saat awal dengan skema penuh ditunda sampai digunakan. Skills memuat deskripsi saat awal, konten penuh saat invokasi. Subagents mendapat konteks terisolasi. Hooks berjalan secara eksternal." width="720" height="410" data-path="images/context-loading.svg" />

192 229 

193<Tabs>230<Tabs>

194 <Tab title="CLAUDE.md">231 <Tab title="CLAUDE.md">


202 </Tab>239 </Tab>

203 240 

204 <Tab title="Skills">241 <Tab title="Skills">

205 Skills adalah kemampuan tambahan dalam toolkit Claude. Mereka dapat berupa materi referensi (seperti panduan gaya API) atau alur kerja yang dapat dipanggil yang Anda picu dengan `/<name>` (seperti `/deploy`). Claude Code dilengkapi dengan [skills bundel](/id/skills#bundled-skills) seperti `/simplify`, `/batch`, dan `/debug` yang bekerja langsung. Anda juga dapat membuat yang Anda sendiri. Claude menggunakan skills ketika sesuai, atau Anda dapat memanggil satu secara langsung.242 Skills adalah kemampuan tambahan dalam toolkit Claude. Mereka dapat berupa materi referensi (seperti panduan gaya API) atau alur kerja yang dapat dipanggil yang Anda picu dengan `/<name>` (seperti `/deploy`). Claude Code dilengkapi dengan [skills bundel](/id/commands) seperti `/simplify`, `/batch`, dan `/debug` yang bekerja langsung. Anda juga dapat membuat yang Anda sendiri. Claude menggunakan skills ketika sesuai, atau Anda dapat memanggil satu secara langsung.

206 243 

207 **Kapan:** Tergantung pada konfigurasi skill. Secara default, deskripsi dimuat saat awal sesi dan konten penuh dimuat ketika digunakan. Untuk skills hanya pengguna (`disable-model-invocation: true`), tidak ada yang dimuat sampai Anda memanggilnya.244 **Kapan:** Tergantung pada konfigurasi skill. Secara default, deskripsi dimuat saat awal sesi dan konten penuh dimuat ketika digunakan. Untuk skills hanya pengguna (`disable-model-invocation: true`), tidak ada yang dimuat sampai Anda memanggilnya.

208 245 


220 <Tab title="Server MCP">257 <Tab title="Server MCP">

221 **Kapan:** Awal sesi.258 **Kapan:** Awal sesi.

222 259 

223 **Apa yang dimuat:** Semua definisi alat dan skema JSON dari server yang terhubung.260 **Apa yang dimuat:** Nama alat dari server yang terhubung. Skema JSON penuh tetap ditunda sampai Claude memerlukan alat tertentu.

224 261 

225 **Biaya konteks:** [Pencarian alat](/id/mcp#scale-with-mcp-tool-search) (diaktifkan secara default) memuat alat MCP hingga 10% konteks dan menunda sisanya sampai diperlukan.262 **Biaya konteks:** [Pencarian alat](/id/mcp#scale-with-mcp-tool-search) diaktifkan secara default, jadi alat MCP idle mengonsumsi konteks minimal.

226 263 

227 **Catatan keandalan:** Koneksi MCP dapat gagal secara diam-diam di tengah sesi. Jika server terputus, alatnya hilang tanpa peringatan. Claude mungkin mencoba menggunakan alat yang tidak lagi ada. Jika Anda melihat Claude gagal menggunakan alat MCP yang sebelumnya dapat diakses, periksa koneksi dengan `/mcp`.264 **Catatan keandalan:** Koneksi MCP dapat gagal secara diam-diam di tengah sesi. Jika server terputus, alatnya hilang tanpa peringatan. Claude mungkin mencoba menggunakan alat yang tidak lagi ada. Jika Anda melihat Claude gagal menggunakan alat MCP yang sebelumnya dapat diakses, periksa koneksi dengan `/mcp`.

228 265 


245 </Tab>282 </Tab>

246 283 

247 <Tab title="Hooks">284 <Tab title="Hooks">

248 **Kapan:** Saat dipicu. Hooks api pada acara siklus hidup tertentu seperti eksekusi alat, batas sesi, pengajuan prompt, permintaan izin, dan pemadatan. Lihat [Hooks](/id/hooks) untuk daftar lengkap.285 **Kapan:** Saat dipicu. Hooks berjalan pada acara siklus hidup tertentu seperti eksekusi alat, batas sesi, pengajuan prompt, permintaan izin, dan pemadatan. Lihat [Hooks](/id/hooks-guide) untuk daftar lengkap.

249 286 

250 **Apa yang dimuat:** Tidak ada secara default. Hooks berjalan sebagai skrip eksternal.287 **Apa yang dimuat:** Tidak ada secara default. Hooks berjalan di luar percakapan utama.

251 288 

252 **Biaya konteks:** Nol, kecuali hook mengembalikan output yang ditambahkan sebagai pesan ke percakapan Anda.289 **Biaya konteks:** Nol, kecuali hook mengembalikan output yang ditambahkan sebagai pesan ke percakapan Anda.

253 290 

hooks.md +7 −7

Details

970Untuk memblokir prompt, kembalikan objek JSON dengan `decision` diatur ke `"block"`:970Untuk memblokir prompt, kembalikan objek JSON dengan `decision` diatur ke `"block"`:

971 971 

972| Bidang | Deskripsi |972| Bidang | Deskripsi |

973| :------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |973| :------------------ | :----------------------------------------------------------------------------------------------------------------------------------- |

974| `decision` | `"block"` mencegah prompt diproses dan menghapusnya dari konteks. Hilangkan untuk mengizinkan prompt dilanjutkan |974| `decision` | `"block"` mencegah prompt diproses dan menghapusnya dari konteks. Hilangkan untuk mengizinkan prompt dilanjutkan |

975| `reason` | Ditampilkan ke pengguna saat `decision` adalah `"block"`. Tidak ditambahkan ke konteks |975| `reason` | Ditampilkan ke pengguna saat `decision` adalah `"block"`. Tidak ditambahkan ke konteks |

976| `additionalContext` | String ditambahkan ke konteks Claude bersama prompt yang dikirimkan. Lihat [Tambahkan konteks untuk Claude](#add-context-for-claude) untuk cara teks disampaikan dan apa yang harus dimasukkan |976| `additionalContext` | String ditambahkan ke konteks Claude bersama prompt yang dikirimkan. Lihat [Tambahkan konteks untuk Claude](#add-context-for-claude) |

977| `sessionTitle` | Menetapkan judul sesi, efek yang sama seperti `/rename`. Gunakan untuk memberi nama sesi secara otomatis berdasarkan konten prompt |977| `sessionTitle` | Menetapkan judul sesi. Gunakan untuk memberi nama sesi secara otomatis berdasarkan konten prompt |

978 978 

979```json theme={null}979```json theme={null}

980{980{


1358 1358 

1359| Bidang | Deskripsi |1359| Bidang | Deskripsi |

1360| :--------------------- | :------------------------------------------------------------------------------------------------------------------------ |1360| :--------------------- | :------------------------------------------------------------------------------------------------------------------------ |

1361| `decision` | `"block"` meminta Claude dengan `reason`. Hilangkan untuk mengizinkan tindakan dilanjutkan |1361| `decision` | `"block"` menambahkan `reason` di sebelah hasil tool. Hilangkan untuk mengizinkan tindakan dilanjutkan |

1362| `reason` | Penjelasan ditampilkan ke Claude saat `decision` adalah `"block"` |1362| `reason` | Penjelasan ditampilkan ke Claude saat `decision` adalah `"block"` |

1363| `additionalContext` | String ditambahkan ke konteks Claude bersama hasil tool. Lihat [Tambahkan konteks untuk Claude](#add-context-for-claude) |1363| `additionalContext` | String ditambahkan ke konteks Claude bersama hasil tool. Lihat [Tambahkan konteks untuk Claude](#add-context-for-claude) |

1364| `updatedToolOutput` | Mengganti output tool dengan nilai yang disediakan sebelum dikirim ke Claude. Nilai harus cocok dengan bentuk output tool |1364| `updatedToolOutput` | Mengganti output tool dengan nilai yang disediakan sebelum dikirim ke Claude. Nilai harus cocok dengan bentuk output tool |


2407```2407```

2408 2408 

2409| Bidang | Deskripsi |2409| Bidang | Deskripsi |

2410| :------- | :---------------------------------------------------------------- |2410| :------- | :----------------------------------------------------------------------------------- |

2411| `ok` | `true` mengizinkan tindakan, `false` mencegahnya |2411| `ok` | `true` untuk mengizinkan, `false` untuk memblokir. Lihat perilaku per-event di bawah |

2412| `reason` | Diperlukan saat `ok` adalah `false`. Penjelasan untuk pemblokiran |2412| `reason` | Diperlukan saat `ok` adalah `false`. Penjelasan untuk keputusan |

2413 2413 

2414Apa yang terjadi pada `ok: false` tergantung pada event:2414Apa yang terjadi pada `ok: false` tergantung pada event:

2415 2415 

permissions.md +5 −5

Details

36| :------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |36| :------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

37| `default` | Perilaku standar: meminta izin pada penggunaan pertama setiap alat |37| `default` | Perilaku standar: meminta izin pada penggunaan pertama setiap alat |

38| `acceptEdits` | Secara otomatis menerima edit file dan perintah sistem file umum (`mkdir`, `touch`, `mv`, `cp`, dll.) untuk jalur di direktori kerja atau `additionalDirectories` |38| `acceptEdits` | Secara otomatis menerima edit file dan perintah sistem file umum (`mkdir`, `touch`, `mv`, `cp`, dll.) untuk jalur di direktori kerja atau `additionalDirectories` |

39| `plan` | Plan Mode: Claude dapat menganalisis tetapi tidak memodifikasi file atau menjalankan perintah |39| `plan` | Plan Mode: Claude membaca file dan menjalankan perintah shell hanya-baca untuk menjelajahi tetapi tidak mengedit file sumber Anda |

40| `auto` | Secara otomatis menyetujui panggilan alat dengan pemeriksaan keamanan latar belakang yang memverifikasi tindakan selaras dengan permintaan Anda. Saat ini pratinjau penelitian |40| `auto` | Secara otomatis menyetujui panggilan alat dengan pemeriksaan keamanan latar belakang yang memverifikasi tindakan selaras dengan permintaan Anda. Saat ini pratinjau penelitian |

41| `dontAsk` | Secara otomatis menolak alat kecuali pra-disetujui melalui `/permissions` atau aturan `permissions.allow` |41| `dontAsk` | Secara otomatis menolak alat kecuali pra-disetujui melalui `/permissions` atau aturan `permissions.allow` |

42| `bypassPermissions` | Melewati semua prompt izin. Penghapusan direktori root dan home seperti `rm -rf /` masih meminta sebagai circuit breaker |42| `bypassPermissions` | Melewati semua prompt izin. Penghapusan direktori root dan home seperti `rm -rf /` masih meminta sebagai circuit breaker |


45 Mode `bypassPermissions` melewati semua prompt izin, termasuk penulisan ke `.git`, `.claude`, `.vscode`, `.idea`, dan `.husky`. Penghapusan yang menargetkan akar sistem file atau direktori home, seperti `rm -rf /` dan `rm -rf ~`, masih meminta sebagai circuit breaker terhadap kesalahan model. Hanya gunakan mode ini di lingkungan terisolasi seperti kontainer atau VM tempat Claude Code tidak dapat menyebabkan kerusakan. Administrator dapat mencegah mode ini dengan mengatur `permissions.disableBypassPermissionsMode` ke `"disable"` dalam [pengaturan terkelola](#managed-settings).45 Mode `bypassPermissions` melewati semua prompt izin, termasuk penulisan ke `.git`, `.claude`, `.vscode`, `.idea`, dan `.husky`. Penghapusan yang menargetkan akar sistem file atau direktori home, seperti `rm -rf /` dan `rm -rf ~`, masih meminta sebagai circuit breaker terhadap kesalahan model. Hanya gunakan mode ini di lingkungan terisolasi seperti kontainer atau VM tempat Claude Code tidak dapat menyebabkan kerusakan. Administrator dapat mencegah mode ini dengan mengatur `permissions.disableBypassPermissionsMode` ke `"disable"` dalam [pengaturan terkelola](#managed-settings).

46</Warning>46</Warning>

47 47 

48Untuk mencegah `bypassPermissions` atau mode `auto` digunakan, atur `permissions.disableBypassPermissionsMode` atau `permissions.disableAutoMode` ke `"disable"` dalam [file pengaturan](/id/settings#settings-files) apa pun. Ini paling berguna dalam [pengaturan terkelola](#managed-settings) di mana mereka tidak dapat ditimpa.48Untuk mencegah mode `bypassPermissions` atau `auto` digunakan, atur `permissions.disableBypassPermissionsMode` atau `permissions.disableAutoMode` ke `"disable"` dalam [file pengaturan](/id/settings#settings-files) apa pun. Ini paling berguna dalam [pengaturan terkelola](#managed-settings) di mana mereka tidak dapat ditimpa.

49 49 

50## Sintaks aturan izin50## Sintaks aturan izin

51 51 


296 296 

297* Aturan deny izin memblokir Claude dari bahkan mencoba mengakses sumber daya terbatas297* Aturan deny izin memblokir Claude dari bahkan mencoba mengakses sumber daya terbatas

298* Pembatasan sandbox mencegah perintah Bash menjangkau sumber daya di luar batas yang ditentukan, bahkan jika injeksi prompt melewati pengambilan keputusan Claude298* Pembatasan sandbox mencegah perintah Bash menjangkau sumber daya di luar batas yang ditentukan, bahkan jika injeksi prompt melewati pengambilan keputusan Claude

299* Pembatasan sistem file di sandbox menggunakan aturan deny Read dan Edit, bukan konfigurasi sandbox terpisah299* Pembatasan sistem file di sandbox menggabungkan pengaturan [`sandbox.filesystem`](/id/sandboxing) dengan aturan deny Read dan Edit; keduanya digabungkan ke dalam batas sandbox akhir

300* Pembatasan jaringan menggabungkan aturan izin WebFetch dengan daftar `allowedDomains` dan `deniedDomains` sandbox300* Pembatasan jaringan menggabungkan aturan izin WebFetch dengan daftar `allowedDomains` dan `deniedDomains` sandbox

301 301 

302Ketika sandboxing diaktifkan dengan `autoAllowBashIfSandboxed: true`, yang merupakan default, perintah Bash yang di-sandbox berjalan tanpa meminta bahkan jika izin Anda mencakup `ask: Bash(*)`. Batas sandbox menggantikan prompt per-perintah. Aturan deny eksplisit masih berlaku, dan perintah `rm` atau `rmdir` yang menargetkan `/`, direktori home Anda, atau jalur sistem kritis lainnya masih memicu prompt. Lihat [sandbox modes](/id/sandboxing#sandbox-modes) untuk mengubah perilaku ini.302Ketika sandboxing diaktifkan dengan `autoAllowBashIfSandboxed: true`, yang merupakan default, perintah Bash yang di-sandbox berjalan tanpa meminta bahkan jika izin Anda mencakup `ask: Bash(*)`. Batas sandbox menggantikan prompt per-perintah. Aturan deny eksplisit masih berlaku, dan perintah `rm` atau `rmdir` yang menargetkan `/`, direktori home Anda, atau jalur sistem kritis lainnya masih memicu prompt. Lihat [sandbox modes](/id/sandboxing#sandbox-modes) untuk mengubah perilaku ini.


316| `allowManagedMcpServersOnly` | Ketika `true`, hanya `allowedMcpServers` dari pengaturan terkelola yang dihormati. `deniedMcpServers` masih digabung dari semua sumber. Lihat [Managed MCP configuration](/id/mcp#managed-mcp-configuration) |316| `allowManagedMcpServersOnly` | Ketika `true`, hanya `allowedMcpServers` dari pengaturan terkelola yang dihormati. `deniedMcpServers` masih digabung dari semua sumber. Lihat [Managed MCP configuration](/id/mcp#managed-mcp-configuration) |

317| `allowManagedPermissionRulesOnly` | Ketika `true`, mencegah pengaturan pengguna dan proyek dari mendefinisikan aturan izin `allow`, `ask`, atau `deny`. Hanya aturan dalam pengaturan terkelola yang berlaku |317| `allowManagedPermissionRulesOnly` | Ketika `true`, mencegah pengaturan pengguna dan proyek dari mendefinisikan aturan izin `allow`, `ask`, atau `deny`. Hanya aturan dalam pengaturan terkelola yang berlaku |

318| `blockedMarketplaces` | Daftar blokir sumber marketplace. Sumber yang diblokir diperiksa sebelum mengunduh, jadi mereka tidak pernah menyentuh sistem file. Lihat [managed marketplace restrictions](/id/plugin-marketplaces#managed-marketplace-restrictions) |318| `blockedMarketplaces` | Daftar blokir sumber marketplace. Sumber yang diblokir diperiksa sebelum mengunduh, jadi mereka tidak pernah menyentuh sistem file. Lihat [managed marketplace restrictions](/id/plugin-marketplaces#managed-marketplace-restrictions) |

319| `channelsEnabled` | Izinkan [channels](/id/channels) untuk pengguna Team dan Enterprise. Tidak diatur atau `false` memblokir pengiriman pesan saluran terlepas dari apa yang dilewatkan pengguna ke `--channels` |319| `channelsEnabled` | Izinkan [channels](/id/channels) untuk organisasi. Lihat [enterprise controls](/id/channels#enterprise-controls) untuk default pada setiap paket |

320| `forceRemoteSettingsRefresh` | Ketika `true`, memblokir startup CLI hingga pengaturan terkelola jarak jauh segar diambil dan keluar jika pengambilan gagal. Lihat [fail-closed enforcement](/id/server-managed-settings#enforce-fail-closed-startup) |320| `forceRemoteSettingsRefresh` | Ketika `true`, memblokir startup CLI hingga pengaturan terkelola jarak jauh segar diambil dan keluar jika pengambilan gagal. Lihat [fail-closed enforcement](/id/server-managed-settings#enforce-fail-closed-startup) |

321| `pluginTrustMessage` | Pesan kustom ditambahkan ke peringatan kepercayaan plugin yang ditampilkan sebelum instalasi |321| `pluginTrustMessage` | Pesan kustom ditambahkan ke peringatan kepercayaan plugin yang ditampilkan sebelum instalasi |

322| `sandbox.filesystem.allowManagedReadPathsOnly` | Ketika `true`, hanya jalur `filesystem.allowRead` dari pengaturan terkelola yang dihormati. `denyRead` masih digabung dari semua sumber |322| `sandbox.filesystem.allowManagedReadPathsOnly` | Ketika `true`, hanya jalur `filesystem.allowRead` dari pengaturan terkelola yang dihormati. `denyRead` masih digabung dari semua sumber |


327`disableBypassPermissionsMode` biasanya ditempatkan dalam pengaturan terkelola untuk memberlakukan kebijakan organisasi, tetapi berfungsi dari cakupan apa pun. Pengguna dapat mengaturnya dalam pengaturan mereka sendiri untuk mengunci diri mereka sendiri dari mode bypass.327`disableBypassPermissionsMode` biasanya ditempatkan dalam pengaturan terkelola untuk memberlakukan kebijakan organisasi, tetapi berfungsi dari cakupan apa pun. Pengguna dapat mengaturnya dalam pengaturan mereka sendiri untuk mengunci diri mereka sendiri dari mode bypass.

328 328 

329<Note>329<Note>

330 Akses ke [Remote Control](/id/remote-control) dan [sesi web](/id/claude-code-on-the-web) tidak dikendalikan oleh kunci pengaturan terkelola. Pada paket Team dan Enterprise, admin mengaktifkan atau menonaktifkan fitur ini dalam [pengaturan admin Claude Code](https://claude.ai/admin-settings/claude-code).330 Pada paket Team dan Enterprise, admin mengaktifkan atau menonaktifkan [Remote Control](/id/remote-control) dan [sesi web](/id/claude-code-on-the-web) di seluruh organisasi dalam [pengaturan admin Claude Code](https://claude.ai/admin-settings/claude-code). Remote Control dapat secara tambahan dinonaktifkan per perangkat dengan pengaturan terkelola [`disableRemoteControl`](/id/settings#available-settings). Sesi web tidak memiliki kunci pengaturan terkelola per perangkat.

331</Note>331</Note>

332 332 

333## Prioritas pengaturan333## Prioritas pengaturan

platforms.md +7 −4

Details

4 4 

5# Platform dan integrasi5# Platform dan integrasi

6 6 

7> Pilih di mana menjalankan Claude Code dan apa yang akan dihubungkan. Bandingkan CLI, Desktop, VS Code, JetBrains, web, dan integrasi seperti Chrome, Slack, dan CI/CD.7> Pilih di mana menjalankan Claude Code dan apa yang akan dihubungkan. Bandingkan CLI, Desktop, VS Code, JetBrains, web, mobile, dan integrasi seperti Chrome, Slack, dan CI/CD.

8 8 

9Claude Code menjalankan mesin yang sama di mana pun, tetapi setiap permukaan disesuaikan untuk cara kerja yang berbeda. Halaman ini membantu Anda memilih platform yang tepat untuk alur kerja Anda dan menghubungkan alat yang sudah Anda gunakan.9Claude Code menjalankan mesin yang sama di mana pun, tetapi setiap permukaan disesuaikan untuk cara kerja yang berbeda. Halaman ini membantu Anda memilih platform yang tepat untuk alur kerja Anda dan menghubungkan alat yang sudah Anda gunakan.

10 10 


13Pilih platform berdasarkan cara Anda suka bekerja dan di mana proyek Anda berada.13Pilih platform berdasarkan cara Anda suka bekerja dan di mana proyek Anda berada.

14 14 

15| Platform | Terbaik untuk | Yang Anda dapatkan |15| Platform | Terbaik untuk | Yang Anda dapatkan |

16| :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- |16| :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

17| [CLI](/id/quickstart) | Alur kerja terminal, scripting, server jarak jauh | Set fitur lengkap, [Agent SDK](/id/headless), penyedia pihak ketiga |17| [CLI](/id/quickstart) | Alur kerja terminal, scripting, server jarak jauh | Set fitur lengkap, [Agent SDK](/id/headless), [penggunaan komputer](/id/computer-use) di macOS (Pro dan Max), penyedia pihak ketiga |

18| [Desktop](/id/desktop) | Tinjauan visual, sesi paralel, pengaturan terkelola | Penampil diff, pratinjau aplikasi, [penggunaan komputer](/id/desktop#let-claude-use-your-computer) dan [Dispatch](/id/desktop#sessions-from-dispatch) pada Pro dan Max |18| [Desktop](/id/desktop) | Tinjauan visual, sesi paralel, pengaturan terkelola | Penampil diff, pratinjau aplikasi, [penggunaan komputer](/id/desktop#let-claude-use-your-computer) dan [Dispatch](/id/desktop#sessions-from-dispatch) pada Pro dan Max |

19| [VS Code](/id/vs-code) | Bekerja di dalam VS Code tanpa beralih ke terminal | Diff inline, terminal terintegrasi, konteks file |19| [VS Code](/id/vs-code) | Bekerja di dalam VS Code tanpa beralih ke terminal | Diff inline, terminal terintegrasi, konteks file |

20| [JetBrains](/id/jetbrains) | Bekerja di dalam IntelliJ, PyCharm, WebStorm, atau IDE JetBrains lainnya | Penampil diff, berbagi seleksi, sesi terminal |20| [JetBrains](/id/jetbrains) | Bekerja di dalam IntelliJ, PyCharm, WebStorm, atau IDE JetBrains lainnya | Penampil diff, berbagi seleksi, sesi terminal |

21| [Web](/id/claude-code-on-the-web) | Tugas yang berjalan lama yang tidak memerlukan banyak pengarahan, atau pekerjaan yang harus dilanjutkan saat Anda offline | Cloud yang dikelola Anthropic, berlanjut setelah Anda terputus |21| [Web](/id/claude-code-on-the-web) | Tugas yang berjalan lama yang tidak memerlukan banyak pengarahan, atau pekerjaan yang harus dilanjutkan saat Anda offline | Cloud yang dikelola Anthropic, berlanjut setelah Anda terputus |

22| Mobile | Memulai dan memantau tugas saat jauh dari komputer Anda | Sesi cloud dari aplikasi Claude untuk iOS dan Android, [Remote Control](/id/remote-control) untuk sesi lokal, [Dispatch](/id/desktop#sessions-from-dispatch) ke Desktop pada Pro dan Max |

22 23 

23CLI adalah permukaan paling lengkap untuk pekerjaan asli terminal: scripting, penyedia pihak ketiga, dan Agent SDK hanya tersedia di CLI. Desktop dan ekstensi IDE menukar beberapa fitur khusus CLI untuk tinjauan visual dan integrasi editor yang lebih ketat. Web berjalan di cloud Anthropic, jadi tugas terus berlanjut setelah Anda terputus.24CLI adalah permukaan paling lengkap untuk pekerjaan asli terminal: scripting dan Agent SDK hanya tersedia di CLI. Penyedia pihak ketiga juga bekerja di [VS Code](/id/vs-code#use-third-party-providers). Penyebaran [Desktop](/id/desktop) Enterprise mendukung Vertex AI dan penyedia gateway; untuk Bedrock atau Foundry, gunakan CLI atau VS Code sebagai gantinya Desktop. Desktop dan ekstensi IDE menukar beberapa fitur khusus CLI untuk tinjauan visual dan integrasi editor yang lebih ketat. Web berjalan di cloud Anthropic, jadi tugas terus berlanjut setelah Anda terputus. Mobile adalah klien tipis ke sesi cloud yang sama atau ke sesi lokal melalui Remote Control, dan dapat mengirim tugas ke Desktop dengan Dispatch.

24 25 

25Anda dapat mencampur permukaan pada proyek yang sama. Konfigurasi, memori proyek, dan server MCP dibagikan di seluruh permukaan lokal.26Anda dapat mencampur permukaan pada proyek yang sama. Konfigurasi, memori proyek, dan server MCP dibagikan di seluruh permukaan lokal.

26 27 


61* [VS Code](/id/vs-code): ekstensi Claude Code di dalam editor Anda62* [VS Code](/id/vs-code): ekstensi Claude Code di dalam editor Anda

62* [JetBrains](/id/jetbrains): ekstensi untuk IntelliJ, PyCharm, dan IDE JetBrains lainnya63* [JetBrains](/id/jetbrains): ekstensi untuk IntelliJ, PyCharm, dan IDE JetBrains lainnya

63* [Claude Code di web](/id/claude-code-on-the-web): sesi cloud yang terus berjalan saat Anda terputus64* [Claude Code di web](/id/claude-code-on-the-web): sesi cloud yang terus berjalan saat Anda terputus

65* Mobile: aplikasi Claude untuk [iOS](https://apps.apple.com/us/app/claude-by-anthropic/id6473753684) dan [Android](https://play.google.com/store/apps/details?id=com.anthropic.claude) untuk memulai dan memantau tugas saat jauh dari komputer Anda

64 66 

65### Integrasi67### Integrasi

66 68 

67* [Chrome](/id/chrome): otomatisasi tugas browser dengan sesi login Anda69* [Chrome](/id/chrome): otomatisasi tugas browser dengan sesi login Anda

70* [Computer use](/id/computer-use): biarkan Claude membuka aplikasi dan mengontrol layar Anda di macOS

68* [GitHub Actions](/id/github-actions): jalankan Claude dalam pipeline CI Anda71* [GitHub Actions](/id/github-actions): jalankan Claude dalam pipeline CI Anda

69* [GitLab CI/CD](/id/gitlab-ci-cd): yang sama untuk GitLab72* [GitLab CI/CD](/id/gitlab-ci-cd): yang sama untuk GitLab

70* [Code Review](/id/code-review): tinjauan otomatis pada setiap permintaan tarik73* [Code Review](/id/code-review): tinjauan otomatis pada setiap permintaan tarik

Details

23 23 

24## Panduan: buat marketplace lokal24## Panduan: buat marketplace lokal

25 25 

26Contoh ini membuat marketplace dengan satu plugin: skill `/quality-review` untuk ulasan kode. Anda akan membuat struktur direktori, menambahkan skill, membuat manifest plugin dan katalog marketplace, kemudian memasang dan mengujinya.26Contoh ini membuat marketplace dengan satu plugin: skill `quality-review` untuk ulasan kode. Anda akan membuat struktur direktori, menambahkan skill, membuat manifest plugin dan katalog marketplace, kemudian memasang dan mengujinya.

27 27 

28<Steps>28<Steps>

29 <Step title="Buat struktur direktori">29 <Step title="Buat struktur direktori">


35 </Step>35 </Step>

36 36 

37 <Step title="Buat skill">37 <Step title="Buat skill">

38 Buat file `SKILL.md` yang mendefinisikan apa yang dilakukan skill `/quality-review`.38 Buat file `SKILL.md` yang mendefinisikan apa yang dilakukan skill `quality-review`.

39 39 

40 ```markdown my-marketplace/plugins/quality-review-plugin/skills/quality-review/SKILL.md theme={null}40 ```markdown my-marketplace/plugins/quality-review-plugin/skills/quality-review/SKILL.md theme={null}

41 ---41 ---


59 ```json my-marketplace/plugins/quality-review-plugin/.claude-plugin/plugin.json theme={null}59 ```json my-marketplace/plugins/quality-review-plugin/.claude-plugin/plugin.json theme={null}

60 {60 {

61 "name": "quality-review-plugin",61 "name": "quality-review-plugin",

62 "description": "Adds a /quality-review skill for quick code reviews",62 "description": "Adds a quality-review skill for quick code reviews",

63 "version": "1.0.0"63 "version": "1.0.0"

64 }64 }

65 ```65 ```


82 {82 {

83 "name": "quality-review-plugin",83 "name": "quality-review-plugin",

84 "source": "./plugins/quality-review-plugin",84 "source": "./plugins/quality-review-plugin",

85 "description": "Adds a /quality-review skill for quick code reviews"85 "description": "Adds a quality-review skill for quick code reviews"

86 }86 }

87 ]87 ]

88 }88 }


99 </Step>99 </Step>

100 100 

101 <Step title="Coba">101 <Step title="Coba">

102 Pilih beberapa kode di editor Anda dan jalankan skill baru Anda.102 Pilih beberapa kode di editor Anda dan jalankan skill baru Anda. Plugin skills memiliki namespace dengan nama plugin.

103 103 

104 ```shell theme={null}104 ```shell theme={null}

105 /quality-review105 /quality-review-plugin:quality-review

106 ```106 ```

107 </Step>107 </Step>

108</Steps>108</Steps>


693* Untuk sumber `hostPattern`: host marketplace dicocokkan dengan pola regex693* Untuk sumber `hostPattern`: host marketplace dicocokkan dengan pola regex

694* Untuk sumber `pathPattern`: jalur filesystem marketplace dicocokkan dengan pola regex694* Untuk sumber `pathPattern`: jalur filesystem marketplace dicocokkan dengan pola regex

695 695 

696Pencocokan tepat tidak menormalkan URL: garis miring trailing, akhiran `.git`, atau bentuk `ssh://` versus `https://` diperlakukan sebagai nilai berbeda. Jika marketplace organisasi Anda dapat diklon oleh lebih dari satu bentuk URL, lebih suka entri `hostPattern` daripada URL literal sehingga semua bentuk cocok.

697 

696Karena `strictKnownMarketplaces` diatur dalam [pengaturan yang dikelola](/id/settings#settings-files), konfigurasi pengguna individual dan proyek tidak dapat mengganti pembatasan ini.698Karena `strictKnownMarketplaces` diatur dalam [pengaturan yang dikelola](/id/settings#settings-files), konfigurasi pengguna individual dan proyek tidak dapat mengganti pembatasan ini.

697 699 

698Untuk detail konfigurasi lengkap termasuk semua jenis sumber yang didukung dan perbandingan dengan `extraKnownMarketplaces`, lihat [referensi strictKnownMarketplaces](/id/settings#strictknownmarketplaces).700Untuk detail konfigurasi lengkap termasuk semua jenis sumber yang didukung dan perbandingan dengan `extraKnownMarketplaces`, lihat [referensi strictKnownMarketplaces](/id/settings#strictknownmarketplaces).

Details

262**LSP plugins yang tersedia:**262**LSP plugins yang tersedia:**

263 263 

264| Plugin | Language server | Perintah instalasi |264| Plugin | Language server | Perintah instalasi |

265| :--------------- | :------------------------- | :---------------------------------------------------------------------------------------- |265| :------------------ | :------------------------- | :---------------------------------------------------------------------------------------- |

266| `pyright-lsp` | Pyright (Python) | `pip install pyright` atau `npm install -g pyright` |266| `pyright-lsp` | Pyright (Python) | `pip install pyright` atau `npm install -g pyright` |

267| `typescript-lsp` | TypeScript Language Server | `npm install -g typescript-language-server typescript` |267| `typescript-lsp` | TypeScript Language Server | `npm install -g typescript-language-server typescript` |

268| `rust-lsp` | rust-analyzer | [Lihat instalasi rust-analyzer](https://rust-analyzer.github.io/manual.html#installation) |268| `rust-analyzer-lsp` | rust-analyzer | [Lihat instalasi rust-analyzer](https://rust-analyzer.github.io/manual.html#installation) |

269 269 

270Pasang language server terlebih dahulu, kemudian pasang plugin dari marketplace.270Pasang language server terlebih dahulu, kemudian pasang plugin dari marketplace.

271 271 


531 531 

532Claude Code menyediakan dua variabel untuk mereferensikan jalur plugin. Keduanya disubstitusi inline di mana pun mereka muncul dalam konten skill, konten agent, perintah hook, perintah monitor, dan konfigurasi MCP atau LSP server. Keduanya juga diekspor sebagai variabel lingkungan ke proses hook dan subprocess MCP atau LSP server.532Claude Code menyediakan dua variabel untuk mereferensikan jalur plugin. Keduanya disubstitusi inline di mana pun mereka muncul dalam konten skill, konten agent, perintah hook, perintah monitor, dan konfigurasi MCP atau LSP server. Keduanya juga diekspor sebagai variabel lingkungan ke proses hook dan subprocess MCP atau LSP server.

533 533 

534**`${CLAUDE_PLUGIN_ROOT}`**: jalur absolut ke direktori instalasi plugin Anda. Gunakan ini untuk mereferensikan scripts, binaries, dan file konfigurasi yang disertakan dengan plugin. Jalur ini berubah saat plugin diperbarui, jadi file yang Anda tulis di sini tidak bertahan setelah update.534**`${CLAUDE_PLUGIN_ROOT}`**: jalur absolut ke direktori instalasi plugin Anda. Gunakan ini untuk mereferensikan scripts, binaries, dan file konfigurasi yang disertakan dengan plugin. Jalur ini berubah saat plugin diperbarui. Direktori versi sebelumnya tetap berada di disk selama sekitar tujuh hari setelah update sebelum pembersihan, tetapi perlakukan sebagai ephemeral dan jangan tulis state di sini.

535 

536Saat plugin diperbarui di tengah sesi, perintah hook, monitor, MCP server, dan LSP server terus menggunakan jalur versi sebelumnya. Jalankan `/reload-plugins` untuk mengalihkan hooks, MCP server, dan LSP server ke jalur baru; monitor memerlukan restart sesi.

535 537 

536**`${CLAUDE_PLUGIN_DATA}`**: direktori persisten untuk state plugin yang bertahan setelah updates. Gunakan ini untuk dependensi yang dipasang seperti `node_modules` atau Python virtual environments, kode yang dihasilkan, caches, dan file lainnya yang harus bertahan di seluruh versi plugin. Direktori dibuat secara otomatis pertama kali variabel ini direferensikan.538**`${CLAUDE_PLUGIN_DATA}`**: direktori persisten untuk state plugin yang bertahan setelah updates. Gunakan ini untuk dependensi yang dipasang seperti `node_modules` atau Python virtual environments, kode yang dihasilkan, caches, dan file lainnya yang harus bertahan di seluruh versi plugin. Direktori dibuat secara otomatis pertama kali variabel ini direferensikan.

537 539 


677 Direktori `.claude-plugin/` berisi file `plugin.json`. Semua direktori lainnya (commands/, agents/, skills/, output-styles/, themes/, monitors/, hooks/) harus berada di root plugin, bukan di dalam `.claude-plugin/`.679 Direktori `.claude-plugin/` berisi file `plugin.json`. Semua direktori lainnya (commands/, agents/, skills/, output-styles/, themes/, monitors/, hooks/) harus berada di root plugin, bukan di dalam `.claude-plugin/`.

678</Warning>680</Warning>

679 681 

682File `CLAUDE.md` di root plugin tidak dimuat sebagai konteks proyek. Plugin berkontribusi konteks melalui skills, agents, dan hooks daripada CLAUDE.md. Untuk mengirimkan instruksi yang dimuat ke dalam konteks Claude, letakkan mereka dalam sebuah [skill](#skills).

683 

680### Referensi lokasi file684### Referensi lokasi file

681 685 

682| Komponen | Lokasi Default | Tujuan |686| Komponen | Lokasi Default | Tujuan |

security.md +1 −1

Details

27* **Alat bash bersandbox**: [Sandbox](/id/sandboxing) perintah bash dengan isolasi filesystem dan jaringan, mengurangi permintaan izin sambil mempertahankan keamanan. Aktifkan dengan `/sandbox` untuk menentukan batas tempat Claude Code dapat bekerja secara otonom27* **Alat bash bersandbox**: [Sandbox](/id/sandboxing) perintah bash dengan isolasi filesystem dan jaringan, mengurangi permintaan izin sambil mempertahankan keamanan. Aktifkan dengan `/sandbox` untuk menentukan batas tempat Claude Code dapat bekerja secara otonom

28* **Pembatasan akses tulis**: Claude Code hanya dapat menulis ke folder tempat dimulai dan subfolder-nya—tidak dapat memodifikasi file di direktori induk tanpa izin eksplisit. Meskipun Claude Code dapat membaca file di luar direktori kerja (berguna untuk mengakses perpustakaan sistem dan dependensi), operasi tulis dibatasi ketat pada cakupan proyek, menciptakan batas keamanan yang jelas28* **Pembatasan akses tulis**: Claude Code hanya dapat menulis ke folder tempat dimulai dan subfolder-nya—tidak dapat memodifikasi file di direktori induk tanpa izin eksplisit. Meskipun Claude Code dapat membaca file di luar direktori kerja (berguna untuk mengakses perpustakaan sistem dan dependensi), operasi tulis dibatasi ketat pada cakupan proyek, menciptakan batas keamanan yang jelas

29* **Mitigasi kelelahan permintaan**: Dukungan untuk allowlisting perintah aman yang sering digunakan per-pengguna, per-codebase, atau per-organisasi29* **Mitigasi kelelahan permintaan**: Dukungan untuk allowlisting perintah aman yang sering digunakan per-pengguna, per-codebase, atau per-organisasi

30* **Mode Accept Edits**: Batch menerima beberapa edit sambil mempertahankan permintaan izin untuk perintah dengan efek samping30* **Mode Accept Edits**: Persetujuan otomatis untuk edit file dan serangkaian perintah Bash filesystem tetap seperti `mkdir`, `touch`, `rm`, `mv`, `cp`, dan `sed` untuk jalur di direktori kerja. Perintah Bash lainnya dan jalur di luar cakupan masih meminta persetujuan

31 31 

32### Tanggung jawab pengguna32### Tanggung jawab pengguna

33 33 

settings.md +27 −4

Details

71| **Plugins** | `~/.claude/settings.json` | `.claude/settings.json` | `.claude/settings.local.json` |71| **Plugins** | `~/.claude/settings.json` | `.claude/settings.json` | `.claude/settings.local.json` |

72| **CLAUDE.md** | `~/.claude/CLAUDE.md` | `CLAUDE.md` atau `.claude/CLAUDE.md` | `CLAUDE.local.md` |72| **CLAUDE.md** | `~/.claude/CLAUDE.md` | `CLAUDE.md` atau `.claude/CLAUDE.md` | `CLAUDE.local.md` |

73 73 

74Di Windows, jalur yang ditampilkan sebagai `~/.claude` diselesaikan ke `%USERPROFILE%\.claude`.

75 

74***76***

75 77 

76## File pengaturan78## File pengaturan


166| `apiKeyHelper` | Skrip khusus, yang akan dieksekusi dalam `/bin/sh`, untuk menghasilkan nilai auth. Nilai ini akan dikirim sebagai header `X-Api-Key` dan `Authorization: Bearer` untuk permintaan model | `/bin/generate_temp_api_key.sh` |168| `apiKeyHelper` | Skrip khusus, yang akan dieksekusi dalam `/bin/sh`, untuk menghasilkan nilai auth. Nilai ini akan dikirim sebagai header `X-Api-Key` dan `Authorization: Bearer` untuk permintaan model | `/bin/generate_temp_api_key.sh` |

167| `attribution` | Sesuaikan atribusi untuk komit git dan pull request. Lihat [Pengaturan atribusi](#attribution-settings) | `{"commit": "🤖 Generated with Claude Code", "pr": ""}` |169| `attribution` | Sesuaikan atribusi untuk komit git dan pull request. Lihat [Pengaturan atribusi](#attribution-settings) | `{"commit": "🤖 Generated with Claude Code", "pr": ""}` |

168| `autoMemoryDirectory` | Direktori khusus untuk penyimpanan [memori otomatis](/id/memory#storage-location). Menerima jalur absolut atau jalur dengan awalan `~/`. Diterima dari kebijakan dan pengaturan pengguna, dan dari flag `--settings`. Tidak diterima dari pengaturan proyek atau lokal, karena repositori yang diklon dapat menyediakan file apa pun untuk mengalihkan penulisan memori ke lokasi sensitif | `"~/my-memory-dir"` |170| `autoMemoryDirectory` | Direktori khusus untuk penyimpanan [memori otomatis](/id/memory#storage-location). Menerima jalur absolut atau jalur dengan awalan `~/`. Diterima dari kebijakan dan pengaturan pengguna, dan dari flag `--settings`. Tidak diterima dari pengaturan proyek atau lokal, karena repositori yang diklon dapat menyediakan file apa pun untuk mengalihkan penulisan memori ke lokasi sensitif | `"~/my-memory-dir"` |

171| `autoMemoryEnabled` | Aktifkan [memori otomatis](/id/memory#enable-or-disable-auto-memory). Saat `false`, Claude tidak membaca dari atau menulis ke direktori memori otomatis. Default: `true`. Anda juga dapat mengalihkan ini dengan `/memory` selama sesi | `false` |

169| `autoMode` | Sesuaikan apa yang diblokir dan diizinkan oleh pengklasifikasi [mode otomatis](/id/permission-modes#eliminate-prompts-with-auto-mode). Berisi array aturan prosa `environment`, `allow`, dan `soft_deny`. Sertakan string literal `"$defaults"` dalam array untuk mewarisi aturan bawaan pada posisi tersebut. Lihat [Konfigurasikan mode otomatis](/id/auto-mode-config). Tidak dibaca dari pengaturan proyek bersama | `{"soft_deny": ["$defaults", "Never run terraform apply"]}` |172| `autoMode` | Sesuaikan apa yang diblokir dan diizinkan oleh pengklasifikasi [mode otomatis](/id/permission-modes#eliminate-prompts-with-auto-mode). Berisi array aturan prosa `environment`, `allow`, dan `soft_deny`. Sertakan string literal `"$defaults"` dalam array untuk mewarisi aturan bawaan pada posisi tersebut. Lihat [Konfigurasikan mode otomatis](/id/auto-mode-config). Tidak dibaca dari pengaturan proyek bersama | `{"soft_deny": ["$defaults", "Never run terraform apply"]}` |

170| `autoScrollEnabled` | Dalam [rendering fullscreen](/id/fullscreen), ikuti output baru ke bagian bawah percakapan. Default: `true`. Muncul di `/config` sebagai **Auto-scroll**. Prompt izin masih bergulir ke tampilan saat ini dimatikan | `false` |173| `autoScrollEnabled` | Dalam [rendering fullscreen](/id/fullscreen), ikuti output baru ke bagian bawah percakapan. Default: `true`. Muncul di `/config` sebagai **Auto-scroll**. Prompt izin masih bergulir ke tampilan saat ini dimatikan | `false` |

171| `autoUpdatesChannel` | Saluran rilis untuk diikuti untuk pembaruan. Gunakan `"stable"` untuk versi yang biasanya sekitar satu minggu lama dan melewati versi dengan regresi besar, atau `"latest"` (default) untuk rilis terbaru | `"stable"` |174| `autoUpdatesChannel` | Saluran rilis untuk diikuti untuk pembaruan. Gunakan `"stable"` untuk versi yang biasanya sekitar satu minggu lama dan melewati versi dengan regresi besar, atau `"latest"` (default) untuk rilis terbaru | `"stable"` |


174| `awsAuthRefresh` | Skrip khusus yang memodifikasi direktori `.aws` (lihat [konfigurasi kredensial lanjutan](/id/amazon-bedrock#advanced-credential-configuration)) | `aws sso login --profile myprofile` |177| `awsAuthRefresh` | Skrip khusus yang memodifikasi direktori `.aws` (lihat [konfigurasi kredensial lanjutan](/id/amazon-bedrock#advanced-credential-configuration)) | `aws sso login --profile myprofile` |

175| `awsCredentialExport` | Skrip khusus yang menampilkan JSON dengan kredensial AWS (lihat [konfigurasi kredensial lanjutan](/id/amazon-bedrock#advanced-credential-configuration)) | `/bin/generate_aws_grant.sh` |178| `awsCredentialExport` | Skrip khusus yang menampilkan JSON dengan kredensial AWS (lihat [konfigurasi kredensial lanjutan](/id/amazon-bedrock#advanced-credential-configuration)) | `/bin/generate_aws_grant.sh` |

176| `blockedMarketplaces` | (Pengaturan yang dikelola saja) Daftar hitam sumber marketplace. Diterapkan pada penambahan marketplace dan instalasi plugin, pembaruan, penyegaran, dan auto-update, jadi marketplace yang ditambahkan sebelum kebijakan ditetapkan tidak dapat digunakan untuk mengambil plugin. Sumber yang diblokir diperiksa sebelum mengunduh, jadi mereka tidak pernah menyentuh sistem file. Lihat [Pembatasan marketplace yang dikelola](/id/plugin-marketplaces#managed-marketplace-restrictions) | `[{ "source": "github", "repo": "untrusted/plugins" }]` |179| `blockedMarketplaces` | (Pengaturan yang dikelola saja) Daftar hitam sumber marketplace. Diterapkan pada penambahan marketplace dan instalasi plugin, pembaruan, penyegaran, dan auto-update, jadi marketplace yang ditambahkan sebelum kebijakan ditetapkan tidak dapat digunakan untuk mengambil plugin. Sumber yang diblokir diperiksa sebelum mengunduh, jadi mereka tidak pernah menyentuh sistem file. Lihat [Pembatasan marketplace yang dikelola](/id/plugin-marketplaces#managed-marketplace-restrictions) | `[{ "source": "github", "repo": "untrusted/plugins" }]` |

177| `channelsEnabled` | (Pengaturan yang dikelola saja) Izinkan [channels](/id/channels) untuk pengguna Team dan Enterprise. Tidak diatur atau `false` memblokir pengiriman pesan channel terlepas dari apa yang dilewatkan pengguna ke `--channels` | `true` |180| `channelsEnabled` | (Pengaturan yang dikelola saja) Izinkan [channels](/id/channels) untuk organisasi. Pada paket Claude.ai Team dan Enterprise, channels diblokir saat ini tidak diatur atau `false`. Untuk akun [Anthropic Console](/id/authentication#claude-console-authentication) menggunakan autentikasi kunci API, channels diizinkan secara default kecuali organisasi Anda menggunakan pengaturan yang dikelola, dalam hal ini kunci ini harus diatur ke `true` | `true` |

178| `cleanupPeriodDays` | Sesi file yang lebih lama dari periode ini dihapus saat startup (default: 30 hari, minimum 1). Pengaturan ke `0` ditolak dengan kesalahan validasi. Juga mengontrol cutoff usia untuk penghapusan otomatis [worktrees subagent yatim piatu](/id/worktrees#clean-up-worktrees) saat startup. Untuk menonaktifkan penulisan transkrip sepenuhnya, atur variabel lingkungan [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/id/env-vars), atau dalam mode non-interaktif (`-p`) gunakan flag `--no-session-persistence` atau opsi SDK `persistSession: false`. | `20` |181| `cleanupPeriodDays` | File sesi yang lebih lama dari periode ini dihapus saat startup (default: 30 hari, minimum 1). Pengaturan ke `0` ditolak dengan kesalahan validasi. Juga mengontrol cutoff usia untuk penghapusan otomatis [worktrees subagent yatim piatu](/id/worktrees#clean-up-worktrees) saat startup. Untuk menonaktifkan penulisan transkrip sepenuhnya, atur variabel lingkungan [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/id/env-vars), atau dalam mode non-interaktif (`-p`) gunakan flag `--no-session-persistence` atau opsi SDK `persistSession: false`. | `20` |

179| `companyAnnouncements` | Pengumuman untuk ditampilkan kepada pengguna saat startup. Jika beberapa pengumuman disediakan, mereka akan diputar secara acak. | `["Welcome to Acme Corp! Review our code guidelines at docs.acme.com"]` |182| `companyAnnouncements` | Pengumuman untuk ditampilkan kepada pengguna saat startup. Jika beberapa pengumuman disediakan, mereka akan diputar secara acak. | `["Welcome to Acme Corp! Review our code guidelines at docs.acme.com"]` |

180| `defaultShell` | Shell default untuk perintah `!` input-box. Menerima `"bash"` (default) atau `"powershell"`. Pengaturan `"powershell"` merutekan perintah `!` interaktif melalui PowerShell di Windows. Memerlukan `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`. Lihat [PowerShell tool](/id/tools-reference#powershell-tool) | `"powershell"` |183| `defaultShell` | Shell default untuk perintah `!` input-box. Menerima `"bash"` (default) atau `"powershell"`. Pengaturan `"powershell"` merutekan perintah `!` interaktif melalui PowerShell di Windows. Memerlukan `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`. Lihat [PowerShell tool](/id/tools-reference#powershell-tool) | `"powershell"` |

181| `deniedMcpServers` | Saat diatur dalam managed-settings.json, daftar hitam MCP servers yang secara eksplisit diblokir. Berlaku untuk semua cakupan termasuk servers yang dikelola. Daftar hitam memiliki prioritas atas daftar putih. Lihat [Konfigurasi MCP yang Dikelola](/id/mcp#managed-mcp-configuration) | `[{ "serverName": "filesystem" }]` |184| `deniedMcpServers` | Saat diatur dalam managed-settings.json, daftar hitam MCP servers yang secara eksplisit diblokir. Berlaku untuk semua cakupan termasuk servers yang dikelola. Daftar hitam memiliki prioritas atas daftar putih. Lihat [Konfigurasi MCP yang Dikelola](/id/mcp#managed-mcp-configuration) | `[{ "serverName": "filesystem" }]` |


183| `disableAutoMode` | Atur ke `"disable"` untuk mencegah [mode otomatis](/id/permission-modes#eliminate-prompts-with-auto-mode) diaktifkan. Menghapus `auto` dari siklus `Shift+Tab` dan menolak `--permission-mode auto` saat startup. Paling berguna dalam [pengaturan yang dikelola](/id/permissions#managed-settings) di mana pengguna tidak dapat menimpanya | `"disable"` |186| `disableAutoMode` | Atur ke `"disable"` untuk mencegah [mode otomatis](/id/permission-modes#eliminate-prompts-with-auto-mode) diaktifkan. Menghapus `auto` dari siklus `Shift+Tab` dan menolak `--permission-mode auto` saat startup. Paling berguna dalam [pengaturan yang dikelola](/id/permissions#managed-settings) di mana pengguna tidak dapat menimpanya | `"disable"` |

184| `disableDeepLinkRegistration` | Atur ke `"disable"` untuk mencegah Claude Code mendaftarkan penanganan protokol `claude-cli://` dengan sistem operasi saat startup. Deep links memungkinkan tools eksternal membuka sesi Claude Code dengan prompt yang sudah diisi sebelumnya. Berguna di lingkungan di mana pendaftaran penanganan protokol dibatasi atau dikelola secara terpisah | `"disable"` |187| `disableDeepLinkRegistration` | Atur ke `"disable"` untuk mencegah Claude Code mendaftarkan penanganan protokol `claude-cli://` dengan sistem operasi saat startup. Deep links memungkinkan tools eksternal membuka sesi Claude Code dengan prompt yang sudah diisi sebelumnya. Berguna di lingkungan di mana pendaftaran penanganan protokol dibatasi atau dikelola secara terpisah | `"disable"` |

185| `disabledMcpjsonServers` | Daftar MCP servers spesifik dari file `.mcp.json` untuk menolak | `["filesystem"]` |188| `disabledMcpjsonServers` | Daftar MCP servers spesifik dari file `.mcp.json` untuk menolak | `["filesystem"]` |

189| `disableRemoteControl` | {/* min-version: 2.1.128 */}Nonaktifkan [Remote Control](/id/remote-control): memblokir `claude remote-control`, flag `--remote-control`, auto-start, dan toggle dalam sesi. Biasanya ditempatkan dalam [pengaturan yang dikelola](/id/permissions#managed-settings) untuk penegakan MDM per-perangkat, tetapi berfungsi dari cakupan apa pun. Memerlukan Claude Code v2.1.128 atau lebih baru | `true` |

186| `disableSkillShellExecution` | Nonaktifkan eksekusi shell inline untuk blok `` !`...` `` dan ` ```! ` dalam [skills](/id/skills) dan perintah khusus dari sumber pengguna, proyek, plugin, atau direktori tambahan. Perintah diganti dengan `[shell command execution disabled by policy]` daripada dijalankan. Skills bundel dan yang dikelola tidak terpengaruh. Paling berguna dalam [pengaturan yang dikelola](/id/permissions#managed-settings) di mana pengguna tidak dapat menimpanya | `true` |190| `disableSkillShellExecution` | Nonaktifkan eksekusi shell inline untuk blok `` !`...` `` dan ` ```! ` dalam [skills](/id/skills) dan perintah khusus dari sumber pengguna, proyek, plugin, atau direktori tambahan. Perintah diganti dengan `[shell command execution disabled by policy]` daripada dijalankan. Skills bundel dan yang dikelola tidak terpengaruh. Paling berguna dalam [pengaturan yang dikelola](/id/permissions#managed-settings) di mana pengguna tidak dapat menimpanya | `true` |

187| `editorMode` | Mode binding kunci untuk prompt input: `"normal"` atau `"vim"`. Default: `"normal"`. Muncul di `/config` sebagai **Editor mode** | `"vim"` |191| `editorMode` | Mode binding kunci untuk prompt input: `"normal"` atau `"vim"`. Default: `"normal"`. Muncul di `/config` sebagai **Editor mode** | `"vim"` |

188| `effortLevel` | Pertahankan [tingkat usaha](/id/model-config#adjust-effort-level) di seluruh sesi. Menerima `"low"`, `"medium"`, `"high"`, atau `"xhigh"`. Ditulis secara otomatis saat Anda menjalankan `/effort` dengan salah satu nilai tersebut. Lihat [Sesuaikan tingkat usaha](/id/model-config#adjust-effort-level) untuk model yang didukung | `"xhigh"` |192| `effortLevel` | Pertahankan [tingkat usaha](/id/model-config#adjust-effort-level) di seluruh sesi. Menerima `"low"`, `"medium"`, `"high"`, atau `"xhigh"`. Ditulis secara otomatis saat Anda menjalankan `/effort` dengan salah satu nilai tersebut. Lihat [Sesuaikan tingkat usaha](/id/model-config#adjust-effort-level) untuk model yang didukung | `"xhigh"` |


550 },554 },

551 "extraKnownMarketplaces": {555 "extraKnownMarketplaces": {

552 "acme-tools": {556 "acme-tools": {

557 "source": {

553 "source": "github",558 "source": "github",

554 "repo": "acme-corp/claude-plugins"559 "repo": "acme-corp/claude-plugins"

555 }560 }

556 }561 }

562 }

557}563}

558```564```

559 565 


568* **Pengaturan lokal** (`.claude/settings.local.json`): Penggantian per-mesin (tidak dikomit)574* **Pengaturan lokal** (`.claude/settings.local.json`): Penggantian per-mesin (tidak dikomit)

569* **Pengaturan yang dikelola** (`managed-settings.json`): Penggantian kebijakan organisasi yang memblokir instalasi di semua cakupan dan menyembunyikan plugin dari marketplace575* **Pengaturan yang dikelola** (`managed-settings.json`): Penggantian kebijakan organisasi yang memblokir instalasi di semua cakupan dan menyembunyikan plugin dari marketplace

570 576 

577<Note>

578 Pengaturan proyek memiliki prioritas lebih tinggi daripada pengaturan pengguna, jadi mengatur plugin ke `false` dalam `~/.claude/settings.json` tidak menonaktifkan plugin yang diaktifkan oleh `.claude/settings.json` proyek. Untuk menolak plugin yang diaktifkan proyek di mesin Anda, atur ke `false` dalam `.claude/settings.local.json` sebagai gantinya.

579 

580 Plugin yang dipaksa diaktifkan oleh pengaturan yang dikelola tidak dapat dinonaktifkan dengan cara ini, karena pengaturan yang dikelola menggantikan pengaturan lokal.

581</Note>

582 

571**Contoh**:583**Contoh**:

572 584 

573```json theme={null}585```json theme={null}


659* Hanya tersedia dalam pengaturan yang dikelola (`managed-settings.json`)671* Hanya tersedia dalam pengaturan yang dikelola (`managed-settings.json`)

660* Tidak dapat ditimpa oleh pengaturan pengguna atau proyek (prioritas tertinggi)672* Tidak dapat ditimpa oleh pengaturan pengguna atau proyek (prioritas tertinggi)

661* Diterapkan SEBELUM operasi jaringan/sistem file (sumber yang diblokir tidak pernah dieksekusi)673* Diterapkan SEBELUM operasi jaringan/sistem file (sumber yang diblokir tidak pernah dieksekusi)

662* Menggunakan pencocokan tepat untuk spesifikasi sumber (termasuk `ref`, `path` untuk sumber git), kecuali `hostPattern`, yang menggunakan pencocokan regex674* Menggunakan pencocokan tepat untuk spesifikasi sumber (termasuk `ref`, `path` untuk sumber git), kecuali `hostPattern` dan `pathPattern`, yang menggunakan pencocokan regex

663 675 

664**Perilaku daftar putih**:676**Perilaku daftar putih**:

665 677 


669 681 

670**Semua jenis sumber yang didukung**:682**Semua jenis sumber yang didukung**:

671 683 

672Daftar putih mendukung beberapa jenis sumber marketplace. Sebagian besar sumber menggunakan pencocokan tepat, sementara `hostPattern` menggunakan pencocokan regex terhadap host marketplace.684Daftar putih mendukung beberapa jenis sumber marketplace. Sebagian besar sumber menggunakan pencocokan tepat, sementara `hostPattern` dan `pathPattern` menggunakan pencocokan regex terhadap host marketplace dan jalur sistem file masing-masing.

673 685 

6741. **Repositori GitHub**:6861. **Repositori GitHub**:

675 687 


749* `url`: mengekstrak nama host dari URL761* `url`: mengekstrak nama host dari URL

750* `npm`, `file`, `directory`: tidak didukung untuk pencocokan pola host762* `npm`, `file`, `directory`: tidak didukung untuk pencocokan pola host

751 763 

7648. **Pencocokan pola jalur**:

765 

766```json theme={null}

767{ "source": "pathPattern", "pathPattern": "^/opt/approved/" }

768{ "source": "pathPattern", "pathPattern": ".*" }

769```

770 

771Bidang: `pathPattern` (diperlukan: pola regex yang dicocokkan terhadap bidang `path` dari sumber `file` dan `directory`)

772 

773Gunakan pencocokan pola jalur untuk memungkinkan marketplace berbasis sistem file bersama dengan pembatasan `hostPattern` untuk sumber jaringan. Atur `".*"` untuk memungkinkan semua jalur lokal, atau pola yang lebih sempit untuk membatasi ke direktori tertentu.

774 

752**Contoh konfigurasi**:775**Contoh konfigurasi**:

753 776 

754Contoh: izinkan marketplace spesifik saja:777Contoh: izinkan marketplace spesifik saja:

sub-agents.md +41 −16

Details

42 Agen cepat yang dioptimalkan hanya-baca untuk mencari dan menganalisis basis kode.42 Agen cepat yang dioptimalkan hanya-baca untuk mencari dan menganalisis basis kode.

43 43 

44 * **Model**: Haiku (cepat, latensi rendah)44 * **Model**: Haiku (cepat, latensi rendah)

45 * **Alat**: Alat hanya-baca (akses ditolak ke alat Write dan Edit)45 * **Tools**: Alat hanya-baca (akses ditolak ke alat Write dan Edit)

46 * **Tujuan**: Penemuan file, pencarian kode, eksplorasi basis kode46 * **Purpose**: Penemuan file, pencarian kode, eksplorasi basis kode

47 47 

48 Claude mendelegasikan ke Explore ketika perlu mencari atau memahami basis kode tanpa membuat perubahan. Ini menjaga hasil eksplorasi di luar konteks percakapan utama Anda.48 Claude mendelegasikan ke Explore ketika perlu mencari atau memahami basis kode tanpa membuat perubahan. Ini menjaga hasil eksplorasi di luar konteks percakapan utama Anda.

49 49 


51 </Tab>51 </Tab>

52 52 

53 <Tab title="Plan">53 <Tab title="Plan">

54 Agen penelitian yang digunakan selama [plan mode](/id/common-workflows#use-plan-mode-for-safe-code-analysis) untuk mengumpulkan konteks sebelum menyajikan rencana.54 Agen penelitian yang digunakan selama [plan mode](/id/permission-modes#analyze-before-you-edit-with-plan-mode) untuk mengumpulkan konteks sebelum menyajikan rencana.

55 55 

56 * **Model**: Mewarisi dari percakapan utama56 * **Model**: Mewarisi dari percakapan utama

57 * **Alat**: Alat hanya-baca (akses ditolak ke alat Write dan Edit)57 * **Tools**: Alat hanya-baca (akses ditolak ke alat Write dan Edit)

58 * **Tujuan**: Penelitian basis kode untuk perencanaan58 * **Purpose**: Penelitian basis kode untuk perencanaan

59 59 

60 Ketika Anda dalam plan mode dan Claude perlu memahami basis kode Anda, Claude mendelegasikan penelitian ke subagent Plan. Ini mencegah nesting tak terbatas (subagent tidak dapat menelurkan subagent lain) sambil tetap mengumpulkan konteks yang diperlukan.60 Ketika Anda dalam plan mode dan Claude perlu memahami basis kode Anda, Claude mendelegasikan penelitian ke subagent Plan. Ini mencegah nesting tak terbatas (subagent tidak dapat menelurkan subagent lain) sambil tetap mengumpulkan konteks yang diperlukan.

61 </Tab>61 </Tab>


64 Agen yang mampu untuk tugas kompleks multi-langkah yang memerlukan eksplorasi dan tindakan.64 Agen yang mampu untuk tugas kompleks multi-langkah yang memerlukan eksplorasi dan tindakan.

65 65 

66 * **Model**: Mewarisi dari percakapan utama66 * **Model**: Mewarisi dari percakapan utama

67 * **Alat**: Semua alat67 * **Tools**: Semua alat

68 * **Tujuan**: Penelitian kompleks, operasi multi-langkah, modifikasi kode68 * **Purpose**: Penelitian kompleks, operasi multi-langkah, modifikasi kode

69 69 

70 Claude mendelegasikan ke general-purpose ketika tugas memerlukan eksplorasi dan modifikasi, penalaran kompleks untuk menafsirkan hasil, atau beberapa langkah yang saling bergantung.70 Claude mendelegasikan ke general-purpose ketika tugas memerlukan eksplorasi dan modifikasi, penalaran kompleks untuk menafsirkan hasil, atau beberapa langkah yang saling bergantung.

71 </Tab>71 </Tab>


76 | Agen | Model | Kapan Claude menggunakannya |76 | Agen | Model | Kapan Claude menggunakannya |

77 | :---------------- | :----- | :--------------------------------------------------------------------------- |77 | :---------------- | :----- | :--------------------------------------------------------------------------- |

78 | statusline-setup | Sonnet | Ketika Anda menjalankan `/statusline` untuk mengonfigurasi baris status Anda |78 | statusline-setup | Sonnet | Ketika Anda menjalankan `/statusline` untuk mengonfigurasi baris status Anda |

79 | Claude Code Guide | Haiku | Ketika Anda mengajukan pertanyaan tentang fitur Claude Code |79 | claude-code-guide | Haiku | Ketika Anda mengajukan pertanyaan tentang fitur Claude Code |

80 </Tab>80 </Tab>

81</Tabs>81</Tabs>

82 82 


180 180 

181**Subagent yang ditentukan CLI** dilewatkan sebagai JSON saat meluncurkan Claude Code. Mereka hanya ada untuk sesi itu dan tidak disimpan ke disk, menjadikannya berguna untuk pengujian cepat atau skrip otomasi. Anda dapat mendefinisikan beberapa subagent dalam satu panggilan `--agents`:181**Subagent yang ditentukan CLI** dilewatkan sebagai JSON saat meluncurkan Claude Code. Mereka hanya ada untuk sesi itu dan tidak disimpan ke disk, menjadikannya berguna untuk pengujian cepat atau skrip otomasi. Anda dapat mendefinisikan beberapa subagent dalam satu panggilan `--agents`:

182 182 

183```bash theme={null}183<Tabs>

184claude --agents '{184 <Tab title="macOS, Linux, WSL">

185 ```bash theme={null}

186 claude --agents '{

185 "code-reviewer": {187 "code-reviewer": {

186 "description": "Expert code reviewer. Use proactively after code changes.",188 "description": "Expert code reviewer. Use proactively after code changes.",

187 "prompt": "You are a senior code reviewer. Focus on code quality, security, and best practices.",189 "prompt": "You are a senior code reviewer. Focus on code quality, security, and best practices.",


192 "description": "Debugging specialist for errors and test failures.",194 "description": "Debugging specialist for errors and test failures.",

193 "prompt": "You are an expert debugger. Analyze errors, identify root causes, and provide fixes."195 "prompt": "You are an expert debugger. Analyze errors, identify root causes, and provide fixes."

194 }196 }

195}'197 }'

196```198 ```

199 </Tab>

200 

201 <Tab title="Windows PowerShell">

202 ```powershell theme={null}

203 claude --agents @'

204 {

205 "code-reviewer": {

206 "description": "Expert code reviewer. Use proactively after code changes.",

207 "prompt": "You are a senior code reviewer. Focus on code quality, security, and best practices.",

208 "tools": ["Read", "Grep", "Glob", "Bash"],

209 "model": "sonnet"

210 },

211 "debugger": {

212 "description": "Debugging specialist for errors and test failures.",

213 "prompt": "You are an expert debugger. Analyze errors, identify root causes, and provide fixes."

214 }

215 }

216 '@

217 ```

218 </Tab>

219</Tabs>

197 220 

198Flag `--agents` menerima JSON dengan [frontmatter](#supported-frontmatter-fields) yang sama bidang file-based subagent: `description`, `prompt`, `tools`, `disallowedTools`, `model`, `permissionMode`, `mcpServers`, `hooks`, `maxTurns`, `skills`, `initialPrompt`, `memory`, `effort`, `background`, `isolation`, dan `color`. Gunakan `prompt` untuk prompt sistem, setara dengan badan markdown dalam subagent berbasis file.221Flag `--agents` menerima JSON dengan [frontmatter](#supported-frontmatter-fields) yang sama bidang file-based subagent: `description`, `prompt`, `tools`, `disallowedTools`, `model`, `permissionMode`, `mcpServers`, `hooks`, `maxTurns`, `skills`, `initialPrompt`, `memory`, `effort`, `background`, `isolation`, dan `color`. Gunakan `prompt` untuk prompt sistem, setara dengan badan markdown dalam subagent berbasis file.

199 222 


212File subagent menggunakan frontmatter YAML untuk konfigurasi, diikuti oleh prompt sistem dalam Markdown:235File subagent menggunakan frontmatter YAML untuk konfigurasi, diikuti oleh prompt sistem dalam Markdown:

213 236 

214<Note>237<Note>

215 Subagent dimuat saat awal sesi. Jika Anda membuat subagent dengan menambahkan file secara manual, restart sesi Anda atau gunakan `/agents` untuk memuatnya segera.238 Subagent dimuat saat awal sesi. Jika Anda menambah atau mengedit file subagent secara langsung di disk, restart sesi Anda untuk memuatnya. Subagent yang dibuat melalui antarmuka `/agents` berlaku segera tanpa restart.

216</Note>239</Note>

217 240 

218```markdown theme={null}241```markdown theme={null}


250| `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 |

251| `background` | Tidak | Atur ke `true` untuk selalu menjalankan subagent ini sebagai [background task](#run-subagents-in-foreground-or-background). Default: `false` |274| `background` | Tidak | Atur ke `true` untuk selalu menjalankan subagent ini sebagai [background task](#run-subagents-in-foreground-or-background). Default: `false` |

252| `effort` | Tidak | Tingkat usaha ketika subagent ini aktif. Menimpa tingkat usaha sesi. Default: mewarisi dari sesi. Opsi: `low`, `medium`, `high`, `xhigh`, `max`; tingkat yang tersedia tergantung pada model |275| `effort` | Tidak | Tingkat usaha ketika subagent ini aktif. Menimpa tingkat usaha sesi. Default: mewarisi dari sesi. Opsi: `low`, `medium`, `high`, `xhigh`, `max`; tingkat yang tersedia tergantung pada model |

253| `isolation` | Tidak | Atur ke `worktree` untuk menjalankan subagent dalam [git worktree](/id/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees) sementara, memberikannya salinan repositori yang terisolasi. Worktree secara otomatis dibersihkan jika subagent tidak membuat perubahan |276| `isolation` | Tidak | Atur ke `worktree` untuk menjalankan subagent dalam [git worktree](/id/worktrees) sementara, memberikannya salinan repositori yang terisolasi. Worktree secara otomatis dibersihkan jika subagent tidak membuat perubahan |

254| `color` | Tidak | Warna tampilan untuk subagent dalam daftar tugas dan transkrip. Menerima `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, atau `cyan` |277| `color` | Tidak | Warna tampilan untuk subagent dalam daftar tugas dan transkrip. Menerima `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, atau `cyan` |

255| `initialPrompt` | Tidak | Auto-submitted sebagai putaran pengguna pertama ketika agen ini berjalan sebagai agen sesi utama (melalui `--agent` atau pengaturan `agent`). [Commands](/id/commands) dan [skills](/id/skills) diproses. Ditambahkan di depan prompt yang disediakan pengguna apa pun |278| `initialPrompt` | Tidak | Auto-submitted sebagai putaran pengguna pertama ketika agen ini berjalan sebagai agen sesi utama (melalui `--agent` atau pengaturan `agent`). [Commands](/id/commands) dan [skills](/id/skills) diproses. Ditambahkan di depan prompt yang disediakan pengguna apa pun |

256 279 


484exit 0507exit 0

485```508```

486 509 

487Lihat [Hook input](/id/hooks#pretooluse-input) untuk skema input lengkap dan [exit codes](/id/hooks#exit-code-output) untuk bagaimana kode keluar mempengaruhi perilaku.510Lihat [Hook input](/id/hooks#pretooluse-input) untuk skema input lengkap dan [exit codes](/id/hooks#exit-code-output) untuk bagaimana kode keluar mempengaruhi perilaku. Di Windows, tulis skrip hook dalam PowerShell dan tambahkan `shell: powershell` ke entri hook seperti yang ditunjukkan dalam [menjalankan hooks dalam PowerShell](/id/hooks#windows-powershell-tool).

488 511 

489#### Nonaktifkan subagent tertentu512#### Nonaktifkan subagent tertentu

490 513 


992exit 01015exit 0

993```1016```

994 1017 

995Buat skrip dapat dieksekusi:1018Di macOS dan Linux, buat skrip dapat dieksekusi:

996 1019 

997```bash theme={null}1020```bash theme={null}

998chmod +x ./scripts/validate-readonly-query.sh1021chmod +x ./scripts/validate-readonly-query.sh

999```1022```

1000 1023 

1024Di Windows, tulis skrip validasi dalam PowerShell dan tambahkan `shell: powershell` ke entri hook. Lihat [menjalankan hooks dalam PowerShell](/id/hooks#windows-powershell-tool).

1025 

1001Hook menerima JSON melalui stdin dengan perintah Bash dalam `tool_input.command`. Kode keluar 2 memblokir operasi dan mengirimkan pesan kesalahan kembali ke Claude. Lihat [Hooks](/id/hooks#exit-code-output) untuk detail tentang kode keluar dan [Hook input](/id/hooks#pretooluse-input) untuk skema input lengkap.1026Hook menerima JSON melalui stdin dengan perintah Bash dalam `tool_input.command`. Kode keluar 2 memblokir operasi dan mengirimkan pesan kesalahan kembali ke Claude. Lihat [Hooks](/id/hooks#exit-code-output) untuk detail tentang kode keluar dan [Hook input](/id/hooks#pretooluse-input) untuk skema input lengkap.

1002 1027 

1003## Langkah berikutnya1028## Langkah berikutnya

vs-code.md +13 −3

Details

95* **Mode izin**: klik indikator mode di bagian bawah kotak prompt untuk beralih mode. Dalam mode normal, Claude meminta izin sebelum setiap tindakan. Dalam Plan mode, Claude menjelaskan apa yang akan dilakukan dan menunggu persetujuan sebelum membuat perubahan. VS Code secara otomatis membuka rencana sebagai dokumen markdown penuh di mana Anda dapat menambahkan komentar inline untuk memberikan umpan balik sebelum Claude mulai. Dalam mode auto-accept, Claude membuat edit tanpa bertanya. Atur default di pengaturan VS Code di bawah `claudeCode.initialPermissionMode`.95* **Mode izin**: klik indikator mode di bagian bawah kotak prompt untuk beralih mode. Dalam mode normal, Claude meminta izin sebelum setiap tindakan. Dalam Plan mode, Claude menjelaskan apa yang akan dilakukan dan menunggu persetujuan sebelum membuat perubahan. VS Code secara otomatis membuka rencana sebagai dokumen markdown penuh di mana Anda dapat menambahkan komentar inline untuk memberikan umpan balik sebelum Claude mulai. Dalam mode auto-accept, Claude membuat edit tanpa bertanya. Atur default di pengaturan VS Code di bawah `claudeCode.initialPermissionMode`.

96* **Menu perintah**: klik `/` atau ketik `/` untuk membuka menu perintah. Opsi termasuk melampirkan file, beralih model, mengalihkan extended thinking, melihat penggunaan rencana (`/usage`), dan memulai sesi [Remote Control](/id/remote-control) (`/remote-control`). Bagian Customize menyediakan akses ke MCP servers, hooks, memory, permissions, dan plugins. Item dengan ikon terminal terbuka di terminal terintegrasi.96* **Menu perintah**: klik `/` atau ketik `/` untuk membuka menu perintah. Opsi termasuk melampirkan file, beralih model, mengalihkan extended thinking, melihat penggunaan rencana (`/usage`), dan memulai sesi [Remote Control](/id/remote-control) (`/remote-control`). Bagian Customize menyediakan akses ke MCP servers, hooks, memory, permissions, dan plugins. Item dengan ikon terminal terbuka di terminal terintegrasi.

97* **Indikator konteks**: kotak prompt menunjukkan berapa banyak context window Claude yang Anda gunakan. Claude secara otomatis melakukan compact saat diperlukan, atau Anda dapat menjalankan `/compact` secara manual.97* **Indikator konteks**: kotak prompt menunjukkan berapa banyak context window Claude yang Anda gunakan. Claude secara otomatis melakukan compact saat diperlukan, atau Anda dapat menjalankan `/compact` secara manual.

98* **Extended thinking**: memungkinkan Claude menghabiskan lebih banyak waktu untuk bernalar melalui masalah kompleks. Alihkan melalui menu perintah (`/`). Penalaran Claude muncul dalam percakapan sebagai blok yang dilipat: klik blok untuk membacanya, atau tekan `Ctrl+O` untuk memperluas atau melipat setiap blok thinking dalam sesi. Lihat [Extended thinking](/id/common-workflows#use-extended-thinking-thinking-mode) untuk detail.98* **Extended thinking**: memungkinkan Claude menghabiskan lebih banyak waktu untuk bernalar melalui masalah kompleks. Alihkan melalui menu perintah (`/`). Penalaran Claude muncul dalam percakapan sebagai blok yang dilipat: klik blok untuk membacanya, atau tekan `Ctrl+O` untuk memperluas atau melipat setiap blok thinking dalam sesi. Lihat [Extended thinking](/id/model-config#extended-thinking) untuk detail.

99* **Input multi-baris**: tekan `Shift+Enter` untuk menambahkan baris baru tanpa mengirim. Ini juga berfungsi di input teks bebas "Other" dari dialog pertanyaan.99* **Input multi-baris**: tekan `Shift+Enter` untuk menambahkan baris baru tanpa mengirim. Ini juga berfungsi di input teks bebas "Other" dari dialog pertanyaan.

100 100 

101### Referensikan file dan folder101### Referensikan file dan folder


115 115 

116### Lanjutkan percakapan masa lalu116### Lanjutkan percakapan masa lalu

117 117 

118Klik tombol **Session history** di bagian atas panel Claude Code untuk mengakses riwayat percakapan Anda. Anda dapat mencari berdasarkan kata kunci atau menelusuri berdasarkan waktu (Today, Yesterday, Last 7 days, dll.). Klik percakapan apa pun untuk melanjutkannya dengan riwayat pesan lengkap. Sesi baru menerima judul yang dihasilkan AI berdasarkan pesan pertama Anda. Arahkan kursor ke sesi untuk mengungkapkan tindakan rename dan remove: rename untuk memberikan judul deskriptif, atau remove untuk menghapusnya dari daftar. Untuk lebih lanjut tentang melanjutkan sesi, lihat [Alur kerja umum](/id/common-workflows#resume-previous-conversations).118Klik tombol **Session history** di bagian atas panel Claude Code untuk mengakses riwayat percakapan Anda. Anda dapat mencari berdasarkan kata kunci atau menelusuri berdasarkan waktu (Today, Yesterday, Last 7 days, dll.). Klik percakapan apa pun untuk melanjutkannya dengan riwayat pesan lengkap. Sesi baru menerima judul yang dihasilkan AI berdasarkan pesan pertama Anda. Arahkan kursor ke sesi untuk mengungkapkan tindakan rename dan remove: rename untuk memberikan judul deskriptif, atau remove untuk menghapusnya dari daftar. Untuk lebih lanjut tentang melanjutkan sesi, lihat [Kelola sesi](/id/sessions).

119 119 

120### Lanjutkan sesi jarak jauh dari Claude.ai120### Lanjutkan sesi jarak jauh dari Claude.ai

121 121 


399claude --worktree feature-auth399claude --worktree feature-auth

400```400```

401 401 

402Setiap worktree mempertahankan status file independen sambil berbagi riwayat git. Ini mencegah instance Claude saling mengganggu saat bekerja pada tugas berbeda. Untuk detail lebih lanjut, lihat [Jalankan sesi Claude paralel dengan Git worktrees](/id/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees).402Setiap worktree mempertahankan status file independen sambil berbagi riwayat git. Ini mencegah instance Claude saling mengganggu saat bekerja pada tugas berbeda. Untuk detail lebih lanjut, lihat [Jalankan sesi paralel dengan Git worktrees](/id/worktrees).

403 403 

404## Gunakan penyedia pihak ketiga404## Gunakan penyedia pihak ketiga

405 405 


476 476 

477Alternatifnya, klik "✱ Claude Code" di **Status Bar** (sudut kanan bawah). Ini berfungsi bahkan tanpa file terbuka. Anda juga dapat menggunakan **Command Palette** (`Cmd+Shift+P` / `Ctrl+Shift+P`) dan ketik "Claude Code".477Alternatifnya, klik "✱ Claude Code" di **Status Bar** (sudut kanan bawah). Ini berfungsi bahkan tanpa file terbuka. Anda juga dapat menggunakan **Command Palette** (`Cmd+Shift+P` / `Ctrl+Shift+P`) dan ketik "Claude Code".

478 478 

479### Cmd+Esc tidak melakukan apa pun di macOS

480 

481Di macOS Tahoe dan yang lebih baru, pintasan Game Overlay sistem terikat ke `Cmd+Esc` secara default dan mengintersepsi penekanan tombol sebelum mencapai VS Code. Untuk membebaskan pintasan:

482 

4831. Buka System Settings

4842. Buka Keyboard, kemudian Keyboard Shortcuts, kemudian Game Controllers

4853. Hapus centang Game Overlay

486 

487Alternatifnya, ikat ulang ekstensi ke tombol yang berbeda: buka editor [Keyboard Shortcuts](https://code.visualstudio.com/docs/configure/keybindings) VS Code (`Cmd+K Cmd+S`), cari `Claude Code: Focus input`, dan tetapkan pengikatan baru.

488 

479### Claude Code tidak pernah merespons489### Claude Code tidak pernah merespons

480 490 

481Jika Claude Code tidak merespons prompt Anda:491Jika Claude Code tidak merespons prompt Anda: