SpyBara
Go Premium

Documentation 2026-10-08 22:58 UTC to 2026-10-09 21:01 UTC

51 files changed +682 −186. View all changes and history on the product overview
2026
Fri 9 22:01 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59
Details

216| Opsi | Apa yang dikontrolnya | Default |216| Opsi | Apa yang dikontrolnya | Default |

217| :- | :- | :- |217| :- | :- | :- |

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

219| Max budget (`max_budget_usd` / `maxBudgetUsd`) | Maximum cost sebelum berhenti | Tidak ada batas |219| Max budget (`max_budget_usd` / `maxBudgetUsd`) | Perkiraan pengeluaran saat loop berhenti | Tidak ada batas |

220 220 

221Ketika 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`](/docs/id/agent-sdk/python#claudeagentoptions) / [`Options`](/docs/id/agent-sdk/typescript#options) untuk syntax.221Ketika 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`](/docs/id/agent-sdk/python#claudeagentoptions) / [`Options`](/docs/id/agent-sdk/typescript#options) untuk syntax.

222 222 


224 224 

225Dengan [streaming input](/docs/id/agent-sdk/streaming-vs-single-mode), pesan yang masih antri ketika turn berakhir pada batas max-turns tetap antri. Claude Code tidak menambahkannya ke model call terakhir turn itu. Ini memulai turn baru untuk pesan, dan hitungan max-turns dimulai lagi untuk turn itu. Total budget terus terakumulasi di seluruh pesan, dan setelah pengeluaran mencapai `maxBudgetUsd`, pesan-pesan selanjutnya dalam percakapan yang sama berakhir dengan hasil `error_max_budget_usd`. Sebuah [`/clear`](/docs/id/agent-sdk/cost-tracking) memulai ulang budget.225Dengan [streaming input](/docs/id/agent-sdk/streaming-vs-single-mode), pesan yang masih antri ketika turn berakhir pada batas max-turns tetap antri. Claude Code tidak menambahkannya ke model call terakhir turn itu. Ini memulai turn baru untuk pesan, dan hitungan max-turns dimulai lagi untuk turn itu. Total budget terus terakumulasi di seluruh pesan, dan setelah pengeluaran mencapai `maxBudgetUsd`, pesan-pesan selanjutnya dalam percakapan yang sama berakhir dengan hasil `error_max_budget_usd`. Sebuah [`/clear`](/docs/id/agent-sdk/cost-tracking) memulai ulang budget.

226 226 

227<h4 id="budget-headroom">

228 Ruang cadangan budget

229</h4>

230 

231Claude Code membandingkan pengeluaran dengan cap `max_budget_usd` / `maxBudgetUsd` setelah respons model tiba, karena biaya setiap respons berasal dari penggunaan token yang dikembalikan API bersama respons tersebut. Respons yang mencapai cap tetap diselesaikan dan dihitung dalam [`total_cost_usd`](/docs/id/agent-sdk/cost-tracking#get-the-total-cost-of-a-query). Oleh karena itu, pengeluaran dapat melewati cap hingga sebesar biaya satu respons tersebut, ditambah apa pun yang dibelanjakan subagent yang masih berjalan pada saat itu sebelum berhenti. Sisakan ruang cadangan untuk hal ini saat Anda menetapkan cap.

232 

227<h3 id="effort-level">233<h3 id="effort-level">

228 Effort level234 Effort level

229</h3>235</h3>

Details

146| `auto` | Persetujuan yang diklasifikasikan model | Pengklasifikasi model meninjau tindakan seperti perintah shell dan permintaan jaringan, memungkinkan atau memblokir masing-masing yang ditinjau. Lihat [Mode Auto](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) untuk ketersediaan dan urutan keputusan |146| `auto` | Persetujuan yang diklasifikasikan model | Pengklasifikasi model meninjau tindakan seperti perintah shell dan permintaan jaringan, memungkinkan atau memblokir masing-masing yang ditinjau. Lihat [Mode Auto](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) untuk ketersediaan dan urutan keputusan |

147 147 

148<Warning>148<Warning>

149 **Pewarisan subagent:** Subagent berjalan dalam mode izin sesi induk kecuali Anda mengatur `permissionMode` pada [`AgentDefinition`](/docs/id/agent-sdk/typescript#agentdefinition) dan sesi induk berada dalam mode `default`, `dontAsk`, atau `plan`. Bahkan kemudian, Claude Code tidak pernah menerapkan nilai `"bypassPermissions"`. Subagent berjalan dalam mode `bypassPermissions` hanya ketika sesi induk itu sendiri melakukannya. Pengecualian `bypassPermissions` memerlukan Claude Code v2.1.267 atau lebih baru.149 **Pewarisan subagent:** Subagent berjalan dalam mode izin sesi induk kecuali Anda mengatur `permissionMode` pada [`AgentDefinition`](/docs/id/agent-sdk/typescript#agentdefinition) dan sesi induk berada dalam mode `default`, `dontAsk`, atau `plan`. Bahkan kemudian, Claude Code tidak pernah menerapkan nilai `"bypassPermissions"`, dan menerapkan nilai `"auto"` hanya ketika [auto mode tersedia](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) untuk subagent tersebut. Subagent berjalan dalam mode `bypassPermissions` hanya ketika sesi induk itu sendiri melakukannya. Pengecualian `bypassPermissions` memerlukan Claude Code v2.1.267 atau lebih baru.

150 150 

151 Subagent mungkin memiliki prompt sistem yang berbeda dan perilaku yang kurang terbatas daripada agen utama Anda, jadi mewarisi `bypassPermissions` memberi mereka akses sistem penuh dan otonom. [Tindakan yang tidak ada mode auto-approve](/docs/id/permission-modes#actions-no-mode-auto-approves) masih berlaku.151 Subagent mungkin memiliki prompt sistem yang berbeda dan perilaku yang kurang terbatas daripada agen utama Anda, jadi mewarisi `bypassPermissions` memberi mereka akses sistem penuh dan otonom. [Tindakan yang tidak ada mode auto-approve](/docs/id/permission-modes#actions-no-mode-auto-approves) masih berlaku.

152</Warning>152</Warning>

Details

928| `resume` | `str \| None` | `None` | ID sesi untuk dilanjutkan |928| `resume` | `str \| None` | `None` | ID sesi untuk dilanjutkan |

929| `session_id` | `str \| None` | `None` | Gunakan ID sesi tertentu alih-alih yang dibuat otomatis. Harus UUID yang valid. Tidak dapat digabungkan dengan `continue_conversation` atau `resume` kecuali `fork_session` juga diatur |929| `session_id` | `str \| None` | `None` | Gunakan ID sesi tertentu alih-alih yang dibuat otomatis. Harus UUID yang valid. Tidak dapat digabungkan dengan `continue_conversation` atau `resume` kecuali `fork_session` juga diatur |

930| `max_turns` | `int \| None` | `None` | Jumlah maksimal giliran agentic (round trip penggunaan tool) |930| `max_turns` | `int \| None` | `None` | Jumlah maksimal giliran agentic (round trip penggunaan tool) |

931| `max_budget_usd` | `float \| None` | `None` | Hentikan query ketika estimasi biaya sisi klien mencapai nilai USD ini. Hanya menghitung pengeluaran panggilan sendiri; total yang dipulihkan dari sesi yang dilanjutkan tidak dihitung. Untuk peringatan akurasi dan perilaku reset, lihat [Track cost and usage](/docs/id/agent-sdk/cost-tracking) |931| `max_budget_usd` | `float \| None` | `None` | Hentikan query ketika estimasi biaya sisi klien mencapai nilai USD ini. Estimasi dapat melampaui nilai ini, jadi [sisakan ruang](/docs/id/agent-sdk/agent-loop#budget-headroom). Hanya menghitung pengeluaran panggilan sendiri; total yang dipulihkan dari sesi yang dilanjutkan tidak dihitung. Untuk peringatan akurasi dan perilaku reset, lihat [Track cost and usage](/docs/id/agent-sdk/cost-tracking) |

932| `disallowed_tools` | `list[str]` | `[]` | Tools untuk ditolak. Nama bare seperti `"Bash"` menghapus tool dari konteks Claude. Aturan scoped seperti `"Bash(rm *)"` membiarkan tool tersedia dan menolak panggilan yang cocok di setiap mode izin, termasuk `bypassPermissions`, untuk perintah [seperti yang ditulis](/docs/id/permissions#bash-rule-limits). Lihat [Permissions](/docs/id/agent-sdk/permissions#allow-and-deny-rules) |932| `disallowed_tools` | `list[str]` | `[]` | Tools untuk ditolak. Nama bare seperti `"Bash"` menghapus tool dari konteks Claude. Aturan scoped seperti `"Bash(rm *)"` membiarkan tool tersedia dan menolak panggilan yang cocok di setiap mode izin, termasuk `bypassPermissions`, untuk perintah [seperti yang ditulis](/docs/id/permissions#bash-rule-limits). Lihat [Permissions](/docs/id/agent-sdk/permissions#allow-and-deny-rules) |

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

934| `model` | `str \| None` | `None` | Alias model Claude atau nama model lengkap. Lihat [nilai yang diterima dan ID khusus penyedia](/docs/id/model-config#available-models) |934| `model` | `str \| None` | `None` | Alias model Claude atau nama model lengkap. Lihat [nilai yang diterima dan ID khusus penyedia](/docs/id/model-config#available-models) |


987```987```

988 988 

989* `API_TIMEOUT_MS`: timeout per-permintaan pada klien Anthropic, dalam milidetik. Default `600000`. Berlaku untuk loop utama dan semua subagent.989* `API_TIMEOUT_MS`: timeout per-permintaan pada klien Anthropic, dalam milidetik. Default `600000`. Berlaku untuk loop utama dan semua subagent.

990* `CLAUDE_CODE_MAX_RETRIES`: maksimal retry API. Default `10`, dibatasi pada `15`. Setiap retry mendapat jendela `API_TIMEOUT_MS` sendiri, jadi waktu dinding terburuk kira-kira `API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)` ditambah backoff. Untuk run tanpa pengawasan yang perlu menunggu melalui pemadaman yang lebih lama, atur [`CLAUDE_CODE_RETRY_WATCHDOG=1`](/docs/id/errors#tune-retry-behavior): itu mencoba ulang error kapasitas transien tanpa batas dan, pada Claude Code v2.1.199 atau lebih baru, menaikkan default untuk error transien lainnya menjadi `300` dan menghapus batas pada variabel ini.990* `CLAUDE_CODE_MAX_RETRIES`: maksimal retry API. Default `10`, dibatasi pada `15`. Setiap retry mendapat jendela `API_TIMEOUT_MS` sendiri.

991 

992 Untuk run tanpa pengawasan yang perlu menunggu melalui pemadaman yang lebih lama, atur [`CLAUDE_CODE_RETRY_WATCHDOG=1`](/docs/id/errors#tune-retry-behavior): itu mencoba ulang error kapasitas transien tanpa batas dan, pada Claude Code v2.1.199 atau lebih baru, menaikkan default untuk error transien lainnya menjadi `300` dan menghapus batas pada variabel ini.

991* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`: watchdog stall untuk subagent. Sementara watchdog stream aktif, default adalah `CLAUDE_STREAM_IDLE_TIMEOUT_MS` ditambah 5 menit, yang menjadi `600000` kecuali Anda menaikkan variabel itu. Dengan watchdog stream mati, default adalah `600000`. Sebelum v2.1.257, default selalu `600000`.993* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`: watchdog stall untuk subagent. Sementara watchdog stream aktif, default adalah `CLAUDE_STREAM_IDLE_TIMEOUT_MS` ditambah 5 menit, yang menjadi `600000` kecuali Anda menaikkan variabel itu. Dengan watchdog stream mati, default adalah `600000`. Sebelum v2.1.257, default selalu `600000`.

992 994 

993 Timer direset pada setiap event stream. Pada stall, Claude Code membatalkan subagent dan melaporkan stall ke parent. Untuk subagent latar belakang, itu juga menandai tugas gagal dan melampirkan hasil parsial apa pun.995 Timer direset pada setiap event stream. Pada stall, Claude Code membatalkan subagent dan melaporkan stall ke parent. Untuk subagent latar belakang, itu juga menandai tugas gagal dan melampirkan hasil parsial apa pun.


3327{3329{

3328 "url": str, # URL untuk mengambil konten dari3330 "url": str, # URL untuk mengambil konten dari

3329 "prompt": str, # Prompt untuk dijalankan pada konten yang diambil3331 "prompt": str, # Prompt untuk dijalankan pada konten yang diambil

3332 "offset": int | None, # Jumlah karakter yang dilewati dari awal halaman. Memerlukan Python Agent SDK 0.2.164 atau lebih baru

3330}3333}

3331```3334```

3332 3335 

Details

323 Deteksi pemanggilan subagent323 Deteksi pemanggilan subagent

324</h2>324</h2>

325 325 

326Claude memanggil subagent melalui tool Agent. Untuk mendeteksi ketika subagent dipanggil, periksa blok `tool_use` di mana `name` adalah `"Agent"`. Pesan dari dalam konteks subagent mencakup field `parent_tool_use_id`.326Claude memanggil subagent melalui tool Agent. Untuk mendeteksi ketika subagent dipanggil, periksa blok `tool_use` di mana `name` adalah `"Agent"`.

327 

328Pesan dari dalam konteks subagent mencakup field `parent_tool_use_id`. Di TypeScript, setiap pesan assistant dan user yang dihasilkan subagent juga membawa [`agent_id`](/docs/id/agent-sdk/typescript#sdkassistantmessage): `task_id` dari [event task](/docs/id/agent-sdk/typescript#sdktaskstartedmessage) subagent tersebut. `agent_id` memerlukan TypeScript Agent SDK v0.3.292 atau yang lebih baru.

327 329 

328<Note>330<Note>

329 Tool muncul sebagai `"Agent"` dalam blok `tool_use` tetapi sebagai `"Task"` dalam daftar tool `system:init`. Sebelum Claude Code v2.1.63, blok `tool_use` juga menamakannya `"Task"`. Untuk menjaga deteksi tetap berfungsi di seluruh versi SDK, cocokkan kedua nilai dalam `block.name`.331 Tool muncul sebagai `"Agent"` dalam blok `tool_use` tetapi sebagai `"Task"` dalam daftar tool `system:init`. Sebelum Claude Code v2.1.63, blok `tool_use` juga menamakannya `"Task"`. Untuk menjaga deteksi tetap berfungsi di seluruh versi SDK, cocokkan kedua nilai dalam `block.name`.


331 333 

332Struktur pesan berbeda antara SDK. Di Python, Anda mengakses blok konten secara langsung melalui `message.content`. Di TypeScript, `SDKAssistantMessage` membungkus pesan API Claude, jadi Anda mengakses konten melalui `message.message.content`.334Struktur pesan berbeda antara SDK. Di Python, Anda mengakses blok konten secara langsung melalui `message.content`. Di TypeScript, `SDKAssistantMessage` membungkus pesan API Claude, jadi Anda mengakses konten melalui `message.message.content`.

333 335 

334Contoh ini melakukan iterasi melalui pesan yang di-stream, mencatat ketika subagent dipanggil dan ketika pesan berikutnya berasal dari dalam konteks eksekusi subagent tersebut.336Contoh ini melakukan iterasi melalui pesan yang di-stream, mencatat ketika subagent dipanggil dan ketika pesan berikutnya berasal dari dalam konteks eksekusi subagent tersebut. Versi TypeScript juga mencatat `agent_id` dari setiap pesan subagent yang membawanya.

335 337 

336<CodeGroup>338<CodeGroup>

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


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

404 if (msg.parent_tool_use_id) {406 if (msg.parent_tool_use_id) {

405 console.log(" (running inside subagent)");407 console.log(" (running inside subagent)");

408 // On assistant and user messages, agent_id matches the task_id

409 // on that subagent's task_started and other task events

410 if (msg.agent_id) {

411 console.log(` agent_id: ${msg.agent_id}`);

412 }

406 }413 }

407 414 

408 if ("result" in message) {415 if ("result" in message) {

Details

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

570| `loadTimeoutMs` | `number` | `60000` | *Alpha.* Timeout dalam milidetik untuk setiap panggilan `sessionStore.load()` dan `sessionStore.listSubkeys()` selama materialisasi resume. Jika adapter tidak selesai dalam jendela waktu ini, query gagal alih-alih menggantung. Diabaikan jika `sessionStore` tidak diatur |570| `loadTimeoutMs` | `number` | `60000` | *Alpha.* Timeout dalam milidetik untuk setiap panggilan `sessionStore.load()` dan `sessionStore.listSubkeys()` selama materialisasi resume. Jika adapter tidak selesai dalam jendela waktu ini, query gagal alih-alih menggantung. Diabaikan jika `sessionStore` tidak diatur |

571| `managedSettings` | `Settings` | `undefined` | Pengaturan tingkat kebijakan yang disediakan proses host Anda ke sesi yang di-spawn. Pada mesin dengan pengaturan terkelola yang di-deploy admin, Claude Code mengabaikan pengaturan ini kecuali sumber terkelola dengan prioritas tertinggi milik admin mengatur `parentSettingsBehavior: 'merge'`, dan tidak pernah menggabungkannya selama [`policyHelper`](/docs/id/settings-reference#policyhelper) menyediakan pengaturan terkelola. Nilai yang digabungkan melewati filter yang hanya bersifat membatasi; [Membatasi pengaturan induk](/docs/id/claude-apps-gateway#restrict-parent-settings) membahas apa yang diloloskan filter dan kunci `allowManaged*Only`. Host yang mengatur [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/id/env-vars) memiliki tiga kunci yang justru dibaca langsung dari payload ini: [konfigurasi model](/docs/id/model-config#restrict-model-selection)-nya pada Claude Code v2.1.222 atau lebih baru, [`modelPricing`](/docs/id/settings-reference#modelpricing) ketika tidak ada sumber terkelola yang mengaturnya pada v2.1.246 atau lebih baru, dan entri env `ENABLE_TOOL_SEARCH`-nya pada v2.1.247 atau lebih baru |571| `managedSettings` | `Settings` | `undefined` | Pengaturan tingkat kebijakan yang disediakan proses host Anda ke sesi yang di-spawn. Pada mesin dengan pengaturan terkelola yang di-deploy admin, Claude Code mengabaikan pengaturan ini kecuali sumber terkelola dengan prioritas tertinggi milik admin mengatur `parentSettingsBehavior: 'merge'`, dan tidak pernah menggabungkannya selama [`policyHelper`](/docs/id/settings-reference#policyhelper) menyediakan pengaturan terkelola. Nilai yang digabungkan melewati filter yang hanya bersifat membatasi; [Membatasi pengaturan induk](/docs/id/claude-apps-gateway#restrict-parent-settings) membahas apa yang diloloskan filter dan kunci `allowManaged*Only`. Host yang mengatur [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/id/env-vars) memiliki tiga kunci yang justru dibaca langsung dari payload ini: [konfigurasi model](/docs/id/model-config#restrict-model-selection)-nya pada Claude Code v2.1.222 atau lebih baru, [`modelPricing`](/docs/id/settings-reference#modelpricing) ketika tidak ada sumber terkelola yang mengaturnya pada v2.1.246 atau lebih baru, dan entri env `ENABLE_TOOL_SEARCH`-nya pada v2.1.247 atau lebih baru |

572| `maxBudgetUsd` | `number` | `undefined` | Hentikan query ketika estimasi biaya sisi klien mencapai nilai USD ini. Hanya menghitung pengeluaran panggilan itu sendiri; total yang dipulihkan dari sesi yang dilanjutkan tidak dihitung. Untuk catatan akurasi dan perilaku reset, lihat [Melacak biaya dan penggunaan](/docs/id/agent-sdk/cost-tracking) |572| `maxBudgetUsd` | `number` | `undefined` | Menghentikan query saat estimasi biaya sisi klien mencapai nilai USD ini. Estimasi dapat melewati nilai ini, jadi [sisakan ruang](/docs/id/agent-sdk/agent-loop#budget-headroom). Hanya menghitung pengeluaran panggilan itu sendiri; total yang dipulihkan dari sesi yang dilanjutkan tidak dihitung. Untuk catatan akurasi dan perilaku reset, lihat [Melacak biaya dan penggunaan](/docs/id/agent-sdk/cost-tracking) |

573| `maxThinkingTokens` | `number` | `undefined` | *Tidak digunakan lagi:* Gunakan `thinking` sebagai gantinya. Token maksimum untuk proses thinking |573| `maxThinkingTokens` | `number` | `undefined` | *Tidak digunakan lagi:* Gunakan `thinking` sebagai gantinya. Token maksimum untuk proses thinking |

574| `maxTurns` | `number` | `undefined` | Giliran agentic maksimum (perjalanan bolak-balik penggunaan tool) |574| `maxTurns` | `number` | `undefined` | Giliran agentic maksimum (perjalanan bolak-balik penggunaan tool) |

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


631```631```

632 632 

633* `API_TIMEOUT_MS`: timeout per permintaan pada klien Anthropic, dalam milidetik. Default `600000`. Berlaku untuk loop utama dan semua subagent.633* `API_TIMEOUT_MS`: timeout per permintaan pada klien Anthropic, dalam milidetik. Default `600000`. Berlaku untuk loop utama dan semua subagent.

634* `CLAUDE_CODE_MAX_RETRIES`: jumlah retry API maksimum. Default `10`, dibatasi hingga `15`. Setiap retry mendapat jendela `API_TIMEOUT_MS` sendiri, sehingga waktu total terburuk kira-kira `API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)` ditambah backoff. Untuk proses tanpa pengawasan yang perlu menunggu gangguan yang lebih lama, atur [`CLAUDE_CODE_RETRY_WATCHDOG=1`](/docs/id/errors#tune-retry-behavior): opsi ini mencoba ulang error kapasitas sementara tanpa batas dan, pada Claude Code v2.1.199 atau lebih baru, menaikkan default untuk error sementara lainnya menjadi `300` dan menghapus batas pada variabel ini.634* `CLAUDE_CODE_MAX_RETRIES`: jumlah retry API maksimum. Default `10`, dibatasi hingga `15`. Setiap retry mendapatkan jendela `API_TIMEOUT_MS` sendiri.

635 

636 Untuk eksekusi tanpa pengawasan yang perlu menunggu gangguan yang lebih lama, atur [`CLAUDE_CODE_RETRY_WATCHDOG=1`](/docs/id/errors#tune-retry-behavior): opsi ini mencoba ulang error kapasitas sementara tanpa batas dan, pada Claude Code v2.1.199 atau lebih baru, menaikkan default untuk error sementara lainnya menjadi `300` serta menghapus batas pada variabel ini.

635* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`: watchdog kemacetan untuk subagent. Selama stream watchdog aktif, defaultnya adalah `CLAUDE_STREAM_IDLE_TIMEOUT_MS` ditambah 5 menit, yang berjumlah `600000` kecuali Anda menaikkan variabel tersebut. Dengan stream watchdog nonaktif, defaultnya adalah `600000`. Sebelum v2.1.257, defaultnya selalu `600000`.637* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`: watchdog kemacetan untuk subagent. Selama stream watchdog aktif, defaultnya adalah `CLAUDE_STREAM_IDLE_TIMEOUT_MS` ditambah 5 menit, yang berjumlah `600000` kecuali Anda menaikkan variabel tersebut. Dengan stream watchdog nonaktif, defaultnya adalah `600000`. Sebelum v2.1.257, defaultnya selalu `600000`.

636 638 

637 Timer di-reset pada setiap event stream. Saat terjadi kemacetan, Claude Code membatalkan subagent dan melaporkan kemacetan tersebut ke induknya. Untuk subagent latar belakang, Claude Code juga menandai tugas sebagai gagal dan melampirkan hasil parsial apa pun.639 Timer di-reset pada setiap event stream. Saat terjadi kemacetan, Claude Code membatalkan subagent dan melaporkan kemacetan tersebut ke induknya. Untuk subagent latar belakang, Claude Code juga menandai tugas sebagai gagal dan melampirkan hasil parsial apa pun.


1557 type: "assistant";1559 type: "assistant";

1558 uuid: UUID;1560 uuid: UUID;

1559 session_id: string;1561 session_id: string;

1560 message: BetaMessage; // Dari Anthropic SDK1562 message: BetaMessage; // From Anthropic SDK

1561 parent_tool_use_id: string | null;1563 parent_tool_use_id: string | null;

1562 error?: SDKAssistantMessageError;1564 error?: SDKAssistantMessageError;

1563 aborted?: true;1565 aborted?: true;

1566 agent_id?: string;

1564 timestamp?: string;1567 timestamp?: string;

1565 context_usage?: SDKContextUsage;1568 context_usage?: SDKContextUsage;

1566 user_message_uuid?: string;1569 user_message_uuid?: string;


1580 1583 

1581`aborted` adalah `true` ketika gangguan atau pembatalan memotong pesan asisten sebelum aliran selesai: pesan tidak memiliki `stop_reason` dan konten mungkin berakhir di tengah kata. Bidang ini tidak ada pada pesan yang diselesaikan secara normal. Ini memerlukan Agent SDK v0.3.214 atau lebih baru.1584`aborted` adalah `true` ketika gangguan atau pembatalan memotong pesan asisten sebelum aliran selesai: pesan tidak memiliki `stop_reason` dan konten mungkin berakhir di tengah kata. Bidang ini tidak ada pada pesan yang diselesaikan secara normal. Ini memerlukan Agent SDK v0.3.214 atau lebih baru.

1582 1585 

1586`agent_id` mengidentifikasi subagent yang menghasilkan pesan dan tidak ada pada pesan thread utama. Nilainya sama dengan `task_id` pada [`task_started`](#sdktaskstartedmessage) dan event tugas lainnya dari subagent tersebut, dan tidak berubah ketika subagent [dilanjutkan](/docs/id/agent-sdk/subagents#resume-subagents). Field ini memerlukan Agent SDK v0.3.292 atau yang lebih baru.

1587 

1588Cocokkan pesan subagent dengan event tugasnya berdasarkan `agent_id` alih-alih memasangkan `parent_tool_use_id` sebuah pesan dengan `tool_use_id` sebuah event tugas. Ketika sebuah panggilan tool melanjutkan subagent, event tugas membawa `tool_use_id` dari panggilan tersebut, sedangkan pesan tetap membawa `parent_tool_use_id` dari panggilan tool yang pertama kali memulai subagent, sehingga keduanya tidak lagi cocok.

1589 

1583Claude Code menetapkan `user_message_uuid` dan `user_message_uuids` pada pesan asisten pertama giliran, di bawah kondisi dalam [`user_message_uuid`](#user_message_uuid). Ketika Claude Code menjalankan kembali giliran yang terinterupsi oleh restart, pesan asisten re-run yang membawa bidang itu juga membawa [`resume_reason`](#resume_reason).1590Claude Code menetapkan `user_message_uuid` dan `user_message_uuids` pada pesan asisten pertama giliran, di bawah kondisi dalam [`user_message_uuid`](#user_message_uuid). Ketika Claude Code menjalankan kembali giliran yang terinterupsi oleh restart, pesan asisten re-run yang membawa bidang itu juga membawa [`resume_reason`](#resume_reason).

1584 1591 

1585`timestamp` adalah waktu ISO 8601 ketika konten pesan selesai dihasilkan pada proses yang menghasilkannya. Nilai berasal dari jam mesin itu, jadi gunakan hanya untuk tampilan dan jangan urutkan pesan berdasarkannya. Satu giliran API dapat menghasilkan beberapa pesan asisten yang berbagi `message.id`, masing-masing dengan `timestamp` sendiri. Ketika bidang tidak ada, kembali ke waktu Anda menerima pesan.1592`timestamp` adalah waktu ISO 8601 ketika konten pesan selesai dihasilkan pada proses yang menghasilkannya. Nilai berasal dari jam mesin itu, jadi gunakan hanya untuk tampilan dan jangan urutkan pesan berdasarkannya. Satu giliran API dapat menghasilkan beberapa pesan asisten yang berbagi `message.id`, masing-masing dengan `timestamp` sendiri. Ketika bidang tidak ada, kembali ke waktu Anda menerima pesan.


1597 type: "user";1604 type: "user";

1598 uuid?: UUID;1605 uuid?: UUID;

1599 session_id?: string;1606 session_id?: string;

1607 agent_id?: string;

1600 message: MessageParam; // From Anthropic SDK1608 message: MessageParam; // From Anthropic SDK

1601 pasted_content?: MessageParam["content"][];1609 pasted_content?: MessageParam["content"][];

1602 parent_tool_use_id: string | null;1610 parent_tool_use_id: string | null;


1636};1644};

1637```1645```

1638 1646 

1647Pesan pengguna yang dihasilkan subagent, seperti `tool_result` untuk salah satu panggilan tool-nya sendiri, membawa `agent_id`. Lihat [`SDKAssistantMessage`](#sdkassistantmessage), yang mendefinisikan field tersebut dan persyaratan versinya.

1648 

1639Pada pesan yang membawa blok `tool_result`, `tool_use_result` adalah objek output terstruktur dari tool, bukan teks yang dikirim ke model. Bentuknya bergantung pada tool yang disebutkan oleh blok `tool_use` yang sesuai, sehingga field ini bertipe `unknown`; bentuk bawaan tercantum di [Tool Output Types](#tool-output-types). Hasil-hasil berikut memerlukan penanganan di luar bentuk yang tercantum:1649Pada pesan yang membawa blok `tool_result`, `tool_use_result` adalah objek output terstruktur dari tool, bukan teks yang dikirim ke model. Bentuknya bergantung pada tool yang disebutkan oleh blok `tool_use` yang sesuai, sehingga field ini bertipe `unknown`; bentuk bawaan tercantum di [Tool Output Types](#tool-output-types). Hasil-hasil berikut memerlukan penanganan di luar bentuk yang tercantum:

1640 1650 

1641* Tool `Agent`: `tool_use_result` adalah [`AgentOutput`](#agent-2). Render dari objek ini alih-alih mengurai teks `tool_result`. `content` dari hasil `completed` berisi laporan subagent, atau, untuk subagent yang laporannya melalui panggilan tool `SubagentHandback`, catatan singkat tentang penyerahan tersebut sebagai pengganti laporan. Dalam [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) pada Claude Code v2.1.271 atau lebih baru, setiap subagent yang menghasilkan hasil `completed` melapor dengan cara tersebut kecuali jika merupakan [fork](/docs/id/sub-agents#fork-the-current-conversation), dan Claude menerima laporan sebagai pesan terpisah dari subagent.1651* Tool `Agent`: `tool_use_result` adalah [`AgentOutput`](#agent-2). Render dari objek ini alih-alih mengurai teks `tool_result`. `content` dari hasil `completed` berisi laporan subagent, atau, untuk subagent yang laporannya melalui panggilan tool `SubagentHandback`, catatan singkat tentang penyerahan tersebut sebagai pengganti laporan. Dalam [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) pada Claude Code v2.1.271 atau lebih baru, setiap subagent yang menghasilkan hasil `completed` melapor dengan cara tersebut kecuali jika merupakan [fork](/docs/id/sub-agents#fork-the-current-conversation), dan Claude menerima laporan sebagai pesan terpisah dari subagent.


1992 `SDKPartialAssistantMessage`2002 `SDKPartialAssistantMessage`

1993</h3>2003</h3>

1994 2004 

1995Pesan parsial streaming (hanya ketika `includePartialMessages` adalah true). Bidang `parent_tool_use_id` selalu `null`: acara aliran dipancarkan untuk sesi utama saja. Untuk atribusi subagent, gunakan pesan lengkap, yang membawa `parent_tool_use_id`, atau aktifkan [`forwardSubagentText`](#options) untuk menerima teks dan thinking subagent sebagai pesan lengkap.2005Pesan parsial streaming (hanya ketika `includePartialMessages` bernilai true).

2006 

2007Field `parent_tool_use_id` selalu `null`: event stream hanya dikeluarkan untuk sesi utama. Untuk atribusi subagent, gunakan pesan lengkap, yang membawa [`agent_id`](#sdkassistantmessage) dan `parent_tool_use_id`, atau aktifkan [`forwardSubagentText`](#options) untuk menerima teks dan thinking subagent sebagai pesan lengkap.

1996 2008 

1997```typescript theme={null}2009```typescript theme={null}

1998type SDKPartialAssistantMessage = {2010type SDKPartialAssistantMessage = {


3418type WebFetchInput = {3430type WebFetchInput = {

3419 url: string;3431 url: string;

3420 prompt: string;3432 prompt: string;

3433 offset?: number;

3421};3434};

3422```3435```

3423 3436 

3424Mengambil konten dari URL dan memprosesnya dengan model AI.3437Mengambil konten dari URL dan memprosesnya dengan model AI.

3425 3438 

3439`offset` adalah jumlah karakter yang dilewati dari awal halaman. Claude mengaturnya untuk melanjutkan membaca halaman yang panjang. Bidang ini memerlukan Agent SDK v0.3.290 atau lebih baru.

3440 

3426<h3 id="websearch">3441<h3 id="websearch">

3427 WebSearch3442 WebSearch

3428</h3>3443</h3>


5777 task_type?: string;5792 task_type?: string;

5778 is_backgrounded?: boolean;5793 is_backgrounded?: boolean;

5779 spawn_depth?: number;5794 spawn_depth?: number;

5795 parent_task_id?: string;

5780 ambient?: boolean;5796 ambient?: boolean;

5781 uuid: UUID;5797 uuid: UUID;

5782 session_id: string;5798 session_id: string;


5794 5810 

5795[Subagent yang dilanjutkan](/docs/id/agent-sdk/subagents#resume-subagents) selalu melaporkan `is_backgrounded: true`, karena Claude Code menjalankan setiap subagent yang dilanjutkan di latar belakang. Ketika tugas foreground kemudian pindah ke latar belakang, Claude Code melaporkan nilai `is_backgrounded` yang baru dalam pesan [`task_updated`](#sdktaskupdatedmessage) alih-alih mengirimkan `task_started` kedua.5811[Subagent yang dilanjutkan](/docs/id/agent-sdk/subagents#resume-subagents) selalu melaporkan `is_backgrounded: true`, karena Claude Code menjalankan setiap subagent yang dilanjutkan di latar belakang. Ketika tugas foreground kemudian pindah ke latar belakang, Claude Code melaporkan nilai `is_backgrounded` yang baru dalam pesan [`task_updated`](#sdktaskupdatedmessage) alih-alih mengirimkan `task_started` kedua.

5796 5812 

5813`parent_task_id` menyimpan `task_id` dari subagent yang meluncurkan tugas ini. Gunakan untuk mengelompokkan setiap tugas di bawah subagent yang memulainya. Claude Code menetapkannya pada tugas subagent, Bash, dan [Monitor](#monitor). Field ini memerlukan Agent SDK v0.3.292 atau lebih baru. Field ini tidak ada ketika:

5814 

5815* Thread utama meluncurkan tugas

5816* Claude Code tidak lagi melacak tugas parent

5817* [Rekan tim](/docs/id/agent-teams) atau agent di dalam workflow meluncurkan tugas

5818 

5819Parent dapat berupa tugas foreground atau tugas yang sudah berakhir, jadi perlakukan ID yang tidak Anda kenali sebagai tidak memiliki parent.

5820 

5797<h3 id="sdktaskprogressmessage">5821<h3 id="sdktaskprogressmessage">

5798 `SDKTaskProgressMessage`5822 `SDKTaskProgressMessage`

5799</h3>5823</h3>


5850 `SDKBackgroundTasksChangedMessage`5874 `SDKBackgroundTasksChangedMessage`

5851</h3>5875</h3>

5852 5876 

5853Dipancarkan setiap kali set tugas latar belakang yang aktif berubah: tugas dimulai, selesai, dihentikan paksa, agent foreground dipindahkan ke latar belakang, atau field `description` atau `ambient` suatu tugas berubah.5877Dipancarkan setiap kali set tugas latar belakang yang aktif berubah: tugas dimulai, selesai, atau dihentikan paksa; agent foreground dipindahkan ke latar belakang; atau field `description`, `ambient`, atau `parent_task_id` suatu tugas berubah. Untuk field `parent_task_id` pada setiap entri, lihat [`SDKTaskStartedMessage`](#sdktaskstartedmessage), yang mendefinisikannya beserta persyaratan versinya.

5854 5878 

5855Array `tasks` adalah set aktif lengkap. Ganti set yang di-cache dengan setiap payload alih-alih memasangkan event `task_started` dan `task_notification`, sehingga perubahan keanggotaan berikutnya memperbaiki event apa pun yang Anda lewatkan.5879Array `tasks` adalah set aktif lengkap. Ganti set yang di-cache dengan setiap payload alih-alih memasangkan event `task_started` dan `task_notification`, sehingga perubahan keanggotaan berikutnya memperbaiki event apa pun yang Anda lewatkan.

5856 5880 

5857Urutan relatif terhadap event per-tugas tersebut tidak ditentukan, jadi jangan mengorelasikan kedua stream tersebut.5881Ketika tugas berakhir, [`task_updated`](#sdktaskupdatedmessage) dan [`task_notification`](#sdktasknotificationmessage)-nya tiba sebelum `background_tasks_changed` yang menghapusnya dari daftar. Di luar itu, urutan relatif terhadap event per-tugas tidak ditentukan.

5858 5882 

5859Tidak ada yang dipancarkan saat startup. Atur ulang ke set kosong setiap kali proses CLI sesi dimulai atau dimulai ulang dan biarkan perubahan keanggotaan berikutnya mengisinya kembali.5883Tidak ada yang dipancarkan saat startup. Atur ulang ke set kosong setiap kali proses CLI sesi dimulai atau dimulai ulang dan biarkan perubahan keanggotaan berikutnya mengisinya kembali.

5860 5884 


5871 task_type: string;5895 task_type: string;

5872 subagent_type?: string;5896 subagent_type?: string;

5873 description: string;5897 description: string;

5898 parent_task_id?: string;

5874 ambient?: boolean;5899 ambient?: boolean;

5875 }[];5900 }[];

5876 uuid: UUID;5901 uuid: UUID;

Details

36 ```36 ```

37 37 

38 ```typescript TypeScript theme={null}38 ```typescript TypeScript theme={null}

39 async function handleToolRequest(toolName, input, options) {39 import type { CanUseTool } from "@anthropic-ai/claude-agent-sdk";

40 

41 const handleToolRequest: CanUseTool = async (toolName, input, options) => {

40 // options includes { signal: AbortSignal, suggestions?: PermissionUpdate[] }42 // options includes { signal: AbortSignal, suggestions?: PermissionUpdate[] }

41 // Minta pengguna dan kembalikan izin atau tolak43 // Minta pengguna di sini, lalu kembalikan allow atau deny

42 }44 return { behavior: "deny", message: "User declined" };

45 };

43 46 

44 const options = { canUseTool: handleToolRequest };47 const options = { canUseTool: handleToolRequest };

45 ```48 ```


437 for await (const message of query({440 for await (const message of query({

438 prompt: "Analyze this codebase",441 prompt: "Analyze this codebase",

439 options: {442 options: {

440 // Sertakan AskUserQuestion dalam daftar alat Anda443 // Sertakan AskUserQuestion dalam daftar tool Anda

441 tools: ["Read", "Glob", "Grep", "AskUserQuestion"],444 tools: ["Read", "Glob", "Grep", "AskUserQuestion"],

442 canUseTool: async (toolName, input) => {445 canUseTool: async (toolName, input) => {

443 // Tangani pertanyaan klarifikasi di sini446 // Placeholder yang menyetujui setiap panggilan. Langkah Deteksi AskUserQuestion menggantikannya.

447 return { behavior: "allow", updatedInput: input };

444 }448 }

445 }449 }

446 })) {450 })) {


763 767 

764 ```typescript TypeScript theme={null}768 ```typescript TypeScript theme={null}

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

770 import type { PermissionResult } from "@anthropic-ai/claude-agent-sdk";

766 import * as readline from "readline/promises";771 import * as readline from "readline/promises";

767 772 

768 // Helper untuk meminta input pengguna di terminal773 // Helper untuk meminta input pengguna di terminal


783 }788 }

784 789 

785 // Tampilkan pertanyaan Claude dan kumpulkan jawaban pengguna790 // Tampilkan pertanyaan Claude dan kumpulkan jawaban pengguna

786 async function handleAskUserQuestion(input: any) {791 async function handleAskUserQuestion(input: any): Promise<PermissionResult> {

787 const answers: Record<string, string> = {};792 const answers: Record<string, string> = {};

788 793 

789 for (const q of input.questions) {794 for (const q of input.questions) {


819 if (toolName === "AskUserQuestion") {824 if (toolName === "AskUserQuestion") {

820 return handleAskUserQuestion(input);825 return handleAskUserQuestion(input);

821 }826 }

822 // Setujui secara otomatis alat lain untuk contoh ini827 // Setujui secara otomatis tool lain untuk contoh ini

823 return { behavior: "allow", updatedInput: input };828 return { behavior: "allow", updatedInput: input };

824 }829 }

825 }830 }

agent-view.md +9 −6

Details

603 603 

604Di luar repositori git, sesi menulis ke direktori kerja secara langsung dan tidak terisolasi satu sama lain, jadi hindari mengirim sesi paralel yang mengedit file yang sama. Jika Anda menggunakan sistem kontrol versi yang berbeda, konfigurasikan [`WorktreeCreate` hook](/docs/id/worktrees#non-git-version-control) dan Claude mengisolasi edit dengan cara yang sama seperti untuk git.604Di luar repositori git, sesi menulis ke direktori kerja secara langsung dan tidak terisolasi satu sama lain, jadi hindari mengirim sesi paralel yang mengedit file yang sama. Jika Anda menggunakan sistem kontrol versi yang berbeda, konfigurasikan [`WorktreeCreate` hook](/docs/id/worktrees#non-git-version-control) dan Claude mengisolasi edit dengan cara yang sama seperti untuk git.

605 605 

606Ketika hook gagal di direktori yang bukan repositori git, Claude melewati isolasi untuk direktori itu dan mengedit direktori kerja di tempat. Di dalam repositori git, sesi yang dipindahkan Claude ke worktree sebelum mengedit tidak dapat mengedit file di checkout bersama sampai perpindahan itu terjadi.606Ketika hook gagal di direktori yang bukan repositori git, Claude melewati isolasi untuk direktori itu dan mengedit direktori kerja di tempat. Di dalam repositori git, sesi yang dipindahkan Claude ke worktree sebelum mengedit tidak dapat menggunakan tool `Edit`, `Write`, atau `NotebookEdit` pada checkout bersama sampai perpindahan itu terjadi.

607 607 

608Untuk menemukan jalur worktree sesi, lampirkan dan periksa direktori kerjanya.608Untuk menemukan jalur worktree sesi, lampirkan dan periksa direktori kerjanya.

609 609 


825| `claude daemon logs` | Ikuti file log supervisor, [`~/.claude/daemon.log`](#where-state-is-stored), dengan mencetak baris baru saat baris tersebut masuk hingga Anda menekan `Ctrl+C` |825| `claude daemon logs` | Ikuti file log supervisor, [`~/.claude/daemon.log`](#where-state-is-stored), dengan mencetak baris baru saat baris tersebut masuk hingga Anda menekan `Ctrl+C` |

826| `claude daemon stop --any` | Hentikan proses supervisor dan sesi latar belakang yang dihosting. Lewatkan `--keep-workers` untuk membiarkan sesi latar belakang tetap berjalan sehingga supervisor berikutnya dapat terhubung kembali ke sesi tersebut. `claude agents` atau `claude --bg` berikutnya memulai supervisor baru |826| `claude daemon stop --any` | Hentikan proses supervisor dan sesi latar belakang yang dihosting. Lewatkan `--keep-workers` untuk membiarkan sesi latar belakang tetap berjalan sehingga supervisor berikutnya dapat terhubung kembali ke sesi tersebut. `claude agents` atau `claude --bg` berikutnya memulai supervisor baru |

827 827 

828`claude attach` dan `claude logs` dapat menerima sebagian nama sesi yang sedang berjalan sebagai pengganti ID, seperti dalam `claude logs "auth refactor"`. Meneruskan nama memerlukan Claude Code v2.1.290 atau lebih baru.828`claude attach` dan `claude logs` dapat menerima sebagian nama sesi sebagai pengganti ID, seperti dalam `claude logs "auth refactor"`. Meneruskan nama memerlukan Claude Code v2.1.290 atau lebih baru.

829 829 

830<h3 id="list-sessions-as-json">830<h3 id="list-sessions-as-json">

831 Daftar sesi sebagai JSON831 Daftar sesi sebagai JSON


979 Membuka sesi mengatakan tidak memiliki transkrip yang disimpan979 Membuka sesi mengatakan tidak memiliki transkrip yang disimpan

980</h3>980</h3>

981 981 

982Sesi yang dihentikan yang [dilepaskan dari percakapan lain](#from-inside-a-session) dan dihentikan sebelum respons pertamanya selesai tidak memiliki apa pun untuk dilanjutkan: sampai respons pertama itu selesai, percakapan masih hidup hanya dalam sesi yang dilepaskan darinya. `claude attach` menolak untuk membukanya dengan `This session has no saved transcript`.982Saat Anda membuka sesi yang Anda [lepaskan dari percakapan lain](#from-inside-a-session) dan yang berhenti sebelum menjalankan gilirannya sendiri, Claude Code melanjutkan percakapan tersebut. Jika Claude Code tidak dapat menemukan percakapan tersebut, Claude Code menolak untuk membuka sesi:

983 983 

984Dalam tampilan agent, membuka baris itu menampilkan `Press enter again to restart this session fresh` di bawah daftar. Tekan `Enter` pada baris yang sama lagi untuk memulai ulang sesi dengan percakapan kosong, atau jalankan `claude respawn <id>` dari shell.984* `claude attach` mencetak `This session has no saved transcript`.

985* Tampilan agent menampilkan `Press enter again to restart this session fresh` di bawah daftar.

985 986 

986Percakapan asli tetap utuh; lanjutkan dengan `claude --resume` atau terus bekerja di dalamnya. Lihat [referensi kesalahan](/docs/id/errors#this-session-has-no-saved-transcript) untuk detail.987Tekan `Enter` pada baris yang sama lagi untuk memulai ulang sesi dengan percakapan kosong, atau jalankan `claude respawn <id>` dari shell.

988 

989Lihat [referensi kesalahan](/docs/id/errors#this-session-has-no-saved-transcript) untuk detail.

987 990 

988<h3 id="the-terminal-host-died-or-the-session-stopped-responding">991<h3 id="the-terminal-host-died-or-the-session-stopped-responding">

989 Host terminal mati atau sesi berhenti merespons992 Host terminal mati atau sesi berhenti merespons


1095 1098 

1096| Versi | Perubahan |1099| Versi | Perubahan |

1097| - | - |1100| - | - |

1098| v2.1.290 | [`claude attach` dan `claude logs`](#manage-sessions-from-the-shell) dapat menerima sebagian nama sesi yang sedang berjalan sebagai pengganti ID. |1101| v2.1.290 | [`claude attach` dan `claude logs`](#manage-sessions-from-the-shell) dapat menerima sebagian nama sesi sebagai pengganti ID. |

1099| v2.1.290 | `/model`, `/effort`, `/rename`, dan `/usage` yang dikirim sebagai [balasan intip](#peek-and-reply) ke sesi yang sedang bekerja langsung dijalankan. |1102| v2.1.290 | `/model`, `/effort`, `/rename`, dan `/usage` yang dikirim sebagai [balasan intip](#peek-and-reply) ke sesi yang sedang bekerja langsung dijalankan. |

1100| v2.1.290 | [Balasan intip](#peek-and-reply) yang tidak dapat dikirimkan tidak lagi disimpan untuk restart berikutnya ketika diawali dengan `/`, atau ketika menjawab pertanyaan dengan pilihan yang telah ditentukan sementara proses sesi sedang berjalan. |1103| v2.1.290 | [Balasan intip](#peek-and-reply) yang tidak dapat dikirimkan tidak lagi disimpan untuk restart berikutnya ketika diawali dengan `/`, atau ketika menjawab pertanyaan dengan pilihan yang telah ditentukan sementara proses sesi sedang berjalan. |

1101| v2.1.288 | `Ctrl+F` menemukan sesi berdasarkan nama, dan `Alt+↑` / `Alt+↓` melompat antar header grup. Keduanya, serta `Ctrl+R`, dapat [diatur ulang pintasannya](/docs/id/keybindings#agents-actions). |1104| v2.1.288 | `Ctrl+F` menemukan sesi berdasarkan nama, dan `Alt+↑` / `Alt+↓` melompat antar header grup. Keduanya, serta `Ctrl+R`, dapat [diatur ulang pintasannya](/docs/id/keybindings#agents-actions). |

artifacts.md +38 −10

Details

51Build a dashboard artifact of last week's deploy failures by service and keep it updated as you investigate.51Build a dashboard artifact of last week's deploy failures by service and keep it updated as you investigate.

52```52```

53 53 

54Kecuali Anda menentukan lokasi, Claude menulis halaman ke file HTML atau Markdown di direktori sementara di luar proyek Anda, kemudian menerbitkannya. Di luar [plan mode](/docs/id/permission-modes#analyze-before-you-edit-with-plan-mode), artefak baru yang Claude terbitkan sebagai respons terhadap prompt yang Anda ketik berjalan tanpa prompt izin atau tinjauan pengklasifikasi, kecuali penerbitan tersebut mendeklarasikan kemampuan runtime untuk halaman, seperti [connector calls](#pull-live-data-with-mcp-connectors) atau [file downloads](#offer-a-file-download). Dalam plan mode, Claude Code meminta Anda sebelum penerbitan pertama setiap artefak.54Kecuali Anda menentukan lokasi, Claude menulis halaman ke file HTML atau Markdown di direktori sementara di luar proyek Anda, kemudian menerbitkannya. Artifact tetap pribadi untuk Anda sampai Anda [membagikannya](#share-an-artifact).

55 55 

56Artefak tetap pribadi untuk Anda sampai Anda [membagikannya](#share-an-artifact). Setelah Anda membagikannya secara publik, Claude Code meminta persetujuan Anda sekali per percakapan sebelum mengubahnya, atau dalam [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) memiliki pengklasifikasi meninjau perubahan tersebut.56Setelah penerbitan pertama, Claude mencetak URL, dan browser Anda membuka halaman baru.

57 57 

58Jika Anda mematikan [feature-flag fetching](/docs/id/env-vars#features-that-need-feature-flag-fetching), Claude Code meminta sebelum penerbitan pertama setiap artefak, atau dalam auto mode memiliki pengklasifikasi meninjau artefak tersebut.58* **Buka kembali halaman**: tekan `Ctrl+]` kapan saja untuk membuka kembali artifact terbaru dari sesi

59* **Lihat artifact sesi ini**: pill `⧉` di bawah prompt menampilkan nama artifact, atau jumlahnya ketika sesi memiliki beberapa artifact. Dalam [fullscreen rendering](/docs/id/fullscreen), klik pill tersebut untuk membuka daftar [`/artifacts`](#find-an-artifact-again)

60* **Cegah browser terbuka**: atur `CLAUDE_CODE_ARTIFACT_AUTO_OPEN=0` di lingkungan Anda

61* **Remote Control**: jika Anda mengirim prompt melalui [Remote Control](/docs/id/remote-control) dari claude.ai, Claude Desktop, atau aplikasi Claude mobile, tidak ada tab yang terbuka di mesin yang menjalankan sesi. Browser terbuka di sana lain kali Claude menerbitkan artifact dari prompt yang Anda ketik di terminal

59 62 

60Setelah penerbitan pertama, Claude mencetak URL, dan browser Anda membuka halaman baru. Jika Anda mengirim prompt melalui [Remote Control](/docs/id/remote-control) dari claude.ai, Claude Desktop, atau aplikasi Claude mobile, tidak ada tab yang terbuka di mesin yang menjalankan sesi. Browser terbuka di sana lain kali Claude menerbitkan artefak dari prompt yang Anda ketik di terminal. Tekan `Ctrl+]` kapan saja untuk membuka kembali artefak terbaru dari sesi Anda.63Claude memilih judul artifact dan ikon tab browser yang sesuai dengan isi halaman, seperti bagan atau kalender. Judul muncul di [galeri artifact](#share-an-artifact) Anda di claude.ai dan di tautan bersama. Minta Claude untuk judul atau ikon tab tertentu jika Anda menginginkannya.

61 64 

62Claude memilih judul artefak dan emoji, dan keduanya muncul di [galeri artefak](#share-an-artifact) Anda di claude.ai dan di tautan bersama. Claude juga dapat memilih ikon tab browser yang sesuai dengan apa yang ada di halaman, seperti bagan atau kalender. Minta Claude untuk judul, emoji, atau ikon tab tertentu jika Anda menginginkannya.65Jika Claude merespons bahwa ia tidak dapat menerbitkan, atau menulis file HTML lokal tanpa tautan, artifact tidak diaktifkan untuk sesi Anda. Periksa persyaratan [Ketersediaan](#availability). Jika terminal menampilkan `Artifacts need a claude.ai login`, lihat [entri untuk error tersebut](/docs/id/errors#artifacts-need-a-claude-ai-login) untuk cara masuk.

63 66 

64Untuk menghentikan browser agar tidak membuka secara otomatis ketika artefak baru diterbitkan, atur `CLAUDE_CODE_ARTIFACT_AUTO_OPEN=0` di lingkungan Anda.67<h3 id="when-claude-code-asks-before-publishing">

68 Kapan Claude Code bertanya sebelum menerbitkan

69</h3>

70 

71Artifact baru yang Claude terbitkan sebagai respons terhadap prompt yang Anda ketik berjalan tanpa permintaan izin atau tinjauan pengklasifikasi. Dalam kasus-kasus berikut, Claude Code bertanya kepada Anda terlebih dahulu, atau dalam [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) meminta pengklasifikasi meninjau penerbitan tersebut:

65 72 

66Jika Claude merespons bahwa ia tidak dapat menerbitkan, atau menulis file HTML lokal tanpa tautan, alat tidak diaktifkan untuk sesi Anda. Periksa persyaratan [Ketersediaan](#availability).73| Kapan | Apa yang dilakukan Claude Code |

74| :- | :- |

75| Sesi berada dalam [plan mode](/docs/id/permission-modes#analyze-before-you-edit-with-plan-mode) | Bertanya sebelum penerbitan pertama setiap artifact |

76| Penerbitan mendeklarasikan kemampuan runtime untuk halaman, seperti [panggilan konektor](#pull-live-data-with-mcp-connectors) atau [unduhan file](#offer-a-file-download) | Bertanya sebelum penerbitan tersebut |

77| Anda membagikan artifact secara publik | Bertanya sekali per percakapan sebelum mengubahnya |

78| Anda mematikan [feature-flag fetching](/docs/id/env-vars#features-that-need-feature-flag-fetching) | Bertanya sebelum penerbitan pertama setiap artifact |

79| Claude menerbitkan dalam giliran yang dimulai oleh [tugas terjadwal](/docs/id/scheduled-tasks) yang berjalan di sesi Anda, bukan oleh prompt yang Anda ketik | Bertanya sebelum penerbitan pertama setiap artifact |

80| Claude tidak dapat membaca file tanpa persetujuan Anda | Bertanya sebelum menerbitkannya. Aturan izin allow untuk tool `Artifact` tidak melewati permintaan ini |

81 

82Claude membaca file di [direktori kerja](/docs/id/permissions#working-directories) sesi Anda, dan di direktori sementara tempat ia menulis halaman, tanpa bertanya. Agar Claude dapat menerbitkan dari folder lain tanpa permintaan izin, tambahkan folder tersebut sebagai direktori kerja dengan [`--add-dir`](/docs/id/cli-reference#cli-flags) saat peluncuran atau `/add-dir` selama sesi.

67 83 

68<h2 id="update-an-artifact">84<h2 id="update-an-artifact">

69 Perbarui artefak85 Perbarui artefak


87 Temukan artefak lagi103 Temukan artefak lagi

88</h2>104</h2>

89 105 

90Jalankan `/artifacts` di Claude Code untuk membuat daftar setiap artefak yang Anda miliki dan setiap artefak yang dibagikan kepada Anda. Pilih satu dan tekan `o` untuk membukanya di browser Anda atau `c` untuk menyalin tautannya. Tekan `Enter` untuk melampirkannya ke sesi saat ini; sebelum v2.1.216, `Enter` membukanya di browser Anda. Claude Code membaca daftar dari akun claude.ai Anda, sehingga berfungsi di sesi baru dan setelah `/clear`, ketika tautan telah keluar dari terminal. Memerlukan Claude Code v2.1.208 atau lebih baru.106Jalankan `/artifacts` di Claude Code untuk membuat daftar artifact yang Anda miliki dan artifact yang dibagikan kepada Anda. Artifact dari sesi saat ini ditampilkan terlebih dahulu, di bawah **This session**. Memerlukan Claude Code v2.1.208 atau lebih baru.

107 

108Pilih sebuah artifact, lalu tekan salah satu tombol berikut:

109 

110* **`Enter`**: membukanya di browser Anda jika artifact tersebut sudah terlampir ke sesi saat ini, dan melampirkannya jika belum. Sebelum v2.1.216, `Enter` membukanya di browser Anda

111* **`o`**: membukanya di browser Anda

112* **`c`**: menyalin tautannya

113 

114Claude Code membaca daftar dari akun claude.ai Anda, sehingga berfungsi di sesi baru dan setelah `/clear`, ketika tautan telah keluar dari terminal.

91 115 

92<h2 id="share-an-artifact">116<h2 id="share-an-artifact">

93 Bagikan artefak117 Bagikan artefak


110 134 

111Editor menerbitkan versi baru dengan cara yang sama seperti Anda [memperbarui artefak dari sesi lain](#update-an-artifact): mereka memberikan Claude URL artefak, atau melampirkannya dari [`/artifacts`](#find-an-artifact-again), dan Claude menarik konten saat ini dan menerbitkan ulang dengan perubahan mereka. Semua orang dengan halaman terbuka melihat setiap pembaruan secara langsung.135Editor menerbitkan versi baru dengan cara yang sama seperti Anda [memperbarui artefak dari sesi lain](#update-an-artifact): mereka memberikan Claude URL artefak, atau melampirkannya dari [`/artifacts`](#find-an-artifact-again), dan Claude menarik konten saat ini dan menerbitkan ulang dengan perubahan mereka. Semua orang dengan halaman terbuka melihat setiap pembaruan secara langsung.

112 136 

137Jika seorang editor menerbitkan saat Claude masih memegang salinan halaman yang lebih lama, Claude Code menolak penerbitan yang dibangun di atas salinan tersebut. Claude kemudian menggabungkan perubahannya ke versi yang lebih baru dan menerbitkan lagi.

138 

113<h2 id="read-an-artifact-shared-with-you">139<h2 id="read-an-artifact-shared-with-you">

114 Baca artefak yang dibagikan dengan Anda140 Baca artefak yang dibagikan dengan Anda

115</h2>141</h2>


168 194 

169Claude juga berhenti membalas dengan sendirinya ke artefak setelah menangani 60 komentar yang dikirim atau aktivasi thread pada artefak tersebut dalam satu jam. Anda melihat `Comments are waiting on Artifact: <name>` sekali, dan Claude melanjutkan lagi saat komentar jam itu sudah lama.195Claude juga berhenti membalas dengan sendirinya ke artefak setelah menangani 60 komentar yang dikirim atau aktivasi thread pada artefak tersebut dalam satu jam. Anda melihat `Comments are waiting on Artifact: <name>` sekali, dan Claude melanjutkan lagi saat komentar jam itu sudah lama.

170 196 

171Jalankan `/tasks` untuk melihat setiap artefak yang sesi Anda pantau, tercantum sebagai tugas pembaruan langsung. Anda dapat menghentikan Claude dari membalas dengan sendirinya dengan salah satu cara berikut:197Jalankan `/tasks` untuk melihat artifact yang dipantau oleh sesi Anda. `/tasks` mengelompokkan pemantauan yang dimulai Claude Code dengan sendirinya di bawah baris **System tasks**. Tekan `Enter` pada baris tersebut untuk menampilkan daftarnya. Pemantauan yang Anda minta untuk dimulai oleh Claude muncul di bawah **Monitors**.

198 

199Anda dapat menghentikan Claude dari membalas dengan sendirinya dengan salah satu cara berikut:

172 200 

173* **Tekan Ctrl+C sekali pada prompt idle**: Claude berhenti membalas pada setiap artefak yang sesi Anda pantau. Balasan dimulai lagi setelah Anda mengirim pesan berikutnya.201* **Tekan Ctrl+C sekali pada prompt idle**: Claude berhenti membalas pada setiap artefak yang sesi Anda pantau. Balasan dimulai lagi setelah Anda mengirim pesan berikutnya.

174* **Hentikan tugas di `/tasks`**: Claude berhenti membalas pada artefak tersebut sampai Anda memintanya melanjutkan balasan di sana. Menerbitkan artefak lagi tidak memulai balasan lagi, dan penghentian masih berlaku ketika Anda melanjutkan sesi nanti.202* **Hentikan tugas di `/tasks`**: Claude berhenti membalas pada artefak tersebut sampai Anda memintanya melanjutkan balasan di sana. Menerbitkan artefak lagi tidak memulai balasan lagi, dan penghentian masih berlaku ketika Anda melanjutkan sesi nanti.


391| Autentikasi | Sesi didukung oleh akun claude.ai: masuk dengan `/login` di CLI atau aplikasi desktop. Sesi Claude Tag masuk melalui identitas agen, jadi tidak ada langkah yang diperlukan di sana. Sesi menggunakan kunci API, [gateway token](/docs/id/llm-gateway), atau kredensial penyedia cloud tidak dapat menerbitkan. |419| Autentikasi | Sesi didukung oleh akun claude.ai: masuk dengan `/login` di CLI atau aplikasi desktop. Sesi Claude Tag masuk melalui identitas agen, jadi tidak ada langkah yang diperlukan di sana. Sesi menggunakan kunci API, [gateway token](/docs/id/llm-gateway), atau kredensial penyedia cloud tidak dapat menerbitkan. |

392| Penyedia model | Anthropic API. Tidak tersedia di [Amazon Bedrock](/docs/id/amazon-bedrock), [Google Cloud's Agent Platform](/docs/id/google-vertex-ai), atau [Microsoft Foundry](/docs/id/microsoft-foundry). |420| Penyedia model | Anthropic API. Tidak tersedia di [Amazon Bedrock](/docs/id/amazon-bedrock), [Google Cloud's Agent Platform](/docs/id/google-vertex-ai), atau [Microsoft Foundry](/docs/id/microsoft-foundry). |

393| Kebijakan organisasi | Kunci enkripsi yang dikelola pelanggan (CMEK), HIPAA, dan [Zero Data Retention](/docs/id/zero-data-retention) tidak diaktifkan untuk organisasi. |421| Kebijakan organisasi | Kunci enkripsi yang dikelola pelanggan (CMEK), HIPAA, dan [Zero Data Retention](/docs/id/zero-data-retention) tidak diaktifkan untuk organisasi. |

394| Surface | Claude Code CLI, atau aplikasi desktop Claude versi 1.13576.0 atau lebih baru. Sesi [Claude Tag](https://claude.com/docs/claude-tag/overview) juga dapat menerbitkan artifacts ketika Claude Tag dan artifacts keduanya diaktifkan untuk organisasi. Dimatikan secara default di konteks [Agent SDK](/docs/id/agent-sdk/overview), GitHub Action, dan server MCP, ketika Anda menjalankan Claude Code dengan [`-p`](/docs/id/headless) dari terminal atau skrip Anda sendiri, dan ketika [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/id/env-vars) diatur. |422| Surface | Claude Code CLI, atau aplikasi desktop Claude versi 1.13576.0 atau lebih baru. Sesi [Claude Tag](https://claude.com/docs/claude-tag/overview) juga dapat menerbitkan artifacts ketika Claude Tag dan artifacts keduanya diaktifkan untuk organisasi. Sesi yang dilayani oleh [`claude remote-control`](/docs/id/remote-control) dapat menerbitkan artifacts ketika Anda memulai sesi tersebut sendiri. Memerlukan Claude Code v2.1.281 atau lebih baru. Dimatikan secara default di konteks [Agent SDK](/docs/id/agent-sdk/overview), GitHub Action, dan server MCP, ketika Anda menjalankan Claude Code dengan [`-p`](/docs/id/headless) dari terminal atau skrip Anda sendiri, dan ketika [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/id/env-vars) diatur. |

395 423 

396Apakah artifacts diizinkan untuk organisasi Anda berasal dari kebijakan organisasi Anda, yang Claude Code muat dari `api.anthropic.com`. Ketika Claude Code tidak dapat memuat kebijakan, artifacts tidak tersedia. Ketika Anda memintanya, Claude mengatakan alasannya.424Apakah artifacts diizinkan untuk organisasi Anda berasal dari kebijakan organisasi Anda, yang Claude Code muat dari `api.anthropic.com`. Ketika Claude Code tidak dapat memuat kebijakan, artifacts tidak tersedia. Ketika Anda memintanya, Claude mengatakan alasannya.

397 425 

Details

1237 1237 

1238CLI mengirim metrik, log, dan, ketika diaktifkan, jejak ke gateway, yang meneruskannya verbatim ke setiap tujuan yang dikonfigurasi. Ekspor menggunakan OpenTelemetry Protocol (OTLP) melalui HTTP. Untuk melewati relay dan memiliki sesi ekspor langsung ke kolektor Anda, [namai kolektor dalam kebijakan](#export-directly-to-your-collector). Lihat [Monitoring usage](/docs/id/monitoring-usage) untuk metrik dan acara yang CLI pancarkan.1238CLI mengirim metrik, log, dan, ketika diaktifkan, jejak ke gateway, yang meneruskannya verbatim ke setiap tujuan yang dikonfigurasi. Ekspor menggunakan OpenTelemetry Protocol (OTLP) melalui HTTP. Untuk melewati relay dan memiliki sesi ekspor langsung ke kolektor Anda, [namai kolektor dalam kebijakan](#export-directly-to-your-collector). Lihat [Monitoring usage](/docs/id/monitoring-usage) untuk metrik dan acara yang CLI pancarkan.

1239 1239 

1240Dalam sesi yang masuk melalui `/login`, CLI memberi stempel setiap ekspor dengan identitas pengguna yang diautentikasi, dibaca dari JWT yang diterbitkan gateway: atribut `user.id`, `user.email`, dan `user.groups`. Atribusi biaya dan penggunaan per-pengembang oleh karena itu bekerja tanpa konfigurasi sisi pengembang.1240Dalam sesi yang masuk melalui `/login`, CLI memberi stempel setiap ekspor dengan identitas pengguna yang diautentikasi, dibaca dari JWT yang diterbitkan gateway: atribut `user.id`, `user.email`, dan `user.groups`. Atribusi biaya dan penggunaan per-pengembang oleh karena itu bekerja tanpa konfigurasi sisi pengembang. Acara yang dicatat Claude Code sebelum pengembang masuk [tidak membawa identitas ini](/docs/id/monitoring-usage#standard-attributes).

1241 1241 

1242Sesi [Claude Desktop](#claude-desktop-overlay) dan Cowork yang masuk melalui gateway memberi stempel telemetri mereka dengan `user.email` dan `user.groups` bersama `enduser.id`, sehingga Anda dapat mencakup penggunaan terminal, Desktop, dan Cowork dengan satu kueri di `user.email` atau `user.groups`. `user.groups` adalah daftar grup IdP yang dipisahkan koma.1242Sesi [Claude Desktop](#claude-desktop-overlay) dan Cowork yang masuk melalui gateway memberi stempel telemetri mereka dengan `user.email` dan `user.groups` bersama `enduser.id`, sehingga Anda dapat mencakup penggunaan terminal, Desktop, dan Cowork dengan satu kueri di `user.email` atau `user.groups`. `user.groups` adalah daftar grup IdP yang dipisahkan koma.

1243 1243 

Details

516 Telemetry516 Telemetry

517</h2>517</h2>

518 518 

519Gateway memberikan Anda metrik penggunaan per-developer tanpa konfigurasi OTEL per-mesin apa pun. Claude Code memancarkan metrik OpenTelemetry (OTLP), log, dan trace opt-in; [Monitoring usage](/docs/id/monitoring-usage) mencakup semua yang dilaporkan CLI. Dalam sesi yang masuk melalui `/login`, CLI memberi stempel setiap ekspor dengan atribut identitas IdP yang diautentikasi `user.id`, `user.email`, dan `user.groups`, sehingga penggunaan terakumulasi per developer.519Gateway memberikan Anda metrik penggunaan per-developer tanpa konfigurasi OTEL per-mesin apa pun. Claude Code memancarkan metrik OpenTelemetry (OTLP), log, dan trace opt-in; [Monitoring usage](/docs/id/monitoring-usage) mencakup semua yang dilaporkan CLI. Dalam sesi yang masuk melalui `/login`, CLI [memberi stempel setiap ekspor](/docs/id/monitoring-usage#standard-attributes) dengan atribut identitas IdP yang diautentikasi `user.id`, `user.email`, dan `user.groups`, sehingga penggunaan terakumulasi per developer.

520 520 

521Gateway itu sendiri adalah relay OTLP yang diautentikasi. Atur [`telemetry.forward_to`](/docs/id/claude-apps-gateway-config#telemetry) bersama dengan `listen.public_url`, dan itu mendorong pengaturan OTEL exporter ke setiap klien yang terhubung dan meneruskan lalu lintas OTLP mereka secara verbatim ke setiap tujuan yang Anda daftarkan. Setiap tujuan memilih metrik, log, dan trace secara independen, dan defaultnya hanya metrik; lihat [referensi `telemetry`](/docs/id/claude-apps-gateway-config#telemetry) untuk bidang per-sinyal dan trade-off sensitivitasnya. Gateway tidak membuffer, mengagregasi, atau menyimpan telemetry, jadi tempat data mendarat sepenuhnya merupakan konfigurasi exporter collector.521Gateway itu sendiri adalah relay OTLP yang diautentikasi. Atur [`telemetry.forward_to`](/docs/id/claude-apps-gateway-config#telemetry) bersama dengan `listen.public_url`, dan itu mendorong pengaturan OTEL exporter ke setiap klien yang terhubung dan meneruskan lalu lintas OTLP mereka secara verbatim ke setiap tujuan yang Anda daftarkan. Setiap tujuan memilih metrik, log, dan trace secara independen, dan defaultnya hanya metrik; lihat [referensi `telemetry`](/docs/id/claude-apps-gateway-config#telemetry) untuk bidang per-sinyal dan trade-off sensitivitasnya. Gateway tidak membuffer, mengagregasi, atau menyimpan telemetry, jadi tempat data mendarat sepenuhnya merupakan konfigurasi exporter collector.

522 522 

Details

483Buka kembali sesi dari [claude.ai/code](https://claude.ai/code) untuk menyediakan VM segar:483Buka kembali sesi dari [claude.ai/code](https://claude.ai/code) untuk menyediakan VM segar:

484 484 

485* **Dipulihkan**: riwayat percakapan Anda485* **Dipulihkan**: riwayat percakapan Anda

486* **Tidak dipulihkan**: pekerjaan latar belakang yang masih berjalan saat VM diambil kembali, seperti subagent dan perintah shell486* **Tidak dipulihkan**: pekerjaan latar belakang yang masih berjalan saat VM diambil kembali, seperti subagent dan perintah shell, serta wakeup tertunda dari [`/loop` dengan ritme mandiri](/docs/id/scheduled-tasks#let-claude-choose-the-interval). Untuk memulai ulang loop, jalankan `/loop` lagi.

487 487 

488<h2 id="limitations">488<h2 id="limitations">

489 Batasan489 Batasan

Details

489* **Routines**: ketika Anda meminta pekerjaan terjadwal dalam project, Claude membuat [routine](/docs/id/routines) yang berjalan sebagai thread dalam project itu dan muncul di tab **Routines**-nya. Routine yang Anda buat di luar project terus bekerja sendiri.489* **Routines**: ketika Anda meminta pekerjaan terjadwal dalam project, Claude membuat [routine](/docs/id/routines) yang berjalan sebagai thread dalam project itu dan muncul di tab **Routines**-nya. Routine yang Anda buat di luar project terus bekerja sendiri.

490* **Remote Control**: [Remote Control](/docs/id/remote-control) menghubungkan claude.ai ke sesi Claude Code yang berjalan di mesin Anda. Ketika Anda meminta Claude dalam project untuk menjalankan thread di komputer Anda, project [menggunakan Remote Control untuk melakukannya](#run-a-thread-on-your-own-computer).490* **Remote Control**: [Remote Control](/docs/id/remote-control) menghubungkan claude.ai ke sesi Claude Code yang berjalan di mesin Anda. Ketika Anda meminta Claude dalam project untuk menjalankan thread di komputer Anda, project [menggunakan Remote Control untuk melakukannya](#run-a-thread-on-your-own-computer).

491* **Local sessions dan agent view**: sesi yang Anda mulai sendiri di terminal, IDE, atau environment lokal aplikasi desktop tidak dapat ditambahkan ke project. [Agent view](/docs/id/agent-view) adalah layar untuk melacak beberapa sesi lokal berdampingan, dan Anda masih memulai masing-masing dan memberikan tugasnya sendiri.491* **Local sessions dan agent view**: sesi yang Anda mulai sendiri di terminal, IDE, atau environment lokal aplikasi desktop tidak dapat ditambahkan ke project. [Agent view](/docs/id/agent-view) adalah layar untuk melacak beberapa sesi lokal berdampingan, dan Anda masih memulai masing-masing dan memberikan tugasnya sendiri.

492* **Worktrees**: [worktree](/docs/id/worktrees) memberikan setiap sesi lokal salinan kerjanya sendiri dari repositori sehingga sesi paralel di mesin Anda tidak menimpa satu sama lain. Thread cloud tidak membutuhkannya: setiap thread mengkloning repositorinya ke sandbox cloud sendiri dan bekerja di cabang sendiri.492* **Worktrees**: [worktree](/docs/id/worktrees) memberikan setiap sesi lokal salinan kerjanya sendiri dari repositori. Thread cloud tidak membutuhkannya: setiap thread mengkloning repositorinya ke sandbox cloud sendiri dan bekerja di branch sendiri.

493* **Agent teams**: [agent team](/docs/id/agent-teams) adalah satu sesi yang memulai sesi rekan untuk satu tugas, di mesin Anda atau di dalam sesi cloud, dan berakhir dengan tugas itu.493* **Agent teams**: [agent team](/docs/id/agent-teams) adalah satu sesi yang memulai sesi rekan untuk satu tugas, di mesin Anda atau di dalam sesi cloud, dan berakhir dengan tugas itu.

494* **Subagents**: [subagent](/docs/id/sub-agents) berjalan di dalam satu sesi, melakukan tugas sampingan dalam jendela konteks sendiri, dan mengembalikan ringkasan ke sesi itu. Thread project adalah sesi utuh yang Claude mulai dan yang melaporkan kembali ke percakapan project, dan thread masih dapat menggunakan subagents untuk tugas sampingannya sendiri.494* **Subagents**: [subagent](/docs/id/sub-agents) berjalan di dalam satu sesi, melakukan tugas sampingan dalam jendela konteks sendiri, dan mengembalikan ringkasan ke sesi itu. Thread project adalah sesi utuh yang Claude mulai dan yang melaporkan kembali ke percakapan project, dan thread masih dapat menggunakan subagents untuk tugas sampingannya sendiri.

495* **Projects di claude.ai chat dan Cowork**: [pengalaman Projects sebelumnya](https://support.claude.com/en/articles/9517075-what-are-projects), yang mengelompokkan percakapan dan file referensi tanpa thread atau koordinator. Project tersebut terus bekerja seperti yang mereka lakukan hari ini sampai pengalaman yang dirancang ulang mencapai mereka.495* **Projects di claude.ai chat dan Cowork**: [pengalaman Projects sebelumnya](https://support.claude.com/en/articles/9517075-what-are-projects), yang mengelompokkan percakapan dan file referensi tanpa thread atau koordinator. Project tersebut terus bekerja seperti yang mereka lakukan hari ini sampai pengalaman yang dirancang ulang mencapai mereka.

Details

28| `claude auth logout` | Keluar dari akun Anthropic Anda | `claude auth logout` |28| `claude auth logout` | Keluar dari akun Anthropic Anda | `claude auth logout` |

29| `claude auth status` | Tampilkan status autentikasi sebagai JSON. Gunakan `--text` untuk output yang dapat dibaca manusia. Keluar dengan kode 0 jika masuk, 1 jika tidak. JSON mencakup bidang `configDirectory` yang menamai [direktori konfigurasi](/docs/id/claude-directory) yang digunakan CLI. Bidang ini memerlukan Claude Code v2.1.268 atau lebih baru. Bidang `authMethod` pada JSON bernilai salah satu dari `none`, `claude.ai`, `oauth_token`, `api_key`, `api_key_helper`, atau `third_party` | `claude auth status` |29| `claude auth status` | Tampilkan status autentikasi sebagai JSON. Gunakan `--text` untuk output yang dapat dibaca manusia. Keluar dengan kode 0 jika masuk, 1 jika tidak. JSON mencakup bidang `configDirectory` yang menamai [direktori konfigurasi](/docs/id/claude-directory) yang digunakan CLI. Bidang ini memerlukan Claude Code v2.1.268 atau lebih baru. Bidang `authMethod` pada JSON bernilai salah satu dari `none`, `claude.ai`, `oauth_token`, `api_key`, `api_key_helper`, atau `third_party` | `claude auth status` |

30| `claude agents` | Buka [tampilan agent](/docs/id/agent-view) untuk memantau dan mengirim sesi latar belakang paralel. Gunakan `--cwd <path>` untuk menampilkan hanya sesi yang dimulai di bawah direktori tersebut, atau `--json` untuk mencetak sesi aktif sebagai array JSON untuk skrip (`--json --all` juga mencakup sesi latar belakang yang selesai). Lewatkan `--permission-mode`, `--model`, `--effort`, atau `--agent` untuk menetapkan [default untuk sesi yang dikirim](/docs/id/agent-view#permission-mode-model-and-effort). Menerima `--settings`, `--add-dir`, `--plugin-dir`, dan `--mcp-config` seperti perintah `claude` tingkat atas. Membuka tampilan agent memerlukan terminal interaktif | `claude agents --json` |30| `claude agents` | Buka [tampilan agent](/docs/id/agent-view) untuk memantau dan mengirim sesi latar belakang paralel. Gunakan `--cwd <path>` untuk menampilkan hanya sesi yang dimulai di bawah direktori tersebut, atau `--json` untuk mencetak sesi aktif sebagai array JSON untuk skrip (`--json --all` juga mencakup sesi latar belakang yang selesai). Lewatkan `--permission-mode`, `--model`, `--effort`, atau `--agent` untuk menetapkan [default untuk sesi yang dikirim](/docs/id/agent-view#permission-mode-model-and-effort). Menerima `--settings`, `--add-dir`, `--plugin-dir`, dan `--mcp-config` seperti perintah `claude` tingkat atas. Membuka tampilan agent memerlukan terminal interaktif | `claude agents --json` |

31| `claude attach <id\|name>` | Lampirkan ke [sesi latar belakang](/docs/id/agent-view#manage-sessions-from-the-shell) di terminal ini. Meneruskan sebagian nama sesi yang sedang berjalan sebagai pengganti ID memerlukan Claude Code v2.1.290 atau lebih baru | `claude attach 7c5dcf5d` |31| `claude attach <id\|name>` | Lampirkan ke [sesi latar belakang](/docs/id/agent-view#manage-sessions-from-the-shell) di terminal ini. Meneruskan sebagian nama sesi sebagai pengganti ID memerlukan Claude Code v2.1.290 atau lebih baru | `claude attach 7c5dcf5d` |

32| `claude auto-mode defaults` | Cetak aturan pengklasifikasi [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) bawaan sebagai JSON. Gunakan `claude auto-mode config` untuk melihat konfigurasi efektif Anda dengan pengaturan yang diterapkan. `--label <prefix>` mencetak hanya aturan yang labelnya dimulai dengan awalan tersebut, cocok tanpa memperhatikan huruf besar-kecil. Memerlukan Claude Code v2.1.208 atau lebih baru | `claude auto-mode defaults --label 'Git Destructive'` |32| `claude auto-mode defaults` | Cetak aturan pengklasifikasi [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) bawaan sebagai JSON. Gunakan `claude auto-mode config` untuk melihat konfigurasi efektif Anda dengan pengaturan yang diterapkan. `--label <prefix>` mencetak hanya aturan yang labelnya dimulai dengan awalan tersebut, cocok tanpa memperhatikan huruf besar-kecil. Memerlukan Claude Code v2.1.208 atau lebih baru | `claude auto-mode defaults --label 'Git Destructive'` |

33| `claude auto-mode reset` | Pulihkan konfigurasi [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) default dengan menghapus bagian `autoMode` dari file pengaturan pengguna Anda. Meminta konfirmasi sebelum menulis; lewatkan `-y`/`--yes` untuk melewati prompt. Aturan dari [pengaturan terkelola](/docs/id/server-managed-settings) atau flag `--settings` masih berlaku. Memerlukan Claude Code v2.1.212 atau lebih baru. Lihat [Periksa default dan konfigurasi efektif Anda](/docs/id/auto-mode-config#inspect-the-defaults-and-your-effective-config) | `claude auto-mode reset --yes` |33| `claude auto-mode reset` | Pulihkan konfigurasi [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) default dengan menghapus bagian `autoMode` dari file pengaturan pengguna Anda. Meminta konfirmasi sebelum menulis; lewatkan `-y`/`--yes` untuk melewati prompt. Aturan dari [pengaturan terkelola](/docs/id/server-managed-settings) atau flag `--settings` masih berlaku. Memerlukan Claude Code v2.1.212 atau lebih baru. Lihat [Periksa default dan konfigurasi efektif Anda](/docs/id/auto-mode-config#inspect-the-defaults-and-your-effective-config) | `claude auto-mode reset --yes` |

34| `claude daemon logs` | Ikuti file log [supervisor](/docs/id/agent-view#the-supervisor-process) sesi latar belakang, `~/.claude/daemon.log`, dengan mencetak baris baru saat muncul hingga Anda menekan `Ctrl+C` | `claude daemon logs` |34| `claude daemon logs` | Ikuti file log [supervisor](/docs/id/agent-view#the-supervisor-process) sesi latar belakang, `~/.claude/daemon.log`, dengan mencetak baris baru saat muncul hingga Anda menekan `Ctrl+C` | `claude daemon logs` |


37| `claude daemon stop --any` | Hentikan [supervisor](/docs/id/agent-view#the-supervisor-process) sesi latar belakang dan sesi yang dihosting. Lewatkan `--keep-workers` untuk membiarkan sesi latar belakang tetap berjalan sehingga supervisor berikutnya dapat terhubung kembali ke sesi tersebut. `--any` mengonfirmasi penghentian supervisor sesuai permintaan, yang merupakan default. Gunakan ini untuk pulih dari [supervisor yang tidak responsif](/docs/id/agent-view#agent-view-says-the-background-service-did-not-respond) | `claude daemon stop --any --keep-workers` |37| `claude daemon stop --any` | Hentikan [supervisor](/docs/id/agent-view#the-supervisor-process) sesi latar belakang dan sesi yang dihosting. Lewatkan `--keep-workers` untuk membiarkan sesi latar belakang tetap berjalan sehingga supervisor berikutnya dapat terhubung kembali ke sesi tersebut. `--any` mengonfirmasi penghentian supervisor sesuai permintaan, yang merupakan default. Gunakan ini untuk pulih dari [supervisor yang tidak responsif](/docs/id/agent-view#agent-view-says-the-background-service-did-not-respond) | `claude daemon stop --any --keep-workers` |

38| `claude doctor` | Cetak diagnostik instalasi dan pengaturan read-only dari terminal tanpa memulai sesi, termasuk kesehatan instalasi, kesalahan validasi file pengaturan, dan kelayakan Remote Control. Untuk pemeriksaan pengaturan dalam sesi yang juga dapat menerapkan perbaikan, jalankan [`/doctor`](/docs/id/commands#all-commands) | `claude doctor` |38| `claude doctor` | Cetak diagnostik instalasi dan pengaturan read-only dari terminal tanpa memulai sesi, termasuk kesehatan instalasi, kesalahan validasi file pengaturan, dan kelayakan Remote Control. Untuk pemeriksaan pengaturan dalam sesi yang juga dapat menerapkan perbaikan, jalankan [`/doctor`](/docs/id/commands#all-commands) | `claude doctor` |

39| `claude import [source]` | Mulai sesi interaktif yang menjalankan [`/import`](/docs/id/commands#all-commands) untuk membawa konfigurasi dari agent pengkodean lain ke Claude Code. Menerima opsi `--dry-run` dan `--yes` yang sama dengan perintah. Tidak tersedia di Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry, atau Claude Platform di AWS. Juga tidak tersedia ketika Anda mematikan [pengambilan flag fitur](/docs/id/env-vars#features-that-need-feature-flag-fetching). Memerlukan Claude Code v2.1.213 atau lebih baru | `claude import codex --dry-run` |39| `claude import [source]` | Mulai sesi interaktif yang menjalankan [`/import`](/docs/id/commands#all-commands) untuk membawa konfigurasi dari agent pengkodean lain ke Claude Code. Menerima opsi `--dry-run` dan `--yes` yang sama dengan perintah. Tidak tersedia di Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry, atau Claude Platform di AWS. Juga tidak tersedia ketika Anda mematikan [pengambilan flag fitur](/docs/id/env-vars#features-that-need-feature-flag-fetching). Memerlukan Claude Code v2.1.213 atau lebih baru | `claude import codex --dry-run` |

40| `claude logs <id\|name>` | Cetak output terbaru dari [sesi latar belakang](/docs/id/agent-view#manage-sessions-from-the-shell). Meneruskan sebagian nama sesi yang sedang berjalan sebagai pengganti ID memerlukan Claude Code v2.1.290 atau lebih baru | `claude logs 7c5dcf5d` |40| `claude logs <id\|name>` | Cetak output terbaru dari [sesi latar belakang](/docs/id/agent-view#manage-sessions-from-the-shell). Meneruskan sebagian nama sesi sebagai pengganti ID memerlukan Claude Code v2.1.290 atau lebih baru | `claude logs 7c5dcf5d` |

41| `claude mcp` | Konfigurasi server Model Context Protocol (MCP) | Lihat [dokumentasi Claude Code MCP](/docs/id/mcp). |41| `claude mcp` | Konfigurasi server Model Context Protocol (MCP) | Lihat [dokumentasi Claude Code MCP](/docs/id/mcp). |

42| `claude mcp login <name>` | Jalankan alur OAuth server MCP yang dikonfigurasi tanpa membuka panel `/mcp` interaktif. Bekerja untuk server HTTP, SSE, dan konektor claude.ai. Tambahkan `--no-browser` melalui SSH untuk mencetak URL otorisasi alih-alih membuka browser, kemudian tempel URL pengalihan kembali di prompt. Lihat [Autentikasi dari baris perintah](/docs/id/mcp#authenticate-from-the-command-line) | `claude mcp login sentry` |42| `claude mcp login <name>` | Jalankan alur OAuth server MCP yang dikonfigurasi tanpa membuka panel `/mcp` interaktif. Bekerja untuk server HTTP, SSE, dan konektor claude.ai. Tambahkan `--no-browser` melalui SSH untuk mencetak URL otorisasi alih-alih membuka browser, kemudian tempel URL pengalihan kembali di prompt. Lihat [Autentikasi dari baris perintah](/docs/id/mcp#authenticate-from-the-command-line) | `claude mcp login sentry` |

43| `claude mcp logout <name>` | Hapus kredensial OAuth yang disimpan untuk server MCP | `claude mcp logout sentry` |43| `claude mcp logout <name>` | Hapus kredensial OAuth yang disimpan untuk server MCP | `claude mcp logout sentry` |


106| `--input-format` | Tentukan format input untuk mode cetak (opsi: `text`, `stream-json`) | `claude -p --output-format json --input-format stream-json` |106| `--input-format` | Tentukan format input untuk mode cetak (opsi: `text`, `stream-json`) | `claude -p --output-format json --input-format stream-json` |

107| `--json-schema` | Dapatkan output JSON yang divalidasi yang cocok dengan JSON Schema setelah agen menyelesaikan alurnya (mode cetak saja). Lihat [output terstruktur](/docs/id/agent-sdk/structured-outputs). Claude Code keluar dengan kesalahan pada skema yang tidak valid dan menerima kata kunci `format` sebagai anotasi tanpa validasi sisi klien | `claude -p --json-schema '{"type":"object","properties":{...}}' "query"` |107| `--json-schema` | Dapatkan output JSON yang divalidasi yang cocok dengan JSON Schema setelah agen menyelesaikan alurnya (mode cetak saja). Lihat [output terstruktur](/docs/id/agent-sdk/structured-outputs). Claude Code keluar dengan kesalahan pada skema yang tidak valid dan menerima kata kunci `format` sebagai anotasi tanpa validasi sisi klien | `claude -p --json-schema '{"type":"object","properties":{...}}' "query"` |

108| `--maintenance` | Jalankan [hook Setup](/docs/id/hooks#setup) dengan pencocokan `maintenance` sebelum sesi (mode cetak saja) | `claude -p --maintenance "query"` |108| `--maintenance` | Jalankan [hook Setup](/docs/id/hooks#setup) dengan pencocokan `maintenance` sebelum sesi (mode cetak saja) | `claude -p --maintenance "query"` |

109| `--max-budget-usd` | Jumlah dolar maksimum yang dibelanjakan untuk panggilan API sebelum berhenti (hanya mode print). Claude Code memeriksa batas ini terhadap [estimasi biaya sisi klien](/docs/id/agent-sdk/cost-tracking#estimates-not-billing), yang dapat berbeda dari tagihan Anda. Pengeluaran dari [subagent](/docs/id/sub-agents) dihitung terhadap batas. Ketika Anda kembali ke percakapan dengan `--continue` atau `--resume`, total yang [dipulihkan dari eksekusi sebelumnya](/docs/id/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls) tidak dihitung terhadapnya. Setelah pengeluaran mencapai batas, memunculkan subagent lain gagal dengan `Budget limit reached`, dan Claude Code menghentikan subagent latar belakang yang masih berjalan; perilaku penegakan batas ini memerlukan Claude Code v2.1.217 atau lebih baru | `claude -p --max-budget-usd 5.00 "query"` |109| `--max-budget-usd` | Hentikan eksekusi setelah estimasi pengeluaran untuk panggilan API mencapai jumlah ini (mode cetak saja). Claude Code memeriksa batas ini terhadap [estimasi biaya sisi klien](/docs/id/agent-sdk/cost-tracking#estimates-not-billing), yang dapat berbeda dari tagihan Anda. Pengeluaran dari [subagent](/docs/id/sub-agents) dihitung terhadap batas. Pengeluaran dapat melewati batas, jadi [sisakan ruang](/docs/id/agent-sdk/agent-loop#budget-headroom). Ketika Anda kembali ke percakapan dengan `--continue` atau `--resume`, total yang [dipulihkan dari eksekusi sebelumnya](/docs/id/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls) tidak dihitung terhadapnya. Setelah pengeluaran mencapai batas, memunculkan subagent lain gagal dengan `Budget limit reached`, dan Claude Code menghentikan subagent latar belakang yang masih berjalan; perilaku penegakan batas ini memerlukan Claude Code v2.1.217 atau lebih baru | `claude -p --max-budget-usd 5.00 "query"` |

110| `--max-turns` | Batasi jumlah putaran agentic (mode cetak saja). Keluar dengan kesalahan ketika batas tercapai. Tidak ada batas secara default. Dengan `--input-format stream-json`, pesan yang masih antri ketika batas mengakhiri putaran tetap antri dan memulai putaran baru dengan batasnya sendiri | `claude -p --max-turns 3 "query"` |110| `--max-turns` | Batasi jumlah putaran agentic (mode cetak saja). Keluar dengan kesalahan ketika batas tercapai. Tidak ada batas secara default. Dengan `--input-format stream-json`, pesan yang masih antri ketika batas mengakhiri putaran tetap antri dan memulai putaran baru dengan batasnya sendiri | `claude -p --max-turns 3 "query"` |

111| `--mcp-config` | Muat server MCP dari file atau string JSON (dipisahkan spasi). Ketika Anda melewatkan bendera ini dengan `-p`, Claude Code menunggu server yang masih tertunda untuk terhubung sebelum menjalankan putaran pertama, hingga waktu tunggu startup [`MCP_TIMEOUT`](/docs/id/env-vars), 30 detik secara default; server dengan [daftar alat yang di-cache](/docs/id/mcp#managing-your-servers) melewati tunggu dan terhubung saat penggunaan pertama. Tunggu memerlukan Claude Code v2.1.221 atau lebih baru | `claude --mcp-config ./mcp.json` |111| `--mcp-config` | Muat server MCP dari file atau string JSON (dipisahkan spasi). Ketika Anda melewatkan bendera ini dengan `-p`, Claude Code menunggu server yang masih tertunda untuk terhubung sebelum menjalankan putaran pertama, hingga waktu tunggu startup [`MCP_TIMEOUT`](/docs/id/env-vars), 30 detik secara default; server dengan [daftar alat yang di-cache](/docs/id/mcp#managing-your-servers) melewati tunggu dan terhubung saat penggunaan pertama. Tunggu memerlukan Claude Code v2.1.221 atau lebih baru | `claude --mcp-config ./mcp.json` |

112| `--model` | Menetapkan model untuk sesi saat ini dengan [alias model](/docs/id/model-config#model-aliases) seperti `sonnet`, `opus`, `haiku`, atau `fable`, atau nama lengkap model. Menimpa pengaturan [`model`](/docs/id/settings-reference#model) dan [`ANTHROPIC_MODEL`](/docs/id/model-config#environment-variables) | `claude --model claude-sonnet-5` |112| `--model` | Menetapkan model untuk sesi saat ini dengan [alias model](/docs/id/model-config#model-aliases) seperti `sonnet`, `opus`, `haiku`, atau `fable`, atau nama lengkap model. Menimpa pengaturan [`model`](/docs/id/settings-reference#model) dan [`ANTHROPIC_MODEL`](/docs/id/model-config#environment-variables) | `claude --model claude-sonnet-5` |

Details

307| | Tersedia di sesi cloud | Mengapa |307| | Tersedia di sesi cloud | Mengapa |

308| :- | :- | :- |308| :- | :- | :- |

309| `CLAUDE.md` repo Anda | Ya | Bagian dari klon |309| `CLAUDE.md` repo Anda | Ya | Bagian dari klon |

310| Hook `.claude/settings.json` repo Anda dan aturan izin | Ya, dalam sesi dengan satu repositori | Bagian dari klon. Sesi dengan beberapa repositori, termasuk thread [proyek](/docs/id/claude-projects#what-threads-pick-up-from-your-repositories), dimulai di atas klon dan tidak membacanya |310| Hook `.claude/settings.json` repo Anda dan aturan izin | Ya, dalam sesi dengan satu repositori | Bagian dari klon. Untuk sesi dengan beberapa repositori, lihat [pengaturan mana yang dibacanya](/docs/id/settings#settings-in-cloud-sessions) |

311| Server MCP `.mcp.json` repo Anda | Ya, dalam sesi dengan satu repositori | Bagian dari klon, ditemukan dari direktori kerja sesi |311| Server MCP `.mcp.json` repo Anda | Ya, dalam sesi dengan satu repositori | Bagian dari klon, ditemukan dari direktori kerja sesi. Untuk lingkungan yang di-host sendiri, lihat [pengaturan repositori mana yang berlaku](/docs/id/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories) |

312| `.claude/rules/` repo Anda | Ya | Bagian dari klon |312| `.claude/rules/` repo Anda | Ya | Bagian dari klon |

313| `.claude/skills/`, `.claude/agents/`, `.claude/commands/` repo Anda | Ya | Bagian dari klon |313| `.claude/skills/`, `.claude/agents/`, `.claude/commands/` repo Anda | Ya | Bagian dari klon |

314| Plugin dan marketplace yang dideklarasikan di `.claude/settings.json` repo Anda | Tidak | Sesi cloud tidak menginstal plugin yang dihidupkan repositori di bawah [`enabledPlugins`](/docs/id/settings-reference#enabledplugins), termasuk yang dari marketplace yang dicantumkan di bawah [`extraKnownMarketplaces`](/docs/id/settings-reference#extraknownmarketplaces) |314| Plugin dan marketplace yang dideklarasikan di `.claude/settings.json` repo Anda | Tidak | Sesi cloud tidak menginstal plugin yang dihidupkan repositori di bawah [`enabledPlugins`](/docs/id/settings-reference#enabledplugins), termasuk yang dari marketplace yang dicantumkan di bawah [`extraKnownMarketplaces`](/docs/id/settings-reference#extraknownmarketplaces) |


575 575 

576Hook SessionStart berperilaku sama di cloud seperti secara lokal, dengan peringatan ini:576Hook SessionStart berperilaku sama di cloud seperti secara lokal, dengan peringatan ini:

577 577 

578* **Satu repositori per sesi**: sesi dengan beberapa repositori tidak memuat hook dari `.claude/settings.json` repositori apa pun, jadi hook SessionStart yang Anda tentukan di sana tidak berjalan. Instal dependensi untuk sesi tersebut dengan [skrip setup](#setup-scripts) sebagai gantinya.578* **Satu repositori per sesi**: di lingkungan yang dihosting Anthropic, sesi dengan beberapa repositori tidak memuat hook dari `.claude/settings.json` repositori apa pun, jadi hook SessionStart yang Anda tentukan di sana tidak berjalan. Instal dependensi untuk sesi tersebut dengan [skrip setup](#setup-scripts) sebagai gantinya. Untuk lingkungan yang dihosting sendiri, lihat [pengaturan repositori mana yang berlaku](/docs/id/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories).

579* **Tidak ada scoping khusus cloud**: hook berjalan di sesi lokal dan cloud. Untuk melewati eksekusi lokal, keluar lebih awal kecuali variabel lingkungan `CLAUDE_CODE_REMOTE` adalah `true`, cara yang ditunjukkan oleh [skrip instalasi dependensi](#install-dependencies-with-a-sessionstart-hook).579* **Tidak ada scoping khusus cloud**: hook berjalan di sesi lokal dan cloud. Untuk melewati eksekusi lokal, keluar lebih awal kecuali variabel lingkungan `CLAUDE_CODE_REMOTE` adalah `true`, cara yang ditunjukkan oleh [skrip instalasi dependensi](#install-dependencies-with-a-sessionstart-hook).

580* **Memerlukan akses jaringan**: perintah instalasi perlu menjangkau registri paket. Jika lingkungan Anda menggunakan akses jaringan **None**, hook ini gagal. [Allowlist default](#default-allowed-domains) di bawah **Trusted** mencakup npm, PyPI, RubyGems, dan crates.io.580* **Memerlukan akses jaringan**: perintah instalasi perlu menjangkau registri paket. Jika lingkungan Anda menggunakan akses jaringan **None**, hook ini gagal. [Allowlist default](#default-allowed-domains) di bawah **Trusted** mencakup npm, PyPI, RubyGems, dan crates.io.

581* **Kompatibilitas proxy**: di lingkungan yang dihosting Anthropic, semua lalu lintas keluar melewati [proxy keamanan](#security-proxy), dan beberapa manajer paket tidak bekerja dengan benar dengannya; Bun adalah contoh yang diketahui. Di [lingkungan yang dihosting sendiri](/docs/id/self-hosted-environments-deploy#default-deny-egress), lalu lintas keluar melewati batas jaringan Anda sendiri.581* **Kompatibilitas proxy**: di lingkungan yang dihosting Anthropic, semua lalu lintas keluar melewati [proxy keamanan](#security-proxy), dan beberapa manajer paket tidak bekerja dengan benar dengannya; Bun adalah contoh yang diketahui. Di [lingkungan yang dihosting sendiri](/docs/id/self-hosted-environments-deploy#default-deny-egress), lalu lintas keluar melewati batas jaringan Anda sendiri.

desktop.md +1 −1

Details

396 Bekerja secara paralel dengan sesi396 Bekerja secara paralel dengan sesi

397</h3>397</h3>

398 398 

399Klik **+ 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, pilih opsi **worktree** di sebelah nama branch untuk memberikan sesi salinan proyek Anda yang terisolasi menggunakan [Git worktrees](/docs/id/worktrees), sehingga perubahan dalam satu sesi tidak mempengaruhi sesi lain sampai Anda melakukan commit.399Klik **+ 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, pilih opsi **worktree** di sebelah nama branch untuk memberikan sesi salinan proyek Anda sendiri yang terisolasi menggunakan [Git worktrees](/docs/id/worktrees).

400 400 

401Untuk 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.401Untuk 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.

402 402 

env-vars.md +2 −2

Details

204| `CLAUDE_AFK_TIMEOUT_MS` | Berapa milidetik waktu idle sebelum dialog [`AskUserQuestion`](/docs/id/tools-reference) yang belum dijawab melanjutkan secara otomatis tanpa Anda. Auto-continue nonaktif secara default; ikut serta dengan pengaturan [`askUserQuestionTimeout`](/docs/id/settings-reference#askuserquestiontimeout). Variabel ini adalah override untuk demo dan pengujian otomatis: jika ditetapkan, variabel ini diutamakan daripada pengaturan tersebut dan mengaktifkan auto-continue bahkan ketika pengaturan tidak ditetapkan atau bernilai `never`. Menetapkan `0` tidak menonaktifkan timeout; justru menutup dialog seketika. Diabaikan di [pengaturan proyek dan lokal](/docs/id/settings-reference#variables-claude-code-ignores-in-env). Sebelum v2.1.200, auto-continue aktif secara default dengan timeout `60000` (60 detik). Memerlukan Claude Code v2.1.198 atau lebih baru |204| `CLAUDE_AFK_TIMEOUT_MS` | Berapa milidetik waktu idle sebelum dialog [`AskUserQuestion`](/docs/id/tools-reference) yang belum dijawab melanjutkan secara otomatis tanpa Anda. Auto-continue nonaktif secara default; ikut serta dengan pengaturan [`askUserQuestionTimeout`](/docs/id/settings-reference#askuserquestiontimeout). Variabel ini adalah override untuk demo dan pengujian otomatis: jika ditetapkan, variabel ini diutamakan daripada pengaturan tersebut dan mengaktifkan auto-continue bahkan ketika pengaturan tidak ditetapkan atau bernilai `never`. Menetapkan `0` tidak menonaktifkan timeout; justru menutup dialog seketika. Diabaikan di [pengaturan proyek dan lokal](/docs/id/settings-reference#variables-claude-code-ignores-in-env). Sebelum v2.1.200, auto-continue aktif secara default dengan timeout `60000` (60 detik). Memerlukan Claude Code v2.1.198 atau lebih baru |

205| `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` | Tetapkan ke `1` untuk menonaktifkan semua tipe [subagent](/docs/id/sub-agents) bawaan seperti Explore dan Plan. Hanya berlaku dalam mode non-interaktif (flag `-p`). Berguna bagi pengguna SDK yang menginginkan awal yang bersih. Ini juga menghapus `general-purpose`, subagent yang dijalankan Claude Code ketika panggilan tool Agent tidak menyertakan `subagent_type`. Panggilan seperti itu kemudian gagal dengan [`subagent_type is required`](/docs/id/errors#subagent-type-is-required) |205| `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` | Tetapkan ke `1` untuk menonaktifkan semua tipe [subagent](/docs/id/sub-agents) bawaan seperti Explore dan Plan. Hanya berlaku dalam mode non-interaktif (flag `-p`). Berguna bagi pengguna SDK yang menginginkan awal yang bersih. Ini juga menghapus `general-purpose`, subagent yang dijalankan Claude Code ketika panggilan tool Agent tidak menyertakan `subagent_type`. Panggilan seperti itu kemudian gagal dengan [`subagent_type is required`](/docs/id/errors#subagent-type-is-required) |

206| `CLAUDE_AGENT_SDK_MCP_NO_PREFIX` | Tetapkan ke `1` untuk melewati awalan `mcp__<server>__` pada nama tool dari server MCP yang dibuat SDK. Tool menggunakan nama aslinya. Hanya untuk penggunaan SDK |206| `CLAUDE_AGENT_SDK_MCP_NO_PREFIX` | Tetapkan ke `1` untuk melewati awalan `mcp__<server>__` pada nama tool dari server MCP yang dibuat SDK. Tool menggunakan nama aslinya. Hanya untuk penggunaan SDK |

207| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | Timeout macet dalam milidetik untuk subagent. Default `600000` (10 menit); jika Anda menaikkan `CLAUDE_STREAM_IDLE_TIMEOUT_MS` saat stream watchdog aktif, default ikut naik, seperti yang dijelaskan di [Menangani respons API yang lambat atau macet](/docs/id/agent-sdk/typescript#handle-slow-or-stalled-api-responses). Timer diatur ulang pada setiap event progres streaming; jika tidak ada progres yang tiba dalam rentang waktu tersebut, Claude Code membatalkan subagent dan melaporkan kemacetan ke induknya |207| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | Timeout macet dalam milidetik untuk subagent. Juga mencakup [agent workflow](/docs/id/workflows#when-an-agent-stalls-and-restarts) di Claude Code v2.1.286 atau yang lebih baru. Default `600000` (10 menit); jika Anda menaikkan `CLAUDE_STREAM_IDLE_TIMEOUT_MS` saat watchdog stream aktif, nilai default ikut naik, seperti yang dijelaskan di [Menangani respons API yang lambat atau macet](/docs/id/agent-sdk/typescript#handle-slow-or-stalled-api-responses) |

208| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | Tetapkan persentase (1-100) dari auto-compact window di mana auto-compaction dipicu. Gunakan nilai lebih rendah seperti `50` untuk melakukan compaction lebih awal; variabel ini tidak dapat menaikkan ambang batas, sehingga nilai di atas persentase default diabaikan. Ini hanya berlaku dalam sesi yang [melakukan compaction sebelum batas konteks model](/docs/id/model-config#context-window-and-auto-compaction). Berlaku untuk percakapan utama dan subagent |208| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | Tetapkan persentase (1-100) dari auto-compact window di mana auto-compaction dipicu. Gunakan nilai lebih rendah seperti `50` untuk melakukan compaction lebih awal; variabel ini tidak dapat menaikkan ambang batas, sehingga nilai di atas persentase default diabaikan. Ini hanya berlaku dalam sesi yang [melakukan compaction sebelum batas konteks model](/docs/id/model-config#context-window-and-auto-compaction). Berlaku untuk percakapan utama dan subagent |

209| `CLAUDE_AUTO_BACKGROUND_TASKS` | Tetapkan ke `1` untuk memaksa mengaktifkan pemindahan otomatis tugas agent yang berjalan lama ke latar belakang. Jika diaktifkan, subagent dipindahkan ke latar belakang setelah berjalan sekitar dua menit. Juga mengaktifkan [pemindahan otomatis panggilan tool MCP yang lama ke latar belakang](/docs/id/mcp#automatic-backgrounding-of-long-tool-calls) dalam mode non-interaktif pada Claude Code v2.1.212 atau lebih baru |209| `CLAUDE_AUTO_BACKGROUND_TASKS` | Tetapkan ke `1` untuk memaksa mengaktifkan pemindahan otomatis tugas agent yang berjalan lama ke latar belakang. Jika diaktifkan, subagent dipindahkan ke latar belakang setelah berjalan sekitar dua menit. Juga mengaktifkan [pemindahan otomatis panggilan tool MCP yang lama ke latar belakang](/docs/id/mcp#automatic-backgrounding-of-long-tool-calls) dalam mode non-interaktif pada Claude Code v2.1.212 atau lebih baru |

210| `CLAUDE_AX_PREPARK_MS` | Dalam [mode pembaca layar](/docs/id/accessibility), berapa milidetik Claude Code menunggu sebelum menulis baris yang baru atau berubah. Default `0`, sehingga Claude Code tidak menunggu. Sebelum v2.1.287, default-nya adalah `50`. Claude Code membatasi waktu tunggu pada `5000`. Memerlukan Claude Code v2.1.233 atau lebih baru |210| `CLAUDE_AX_PREPARK_MS` | Dalam [mode pembaca layar](/docs/id/accessibility), berapa milidetik Claude Code menunggu sebelum menulis baris yang baru atau berubah. Default `0`, sehingga Claude Code tidak menunggu. Sebelum v2.1.287, default-nya adalah `50`. Claude Code membatasi waktu tunggu pada `5000`. Memerlukan Claude Code v2.1.233 atau lebih baru |


378| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | Usia maksimum dalam milidetik dari pesan transkrip terakhir agar sesi yang berakhir di tengah giliran dapat berlanjut secara otomatis saat dilanjutkan. Ketika pesan terakhir lebih tua dari batas ini, Claude Code melewati pelanjutan otomatis `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` dan pesan kelanjutan `CLAUDE_CODE_RESUME_PROMPT`-nya, dan sesi dimulai dalam keadaan idle sehingga Anda melanjutkan secara eksplisit. Tidak diatur atau `0` berarti tanpa batas, kecuali bahwa giliran yang permintaan terakhirnya gagal dengan error API hanya dilanjutkan selama error tersebut berusia kurang dari enam jam. Nilai positif membatasi setiap giliran, termasuk giliran tersebut; nilai negatif atau non-numerik menerapkan batas satu jam. Skrip spawn untuk agent yang berjalan lama dapat mengatur ini agar restart terhadap transkrip lama tidak menjalankan ulang prompt yang usang. Claude Code menetapkan batas satu jam sendiri ketika memulai ulang sesi [agent view](/docs/id/agent-view) yang crash yang mewarisi percakapannya dari sesi interaktif. Memerlukan Claude Code v2.1.211 atau yang lebih baru |378| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | Usia maksimum dalam milidetik dari pesan transkrip terakhir agar sesi yang berakhir di tengah giliran dapat berlanjut secara otomatis saat dilanjutkan. Ketika pesan terakhir lebih tua dari batas ini, Claude Code melewati pelanjutan otomatis `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` dan pesan kelanjutan `CLAUDE_CODE_RESUME_PROMPT`-nya, dan sesi dimulai dalam keadaan idle sehingga Anda melanjutkan secara eksplisit. Tidak diatur atau `0` berarti tanpa batas, kecuali bahwa giliran yang permintaan terakhirnya gagal dengan error API hanya dilanjutkan selama error tersebut berusia kurang dari enam jam. Nilai positif membatasi setiap giliran, termasuk giliran tersebut; nilai negatif atau non-numerik menerapkan batas satu jam. Skrip spawn untuk agent yang berjalan lama dapat mengatur ini agar restart terhadap transkrip lama tidak menjalankan ulang prompt yang usang. Claude Code menetapkan batas satu jam sendiri ketika memulai ulang sesi [agent view](/docs/id/agent-view) yang crash yang mewarisi percakapannya dari sesi interaktif. Memerlukan Claude Code v2.1.211 atau yang lebih baru |

379| `CLAUDE_CODE_RESUME_PROMPT` | Menimpa pesan kelanjutan yang dikirim Claude Code ke Claude ketika `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` melanjutkan giliran yang terputus alih-alih mengirim ulang prompt-nya, atau ketika Anda melanjutkan [panggilan tool yang ditunda](/docs/id/hooks#defer-a-tool-call-for-later) dengan `-p`. Default ke `Continue from where you left off.`. String kosong menggunakan default |379| `CLAUDE_CODE_RESUME_PROMPT` | Menimpa pesan kelanjutan yang dikirim Claude Code ke Claude ketika `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` melanjutkan giliran yang terputus alih-alih mengirim ulang prompt-nya, atau ketika Anda melanjutkan [panggilan tool yang ditunda](/docs/id/hooks#defer-a-tool-call-for-later) dengan `-p`. Default ke `Continue from where you left off.`. String kosong menggunakan default |

380| `CLAUDE_CODE_RETRY_WATCHDOG` | Atur ke `1` untuk sesi tanpa pengawasan seperti harness evaluasi, job CI, atau worker jarak jauh. Melakukan retry pada error kapasitas `429` dan `529` tanpa batas alih-alih gagal setelah `CLAUDE_CODE_MAX_RETRIES` percobaan. Claude Code langsung gagal ketika permintaan berkecepatan standar mendapat `429` yang melaporkan batas pengeluaran atau kredit penggunaan yang habis, bahkan yang berasal dari [batas pengeluaran gateway](/docs/id/errors#spend-limit-reached) yang direset sesuai jadwal. Sebelum v2.1.239, watchdog melakukan retry pada kasus ini tanpa batas. Untuk permintaan fast mode, lihat [Menangani rate limit](/docs/id/fast-mode#handle-rate-limits). Watchdog melakukan backoff hingga 5 menit di antara percobaan, atau hingga batas direset ketika respons membawa waktu reset rate limit, sehingga sesi yang mencapai batas penggunaan menunggu hingga window yang tersisa berakhir. Pada v2.1.199 atau yang lebih baru, ini juga menaikkan jumlah retry default untuk error sementara lainnya, seperti error server, timeout, dan koneksi terputus, menjadi 300, sekitar tiga jam backoff, dan menghapus batas 15 pada `CLAUDE_CODE_MAX_RETRIES` jika Anda mengatur variabel tersebut secara eksplisit. Memerlukan Claude Code v2.1.186 atau yang lebih baru |380| `CLAUDE_CODE_RETRY_WATCHDOG` | Atur ke `1` untuk sesi tanpa pengawasan seperti harness evaluasi, job CI, atau worker jarak jauh. Melakukan retry pada error kapasitas `429` dan `529` tanpa batas alih-alih gagal setelah `CLAUDE_CODE_MAX_RETRIES` percobaan. Claude Code langsung gagal ketika permintaan berkecepatan standar mendapat `429` yang melaporkan batas pengeluaran atau kredit penggunaan yang habis, bahkan yang berasal dari [batas pengeluaran gateway](/docs/id/errors#spend-limit-reached) yang direset sesuai jadwal. Sebelum v2.1.239, watchdog melakukan retry pada kasus ini tanpa batas. Untuk permintaan fast mode, lihat [Menangani rate limit](/docs/id/fast-mode#handle-rate-limits). Watchdog melakukan backoff hingga 5 menit di antara percobaan, atau hingga batas direset ketika respons membawa waktu reset rate limit, sehingga sesi yang mencapai batas penggunaan menunggu hingga window yang tersisa berakhir. Pada v2.1.199 atau yang lebih baru, ini juga menaikkan jumlah retry default untuk error sementara lainnya, seperti error server, timeout, dan koneksi terputus, menjadi 300, sekitar tiga jam backoff, dan menghapus batas 15 pada `CLAUDE_CODE_MAX_RETRIES` jika Anda mengatur variabel tersebut secara eksplisit. Memerlukan Claude Code v2.1.186 atau yang lebih baru |

381| `CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS` | Waktu maksimum dalam milidetik yang dihabiskan setiap permintaan API untuk menunggu error `429` dan `529` ketika `CLAUDE_CODE_RETRY_WATCHDOG` diatur. Setelah waktu tersebut habis, error serupa berikutnya mengakhiri permintaan. Berikan bilangan bulat positif dalam digit biasa, seperti `1800000` untuk 30 menit. Ketika tidak diatur, penantian tidak memiliki batas. Memerlukan Claude Code v2.1.295 atau lebih baru |

381| `CLAUDE_CODE_SAFE_MODE` | Atur ke `1` untuk memulai dalam safe mode: CLAUDE.md, skill, plugin, hook, server MCP, perintah dan agent kustom, gaya output, workflow, tema kustom, pintasan keyboard kustom, perintah baris status dan saran file, server LSP, dan auto memory tidak dimuat, untuk pemecahan masalah konfigurasi yang rusak. Kebijakan pengaturan terkelola tetap berlaku, termasuk hook, baris status, dan perintah saran file yang dikonfigurasi kebijakan; plugin terkelola, skill terkelola, CLAUDE.md terkelola, dan server MCP yang dikonfigurasi kebijakan tidak berlaku. Setara dengan meneruskan [`--safe-mode`](/docs/id/cli-reference#cli-flags). Proses anak yang dimunculkan secara langsung mewarisi variabel ini |382| `CLAUDE_CODE_SAFE_MODE` | Atur ke `1` untuk memulai dalam safe mode: CLAUDE.md, skill, plugin, hook, server MCP, perintah dan agent kustom, gaya output, workflow, tema kustom, pintasan keyboard kustom, perintah baris status dan saran file, server LSP, dan auto memory tidak dimuat, untuk pemecahan masalah konfigurasi yang rusak. Kebijakan pengaturan terkelola tetap berlaku, termasuk hook, baris status, dan perintah saran file yang dikonfigurasi kebijakan; plugin terkelola, skill terkelola, CLAUDE.md terkelola, dan server MCP yang dikonfigurasi kebijakan tidak berlaku. Setara dengan meneruskan [`--safe-mode`](/docs/id/cli-reference#cli-flags). Proses anak yang dimunculkan secara langsung mewarisi variabel ini |

382| `CLAUDE_CODE_SCRIPT_CAPS` | Objek JSON yang membatasi berapa kali skrip tertentu dapat dipanggil per sesi ketika `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` diatur. Kunci adalah substring yang dicocokkan dengan teks perintah; nilai adalah batas panggilan berupa bilangan bulat. Misalnya, `{"deploy.sh": 2}` mengizinkan `deploy.sh` dipanggil paling banyak dua kali. Pencocokan berbasis substring sehingga trik ekspansi shell seperti `./scripts/deploy.sh $(evil)` tetap dihitung terhadap batas. Fan-out runtime melalui `xargs` atau `find -exec` tidak terdeteksi; ini adalah kontrol defense-in-depth |383| `CLAUDE_CODE_SCRIPT_CAPS` | Objek JSON yang membatasi berapa kali skrip tertentu dapat dipanggil per sesi ketika `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` diatur. Kunci adalah substring yang dicocokkan dengan teks perintah; nilai adalah batas panggilan berupa bilangan bulat. Misalnya, `{"deploy.sh": 2}` mengizinkan `deploy.sh` dipanggil paling banyak dua kali. Pencocokan berbasis substring sehingga trik ekspansi shell seperti `./scripts/deploy.sh $(evil)` tetap dihitung terhadap batas. Fan-out runtime melalui `xargs` atau `find -exec` tidak terdeteksi; ini adalah kontrol defense-in-depth |

383| `CLAUDE_CODE_SCROLL_SPEED` | Mengatur pengali gulir roda mouse dalam [rendering layar penuh](/docs/id/fullscreen#mouse-wheel-scrolling). Menerima nilai positif apa pun hingga 20, termasuk nilai pecahan di bawah 1 seperti `0.5` untuk memperlambat gulir trackpad dan roda yang dipercepat di terminal yang sudah memperkuat event roda. Atur ke `3` agar sesuai dengan `vim` jika terminal Anda mengirim satu event roda per takik tanpa penguatan. Diabaikan di terminal IDE JetBrains, tempat Claude Code menggunakan penanganan gulir miliknya sendiri |384| `CLAUDE_CODE_SCROLL_SPEED` | Mengatur pengali gulir roda mouse dalam [rendering layar penuh](/docs/id/fullscreen#mouse-wheel-scrolling). Menerima nilai positif apa pun hingga 20, termasuk nilai pecahan di bawah 1 seperti `0.5` untuk memperlambat gulir trackpad dan roda yang dipercepat di terminal yang sudah memperkuat event roda. Atur ke `3` agar sesuai dengan `vim` jika terminal Anda mengirim satu event roda per takik tanpa penguatan. Diabaikan di terminal IDE JetBrains, tempat Claude Code menggunakan penanganan gulir miliknya sendiri |


590* Menggunakan [tool advisor](/docs/id/advisor#requirements)591* Menggunakan [tool advisor](/docs/id/advisor#requirements)

591* Membaca atau membalas [komentar pada artifact](/docs/id/artifacts#collect-comments-on-an-artifact)592* Membaca atau membalas [komentar pada artifact](/docs/id/artifacts#collect-comments-on-an-artifact)

592* Meminta Claude membaca [artifact publik milik organisasi lain](/docs/id/artifacts#read-an-artifact-shared-with-you)593* Meminta Claude membaca [artifact publik milik organisasi lain](/docs/id/artifacts#read-an-artifact-shared-with-you)

593* Meminta Claude Code memeriksa server konektor claude.ai untuk [revisi protokol MCP 2026-07-28](/docs/id/mcp#mcp-client-runtimes) kecuali Anda mengatur `MCP_PROTOCOL_NEGOTIATION=auto`

594* Mendapatkan [tool PowerShell](/docs/id/tools-reference#powershell-tool) secara default untuk akun claude.ai dan Console di Windows dengan Git Bash terinstal; Claude Code merutekan perintah shell melalui Git Bash kecuali Anda mengatur `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`. Di Windows tanpa Git Bash, tool tersebut tetap aktif594* Mendapatkan [tool PowerShell](/docs/id/tools-reference#powershell-tool) secara default untuk akun claude.ai dan Console di Windows dengan Git Bash terinstal; Claude Code merutekan perintah shell melalui Git Bash kecuali Anda mengatur `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`. Di Windows tanpa Git Bash, tool tersebut tetap aktif

595* Mendapatkan [umpan balik yang disusun Claude](/docs/id/tools-reference#sendfeedback-tool-behavior), yang diaktifkan Claude Code melalui flag yang diambil595* Mendapatkan [umpan balik yang disusun Claude](/docs/id/tools-reference#sendfeedback-tool-behavior), yang diaktifkan Claude Code melalui flag yang diambil

596* Meminta Claude [memperlakukan tempelan besar sebagai teks yang ditempel, bukan diketik](/docs/id/terminal-config#how-claude-treats-pasted-text); konten di balik placeholder `[Pasted text #N]` sampai ke Claude tanpa penanda596* Meminta Claude [memperlakukan tempelan besar sebagai teks yang ditempel, bukan diketik](/docs/id/terminal-config#how-claude-treats-pasted-text); konten di balik placeholder `[Pasted text #N]` sampai ke Claude tanpa penanda

errors.md +7 −5

Details

261| `Marketplace name impersonates an official Anthropic/Claude marketplace` | [Plugin errors](#claude-code-refuses-the-marketplace-name) |261| `Marketplace name impersonates an official Anthropic/Claude marketplace` | [Plugin errors](#claude-code-refuses-the-marketplace-name) |

262| `Marketplace "<name>" is already added from a different source` | [Plugin errors](#marketplace-is-already-added-from-a-different-source) |262| `Marketplace "<name>" is already added from a different source` | [Plugin errors](#marketplace-is-already-added-from-a-different-source) |

263| `"<name>" is another spelling of "<reserved>", a reserved marketplace name` | [Plugin errors](#marketplace-name-is-another-spelling-of-a-reserved-name) |263| `"<name>" is another spelling of "<reserved>", a reserved marketplace name` | [Plugin errors](#marketplace-name-is-another-spelling-of-a-reserved-name) |

264| `Cannot add marketplace "<name>": Claude Code cannot install plugins from a marketplace with this name` | [Plugin troubleshooting](/docs/id/plugins/troubleshooting#cannot-install-plugins-from-a-marketplace-with-this-name) |

264| `Marketplace "<name>" is added but ignored` | [Plugin troubleshooting](/docs/id/plugins/troubleshooting#marketplace-is-added-but-ignored) |265| `Marketplace "<name>" is added but ignored` | [Plugin troubleshooting](/docs/id/plugins/troubleshooting#marketplace-is-added-but-ignored) |

265| `Marketplace "<name>" is registered but was refused (see the debug log)` | [Plugin troubleshooting](/docs/id/plugins/troubleshooting#marketplace-is-added-but-ignored) |266| `Marketplace "<name>" is registered but was refused (see the debug log)` | [Plugin troubleshooting](/docs/id/plugins/troubleshooting#marketplace-is-added-but-ignored) |

266| `references ${user_config.*} in a shell-form command` | [Plugin errors](#plugin-command-references-user-config) |267| `references ${user_config.*} in a shell-form command` | [Plugin errors](#plugin-command-references-user-config) |


269| `Plugin archive integrity check failed` | [Plugin errors](#plugin-archive-integrity-check-failed) |270| `Plugin archive integrity check failed` | [Plugin errors](#plugin-archive-integrity-check-failed) |

270| `An npm plugin source must name a registry package` | [Plugin troubleshooting](/docs/id/plugins/troubleshooting#an-npm-plugin-source-must-name-a-registry-package) |271| `An npm plugin source must name a registry package` | [Plugin troubleshooting](/docs/id/plugins/troubleshooting#an-npm-plugin-source-must-name-a-registry-package) |

271| `The packages it lists are not installed` / `The packages it lists were not installed, because` | [Plugin troubleshooting](/docs/id/plugins/troubleshooting#the-packages-it-lists-are-not-installed) |272| `The packages it lists are not installed` / `The packages it lists were not installed, because` | [Plugin troubleshooting](/docs/id/plugins/troubleshooting#the-packages-it-lists-are-not-installed) |

273| `does not load (...), so Claude Code ignores the whole file` | [Plugin troubleshooting](/docs/id/plugins/troubleshooting#does-not-load-so-claude-code-ignores-the-whole-file) |

272| `path escapes plugin directory` | [Plugin errors](#path-escapes-plugin-directory) |274| `path escapes plugin directory` | [Plugin errors](#path-escapes-plugin-directory) |

273| `path could not be checked` | [Plugin errors](#path-could-not-be-checked) |275| `path could not be checked` | [Plugin errors](#path-could-not-be-checked) |

274| `its marketplace entry path does not stay inside the marketplace directory` | [Plugin errors](#marketplace-entry-path-does-not-stay-inside-the-marketplace-directory) |276| `its marketplace entry path does not stay inside the marketplace directory` | [Plugin errors](#marketplace-entry-path-does-not-stay-inside-the-marketplace-directory) |


279| `"<plugin>" was not uninstalled: it is still switched on in <file>` | [Plugin errors](#plugin-was-not-uninstalled) |281| `"<plugin>" was not uninstalled: it is still switched on in <file>` | [Plugin errors](#plugin-was-not-uninstalled) |

280| `"<plugin>" was not uninstalled: <file> is there and could not be read` | [Plugin errors](#plugin-was-not-uninstalled) |282| `"<plugin>" was not uninstalled: <file> is there and could not be read` | [Plugin errors](#plugin-was-not-uninstalled) |

281| `Plugin "<plugin>" was not uninstalled: installed_plugins.json` | [Plugin troubleshooting](/docs/id/plugins/troubleshooting#installed-plugins-json-holds-a-record-this-version-cannot-read) |283| `Plugin "<plugin>" was not uninstalled: installed_plugins.json` | [Plugin troubleshooting](/docs/id/plugins/troubleshooting#installed-plugins-json-holds-a-record-this-version-cannot-read) |

284| `Plugin directory does not exist: <path>` | [Plugin troubleshooting](/docs/id/plugins/troubleshooting#plugin-directory-does-not-exist) |

282| `Error: No such tool available: <tool name>` | [Tool errors](#no-such-tool-available) |285| `Error: No such tool available: <tool name>` | [Tool errors](#no-such-tool-available) |

283| `would be spawned with zero tools — refusing` | [Tool errors](#agent-would-be-spawned-with-zero-tools) |286| `would be spawned with zero tools — refusing` | [Tool errors](#agent-would-be-spawned-with-zero-tools) |

284| `File is covered by a Read deny rule in your permission settings` | [Tool errors](#file-is-covered-by-a-read-deny-rule) |287| `File is covered by a Read deny rule in your permission settings` | [Tool errors](#file-is-covered-by-a-read-deny-rule) |


386* Server error atau overloaded response yang tiba setelah Claude selesai berpikir tetapi sebelum memulai teks atau panggilan tool apa pun. Claude Code mencoba ulang server error pada titik itu hingga dua kali. Sebelum v2.1.284, Claude Code mengakhiri giliran dengan kesalahan tersebut pada titik itu.389* Server error atau overloaded response yang tiba setelah Claude selesai berpikir tetapi sebelum memulai teks atau panggilan tool apa pun. Claude Code mencoba ulang server error pada titik itu hingga dua kali. Sebelum v2.1.284, Claude Code mengakhiri giliran dengan kesalahan tersebut pada titik itu.

387* Dropped connections. Ketika koneksi terputus di tengah permintaan sebelum Claude menyelesaikan bagian mana pun dari responsnya, termasuk pemikirannya, Claude Code mengeluarkan kembali permintaan dengan backoff yang sama dan giliran berlanjut, bahkan jika beberapa teks telah mulai streaming. Ketika terputus setelah Claude selesai berpikir tetapi sebelum memulai teks atau panggilan tool apa pun, Claude Code malah mengeluarkan kembali permintaan hingga dua kali dengan cepat, dan mengakhiri giliran dengan `Connection lost before a response was produced` jika koneksi terus terputus pada titik itu.390* Dropped connections. Ketika koneksi terputus di tengah permintaan sebelum Claude menyelesaikan bagian mana pun dari responsnya, termasuk pemikirannya, Claude Code mengeluarkan kembali permintaan dengan backoff yang sama dan giliran berlanjut, bahkan jika beberapa teks telah mulai streaming. Ketika terputus setelah Claude selesai berpikir tetapi sebelum memulai teks atau panggilan tool apa pun, Claude Code malah mengeluarkan kembali permintaan hingga dua kali dengan cepat, dan mengakhiri giliran dengan `Connection lost before a response was produced` jika koneksi terus terputus pada titik itu.

388* Koneksi yang Claude Code deteksi rusak karena komputer Anda tidur di tengah permintaan. Claude Code menghitungnya sebagai dropped connection sesuai aturan di atas; setelah label retry menyebutkan alasan spesifik, dibaca `Connection lost while your computer was asleep`, dan jika giliran berakhir setelah Claude selesai berpikir tetapi sebelum teks atau panggilan tool apa pun, pesan berbunyi `Your computer went to sleep before a response was produced`.391* Koneksi yang Claude Code deteksi rusak karena komputer Anda tidur di tengah permintaan. Claude Code menghitungnya sebagai dropped connection sesuai aturan di atas; setelah label retry menyebutkan alasan spesifik, dibaca `Connection lost while your computer was asleep`, dan jika giliran berakhir setelah Claude selesai berpikir tetapi sebelum teks atau panggilan tool apa pun, pesan berbunyi `Your computer went to sleep before a response was produced`.

389* Stalled response stream, ketika response headers telah tiba tetapi tidak ada respons Claude yang tiba, atau ketika Claude selesai berpikir tetapi belum memulai teks atau panggilan tool apa pun: Claude Code membatalkan koneksi yang macet dan mengeluarkan kembali permintaan paling banyak sekali, di luar anggaran 10-percobaan di atas. Jika respons macet untuk kedua kalinya setelah Claude selesai berpikir tetapi sebelum teks atau panggilan tool apa pun, Claude Code mengakhiri giliran dengan `The response stalled before a response was produced`.392* Stalled response stream, ketika response headers telah tiba tetapi tidak ada respons Claude yang tiba, atau ketika Claude selesai berpikir tetapi belum memulai teks atau panggilan tool apa pun: Claude Code membatalkan koneksi yang macet dan melakukan streaming ulang permintaan paling banyak sekali. Jika respons macet untuk kedua kalinya setelah Claude selesai berpikir tetapi sebelum teks atau panggilan tool apa pun, Claude Code mengakhiri giliran dengan `The response stalled before a response was produced`.

390* Streaming request yang API tidak pernah jawab dengan response headers, pada koneksi di mana [first-byte deadline berjalan](/docs/id/network-config#streaming-idle-watchdogs): Claude Code membatalkannya pada deadline dan mengirimnya kembali paling banyak sekali per model request, dalam anggaran retry, kemudian mengakhiri giliran dengan [No response from API](#no-response-from-api) jika percobaan itu juga tidak dijawab. Pada koneksi lain, permintaan menunggu `API_TIMEOUT_MS`. Ketika Anda menetapkan `CLAUDE_CODE_RETRY_WATCHDOG`, batas satu retry tidak berlaku.393* Streaming request yang API tidak pernah jawab dengan response headers, pada koneksi di mana [first-byte deadline berjalan](/docs/id/network-config#streaming-idle-watchdogs): Claude Code membatalkannya pada deadline dan mengirimnya kembali paling banyak sekali per model request, dalam anggaran retry, kemudian mengakhiri giliran dengan [No response from API](#no-response-from-api) jika percobaan itu juga tidak dijawab. Pada koneksi lain, permintaan menunggu `API_TIMEOUT_MS`. Ketika Anda menetapkan `CLAUDE_CODE_RETRY_WATCHDOG`, batas satu retry tidak berlaku.

391* Respons streaming yang dihentikan oleh filter konten output API sebelum Claude selesai berpikir atau memulai teks atau panggilan tool apa pun. Claude Code mengirim kembali permintaan sekali, dalam anggaran retry, dan menampilkan [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy) jika filter juga menghentikan respons kedua.394* Respons streaming yang dihentikan oleh filter konten output API sebelum Claude selesai berpikir atau memulai teks atau panggilan tool apa pun. Claude Code mengirim kembali permintaan sekali, dalam anggaran retry, dan menampilkan [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy) jika filter juga menghentikan respons kedua.

392* Temporary 429 throttles, tetapi bukan `429` spend-limit gateway, yang bukan throttle; lihat [Spend limit reached](#spend-limit-reached).395* Temporary 429 throttles, tetapi bukan `429` spend-limit gateway, yang bukan throttle; lihat [Spend limit reached](#spend-limit-reached).


4064 Marketplace is already added from a different source4067 Marketplace is already added from a different source

4065</h3>4068</h3>

4066 4069 

4067Anda mengonfirmasi penambahan marketplace melalui [`/plugin install <plugin> --marketplace <source>`](/docs/id/plugins/install#add-a-marketplace-and-install-in-one-command), dan katalog yang Claude Code ambil dari sumber itu menamai dirinya sama dengan marketplace yang sudah Anda tambahkan dari sumber berbeda. Claude Code menyimpan marketplace yang ada daripada menggantinya, dan plugin tidak terpasang.4070Anda menyebutkan sumber marketplace baru dengan [`--marketplace <source>` pada perintah install](/docs/id/plugins/install#add-a-marketplace-and-install-in-one-command), dalam sesi atau dari shell Anda. Katalog yang Claude Code ambil dari sumber itu memiliki nama yang sama dengan marketplace yang sudah Anda tambahkan dari sumber berbeda. Claude Code menyimpan marketplace yang ada daripada menggantinya, dan plugin tidak terpasang.

4068 4071 

4069```text theme={null}4072```text theme={null}

4070Marketplace "acme-tools" is already added from a different source (github:acme/plugins). To use this source instead, remove that marketplace first with /plugin marketplace remove acme-tools.4073Marketplace "acme-tools" is already added from a different source (github:acme/plugins). To use this source instead, remove that marketplace first with /plugin marketplace remove acme-tools.


4817 Sesi ini tidak memiliki transkrip yang disimpan4820 Sesi ini tidak memiliki transkrip yang disimpan

4818</h3>4821</h3>

4819 4822 

4820Anda melampirkan ke sesi [latar belakang](/docs/id/agent-view) yang dihentikan yang dilatarbelakangkan dari percakapan lain dengan `←` atau `/background` dan dihentikan sebelum respons pertamanya selesai. Sampai respons pertama itu selesai, percakapan masih hidup hanya dalam sesi tempat ia dilatarbelakangkan, jadi `claude attach` menolak untuk memulai sesi yang dihentikan daripada memulai percakapan kosong di bawah ID sesi yang sama. Pesan berakhir dengan perintah `claude respawn` untuk sesi ini:4823Anda melampirkan ke sesi yang Anda [pindahkan ke latar belakang](/docs/id/agent-view#from-inside-a-session) dengan `←` atau `/background` dan yang berhenti sebelum menjalankan gilirannya sendiri. Claude Code tidak dapat menemukan percakapan tempat Anda memindahkannya, jadi sesi tidak memiliki apa pun untuk dilanjutkan. Pesan berakhir dengan perintah `claude respawn` untuk sesi ini:

4821 4824 

4822```text theme={null}4825```text theme={null}

4823This session has no saved transcript — it was stopped before its first response finished. If it was backgrounded from another conversation, that one is still intact; `claude respawn <id>` starts this one fresh.4826This session has no saved transcript — it was stopped before its first response finished. If it was backgrounded from another conversation, that one is still intact; `claude respawn <id>` starts this one fresh.


4827 4830 

4828**Yang harus dilakukan:**4831**Yang harus dilakukan:**

4829 4832 

4830* Percakapan yang Anda latarbelakangkan masih utuh: lanjutkan dengan [`claude --resume`](/docs/id/sessions) atau terus bekerja di dalamnya4833* Untuk memulai sesi yang dihentikan secara segar, jalankan `claude respawn <id>` dengan ID dari pesan, atau tekan `Enter` dua kali pada barisnya dalam tampilan agent

4831* Untuk memulai sesi yang dihentikan segar bagaimanapun, jalankan `claude respawn <id>` dengan ID dari pesan, atau tekan `Enter` dua kali pada barisnya dalam tampilan agent

4832* Jika sesi memang menyelesaikan respons dan Anda masih melihat penolakan ini pada versi sebelum v2.1.214, folder yang tidak dapat dibaca di `~/.claude/projects` dapat membuat pemindaian transkrip melewatkan percakapan yang disimpan; perbarui ke v2.1.214 atau lebih baru, yang mentoleransi folder yang tidak dapat dibaca selama pemindaian4834* Jika sesi memang menyelesaikan respons dan Anda masih melihat penolakan ini pada versi sebelum v2.1.214, folder yang tidak dapat dibaca di `~/.claude/projects` dapat membuat pemindaian transkrip melewatkan percakapan yang disimpan; perbarui ke v2.1.214 atau lebih baru, yang mentoleransi folder yang tidak dapat dibaca selama pemindaian

4833 4835 

4834<h3 id="this-session-is-running-in-another-terminal">4836<h3 id="this-session-is-running-in-another-terminal">

glossary.md +1 −1

Details

511 Worktree isolation511 Worktree isolation

512</h3>512</h3>

513 513 

514Mode isolasi yang menjalankan Claude di git worktree terpisah di bawah `.claude/worktrees/`, diaktifkan dengan bendera `-w` atau `isolation: worktree` dalam config subagent. Perubahan tetap di branch terpisah di direktori terpisah, sehingga agen paralel tidak menimpa file satu sama lain.514Mode isolasi yang menjalankan Claude di git worktree terpisah di bawah `.claude/worktrees/`, diaktifkan dengan flag `-w` atau `isolation: worktree` dalam konfigurasi subagent. Perubahan tetap berada di branch terpisah dalam direktori terpisah, sehingga setiap agent paralel mengedit salinan file miliknya sendiri.

515 515 

516Pelajari lebih lanjut: [Run parallel sessions with git worktrees](/docs/id/worktrees)516Pelajari lebih lanjut: [Run parallel sessions with git worktrees](/docs/id/worktrees)

517 517 

goal.md +1 −1

Details

127claude -p "/goal CHANGELOG.md has an entry for every PR merged this week"127claude -p "/goal CHANGELOG.md has an entry for every PR merged this week"

128```128```

129 129 

130Dengan output teks default, tidak ada yang dicetak sampai jalannya berakhir, jadi tujuan yang berjalan banyak giliran dapat terlihat macet. Tambahkan `--output-format stream-json --verbose` untuk memancarkan setiap pesan saat loop berjalan.130Dengan output teks default, respons akhir Claude baru dicetak ketika loop berakhir, jadi tujuan yang berjalan banyak giliran dapat terlihat macet. Tambahkan `--output-format stream-json --verbose` untuk memancarkan setiap pesan saat loop berjalan.

131 131 

132Hentikan proses dengan Ctrl+C untuk menghentikan tujuan non-interaktif sebelum kondisinya terpenuhi.132Hentikan proses dengan Ctrl+C untuk menghentikan tujuan non-interaktif sebelum kondisinya terpenuhi.

133 133 

headless.md +14 −12

Details

20 Penggunaan dasar20 Penggunaan dasar

21</h2>21</h2>

22 22 

23Tambahkan bendera `-p` (atau `--print`) ke perintah `claude` apa pun untuk menjalankannya secara non-interaktif. Tidak semua [opsi CLI](/docs/id/cli-reference) menggabung dengan `-p`. Claude Code menolak `--bg`, dan menolak `--cloud` dengan deskripsi tugas, dengan kesalahan yang menyebutkan konflik; `--cloud` dengan ID sesi dan `-p` sebagai gantinya [antrian pesan ke sesi cloud tersebut](/docs/id/claude-code-on-the-web#send-follow-ups-from-the-cli) dan keluar. Opsi yang akan Anda gabungkan dengan `-p` sering kali mencakup:23Tambahkan flag `-p` (atau `--print`) ke perintah `claude` apa pun untuk menjalankannya secara non-interaktif. Tidak semua [opsi CLI](/docs/id/cli-reference) menggabung dengan `-p`. Claude Code menolak `--bg`, dan menolak `--cloud` dengan deskripsi tugas, dengan kesalahan yang menyebutkan konflik; `--cloud` dengan ID sesi dan `-p` sebagai gantinya [antrian pesan ke sesi cloud tersebut](/docs/id/claude-code-on-the-web#send-follow-ups-from-the-cli) dan keluar. Opsi yang akan Anda gabungkan dengan `-p` sering kali mencakup:

24 24 

25* `--continue` untuk [melanjutkan percakapan](#continue-conversations)25* `--continue` untuk [melanjutkan percakapan](#continue-conversations)

26* `--allowedTools` untuk [persetujuan otomatis alat](#auto-approve-tools)26* `--allowedTools` untuk [persetujuan otomatis tool](#auto-approve-tools)

27* `--output-format` untuk [output terstruktur](#get-structured-output)27* `--output-format` untuk [output terstruktur](#get-structured-output)

28 28 

29Contoh ini menanyakan Claude tentang basis kode Anda dan mencetak respons:29Contoh ini menanyakan Claude tentang basis kode Anda dan mencetak respons:


32claude -p "What does the auth module do?"32claude -p "What does the auth module do?"

33```33```

34 34 

35Claude Code keluar dengan kode 0 saat berhasil dan kode bukan nol ketika jalankan gagal, sehingga skrip Anda dapat bercabang pada status keluar. Jika Anda melewatkan bendera yang tidak valid, Claude Code melaporkan kesalahan ke stderr sebelum jalankan dimulai. Ketika kegagalan terjadi di dalam jalankan, seperti autentikasi yang hilang, Claude Code mencetak kegagalan sebagai hasil pada stdout.35Claude Code keluar dengan kode 0 saat berhasil dan kode bukan nol ketika jalankan gagal, sehingga skrip Anda dapat bercabang pada status keluar. Jika Anda melewatkan flag yang tidak valid, Claude Code melaporkan kesalahan ke stderr sebelum jalankan dimulai. Ketika kegagalan terjadi di dalam jalankan, seperti autentikasi yang hilang, Claude Code mencetak kegagalan sebagai hasil pada stdout.

36 36 

37<h3 id="start-faster-with-bare-mode">37<h3 id="start-faster-with-bare-mode">

38 Mulai lebih cepat dengan bare mode38 Mulai lebih cepat dengan bare mode


42 42 

43Bare mode berguna untuk CI dan skrip di mana Anda memerlukan hasil yang sama di setiap mesin. Hook di `~/.claude` rekan kerja atau server MCP di `.mcp.json` proyek tidak akan berjalan, karena bare mode tidak pernah membacanya. Direktori yang Anda beri nama dengan `--add-dir` adalah pengecualian parsial: bare mode memuat skills dari folder `.claude/skills/` nya, tetapi masih melewati folder `.claude/commands/` dan `.claude/agents/` nya. [Skills dari direktori tambahan](/docs/id/skills#skills-from-additional-directories) mencakup apa yang dimuat dan tidak dimuat.43Bare mode berguna untuk CI dan skrip di mana Anda memerlukan hasil yang sama di setiap mesin. Hook di `~/.claude` rekan kerja atau server MCP di `.mcp.json` proyek tidak akan berjalan, karena bare mode tidak pernah membacanya. Direktori yang Anda beri nama dengan `--add-dir` adalah pengecualian parsial: bare mode memuat skills dari folder `.claude/skills/` nya, tetapi masih melewati folder `.claude/commands/` dan `.claude/agents/` nya. [Skills dari direktori tambahan](/docs/id/skills#skills-from-additional-directories) mencakup apa yang dimuat dan tidak dimuat.

44 44 

45Tanpa `--bare`, sesi `-p` menjalankan hooks di `.claude/settings.json` proyek dan menghubungkan server di `.mcp.json` nya, bahkan di folder yang belum pernah Anda percayai. Sesi `-p` tidak menampilkan dialog kepercayaan ruang kerja dan tidak ada prompt persetujuan per-server. [Apa yang berjalan sebelum Anda mempercayai folder](/docs/id/permissions#what-runs-before-you-trust-a-folder) mencakup setiap jenis konten repositori di bawah `-p` dan cara menjaganya tetap keluar.45Tanpa `--bare`, sesi `-p` menjalankan hooks di `.claude/settings.json` proyek dan menghubungkan server di `.mcp.json` nya, bahkan di folder yang belum pernah Anda percayai. Sesi `-p` tidak menampilkan dialog kepercayaan workspace dan tidak ada permintaan persetujuan per-server. [Apa yang berjalan sebelum Anda mempercayai folder](/docs/id/permissions#what-runs-before-you-trust-a-folder) mencakup setiap jenis konten repositori di bawah `-p` dan cara menjaganya tetap keluar.

46 46 

47Contoh ini menjalankan tugas ringkasan sekali pakai dalam bare mode dan pra-menyetujui alat Read sehingga panggilan selesai tanpa prompt izin. Atur `ANTHROPIC_API_KEY` sebelum menjalankannya, karena bare mode tidak menggunakan login langganan Anda:47Contoh ini menjalankan tugas ringkasan sekali pakai dalam bare mode dan pra-menyetujui tool Read sehingga panggilan selesai tanpa permintaan izin. Atur `ANTHROPIC_API_KEY` sebelum menjalankannya, karena bare mode tidak menggunakan login langganan Anda:

48 48 

49```bash theme={null}49```bash theme={null}

50claude --bare -p "Summarize README.md" --allowedTools "Read"50claude --bare -p "Summarize README.md" --allowedTools "Read"


52 52 

53Dalam bare mode, Claude Code tidak pernah membaca kredensial OAuth atau keychain sistem. Untuk Anthropic API, atur `ANTHROPIC_API_KEY` di lingkungan, dengan kunci yang dibuat di [Claude Console](https://platform.claude.com), atau berikan `apiKeyHelper` di JSON `--settings`. Amazon Bedrock, Google Cloud's Agent Platform, dan Microsoft Foundry terus membaca kredensial penyedia mereka sendiri seperti biasanya.53Dalam bare mode, Claude Code tidak pernah membaca kredensial OAuth atau keychain sistem. Untuk Anthropic API, atur `ANTHROPIC_API_KEY` di lingkungan, dengan kunci yang dibuat di [Claude Console](https://platform.claude.com), atau berikan `apiKeyHelper` di JSON `--settings`. Amazon Bedrock, Google Cloud's Agent Platform, dan Microsoft Foundry terus membaca kredensial penyedia mereka sendiri seperti biasanya.

54 54 

55Dalam bare mode Claude memiliki akses ke alat Bash, pembacaan file, dan pengeditan file. Berikan konteks apa pun yang Anda butuhkan dengan bendera:55Dalam bare mode Claude memiliki akses ke tool Bash, pembacaan file, dan pengeditan file. Berikan konteks apa pun yang Anda butuhkan dengan flag:

56 56 

57| Untuk memuat | Gunakan |57| Untuk memuat | Gunakan |

58| - | - |58| - | - |

59| Penambahan prompt sistem | `--append-system-prompt`, `--append-system-prompt-file` |59| Penambahan system prompt | `--append-system-prompt`, `--append-system-prompt-file` |

60| Pengaturan | `--settings <file-or-json>` |60| Pengaturan | `--settings <file-or-json>` |

61| Server MCP | `--mcp-config <file-or-json>` |61| Server MCP | `--mcp-config <file-or-json>` |

62| [Agent kustom](/docs/id/sub-agents#choose-the-subagent-scope) | `--agents <file-or-json>` |62| [Agent kustom](/docs/id/sub-agents#choose-the-subagent-scope) | `--agents <file-or-json>` |


84 84 

85Eksekusi menunggu pekerjaan latar belakang seperti perintah latar belakang, subagent dan workflow, watch Monitor, serta wakeup `/loop` yang tertunda:85Eksekusi menunggu pekerjaan latar belakang seperti perintah latar belakang, subagent dan workflow, watch Monitor, serta wakeup `/loop` yang tertunda:

86 86 

87* **[Perintah latar belakang](/docs/id/tools-reference#background-commands)**: untuk perintah yang dimulai oleh percakapan utama, misalnya server dev atau build watch, eksekusi menunggu hingga perintah tersebut keluar atau mencapai [batas waktunya](/docs/id/tools-reference#time-limit-for-background-commands). Claude kemudian mengambil satu giliran lagi dengan hasilnya, dan hasil giliran tersebut menjadi hasil terakhir eksekusi, yaitu hasil yang dicetak oleh output `text` dan `json`. Selama perintah berjalan, batas 10 menit tidak mengakhiri penantian.87* **[Perintah latar belakang](/docs/id/tools-reference#background-commands)**: untuk perintah yang dimulai oleh percakapan utama, misalnya server dev atau build watch, eksekusi menunggu hingga perintah tersebut keluar atau mencapai [batas waktunya](/docs/id/tools-reference#time-limit-for-background-commands). Claude kemudian mengambil satu giliran lagi dengan hasilnya. Selama perintah berjalan, batas 10 menit tidak mengakhiri penantian.

88* **[Subagent](/docs/id/sub-agents) dan workflow latar belakang**: eksekusi tetap terbuka hingga pekerjaan tersebut selesai, karena hasilnya adalah bagian dari output akhir.88* **[Subagent](/docs/id/sub-agents) dan workflow latar belakang**: eksekusi tetap terbuka hingga pekerjaan tersebut selesai, karena hasilnya adalah bagian dari output akhir.

89* **Watch [Monitor](/docs/id/tools-reference#monitor-tool)**: eksekusi menunggu hingga watch mencapai timeout atau batas 10 menit mengakhiri penantian, mana pun yang terjadi lebih dulu. Selama menunggu, Claude terus merespons apa yang dilaporkan watch. Secara default, watch mencapai timeout lima menit setelah Claude memulainya.89* **Watch [Monitor](/docs/id/tools-reference#monitor-tool)**: eksekusi menunggu hingga watch mencapai timeout atau batas 10 menit mengakhiri penantian, mana pun yang terjadi lebih dulu. Selama menunggu, Claude terus merespons apa yang dilaporkan watch. Secara default, watch mencapai timeout lima menit setelah Claude memulainya.

90* **Wakeup yang tertunda**: dalam eksekusi yang prompt-nya Anda berikan sebagai teks alih-alih dengan `--input-format stream-json`, ketika Claude telah menjadwalkan [wakeup `/loop` dengan tempo sendiri](/docs/id/scheduled-tasks#let-claude-choose-the-interval), eksekusi menunggu setiap wakeup terpicu dan menjalankan iterasinya hingga [loop berakhir](/docs/id/scheduled-tasks#stop-a-loop), bahkan melewati batas 10 menit.90* **Wakeup yang tertunda**: dalam eksekusi yang prompt-nya Anda berikan sebagai teks alih-alih dengan `--input-format stream-json`, ketika Claude telah menjadwalkan [wakeup `/loop` dengan tempo sendiri](/docs/id/scheduled-tasks#let-claude-choose-the-interval), eksekusi menunggu setiap wakeup terpicu dan menjalankan iterasinya hingga [loop berakhir](/docs/id/scheduled-tasks#stop-a-loop), bahkan melewati batas 10 menit.

91 91 

92Jika eksekusi mencapai batas [`--max-budget-usd`](/docs/id/cli-reference#cli-flags), Claude Code menghentikan pekerjaan latar belakang yang tersisa alih-alih menunggu.92Jika eksekusi mencapai batas [`--max-budget-usd`](/docs/id/cli-reference#cli-flags), Claude Code menghentikan pekerjaan latar belakang yang tersisa alih-alih menunggu.

93 93 

94Ketika pekerjaan latar belakang memulai giliran lain, eksekusi mencetak hasil setiap giliran dengan output `text` default dan hasil giliran terakhir dengan output `json`. Sebelum v2.1.295, eksekusi juga hanya mencetak hasil giliran terakhir dengan output `text`.

95 

94<h3 id="stop-a-run-with-sigterm">96<h3 id="stop-a-run-with-sigterm">

95 Hentikan jalankan dengan SIGTERM97 Hentikan jalankan dengan SIGTERM

96</h3>98</h3>

97 99 

98Jika Anda menghentikan jalankan `claude -p` dengan SIGTERM, misalnya dengan `kill` atau dari pengawas proses, Claude Code keluar dengan kode 143. Claude Code meninggalkan giliran yang sedang berlangsung tidak selesai dan tidak mencatat hasil untuknya. Untuk mengakhiri giliran sebagai gantinya, kirim SIGINT, atau panggil `interrupt()` Agent SDK, sebelum Anda menghentikan proses.100Jika Anda menghentikan jalankan `claude -p` dengan SIGTERM, misalnya dengan `kill` atau dari pengawas proses, Claude Code keluar dengan kode 143. Claude Code meninggalkan giliran yang sedang berlangsung tidak selesai dan tidak mencatat hasil untuknya. Untuk mengakhiri giliran sebagai gantinya, kirim SIGINT, atau panggil `interrupt()` Agent SDK, sebelum Anda menghentikan proses.

99 101 

100Pada SIGTERM, Claude Code menghentikan pohon proses dari perintah Bash apa pun yang masih berjalan. Claude Code kemudian menjalankan [`SessionEnd` hooks](/docs/id/hooks#sessionend) dan keluar. Saat keluar, Claude Code tidak memulai panggilan alat baru, tidak mengirim permintaan model baru, dan tidak menjalankan hook selain `SessionEnd`. Jika jalankan berada di tengah perintah atau menunggu jawaban untuk prompt izin ketika sinyal tiba, Claude Code menangani langkah itu sebagai berikut:102Pada SIGTERM, Claude Code menghentikan pohon proses dari perintah Bash apa pun yang masih berjalan. Claude Code kemudian menjalankan [`SessionEnd` hooks](/docs/id/hooks#sessionend) dan keluar. Saat keluar, Claude Code tidak memulai panggilan tool baru, tidak mengirim permintaan model baru, dan tidak menjalankan hook selain `SessionEnd`. Jika jalankan berada di tengah perintah atau menunggu permintaan izin ketika sinyal tiba, Claude Code menangani langkah itu sebagai berikut:

101 103 

102* **Menjalankan perintah**: Claude Code mencatat perintah sebagai terbunuh dalam sesi.104* **Menjalankan perintah**: Claude Code mencatat perintah sebagai terbunuh dalam sesi.

103* **Menunggu jawaban untuk prompt izin**: jika Anda mengirim SIGTERM ke proses, Claude Code meninggalkan prompt tanpa jawaban. Jika program Anda menutup sesi melalui Agent SDK, SDK mengakhiri input Claude Code sebelum mengirim sinyal apa pun, dan Claude Code membatalkan prompt segera setelah input berakhir.105* **Menunggu jawaban untuk permintaan izin**: jika Anda mengirim SIGTERM ke proses, Claude Code meninggalkan permintaan tersebut tanpa jawaban. Jika program Anda menutup sesi melalui Agent SDK, SDK mengakhiri input Claude Code sebelum mengirim sinyal apa pun, dan Claude Code membatalkan permintaan tersebut segera setelah input berakhir.

104 106 

105Ketika Anda [melanjutkan sesi](#continue-conversations), Claude Code meninggalkan giliran yang terputus seperti apa adanya, dan prompt berikutnya Anda mendorong percakapan. Untuk membuat Claude Code melanjutkan giliran yang terputus saat resume, atur [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN=1`](/docs/id/env-vars).107Ketika Anda [melanjutkan sesi](#continue-conversations), Claude Code meninggalkan giliran yang terputus seperti apa adanya, dan prompt berikutnya Anda mendorong percakapan. Untuk membuat Claude Code melanjutkan giliran yang terputus saat resume, atur [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN=1`](/docs/id/env-vars).

106 108 


262| `type` | `"system"` | tipe pesan |264| `type` | `"system"` | tipe pesan |

263| `subtype` | `"api_retry"` | mengidentifikasi ini sebagai acara percobaan ulang |265| `subtype` | `"api_retry"` | mengidentifikasi ini sebagai acara percobaan ulang |

264| `attempt` | integer | nomor percobaan saat ini, dimulai dari 1 |266| `attempt` | integer | nomor percobaan saat ini, dimulai dari 1 |

265| `max_retries` | integer | total percobaan ulang yang diizinkan untuk penyebab kegagalan ini, yang dapat lebih sedikit dari anggaran seluruh sesi |267| `max_retries` | integer | total percobaan ulang yang diizinkan untuk penyebab kegagalan ini |

266| `retry_delay_ms` | integer | milidetik hingga percobaan berikutnya |268| `retry_delay_ms` | integer | milidetik hingga percobaan berikutnya |

267| `error_status` | integer atau null | kode status HTTP dari percobaan yang gagal, atau `null` ketika percobaan tidak mendapat respons HTTP dari API |269| `error_status` | integer atau null | kode status HTTP dari percobaan yang gagal, atau `null` ketika percobaan tidak mendapat respons HTTP dari API |

268| `no_response` | object, opsional | hadir hanya ketika percobaan yang gagal mendapat [tidak ada header respons tepat waktu](/docs/id/errors#no-response-from-api). `waited_ms` adalah berapa lama percobaan itu menunggu dan `retry_wait_ms` adalah berapa lama percobaan ulang akan menunggu. Dalam acara ini, `max_retries` mencerminkan satu percobaan ulang yang biasanya didapat penyebab ini, bukan anggaran seluruh sesi. Memerlukan Claude Code v2.1.261 atau lebih baru |270| `no_response` | object, opsional | hadir hanya ketika percobaan yang gagal mendapat [tidak ada header respons tepat waktu](/docs/id/errors#no-response-from-api). `waited_ms` adalah berapa lama percobaan itu menunggu dan `retry_wait_ms` adalah berapa lama percobaan ulang akan menunggu. Memerlukan Claude Code v2.1.261 atau lebih baru |

269| `error` | string | kategori kesalahan: `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `rate_limit`, `overloaded`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error`, atau `unknown` |271| `error` | string | kategori kesalahan: `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `rate_limit`, `overloaded`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error`, atau `unknown` |

270| `uuid` | string | pengidentifikasi acara unik |272| `uuid` | string | pengidentifikasi acara unik |

271| `session_id` | string | sesi yang dimiliki acara |273| `session_id` | string | sesi yang dimiliki acara |

hooks.md +124 −35

Details

476| `async` | tidak | Jika `true`, dijalankan di latar belakang tanpa memblokir. Lihat [Run hooks in the background](#run-hooks-in-the-background) |476| `async` | tidak | Jika `true`, dijalankan di latar belakang tanpa memblokir. Lihat [Run hooks in the background](#run-hooks-in-the-background) |

477| `asyncRewake` | tidak | Jika `true`, dijalankan di latar belakang dan membangunkan Claude pada kode keluar 2. Hook stderr, atau stdout jika stderr kosong, ditampilkan ke Claude sebagai [system reminder](/docs/id/glossary#system-reminder) sehingga dapat bereaksi terhadap kegagalan latar belakang yang berjalan lama |477| `asyncRewake` | tidak | Jika `true`, dijalankan di latar belakang dan membangunkan Claude pada kode keluar 2. Hook stderr, atau stdout jika stderr kosong, ditampilkan ke Claude sebagai [system reminder](/docs/id/glossary#system-reminder) sehingga dapat bereaksi terhadap kegagalan latar belakang yang berjalan lama |

478| `shell` | tidak | Shell untuk digunakan untuk hook ini. Menerima `"bash"` atau `"powershell"`. Default ke `"bash"`, atau ke `"powershell"` di Windows ketika Git Bash tidak diinstal. Menetapkan `"powershell"` menjalankan perintah melalui PowerShell di Windows. Tidak memerlukan `CLAUDE_CODE_USE_POWERSHELL_TOOL` karena hooks spawn PowerShell secara langsung. Diabaikan ketika `args` diatur |478| `shell` | tidak | Shell untuk digunakan untuk hook ini. Menerima `"bash"` atau `"powershell"`. Default ke `"bash"`, atau ke `"powershell"` di Windows ketika Git Bash tidak diinstal. Menetapkan `"powershell"` menjalankan perintah melalui PowerShell di Windows. Tidak memerlukan `CLAUDE_CODE_USE_POWERSHELL_TOOL` karena hooks spawn PowerShell secara langsung. Diabaikan ketika `args` diatur |

479| `onFailure` | tidak | Apa yang terjadi pada tindakan ketika hook gagal: `"continue"`, yang merupakan default, atau `"block"`. Lihat [Blokir tindakan ketika hook gagal](#block-the-action-when-a-hook-fails). Memerlukan Claude Code v2.1.295 atau lebih baru |

479 480 

480<a id="exec-form-and-shell-form" />481<a id="exec-form-and-shell-form" />

481 482 


533| `url` | ya | URL untuk mengirimkan permintaan POST ke |534| `url` | ya | URL untuk mengirimkan permintaan POST ke |

534| `headers` | tidak | Header HTTP tambahan sebagai pasangan kunci-nilai. Nilai mendukung interpolasi variabel lingkungan menggunakan sintaks `$VAR_NAME` atau `${VAR_NAME}`. Hanya variabel yang tercantum dalam `allowedEnvVars` yang diselesaikan |535| `headers` | tidak | Header HTTP tambahan sebagai pasangan kunci-nilai. Nilai mendukung interpolasi variabel lingkungan menggunakan sintaks `$VAR_NAME` atau `${VAR_NAME}`. Hanya variabel yang tercantum dalam `allowedEnvVars` yang diselesaikan |

535| `allowedEnvVars` | tidak | Daftar nama variabel lingkungan yang dapat diinterpolasi ke nilai header. Referensi ke variabel yang tidak tercantum diganti dengan string kosong. Diperlukan untuk interpolasi variabel env apa pun untuk bekerja |536| `allowedEnvVars` | tidak | Daftar nama variabel lingkungan yang dapat diinterpolasi ke nilai header. Referensi ke variabel yang tidak tercantum diganti dengan string kosong. Diperlukan untuk interpolasi variabel env apa pun untuk bekerja |

537| `onFailure` | tidak | Apa yang terjadi pada tindakan ketika hook gagal: `"continue"`, yang merupakan default, atau `"block"`. Lihat [Blokir tindakan ketika hook gagal](#block-the-action-when-a-hook-fails). Memerlukan Claude Code v2.1.295 atau lebih baru |

536 538 

537Claude Code mengirimkan [JSON input](#hook-input-and-output) hook sebagai badan permintaan POST dengan `Content-Type: application/json`. Badan respons menggunakan [format JSON output](#json-output) yang sama seperti command hooks.539Claude Code mengirimkan [JSON input](#hook-input-and-output) hook sebagai badan permintaan POST dengan `Content-Type: application/json`. Badan respons menggunakan [format JSON output](#json-output) yang sama seperti command hooks.

538 540 


821 Output exit code823 Output exit code

822</h3>824</h3>

823 825 

824Exit code dari perintah hook Anda memberi tahu Claude Code apakah tindakan harus dilanjutkan, diblokir, atau diabaikan. Exit code tidak bekerja sendiri. Claude Code membaca [field output JSON](#json-output) dari stdout pada setiap exit code, bukan hanya 0, dan untuk event yang menggunakan model keputusan standar, objek yang berhasil di-parse dan lolos validasi skema berlaku bersamaan dengan kode tersebut. Pemblokiran oleh exit 2 adalah satu-satunya hasil yang tidak dapat ditimpa oleh JSON.826Exit code hook Anda memberi tahu Claude Code apakah akan melanjutkan tindakan yang memicu hook, seperti panggilan tool atau prompt. Eksekusi yang selesai memiliki salah satu dari tiga hasil:

825 827 

826Dua tabel memuat pengecualian per event: [Perilaku exit code 2 per event](#exit-code-2-behavior-per-event) menjelaskan apa yang dilakukan exit code untuk setiap event, dan [Kontrol keputusan](#decision-control) menjelaskan field keputusan mana yang dihormati setiap event. Field universal seperti `systemMessage` berfungsi di sebagian besar event dan tercantum dalam tabel [output JSON](#json-output).828* **Berhasil**: hook Anda keluar dengan 0. Claude Code menerapkan field [output JSON](#json-output) apa pun yang dicetak hook Anda, dan tindakan dilanjutkan kecuali field tersebut memblokir atau menolaknya.

829* **Error blocking**: hook Anda keluar dengan 2. Pada [event yang dapat memblokir](#exit-code-2-behavior-per-event), Claude Code menghentikan tindakan.

830* **Error non-blocking**: hook Anda keluar dengan kode lain, atau gagal dengan cara lain, seperti tidak dapat dimulai atau mencetak JSON yang tidak valid. Tindakan dilanjutkan, dan pada event seperti `PreToolUse` Anda melihat pemberitahuan `<hook name> hook error` di transkrip. Jika Anda ingin hook yang gagal memblokir tindakan, atur [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

831 

832Apa yang dicetak hook Anda ke stdout dapat mengubah hasilnya. Misalnya, jika hook `PreToolUse` keluar dengan 1 tetapi mencetak JSON yang lolos validasi, eksekusi dianggap berhasil dan field JSON menentukan apa yang terjadi. Untuk menemukan hasil hook Anda pada event seperti `PreToolUse`, cocokkan apa yang dicetaknya ke stdout di kolom pertama dengan exit code-nya di bagian atas:

833 

834| Stdout | Exit 0 | Exit 2 | Exit code lainnya |

835| :- | :- | :- | :- |

836| Objek JSON yang lolos [validasi skema](#json-output) | Berhasil. Field diterapkan | Error blocking. Claude Code tetap membaca field, tetapi field tersebut tidak dapat menimpa pemblokiran | Berhasil. Claude Code mengabaikan exit code, dan hanya field yang menentukan. Dengan [`onFailure: "block"`](#block-the-action-when-a-hook-fails), ini dihitung sebagai kegagalan |

837| JSON yang [tidak dapat di-parse](#exit-code-0) atau gagal validasi skema | Error non-blocking. Pemberitahuan memuat pesan parse atau validasi | Error blocking. Stderr Anda menjadi alasannya | Error non-blocking. Pemberitahuan memuat pesan parse atau validasi |

838| [Teks biasa](#exit-code-0), atau tidak ada apa pun | Berhasil | Error blocking. Stderr Anda menjadi alasannya | Error non-blocking. Pemberitahuan memuat baris pertama stderr Anda |

839 

840Beberapa event memiliki aturannya sendiri:

841 

842* **`WorktreeCreate`**: exit code bukan nol apa pun membuat pembuatan worktree gagal, apa pun isi JSON Anda.

843* **`WorktreeRemove`**: exit code bukan nol apa pun membuat penghapusan worktree gagal jika direktori masih ada setelahnya.

844* **`Stop`, `SubagentStop`, `TaskCompleted`, dan hook `UserPromptSubmit` dari plugin**: ketika hook Anda keluar dengan 2 tanpa apa pun di stdout dan stderr-nya menyatakan bahwa suatu file tidak ada, seperti `No such file or directory`, Claude Code memperlakukan eksekusi tersebut sebagai error non-blocking.

845* **`Elicitation` dan `ElicitationResult`**: Claude Code menerapkan `hookSpecificOutput` Anda ketika hook Anda keluar dengan 0, dan mengabaikannya pada exit code lainnya.

846* **Event yang membuang output hook, seperti `StopFailure`**: Claude Code mengabaikan JSON Anda pada setiap exit code, kecuali field efek samping seperti `terminalSequence`, yang tetap dijalankan.

847 

848Untuk memeriksa apa yang dilakukan exit code 2 pada event Anda, lihat [Perilaku exit code 2 per event](#exit-code-2-behavior-per-event). Untuk memeriksa field keputusan mana yang dihormatinya, lihat [Kontrol keputusan](#decision-control).

827 849 

828<h4 id="exit-code-0">850<h4 id="exit-code-0">

829 Exit code 0851 Exit code 0


835 857 

836Apakah Claude Code membaca stdout Anda sebagai [output JSON](#json-output) atau sebagai teks biasa bergantung pada bagaimana stdout diawali dan diakhiri, dengan mengabaikan whitespace di sekitarnya:858Apakah Claude Code membaca stdout Anda sebagai [output JSON](#json-output) atau sebagai teks biasa bergantung pada bagaimana stdout diawali dan diakhiri, dengan mengabaikan whitespace di sekitarnya:

837 859 

838* **Diawali dengan `{` dan diakhiri dengan `}`**: Claude Code mem-parse-nya sebagai JSON. Ketika output terdiri dari dua baris atau lebih yang masing-masing dapat di-parse sebagai JSON secara terpisah, dan tidak ada baris yang merupakan objek [output JSON](#json-output) yang mengatur suatu field, Claude Code memperlakukan seluruh output sebagai teks biasa. Ketika salah satu baris tersebut mengatur suatu field, seluruh output dianggap gagal di-parse, seperti dijelaskan di bawah.860* **Diawali dengan `{` dan diakhiri dengan `}`**: Claude Code mem-parse-nya sebagai JSON. Ketika output terdiri dari dua baris atau lebih yang masing-masing dapat di-parse sebagai JSON secara terpisah, dan tidak ada baris yang merupakan objek [output JSON](#json-output) yang mengatur suatu field, Claude Code memperlakukan seluruh output sebagai teks biasa. Ketika salah satu baris tersebut mengatur suatu field, seluruh output dianggap gagal di-parse.

839* **Diawali dengan `{` tetapi tidak diakhiri dengan `}`**: Claude Code memperlakukannya sebagai teks biasa.861* **Diawali dengan `{` tetapi tidak diakhiri dengan `}`**: Claude Code memperlakukannya sebagai teks biasa.

840* **Diawali dengan hal lain**: Claude Code memperlakukannya sebagai teks biasa, termasuk array JSON atau string JSON yang diberi tanda kutip.862* **Diawali dengan hal lain**: Claude Code memperlakukannya sebagai teks biasa, termasuk array JSON atau string JSON yang diberi tanda kutip.

841 863 

842Untuk event yang menggunakan model keputusan standar, exit 0 dengan objek yang berhasil di-parse tetapi gagal validasi skema adalah error non-blocking: tindakan dilanjutkan, dan transkrip menampilkan pemberitahuan `<hook name> hook error` dengan pesan validasi. Hal yang sama terjadi pada exit code apa pun selain 2, sementara [exit 2 tetap memblokir](#exit-code-2).864Ketika Claude Code mencoba mem-parse stdout Anda sebagai JSON dan gagal, atau objek yang di-parse gagal [validasi skema](#json-output), eksekusi tersebut adalah [error non-blocking](#exit-code-output). Pemberitahuan `<hook name> hook error` memuat pesan parse atau validasi. Pada event yang menambahkan stdout teks biasa sebagai konteks, Claude Code tidak menambahkan stdout yang gagal di-parse.

843 

844Untuk event yang menggunakan model keputusan standar, ketika Claude Code mencoba mem-parse stdout Anda sebagai JSON dan gagal, Claude Code melaporkan error non-blocking pada setiap exit code selain 2. Transkrip menampilkan pemberitahuan `<hook name> hook error` dengan pesan parse. Pada event yang menambahkan stdout teks biasa sebagai konteks, Claude Code tidak menambahkan teks tersebut. Sebelum v2.1.248, Claude Code memperlakukan stdout tersebut sebagai teks biasa.

845 865 

846Stderr dari hook yang keluar dengan 0 hanya masuk ke log debug, tidak pernah ke transkrip, dan Claude tidak pernah melihatnya. Untuk membacanya sendiri, aktifkan [logging debug](#debug-hooks). Untuk menyampaikan peringatan kepada Claude dari hook `PostToolUse` atau `PostToolUseFailure`, gunakan exit 2 sehingga [Claude melihat stderr](#exit-code-2-behavior-per-event) meskipun tool sudah berjalan.866Claude tidak pernah melihat stderr dari hook yang keluar dengan 0. Untuk membacanya sendiri pada event seperti `PreToolUse`, aktifkan [logging debug](#debug-hooks). Untuk menyampaikan peringatan kepada Claude dari hook `PostToolUse` atau `PostToolUseFailure`, gunakan exit 2 sehingga [Claude melihat stderr](#exit-code-2-behavior-per-event) meskipun tool sudah berjalan.

847 867 

848<h4 id="exit-code-2">868<h4 id="exit-code-2">

849 Exit code 2869 Exit code 2

850</h4>870</h4>

851 871 

852Exit 2 berarti error blocking. Pada [event yang dapat memblokir](#exit-code-2-behavior-per-event), exit 2 memblokir terlepas dari apakah Anda mencetak JSON atau tidak: bahkan `permissionDecision` JSON bernilai `"allow"` tidak dapat menimpanya. Claude Code tetap membaca [output JSON](#json-output) yang valid di stdout. Pada `Elicitation` dan `ElicitationResult`, `hookSpecificOutput` dari hook yang keluar dengan exit 2 diabaikan.872Keluar dengan kode 2 untuk memblokir tindakan. Pada [event yang dapat memblokir](#exit-code-2-behavior-per-event), Claude Code menghentikan tindakan: misalnya, hook `PreToolUse` memblokir panggilan tool, dan hook `UserPromptSubmit` menolak prompt.

853 873 

854Pesan pemblokiran adalah alasan dari keputusan pemblokiran dalam JSON Anda jika ada, dan teks stderr Anda jika tidak. Apa yang dilakukan pemblokiran bervariasi menurut event: `PreToolUse` memblokir panggilan tool, `UserPromptSubmit` menolak prompt, dan seterusnya. [Perilaku exit code 2 per event](#exit-code-2-behavior-per-event) mencantumkan efek untuk setiap event, dan bagian setiap event menjelaskan ke mana pesan tersebut dikirim.874Pesan yang menyertai pemblokiran adalah stderr hook Anda. Jika hook Anda juga mencetak JSON yang membuat keputusan pemblokiran, Claude Code menggunakan alasan dari keputusan tersebut sebagai gantinya.

855 875 

856Hook yang keluar dengan 2 sambil mencetak JSON yang gagal validasi skema [output JSON](#json-output) tetap memblokir: Claude Code menggunakan stderr sebagai alasan pemblokiran dan mencatat kegagalan validasi di log debug. Sebelum v2.1.214, Claude Code memperlakukan kombinasi tersebut sebagai error non-blocking dan tindakan dilanjutkan.876Exit 2 memblokir bahkan ketika hook Anda mencetak JSON:

877 

878* **JSON yang lolos validasi skema**: Claude Code tetap membaca field [output JSON](#json-output), tetapi field tersebut tidak dapat menimpa pemblokiran. Bahkan `permissionDecision` bernilai `"allow"` tidak membuat tindakan diloloskan. Pada `Elicitation` dan `ElicitationResult`, `hookSpecificOutput` dari hook yang keluar dengan exit 2 diabaikan.

879* **JSON yang gagal validasi skema**: hook tetap memblokir. Claude Code menggunakan stderr Anda sebagai alasan pemblokiran dan mencatat kegagalan validasi di log debug.

857 880 

858Skrip ini memblokir perintah `rm` dengan keluar menggunakan 2 dan menyerahkan setiap perintah lain ke alur izin normal:881Skrip ini memblokir perintah `rm` dengan keluar menggunakan 2 dan menyerahkan setiap perintah lain ke alur izin normal:

859 882 


871exit 0 # No decision: the normal permission flow applies894exit 0 # No decision: the normal permission flow applies

872```895```

873 896 

897Dengan skrip ini terdaftar sebagai hook `PreToolUse` pada `Bash`, perintah yang diawali dengan `rm` diblokir, dan Claude menerima stderr hook sebagai error tool, dengan awalan nama event, nama tool, dan perintah hook:

898 

899```text theme={null}

900PreToolUse:Bash hook error: [${CLAUDE_PROJECT_DIR}/.claude/hooks/no-rm.sh]: Blocked: rm commands are not allowed

901```

902 

874<h4 id="other-exit-codes">903<h4 id="other-exit-codes">

875 Exit code lainnya904 Exit code lainnya

876</h4>905</h4>

877 906 

878Exit code lainnya tidak memblokir dengan sendirinya untuk sebagian besar event hook. Apa yang terjadi bergantung pada stdout Anda:907Ketika hook Anda keluar dengan kode selain 0 atau 2 dan mencetak teks biasa atau tidak mencetak apa pun ke stdout, eksekusi tersebut adalah [error non-blocking](#exit-code-output). Anda melihat pemberitahuan `<hook name> hook error` di transkrip dengan `Failed with non-blocking status code:` dan baris pertama stderr hook Anda. Misalnya, ketika hook `PreToolUse` pada `Bash` mencetak `something broke` ke stderr dan keluar dengan 1, pemberitahuan `PreToolUse:Bash hook error` memuat baris ini:

879 908 

880* Dengan objek yang berhasil di-parse dan lolos validasi skema, untuk event yang menggunakan model keputusan standar, Claude Code mengabaikan exit code dan hanya JSON yang menentukan hasilnya:909```text theme={null}

881 * Setiap field yang didukung event dihormati, termasuk `permissionDecision`, `additionalContext`, `updatedInput`, dan `systemMessage`, dan hook tidak dilaporkan sebagai error.910Failed with non-blocking status code: something broke

882 * [Kontrol keputusan](#decision-control) mencantumkan field keputusan per event; field universal seperti `systemMessage` mengikuti tabel [output JSON](#json-output).911```

883* Dengan objek yang berhasil di-parse tetapi gagal validasi skema, untuk event yang menggunakan model keputusan standar, hasilnya adalah error non-blocking yang sama seperti [pada exit 0](#exit-code-0): tindakan dilanjutkan, dan pemberitahuan `<hook name> hook error` memuat pesan validasi.

884* Dengan stdout yang [dicoba di-parse sebagai JSON](#exit-code-0) oleh Claude Code tetapi gagal, Claude Code melaporkan error non-blocking yang sama seperti pada exit 0 untuk event yang menggunakan model keputusan standar. Tindakan dilanjutkan, dan pemberitahuan memuat pesan parse.

885* Dengan stdout yang [diperlakukan sebagai teks biasa](#exit-code-0) oleh Claude Code, atau dengan stdout kosong, hasilnya adalah error non-blocking untuk sebagian besar event hook: tindakan dilanjutkan, dan transkrip menampilkan pemberitahuan `<hook name> hook error` diikuti baris pertama stderr, dengan awalan `Failed with non-blocking status code:`. Untuk menangkap stderr lengkap, aktifkan [logging debug](#debug-hooks).

886 912 

887Event di luar model keputusan standar memiliki barisnya sendiri dalam [tabel per event](#exit-code-2-behavior-per-event): `WorktreeCreate` menggagalkan pembuatan pada exit bukan nol apa pun, apa pun isi JSON Anda, dan event yang membuang output hook sepenuhnya, seperti `StopFailure`, mengabaikan JSON Anda pada setiap exit code, kecuali field efek samping seperti `terminalSequence`, yang tetap dijalankan.913Untuk menangkap stderr lengkap alih-alih hanya baris pertamanya, aktifkan [logging debug](#debug-hooks).

888 914 

889Hook yang tidak dapat dimulai masuk ke kategori non-blocking yang sama. Ketika path skrip tidak ada atau tidak dapat dieksekusi, shell keluar dengan kode seperti 127 dan Anda melihat pemberitahuan yang sama dengan pesan interpreter, misalnya `Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory`. Untuk sebagian besar event hook, tindakan dilanjutkan. Saat Anda menyiapkan hook kebijakan, perhatikan pemberitahuan ini pada eksekusi pertamanya: path yang salah ketik di `settings.json` membuat gerbang tersebut nonaktif tanpa pemberitahuan.915Hook yang tidak dapat dimulai juga merupakan error non-blocking. Dalam bentuk shell, ketika path skrip tidak ada atau tidak dapat dieksekusi, shell keluar dengan kode seperti 127 dan pemberitahuan memuat pesan interpreter, misalnya `Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory`. Saat Anda menyiapkan hook kebijakan, perhatikan pemberitahuan ini pada eksekusi pertamanya, karena path yang salah ketik di `settings.json` berarti hook tidak pernah berjalan. Untuk memblokir tindakan sebagai gantinya, atur [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

890 916 

891<Warning>917<Warning>

892 Untuk sebagian besar event hook, exit code 2 adalah satu-satunya exit code yang memblokir hanya melalui kode tersebut. Tanpa JSON yang valid di stdout, Claude Code memperlakukan exit code 1 sebagai error non-blocking dan melanjutkan tindakan, meskipun 1 adalah kode kegagalan Unix yang konvensional. Jika hook Anda dimaksudkan untuk menegakkan kebijakan, gunakan `exit 2`. Event worktree berbeda: exit code bukan nol apa pun dari `WorktreeCreate` membatalkan pembuatan worktree, dan exit code bukan nol apa pun dari `WorktreeRemove` membuat penghapusan worktree gagal jika direktori masih ada setelahnya.918 Tanpa JSON yang valid di stdout, Claude Code memperlakukan exit code 1 sebagai error non-blocking, meskipun 1 adalah kode kegagalan Unix yang konvensional. Jika hook Anda dimaksudkan untuk menegakkan kebijakan, gunakan `exit 2`.

893</Warning>919</Warning>

894 920 

895<h4 id="timeouts">921<h4 id="timeouts">


900 926 

901Pada [`PreModelSwitch`](#premodelswitch), hook yang dibatalkan karena timeout memblokir pergantian model. Pada `PreToolUse`, kedua keluarga hook berbeda:927Pada [`PreModelSwitch`](#premodelswitch), hook yang dibatalkan karena timeout memblokir pergantian model. Pada `PreToolUse`, kedua keluarga hook berbeda:

902 928 

903* Hook `command`, `http`, atau `mcp_tool` yang mengalami timeout tidak memblokir panggilan tool. Panggilan berlanjut melalui [alur izin](/docs/id/permissions) normal, jadi jangan mengandalkan hook yang macet untuk berfungsi sebagai gerbang.929* Hook `command`, `http`, atau `mcp_tool` yang mengalami timeout tidak memblokir panggilan tool. Panggilan berlanjut melalui [alur izin](/docs/id/permissions) normal, jadi jangan mengandalkan hook yang macet untuk berfungsi sebagai gerbang. Untuk memblokir panggilan ketika hook `command` atau `http` mengalami timeout, atur [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

904* [Callback hook Agent SDK](/docs/id/agent-sdk/hooks) yang melebihi timeout-nya [memblokir panggilan tool](#pretooluse).930* [Callback hook Agent SDK](/docs/id/agent-sdk/hooks) yang melebihi timeout-nya [memblokir panggilan tool](#pretooluse).

905 931 

932<h4 id="block-the-action-when-a-hook-fails">

933 Memblokir tindakan ketika hook gagal

934</h4>

935 

936Pada sebagian besar event, ketika hook gagal atau mengalami timeout, Claude Code tetap menjalankan tindakan, sehingga hook kebijakan dengan path yang salah atau skrip yang crash meloloskan semuanya. Untuk memblokir tindakan sebagai gantinya, atur `"onFailure": "block"` pada hook `command` atau `http`. Nilai default-nya adalah `"continue"`. Memerlukan Claude Code v2.1.295 atau lebih baru.

937 

938Hook `PreToolUse` di `.claude/settings.json` ini menjalankan skrip proyek sebelum setiap perintah Bash, dan memblokir perintah jika skrip gagal:

939 

940```json theme={null}

941{

942 "hooks": {

943 "PreToolUse": [

944 {

945 "matcher": "Bash",

946 "hooks": [

947 {

948 "type": "command",

949 "command": "node",

950 "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/check-command.js"],

951 "onFailure": "block"

952 }

953 ]

954 }

955 ]

956 }

957}

958```

959 

960Untuk mengujinya, biarkan `check-command.js` tidak ada dan minta Claude menjalankan perintah Bash seperti `ls`. Claude Code memblokir panggilan, dan error-nya menyertakan `failed; blocking because onFailure is "block"` diikuti output error node itu sendiri, yang dipangkas di sini menjadi satu baris:

961 

962```text theme={null}

963PreToolUse:Bash hook error: [node ${CLAUDE_PROJECT_DIR}/.claude/hooks/check-command.js]: failed; blocking because onFailure is "block"

964Error: Cannot find module '/path/to/project/.claude/hooks/check-command.js'

965```

966 

967Setelah timeout, pesan menyatakan `timed out` alih-alih `failed`. Tanpa `onFailure` diatur, skrip yang sama yang tidak ada adalah error non-blocking dan `ls` berjalan.

968 

969Setiap hal berikut dihitung sebagai kegagalan:

970 

971* **Tidak dapat dimulai**: hook perintah gagal dimulai, misalnya karena skrip atau executable tidak ada

972* **Exit code selain 0 atau 2**: berlaku untuk hook perintah meskipun hook tersebut mencetak JSON yang mengizinkan tindakan, seperti `permissionDecision: "allow"`. Untuk mengembalikan keputusan JSON, keluar dengan 0

973* **Error HTTP**: koneksi hook HTTP gagal, atau status respons bukan 2xx

974* **Timeout**: hook mencapai [`timeout`](#common-fields)-nya

975* **Output tidak valid**: output JSON [tidak dapat di-parse](#exit-code-0) atau gagal [validasi skema](#json-output). Untuk hook HTTP, body 2xx yang bukan kosong dan bukan objek JSON juga dihitung. Stdout teks biasa dari hook perintah bukan kegagalan

976 

977Dengan `"block"` diatur, kegagalan melakukan apa yang [dilakukan exit code 2 pada event tersebut](#exit-code-2-behavior-per-event), kecuali pada `PermissionRequest`, di mana kegagalan menolak permintaan. Misalnya, kegagalan `PreToolUse` memblokir panggilan tool dan kegagalan `UserPromptSubmit` memblokir prompt.

978 

979Field ini tidak berpengaruh pada hook berikut:

980 

981* **Hook `Stop`, `SubagentStop`, `TaskCompleted`, dan `TeammateIdle`**: exit code 2 pada event ini mengirim Claude kembali untuk terus bekerja, dan Claude tidak dapat memperbaiki hook yang tidak mau berjalan

982* **Hook perintah latar belakang**: hook perintah yang mengatur [`async` atau `asyncRewake`](#run-hooks-in-the-background)

983 

906<h4 id="exit-code-2-behavior-per-event">984<h4 id="exit-code-2-behavior-per-event">

907 Perilaku exit code 2 per event985 Perilaku exit code 2 per event

908</h4>986</h4>


960* **Kegagalan koneksi**: error non-blocking, eksekusi berlanjut1038* **Kegagalan koneksi**: error non-blocking, eksekusi berlanjut

961* **Timeout**: hook dibatalkan, seperti dijelaskan di bagian [Timeout](#timeouts)1039* **Timeout**: hook dibatalkan, seperti dijelaskan di bagian [Timeout](#timeouts)

962 1040 

963Tidak seperti hook perintah, hook HTTP tidak dapat memberi sinyal error blocking hanya melalui kode status. Untuk memblokir panggilan tool atau menolak izin, kembalikan respons 2xx dengan body JSON yang berisi field keputusan yang sesuai.1041Hook HTTP tidak dapat memberi sinyal error blocking hanya melalui kode status: status non-2xx atau koneksi yang gagal adalah [error non-blocking](#exit-code-output). Untuk memblokir panggilan tool atau menolak izin, kembalikan respons 2xx dengan body JSON yang berisi field keputusan yang sesuai. Untuk memblokir tindakan ketika permintaan gagal atau mengembalikan status non-2xx, atur [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

964 1042 

965<h3 id="json-output">1043<h3 id="json-output">

966 Output JSON1044 Output JSON


1237 Kontrol keputusan SessionStart1315 Kontrol keputusan SessionStart

1238</h4>1316</h4>

1239 1317 

1240Claude Code menambahkan stdout yang [diperlakukannya sebagai teks biasa](#exit-code-0) ke konteks Claude. Selain [field output JSON](#json-output) yang tersedia untuk semua hook, Anda dapat mengembalikan field khusus event berikut:1318Hook SessionStart dapat menambahkan konteks untuk Claude, menyediakan pesan pengguna pertama, menetapkan judul sesi, memantau file, dan memuat ulang skill. Kembalikan field untuk masing-masing, selain [field output JSON](#json-output) yang tersedia untuk semua hook:

1241 1319 

1242| Field | Deskripsi |1320| Field | Deskripsi |

1243| :- | :- |1321| :- | :- |

1244| `additionalContext` | String yang ditambahkan ke konteks Claude di awal percakapan, sebelum prompt pertama. Lihat [Menambahkan konteks untuk Claude](#add-context-for-claude) untuk cara teks dikirimkan dan apa yang perlu dimasukkan ke dalamnya |1322| `additionalContext` | String yang ditambahkan ke konteks Claude di awal percakapan, sebelum prompt pertama. Lihat [Menambahkan konteks untuk Claude](#add-context-for-claude) untuk cara teks dikirimkan dan apa yang perlu dimasukkan ke dalamnya |

1245| `initialUserMessage` | String yang digunakan sebagai pesan pengguna pertama dalam sesi. Berlaku dalam [mode non-interaktif](/docs/id/headless) dengan flag `-p`, tempat string ini menjadi giliran pertama bahkan jika tidak ada prompt yang diberikan. Jika prompt diberikan, prompt tersebut menyusul sebagai giliran berikutnya. Tidak seperti `additionalContext`, yang melekat pada giliran yang sudah ada, field ini membuat giliran tersebut |1323| `initialUserMessage` | String yang digunakan sebagai pesan pengguna pertama dari sesi, dalam [mode non-interaktif](/docs/id/headless) dengan flag `-p`. String ini menjadi giliran pertama meskipun Anda tidak memberikan prompt. Prompt yang Anda berikan akan mengikuti sebagai giliran berikutnya |

1246| `sessionTitle` | Menetapkan judul sesi, dengan efek yang sama seperti `/rename`. Gunakan untuk memberi nama sesi secara otomatis dari folder peluncuran, branch git, atau nama worktree. Berlaku saat `source` bernilai `"startup"`, `"resume"`, atau `"fork"`; diabaikan pada `"clear"` dan `"compact"` |1324| `sessionTitle` | Menetapkan judul sesi, dengan efek yang sama seperti `/rename`. Berlaku ketika `source` bernilai `"startup"`, `"resume"`, atau `"fork"` |

1247| `watchPaths` | Array path absolut yang dipantau untuk event [FileChanged](#filechanged) selama sesi ini |1325| `watchPaths` | Array path absolut yang dipantau untuk event [FileChanged](#filechanged) selama sesi ini |

1248| `reloadSkills` | Boolean. Saat `true`, Claude Code memindai ulang direktori [skill](/docs/id/skills) dan perintah setelah hook SessionStart selesai, sehingga skill yang dipasang oleh hook tersedia dalam sesi yang sama, dimulai dari prompt pertama |1326| `reloadSkills` | Boolean. Ketika `true`, Claude Code memindai ulang direktori [skill](/docs/id/skills) dan perintah setelah hook SessionStart selesai. Lihat [Memuat ulang skill yang dipasang hook](#reload-skills-that-a-hook-installs) |

1327 

1328Output ini menambahkan konteks dan memberi nama sesi:

1249 1329 

1250```json theme={null}1330```json theme={null}

1251{1331{


1257}1337}

1258```1338```

1259 1339 

1260Karena stdout biasa sudah sampai ke Claude untuk event ini, hook yang hanya memuat konteks dapat langsung mencetak ke stdout tanpa membuat JSON. Gunakan bentuk JSON saat Anda perlu menggabungkan konteks dengan field lain seperti `sessionTitle`.1340Hook yang hanya menambahkan konteks dapat mencetaknya tanpa membangun JSON, karena Claude Code menambahkan [stdout teks biasa](#exit-code-0) dari hook SessionStart ke konteks Claude.

1341 

1342Jika hook SessionStart dari plugin Anda menyediakan `initialUserMessage` atau `sessionTitle`, pasang plugin tersebut sebelum sesi dimulai. Claude Code mengabaikan kedua field tersebut dari plugin yang selesai dipasang setelah hook SessionStart berjalan.

1343 

1344<h4 id="reload-skills-that-a-hook-installs">

1345 Memuat ulang skill yang dipasang hook

1346</h4>

1347 

1348Agar skill yang dipasang oleh hook SessionStart tersedia dalam sesi yang sama, kembalikan `reloadSkills`. Penemuan skill biasanya berjalan sebelum hook SessionStart selesai, sehingga tanpanya, file yang ditulis hook ke `~/.claude/skills/` atau `.claude/skills/` bisa belum ada ketika prompt pertama berjalan.

1261 1349 

1262Gunakan `reloadSkills` saat hook SessionStart memasang atau memperbarui skill. Penemuan skill biasanya berjalan sebelum hook SessionStart selesai, sehingga file yang ditulis hook ke `~/.claude/skills/` atau `.claude/skills/` jika tidak demikian hanya akan muncul di sesi berikutnya. Contoh ini menyinkronkan repositori skill bersama dan meminta pemindaian ulang:1350Contoh ini menyinkronkan repositori skill bersama dan meminta pemindaian ulang:

1263 1351 

1264```bash theme={null}1352```bash theme={null}

1265#!/bin/bash1353#!/bin/bash


1270echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "reloadSkills": true}}'1358echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "reloadSkills": true}}'

1271```1359```

1272 1360 

1273URL repositori tersebut adalah placeholder; ganti dengan repositori skill Anda sendiri. Dengan placeholder tersebut, clone gagal dan mencetak pesan `fatal:` ke stderr. Stderr dari hook SessionStart yang keluar dengan 0 hanya bersifat informasional, sehingga permintaan `reloadSkills` tetap berlaku.1361URL repositori tersebut adalah placeholder. Ganti dengan repositori skill Anda sendiri.

1274 1362 

1275<h4 id="persist-environment-variables">1363<h4 id="persist-environment-variables">

1276 Mempertahankan environment variable1364 Mempertahankan environment variable


1419 1507 

1420Hook `UserPromptSubmit` memiliki timeout default 30 detik untuk jenis `command`, `http`, dan `mcp_tool`, lebih pendek daripada default 600 detik untuk jenis tersebut pada sebagian besar event lain. Karena hook ini berjalan sebelum setiap prompt dan memblokir pemrosesan model hingga selesai, hook yang macet akan menghentikan sesi. Jika hook Anda memerlukan waktu lebih lama, tetapkan field `timeout` dalam entri hook.1508Hook `UserPromptSubmit` memiliki timeout default 30 detik untuk jenis `command`, `http`, dan `mcp_tool`, lebih pendek daripada default 600 detik untuk jenis tersebut pada sebagian besar event lain. Karena hook ini berjalan sebelum setiap prompt dan memblokir pemrosesan model hingga selesai, hook yang macet akan menghentikan sesi. Jika hook Anda memerlukan waktu lebih lama, tetapkan field `timeout` dalam entri hook.

1421 1509 

1422Selain hook perintah yang Anda jalankan dengan [`async: true`](#run-hooks-in-the-background), hook perintah, HTTP, atau tool MCP `UserPromptSubmit` yang mencapai timeout-nya dibatalkan dan output-nya, termasuk `additionalContext` apa pun, dibuang. Prompt tetap sampai ke Claude tanpa konteks tersebut. Transkrip menampilkan pemberitahuan yang menyebutkan nama hook, timeout yang dipicu, dan bahwa output telah dibuang.1510Selain hook perintah yang Anda jalankan dengan [`async: true`](#run-hooks-in-the-background), hook perintah, HTTP, atau tool MCP `UserPromptSubmit` yang mencapai timeout-nya akan dibatalkan dan output-nya, termasuk `additionalContext` apa pun, dibuang. Prompt tetap sampai ke Claude tanpa konteks tersebut. Untuk memblokir prompt sebagai gantinya, tetapkan [`onFailure: "block"`](#block-the-action-when-a-hook-fails) pada hook perintah atau HTTP. Transkrip menampilkan pemberitahuan yang menyebutkan hook, timeout yang dipicu, dan bahwa output telah dibuang.

1423 1511 

1424[Hook callback Agent SDK](/docs/id/agent-sdk/hooks) pada `UserPromptSubmit` yang mencapai timeout-nya memblokir prompt dengan pesan yang menyebutkan nama hook dan timeout-nya, karena callback di sana dapat berfungsi sebagai gerbang kebijakan yang tidak boleh gagal dalam keadaan terbuka. Sesi tetap berlanjut. Sebelum v2.1.208, timeout callback pada event tersebut mengakhiri giliran dengan error eksekusi.1512[Hook callback Agent SDK](/docs/id/agent-sdk/hooks) pada `UserPromptSubmit` yang mencapai timeout-nya memblokir prompt dengan pesan yang menyebutkan nama hook dan timeout-nya, karena callback di sana dapat berfungsi sebagai gerbang kebijakan yang tidak boleh gagal dalam keadaan terbuka. Sesi tetap berlanjut. Sebelum v2.1.208, timeout callback pada event tersebut mengakhiri giliran dengan error eksekusi.

1425 1513 


1860| :- | :- | :- | :- |1948| :- | :- | :- | :- |

1861| `url` | string | `"https://example.com/api"` | URL tempat konten diambil |1949| `url` | string | `"https://example.com/api"` | URL tempat konten diambil |

1862| `prompt` | string | `"Extract the API endpoints"` | Prompt yang dijalankan pada konten yang diambil |1950| `prompt` | string | `"Extract the API endpoints"` | Prompt yang dijalankan pada konten yang diambil |

1951| `offset` | number | `100000` | Jumlah karakter opsional yang dilewati dari awal halaman. Claude menetapkannya untuk terus membaca halaman yang panjang. Memerlukan Claude Code v2.1.290 atau yang lebih baru |

1863 1952 

1864<h5 id="websearch">1953<h5 id="websearch">

1865 WebSearch1954 WebSearch


2112| `message` | Hanya untuk `"deny"`: memberi tahu Claude mengapa izin ditolak |2201| `message` | Hanya untuk `"deny"`: memberi tahu Claude mengapa izin ditolak |

2113| `interrupt` | Hanya untuk `"deny"`: jika `true`, menghentikan Claude |2202| `interrupt` | Hanya untuk `"deny"`: jika `true`, menghentikan Claude |

2114 2203 

2115Hook yang keluar dengan 2 tanpa objek `decision` membiarkan alur izin tidak berubah, dan stderr-nya dibuang. Hanya objek `decision` yang dapat memberikan atau menolak permintaan.2204Hook yang keluar dengan kode 2 tanpa objek `decision` membiarkan alur izin tidak berubah, dan stderr-nya dibuang. Untuk memberikan atau menolak permintaan, kembalikan objek `decision`.

2116 2205 

2117```json theme={null}2206```json theme={null}

2118{2207{


2678 Kontrol keputusan TaskCreated2767 Kontrol keputusan TaskCreated

2679</h4>2768</h4>

2680 2769 

2681Hook TaskCreated dapat memblokir pembuatan dengan dua cara. Dengan cara mana pun, Claude Code menghapus tugas dan mengembalikan pesan Anda kepada Claude sebagai error tool. Claude Code mengabaikan `continue: false` dari event ini dan Claude tetap bekerja.2770Hook TaskCreated dapat memblokir pembuatan dengan exit code 2 atau dengan keputusan JSON. Apa pun caranya, Claude Code menghapus tugas dan mengembalikan pesan Anda kepada Claude sebagai error tool. Claude Code mengabaikan `continue: false` dari event ini dan Claude terus bekerja.

2682 2771 

2683* **Exit code 2**: Claude Code mengembalikan teks stderr sebagai pesan.2772* **Exit code 2**: Claude Code mengembalikan teks stderr sebagai pesan.

2684* **JSON `{"decision": "block", "reason": "..."}`**: Claude Code mengembalikan `reason` sebagai pesan.2773* **JSON `{"decision": "block", "reason": "..."}`**: Claude Code mengembalikan `reason` sebagai pesan.


3561 3650 

3562Claude Code menampilkan kepada pengguna `systemMessage` apa pun yang dikembalikan hook Anda terlepas dari keputusannya, sehingga hook pelaporan biaya dapat mengembalikan `{"systemMessage": "..."}` dan keluar dengan 0.3651Claude Code menampilkan kepada pengguna `systemMessage` apa pun yang dikembalikan hook Anda terlepas dari keputusannya, sehingga hook pelaporan biaya dapat mengembalikan `{"systemMessage": "..."}` dan keluar dengan 0.

3563 3652 

3564Hook PreModelSwitch yang tidak merespons sebelum timeout-nya akan memblokir peralihan. Sebaliknya, pada [PreToolUse](#timeouts), hook perintah yang mengalami timeout membiarkan panggilan tool berlanjut. Timeout default untuk event ini adalah 30 detik. `PreModelSwitch` hanya menjalankan hook `command`, `http`, dan `mcp_tool`, sehingga default `prompt` dan `agent` tidak berlaku.3653Hook PreModelSwitch yang tidak merespons sebelum timeout-nya akan memblokir pergantian. Untuk apa yang dilakukan timeout pada event lain, lihat [Timeout](#timeouts). Timeout default untuk event ini adalah 30 detik. `PreModelSwitch` hanya menjalankan hook `command`, `http`, dan `mcp_tool`, sehingga default `prompt` dan `agent` tidak berlaku.

3565 3654 

3566Hook yang keluar dengan kode selain 0 atau 2 dan tidak mencetak keputusan JSON tidak memblokir: Claude Code menampilkan stderr-nya dan menerapkan peralihan, seperti yang dijelaskan di [Exit code lainnya](#other-exit-codes).3655Hook yang keluar dengan kode selain 0 atau 2 dan tidak mencetak keputusan JSON merupakan error yang tidak memblokir, seperti yang dijelaskan di [Exit code lainnya](#other-exit-codes).

3567 3656 

3568<h3 id="postmodelswitch">3657<h3 id="postmodelswitch">

3569 PostModelSwitch3658 PostModelSwitch


4279Async hooks memiliki batasan tambahan dibandingkan dengan hooks sinkron:4368Async hooks memiliki batasan tambahan dibandingkan dengan hooks sinkron:

4280 4369 

4281* Output hook disampaikan pada turn percakapan berikutnya. Jika sesi idle, respons menunggu sampai interaksi pengguna berikutnya. Pengecualian: hook `asyncRewake` yang keluar dengan kode 2 membangunkan Claude segera bahkan ketika sesi idle.4370* Output hook disampaikan pada turn percakapan berikutnya. Jika sesi idle, respons menunggu sampai interaksi pengguna berikutnya. Pengecualian: hook `asyncRewake` yang keluar dengan kode 2 membangunkan Claude segera bahkan ketika sesi idle.

4282* Setiap eksekusi membuat proses latar belakang terpisah. Tidak ada deduplikasi di seluruh beberapa penjalankan hook async yang sama.4371* Setiap eksekusi membuat proses latar belakang terpisah.

4283 4372 

4284<h2 id="security-considerations">4373<h2 id="security-considerations">

4285 Pertimbangan keamanan4374 Pertimbangan keamanan

hooks-guide.md +14 −11

Details

242 242 

243Untuk menguji hook, minta Claude untuk menambahkan baris dengan string yang dikutip tunggal ke file JavaScript, kemudian buka file: dengan pengaturan default Prettier, hook menulis ulang ke tanda kutip ganda.243Untuk menguji hook, minta Claude untuk menambahkan baris dengan string yang dikutip tunggal ke file JavaScript, kemudian buka file: dengan pengaturan default Prettier, hook menulis ulang ke tanda kutip ganda.

244 244 

245Ketika hook berhasil, Claude Code tidak menampilkan apa pun dalam percakapan. Untuk mengonfirmasi hook berjalan, periksa bahwa file yang diedit diformat ulang, atau lihat [Debug techniques](#debug-techniques).245Ketika hook berhasil, Claude Code tidak menampilkan apa pun dalam percakapan. Untuk mengonfirmasi hook berjalan, periksa bahwa file yang diedit diformat ulang, atau lihat [Periksa apa yang dilakukan hook](#check-what-a-hook-did).

246 246 

247Untuk memformat ulang file tertentu bagaimanapun perubahannya, termasuk ketika perintah `Bash` menulis ulangnya, gunakan hook [FileChanged](/docs/id/hooks#filechanged) sebagai gantinya.247Untuk memformat ulang file tertentu bagaimanapun perubahannya, termasuk ketika perintah `Bash` menulis ulangnya, gunakan hook [FileChanged](/docs/id/hooks#filechanged) sebagai gantinya.

248 248 


979}979}

980```980```

981 981 

982Endpoint harus mengembalikan badan respons JSON menggunakan [output format](/docs/id/hooks#json-output) yang sama seperti hook perintah. Untuk memblokir panggilan alat, kembalikan respons 2xx dengan bidang `hookSpecificOutput` yang sesuai. Kode status HTTP saja tidak dapat memblokir tindakan.982Endpoint Anda merespons dengan badan JSON dalam [format output](/docs/id/hooks#json-output) yang sama seperti hook perintah, dan Claude Code juga memeriksa status respons:

983 

984* **Status 2xx**: untuk memblokir panggilan tool, kembalikan bidang `hookSpecificOutput` yang sesuai di dalam badan respons.

985* **Status lainnya, atau permintaan gagal**: Claude Code melaporkan [kesalahan non-pemblokiran](/docs/id/hooks#exit-code-output) dan membiarkan tindakan berlanjut. Agar endpoint yang gagal memblokir tindakan, atur [`onFailure: "block"`](/docs/id/hooks#block-the-action-when-a-hook-fails) pada hook tersebut.

983 986 

984Nilai header mendukung interpolasi variabel lingkungan menggunakan sintaks `$VAR_NAME` atau `${VAR_NAME}`. Hanya variabel yang tercantum dalam array `allowedEnvVars` yang diselesaikan; semua referensi `$VAR` lainnya tetap kosong.987Nilai header mendukung interpolasi variabel lingkungan menggunakan sintaks `$VAR_NAME` atau `${VAR_NAME}`. Hanya variabel yang tercantum dalam array `allowedEnvVars` yang diselesaikan; semua referensi `$VAR` lainnya tetap kosong.

985 988 


1103 1106 

1104Ketika hook Anda mengembalikan `permissionDecision` atau `additionalContext` di level atas daripada di dalam `hookSpecificOutput`, JSON masih diurai, dan Claude Code mengabaikan bidang yang salah tempat tanpa melaporkan kesalahan. Untuk melihat bidang mana yang diabaikannya, mulai Claude Code dengan `claude --debug` dan cari [debug log](/docs/id/hooks#debug-hooks) untuk `Hook JSON output had unrecognized keys`.1107Ketika hook Anda mengembalikan `permissionDecision` atau `additionalContext` di level atas daripada di dalam `hookSpecificOutput`, JSON masih diurai, dan Claude Code mengabaikan bidang yang salah tempat tanpa melaporkan kesalahan. Untuk melihat bidang mana yang diabaikannya, mulai Claude Code dengan `claude --debug` dan cari [debug log](/docs/id/hooks#debug-hooks) untuk `Hook JSON output had unrecognized keys`.

1105 1108 

1106<h3 id="debug-techniques">1109<h3 id="check-what-a-hook-did">

1107 Teknik debug1110 Periksa apa yang dilakukan hook

1108</h3>1111</h3>

1109 1112 

1110Tekan `Ctrl+O` untuk membuka tampilan transkrip untuk memeriksa hasil dari jalankan hook:1113Tekan `Ctrl+O` untuk membuka tampilan transkrip dan cari hasil dari hook:

1111 1114 

1112* **Jalankan berhasil**: Anda tidak melihat apa pun, kecuali JSON hook muncul sesuatu, seperti `systemMessage` atau umpan balik Stop hook.1115* **Berhasil**: Anda tidak melihat apa pun, kecuali JSON hook menampilkan sesuatu, seperti `systemMessage` atau umpan balik Stop hook.

1113 * Untuk mengonfirmasi hook berjalan, periksa efeknya, seperti file yang diformat ulang, atau aktifkan debug logging seperti dijelaskan di bawah dan picu hook lagi1116 * Untuk mengonfirmasi hook berjalan, periksa efeknya, seperti file yang diformat ulang

1114* **Kesalahan pemblokiran**: pada sebagian besar acara Anda melihat umpan balik hook. Ketika JSON hook membuat keputusan pemblokiran, umpan balik adalah alasan dari keputusan itu; jika tidak, itu adalah stderr hook. Pada beberapa acara, seperti `ConfigChange` dan `Elicitation`, blok tidak menampilkan pesan.1117* **Kesalahan pemblokiran**: pada sebagian besar acara Anda melihat pesan yang menyertai pemblokiran, misalnya `Blocked: rm commands are not allowed`. Pada beberapa acara, seperti `ConfigChange` dan `Elicitation`, Anda tidak melihat pesan. [Exit code 2](/docs/id/hooks#exit-code-2) menjelaskan dari mana pesan tersebut berasal.

1115* **Kesalahan non-pemblokiran**: tindakan dilanjutkan, dan Anda melihat pemberitahuan `<hook name> hook error` dengan penjelasan singkat, seperti baris pertama stderr dengan awalan `Failed with non-blocking status code:`, atau pesan validasi JSON atau parsing.1118* **Kesalahan non-pemblokiran**: Anda melihat pemberitahuan `<hook name> hook error` dengan penjelasan singkat, seperti baris pertama stderr setelah `Failed with non-blocking status code:`, atau pesan validasi JSON atau parsing. Tindakan tetap dilanjutkan.

1116 1119 

1117Kombinasi kode keluar dan JSON mana yang menghasilkan setiap hasil, termasuk pengecualian per-acara, didefinisikan dalam bagian [Exit code output](/docs/id/hooks#exit-code-output) referensi.1120Untuk mencari hasil untuk exit code dan stdout tertentu, termasuk pengecualian per-acara, lihat [Exit code output](/docs/id/hooks#exit-code-output) dalam referensi.

1118 1121 

1119Untuk detail eksekusi lengkap termasuk hook mana yang cocok, kode keluar mereka, stdout, dan stderr, baca debug log. Mulai Claude Code dengan `claude --debug-file /tmp/claude.log` untuk menulis ke jalur yang diketahui, kemudian `tail -f /tmp/claude.log` di terminal lain. Jika Anda memulai tanpa flag itu, jalankan `/debug` di tengah sesi untuk mengaktifkan logging dan temukan jalur log.1122Untuk detail eksekusi lengkap termasuk kode keluar hook, stdout, dan stderr, baca debug log. Mulai Claude Code dengan `claude --debug-file /tmp/claude.log` untuk menulis ke jalur yang diketahui, kemudian `tail -f /tmp/claude.log` di terminal lain. Jika Anda memulai tanpa flag itu, jalankan `/debug` di tengah sesi untuk mengaktifkan logging dan temukan jalur log.

1120 1123 

1121<h2 id="learn-more">1124<h2 id="learn-more">

1122 Pelajari lebih lanjut1125 Pelajari lebih lanjut

Details

216| `^` | Karakter non-kosong pertama |216| `^` | Karakter non-kosong pertama |

217| `gg` | Awal input |217| `gg` | Awal input |

218| `G` | Awal baris terakhir |218| `G` | Awal baris terakhir |

219| `f{char}` | Lompat ke kemunculan karakter berikutnya |219| `f{char}` | Lompat ke kemunculan karakter berikutnya pada baris saat ini |

220| `F{char}` | Lompat ke kemunculan karakter sebelumnya |220| `F{char}` | Lompat ke kemunculan karakter sebelumnya pada baris saat ini |

221| `t{char}` | Lompat ke tepat sebelum kemunculan karakter berikutnya |221| `t{char}` | Lompat ke tepat sebelum kemunculan karakter berikutnya pada baris saat ini |

222| `T{char}` | Lompat ke tepat setelah kemunculan karakter sebelumnya |222| `T{char}` | Lompat ke tepat setelah kemunculan karakter sebelumnya pada baris saat ini |

223| `;` | Ulangi gerakan f/F/t/T terakhir |223| `;` | Ulangi gerakan f/F/t/T terakhir |

224| `,` | Ulangi gerakan f/F/t/T terakhir dalam urutan terbalik |224| `,` | Ulangi gerakan f/F/t/T terakhir dalam urutan terbalik |

225| `/` | Buka pencarian riwayat terbalik, sama dengan `Ctrl+R`. Prompt pencarian kosong menunjukkan petunjuk: tekan `Esc` lalu `i` lalu `/` untuk membuka menu perintah sebagai gantinya |225| `/` | Buka pencarian riwayat terbalik, sama dengan `Ctrl+R`. Prompt pencarian kosong menunjukkan petunjuk: tekan `Esc` lalu `i` lalu `/` untuk membuka menu perintah sebagai gantinya |


239| `dd` | Hapus baris |239| `dd` | Hapus baris |

240| `D` | Hapus hingga akhir baris |240| `D` | Hapus hingga akhir baris |

241| `dw`/`de`/`db` | Hapus kata/hingga akhir/kembali |241| `dw`/`de`/`db` | Hapus kata/hingga akhir/kembali |

242| `df{char}`/`dt{char}` | Hapus hingga dan termasuk, atau hingga, kemunculan karakter berikutnya |242| `df{char}`/`dt{char}` | Hapus hingga dan termasuk, atau hingga, kemunculan karakter berikutnya pada baris saat ini |

243| `dj`/`dk` | Hapus baris saat ini dan baris di bawah atau di atas |243| `dj`/`dk` | Hapus baris saat ini dan baris di bawah atau di atas |

244| `dgg`/`dG` | Hapus dari baris saat ini ke baris pertama atau terakhir |244| `dgg`/`dG` | Hapus dari baris saat ini ke baris pertama atau terakhir |

245| `d0`/`c0`/`y0` | Hapus, ubah, atau yank dari kursor kembali ke awal baris. Memerlukan Claude Code v2.1.281 atau lebih baru |245| `d0`/`c0`/`y0` | Hapus, ubah, atau yank dari kursor kembali ke awal baris. Memerlukan Claude Code v2.1.281 atau lebih baru |


859* Sebuah `#123` yang berdiri sendiri859* Sebuah `#123` yang berdiri sendiri

860* Jalur GitLab bersarang seperti `group/subgroup/project#123`860* Jalur GitLab bersarang seperti `group/subgroup/project#123`

861* Referensi apa pun di dalam rentang kode atau blok kode861* Referensi apa pun di dalam rentang kode atau blok kode

862* Referensi apa pun dalam balasan yang lebih panjang dari sekitar 1.000 baris atau 100.000 karakter

862 863 

863Claude Code membangun tautan untuk host repositori yang diidentifikasinya dari git remote Anda, bukan untuk repositori yang dirujuk oleh referensi:864Claude Code membangun tautan untuk host repositori yang diidentifikasinya dari git remote Anda, bukan untuk repositori yang dirujuk oleh referensi:

864 865 

mcp.md +1 −1

Details

367 367 

368Di v2, Claude Code juga:368Di v2, Claude Code juga:

369 369 

370* Menanyakan server HTTP dan stdio apakah mereka mendukung revisi yang lebih baru, dan menggunakannya dengan server yang mendukungnya. Dalam sesi tempat ia mengambil feature flag, ia juga menanyakan server konektor claude.ai. Ia terhubung ke setiap server lain seperti yang dilakukan v1.370* Menanyakan server HTTP, stdio, dan konektor claude.ai apakah mereka mendukung revisi yang lebih baru, dan menggunakannya dengan server yang mendukungnya. Ia terhubung ke setiap server lain seperti yang dilakukan v1.

371* Menerima notifikasi `list_changed` dari server pada revisi yang lebih baru melalui [stream yang dipertahankan terbuka](#notification-streams-on-the-v2-runtime).371* Menerima notifikasi `list_changed` dari server pada revisi yang lebih baru melalui [stream yang dipertahankan terbuka](#notification-streams-on-the-v2-runtime).

372* Tidak mendaftarkan server [channel](#push-messages-with-channels) yang terhubung pada revisi yang lebih baru, karena revisi itu tidak dapat membawa pesan channel.372* Tidak mendaftarkan server [channel](#push-messages-with-channels) yang terhubung pada revisi yang lebih baru, karena revisi itu tidak dapat membawa pesan channel.

373* Menggagalkan [login OAuth MCP](#authenticate-with-remote-mcp-servers) yang respons otorisasinya menyebutkan penerbit yang tidak terduga.373* Menggagalkan [login OAuth MCP](#authenticate-with-remote-mcp-servers) yang respons otorisasinya menyebutkan penerbit yang tidak terduga.

Details

599 599 

600Dalam sesi yang masuk ke [gateway aplikasi Claude](/docs/id/claude-apps-gateway) melalui `/login`, CLI memberi stempel ekspor dengan identitas terautentikasi: `user.id` adalah subjek IdP, `user.email` adalah email yang masuk, dan `user.groups` membawa keanggotaan grup IdP sebagai string yang dipisahkan koma. Setiap ekspor juga membawa `identity.source: gateway-oidc`. Identitas gateway diterapkan terakhir, jadi kunci `user.*` dan `identity.*` yang ditetapkan melalui `OTEL_RESOURCE_ATTRIBUTES` diabaikan pada sesi gateway.600Dalam sesi yang masuk ke [gateway aplikasi Claude](/docs/id/claude-apps-gateway) melalui `/login`, CLI memberi stempel ekspor dengan identitas terautentikasi: `user.id` adalah subjek IdP, `user.email` adalah email yang masuk, dan `user.groups` membawa keanggotaan grup IdP sebagai string yang dipisahkan koma. Setiap ekspor juga membawa `identity.source: gateway-oidc`. Identitas gateway diterapkan terakhir, jadi kunci `user.*` dan `identity.*` yang ditetapkan melalui `OTEL_RESOURCE_ATTRIBUTES` diabaikan pada sesi gateway.

601 601 

602<Note>

603 Event yang dicatat Claude Code sebelum pengembang masuk tidak memuat identitas gateway. Ketika Claude Code membuka sesi dalam keadaan keluar dari gateway, misalnya setelah [gateway mengakhiri proses masuk](/docs/id/errors#cloud-gateway-session-expired), event startup yang dicatat sebelum masuk memuat `user.id` anonim dan tidak memuat `identity.source`. Event ini mencakup [`managed_settings_resolved`](#managed-settings-resolved-event), [`plugin_loaded`](#plugin-loaded-event), dan [`mcp_server_connection`](#mcp-server-connection-event).

604</Note>

605 

602Untuk atribut identitas pada sesi Claude Desktop dan Cowork yang terhubung melalui gateway, lihat [referensi `telemetry` gateway](/docs/id/claude-apps-gateway-config#telemetry).606Untuk atribut identitas pada sesi Claude Desktop dan Cowork yang terhubung melalui gateway, lihat [referensi `telemetry` gateway](/docs/id/claude-apps-gateway-config#telemetry).

603 607 

604Peristiwa juga menyertakan atribut berikut. Ini tidak pernah dilampirkan ke metrik karena akan menyebabkan kardinalitas tak terbatas:608Peristiwa juga menyertakan atribut berikut. Ini tidak pernah dilampirkan ke metrik karena akan menyebabkan kardinalitas tak terbatas:


917* `error`: Pesan kesalahan921* `error`: Pesan kesalahan

918* `status_code`: Kode status HTTP sebagai angka. Tidak ada untuk kesalahan non-HTTP seperti kegagalan koneksi.922* `status_code`: Kode status HTTP sebagai angka. Tidak ada untuk kesalahan non-HTTP seperti kegagalan koneksi.

919* `duration_ms`: Durasi permintaan dalam milidetik923* `duration_ms`: Durasi permintaan dalam milidetik

920* `attempt`: Jumlah total upaya yang dilakukan, termasuk permintaan awal (`1` berarti tidak ada pengulangan yang terjadi)924* `attempt`: Jumlah percobaan yang dilakukan, termasuk permintaan awal. [Mendeteksi retry yang habis](#detect-retry-exhaustion) menjelaskan kapan hitungan dimulai lagi

921* `request_id`: ID permintaan API, seperti `"req_011..."`, dijelaskan di bawah [Atribut korelasi peristiwa](#event-correlation-attributes).925* `request_id`: ID permintaan API, seperti `"req_011..."`, dijelaskan di bawah [Atribut korelasi peristiwa](#event-correlation-attributes).

922* `client_request_id`: UUID yang dihasilkan klien dikirim sebagai header permintaan `x-client-request-id`. Tersedia bahkan ketika kegagalan seperti timeout atau kesalahan koneksi tidak pernah menghasilkan `request_id` server; lihat tabel [atribut korelasi peristiwa](#event-correlation-attributes) untuk kapan ada. Memerlukan Claude Code v2.1.214 atau lebih baru926* `client_request_id`: UUID yang dihasilkan klien dikirim sebagai header permintaan `x-client-request-id`. Tersedia bahkan ketika kegagalan seperti timeout atau kesalahan koneksi tidak pernah menghasilkan `request_id` server; lihat tabel [atribut korelasi peristiwa](#event-correlation-attributes) untuk kapan ada. Memerlukan Claude Code v2.1.214 atau lebih baru

923* `speed`: `"fast"` atau `"normal"`, menunjukkan apakah mode cepat aktif927* `speed`: `"fast"` atau `"normal"`, menunjukkan apakah mode cepat aktif


1190 1194 

1191Dicatat ketika Claude Code menyelesaikan penyebutan `@` dalam prompt. Tidak setiap penyebutan memancarkan peristiwa: jalur keluar awal seperti penolakan izin, file yang terlalu besar, lampiran referensi PDF, dan kegagalan daftar direktori kembali tanpa pencatatan.1195Dicatat ketika Claude Code menyelesaikan penyebutan `@` dalam prompt. Tidak setiap penyebutan memancarkan peristiwa: jalur keluar awal seperti penolakan izin, file yang terlalu besar, lampiran referensi PDF, dan kegagalan daftar direktori kembali tanpa pencatatan.

1192 1196 

1197Setiap kali Claude Code membaca prompt, Claude Code mencatat paling banyak 100 event dengan `mention_type` berupa `"agent"` dan 100 dengan `"mcp_resource"`. Mention yang melewati salah satu batas tersebut tetap diresolusi tetapi tidak memancarkan event.

1198 

1193**Nama Peristiwa**: `claude_code.at_mention`1199**Nama Peristiwa**: `claude_code.at_mention`

1194 1200 

1195**Atribut**:1201**Atribut**:


1528 1534 

1529Claude Code mencoba ulang permintaan API yang gagal secara internal dan hanya memancarkan acara `claude_code.api_error` tunggal setelah menyerah, jadi acara itu sendiri adalah sinyal terminal untuk permintaan tersebut. Upaya retry perantara tidak dicatat sebagai acara terpisah.1535Claude Code mencoba ulang permintaan API yang gagal secara internal dan hanya memancarkan acara `claude_code.api_error` tunggal setelah menyerah, jadi acara itu sendiri adalah sinyal terminal untuk permintaan tersebut. Upaya retry perantara tidak dicatat sebagai acara terpisah.

1530 1536 

1531Atribut `attempt` pada acara mencatat berapa banyak upaya yang dilakukan secara total. `CLAUDE_CODE_MAX_RETRIES` default ke 10 dan dibatasi pada 15. Pada v2.1.199 atau lebih baru, Anda dapat mengatur `CLAUDE_CODE_RETRY_WATCHDOG` untuk menaikkan default dan menghapus batas.1537Atribut `attempt` pada acara mencatat jumlah upaya. `CLAUDE_CODE_MAX_RETRIES` default ke 10 dan dibatasi pada 15. Pada v2.1.199 atau lebih baru, Anda dapat mengatur `CLAUDE_CODE_RETRY_WATCHDOG` untuk menaikkan default dan menghapus batas.

1538 

1539Ketika permintaan menghabiskan semua retry pada kesalahan transien, `attempt` paling banyak satu lebih dari batas efektif tersebut: 11 secara default.

1532 1540 

1533Ketika permintaan menghabiskan semua retry pada kesalahan transien, `attempt` sama dengan satu lebih dari batas efektif tersebut: 11 secara default, dan tidak pernah lebih dari 16 kecuali watchdog diatur. Nilai yang lebih rendah menunjukkan kesalahan yang tidak dapat dicoba ulang seperti respons `400`, atau penyebab dengan anggaran retry yang lebih kecil. Misalnya, Claude Code mencoba ulang kegagalan untuk memuat kredensial AWS atau Google Cloud paling banyak dua kali.1541Nilai yang lebih rendah tetap dapat berarti retry telah habis: `attempt` dimulai lagi dari `1` setiap kali Claude Code mengirim ulang permintaan setelah kegagalan streaming.

1534 1542 

1535Untuk membedakan sesi yang pulih dari sesi yang terhenti, kelompokkan acara berdasarkan `session.id` dan periksa apakah acara `api_request` yang lebih baru ada setelah kesalahan.1543Untuk membedakan sesi yang pulih dari sesi yang terhenti, kelompokkan acara berdasarkan `session.id` dan periksa apakah acara `api_request` yang lebih baru ada setelah kesalahan.

1536 1544 

Details

91| `-y, --yes` | Terima perintah instal yang ditampilkan tanpa prompt `Run this command now?`. Diabaikan ketika perintah berjalan di dalam sesi Claude Code, seperti dari tool Bash atau hook. Memerlukan Claude Code v2.1.229 atau lebih baru |91| `-y, --yes` | Terima perintah instal yang ditampilkan tanpa prompt `Run this command now?`. Diabaikan ketika perintah berjalan di dalam sesi Claude Code, seperti dari tool Bash atau hook. Memerlukan Claude Code v2.1.229 atau lebih baru |

92| `--accept-command <sha256>` | Terima perintah instal yang ditampilkan yang `sha256` sebelumnya [`--json` run](#plugin-json-result) dilaporkan dalam `shownCommand`, sebagai pengganti `-y`. Tidak dapat digabungkan dengan `-y`. Lihat [Terima perintah instal yang ditampilkan](#accept-a-displayed-install-command). Memerlukan Claude Code v2.1.271 atau lebih baru |92| `--accept-command <sha256>` | Terima perintah instal yang ditampilkan yang `sha256` sebelumnya [`--json` run](#plugin-json-result) dilaporkan dalam `shownCommand`, sebagai pengganti `-y`. Tidak dapat digabungkan dengan `-y`. Lihat [Terima perintah instal yang ditampilkan](#accept-a-displayed-install-command). Memerlukan Claude Code v2.1.271 atau lebih baru |

93| `--json` | Cetak hasil sebagai satu objek JSON pada baris terakhir stdout alih-alih pesan yang dapat dibaca manusia, untuk digunakan dalam skrip. Lihat [Format hasil JSON](#plugin-json-result). Memerlukan Claude Code v2.1.268 atau lebih baru |93| `--json` | Cetak hasil sebagai satu objek JSON pada baris terakhir stdout alih-alih pesan yang dapat dibaca manusia, untuk digunakan dalam skrip. Lihat [Format hasil JSON](#plugin-json-result). Memerlukan Claude Code v2.1.268 atau lebih baru |

94| `--marketplace <source>` | Instal `<plugin>`, yang diberikan dengan nama telanjangnya, dari marketplace di `<source>`, dengan menambahkan marketplace tersebut terlebih dahulu jika Anda belum menambahkannya. Lihat [Tambahkan marketplace dan instal dalam satu perintah](/docs/id/plugins/install#add-a-marketplace-and-install-in-one-command). Memerlukan Claude Code v2.1.292 atau lebih baru |

94 95 

95Jalankan `claude plugin install --help` di shell Anda untuk melihat setiap opsi yang didukung versi Anda.96Jalankan `claude plugin install --help` di shell Anda untuk melihat setiap opsi yang didukung versi Anda.

96 97 

Details

413 Bagaimana pengguna menerima perintah headersHelper413 Bagaimana pengguna menerima perintah headersHelper

414</h3>414</h3>

415 415 

416Pengguna menerima perintah entri plugin setiap kali mereka memasang atau memperbarui plugin tersebut saja. Mereka melakukan itu dari tampilan plugin sendiri di `/plugin`, atau dengan `claude plugin install` atau `claude plugin update`. Claude Code menunjukkan perintah dan URL arsip, dan menjalankan perintah hanya setelah pengguna menerima.416Pengguna menerima perintah entri plugin setiap kali mereka memasang atau memperbarui plugin tersebut saja. Claude Code menunjukkan perintah dan URL arsip, dan menjalankan perintah hanya setelah pengguna menerima.

417 

418Pengguna dapat memasang atau memperbarui plugin di dalam sesi Claude Code di terminal, di shell mereka tanpa sesi yang berjalan, atau di ekstensi VS Code:

419 

420* **Sesi terminal**: dari tampilan plugin sendiri di `/plugin`.

421* **Shell**: dengan `claude plugin install` atau `claude plugin update`.

422* **Ekstensi VS Code**: dari [dialog **Manage plugins**](/docs/id/vs-code#manage-plugins), dengan ekstensi versi 2.1.290 atau lebih baru.

417 423 

418Dalam shell non-interaktif, teruskan [`--yes`](/docs/id/plugins/cli-reference#plugin-install) untuk menerima perintah. Untuk menerima hanya perintah yang ditampilkan run `--json` sebelumnya, teruskan [`--accept-command`](/docs/id/plugins/cli-reference#plugin-install) dengan `sha256` yang dilaporkan run.424Dalam shell non-interaktif, teruskan [`--yes`](/docs/id/plugins/cli-reference#plugin-install) untuk menerima perintah. Untuk menerima hanya perintah yang ditampilkan run `--json` sebelumnya, teruskan [`--accept-command`](/docs/id/plugins/cli-reference#plugin-install) dengan `sha256` yang dilaporkan run.

419 425 

420Claude Code menjalankan hanya perintah yang ditunjukkan, untuk URL arsip yang ditunjukkan. Jika perintah entri atau URL arsip berubah di antara, Claude Code menolak pemasangan atau pembaruan. Perubahan dalam string kueri saja tidak dihitung.426Claude Code menjalankan hanya perintah yang ditunjukkan, untuk URL arsip yang ditunjukkan. Jika perintah entri atau URL arsip berubah di antara, Claude Code menolak pemasangan atau pembaruan. Perubahan dalam string kueri saja tidak dihitung, kecuali di ekstensi VS Code atau dengan `--accept-command`.

421 427 

422<h3 id="installs-and-updates-that-refuse-the-command-instead-of-asking">428<h3 id="installs-and-updates-that-refuse-the-command-instead-of-asking">

423 Pemasangan dan pembaruan yang menolak perintah alih-alih bertanya429 Pemasangan dan pembaruan yang menolak perintah alih-alih bertanya

Details

189 189 

190* **Scope**: cakupan pengguna secara default. Lewatkan `--scope project` atau `--scope local` untuk mengubahnya.190* **Scope**: cakupan pengguna secara default. Lewatkan `--scope project` atau `--scope local` untuk mengubahnya.

191* **When the plugins load**: plugin yang diinstalnya memuat lain kali Anda memulai Claude Code, atau ketika Anda menjalankan `/reload-plugins` dalam sesi yang sudah terbuka.191* **When the plugins load**: plugin yang diinstalnya memuat lain kali Anda memulai Claude Code, atau ketika Anda menjalankan `/reload-plugins` dalam sesi yang sudah terbuka.

192* **The marketplace must be added first**: di mesin di mana tidak ada yang telah membuka sesi Claude Code interaktif, marketplace resmi tidak terdaftar, jadi skrip yang menginstal darinya menjalankan `claude plugin marketplace add anthropics/claude-plugins-official` sebelum instalasi.192* **The marketplace on a new machine**: di mesin di mana belum ada yang membuka sesi Claude Code interaktif, marketplace resmi tidak terdaftar, jadi skrip yang menginstal darinya menjalankan `claude plugin marketplace add anthropics/claude-plugins-official` sebelum instalasi. Lihat [Tambahkan dan instal dari shell Anda](#add-and-install-from-your-shell).

193 193 

194```bash theme={null}194```bash theme={null}

195claude plugin install formatter@your-org --scope project195claude plugin install formatter@your-org --scope project


232 Tambahkan marketplace dan instal dalam satu perintah232 Tambahkan marketplace dan instal dalam satu perintah

233</h3>233</h3>

234 234 

235Untuk menginstal plugin dari marketplace yang belum Anda tambahkan, jalankan `/plugin install` dalam sesi Claude Code dan namai sumber marketplace dengan `--marketplace`. Memerlukan Claude Code v2.1.275 atau lebih baru.235Untuk menginstal plugin dari marketplace yang belum Anda tambahkan, sebutkan sumber marketplace dengan `--marketplace` pada perintah instal, dalam sesi atau dari shell Anda. Sumber mengambil [bentuk yang sama seperti `/plugin marketplace add`](#add-a-marketplace), seperti GitHub `owner/repo`, URL git, atau jalur lokal. Berikan nama plugin sendiri, tanpa akhiran `@marketplace`.

236 

237<h4 id="add-and-install-in-a-session">

238 Tambahkan dan instal dalam sesi

239</h4>

240 

241Jalankan `/plugin install` dalam sesi Claude Code dengan plugin dan sumbernya. Memerlukan Claude Code v2.1.275 atau lebih baru. Dalam sesi, sumber tidak dapat berisi spasi.

236 242 

237```text theme={null}243```text theme={null}

238/plugin install deploy-helper --marketplace your-org/plugins244/plugin install deploy-helper --marketplace your-org/plugins

239```245```

240 246 

241Sumber mengambil [bentuk yang sama seperti `/plugin marketplace add`](#add-a-marketplace), seperti GitHub `owner/repo`, URL git, atau jalur lokal, kecuali bahwa tidak dapat berisi spasi. Berikan nama plugin sendiri, tanpa akhiran `@marketplace`.

242 

243Jika Anda belum menambahkan marketplace itu, Claude Code menunjukkan sumber yang diselesaikan dan meminta Anda mengonfirmasi sebelum menambahkannya. Setelah marketplace ditambahkan, detail plugin membuka dan Anda memilih [cakupan instalasi](#install-a-plugin). Jika sumber cocok dengan marketplace yang sudah Anda tambahkan, Claude Code melewati konfirmasi dan membuka detail plugin di marketplace itu.247Jika Anda belum menambahkan marketplace itu, Claude Code menunjukkan sumber yang diselesaikan dan meminta Anda mengonfirmasi sebelum menambahkannya. Setelah marketplace ditambahkan, detail plugin membuka dan Anda memilih [cakupan instalasi](#install-a-plugin). Jika sumber cocok dengan marketplace yang sudah Anda tambahkan, Claude Code melewati konfirmasi dan membuka detail plugin di marketplace itu.

244 248 

249<h4 id="add-and-install-from-your-shell">

250 Tambahkan dan instal dari shell Anda

251</h4>

252 

253Di shell Anda, tanpa memulai sesi, jalankan `claude plugin install` dengan plugin dan sumbernya. Memerlukan Claude Code v2.1.292 atau lebih baru.

254 

255```bash theme={null}

256claude plugin install deploy-helper --marketplace your-org/plugins

257```

258 

259Perintah shell menambahkan marketplace tanpa langkah konfirmasi. Marketplace yang sudah Anda tambahkan dari sumber tersebut digunakan kembali. Marketplace baru ditambahkan dengan [pemeriksaan kebijakan organisasi](/docs/id/plugins/org#restrict-what-users-can-install) yang sama seperti `claude plugin marketplace add`, dan dideklarasikan di pengaturan pengguna Anda bahkan ketika Anda meneruskan `--scope project`.

260 

261Jika Anda belum menambahkan marketplace itu, perintah mencetak `Successfully added marketplace: <name> (declared in user settings)` lalu [menginstal plugin](#install-from-your-shell).

262 

245<h3 id="add-a-private-marketplace">263<h3 id="add-a-private-marketplace">

246 Tambahkan marketplace pribadi264 Tambahkan marketplace pribadi

247</h3>265</h3>

Details

185| Menempatkan `official` di samping `claude` atau `anthropic`, seperti `official-claude-tools` | Error |185| Menempatkan `official` di samping `claude` atau `anthropic`, seperti `official-claude-tools` | Error |

186| Memiliki `claude`, `anthropic`, atau `anthropics` sebagai kata utuh di mana pun, seperti `mcp-for-claude` | Warning |186| Memiliki `claude`, `anthropic`, atau `anthropics` sebagai kata utuh di mana pun, seperti `mcp-for-claude` | Warning |

187 187 

188Error berbunyi `Plugin name "<name>" is reserved: it passes as one of Anthropic's own`, dan warning berbunyi `Plugin name "<name>" reads as one of Anthropic's own`. `claude plugin init` dan `claude plugin tag` menolak nama yang menghasilkan error. Hanya perintah ini yang memeriksa nama. Claude Code masih menginstal dan memuat plugin yang nama mereka tolak.188Error berbunyi `Plugin name "<name>" is reserved: it passes as one of Anthropic's own`, dan warning berbunyi `Plugin name "<name>" reads as one of Anthropic's own`. `claude plugin init` dan `claude plugin tag` menolak nama yang menghasilkan error. Claude Code masih menginstal dan memuat plugin yang namanya ditolak oleh perintah-perintah tersebut.

189 189 

190<h3 id="displayname">190<h3 id="displayname">

191 `displayName`191 `displayName`

Details

64 64 

65| Field | Tipe | Deskripsi |65| Field | Tipe | Deskripsi |

66| :- | :- | :- |66| :- | :- | :- |

67| `name` | string | Pengenal marketplace: huruf, digit, `.`, `_`, dan `-`, dimulai dengan huruf atau digit, dan tidak ada `..`. `claude plugin validate` gagal untuk nama lain, karena Claude Code tidak dapat memasang plugin dari marketplace yang menggunakan nama tersebut. Pengguna mengetik nama ini setelah `@` dalam [ID plugin](/docs/id/plugins/loading#find-where-a-plugin-came-from) seperti `my-plugin@my-marketplace` ketika mereka memasang plugin. Lihat [Nama yang dicadangkan](#reserved-names) |67| `name` | string | Pengenal marketplace: huruf, digit, `.`, `_`, dan `-`, dimulai dengan huruf atau digit, dan tidak ada `..`. `claude plugin validate` gagal untuk nama lain, karena Claude Code [tidak dapat memasang plugin dari marketplace yang menggunakan nama tersebut](/docs/id/plugins/troubleshooting#cannot-install-plugins-from-a-marketplace-with-this-name). Pengguna mengetik nama ini setelah `@` dalam [ID plugin](/docs/id/plugins/loading#find-where-a-plugin-came-from) seperti `my-plugin@my-marketplace` ketika mereka memasang plugin. Lihat [Nama yang dicadangkan](#reserved-names) |

68| `owner` | object | Informasi pengelola. `name` diperlukan; `email` dan `url` opsional |68| `owner` | object | Informasi pengelola. `name` diperlukan; `email` dan `url` opsional |

69| `plugins` | array | [Entri plugin](#plugin-entries). Setiap entri divalidasi sendiri, jadi satu entri yang tidak valid tidak gagal marketplace |69| `plugins` | array | [Entri plugin](#plugin-entries). Setiap entri divalidasi sendiri, jadi satu entri yang tidak valid tidak gagal marketplace |

70| `$schema` | string | URL JSON Schema untuk pelengkapan otomatis editor. Diabaikan saat waktu muat |70| `$schema` | string | URL JSON Schema untuk pelengkapan otomatis editor. Diabaikan saat waktu muat |

Details

138| `$.mcp.call` | Memanggil alat pada server MCP yang terhubung, di bawah aturan izin sesi |138| `$.mcp.call` | Memanggil alat pada server MCP yang terhubung, di bawah aturan izin sesi |

139| `$.model.complete` | Menggunakan paket atau kunci API pengguna untuk panggilan model |139| `$.model.complete` | Menggunakan paket atau kunci API pengguna untuk panggilan model |

140| `$.prompt.submit` | Mengirimkan prompt, dan dapat mengirimkannya sebagai kata-kata pengguna sendiri |140| `$.prompt.submit` | Mengirimkan prompt, dan dapat mengirimkannya sebagai kata-kata pengguna sendiri |

141| `$.session.send` | Mengirimkan pesan yang dibaca sesi lain atau subagen Claude |141| `$.session.send` | Mengirimkan pesan yang dibaca oleh Claude milik sesi lain, subagent, atau [rekan tim](/docs/id/agent-teams) |

142 142 

143Dalam baris `hooks:`, [`tool.call`](/docs/id/plugins/mods/reference#tools) dan [`prompt.submit`](/docs/id/plugins/mods/reference#prompts-and-what-claude-reads) berarti mod melihat setiap panggilan alat dan setiap prompt, dan dapat mengubahnya. [`session.append`](/docs/id/plugins/mods/reference#session) berarti mod dapat menulis ulang setiap baris percakapan sebelum disimpan. [`ui.render{component=AskUserQuestion}`](/docs/id/plugins/mods/interface#change-what-claude-code-already-draws) berarti mod dapat menggambar ulang dialog yang digunakan Claude untuk menanyakan pengguna. `tool.check` berarti mod dapat menyetujui atau menolak panggilan alat sebelum prompt izin muncul. [Ketahui apa yang terjadi secara default](#know-what-happens-by-default) mencantumkan aturan dan hook mana dari Anda yang memiliki prioritas atas jawabannya.143Dalam baris `hooks:`, [`tool.call`](/docs/id/plugins/mods/reference#tools) dan [`prompt.submit`](/docs/id/plugins/mods/reference#prompts-and-what-claude-reads) berarti mod melihat setiap panggilan alat dan setiap prompt, dan dapat mengubahnya. [`session.append`](/docs/id/plugins/mods/reference#session) berarti mod dapat menulis ulang setiap baris percakapan sebelum disimpan. [`ui.render{component=AskUserQuestion}`](/docs/id/plugins/mods/interface#change-what-claude-code-already-draws) berarti mod dapat menggambar ulang dialog yang digunakan Claude untuk menanyakan pengguna. `tool.check` berarti mod dapat menyetujui atau menolak panggilan alat sebelum prompt izin muncul. [Ketahui apa yang terjadi secara default](#know-what-happens-by-default) mencantumkan aturan dan hook mana dari Anda yang memiliki prioritas atas jawabannya.

144 144 

Details

4 4 

5# Gunakan mods API5# Gunakan mods API

6 6 

7> Panggil mods API dari mod Claude Code untuk menambahkan perintah dan alat, memanggil model, menjalankan pekerjaan pada timer, mengirim pesan ke sesi lain, dan mengakses file serta jaringan.7> Panggil mods API dari mod Claude Code untuk menambahkan perintah dan tool, memanggil model, menjalankan pekerjaan pada timer, mengirim pesan ke sesi lain, dan mengakses file serta jaringan.

8 8 

9Mods API adalah kumpulan metode yang dipanggil mod untuk bertindak: menambahkan perintah dan alat, memanggil model, menjalankan pekerjaan antar peristiwa, dan mengakses sistem file, proses, dan jaringan. Setiap hook menerimanya sebagai argumen pertamanya, `$`, dengan metode yang dikelompokkan dalam namespace seperti `$.ui` dan `$.fs`. [Events](/docs/id/plugins/mods/events) menentukan kapan hook berjalan, dan mods API adalah apa yang dipanggil hook setelah berjalan.9Mods API adalah kumpulan metode yang dipanggil mod untuk bertindak: menambahkan perintah dan alat, memanggil model, menjalankan pekerjaan antar peristiwa, dan mengakses sistem file, proses, dan jaringan. Setiap hook menerimanya sebagai argumen pertamanya, `$`, dengan metode yang dikelompokkan dalam namespace seperti `$.ui` dan `$.fs`. [Events](/docs/id/plugins/mods/events) menentukan kapan hook berjalan, dan mods API adalah apa yang dipanggil hook setelah berjalan.

10 10 


79 Panggil model79 Panggil model

80</h2>80</h2>

81 81 

82Mod dapat menanyakan model pertanyaan sendiri, di luar percakapan, untuk pekerjaan kecil seperti mengurutkan atau merangkum sepotong teks. `$.model.complete` mengirim satu prompt ke model dengan kredensial sesi Anda dan menyelesaikan balasan. Ini tidak memiliki riwayat percakapan.82Mod dapat mengirim permintaannya sendiri ke model untuk pekerjaan kecil seperti mengklasifikasikan atau merangkum teks. `$.model.complete` mengirim prompt Anda secara tersendiri, dan `$.model.fork({ prompt })` mengirim percakapan saat ini dengan prompt Anda di bagian akhir.

83 

84Tabel ini membandingkan isi setiap permintaan:

85 

86| Dalam permintaan | `$.model.complete` | `$.model.fork` |

87| :- | :- | :- |

88| Model | `model` yang Anda berikan | Model sesi |

89| System prompt | [Blok atribusi](/docs/id/llm-gateway-protocol#system-prompt-attribution-block) singkat, lalu `system` Anda jika Anda memberikannya | System prompt sesi |

90| Pesan | Satu pesan pengguna, yaitu `prompt` Anda | Percakapan sejauh ini, lalu `prompt` Anda sebagai pesan pengguna |

91| CLAUDE.md dan konteks proyek lainnya | Tidak disertakan | Disertakan, seperti pada permintaan terakhir percakapan |

92| Tool | Tidak ada | Tool Claude, yang tidak dapat dipanggil oleh model |

93 

94Fork mengulang permintaan terakhir percakapan, sehingga Claude API melayani sebagian besarnya dari [cache prompt](/docs/id/prompt-caching) selama percakapan masih berada di cache.

95 

96Kedua panggilan menggunakan kredensial sesi, sehingga tagihannya dibebankan ke paket, kunci API, atau penyedia cloud pengguna. [Tipe untuk build Anda](/docs/id/plugins/mods/create#get-the-types-for-your-build) mendokumentasikan setiap metode `$.model`.

97 

98<h3 id="send-one-prompt">

99 Kirim satu prompt

100</h3>

101 

102Berikan `model` dan `prompt` ke `$.model.complete`. `prompt` menjadi pesan pengguna. Untuk memberikan instruksi kepada model, seperti peran atau format output, berikan juga `system`, yang menjadi system prompt.

83 103 

84Hook ini menjawab perintah `/triage`, [didaftarkan sebagai perintah](#add-a-command), dengan menanyakan model kecil untuk memberi label pada teks yang diketik setelahnya:104Hook ini menjawab perintah `/triage`, [didaftarkan sebagai perintah](#add-a-command), dengan menanyakan model kecil untuk memberi label pada teks yang diketik setelahnya:

85 105 


100})120})

101```121```

102 122 

103Saat Anda menjalankan `/triage the export button does nothing`, mod mengirim teks itu ke model dan mencetak jawabannya, seperti `Label: bug`. Percakapan Claude bukan bagian dari permintaan. Saat model tidak menjawab, labelnya adalah `unknown`.123Saat Anda menjalankan `/triage the export button does nothing`, mod mengirim teks itu ke model dan mencetak jawabannya, seperti `Label: bug`. Saat model tidak menjawab, labelnya adalah `unknown`.

124 

125Kegagalan Claude API tidak menolak panggilan, jadi periksa `r.isAnswered`, dan baca `r.reason` saat nilainya `false`. Panggilan ditolak untuk permintaan yang tidak akan dikirim Claude Code, seperti model yang diblokir organisasi Anda.

126 

127[Tipe untuk build Anda](/docs/id/plugins/mods/create#get-the-types-for-your-build) mencantumkan opsi lain, seperti `effort`, dan [batas](/docs/id/plugins/mods/reference#limits) memberikan default `maxTokens`.

128 

129<h3 id="use-prompt-caching">

130 Gunakan prompt caching

131</h3>

132 

133`$.model.complete` mendukung [prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) Claude API. API menyimpan ke cache bagian awal permintaan, yang disebut prefiks, hingga [cache breakpoint](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#explicit-cache-breakpoints) yang Anda tetapkan. Saat setiap panggilan dimulai dengan konten statis panjang yang sama, seperti instruksi atau materi referensi, tetapkan breakpoint di akhir konten tersebut. Panggilan berikutnya kemudian membacanya dari cache alih-alih membayar harga input penuh untuk konten itu.

134 

135Untuk menetapkan breakpoint, berikan `prompt` sebagai array blok `{ text }` alih-alih string, dan tambahkan `cache: true` ke blok terakhir dari konten statis. Claude Code mengirim blok tersebut dengan field `cache_control` milik API. `system` menerima bentuk array yang sama. Untuk memilih di antara keduanya, lihat [Memilih antara `prompt` dan `system`](#choose-between-prompt-and-system).

136 

137<Note>

138 Array blok memerlukan Claude Code v2.1.292 atau lebih baru. Versi sebelumnya menolak array dalam `prompt` dengan error yang diakhiri dengan `takes { model, prompt } (host check)`, dan tidak menyertakan array dalam `system` ke dalam permintaan.

139</Note>

140 

141Versi [hook `/triage`](#send-one-prompt) ini mengirim serangkaian aturan pelabelan yang panjang sebelum teks yang akan diberi label, dengan breakpoint setelah aturan tersebut. `RULES` adalah string milik Anda sendiri:

142 

143```javascript theme={null}

144on('command.run', { command: 'triage' }, async ($, e) => {

145 const r = await $.model.complete({

146 model: 'haiku',

147 prompt: [

148 // Identical on every call, so it forms the cached prefix

149 { text: RULES, cache: true },

150 // Changes on every call, so it goes after the breakpoint

151 { text: e.args },

152 ],

153 })

154 return { text: 'Label: ' + (r.isAnswered ? r.text.trim() : 'unknown') }

155})

156```

157 

158TTL dan jumlah breakpoint memiliki batas berikut:

159 

160* **TTL**: entri cache bertahan lima menit setelah penggunaan terakhirnya. TTL berasal dari pengaturan Claude Code pengguna, bukan dari panggilan. Untuk satu jam, atur [`subagentPromptCacheTtl`](/docs/id/prompt-caching#choose-the-ttl-yourself) ke `1h`.

161* **Breakpoint per permintaan**: API menerima [hingga empat](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#when-to-use-multiple-breakpoints), dan satu lagi akan dikembalikan sebagai `api-error` dalam `r.reason`

162 

163<h4 id="choose-between-prompt-and-system">

164 Memilih antara `prompt` dan `system`

165</h4>

166 

167Letakkan konten statis yang digunakan bersama oleh panggilan Anda di awal `prompt`, kecuali Anda tahu bahwa permintaan Anda langsung menuju Claude API:

168 

169* **Langsung ke Claude API, dengan kunci API atau langganan Claude**: kedua field dapat digunakan

170* **Melalui [Amazon Bedrock](/docs/id/amazon-bedrock), [Claude Platform on AWS](/docs/id/claude-platform-on-aws), [Google Cloud's Agent Platform](/docs/id/google-vertex-ai), [Microsoft Foundry](/docs/id/microsoft-foundry), atau [LLM gateway](/docs/id/llm-gateway)**: gunakan `prompt`. Claude Code memulai system prompt dengan [blok atribusi](/docs/id/llm-gateway-protocol#system-prompt-attribution-block) yang fingerprint-nya berasal dari awal pesan pengguna. Endpoint `api.anthropic.com` menghapus blok tersebut sebelum caching. Endpoint lain menerimanya sebagai bagian dari prompt, sehingga breakpoint dalam `system` dapat meleset saat `prompt` dimulai secara berbeda.

171* **Dalam mod yang dijalankan orang lain**: gunakan `prompt`, karena Anda tidak memilih penyedia mereka

172 

173`system` muncul sebelum `prompt` dalam prefiks, sehingga breakpoint dalam `prompt` juga mencakup `system`, dan panggilan dengan `system` yang berbeda akan meleset dari cache.

104 174 

105Kegagalan Claude API tidak menolak panggilan, jadi periksa `r.isAnswered`, dan baca `r.reason` saat itu `false`. Panggilan menolak untuk permintaan yang tidak akan dikirim Claude Code, seperti model yang diblokir organisasi Anda. [Tipe untuk build Anda](/docs/id/plugins/mods/create#get-the-types-for-your-build) mencantumkan opsi lain, seperti `effort`, dan [batas](/docs/id/plugins/mods/reference#limits) memberikan default `maxTokens`.175<h4 id="check-for-cache-hits">

176 Memeriksa cache hit

177</h4>

106 178 

107`$.model.fork({ prompt })` menanyakan satu pertanyaan atas percakapan saat ini, dengan model dan prompt sistem yang sama, jadi Claude API melayani sebagian besar dari cache prompt.179Hasil dari `$.model.complete` memiliki objek `usage` dengan [field cache](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#tracking-cache-performance) milik API. `usage.cache_creation_input_tokens` menghitung token yang ditulis panggilan ke cache, dan `usage.cache_read_input_tokens` menghitung token yang dibaca panggilan dari cache. Harapkan penulisan pada panggilan pertama dan pembacaan pada panggilan berikutnya dalam TTL.

108 180 

109Panggilan ini menggunakan paket atau kunci API pengguna.181Jika setiap panggilan menulis dan tidak ada yang membaca, prefiks berbeda antar panggilan atau jarak antar panggilan lebih lama dari TTL. Untuk prefiks yang berbeda, lihat [Memilih antara `prompt` dan `system`](#choose-between-prompt-and-system).

182 

183Jika kedua field tetap bernilai nol pada panggilan yang dijawab model, tidak ada yang disimpan ke cache. Periksa setiap penyebab berikut:

184 

185* **Prefiks terlalu pendek**: API tidak menyimpan ke cache prefiks yang lebih pendek dari [panjang minimum](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#cache-limitations) model, dan tidak mengembalikan error

186* **Prompt caching dinonaktifkan**: saat [variabel `DISABLE_PROMPT_CACHING`](/docs/id/prompt-caching#disable-prompt-caching) berlaku untuk model, Claude Code menghapus breakpoint dan mengirim teks tanpa cache

187* **Gateway Anda menghapus `cache_control`**: gateway dapat [menghapus field tersebut dan tetap mengembalikan keberhasilan](/docs/id/prompt-caching#where-the-cache-lives)

188* **Mod lain menulis ulang awal teks**: Claude Code kemudian [mengirimnya tanpa breakpoint](#what-a-model-complete-hook-receives)

189 

190<h3 id="what-a-model-complete-hook-receives">

191 Apa yang diterima hook `model.complete`

192</h3>

193 

194Jika Anda memasang hook pada event [`model.complete`](/docs/id/plugins/mods/reference#mods-api-calls) untuk memeriksa atau mengubah permintaan mod lain, baca teks dari field berikut:

195 

196* **`e.prompt`**: selalu berupa string. Saat pemanggil memberikan array, nilainya adalah teks blok-blok yang digabungkan secara berurutan.

197* **`e.system`**: string yang dibangun dengan cara yang sama, atau tidak ada saat pemanggil tidak memberikan `system`

198* **`e.promptBlocks` dan `e.systemBlocks`**: array milik pemanggil, masing-masing ada saat pemanggil memberikan array untuk field tersebut

199 

200Claude Code mengirim string yang diteruskan hook Anda ke `next` dan menggunakan array yang Anda berikan bersamanya untuk menempatkan [cache breakpoint](#use-prompt-caching). Claude Code mempertahankan blok-blok awal yang masih cocok dengan awal string, beserta breakpoint-nya, dan mengirim sisa string tanpa breakpoint. Misalnya, `next({ ...e, prompt: e.prompt + NOTE })` mempertahankan breakpoint pemanggil, sedangkan hook yang mengubah awal `prompt` menghapusnya.

110 201 

111<h2 id="run-work-in-the-background">202<h2 id="run-work-in-the-background">

112 Jalankan pekerjaan di latar belakang203 Jalankan pekerjaan di latar belakang


140| Panggilan | Apa yang dilihat pengguna |231| Panggilan | Apa yang dilihat pengguna |

141| :- | :- |232| :- | :- |

142| `$.ui.status(text)` | Satu baris di bawah prompt yang tetap sampai Anda mengubahnya. Dimulai dengan `⚠` dan nama mod, seperti `⚠ my-mod: checks: 3 passing`. |233| `$.ui.status(text)` | Satu baris di bawah prompt yang tetap sampai Anda mengubahnya. Dimulai dengan `⚠` dan nama mod, seperti `⚠ my-mod: checks: 3 passing`. |

143| `$.ui.toast(text)` | Notifikasi toast di kanan atas, dengan nama mod di atas teks, yang hilang setelah beberapa detik |234| `$.ui.toast(text)` | Notifikasi toast dengan nama mod yang hilang setelah beberapa detik. Berupa kotak di kanan atas dalam [rendering layar penuh](/docs/id/fullscreen), dan satu baris di sebelah kanan di bawah prompt dalam renderer klasik. |

144| `$.ui.log(text)` | Baris redup dalam transkrip yang tidak dibaca Claude. Dimulai dengan `●` dan nama mod, seperti `● my-mod: build finished`. |235| `$.ui.log(text)` | Baris redup dalam transkrip yang tidak dibaca Claude. Dimulai dengan `●` dan nama mod, seperti `● my-mod: build finished`. |

145 236 

146<h3 id="start-a-turn-from-a-background-job">237<h3 id="start-a-turn-from-a-background-job">


159 Mengirim dan menerima pesan antar sesi250 Mengirim dan menerima pesan antar sesi

160</h2>251</h2>

161 252 

162Sebuah mod dapat mengirim pesan teks biasa ke sesi Anda yang lain atau ke salah satu subagent milik sesi ini, serta mengamati pesan yang masuk dan keluar. `$.session.send({ to, text })` mengirim satu pesan, dengan pengiriman yang sama seperti yang dilakukan tool SendMessage. `to` adalah `{ sessionId }` untuk sebuah sesi, `{ agentId }` untuk subagent dari `$.agent.list()`, atau alamat string asal pesan yang diterima. Panggilan ini selesai setelah pesan masuk antrean, dengan `{ isDelivered: true }`. Ketika tidak ada yang tersampaikan, panggilan selesai dengan `{ isDelivered: false, reason }`, dan `reason` menjelaskan alasannya.253Sebuah mod dapat mengirim pesan teks biasa ke sesi Anda yang lain, ke salah satu subagent milik sesi ini, atau ke rekan tim dalam [tim agent](/docs/id/agent-teams) miliknya. Mod juga dapat mengamati pesan yang masuk dan keluar.

254 

255Untuk mengirim satu pesan, panggil `$.session.send({ to, text })`, yang melakukan pengiriman yang sama seperti yang dilakukan tool SendMessage. Atur `to` berdasarkan siapa yang menerima pesan:

256 

257* **Sesi Anda yang lain**: `{ sessionId }`

258* **Subagent atau rekan tim**: `{ agentId }`, dengan id dari `$.agent.list()`

259* **Pengirim pesan yang Anda terima**: alamat string asal pesan tersebut

260 

261Panggilan ini selesai setelah pesan masuk antrean, dengan `{ isDelivered: true }`. Ketika tidak ada yang tersampaikan, panggilan selesai dengan `{ isDelivered: false, reason }`, dan `reason` menjelaskan alasannya.

163 262 

164Hook ini menjawab perintah `/ping`, yang [didaftarkan sebagai perintah](#add-a-command), dengan menanyakan status kepada sesi yang id-nya Anda ketik setelah perintah tersebut:263Hook ini menjawab perintah `/ping`, yang [didaftarkan sebagai perintah](#add-a-command), dengan menanyakan status kepada sesi yang id-nya Anda ketik setelah perintah tersebut:

165 264 

Details

281 Dapatkan definisi tipe untuk versi Anda281 Dapatkan definisi tipe untuk versi Anda

282</h3>282</h3>

283 283 

284Setiap kali Claude Code memuat atau memuat ulang mod dari direktori yang Anda teruskan ke `--plugin-dir`, atau mod [yang ditulis Claude untuk Anda](#ask-claude-for-a-mod), ia menulis file deklarasi TypeScript, berakhir dengan `.d.ts`, ke dalam `.claude-plugin/types/` di dalam direktori mod. Mereka menjelaskan peristiwa yang tepat, metode mods API, dan elemen dalam versi Claude Code yang Anda jalankan, sehingga editor Anda dapat autocomplete dan type-check hooks Anda. Untuk menelusuri deklarasi secara online, baca [`mods/types/claude-code.d.ts`](https://github.com/anthropics/claude-code/blob/main/mods/types/claude-code.d.ts) di repositori Claude Code, yang baris pertamanya menamai versi yang menulisnya. Direktori menyimpan file-file ini:284Ketika Claude Code memuat mod dari `--plugin-dir` dalam sesi interaktif, atau mod [yang ditulis Claude untuk Anda](#ask-claude-for-a-mod), ia menulis file deklarasi TypeScript ke dalam direktori `.claude-plugin/types/` milik mod. File-file tersebut menjelaskan peristiwa yang tepat, metode mods API, dan elemen dalam versi Claude Code yang Anda jalankan, sehingga editor Anda dapat autocomplete dan type-check hook Anda. Direktori menyimpan file-file ini:

285 285 

286| Path | Apa yang dideklarasikan |286| Path | Apa yang dideklarasikan |

287| :- | :- |287| :- | :- |

Details

145 145 

146Setelah Claude mengedit atau menulis file `.mdx`, baris redup dalam transkrip menyebutkan nama file tersebut. Tidak ada yang dicatat untuk jenis file lain, atau untuk panggilan yang ditolak atau gagal. Pandangan Claude tentang panggilan tidak berubah, karena hook mengembalikan hasil yang diterimanya.146Setelah Claude mengedit atau menulis file `.mdx`, baris redup dalam transkrip menyebutkan nama file tersebut. Tidak ada yang dicatat untuk jenis file lain, atau untuk panggilan yang ditolak atau gagal. Pandangan Claude tentang panggilan tidak berubah, karena hook mengembalikan hasil yang diterimanya.

147 147 

148Untuk mengubah panggilan, teruskan argumen yang diubah ke `next`. Untuk mencoba ulang panggilan, panggil `next(e)` lagi: hook yang melihat `isError` pada hasil pertama dapat menjalankan tool untuk kedua kalinya dan mengembalikan hasil tersebut. Untuk menjawab panggilan sendiri, kembalikan objek dengan bidang `result`, seperti `{ result: 'Skipped by my-mod' }`, tanpa memanggil `next`. Ketika Anda melakukan itu, tidak ada permintaan izin yang muncul dan tool tidak berjalan, jadi hasil yang Anda kembalikan adalah satu-satunya yang diketahui Claude tentang apa yang terjadi.148Hook Anda juga dapat mengubah panggilan, mencobanya ulang, menjawabnya sendiri, atau menahan hasilnya:

149 

150* **Ubah panggilan**: teruskan argumen yang diubah ke `next`.

151* **Coba ulang panggilan**: panggil `next(e)` lagi. Hook yang melihat `isError` pada hasil pertama dapat menjalankan tool untuk kedua kalinya dan mengembalikan hasil tersebut.

152* **Jawab panggilan sendiri**: kembalikan objek dengan bidang `result`, tanpa memanggil `next`, dan untuk tool bawaan, berikan `result` bentuk yang dimiliki hasil tool itu sendiri dalam [tipe untuk build Anda](/docs/id/plugins/mods/create#get-the-types-for-your-build). Tidak ada permintaan izin yang muncul dan tool tidak berjalan, jadi hasil yang Anda kembalikan adalah satu-satunya yang diketahui Claude tentang apa yang terjadi.

153* **Tahan hasil dari Claude**: kembalikan `{ deny: reason }` setelah `await next(e)`. Claude membaca alasan Anda sebagai pengganti apa yang dikembalikan `next`. Ketika tool sudah berjalan, deny menahan hasilnya dari Claude dan tidak membatalkan apa pun yang telah dilakukan tool. Ketika tool berjalan dan berhasil, alasan tersebut mengikuti catatan seperti `Bash ran, and a plugin withheld its result:`.

149 154 

150Hook dalam [pengaturan terkelola](/docs/id/server-managed-settings) organisasi Anda berjalan sebelum hook `tool.call` mod mana pun, dan blokir dari salah satunya bersifat final.155Hook dalam [pengaturan terkelola](/docs/id/server-managed-settings) organisasi Anda berjalan sebelum hook `tool.call` mod mana pun, dan blokir dari salah satunya bersifat final.

151 156 


225 230 

226| Untuk melakukan ini | Kembalikan ini |231| Untuk melakukan ini | Kembalikan ini |

227| :- | :- |232| :- | :- |

228| Tulis ulang prompt. Pesan dalam transkrip menampilkan teks baru. | `next({ ...e, text: newText })` |233| Tulis ulang prompt. Transkrip dan [riwayat prompt](/docs/id/interactive-mode#command-history) Anda menampilkan teks baru. | `next({ ...e, text: newText })` |

229| Tambahkan teks yang hanya dibaca Claude, setelah prompt | `next({ ...e, context: [...(e.context ?? []), extraText] })` |234| Tambahkan teks yang hanya dibaca Claude, setelah prompt | `next({ ...e, context: [...(e.context ?? []), extraText] })` |

230| Hentikan prompt agar tidak dikirim | `{ drop: 'the reason' }` |235| Hentikan prompt agar tidak dikirim | `{ drop: 'the reason' }` |

231 236 


245 250 

246Ketika Anda mengirim prompt seperti `open a PR for this change`, pesan Anda terlihat sama dalam transkrip, dan Claude juga membaca baris seperti `Current branch: feature/auth` setelahnya. Prompt yang tidak menyebutkan pull request diteruskan tanpa perubahan, dan `git` tidak berjalan.251Ketika Anda mengirim prompt seperti `open a PR for this change`, pesan Anda terlihat sama dalam transkrip, dan Claude juga membaca baris seperti `Current branch: feature/auth` setelahnya. Prompt yang tidak menyebutkan pull request diteruskan tanpa perubahan, dan `git` tidak berjalan.

247 252 

248Untuk menghentikan prompt, kembalikan `{ drop: 'the reason' }` tanpa memanggil `next`. Jika hook Anda mengembalikan `drop` setelah panggilan `next(e)`-nya meloloskan prompt, giliran tetap berjalan, dan hook [gagal](#handle-a-hook-that-fails) dengan pesan yang menyertakan `a drop after its next() was answered`.253Untuk menghentikan prompt, kembalikan `{ drop: 'the reason' }` tanpa memanggil `next`. Teks tersebut kembali ke input prompt pengguna, dan mereka melihat `Prompt dropped by a hook:` diikuti alasan Anda, jadi tujukan alasan tersebut kepada mereka. Jika hook Anda mengembalikan `drop` setelah panggilan `next(e)`-nya meloloskan prompt, giliran tetap berjalan, dan hook [gagal](#handle-a-hook-that-fails) dengan pesan yang menyertakan `a drop after its next() was answered`.

249 254 

250[Peristiwa lain](/docs/id/plugins/mods/reference#prompts-and-what-claude-reads) mencakup sisa apa yang dibaca Claude: `prompt.section` untuk setiap bagian system prompt, `prompt.context` untuk konteks yang dikirim dengan pesan pertama, dan `skill.prompt` untuk teks skill. Teks dari hook ini yang berubah antar permintaan [membatalkan cache prompt](/docs/id/prompt-caching).255[Peristiwa lain](/docs/id/plugins/mods/reference#prompts-and-what-claude-reads) mencakup sisa apa yang dibaca Claude: `prompt.section` untuk setiap bagian system prompt, `prompt.context` untuk konteks yang dikirim dengan pesan pertama, dan `skill.prompt` untuk teks skill. Teks dari hook ini yang berubah antar permintaan [membatalkan cache prompt](/docs/id/prompt-caching).

251 256 


281 286 

282`result.usage` menyimpan hitungan token yang dilaporkan Claude API untuk permintaan, ditambah `model` yang menjawab: `input_tokens`, `output_tokens`, `cache_read_input_tokens`, dan `cache_creation_input_tokens`. Hook juga berjalan untuk permintaan subagent, jadi periksa `e.agentId` ketika Anda hanya menginginkan percakapan utama.287`result.usage` menyimpan hitungan token yang dilaporkan Claude API untuk permintaan, ditambah `model` yang menjawab: `input_tokens`, `output_tokens`, `cache_read_input_tokens`, dan `cache_creation_input_tokens`. Hook juga berjalan untuk permintaan subagent, jadi periksa `e.agentId` ketika Anda hanya menginginkan percakapan utama.

283 288 

289Untuk melihat panggilan tool yang dijalankan sendiri oleh API selama permintaan, seperti panggilan ke [tool advisor](/docs/id/advisor), baca `result.serverToolUses`. Claude Code tidak menjalankan panggilan ini, sehingga tidak ada hook `tool.call` atau `tool.check` yang diaktifkan untuk panggilan tersebut. Bidang ini tidak ada ketika respons tidak memiliki panggilan semacam itu, dan memerlukan Claude Code v2.1.290 atau yang lebih baru.

290 

284<h3 id="hook-the-settings-hook-events">291<h3 id="hook-the-settings-hook-events">

285 Tangani peristiwa hook pengaturan292 Tangani peristiwa hook pengaturan

286</h3>293</h3>


369* **`tool.check`**: kembalikan `{ decision: 'deny', reason: 'the reason' }`376* **`tool.check`**: kembalikan `{ decision: 'deny', reason: 'the reason' }`

370* **`plugin.register`**: kembalikan `{ refuse: 'the reason' }`, seperti yang ditunjukkan [Tolak mod ketika pemeriksaan Anda gagal](/docs/id/plugins/mods/admin#refuse-mods-when-your-check-fails)377* **`plugin.register`**: kembalikan `{ refuse: 'the reason' }`, seperti yang ditunjukkan [Tolak mod ketika pemeriksaan Anda gagal](/docs/id/plugins/mods/admin#refuse-mods-when-your-check-fails)

371 378 

379Pada `tool.call`, `deny` yang dikembalikan setelah `next` diselesaikan [menahan hasil dari Claude](#guard-or-change-a-tool-call).

380 

372<h2 id="next-steps">381<h2 id="next-steps">

373 Langkah berikutnya382 Langkah berikutnya

374</h2>383</h2>

Details

10 10 

11Peta ini menunjukkan di mana mod dapat menggambar dalam sesi terminal:11Peta ini menunjukkan di mana mod dapat menggambar dalam sesi terminal:

12 12 

13<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5fda26b6609c62b68c6f9e528c1590ea" className="dark:hidden" alt="Peta sesi terminal Claude Code. Mod dapat menambahkan panel sebagai sidebar di sebelah kanan, toast di sudut kanan atas transkrip, baris log dalam transkrip, pita di atas prompt, dan baris status di bawah prompt. Mod dapat menggambar ulang pesan, baris panggilan tool, dan spinner. Prompt adalah milik Claude Code sendiri." width="600" height="336" data-path="images/mods-screen-map.svg" />13<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5fda26b6609c62b68c6f9e528c1590ea" className="dark:hidden" alt="Peta sesi terminal Claude Code dalam rendering layar penuh. Mod dapat menambahkan panel sebagai sidebar di sebelah kanan, toast di sudut kanan atas transkrip, baris log dalam transkrip, pita di atas prompt, dan baris status di bawah prompt. Mod dapat menggambar ulang pesan, baris panggilan tool, dan spinner. Prompt adalah milik Claude Code sendiri." width="600" height="336" data-path="images/mods-screen-map.svg" />

14 14 

15<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map-dark.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5b4161581a1bd2c0450b0c8b57bc1225" className="hidden dark:block" alt="Peta sesi terminal Claude Code. Mod dapat menambahkan panel sebagai sidebar di sebelah kanan, toast di sudut kanan atas transkrip, baris log dalam transkrip, pita di atas prompt, dan baris status di bawah prompt. Mod dapat menggambar ulang pesan, baris panggilan tool, dan spinner. Prompt adalah milik Claude Code sendiri." width="600" height="336" data-path="images/mods-screen-map-dark.svg" />15<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map-dark.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5b4161581a1bd2c0450b0c8b57bc1225" className="hidden dark:block" alt="Peta sesi terminal Claude Code dalam rendering layar penuh. Mod dapat menambahkan panel sebagai sidebar di sebelah kanan, toast di sudut kanan atas transkrip, baris log dalam transkrip, pita di atas prompt, dan baris status di bawah prompt. Mod dapat menggambar ulang pesan, baris panggilan tool, dan spinner. Prompt adalah milik Claude Code sendiri." width="600" height="336" data-path="images/mods-screen-map-dark.svg" />

16 16 

17Di terminal yang lebih sempit, panel duduk di atas prompt daripada di samping transkrip.17Di terminal yang lebih sempit, panel duduk di atas prompt daripada di samping transkrip.

18 18 


324| `title` | Label tab panel saat lebih dari satu panel terbuka |324| `title` | Label tab panel saat lebih dari satu panel terbuka |

325| `focus` | Permintaan [fokus keyboard](#know-which-keys-your-mod-can-receive) |325| `focus` | Permintaan [fokus keyboard](#know-which-keys-your-mod-can-receive) |

326| `closeOnEscape` | Membuat Esc menutup panel |326| `closeOnEscape` | Membuat Esc menutup panel |

327| `holdToasts` | Menahan toast, pemberitahuan kecil dari [`$.ui.toast`](/docs/id/plugins/mods/api#show-something-without-starting-a-turn), sampai panel ditutup |327| `holdToasts` | Di terminal, menahan toast selama panel ini yang sedang ditampilkan. Lihat [Tahan toast di balik dialog](#hold-toasts-behind-a-dialog). |

328| `rows` | Tinggi untuk diminta saat panel duduk di atas prompt. Default adalah sepertiga dari ruang. |328| `rows` | Tinggi untuk diminta saat panel duduk di atas prompt. Default adalah sepertiga dari ruang. |

329| `columns` | Lebar untuk diminta saat panel duduk di samping transkrip |329| `columns` | Lebar untuk diminta saat panel duduk di samping transkrip |

330 330 


337 337 

338Untuk membiarkan perintah membuka panel saat Claude bekerja, tambahkan `immediate: true` saat Anda [mendaftarkan perintah](/docs/id/plugins/mods/api#add-a-command). Tanpanya, perintah yang diketik selama giliran menunggu giliran berakhir.338Untuk membiarkan perintah membuka panel saat Claude bekerja, tambahkan `immediate: true` saat Anda [mendaftarkan perintah](/docs/id/plugins/mods/api#add-a-command). Tanpanya, perintah yang diketik selama giliran menunggu giliran berakhir.

339 339 

340<h4 id="hold-toasts-behind-a-dialog">

341 Tahan toast di balik dialog

342</h4>

343 

344Teruskan `holdToasts: true` ke `$.ui.open` ketika panel adalah dialog yang dijawab pengguna lalu ditinggalkan, sehingga toast tidak muncul saat mereka memutuskan. Di terminal, penahanan berlangsung selama panel tersebut yang sedang ditampilkan, dan toast yang dimunculkan dalam waktu itu menunggu sampai penahanan berakhir.

345 

346Claude Code menahan toast dari mod lain dan notifikasi singkatnya sendiri, serta toast yang dimunculkan mod Anda dengan [`$.ui.toast`](/docs/id/plugins/mods/api#show-something-without-starting-a-turn). Jangan gunakan bidang ini pada panel yang tetap terbuka, sehingga pengguna tetap melihatnya.

347 

340<h4 id="when-a-pane-waits-for-a-wider-terminal">348<h4 id="when-a-pane-waits-for-a-wider-terminal">

341 Ketika panel menunggu terminal yang lebih lebar349 Ketika panel menunggu terminal yang lebih lebar

342</h4>350</h4>

Details

64| :- | :- | :- |64| :- | :- | :- |

65| [`tool.call`](/docs/id/plugins/mods/events#guard-or-change-a-tool-call) | Sebuah tool akan dijalankan | `next(e)`, `{ deny: reason }`, atau `{ result }` |65| [`tool.call`](/docs/id/plugins/mods/events#guard-or-change-a-tool-call) | Sebuah tool akan dijalankan | `next(e)`, `{ deny: reason }`, atau `{ result }` |

66| [`tool.check`](/docs/id/plugins/mods/events#where-settings-hooks-run-in-the-order) | Claude Code memutuskan apakah panggilan tool boleh dijalankan, setelah hook `tool.call` dan `PreToolUse`. `next(e)` resolve ke keputusan yang dicapai oleh aturan, mode izin, dan hook-hook tersebut. | `{ decision }`, yaitu `allow`, `ask`, atau `deny` |66| [`tool.check`](/docs/id/plugins/mods/events#where-settings-hooks-run-in-the-order) | Claude Code memutuskan apakah panggilan tool boleh dijalankan, setelah hook `tool.call` dan `PreToolUse`. `next(e)` resolve ke keputusan yang dicapai oleh aturan, mode izin, dan hook-hook tersebut. | `{ decision }`, yaitu `allow`, `ask`, atau `deny` |

67| `tool.describe` | Sekali untuk setiap tool, saat deskripsinya pertama kali dikirim ke Claude | `{ description }`, secara opsional dengan `isDeferred` diatur ke `true` untuk menempatkan tool di balik [pencarian tool](/docs/id/mcp#scale-with-mcp-tool-search) atau `false` untuk memuatnya sejak awal |67| `tool.describe` | Sekali untuk setiap tool, saat deskripsinya pertama kali dikirim ke Claude. Sekali lagi untuk tool MCP saat Claude memuatnya melalui [pencarian tool](/docs/id/mcp#scale-with-mcp-tool-search), dengan `e.description` diatur ke teks yang dibaca Claude untuk tool yang dimuat tersebut. | `{ description }`, secara opsional dengan `isDeferred` diatur ke `true` untuk menempatkan tool di balik pencarian tool atau `false` untuk memuatnya sejak awal |

68 68 

69<h4 id="agent-and-organization-fields-on-tool-check">69<h4 id="agent-and-organization-fields-on-tool-check">

70 Field agent dan organisasi pada `tool.check`70 Field agent dan organisasi pada `tool.check`


133| `session.end` | Sesi berakhir, atau `/clear`, `/resume`, atau `/branch` dijalankan. `e.reason` adalah `clear`, `resume`, `logout`, `prompt_input_exit`, atau `other`. `/branch` melaporkan `resume`. | `next(e)` |133| `session.end` | Sesi berakhir, atau `/clear`, `/resume`, atau `/branch` dijalankan. `e.reason` adalah `clear`, `resume`, `logout`, `prompt_input_exit`, atau `other`. `/branch` melaporkan `resume`. | `next(e)` |

134| `session.compact` | Percakapan akan dipadatkan | `{ skip: reason }` |134| `session.compact` | Percakapan akan dipadatkan | `{ skip: reason }` |

135| [`session.receive`](/docs/id/plugins/mods/api#send-and-receive-messages-between-sessions), [`session.send`](/docs/id/plugins/mods/api#send-and-receive-messages-between-sessions) | Sebuah pesan tiba dari, atau akan dikirim ke, agent atau sesi lain. Lihat [Mengirim dan menerima pesan antarsesi](/docs/id/plugins/mods/api#send-and-receive-messages-between-sessions). | `{ consumed: reason }` untuk `receive`, `{ isDelivered: false, reason }` untuk `send` |135| [`session.receive`](/docs/id/plugins/mods/api#send-and-receive-messages-between-sessions), [`session.send`](/docs/id/plugins/mods/api#send-and-receive-messages-between-sessions) | Sebuah pesan tiba dari, atau akan dikirim ke, agent atau sesi lain. Lihat [Mengirim dan menerima pesan antarsesi](/docs/id/plugins/mods/api#send-and-receive-messages-between-sessions). | `{ consumed: reason }` untuk `receive`, `{ isDelivered: false, reason }` untuk `send` |

136| `session.append` | Sekali untuk setiap baris yang disimpan percakapan, seperti prompt, blok respons, hasil tool, atau pemberitahuan, sebelum disimpan | `next({ ...e, message })` untuk menulis ulang `content` baris tersebut |136| `session.append` | Sekali untuk setiap baris yang disimpan percakapan, seperti prompt, blok respons, hasil tool, atau pemberitahuan, sebelum disimpan | `next({ ...e, message })` dengan `message.content` yang diubah, untuk menulis ulang blok teks baris tersebut atau `content` dari blok `tool_result` di dalamnya |

137| `session.attach`, `session.detach` | Aplikasi lain terhubung ke atau terputus dari sesi | `next(e)` |137| `session.attach`, `session.detach` | Aplikasi lain terhubung ke atau terputus dari sesi | `next(e)` |

138| `session.measure` | Setelah setiap giliran, dan saat persentase penggunaan batas paket berubah | `next(e)` |138| `session.measure` | Setelah setiap giliran, dan saat persentase penggunaan batas paket berubah | `next(e)` |

139 139 


209| [`$.ui`](/docs/id/plugins/mods/interface#pick-where-to-draw) | `resolve`, `invalidate`, `open`, `close`, `panes`, `focus`, `scroll`, `toast`, `status`, `log`, `notice`, `ask`, `copy`, `selection`, `blit` |209| [`$.ui`](/docs/id/plugins/mods/interface#pick-where-to-draw) | `resolve`, `invalidate`, `open`, `close`, `panes`, `focus`, `scroll`, `toast`, `status`, `log`, `notice`, `ask`, `copy`, `selection`, `blit` |

210| [`$.command`](/docs/id/plugins/mods/api#add-a-command) | `register`, `run`, `list` |210| [`$.command`](/docs/id/plugins/mods/api#add-a-command) | `register`, `run`, `list` |

211| [`$.tool`](/docs/id/plugins/mods/api#add-a-tool) | `register`, `call`, `check`, `list` |211| [`$.tool`](/docs/id/plugins/mods/api#add-a-tool) | `register`, `call`, `check`, `list` |

212| `$.agent` | `register`, `spawn`, `list` |212| `$.agent` | `register`, `spawn`, `list`. `list()` mengembalikan subagent dan rekan tim (teammate) sesi ini, masing-masing dengan `status` berupa `pending`, `running`, `waiting`, `idle`, `completed`, `failed`, atau `killed`, di mana `idle` dan `waiting` memerlukan Claude Code v2.1.289 atau yang lebih baru. |

213| [`$.model`](/docs/id/plugins/mods/api#call-a-model) | `complete`, `fork`, `classify` |213| [`$.model`](/docs/id/plugins/mods/api#call-a-model) | `complete`, `fork`, `classify` |

214| [`$.prompt`](/docs/id/plugins/mods/api#start-a-turn-from-a-background-job) | `submit`, `read`, `fill`, `suggest`, `compose`. Claude membaca teks dari `submit({ text })` setelah sebuah kalimat yang menyebut mod Anda sebagai pengirim. `submit({ text, asUser: true })` mengirim teks sebagai kata-kata pengguna sendiri, tanpa kalimat tersebut. |214| [`$.prompt`](/docs/id/plugins/mods/api#start-a-turn-from-a-background-job) | `submit`, `read`, `fill`, `suggest`, `compose`. Claude membaca teks dari `submit({ text })` setelah sebuah kalimat yang menyebut mod Anda sebagai pengirim. `submit({ text, asUser: true })` mengirim teks sebagai kata-kata pengguna sendiri, tanpa kalimat tersebut. |

215| `$.turn` | `abort` |215| `$.turn` | `abort` |


317| Timeout `$.process.run` | 30 detik secara default, paling lama 10 menit |317| Timeout `$.process.run` | 30 detik secara default, paling lama 10 menit |

318| `maxTokens` `$.model.complete` | 1024 secara default, hingga 64.000 atau batas output model |318| `maxTokens` `$.model.complete` | 1024 secara default, hingga 64.000 atau batas output model |

319| `$.fs.read` dan `$.fs.write` | 4 MiB untuk satu file |319| `$.fs.read` dan `$.fs.write` | 4 MiB untuk satu file |

320| Alasan `drop` dari hook atau alasan `deny` dari `config.set` | 4.096 karakter. Bagian akhir dari alasan yang lebih panjang dipotong, dan drop atau deny tetap berlaku. Pemotongan ini memerlukan Claude Code v2.1.292 atau yang lebih baru, dan pada versi sebelumnya hook tersebut [gagal](/docs/id/plugins/mods/events#handle-a-hook-that-fails) sebagai gantinya. |

320| Teks dalam satu tree | 100.000 karakter pertama yang digambar |321| Teks dalam satu tree | 100.000 karakter pertama yang digambar |

321| `language` atau `path` dari `Code`, `value` dari opsi `Select`, atau `module` dari `Client` | 10.000 karakter. Jika salah satunya lebih panjang, Claude Code [menggambar versi situsnya sendiri](/docs/id/plugins/mods/interface#build-a-tree-from-elements). |322| `language` atau `path` dari `Code`, `value` dari opsi `Select`, atau `module` dari `Client` | 10.000 karakter. Jika salah satunya lebih panjang, Claude Code [menggambar versi situsnya sendiri](/docs/id/plugins/mods/interface#build-a-tree-from-elements). |

322| `href` dari `Link` | 2.048 karakter. `href` yang lebih panjang membuat seluruh tree tidak digambar. |323| `href` dari `Link` | 2.048 karakter. `href` yang lebih panjang membuat seluruh tree tidak digambar. |


325| Penggambaran ulang `$.ui.invalidate('ui.render')` | Dibatasi hingga 10 per detik, atau 30 di terminal untuk panel yang terlihat, band yang diperluas, dan baris petunjuk di bawah prompt. Panggilan yang datang lebih cepat digabungkan. |326| Penggambaran ulang `$.ui.invalidate('ui.render')` | Dibatasi hingga 10 per detik, atau 30 di terminal untuk panel yang terlihat, band yang diperluas, dan baris petunjuk di bawah prompt. Panggilan yang datang lebih cepat digabungkan. |

326| `$.ui.toast` | Ditampilkan selama 4 detik kecuali Anda meneruskan `{ timeoutMs }` |327| `$.ui.toast` | Ditampilkan selama 4 detik kecuali Anda meneruskan `{ timeoutMs }` |

327| Panel yang dibuka tanpa diminta pengguna | Ditempatkan mulai dari 144 kolom terminal, 110 setelah pengguna pernah membukanya sekali |328| Panel yang dibuka tanpa diminta pengguna | Ditempatkan mulai dari 144 kolom terminal, 110 setelah pengguna pernah membukanya sekali |

329| Cakupan, seperti fungsi, blok, dan loop, yang bersarang satu di dalam yang lain dalam satu file modul hook | 2.000 |

328| Nama perintah, tool, tipe subagent, dan panel | Huruf, digit, `_`, dan `-`, hingga 64 karakter |330| Nama perintah, tool, tipe subagent, dan panel | Huruf, digit, `_`, dan `-`, hingga 64 karakter |

329| Satu tes `claude plugin test` | 5 detik kecuali tes tersebut menetapkan `timeoutMs` |331| Satu tes `claude plugin test` | 5 detik kecuali tes tersebut menetapkan `timeoutMs` |

330 332 

Details

110* `returned neither { value } nor { deny }`: stub untuk panggilan mods API mengembalikan nilai telanjang, yang membuat tes gagal110* `returned neither { value } nor { deny }`: stub untuk panggilan mods API mengembalikan nilai telanjang, yang membuat tes gagal

111* `no implementation for` diikuti oleh nama: mod Anda membuat panggilan itu dan tidak ada stub yang menjawabnya111* `no implementation for` diikuti oleh nama: mod Anda membuat panggilan itu dan tidak ada stub yang menjawabnya

112 112 

113Kit juga mengekspor mock dalam memori yang menjawab seluruh namespace untuk Anda. `mock.clock(on)` menjawab [`$.clock`](/docs/id/plugins/mods/api#run-work-in-the-background), `mock.store(on, { count: 7 })` menjawab `$.store` dari toko yang dimulai dengan entri tersebut, dan `mock.env(on, { CI: 'true' })` menjawab `$.env.get` dari variabel tersebut. `mock.clock` mengembalikan jam mock yang tes Anda maju, sehingga tes timer tidak menunggu. `mock.store` mengembalikan tidak ada, jadi untuk memeriksa apa yang disimpan mod Anda, tulis dua stub `store` sendiri seperti [tes gambar](#test-a-drawing) lakukan.113Kit juga mengekspor mock siap pakai untuk jam, toko, environment variable, dan baris yang ditambahkan ke percakapan:

114 

115* **`mock.clock(on)`**: menjawab [`$.clock`](/docs/id/plugins/mods/api#run-work-in-the-background) dan mengembalikan jam mock yang dimajukan oleh tes Anda, sehingga tes timer tidak menunggu.

116* **`mock.store(on, { count: 7 })`**: menjawab `$.store` dari toko yang dimulai dengan entri tersebut. Ini tidak mengembalikan apa pun, jadi untuk memeriksa apa yang disimpan mod Anda, tulis dua stub `store` sendiri seperti yang dilakukan [tes gambar](#test-a-drawing).

117* **`mock.env(on, { CI: 'true' })`**: menjawab `$.env.get` dari variabel tersebut.

118* **`mock.session(on)`**: mengembalikan sesi mock yang metode `appended()`-nya mencantumkan baris yang ditambahkan mod Anda dengan [`$.session.append`](/docs/id/plugins/mods/reference#session), yang terlama terlebih dahulu; ini memerlukan Claude Code v2.1.293 atau lebih baru.

114 119 

115<h3 id="follow-the-test-kit’s-rules">120<h3 id="follow-the-test-kit’s-rules">

116 Ikuti aturan test kit121 Ikuti aturan test kit


168 Lihat apa yang dikembalikan stub173 Lihat apa yang dikembalikan stub

169</h3>174</h3>

170 175 

171Setiap panggilan mods API yang dibuat mod Anda dalam tes memerlukan stub yang menjawab di tempat Claude Code, kecuali beberapa yang dijawab kit sendiri: panggilan [`$.ui.invalidate`](/docs/id/plugins/mods/interface#redraw-when-something-changes) dan [`$.state`](/docs/id/plugins/mods/interface#keep-state). Untuk panggilan `$.clock`, gunakan `mock.clock(on)`, atau `$.clock.now()` mod Anda gagal dengan `no implementation for clock.now`.176Setiap panggilan mods API yang dibuat mod Anda dalam tes memerlukan stub yang menjawab di tempat Claude Code, kecuali beberapa yang dijawab kit sendiri: panggilan [`$.ui.invalidate`](/docs/id/plugins/mods/interface#redraw-when-something-changes), [`$.state`](/docs/id/plugins/mods/interface#keep-state), dan `$.session.append`. Untuk panggilan `$.clock`, gunakan `mock.clock(on)`, atau `$.clock.now()` mod Anda gagal dengan `no implementation for clock.now`.

172 177 

173Tabel ini mencantumkan yang paling sering digunakan mod. Kolom pertama adalah panggilan yang dibuat mod Anda atau peristiwa yang dilewatkan dengan `next(e)`. Kolom kedua adalah fungsi untuk diteruskan ke `on` di bawah nama itu, jadi baris `$.store.get` menjadi `on('store.get', ($, e) => ({ value: saved.get(e.key) }))`. `'...'` dalam stub menandai teks untuk Anda isi:178Tabel ini mencantumkan yang paling sering digunakan mod. Kolom pertama adalah panggilan yang dibuat mod Anda atau peristiwa yang dilewatkan dengan `next(e)`. Kolom kedua adalah fungsi untuk diteruskan ke `on` di bawah nama itu, jadi baris `$.store.get` menjadi `on('store.get', ($, e) => ({ value: saved.get(e.key) }))`. `'...'` dalam stub menandai teks untuk Anda isi:

174 179 

Details

116 116 

117Atur atau ubah nilainya. Akhir baris menyebutkan entri `pluginConfigs`-nya di `settings.json`.117Atur atau ubah nilainya. Akhir baris menyebutkan entri `pluginConfigs`-nya di `settings.json`.

118 118 

119<h3 id="code-nested-too-deep-to-scan-more-than-2000-scopes">

120 `code nested too deep to scan: more than 2000 scopes`

121</h3>

122 

123Baris dimulai dengan nama mod, kemudian `hooks module did not load:`, file, dan `code nested too deep to scan: more than 2000 scopes`. File dalam modul hook tidak dapat menyarangkan scope, seperti fungsi, blok, dan loop, lebih dari [2.000 tingkat](/docs/id/plugins/mods/reference#limits). [`claude plugin validate`](/docs/id/plugins/mods/create#check-what-claude-code-reads-from-your-mod) melaporkan alasan yang sama.

124 

125Tulis ulang kode agar scope-nya tidak bersarang terlalu dalam.

126 

119<h3 id="no-mod-loads-in-a-directory-you-opened-for-the-first-time">127<h3 id="no-mod-loads-in-a-directory-you-opened-for-the-first-time">

120 Tidak ada mod yang dimuat di direktori yang Anda buka untuk pertama kalinya128 Tidak ada mod yang dimuat di direktori yang Anda buka untuk pertama kalinya

121</h3>129</h3>


132 140 

133Mulai tanpa flag.141Mulai tanpa flag.

134 142 

143<h3 id="claude-code-stops-asking-to-enable-hot-reloading">

144 Claude Code berhenti menanyakan untuk mengaktifkan hot reloading

145</h3>

146 

147Claude menulis mod dalam sesi interaktif, tidak ada yang dimuat, dan Claude Code tidak lagi menanyakan [apakah akan mengaktifkan hot reloading](/docs/id/plugins/mods/create#ask-claude-for-a-mod). Jika pertanyaan berakhir tiga kali tanpa jawaban yang dipilih, hot reloading tetap mati. Misalnya, pertanyaan berakhir seperti itu ketika Anda mengatur [`askUserQuestionTimeout`](/docs/id/settings-reference#askuserquestiontimeout) dan waktunya habis sebelum Anda menjawab. Pengaturan itu berlaku di sini karena Claude Code bertanya dalam [dialog pertanyaan yang sama yang digunakan `AskUserQuestion`](/docs/id/tools-reference#question-auto-continue-timeout). Pertanyaan yang Anda tutup sendiri tidak dihitung dalam tiga kali tersebut.

148 

149Untuk menjalankan mod, [salin direktorinya keluar dari folder mods](/docs/id/plugins/mods/create#use-the-mod-in-other-sessions), lalu di shell Anda mulai sesi baru dengan `--plugin-dir`, seperti `claude --plugin-dir ~/mods/git-branch`.

150 

135<h2 id="a-hook-is-skipped-or-a-mod-is-unloaded">151<h2 id="a-hook-is-skipped-or-a-mod-is-unloaded">

136 Hook dilewati atau mod dibongkar152 Hook dilewati atau mod dibongkar

137</h2>153</h2>


209 Gambar tidak muncul atau merespons225 Gambar tidak muncul atau merespons

210</h2>226</h2>

211 227 

212Mod dimuat, dan pane, band, atau kontrol tidak berperilaku seperti yang Anda harapkan.228Mod dimuat, dan pane, band, toast, atau kontrol tidak berperilaku seperti yang Anda harapkan.

213 229 

214<h3 id="a-pane-or-band-is-empty-or-shows-claude-code’s-usual-content">230<h3 id="a-pane-or-band-is-empty-or-shows-claude-code’s-usual-content">

215 Pane atau band kosong atau menampilkan konten biasa Claude Code231 Pane atau band kosong atau menampilkan konten biasa Claude Code


247 263 

248Buka pane dari perintah atau tombol, atau periksa hasil `isPlaced` panggilan. Lihat [Open a pane at the right time](/docs/id/plugins/mods/interface#open-a-pane-at-the-right-time).264Buka pane dari perintah atau tombol, atau periksa hasil `isPlaced` panggilan. Lihat [Open a pane at the right time](/docs/id/plugins/mods/interface#open-a-pane-at-the-right-time).

249 265 

266<h3 id="a-toast-doesn’t-appear">

267 Toast tidak muncul

268</h3>

269 

270Mod Anda memanggil [`$.ui.toast`](/docs/id/plugins/mods/api#show-something-without-starting-a-turn) dalam sesi terminal interaktif dan Anda tidak melihat toast tersebut. Untuk memastikan bahwa panggilan tersebut berjalan, cari di [debug log](#read-the-debug-log) baris yang berisi nama mod Anda dan teks toast, seperti `$.ui.toast (first-mod): build finished`. Kemudian periksa penyebab seperti berikut:

271 

272* **Baris untuk panggilan tersebut tidak ada**: cari baris yang menjelaskan mengapa Claude Code menolak panggilan tersebut, seperti `first-mod: $.ui.toast dropped: timeoutMs is a whole number of ms, 1 to 60000`.

273* **Sebuah pane sedang menahan toast**: mod Anda atau mod lain meneruskan [`holdToasts`](/docs/id/plugins/mods/interface#hold-toasts-behind-a-dialog) saat membuka pane yang sedang ditampilkan. Tutup pane tersebut untuk mengakhiri penahanan. Jika pane tersebut milik Anda dan memang dimaksudkan untuk tetap terbuka, hapus `holdToasts` dari panggilan `$.ui.open`-nya dan buka pane tersebut lagi.

274* **Toast berada di bawah prompt**: di [renderer klasik](/docs/id/fullscreen#enable-fullscreen-rendering), lihat di sebelah kanan di bawah prompt. Toast di sana berupa satu baris yang diawali dengan nama mod, bukan kotak di kanan atas.

275* **Mod Anda memunculkan toast yang lebih baru**: di renderer klasik, toast yang lebih baru dari mod Anda dapat menggantikan toast yang sedang ditampilkan atau sedang menunggu untuk ditampilkan. Debug log memiliki baris lain untuk toast yang lebih lama, yang diakhiri dengan `gave way, cut short` jika toast tersebut sedang ditampilkan, atau `gave way, unseen` jika toast tersebut tidak pernah muncul. Untuk menampilkan kedua pesan, letakkan keduanya dalam satu toast.

276* **Waktu toast habis sebelum digambar**: dalam rendering fullscreen, Claude Code menggambar paling banyak tiga toast sekaligus, sehingga waktu sebuah toast dapat habis sebelum toast tersebut digambar. Debug log memiliki baris lain untuk toast tersebut, yang diakhiri dengan `left the stack, never drawn`. Ketika mod Anda memunculkan beberapa toast sekaligus, letakkan pesan-pesannya dalam satu toast.

277 

278Sebelum v2.1.290, Claude Code membuang toast yang dimunculkan dalam dua detik sejak toast terakhir yang ditampilkannya untuk mod Anda, dan baris debug log untuk toast yang dibuang tersebut mengatakan `within 2000ms of the last; dropped`.

279 

250<h3 id="hotkeys-do-nothing">280<h3 id="hotkeys-do-nothing">

251 Hotkey tidak melakukan apa pun281 Hotkey tidak melakukan apa pun

252</h3>282</h3>

Details

110}110}

111```111```

112 112 

113Di shell Anda, jalankan `claude plugin validate .` di repositori untuk memeriksa file sebelum Anda mendorong.113Di shell Anda, jalankan `claude plugin validate .` di repositori sebelum Anda mendorong. Untuk hal-hal yang diperiksa oleh perintah tersebut, lihat [Validasi direktori](/docs/id/plugins/cli-reference#validate-a-directory).

114 114 

115[Buat marketplace](/docs/id/plugins/create-marketplace) mencakup tata letak dengan beberapa plugin di satu repositori.115[Buat marketplace](/docs/id/plugins/create-marketplace) mencakup tata letak dengan beberapa plugin di satu repositori.

116 116 


129* Tambahkan marketplace sekali: `claude plugin marketplace add your-org/your-marketplace`, di mana argumennya adalah shorthand GitHub `owner/repo`, URL, atau jalur129* Tambahkan marketplace sekali: `claude plugin marketplace add your-org/your-marketplace`, di mana argumennya adalah shorthand GitHub `owner/repo`, URL, atau jalur

130* Pasang plugin: `claude plugin install deploy-helper@your-marketplace`130* Pasang plugin: `claude plugin install deploy-helper@your-marketplace`

131* Atau lakukan keduanya dari dalam sesi: `/plugin install deploy-helper --marketplace your-org/your-marketplace`. Memerlukan Claude Code v2.1.275 atau lebih baru. Lihat [Tambahkan marketplace dan pasang dalam satu perintah](/docs/id/plugins/install#add-a-marketplace-and-install-in-one-command)131* Atau lakukan keduanya dari dalam sesi: `/plugin install deploy-helper --marketplace your-org/your-marketplace`. Memerlukan Claude Code v2.1.275 atau lebih baru. Lihat [Tambahkan marketplace dan pasang dalam satu perintah](/docs/id/plugins/install#add-a-marketplace-and-install-in-one-command)

132* Atau lakukan keduanya dari shell dalam satu perintah: `claude plugin install deploy-helper --marketplace your-org/your-marketplace`. Memerlukan Claude Code v2.1.292 atau lebih baru

132 133 

133<h3 id="ship-updates-to-users">134<h3 id="ship-updates-to-users">

134 Kirim pembaruan kepada pengguna135 Kirim pembaruan kepada pengguna

Details

163 `Invalid marketplace source format`163 `Invalid marketplace source format`

164</h3>164</h3>

165 165 

166Anda menjalankan `/plugin marketplace add <source>` atau `claude plugin marketplace add <source>`, dan Claude Code menjawab `Invalid marketplace source format. Try: owner/repo, https://..., or ./path`.166Anda menjalankan `/plugin marketplace add <source>`, `claude plugin marketplace add <source>`, atau `claude plugin install <plugin> --marketplace <source>`, dan Claude Code menjawab `Invalid marketplace source format. Try: owner/repo, https://..., or ./path`.

167 167 

168Claude Code menerima sumber dalam salah satu bentuk ini:168Claude Code menerima sumber dalam salah satu bentuk ini:

169 169 


237* **Anda memiliki marketplace**: letakkan file di lokasi itu dan tambahkan kembali marketplace237* **Anda memiliki marketplace**: letakkan file di lokasi itu dan tambahkan kembali marketplace

238* **Seseorang lain menyelenggarakannya**: tanyakan kepada pemilik untuk sumber yang tepat yang mereka terbitkan238* **Seseorang lain menyelenggarakannya**: tanyakan kepada pemilik untuk sumber yang tepat yang mereka terbitkan

239 239 

240<h3 id="cannot-install-plugins-from-a-marketplace-with-this-name">

241 `Cannot add marketplace "<name>": Claude Code cannot install plugins from a marketplace with this name`

242</h3>

243 

244Anda menambahkan marketplace, dan [`name`](/docs/id/plugins/marketplace-reference#top-level-fields) di `marketplace.json`-nya tidak valid sebagai bagian setelah `@` dalam [ID plugin](/docs/id/plugins/loading#find-where-a-plugin-came-from) seperti `my-plugin@my-marketplace`. Claude Code menolak penambahan tersebut dan tidak mendaftarkan apa pun.

245 

246Sisa pesan menyatakan aturan untuk nama tersebut. Dalam contoh ini, `_internal` melanggar aturan karena dimulai dengan `_`:

247 

248```text theme={null}

249Cannot add marketplace "_internal": Claude Code cannot install plugins from a marketplace with this name. Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. The name is set by "name" in the marketplace's marketplace.json; ask its maintainer to change it.

250```

251 

252Berikan marketplace nama yang sesuai dengan aturan tersebut, lalu tambahkan lagi:

253 

254* **Anda memiliki marketplace**: ubah `name` di `marketplace.json`, misalnya menjadi `internal-tools`

255* **Seseorang lain menyelenggarakannya**: minta pemilik untuk mengubah nama tersebut

256 

257Sebelum v2.1.295, Claude Code melaporkan penambahan dalam contoh ini sebagai berhasil.

258 

240<h3 id="ssh-authentication-failed-or-https-authentication-failed">259<h3 id="ssh-authentication-failed-or-https-authentication-failed">

241 `SSH authentication failed` or `HTTPS authentication failed`260 `SSH authentication failed` or `HTTPS authentication failed`

242</h3>261</h3>


568 `Marketplace "<name>" is already added from a different source`587 `Marketplace "<name>" is already added from a different source`

569</h3>588</h3>

570 589 

571Anda mengonfirmasi penambahan marketplace melalui [`/plugin install <plugin> --marketplace <source>`](/docs/id/plugins/install#add-a-marketplace-and-install-in-one-command), dan katalog yang Claude Code ambil dari sumber itu memiliki nama yang sama dengan marketplace yang sudah Anda tambahkan dari sumber berbeda. Claude Code menyimpan marketplace yang ada alih-alih menggantinya, dan plugin tidak diinstal.590Anda menyebutkan sumber marketplace baru dengan [`--marketplace <source>` pada perintah instal](/docs/id/plugins/install#add-a-marketplace-and-install-in-one-command), dalam sesi atau dari shell Anda. Katalog yang Claude Code ambil dari sumber itu memiliki nama yang sama dengan marketplace yang sudah Anda tambahkan dari sumber berbeda. Claude Code menyimpan marketplace yang ada alih-alih menggantinya, dan plugin tidak diinstal.

572 591 

573Pesan lengkapnya terlihat seperti ini:592Pesan lengkapnya terlihat seperti ini:

574 593 


786 805 

787Claude Code menyalin catatan yang tidak dapat digunakan ke dalam file `.set-aside` dan menjatuhkannya dari daftar. Claude Code tidak pernah membaca salinan kembali, dan salinan itu berusia pada jadwal [`cleanupPeriodDays`](/docs/id/settings-reference#cleanupperioddays).806Claude Code menyalin catatan yang tidak dapat digunakan ke dalam file `.set-aside` dan menjatuhkannya dari daftar. Claude Code tidak pernah membaca salinan kembali, dan salinan itu berusia pada jadwal [`cleanupPeriodDays`](/docs/id/settings-reference#cleanupperioddays).

788 807 

808<h3 id="does-not-load-so-claude-code-ignores-the-whole-file">

809 `does not load (...), so Claude Code ignores the whole file`

810</h3>

811 

812Perintah berhasil. File pengaturan yang disebutkan peringatan memiliki kesalahan, sehingga Claude Code mengabaikan seluruh file, termasuk apa pun yang ditulis perintah tersebut di sana, sampai Anda memperbaikinya.

813 

814Perbaiki kesalahan yang disebutkan peringatan. Untuk nilai yang tidak diterima Claude Code, [Fix a broken settings file](/docs/id/settings#fix-a-broken-settings-file) menjelaskan caranya. Kemudian jalankan perintah lagi jika perubahannya tidak lagi ada di file.

815 

816Peringatan muncul setelah baris keberhasilan `claude plugin install`, `enable`, `disable`, atau `claude plugin marketplace add` di shell Anda:

817 

818```text theme={null}

819⚠ /home/user/.claude/settings.json does not load (its "permissions" is not valid), so Claude Code ignores the whole file, including anything this command wrote there. Fix the file, then run this command again if its change is missing. If a newer Claude Code wrote the file, update Claude Code instead.

820```

821 

822Teks dalam tanda kurung menyebutkan kesalahannya:

823 

824* **`its "<key>" is not valid`**: pengaturan yang dikutip berisi nilai yang tidak diterima Claude Code. Cari pengaturan tersebut di [referensi pengaturan](/docs/id/settings-reference) untuk nilai yang diterimanya. Ketika lebih dari satu nilai gagal, teks menyebutkan pengaturan pertama dan menghitung yang lainnya, seperti dalam `its "permissions" and 1 other value are not valid`.

825* **`it is not a JSON object`**: tingkat atas file bukan objek JSON, seperti file yang tingkat atasnya berupa array.

826 

789<h3 id="a-plugin-you-disabled-still-loads">827<h3 id="a-plugin-you-disabled-still-loads">

790 `Disabled in ~/.claude/settings.json but still loads`828 `Disabled in ~/.claude/settings.json but still loads`

791</h3>829</h3>


812 850 

813Jika organisasi Anda pre-install plugin untuk Anda, itu melakukannya melalui pengaturan terkelola. Lihat [Pre-install and require plugins](/docs/id/plugins/org#pre-install-and-require-plugins).851Jika organisasi Anda pre-install plugin untuk Anda, itu melakukannya melalui pengaturan terkelola. Lihat [Pre-install and require plugins](/docs/id/plugins/org#pre-install-and-require-plugins).

814 852 

853<h3 id="a-plugin-stays-installed-after-plugin-uninstall-on-windows">

854 A plugin stays installed after `plugin uninstall` on Windows

855</h3>

856 

857Di Windows, Anda menjalankan `claude plugin uninstall` pada cakupan project atau local dan perintah itu melaporkan keberhasilan, tetapi `claude plugin list` atau `/plugin` masih mencantumkan plugin tersebut.

858 

859`installed_plugins.json` menyimpan dua catatan instalasi plugin untuk folder proyek, masing-masing menuliskan path folder secara berbeda, dan satu kali uninstall hanya menghapus salah satunya. Untuk memeriksanya, jalankan `claude plugin list --json` di shell Anda. Baris plugin yang tersisa memiliki `projectPath` yang menuliskan folder secara berbeda dari tempat Anda menjalankan uninstall, seperti `c:\work\app` untuk `C:\work\app`.

860 

861Jalankan perintah uninstall yang sama lagi, dengan `--scope` yang sama, dari folder yang sama. Proses kedua tidak menemukan catatan di bawah penulisan path-nya sendiri, sehingga menghapus catatan di bawah penulisan yang lain. Untuk instalasi cakupan project:

862 

863```shell theme={null}

864claude plugin uninstall <name>@<marketplace> --scope project

865```

866 

867Kemudian jalankan `claude plugin list --json` lagi untuk memastikan baris tersebut sudah hilang.

868 

869Sebelum v2.1.295, proses kedua gagal dengan `Plugin "<name>" is not installed in project scope`. Jalankan `claude update`, lalu jalankan uninstall lagi.

870 

815<h3 id="failed-to-load-hooks-from-and-hooks-that-dont-fire">871<h3 id="failed-to-load-hooks-from-and-hooks-that-dont-fire">

816 `Failed to load hooks from <path>` and hooks that don't fire872 `Failed to load hooks from <path>` and hooks that don't fire

817</h3>873</h3>


835 891 

836Jika stderr menunjukkan path plugin terpotong di spasi, command bentuk shell hook menggunakan `${CLAUDE_PLUGIN_ROOT}` di luar tanda kutip dan path instalasi berisi spasi. Bungkus variabel dalam tanda kutip ganda atau gunakan [exec form](/docs/id/hooks#exec-form-and-shell-form). Untuk menemukan variabel yang tidak dikutip, jalankan `claude plugin validate` pada direktori plugin dan cari [peringatan quoting](/docs/id/plugins/manifest-reference#quoting-and-path-separators)-nya.892Jika stderr menunjukkan path plugin terpotong di spasi, command bentuk shell hook menggunakan `${CLAUDE_PLUGIN_ROOT}` di luar tanda kutip dan path instalasi berisi spasi. Bungkus variabel dalam tanda kutip ganda atau gunakan [exec form](/docs/id/hooks#exec-form-and-shell-form). Untuk menemukan variabel yang tidak dikutip, jalankan `claude plugin validate` pada direktori plugin dan cari [peringatan quoting](/docs/id/plugins/manifest-reference#quoting-and-path-separators)-nya.

837 893 

894Jika pemberitahuan berbunyi `Failed to run: Plugin directory does not exist: <path>`, lihat [`Plugin directory does not exist`](#plugin-directory-does-not-exist).

895 

838Untuk kesalahan lain apa pun, jalankan command hook sendiri dari direktori plugin untuk melihat output lengkap, atau tangkap stderr lengkap dengan [debug logging](/docs/id/hooks#debug-hooks).896Untuk kesalahan lain apa pun, jalankan command hook sendiri dari direktori plugin untuk melihat output lengkap, atau tangkap stderr lengkap dengan [debug logging](/docs/id/hooks#debug-hooks).

839 897 

840<h4 id="a-plugin-hook-blocks-a-tool-call-or-prompt">898<h4 id="a-plugin-hook-blocks-a-tool-call-or-prompt">


869 </Step>927 </Step>

870</Steps>928</Steps>

871 929 

930<h3 id="plugin-directory-does-not-exist">

931 `Plugin directory does not exist: <path>`

932</h3>

933 

934Jalankan `/reload-plugins` di prompt Claude Code terlebih dahulu, meskipun pesan menyuruh Anda untuk menginstal ulang. Hook plugin gagal dengan `Failed to run: Plugin directory does not exist: <path> (<plugin> — run /plugin to reinstall)`, dan hook tidak berjalan, ketika direktori tempat sesi Anda memuat hook plugin sudah hilang dari disk. [`Plugin directory not found at path: <path>`](#plugin-directory-not-found-at-path) adalah pesan yang berbeda, tentang entri marketplace.

935 

936Reload memuat hook plugin dari direktorinya saat ini. Kegagalan ditampilkan sekali per sesi untuk setiap event dan perintah hook, sehingga hook yang tidak lagi memunculkan pesan tidak memastikan bahwa masalahnya sudah diperbaiki. Baca output reload sebagai gantinya:

937 

938* **`Reloaded:` tanpa baris kesalahan**: hook plugin tidak lagi menunjuk ke direktori yang hilang

939* **`N errors during load. Run /plugin for details.`**: buka tab **Errors** di `/plugin` dan ikuti entri halaman ini untuk pesan yang ditampilkannya

940* **Baris yang berakhir dengan `Run /reload-plugins --force to apply.`**: tidak ada yang dimuat ulang, dan hook tetap gagal. Jalankan `/reload-plugins --force` di prompt Claude Code

941 

872<h3 id="invalid-mcp-server-config-for-and-mcp-servers-that-dont-start">942<h3 id="invalid-mcp-server-config-for-and-mcp-servers-that-dont-start">

873 `Invalid MCP server config for "<server>"` and MCP servers that don't start943 `Invalid MCP server config for "<server>"` and MCP servers that don't start

874</h3>944</h3>


1063 1133 

1064Anda menjalankan `claude plugin validate <path>`, atau `/plugin validate <path>` dalam sesi, dan itu mencetak `Found N errors` dan `Validation failed`, lalu keluar dengan kode 1.1134Anda menjalankan `claude plugin validate <path>`, atau `/plugin validate <path>` dalam sesi, dan itu mencetak `Found N errors` dan `Validation failed`, lalu keluar dengan kode 1.

1065 1135 

1066Validator membaca manifest di path yang Anda berikan: `.claude-plugin/plugin.json` untuk direktori plugin, atau `.claude-plugin/marketplace.json` untuk direktori marketplace. Untuk marketplace, itu memprefiks masalah dalam manifest entri sendiri dengan indeks entri, sebagai `plugins[1] plugin.json → json: ...`.1136Validator membaca manifest di path yang Anda berikan: `.claude-plugin/plugin.json` untuk direktori plugin, `.claude-plugin/marketplace.json` untuk direktori marketplace, atau keduanya untuk direktori yang menyimpan keduanya. Untuk marketplace, itu memprefiks masalah dalam manifest entri sendiri dengan indeks entri, sebagai `plugins[1] plugin.json → json: ...`. Sebelum v2.1.289, Claude Code memvalidasi direktori yang menyimpan keduanya hanya sebagai marketplace.

1067 1137 

1068Tabel mencakup pesan yang menghentikan validasi dan dua peringatan, `No frontmatter block found` dan `Unknown field '<key>'`, yang menghentikannya hanya ketika Anda melewatkan `--strict`. Peringatan lain, seperti deskripsi yang hilang, tidak tercantum.1138Tabel mencakup pesan yang menghentikan validasi dan dua peringatan, `No frontmatter block found` dan `Unknown field '<key>'`, yang menghentikannya hanya ketika Anda melewatkan `--strict`. Peringatan lain, seperti deskripsi yang hilang, tidak tercantum.

1069 1139 

Details

191 Jitter191 Jitter

192</h3>192</h3>

193 193 

194Untuk menghindari setiap sesi mengenai API pada momen dinding jam yang sama, penjadwal menambahkan offset deterministik untuk waktu berjalan:194Tugas terjadwal dapat berjalan pada waktu yang berbeda dari yang tertera pada jadwalnya. Jika tugas setiap sesi berjalan tepat sesuai jadwal, banyak di antaranya akan memanggil API pada saat yang sama, sehingga Claude Code menggeser waktu berjalan setiap tugas. Tugas berulang berjalan terlambat, dan tugas sekali jalan yang dijadwalkan tepat pada jam atau setengah jam berjalan sedikit lebih awal.

195 195 

196* Tugas berulang berjalan hingga 30 menit setelah waktu terjadwal (atau hingga setengah interval, untuk tugas yang berjalan lebih sering daripada per jam). Job per jam yang dijadwalkan untuk `:00` dapat berjalan di mana saja hingga `:30`.196<h4 id="how-late-a-recurring-task-runs">

197* Tugas sekali jalan yang dijadwalkan untuk bagian atas atau bawah jam berjalan hingga 90 detik lebih awal.197 Seberapa terlambat tugas berulang berjalan

198</h4>

198 199 

199Offset berasal dari ID tugas, jadi tugas yang sama selalu mendapatkan offset yang sama. Jika waktu yang tepat penting, pilih menit yang bukan `:00` atau `:30`, misalnya `3 9 * * *` daripada `0 9 * * *`, dan jitter sekali jalan tidak akan berlaku.200Saat Anda membuat tugas berulang, Claude Code memberinya penundaan tetap dan menambahkan penundaan tersebut ke setiap kali tugas berjalan. Penundaan dihitung dari ID tugas, sehingga tugas yang sama berjalan terlambat dengan jumlah menit yang sama setiap kali, termasuk saat sesi sedang idle dan tidak ada hal lain yang berjalan.

201 

202Tugas yang berjalan lebih sering mendapatkan penundaan yang lebih singkat, dan 30 menit adalah penundaan terlama yang dapat diperoleh suatu tugas. Berikut adalah rentang penundaan untuk beberapa jadwal umum:

203 

204| Tugas berjalan | Penundaan berada di antara |

205| :- | :- |

206| Setiap 10 menit | 0 dan 5 menit |

207| Setiap 30 menit | 0 dan 15 menit |

208| Setiap jam, atau lebih jarang seperti harian | 0 dan 30 menit |

209 

210Misalnya, `7,37 * * * *` menjadwalkan tugas pada `:07` dan `:37`, yang berjarak 30 menit, sehingga penundaannya berada di antara 0 dan 15 menit. Jika penundaan tugas ini adalah 14 menit, tugas berjalan pada `:21` dan `:51` setiap jam. Mengubah jadwal ke menit yang berbeda akan memindahkan waktu berjalan, dan penundaan tetap ditambahkan di atasnya.

211 

212<h4 id="when-a-one-shot-task-runs-early">

213 Kapan tugas sekali jalan berjalan lebih awal

214</h4>

215 

216Tugas sekali jalan yang dijadwalkan pada `:00` atau `:30` berjalan hingga 90 detik lebih awal. Claude Code tidak menggeser tugas sekali jalan yang dijadwalkan pada menit lainnya, jadi jika ketepatan waktu penting, jadwalkan di luar jam tepat dan setengah jam: `3 9 * * *` alih-alih `0 9 * * *`.

200 217 

201<h3 id="seven-day-expiry">218<h3 id="seven-day-expiry">

202 Kedaluwarsa tujuh hari219 Kedaluwarsa tujuh hari

Details

403 403 

404* [File MCP terkelola](/docs/id/managed-mcp) cakupan enterprise pada jalur sistem standarnya: `/etc/claude-code/managed-mcp.json` pada host runner Linux, `/Library/Application Support/ClaudeCode/managed-mcp.json` pada host macOS. Gunakan file ini untuk armada yang dikunci ketat di mana hanya server yang didaftarkan administrator yang boleh dimuat. Lihat [kontrol eksklusif dengan managed-mcp.json](/docs/id/managed-mcp#exclusive-control-with-managed-mcp-json) untuk aturan prioritas. Ketika file ini ada di host runner, Claude Code melewati server MCP yang dikirimkan control plane Anthropic ke sesi, termasuk konektor claude.ai, dan menyebutkan namanya dalam peringatan di stderr proses anak sesi, yang dicatat runner pada level log `debug`. Sebelum v2.1.229, sesi tersebut keluar saat startup dengan `You cannot dynamically configure MCP servers when an enterprise MCP config is present`.404* [File MCP terkelola](/docs/id/managed-mcp) cakupan enterprise pada jalur sistem standarnya: `/etc/claude-code/managed-mcp.json` pada host runner Linux, `/Library/Application Support/ClaudeCode/managed-mcp.json` pada host macOS. Gunakan file ini untuk armada yang dikunci ketat di mana hanya server yang didaftarkan administrator yang boleh dimuat. Lihat [kontrol eksklusif dengan managed-mcp.json](/docs/id/managed-mcp#exclusive-control-with-managed-mcp-json) untuk aturan prioritas. Ketika file ini ada di host runner, Claude Code melewati server MCP yang dikirimkan control plane Anthropic ke sesi, termasuk konektor claude.ai, dan menyebutkan namanya dalam peringatan di stderr proses anak sesi, yang dicatat runner pada level log `debug`. Sebelum v2.1.229, sesi tersebut keluar saat startup dengan `You cannot dynamically configure MCP servers when an enterprise MCP config is present`.

405* Kunci [`managedMcpServers`](/docs/id/settings-reference#managedmcpservers) dalam [pengaturan terkelola](/docs/id/managed-settings) pada host runner: menyediakan server HTTP dan SSE tanpa mengambil kontrol eksklusif, sehingga server dari sumber lain tetap dimuat. Memerlukan Claude Code v2.1.259 atau yang lebih baru.405* Kunci [`managedMcpServers`](/docs/id/settings-reference#managedmcpservers) dalam [pengaturan terkelola](/docs/id/managed-settings) pada host runner: menyediakan server HTTP dan SSE tanpa mengambil kontrol eksklusif, sehingga server dari sumber lain tetap dimuat. Memerlukan Claude Code v2.1.259 atau yang lebih baru.

406* `<repo>/.mcp.json`: cakupan project. Lakukan commit file ini ke repositori; server-servernya disetujui secara otomatis di sesi cloud.406* `<repo>/.mcp.json`: cakupan project. Lakukan commit file ini ke repositori; server-servernya disetujui secara otomatis di sesi cloud. Dalam sesi dengan beberapa repositori, [paling banyak file dari satu repositori yang dimuat](#repository-settings-in-sessions-with-several-repositories).

407 407 

408Ketika pengiriman konektor diaktifkan untuk organisasi Anda, control plane Anthropic mengirimkan konektor yang telah Anda konfigurasikan di claude.ai ke sesi yang dibuat secara interaktif melalui konfigurasi MCP yang disediakan server, yang dirutekan melalui `api.anthropic.com`. Sesi yang dibuat secara terprogram, seperti [dispatch CLI](/docs/id/self-hosted-environments-testing#run-the-test-loop), tidak menerima pengiriman konektor; berikan server MCP kepada sesi tersebut melalui sumber lain yang tercantum di bagian ini. Token OAuth proses anak tidak membawa scope untuk mengambil konektor secara langsung, sehingga proses anak tidak mencoba pengambilan tersebut sendiri; pengiriman digerakkan oleh server.408Ketika pengiriman konektor diaktifkan untuk organisasi Anda, control plane Anthropic mengirimkan konektor yang telah Anda konfigurasikan di claude.ai ke sesi yang dibuat secara interaktif melalui konfigurasi MCP yang disediakan server, yang dirutekan melalui `api.anthropic.com`. Sesi yang dibuat secara terprogram, seperti [dispatch CLI](/docs/id/self-hosted-environments-testing#run-the-test-loop), tidak menerima pengiriman konektor; berikan server MCP kepada sesi tersebut melalui sumber lain yang tercantum di bagian ini. Token OAuth proses anak tidak membawa scope untuk mengambil konektor secara langsung, sehingga proses anak tidak mencoba pengambilan tersebut sendiri; pengiriman digerakkan oleh server.

409 409 


545exit 0545exit 0

546```546```

547 547 

548Hook mendorong Claude untuk melakukan komit dan mendorong sebelum sesi berakhir, dan tetap diam ketika direktori bukan repositori git atau tidak memiliki remote.548Hook meminta Claude untuk melakukan commit dan push sebelum sesi berakhir, dan tetap diam ketika direktori bukan repositori git atau tidak memiliki remote. Untuk sesi dengan beberapa repositori, lihat [apa yang ditunjuk oleh `$CLAUDE_PROJECT_DIR`](#repository-settings-in-sessions-with-several-repositories).

549 549 

550<h2 id="permissions-and-tool-approval">550<h2 id="permissions-and-tool-approval">

551 Izin dan persetujuan alat551 Izin dan persetujuan alat


574 574 

575Atur `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` untuk menabur dari jalur berbeda, atau arahkan ke direktori kosong untuk menonaktifkan penanaman.575Atur `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` untuk menabur dari jalur berbeda, atau arahkan ke direktori kosong untuk menonaktifkan penanaman.

576 576 

577`.claude/settings.json` yang dikomit repositori berlapis di atas sebagai pengaturan proyek. Sesi juga membaca [`managed-settings.json`](/docs/id/settings#where-settings-live) dari jalur sistem standar di gambar runner Anda. Apakah kuncinya berlaku bersama [pengaturan yang dikelola server](/docs/id/server-managed-settings) mengikuti [bagaimana Claude Code menggabungkan sumber yang dikelola](/docs/id/managed-settings#how-claude-code-combines-managed-sources): secara default, ketika organisasi Anda mengirimkan kunci yang dikelola server apa pun, sesi mengabaikan file gambar runner terlepas dari [kunci yang dibaca Claude Code dari setiap sumber admin](/docs/id/managed-settings#keys-read-from-every-admin-source), seperti blok `env`, kunci sandbox, jalur biner sandbox, dan `forceRemoteSettingsRefresh`. Lihat [prioritas pengaturan](/docs/id/settings#settings-precedence).577`.claude/settings.json` yang di-commit ke repositori diterapkan di atasnya sebagai pengaturan proyek. Dalam sesi dengan beberapa repositori, [paling banyak hanya file dari satu repositori yang berlaku](#repository-settings-in-sessions-with-several-repositories). Sesi juga membaca [`managed-settings.json`](/docs/id/settings#where-settings-live) dari jalur sistem standar di image runner Anda. Apakah kuncinya berlaku bersama [pengaturan terkelola server](/docs/id/server-managed-settings) mengikuti [bagaimana Claude Code menggabungkan sumber terkelola](/docs/id/managed-settings#how-claude-code-combines-managed-sources): secara default, ketika organisasi Anda mengirimkan kunci terkelola server apa pun, sesi mengabaikan file image runner kecuali [kunci yang dibaca Claude Code dari setiap sumber admin](/docs/id/managed-settings#keys-read-from-every-admin-source), seperti blok `env`, kunci sandbox, jalur biner sandbox, dan `forceRemoteSettingsRefresh`. Lihat [prioritas pengaturan](/docs/id/settings#settings-precedence).

578 578 

579Ketika bidang kontrol Anthropic memasok sesi dengan [Claude Code hooks](/docs/id/hooks), runner memasangnya bersama, bukan di atas, konfigurasi Anda sendiri. Memerlukan Claude Code v2.1.229 atau lebih baru.579Ketika bidang kontrol Anthropic memasok sesi dengan [Claude Code hooks](/docs/id/hooks), runner memasangnya bersama, bukan di atas, konfigurasi Anda sendiri. Memerlukan Claude Code v2.1.229 atau lebih baru.

580 580 


586 586 

587Snapshot runner atas `~/.claude/` host tidak menyertakan direktori `projects/`. Lokasi penyimpanan default auto memory berada di bawah direktori tersebut. Jika Anda meletakkan file memori di sana, runner tidak menanamkannya ke dalam sesi, dan file tersebut tidak mengaktifkan auto memory.587Snapshot runner atas `~/.claude/` host tidak menyertakan direktori `projects/`. Lokasi penyimpanan default auto memory berada di bawah direktori tersebut. Jika Anda meletakkan file memori di sana, runner tidak menanamkannya ke dalam sesi, dan file tersebut tidak mengaktifkan auto memory.

588 588 

589<h3 id="repository-settings-in-sessions-with-several-repositories">

590 Pengaturan repositori dalam sesi dengan beberapa repositori

591</h3>

592 

593Dalam sesi dengan beberapa repositori, Claude Code membaca pengaturan proyek dari direktori tempat sesi dimulai, sehingga paling banyak hanya `.claude/settings.json` dari satu repositori yang berlaku sebagai pengaturan proyek. Hook yang didefinisikan dalam file repositori lain tidak berjalan, aturan deny di dalamnya tidak berlaku, dan `env`-nya tidak diatur.

594 

595* **`--capacity 1`, default, dengan checkout bawaan**: sesi dimulai di repositori pertama dalam daftar repositorinya. `.claude/settings.json` repositori tersebut berlaku sebagai pengaturan proyek dan `.mcp.json`-nya dimuat, sedangkan milik repositori lain tidak.

596* **`--capacity` lebih dari satu, atau [hook `checkout`](#checkout)**: sesi dimulai di direktori per sesi yang berisi hasil checkout. Tidak ada `.claude/settings.json` repositori mana pun yang berlaku sebagai pengaturan proyek, tidak ada `.mcp.json` repositori mana pun yang dimuat, dan [`$CLAUDE_PROJECT_DIR`](/docs/id/hooks#reference-scripts-by-path) dalam perintah hook adalah direktori tersebut, bukan hasil checkout.

597 

598`CLAUDE.md` dan skills setiap repositori dimuat di mana pun sesi dimulai. Runner meneruskan setiap repositori ke Claude Code sebagai [direktori tambahan](/docs/id/permissions#additional-directories-grant-file-access-not-configuration), sehingga Claude Code juga membaca kunci `enabledPlugins` dan `extraKnownMarketplaces` dari `.claude/settings.json` setiap repositori.

599 

600Untuk menjalankan hook atau menerapkan aturan izin di setiap sesi, letakkan di `~/.claude/settings.json` pada host runner. Runner [mengisikan file host ke setiap sesi](#how-each-session’s-config-is-assembled), di mana pun sesi dimulai. Tulis jalur dalam aturan `Read` atau `Edit` sebagai [pola](/docs/id/permissions#read-and-edit) absolut `//` atau relatif terhadap home `~/`, karena pola lain berjangkar pada sumber pengaturan atau direktori saat ini.

601 

589<h3 id="repository-committed-permission-rules">602<h3 id="repository-committed-permission-rules">

590 Aturan izin yang dikomit repositori603 Aturan izin yang dikomit repositori

591</h3>604</h3>

Details

87 87 

88 Karena hooks menjalankan perintah shell, pengguna dalam sesi interaktif melihat [dialog persetujuan keamanan](#security-approval-dialogs) sebelum Claude Code menerapkannya.88 Karena hooks menjalankan perintah shell, pengguna dalam sesi interaktif melihat [dialog persetujuan keamanan](#security-approval-dialogs) sebelum Claude Code menerapkannya.

89 89 

90 Untuk mengonfigurasi pengklasifikasi [mode otomatis](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) sehingga mengetahui repositori, bucket, dan domain mana yang dipercaya organisasi Anda, berikan blok `autoMode` dengan cara yang sama; lihat [Konfigurasi mode otomatis](/docs/id/auto-mode-config) untuk cara entri `autoMode` mempengaruhi apa yang diblokir pengklasifikasi dan peringatan penting tentang bidang `environment`, `allow`, `soft_deny`, dan `hard_deny`.90 Untuk mengonfigurasi pengklasifikasi [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) sehingga mengetahui repositori, bucket, dan domain mana yang dipercaya organisasi Anda, berikan blok `autoMode` dengan cara yang sama; lihat [Konfigurasi auto mode](/docs/id/auto-mode-config) untuk cara entri `autoMode` mempengaruhi apa yang diblokir pengklasifikasi dan peringatan penting tentang bidang `environment`, `allow`, `soft_deny`, dan `hard_deny`.

91 </Step>91 </Step>

92 92 

93 <Step title="Simpan dan terapkan">93 <Step title="Simpan dan terapkan">

94 Simpan perubahan Anda. Klien Claude Code menerima pengaturan yang diperbarui pada startup berikutnya atau siklus polling per jam.94 Simpan perubahan Anda. Klien Claude Code menerima pengaturan yang diperbarui pada startup berikutnya atau siklus polling per jam.

95 

96 Editor memeriksa JSON Anda terhadap skema JSON yang dipublikasikan untuk pengaturan Claude Code. Jika editor menemukan masalah dalam JSON yang dapat di-parse, editor menampilkan peringatan dan mengubah label tombol simpan. Labelnya adalah **Update with errors** ketika pengaturan sudah disimpan, dan **Add with errors** ketika belum ada pengaturan yang disimpan. Tombol tersebut tetap menyimpan, karena peringatan skema tidak memblokir penyimpanan.

97 

98 Skema [dapat tertinggal dari rilis terbaru](/docs/id/settings#edit-a-settings-file), sehingga editor dapat menandai kunci atau nilai yang didokumentasikan dalam [referensi pengaturan](/docs/id/settings-reference#all-settings). Claude Code menerima kunci dan nilai yang Anda simpan dan menjalankan [validasinya sendiri](#invalid-entries-in-delivered-settings) saat memuatnya.

95 </Step>99 </Step>

96</Steps>100</Steps>

97 101 

settings.md +11 −11

Details

405| Cakupan | File | Siapa yang terpengaruh | Gunakan untuk |405| Cakupan | File | Siapa yang terpengaruh | Gunakan untuk |

406| :- | :- | :- | :- |406| :- | :- | :- | :- |

407| Pengguna | `~/.claude/settings.json` | Anda, di setiap proyek di mesin ini | Preferensi pribadi: tema, mode editor, model default, aturan izin Anda sendiri |407| Pengguna | `~/.claude/settings.json` | Anda, di setiap proyek di mesin ini | Preferensi pribadi: tema, mode editor, model default, aturan izin Anda sendiri |

408| Proyek bersama | `.claude/settings.json` | Semua orang yang bekerja di folder yang memuatnya. Di repositori git, commit itu sehingga rekan kerja mendapatkannya | Izin tim, hooks, plugins, dan variabel lingkungan yang dibutuhkan proyek |408| Proyek bersama | `.claude/settings.json` | Semua orang yang bekerja di folder yang memuatnya. Di repositori git, commit itu sehingga rekan kerja mendapatkannya | Izin tim, hook, plugin, dan environment variable yang dibutuhkan proyek |

409| Proyek lokal | `.claude/settings.local.json` | Anda, hanya di proyek ini. Claude Code menyimpannya di luar git saat membuat file; jika Anda membuatnya dengan tangan, tambahkan ke `.gitignore` sendiri | Penggantian pribadi untuk satu proyek, dan pengujian sebelum Anda berbagi |409| Proyek lokal | `.claude/settings.local.json` | Anda, hanya di proyek ini. Claude Code menyimpannya di luar git saat membuat file; jika Anda membuatnya dengan tangan, tambahkan ke `.gitignore` sendiri | Override pribadi untuk satu proyek, dan pengujian sebelum Anda berbagi |

410| Terkelola | `managed-settings.json` dan [sumber terkelola](/docs/id/managed-settings#delivery-mechanisms) lainnya | Semua orang yang menjadi tujuan penerapannya oleh organisasi Anda; [Prioritas pengaturan](#settings-precedence) menjelaskan apa yang dapat menimpanya | Kebijakan keamanan dan persyaratan kepatuhan |410| Terkelola | `managed-settings.json` dan [sumber terkelola](/docs/id/managed-settings#delivery-mechanisms) lainnya | Semua orang yang menjadi tujuan penerapannya oleh organisasi Anda; [Prioritas pengaturan](#settings-precedence) menjelaskan apa yang dapat menimpanya | Kebijakan keamanan dan persyaratan kepatuhan |

411 411 

412Di kolom File, `~/.claude` adalah folder `.claude` di direktori home Anda, dan `.claude` kosong adalah folder `.claude` di dalam proyek Anda.412Di kolom File, `~/.claude` adalah folder `.claude` di direktori home Anda, dan `.claude` kosong adalah folder `.claude` di dalam proyek Anda.


428* **`~/.claude/settings.json`**: setiap proyek di mesin Anda, dan tidak ada di mesin rekan kerja atau di sesi cloud428* **`~/.claude/settings.json`**: setiap proyek di mesin Anda, dan tidak ada di mesin rekan kerja atau di sesi cloud

429* **`acme-app/.claude/settings.json`**: `acme-app/` Anda. Ini menjangkau klon rekan kerja dan sesi cloud hanya jika Anda commit file ke kontrol versi; sampai Anda melakukannya, itu adalah file di disk Anda seperti yang lain dan tidak ada orang lain yang memilikinya429* **`acme-app/.claude/settings.json`**: `acme-app/` Anda. Ini menjangkau klon rekan kerja dan sesi cloud hanya jika Anda commit file ke kontrol versi; sampai Anda melakukannya, itu adalah file di disk Anda seperti yang lain dan tidak ada orang lain yang memilikinya

430* **`acme-app/.claude/settings.local.json`**: hanya `acme-app/` Anda. Claude Code menambahkannya ke pengecualian git global Anda pertama kali menulis file, sehingga tetap keluar dari commit Anda; jika Anda membuat file dengan tangan, [tambahkan ke `.gitignore` sendiri](#keep-personal-settings-out-of-a-repository)430* **`acme-app/.claude/settings.local.json`**: hanya `acme-app/` Anda. Claude Code menambahkannya ke pengecualian git global Anda pertama kali menulis file, sehingga tetap keluar dari commit Anda; jika Anda membuat file dengan tangan, [tambahkan ke `.gitignore` sendiri](#keep-personal-settings-out-of-a-repository)

431* **Pengaturan terkelola**, baik file `managed-settings.json`, kebijakan MDM, atau [pengaturan yang dikelola server](/docs/id/server-managed-settings) dari konsol claude.ai: setiap proyek di setiap mesin organisasi Anda menerapkannya, atau yang Anda masuk dengan akun organisasi Anda. Hanya pengaturan yang dikelola server yang menjangkau sesi cloud431* **Pengaturan terkelola**, baik file `managed-settings.json`, kebijakan MDM, atau [pengaturan terkelola server](/docs/id/server-managed-settings) dari konsol claude.ai: setiap proyek di setiap mesin organisasi Anda menerapkannya, atau yang Anda masuk dengan akun organisasi Anda. Hanya pengaturan terkelola server yang menjangkau sesi cloud

432 432 

433<span id="which-files-you-have" />433<span id="which-files-you-have" />

434 434 


440 440 

441* **Terkelola**: organisasi Anda menerapkannya. Anda tidak membuat atau mengeditnya.441* **Terkelola**: organisasi Anda menerapkannya. Anda tidak membuat atau mengeditnya.

442* **Proyek bersama**: proyek yang sudah menggunakan Claude Code mungkin memiliki satu yang di-commit. Jika tidak, buatnya di `.claude/settings.json` di folder proyek.442* **Proyek bersama**: proyek yang sudah menggunakan Claude Code mungkin memiliki satu yang di-commit. Jika tidak, buatnya di `.claude/settings.json` di folder proyek.

443* **Pengguna** dan **Proyek lokal**: buatnya sendiri, atau biarkan Claude Code membuatnya. Ini menulis `~/.claude/settings.json` pertama kali Anda mengubah opsi di menu `/config` yang disimpannya dalam pengaturan pengguna, seperti tema, dan `.claude/settings.local.json` pertama kali Anda memberikan persetujuan berdiri di prompt izin, seperti "Ya, dan jangan tanya lagi" untuk perintah Bash. Beberapa opsi `/config`, termasuk **Tampilkan tips**, disimpan ke `.claude/settings.local.json` sebagai gantinya dari file pengguna.443* **Pengguna** dan **Proyek lokal**: buatnya sendiri, atau biarkan Claude Code membuatnya. Ini menulis `~/.claude/settings.json` pertama kali Anda mengubah opsi di menu `/config` yang disimpannya dalam pengaturan pengguna, seperti tema, dan `.claude/settings.local.json` pertama kali Anda memberikan persetujuan berdiri di dialog izin, seperti "Ya, dan jangan tanya lagi" untuk perintah Bash. Beberapa opsi `/config`, termasuk **Tampilkan tips**, disimpan ke `.claude/settings.local.json` sebagai gantinya dari file pengguna.

444 444 

445<Info>445<Info>

446 Di Windows, `~/.claude` berarti `%USERPROFILE%\.claude`. Untuk menyimpan file direktori home di tempat lain, atur [`CLAUDE_CONFIG_DIR`](/docs/id/env-vars); Claude Code kemudian menyimpan pengaturan, riwayat sesi, dan plugins Anda di sana sebagai gantinya.446 Di Windows, `~/.claude` berarti `%USERPROFILE%\.claude`. Untuk menyimpan file direktori home di tempat lain, atur [`CLAUDE_CONFIG_DIR`](/docs/id/env-vars); Claude Code kemudian menyimpan pengaturan, riwayat sesi, dan plugin Anda di sana sebagai gantinya.

447</Info>447</Info>

448 448 

449Claude Code juga menyimpan file kelima, [`~/.claude.json`](/docs/id/claude-directory#ce-claude-json), yang ditulis untuk dirinya sendiri; Anda tidak perlu mengeditnya. Ini menyimpan sesi masuk Anda, konfigurasi [server MCP](/docs/id/mcp), status per-proyek seperti keputusan kepercayaan, dan [kunci konfigurasi global](/docs/id/settings-reference#global-config-settings) yang `/config` tulis untuk Anda.449Claude Code juga menyimpan file kelima, [`~/.claude.json`](/docs/id/claude-directory#ce-claude-json), yang ditulis untuk dirinya sendiri; Anda tidak perlu mengeditnya. Ini menyimpan sesi masuk Anda, konfigurasi [server MCP](/docs/id/mcp), status per-proyek seperti keputusan kepercayaan, dan [kunci konfigurasi global](/docs/id/settings-reference#global-config-settings) yang `/config` tulis untuk Anda.


452 Bagikan pengaturan dengan tim Anda452 Bagikan pengaturan dengan tim Anda

453</h3>453</h3>

454 454 

455Commit `.claude/settings.json` sehingga semua orang yang mengkloning repositori mendapatkan izin, hooks, dan plugins yang sama. Setiap rekan kerja masih dapat menggantikannya untuk diri mereka sendiri di `.claude/settings.local.json` mereka sendiri, sehingga pengecualian pribadi tidak perlu commit. Untuk file tim lengkap, lihat [pengaturan bersama tim](/docs/id/settings-example#a-teams-shared-settings).455Commit `.claude/settings.json` sehingga semua orang yang mengkloning repositori mendapatkan izin, hook, dan plugin yang sama. Setiap rekan kerja masih dapat menggantikannya untuk diri mereka sendiri di `.claude/settings.local.json` mereka sendiri, sehingga pengecualian pribadi tidak perlu commit. Untuk file tim lengkap, lihat [pengaturan bersama tim](/docs/id/settings-example#a-teams-shared-settings).

456 456 

457Beberapa dari apa yang Anda commit menunggu sampai setiap rekan kerja [mempercayai folder](/docs/id/permissions#project-allow-rules-and-workspace-trust), dan beberapa kunci tidak pernah berlaku dari file repositori; [Troubleshoot a setting that doesn't apply](#common-cases) mencakup keduanya.457Beberapa dari apa yang Anda commit menunggu sampai setiap rekan kerja [mempercayai folder](/docs/id/permissions#project-allow-rules-and-workspace-trust), dan beberapa kunci tidak pernah berlaku dari file repositori; [Troubleshoot a setting that doesn't apply](#common-cases) mencakup keduanya.

458 458 


474 474 

475* **Claude Code juga menulisnya.** Ketika Claude meminta izin untuk menjalankan perintah Bash dan Anda memilih "Ya, dan jangan tanya lagi", Claude Code menyimpan [persetujuan izin](/docs/id/permissions#permission-system) itu di sini sebagai aturan `allow`.475* **Claude Code juga menulisnya.** Ketika Claude meminta izin untuk menjalankan perintah Bash dan Anda memilih "Ya, dan jangan tanya lagi", Claude Code menyimpan [persetujuan izin](/docs/id/permissions#permission-system) itu di sini sebagai aturan `allow`.

476* **Anda tidak perlu gitignore sendiri, kecuali Anda membuatnya dengan tangan.** Pertama kali Claude Code menulis file di repositori git yang tidak sudah mengabaikannya, itu menambahkan `**/.claude/settings.local.json` ke file pengecualian git global Anda, sehingga file tetap keluar dari commit Anda di setiap repositori. File itu adalah `core.excludesFile` ketika konfigurasi git global Anda menetapkannya ke jalur absolut atau jalur dengan awalan `~`; jika tidak, itu adalah `$XDG_CONFIG_HOME/git/ignore`, atau `~/.config/git/ignore` ketika `XDG_CONFIG_HOME` tidak diatur. Jika Anda membuat file dengan tangan dan Claude Code belum menulis ke dalamnya, tambahkan ke `.gitignore` sendiri.476* **Anda tidak perlu gitignore sendiri, kecuali Anda membuatnya dengan tangan.** Pertama kali Claude Code menulis file di repositori git yang tidak sudah mengabaikannya, itu menambahkan `**/.claude/settings.local.json` ke file pengecualian git global Anda, sehingga file tetap keluar dari commit Anda di setiap repositori. File itu adalah `core.excludesFile` ketika konfigurasi git global Anda menetapkannya ke jalur absolut atau jalur dengan awalan `~`; jika tidak, itu adalah `$XDG_CONFIG_HOME/git/ignore`, atau `~/.config/git/ignore` ketika `XDG_CONFIG_HOME` tidak diatur. Jika Anda membuat file dengan tangan dan Claude Code belum menulis ke dalamnya, tambahkan ke `.gitignore` sendiri.

477* **Aturan izinnya tidak menunggu kepercayaan sementara file tetap tidak dilacak.** Karena file adalah milik Anda dan bukan repositori, Claude Code menerapkan aturan `allow` tanpa langkah [kepercayaan ruang kerja](/docs/id/permissions#project-allow-rules-and-workspace-trust) yang diperlukan untuk file yang di-commit. Jika file dilacak oleh git, langkah kepercayaan juga berlaku untuk itu; lihat [Ketika file pengaturan lokal Anda memerlukan kepercayaan](/docs/id/permissions#when-your-local-settings-file-needs-trust).477* **Aturan izinnya tidak menunggu kepercayaan sementara file tetap tidak dilacak.** Karena file adalah milik Anda dan bukan repositori, Claude Code menerapkan aturan `allow` tanpa langkah [kepercayaan workspace](/docs/id/permissions#project-allow-rules-and-workspace-trust) yang diperlukan untuk file yang di-commit. Jika file dilacak oleh git, langkah kepercayaan juga berlaku untuk itu; lihat [Ketika file pengaturan lokal Anda memerlukan kepercayaan](/docs/id/permissions#when-your-local-settings-file-needs-trust).

478 478 

479<span id="where-claude-code-looks-for-each-file" />479<span id="where-claude-code-looks-for-each-file" />

480 480 


515 515 

516Pengaturan terkelola menjangkau Anda melalui [mekanisme pengiriman](/docs/id/managed-settings#delivery-mechanisms) di halaman pengaturan terkelola, paling umum:516Pengaturan terkelola menjangkau Anda melalui [mekanisme pengiriman](/docs/id/managed-settings#delivery-mechanisms) di halaman pengaturan terkelola, paling umum:

517 517 

518* [Pengaturan yang dikelola server](/docs/id/server-managed-settings), yang Claude Code ambil dari konsol admin claude.ai atau [gateway aplikasi Claude](/docs/id/claude-apps-gateway) yang di-host sendiri518* [Pengaturan terkelola server](/docs/id/server-managed-settings), yang Claude Code ambil dari konsol admin claude.ai atau [gateway aplikasi Claude](/docs/id/claude-apps-gateway) yang di-host sendiri

519* Kebijakan MDM atau tingkat OS, dan file `managed-settings.json` di direktori sistem519* Kebijakan MDM atau tingkat OS, dan file `managed-settings.json` di direktori sistem

520* Host penyematan seperti Claude Desktop, melalui opsi SDK `managedSettings`; lihat [Kontrol kebijakan dari host penyematan](/docs/id/managed-settings#parent-settings-from-embedding-hosts)520* Host penyematan seperti Claude Desktop, melalui opsi SDK `managedSettings`; lihat [Kontrol kebijakan dari host penyematan](/docs/id/managed-settings#parent-settings-from-embedding-hosts)

521 521 

522Di sesi [Cowork](https://claude.com/docs/cowork/overview) yang berjalan di mesin Anda di aplikasi Claude Desktop, Claude Code tidak mengambil pengaturan yang dikelola server dari konsol admin claude.ai, dan itu membaca kebijakan yang diterapkan ke perangkat Anda kecuali konfigurasi Claude Desktop organisasi Anda menetapkan `requireCoworkFullVmSandbox`. [Di mana dan kapan kebijakan berlaku](/docs/id/managed-settings#where-and-when-a-policy-applies) mencakup Cowork dan sesi cloud.522Di sesi [Cowork](https://claude.com/docs/cowork/overview) yang berjalan di mesin Anda di aplikasi Claude Desktop, Claude Code tidak mengambil pengaturan terkelola server dari konsol admin claude.ai, dan itu membaca kebijakan yang diterapkan ke perangkat Anda kecuali konfigurasi Claude Desktop organisasi Anda menetapkan `requireCoworkFullVmSandbox`. [Di mana dan kapan kebijakan berlaku](/docs/id/managed-settings#where-and-when-a-policy-applies) mencakup Cowork dan sesi cloud.

523 523 

524Jika Anda adalah administrator, [Siapkan Claude Code untuk organisasi Anda](/docs/id/admin-setup) memandu memilih apa yang akan diterapkan, dan [Terapkan pengaturan terkelola](/docs/id/managed-settings) mencakup pengiriman dan cara mengonfirmasi kebijakan berlaku.524Jika Anda adalah administrator, [Siapkan Claude Code untuk organisasi Anda](/docs/id/admin-setup) memandu memilih apa yang akan diterapkan, dan [Terapkan pengaturan terkelola](/docs/id/managed-settings) mencakup pengiriman dan cara mengonfirmasi kebijakan berlaku. Untuk peringatan yang dapat ditampilkan oleh editor pengaturan terkelola di konsol admin claude.ai, lihat [Konfigurasi pengaturan terkelola server](/docs/id/server-managed-settings#configure-server-managed-settings).

525 525 

526<h2 id="change-a-setting">526<h2 id="change-a-setting">

527 Ubah pengaturan527 Ubah pengaturan


809 809 

810Sesi [cloud](/docs/id/claude-code-on-the-web) berjalan di [lingkungan cloud](/docs/id/cloud-environments) pada klon segar repositori Anda, bukan di mesin Anda. Itu mengubah pengaturan mana yang mencapainya:810Sesi [cloud](/docs/id/claude-code-on-the-web) berjalan di [lingkungan cloud](/docs/id/cloud-environments) pada klon segar repositori Anda, bukan di mesin Anda. Itu mengubah pengaturan mana yang mencapainya:

811 811 

812* **Pengaturan proyek bersama** (`.claude/settings.json`): dibaca dalam sesi dengan satu repositori, karena file adalah bagian dari klon dan sesi dimulai di dalamnya. Komit pengaturan di sana untuk menerapkannya dalam sesi tersebut. Sesi dengan beberapa repositori dimulai di atas klon dan membaca hanya kunci `enabledPlugins` dan `extraKnownMarketplaces` dari `.claude/settings.json` setiap repositori, bukan aturan izin, hooks, `env`, atau kunci lainnya. Marketplace dan plugin yang dideklarasikan oleh dua kunci tersebut masih [tidak dimuat dalam sesi cloud](/docs/id/cloud-environments#what-carries-over-from-your-setup).812* **Pengaturan proyek bersama** (`.claude/settings.json`): dibaca dalam sesi dengan satu repositori, karena file adalah bagian dari klon dan sesi dimulai di dalamnya. Lakukan commit pengaturan di sana untuk menerapkannya dalam sesi tersebut. Dalam lingkungan yang di-host Anthropic, sesi dengan beberapa repositori dimulai di atas klon dan membaca hanya kunci `enabledPlugins` dan `extraKnownMarketplaces` dari `.claude/settings.json` setiap repositori, bukan aturan izin, hook, `env`, atau kunci lainnya. Marketplace dan plugin yang dideklarasikan oleh dua kunci tersebut masih [tidak dimuat dalam sesi cloud](/docs/id/cloud-environments#what-carries-over-from-your-setup). Untuk lingkungan yang di-host sendiri, lihat [pengaturan repositori mana yang berlaku](/docs/id/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories).

813* **Pengaturan pengguna dan proyek lokal** (`~/.claude/settings.json` dan `.claude/settings.local.json`): tidak dibaca. Keduanya tetap di mesin Anda, dan file lokal tidak ada dalam klon.813* **Pengaturan pengguna dan proyek lokal** (`~/.claude/settings.json` dan `.claude/settings.local.json`): tidak dibaca. Keduanya tetap di mesin Anda, dan file lokal tidak ada dalam klon.

814* **Pengaturan yang dikelola**: file `managed-settings.json` atau profil MDM di perangkat Anda tidak mencapai sesi cloud. [Pengaturan yang dikelola server](/docs/id/server-managed-settings) organisasi Anda melakukannya; [cakupan permukaan](/docs/id/model-config#surface-coverage) mencantumkan sesi cloud mana yang menerimanya. [Lingkungan yang di-host sendiri](/docs/id/self-hosted-environments) juga membaca file pengaturan yang dikelola dalam gambar runner-nya. [Bagaimana Claude Code menggabungkan sumber yang dikelola](/docs/id/managed-settings#how-claude-code-combines-managed-sources) mengatakan kapan file itu berlaku.814* **Pengaturan yang dikelola**: file `managed-settings.json` atau profil MDM di perangkat Anda tidak mencapai sesi cloud. [Pengaturan yang dikelola server](/docs/id/server-managed-settings) organisasi Anda melakukannya; [cakupan permukaan](/docs/id/model-config#surface-coverage) mencantumkan sesi cloud mana yang menerimanya. [Lingkungan yang di-host sendiri](/docs/id/self-hosted-environments) juga membaca file pengaturan yang dikelola dalam gambar runner-nya. [Bagaimana Claude Code menggabungkan sumber yang dikelola](/docs/id/managed-settings#how-claude-code-combines-managed-sources) mengatakan kapan file itu berlaku.

815* **`/config`**: di browser Anda di claude.ai/code, membuka bagian Claude Code dari pengaturan claude.ai Anda daripada mengubah nilai. Untuk mengubah pengaturan untuk sesi cloud, atur [variabel lingkungan](/docs/id/cloud-environments#set-environment-variables) di lingkungan, atau dalam sesi dengan satu repositori, komit kunci ke `.claude/settings.json` repositori tersebut.815* **`/config`**: di browser Anda di claude.ai/code, membuka bagian Claude Code dari pengaturan claude.ai Anda daripada mengubah nilai. Untuk mengubah pengaturan untuk sesi cloud, atur [variabel lingkungan](/docs/id/cloud-environments#set-environment-variables) di lingkungan, atau dalam sesi dengan satu repositori, komit kunci ke `.claude/settings.json` repositori tersebut.

skills.md +2 −0

Details

94| `migrate` | Memperbarui kode Claude API Anda yang sudah ada ke model yang lebih baru | Lebih awal dari v2.1.221 |94| `migrate` | Memperbarui kode Claude API Anda yang sudah ada ke model yang lebih baru | Lebih awal dari v2.1.221 |

95| `upgrade` | Memindahkan dependensi Anthropic SDK proyek Anda melintasi versi mayor, saat ini paket Python `anthropic` dari 0.x ke 1.x | v2.1.236 atau yang lebih baru |95| `upgrade` | Memindahkan dependensi Anthropic SDK proyek Anda melintasi versi mayor, saat ini paket Python `anthropic` dari 0.x ke 1.x | v2.1.236 atau yang lebih baru |

96| `managed-agents-onboard` | Memandu pembuatan Managed Agent baru | Lebih awal dari v2.1.221 |96| `managed-agents-onboard` | Memandu pembuatan Managed Agent baru | Lebih awal dari v2.1.221 |

97| `managed-agents-onboard <url>` | Membangun Managed Agent yang dijelaskan oleh halaman di URL tersebut, seperti halaman di [dokumentasi Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) | v2.1.290 atau yang lebih baru |

98| `managed-agents-onboard <quickstart-name>` | Membangun salah satu template mulai cepat Console, seperti `deep-researcher`. Jika Anda memberikan satu kata yang bukan nama template, Claude mencantumkan nama-nama yang valid | v2.1.290 atau yang lebih baru |

97| `prompt-audit` | Menandai instruksi yang ditulis untuk model lama di prompt, skill, dan deskripsi tool Anda serta mengusulkan perbaikan sebagai diff | v2.1.221 atau yang lebih baru |99| `prompt-audit` | Menandai instruksi yang ditulis untuk model lama di prompt, skill, dan deskripsi tool Anda serta mengusulkan perbaikan sebagai diff | v2.1.221 atau yang lebih baru |

98| `cost-optimize` | Memprofilkan ke mana pengeluaran Claude API proyek Anda digunakan dan mengusulkan penghematan dari opsi seperti prompt caching, memangkas token input dan output yang tidak diperlukan, pemrosesan batch, effort, dan pilihan model, satu perubahan dalam satu waktu | v2.1.247 atau yang lebih baru |100| `cost-optimize` | Memprofilkan ke mana pengeluaran Claude API proyek Anda digunakan dan mengusulkan penghematan dari opsi seperti prompt caching, memangkas token input dan output yang tidak diperlukan, pemrosesan batch, effort, dan pilihan model, satu perubahan dalam satu waktu | v2.1.247 atau yang lebih baru |

99| `build-eval` | Membangun set eval untuk aplikasi Anda yang didukung Claude | v2.1.259 atau yang lebih baru |101| `build-eval` | Membangun set eval untuk aplikasi Anda yang didukung Claude | v2.1.259 atau yang lebih baru |

sub-agents.md +4 −2

Details

609Mode izin percakapan utama memutuskan apakah Claude Code menggunakan nilai yang Anda atur:609Mode izin percakapan utama memutuskan apakah Claude Code menggunakan nilai yang Anda atur:

610 610 

611* Ketika percakapan utama berada dalam `bypassPermissions`, `acceptEdits`, atau [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode), subagent berjalan dalam mode yang sama dan Claude Code mengabaikan `permissionMode` yang Anda atur. Di bawah auto mode, pengklasifikasi mengevaluasi panggilan tool subagent dengan aturan blok dan izin percakapan utama. Ketika subagent selesai, pengklasifikasi juga meninjau pekerjaan dan laporan finalnya sebelum laporan dikirimkan, seperti [How auto mode handles subagents](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) menjelaskan.611* Ketika percakapan utama berada dalam `bypassPermissions`, `acceptEdits`, atau [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode), subagent berjalan dalam mode yang sama dan Claude Code mengabaikan `permissionMode` yang Anda atur. Di bawah auto mode, pengklasifikasi mengevaluasi panggilan tool subagent dengan aturan blok dan izin percakapan utama. Ketika subagent selesai, pengklasifikasi juga meninjau pekerjaan dan laporan finalnya sebelum laporan dikirimkan, seperti [How auto mode handles subagents](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) menjelaskan.

612* Ketika percakapan utama berada dalam mode `default`, `dontAsk`, atau `plan`, subagent berjalan dalam mode izin yang Anda atur, kecuali `bypassPermissions`. Subagent yang mendeklarasikan `bypassPermissions` menyimpan mode percakapan utama sebagai gantinya. Pengecualian `bypassPermissions` memerlukan Claude Code v2.1.267 atau lebih baru.612* Ketika percakapan utama berada dalam mode `default`, `dontAsk`, atau `plan`, subagent berjalan dalam mode izin yang Anda atur. Subagent tetap menggunakan mode izin percakapan utama dalam kasus berikut:

613 * Anda mengatur `bypassPermissions`. Pengecualian `bypassPermissions` memerlukan Claude Code v2.1.267 atau lebih baru.

614 * Anda mengatur `auto` dan [auto mode tidak tersedia](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) untuk subagent, seperti ketika file pengaturan mengatur [`disableAutoMode`](/docs/id/settings-reference#disableautomode) atau model subagent tidak mendukung auto mode.

613 615 

614`permissionMode` menerima nilai ini, dan `manual` sebagai alias untuk `default`:616`permissionMode` menerima nilai ini, dan `manual` sebagai alias untuk `default`:

615 617 


640Implement API endpoints. Follow the conventions and patterns from the preloaded skills.642Implement API endpoints. Follow the conventions and patterns from the preloaded skills.

641```643```

642 644 

643Konten lengkap dari setiap skill yang tercantum disuntikkan ke dalam konteks subagent saat startup. Field ini mengontrol skill mana yang dimuat sebelumnya, bukan skill mana yang dapat diakses subagent: tanpanya, subagent masih dapat menemukan dan memanggil skill proyek, pengguna, dan plugin melalui tool Skill selama eksekusi. Untuk mencegah subagent dari memanggil skill sepenuhnya, hilangkan `Skill` dari daftar [`tools`](#available-tools) atau tambahkan ke `disallowedTools`.645Konten lengkap dari setiap skill yang tercantum disuntikkan ke dalam konteks subagent saat startup, hingga 32 nama berbeda pertama dalam daftar. Field ini mengontrol skill mana yang dimuat sebelumnya, bukan skill mana yang dapat diakses subagent: tanpanya, subagent masih dapat menemukan dan memanggil skill proyek, pengguna, dan plugin melalui tool Skill selama eksekusi. Untuk mencegah subagent dari memanggil skill sepenuhnya, hilangkan `Skill` dari daftar [`tools`](#available-tools) atau tambahkan ke `disallowedTools`.

644 646 

645Anda tidak dapat memuat skill sebelumnya yang mengatur [`disable-model-invocation: true`](/docs/id/skills#control-who-invokes-a-skill), karena memuat sebelumnya menarik dari set skill yang sama yang dapat dipanggil Claude. Ini termasuk skill `/verify` bundel, yang tidak dapat dijalankan Claude dengan sendirinya.647Anda tidak dapat memuat skill sebelumnya yang mengatur [`disable-model-invocation: true`](/docs/id/skills#control-who-invokes-a-skill), karena memuat sebelumnya menarik dari set skill yang sama yang dapat dipanggil Claude. Ini termasuk skill `/verify` bundel, yang tidak dapat dijalankan Claude dengan sendirinya.

646 648 

Details

666 666 

667* WebFetch menolak `localhost` dan nama host lainnya tanpa titik, seperti nama intranet biasa, sebelum membuat permintaan. [Kesalahan yang dikembalikannya](/docs/id/errors#webfetch-cannot-fetch-localhost) memberitahu Claude untuk menjangkau server lokal dengan `curl` melalui Bash sebagai gantinya.667* WebFetch menolak `localhost` dan nama host lainnya tanpa titik, seperti nama intranet biasa, sebelum membuat permintaan. [Kesalahan yang dikembalikannya](/docs/id/errors#webfetch-cannot-fetch-localhost) memberitahu Claude untuk menjangkau server lokal dengan `curl` melalui Bash sebagai gantinya.

668* URL HTTP secara otomatis ditingkatkan ke HTTPS.668* URL HTTP secara otomatis ditingkatkan ke HTTPS.

669* Halaman besar dipotong ke batas karakter tetap sebelum diproses.669* WebFetch membaca hingga 100.000 karakter konten halaman per panggilan. Pada Claude Code v2.1.290 atau lebih baru, hasil untuk halaman yang lebih panjang memberi tahu Claude berapa banyak yang belum terbaca, sehingga Claude dapat mengambil bagian berikutnya.

670* WebFetch menyimpan cache setiap respons selama 15 menit secara default, jadi pengambilan berulang dari URL yang sama kembali dengan cepat. Pada Claude Code v2.1.233 atau lebih baru, atur [`CLAUDE_CODE_WEBFETCH_CACHE_TTL_MS`](/docs/id/env-vars#variables) untuk mengubah berapa lama WebFetch menyimpan setiap respons.670* WebFetch menyimpan cache setiap respons selama 15 menit secara default, jadi pengambilan berulang dari URL yang sama kembali dengan cepat. Pada Claude Code v2.1.233 atau lebih baru, atur [`CLAUDE_CODE_WEBFETCH_CACHE_TTL_MS`](/docs/id/env-vars#variables) untuk mengubah berapa lama WebFetch menyimpan setiap respons.

671* Halaman yang belum selesai diunduh dalam lima menit, termasuk pengalihan apa pun yang diikuti WebFetch, gagal dengan kesalahan batas waktu. Pada Claude Code v2.1.268 atau lebih baru, atur [`CLAUDE_CODE_WEBFETCH_DEADLINE_MS`](/docs/id/env-vars#variables) untuk mengubah batas, atau ke `0` untuk menghapusnya.671* Halaman yang belum selesai diunduh dalam lima menit, termasuk pengalihan apa pun yang diikuti WebFetch, gagal dengan kesalahan batas waktu. Pada Claude Code v2.1.268 atau lebih baru, atur [`CLAUDE_CODE_WEBFETCH_DEADLINE_MS`](/docs/id/env-vars#variables) untuk mengubah batas, atau ke `0` untuk menghapusnya.

672* Ketika URL dialihkan ke host yang berbeda, WebFetch mengembalikan hasil teks yang menyebutkan URL asli dan target pengalihan alih-alih mengikutinya. Claude kemudian mengambil URL baru dengan panggilan WebFetch kedua.672* Ketika URL dialihkan ke host yang berbeda, WebFetch mengembalikan hasil teks yang menyebutkan URL asli dan target pengalihan alih-alih mengikutinya. Claude kemudian mengambil URL baru dengan panggilan WebFetch kedua.

ultrareview.md +6 −6

Details

56 Tinjau pull request56 Tinjau pull request

57</h3>57</h3>

58 58 

59Untuk meninjau pull request GitHub sebagai gantinya dari cabang lokal, teruskan nomor PR:59Untuk meninjau pull request di `github.com` alih-alih branch lokal, teruskan nomor PR:

60 60 

61```text theme={null}61```text theme={null}

62/code-review ultra 123462/code-review ultra 1234


64 64 

65Perintah juga menerima `#1234`, `PR 1234`, dan URL PR yang ditempel; URL yang ditempel harus menunjuk ke repositori di direktori saat ini Anda.65Perintah juga menerima `#1234`, `PR 1234`, dan URL PR yang ditempel; URL yang ditempel harus menunjuk ke repositori di direktori saat ini Anda.

66 66 

67Dalam mode PR, sandbox jarak jauh mengkloning pull request langsung dari host daripada membundel pohon kerja lokal Anda. Mode PR bekerja dengan repositori di `github.com` dan pada instans [GitHub Enterprise Server](/docs/id/github-enterprise-server) yang telah dihubungkan oleh Owner ke Claude Code.67Mode PR memerlukan repositori di `github.com`. Untuk repositori pada instans [GitHub Enterprise Server](/docs/id/github-enterprise-server), jalankan `/code-review ultra` tanpa nomor PR untuk meninjau branch lokal Anda sebagai gantinya.

68 68 

69Untuk repositori di `github.com`, sandbox mengkloning dengan akun GitHub yang terhubung ke akun Claude Anda, jadi akun harus dapat membaca repositori PR.69Dalam mode PR, sandbox cloud mengkloning pull request dari `github.com` alih-alih mengunggah pohon kerja Anda. Sandbox menggunakan akun GitHub yang terhubung ke akun Claude Anda, jadi akun tersebut memerlukan akses baca ke repositori.

70 70 

71Jalankan [`/web-setup`](/docs/id/web-quickstart#connect-from-your-terminal) untuk menghubungkan login GitHub CLI Anda ke akun Claude Anda.71Jalankan [`/web-setup`](/docs/id/web-quickstart#connect-from-your-terminal) untuk menghubungkan login GitHub CLI Anda ke akun Claude Anda.

72 72 


74 Posting temuan ke pull request74 Posting temuan ke pull request

75</h3>75</h3>

76 76 

77Pada Claude Code v2.1.227 atau lebih baru, ketika Anda meninjau pull request di `github.com`, Anda dapat membuat Claude memposting temuan yang selesai ke PR sebagai komentar polos tunggal dari akun GitHub Anda sendiri. Komentar bukan tinjauan atau persetujuan, dan berakhir dengan catatan "Generated by Claude Code". Ketika Anda meninjau cabang atau pull request GitHub Enterprise Server, Claude Code menampilkan temuan di sesi Anda saja.77Pada Claude Code v2.1.227 atau lebih baru, ketika Anda meninjau pull request di `github.com`, Anda dapat membuat Claude memposting temuan yang selesai ke PR sebagai komentar polos tunggal dari akun GitHub Anda sendiri. Komentar bukan tinjauan atau persetujuan, dan berakhir dengan catatan "Generated by Claude Code". Ketika Anda meninjau branch, Claude Code menampilkan temuan di sesi Anda saja.

78 78 

79Claude Code tidak pernah memposting kecuali Anda memilih untuk melakukannya pada run itu, dan `--no-post` adalah default. Posting adalah pilihan yang Anda buat untuk setiap run:79Claude Code tidak pernah memposting kecuali Anda memilih untuk melakukannya pada run itu, dan `--no-post` adalah default. Posting adalah pilihan yang Anda buat untuk setiap run:

80 80 


106Claude Code memperlakukan teks Anda sebagai catatan hanya ketika memiliki lebih dari satu kata dan bukan nama cabang atau referensi PR. Ini membaca satu kata sebagai nama cabang atau referensi PR, jadi nama cabang yang salah ketik mendapat kesalahan cabang terdekat dari [Tinjau terhadap basis yang berbeda](#review-against-a-different-base) sebagai gantinya meluncurkan dengan catatan. Jika teks Anda menggabungkan referensi PR dengan kata-kata lain, seperti `check PR 123 again`, Claude Code juga tidak meluncurkan; itu meminta Anda untuk menjalankan kembali dengan nomor PR saja untuk meninjau PR itu, atau tanpa referensi untuk meninjau cabang saat ini Anda.106Claude Code memperlakukan teks Anda sebagai catatan hanya ketika memiliki lebih dari satu kata dan bukan nama cabang atau referensi PR. Ini membaca satu kata sebagai nama cabang atau referensi PR, jadi nama cabang yang salah ketik mendapat kesalahan cabang terdekat dari [Tinjau terhadap basis yang berbeda](#review-against-a-different-base) sebagai gantinya meluncurkan dengan catatan. Jika teks Anda menggabungkan referensi PR dengan kata-kata lain, seperti `check PR 123 again`, Claude Code juga tidak meluncurkan; itu meminta Anda untuk menjalankan kembali dengan nomor PR saja untuk meninjau PR itu, atau tanpa referensi untuk meninjau cabang saat ini Anda.

107 107 

108<Tip>108<Tip>

109 Jika repositori Anda terlalu besar untuk dibundel, Claude Code meminta Anda menggunakan mode PR sebagai gantinya. Dorong cabang Anda dan buka PR draft, kemudian jalankan `/code-review ultra <PR-number>`.109 Jika repositori Anda terlalu besar untuk dibundel, Claude Code meminta Anda menggunakan mode PR sebagai gantinya. Untuk repositori di `github.com`, push branch Anda dan buka PR draft, kemudian jalankan `/code-review ultra <PR-number>`.

110</Tip>110</Tip>

111 111 

112<h3 id="diff-limits-and-fallbacks">112<h3 id="diff-limits-and-fallbacks">


173claude ultrareview origin/main173claude ultrareview origin/main

174```174```

175 175 

176Tanpa argumen, subperintah meninjau perbedaan antara cabang saat ini Anda dan cabang default, dengan [fallback seluruh repositori](#diff-limits-and-fallbacks) yang sama seperti `/code-review ultra` ketika tidak ada merge base. Teruskan nomor PR untuk meninjau pull request, atau teruskan cabang dasar untuk meninjau terhadapnya; [penanganan cabang dasar](#review-against-a-different-base) cocok dengan perintah interaktif.176Tanpa argumen, subperintah meninjau diff antara branch Anda saat ini dan branch default, dengan [fallback seluruh repositori](#diff-limits-and-fallbacks) yang sama seperti `/code-review ultra` ketika tidak ada merge base. Teruskan nomor PR untuk [meninjau pull request di `github.com`](#review-a-pull-request), atau teruskan branch dasar untuk meninjau terhadapnya; [penanganan branch dasar](#review-against-a-different-base) cocok dengan perintah interaktif.

177 177 

178Anda menyetujui fallback seluruh repositori dan prompt penagihan serta syarat ketika Anda menjalankan subperintah, sehingga jalankan dimulai tanpa menunggu input. Menjalankannya sendiri adalah apa yang dihitung sebagai persetujuan. Ketika Claude menjalankan subperintah untuk Anda sebagai gantinya, misalnya melalui alat Bash, Claude Code menolak tinjauan seluruh repositori.178Anda menyetujui fallback seluruh repositori dan prompt penagihan serta syarat ketika Anda menjalankan subperintah, sehingga jalankan dimulai tanpa menunggu input. Menjalankannya sendiri adalah apa yang dihitung sebagai persetujuan. Ketika Claude menjalankan subperintah untuk Anda sebagai gantinya, misalnya melalui alat Bash, Claude Code menolak tinjauan seluruh repositori.

179 179 

vs-code.md +1 −0

Details

166* **Bookmarks**: arahkan kursor ke respons dan klik **Bookmark response** untuk menyimpannya, atau klik **Remove bookmark** pada respons yang disimpan untuk menghapusnya.166* **Bookmarks**: arahkan kursor ke respons dan klik **Bookmark response** untuk menyimpannya, atau klik **Remove bookmark** pada respons yang disimpan untuk menghapusnya.

167 167 

168 Untuk meninjau respons yang disimpan, buka panel Bookmarks: klik ikon bookmark di bagian atas panel Claude Code, pilih **Bookmarks** di bagian Context pada menu perintah, atau ketik `/bookmarks`. Memerlukan Claude Code v2.1.286 atau lebih baru.168 Untuk meninjau respons yang disimpan, buka panel Bookmarks: klik ikon bookmark di bagian atas panel Claude Code, pilih **Bookmarks** di bagian Context pada menu perintah, atau ketik `/bookmarks`. Memerlukan Claude Code v2.1.286 atau lebih baru.

169* **Files Claude sends you**: ketika sesi terhubung ke [Remote Control](/docs/id/remote-control#start-a-remote-control-session) dan Claude mengirimkan file kepada Anda dengan [tool `SendUserFile`](/docs/id/tools-reference), percakapan menampilkan baris seperti **Sent report.md, chart.png**. Klik nama file untuk membukanya di editor.

169* **Context indicator**: kotak prompt menunjukkan berapa banyak jendela konteks Claude yang Anda gunakan. Claude secara otomatis mengompres saat diperlukan, atau Anda dapat menjalankan `/compact` secara manual.170* **Context indicator**: kotak prompt menunjukkan berapa banyak jendela konteks Claude yang Anda gunakan. Claude secara otomatis mengompres saat diperlukan, atau Anda dapat menjalankan `/compact` secara manual.

170* **Prompt cache clock**: ikon jam di samping indikator konteks memperkirakan berapa banyak waktu [prompt cache](/docs/id/prompt-caching) percakapan yang tersisa sebelum kedaluwarsa. Ini menghitung mundur dari [lifetime](/docs/id/prompt-caching#cache-lifetime) cache lima menit atau satu jam, dan setiap respons yang menggunakan cache memulai ulang hitungan mundur. Terlepas dari pemadatan, [tindakan yang membatalkan cache](/docs/id/prompt-caching#actions-that-invalidate-the-cache) tidak mengatur ulang jam, jadi masih dapat menunjukkan menit yang tersisa setelah Anda beralih model.171* **Prompt cache clock**: ikon jam di samping indikator konteks memperkirakan berapa banyak waktu [prompt cache](/docs/id/prompt-caching) percakapan yang tersisa sebelum kedaluwarsa. Ini menghitung mundur dari [lifetime](/docs/id/prompt-caching#cache-lifetime) cache lima menit atau satu jam, dan setiap respons yang menggunakan cache memulai ulang hitungan mundur. Terlepas dari pemadatan, [tindakan yang membatalkan cache](/docs/id/prompt-caching#actions-that-invalidate-the-cache) tidak mengatur ulang jam, jadi masih dapat menunjukkan menit yang tersisa setelah Anda beralih model.

171 * Sampai hitungan mundur habis, ikon menunjukkan menit yang tersisa, seperti **12m**.172 * Sampai hitungan mundur habis, ikon menunjukkan menit yang tersisa, seperti **12m**.

workflows.md +27 −1

Details

354 354 

355Badan adalah JavaScript biasa dengan `await` tingkat atas. `agent()` menghasilkan satu subagen, `pipeline()` menjalankan satu per item dalam daftar, dan `parallel()` menjalankan serangkaian tugas agen pada waktu yang sama dan menunggu semuanya selesai.355Badan adalah JavaScript biasa dengan `await` tingkat atas. `agent()` menghasilkan satu subagen, `pipeline()` menjalankan satu per item dalam daftar, dan `parallel()` menjalankan serangkaian tugas agen pada waktu yang sama dan menunggu semuanya selesai.

356 356 

357Panggilan `agent()` diselesaikan ke `null` jika Anda menghentikannya di tengah-jalan atau mengalami kesalahan API yang tidak dapat dipulihkan. `pipeline()` menyimpan setiap `null` dalam array hasil, itulah mengapa contoh berakhir dengan `.filter(Boolean)` untuk menghapus entri tersebut.357Panggilan `agent()` diselesaikan ke `null` jika Anda menghentikannya di tengah-jalan atau mengalami kesalahan API yang tidak dapat dipulihkan. `pipeline()` menyimpan setiap `null` dalam array hasil, itulah mengapa contoh berakhir dengan `.filter(Boolean)` untuk menghapus entri tersebut, termasuk slot dari [agent yang macet pada setiap upaya](#when-an-agent-stalls-and-restarts).

358 358 

359Dalam [mode otomatis](/docs/id/permission-modes#eliminate-prompts-with-auto-mode), prompt yang diteruskan skrip Anda ke `agent()` tidak dihitung sebagai permintaan dari Anda ketika pengklasifikasi meninjau tindakan subagen itu, karena Claude Code menandainya sebagai teks yang dihitung skrip.359Dalam [mode otomatis](/docs/id/permission-modes#eliminate-prompts-with-auto-mode), prompt yang diteruskan skrip Anda ke `agent()` tidak dihitung sebagai permintaan dari Anda ketika pengklasifikasi meninjau tindakan subagen itu, karena Claude Code menandainya sebagai teks yang dihitung skrip.

360 360 


463* Batas direset dalam 24 jam. Batas mingguan dapat direset lebih jauh.463* Batas direset dalam 24 jam. Batas mingguan dapat direset lebih jauh.

464* Run belum menunggu dua kali. Ketika mencapai batas untuk ketiga kalinya, agen gagal.464* Run belum menunggu dua kali. Ketika mencapai batas untuk ketiga kalinya, agen gagal.

465 465 

466<h3 id="when-an-agent-stalls-and-restarts">

467 Ketika agent macet dan dimulai ulang

468</h3>

469 

470Agent yang outputnya berhenti datang cukup lama akan dimulai ulang dari prompt yang sama. Di [`/workflows`](#watch-the-run), namanya mendapat akhiran `(retry 1)` dan detailnya menampilkan `attempt 2 (stalled)`. Mulai ulang terjadi secara otomatis, jadi Anda tidak perlu melakukan apa pun.

471 

472Percobaan baru dimulai tanpa transkrip dari percobaan yang macet. File yang sudah diubah oleh percobaan yang macet tetap berubah, dan token yang dihabiskannya tetap masuk dalam total run. Jendela macet adalah berapa lama Claude Code menunggu output dari agent sebelum mengakhiri percobaan. Waktu yang dihabiskan agent untuk menunggu panggilan tool-nya sendiri atau [reset batas penggunaan](#when-a-run-hits-your-usage-limit) tidak dihitung dalam jendela macet.

473 

474Agent dimulai ulang paling banyak lima kali, termasuk mulai ulang yang Anda minta dengan `r`. Jika percobaan keenam juga macet, panggilan `agent()` gagal, dan awal pesan kesalahan menjelaskan alasannya:

475 

476* `agent stalled on all 6 attempts`: setiap percobaan melewati seluruh jendela tanpa output. Jika pekerjaan agent membuatnya diam selama itu, perpanjang jendelanya

477* `agent lost its reply on all 6 attempts`: stream respons setiap percobaan menjadi diam dan Claude Code berhenti menunggunya. Memperpanjang jendela macet tidak membantu, karena [streaming idle watchdog](/docs/id/network-config#streaming-idle-watchdogs) mengakhiri respons lebih dulu dan `CLAUDE_STREAM_IDLE_TIMEOUT_MS` mengatur timeout watchdog tersebut

478* `agent abandoned after 6 attempts`: percobaan berakhir dengan cara yang berbeda-beda, yang dicantumkan oleh pesan kesalahan secara berurutan

479 

480Untuk memberi agent lebih banyak waktu menghasilkan output sebelum jendela berakhir:

481 

482* **Satu agent**: teruskan `stallMs` dalam milidetik pada panggilan `agent()`-nya, seperti `agent(prompt, { stallMs: 1800000 })` untuk 30 menit

483* **Setiap agent**: atur [`CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`](/docs/id/env-vars#variables), yang juga berlaku untuk subagent di luar alur kerja

484 

485Apakah run berlanjut setelah kegagalan tergantung pada cara skrip Anda memanggil agent:

486 

487* **Di dalam [`parallel()` atau `pipeline()`](#what-the-saved-script-looks-like)**: run berlanjut dengan `null` sebagai pengganti hasil agent

488* **Di-await secara langsung**: run berakhir dengan kesalahan tersebut

489 

490Untuk mencoba lagi, minta Claude untuk meluncurkan kembali alur kerja. [Lanjutkan setelah jeda](#resume-after-a-pause) menjelaskan apa yang berjalan lagi.

491 

466<h3 id="cost">492<h3 id="cost">

467 Biaya493 Biaya

468</h3>494</h3>

worktrees.md +1 −1

Details

104* **Pengalihan git**: Claude Code memblokir perintah Bash atau Monitor yang mengalihkan git ke checkout utama. Pengalihan dapat datang melalui `git -C`, `--git-dir`, variabel `GIT_DIR` atau `GIT_WORK_TREE`, atau `cd` ke checkout utama sebelum menjalankan git.104* **Pengalihan git**: Claude Code memblokir perintah Bash atau Monitor yang mengalihkan git ke checkout utama. Pengalihan dapat datang melalui `git -C`, `--git-dir`, variabel `GIT_DIR` atau `GIT_WORK_TREE`, atau `cd` ke checkout utama sebelum menjalankan git.

105* **Bentuk perintah**: Claude Code memblokir perintah Bash atau Monitor saat tidak dapat memverifikasi dari teks perintah bahwa git apa pun yang dijalankan perintah tetap berada di dalam worktree. Itu terjadi, misalnya, saat nama perintah dihitung saat runtime, saat sintaks tidak dapat diuraikan, atau saat ekspansi seperti `${!name}` atau `${ command; }` dapat menjalankan perintah yang teks tidak jelaskan. Claude Code memberi tahu Claude cara menulis ulang perintah yang ditolak, seperti membaginya menjadi perintah biasa yang terpisah. Anda tidak dapat mematikan pemeriksaan ini.105* **Bentuk perintah**: Claude Code memblokir perintah Bash atau Monitor saat tidak dapat memverifikasi dari teks perintah bahwa git apa pun yang dijalankan perintah tetap berada di dalam worktree. Itu terjadi, misalnya, saat nama perintah dihitung saat runtime, saat sintaks tidak dapat diuraikan, atau saat ekspansi seperti `${!name}` atau `${ command; }` dapat menjalankan perintah yang teks tidak jelaskan. Claude Code memberi tahu Claude cara menulis ulang perintah yang ditolak, seperti membaginya menjadi perintah biasa yang terpisah. Anda tidak dapat mematikan pemeriksaan ini.

106 106 

107Pemeriksaan ini membaca jalur yang ditargetkan oleh sebuah edit, direktori tempat perintah dijalankan, dan teks perintah. Tidak satu pun dari pemeriksaan ini melacak file mana yang ditulis oleh perintah shell, sehingga perintah yang menulis ke checkout utama tanpa menjalankan git di sana, seperti `cp` atau pengalihan shell, tidak ditolak olehnya. Claude Code memperlakukan perintah tersebut seperti perintah shell lainnya, sehingga apakah perintah itu dijalankan atau Claude Code meminta persetujuan Anda bergantung pada [mode izin](/docs/id/permission-modes) dan aturan Anda.107Pemeriksaan ini membaca jalur yang ditargetkan oleh sebuah edit, direktori tempat perintah dijalankan, dan teks perintah. Tidak satu pun dari pemeriksaan ini melacak file mana yang ditulis oleh perintah shell, sehingga perintah yang menulis ke checkout utama tanpa menjalankan git di sana, seperti `cp` atau pengalihan shell, tidak ditolak olehnya. Claude Code memperlakukan perintah tersebut seperti perintah shell lainnya berdasarkan pengaturan [izin](/docs/id/permissions) dan [sandboxing](/docs/id/sandboxing) Anda.

108 108 

109Pemeriksaan berlaku untuk repositori tempat Anda meluncurkan Claude Code. Mereka juga mencakup checkout utama yang ditautkan worktree ditautkan darinya. Untuk perintah PowerShell, Claude Code hanya menerapkan pemeriksaan direktori kerja.109Pemeriksaan berlaku untuk repositori tempat Anda meluncurkan Claude Code. Mereka juga mencakup checkout utama yang ditautkan worktree ditautkan darinya. Untuk perintah PowerShell, Claude Code hanya menerapkan pemeriksaan direktori kerja.

110 110