SpyBara
Go Premium

Documentation 2026-10-16 22:59 UTC to 2026-10-17 23:57 UTC

23 files changed +185 −73. View all changes and history on the product overview
2026
Fri 30 23:01 Thu 29 23:57 Wed 28 23:57 Tue 27 22:59 Mon 26 22:57 Sun 25 23:58 Sat 24 22:59 Fri 23 22:59 Thu 22 22:58 Wed 21 23:02 Tue 20 23:00 Mon 19 23:58 Sat 17 23:57 Fri 16 22:59 Thu 15 23:58 Wed 14 22:58 Tue 13 23:57 Sun 11 23:57 Sat 10 23:01 Fri 9 23:02 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

165 Panggil alat kustom165 Panggil alat kustom

166</h3>166</h3>

167 167 

168Teruskan server MCP yang Anda buat ke `query` melalui opsi `mcpServers`. Kunci dalam `mcpServers` menjadi segmen `{server_name}` dalam nama lengkap setiap alat: `mcp__{server_name}__{tool_name}`. Daftarkan nama itu dalam `allowedTools` sehingga alat berjalan tanpa prompt izin.168Teruskan server MCP yang Anda buat ke `query` melalui opsi `mcpServers`. [Nama lengkap (fully qualified name)](/docs/id/agent-sdk/mcp#tool-naming-convention) setiap tool adalah `mcp__{server_name}__{tool_name}`, dengan `{server_name}` adalah kunci yang Anda berikan untuk server dalam `mcpServers`. Jika kunci tersebut berisi karakter seperti `.` atau spasi, ganti karakter tersebut dengan `_` saat Anda menulis `{server_name}`. Daftarkan nama lengkap tersebut dalam `allowedTools` sehingga tool berjalan tanpa permintaan izin.

169 169 

170Potongan ini menggunakan kembali `weatherServer` dari [contoh alat cuaca](#weather-tool-example) untuk menanyakan Claude tentang cuaca di lokasi tertentu.170Potongan ini menggunakan kembali `weatherServer` dari [contoh alat cuaca](#weather-tool-example) untuk menanyakan Claude tentang cuaca di lokasi tertentu.

171 171 

Details

235 235 

236| Option | Type | Default | Description |236| Option | Type | Default | Description |

237| - | - | - | - |237| - | - | - | - |

238| `matcher` | `string` | `undefined` | Pola yang cocok dengan field filter event, mengikuti [aturan untuk matchers dalam file settings](/docs/id/hooks#matcher-patterns). Untuk tool hooks, ini adalah nama tool. Built-in tools termasuk `Bash`, `Read`, `Write`, `Edit`, `Glob`, `Grep`, `WebFetch`, `Agent`, dan lainnya (lihat [Tool Input Types](/docs/id/agent-sdk/typescript#tool-input-types) untuk daftar lengkap). MCP tools menggunakan pola `mcp__<server>__<action>`, di mana `<server>` adalah key yang Anda gunakan dalam konfigurasi `mcpServers`. |238| `matcher` | `string` | `undefined` | Pola yang cocok dengan field filter event, mengikuti [aturan untuk matchers dalam file settings](/docs/id/hooks#matcher-patterns). Untuk tool hooks, field tersebut adalah nama tool. Built-in tools termasuk `Bash`, `Read`, `Write`, `Edit`, `Glob`, `Grep`, `WebFetch`, `Agent`, dan lainnya. Lihat [Tool Input Types](/docs/id/agent-sdk/typescript#tool-input-types) untuk daftar lengkap. MCP tools menggunakan pola `mcp__<server>__<action>`, di mana `<server>` adalah key yang Anda gunakan dalam konfigurasi `mcpServers`, dieja sebagaimana dijelaskan dalam [konvensi penamaan tool](/docs/id/agent-sdk/mcp#tool-naming-convention). |

239| `hooks` | `HookCallback[]` | - | Diperlukan. Array dari fungsi callback untuk dieksekusi ketika pola cocok |239| `hooks` | `HookCallback[]` | - | Diperlukan. Array dari fungsi callback untuk dieksekusi ketika pola cocok |

240| `timeout` | `number` | `undefined` | Timeout dalam detik. Ketika dihilangkan, Claude Code menerapkan [timeout default event](#hook-timeout). SDK callbacks Anda mengikuti default hook `command` |240| `timeout` | `number` | `undefined` | Timeout dalam detik. Ketika dihilangkan, Claude Code menerapkan [timeout default event](#hook-timeout). SDK callbacks Anda mengikuti default hook `command` |

241 241 

agent-sdk/mcp.md +10 −1

Details

196 Konvensi penamaan alat196 Konvensi penamaan alat

197</h3>197</h3>

198 198 

199Alat MCP mengikuti pola penamaan `mcp__<server-name>__<tool-name>`. Misalnya, server GitHub bernama `"github"` dengan alat `list_issues` menjadi `mcp__github__list_issues`.199Tool MCP diberi nama `mcp__<server-name>__<tool-name>`, dengan `<server-name>` adalah nama yang Anda gunakan untuk mendaftarkan server, seperti kuncinya di `mcpServers`.

200 

201Karakter dalam nama server seperti `.` dan spasi diganti dengan `_`. Tabel ini menunjukkan nama lengkap tool `list_issues` untuk dua kunci server:

202 

203| Kunci di `mcpServers` | Nama tool lengkap |

204| :- | :- |

205| `github` | `mcp__github__list_issues` |

206| `my.server` | `mcp__my_server__list_issues` |

207 

208Gunakan nama tool lengkap di `allowedTools` dan di [aturan izin MCP](/docs/id/permissions#mcp). Untuk server yang disediakan oleh [plugin](/docs/id/agent-sdk/plugins), `<server-name>` menggunakan [bentuk dengan cakupan plugin](/docs/id/mcp#plugin-provided-mcp-servers) dan diawali dengan `plugin_`.

200 209 

201<h3 id="auto-approve-with-allowedtools">210<h3 id="auto-approve-with-allowedtools">

202 Auto-approve dengan allowedTools211 Auto-approve dengan allowedTools

Details

16 16 

17<Steps>17<Steps>

18 <Step title="Hooks">18 <Step title="Hooks">

19 Jalankan [hooks](/docs/id/agent-sdk/hooks) terlebih dahulu. Hook dapat menolak panggilan sepenuhnya atau meneruskannya. Hook yang mengembalikan `allow` tidak melewati aturan deny dan ask di bawah; aturan tersebut dievaluasi terlepas dari hasil hook. Hook `PreToolUse` allow juga tidak dapat menyetujui penghapusan `rm` atau `rmdir` yang menargetkan [jalur kritis](/docs/id/permission-modes#critical-paths).19 Jalankan [hooks](/docs/id/agent-sdk/hooks) terlebih dahulu. Hook dapat menolak panggilan sepenuhnya atau meneruskannya. Hook yang mengembalikan `allow` tidak melewati aturan deny dan ask di bawah; aturan tersebut dievaluasi terlepas dari hasil hook. Hook `PreToolUse` yang mengembalikan `allow` juga tidak dapat menyetujui penghapusan `rm` atau `rmdir` yang menargetkan [jalur kritis](/docs/id/permission-modes#critical-paths). Untuk mengetahui apa yang dilakukan `allow` tersebut dalam plan mode, lihat [Persetujuan hook dalam plan mode](/docs/id/permissions#hook-approvals-in-plan-mode).

20 </Step>20 </Step>

21 21 

22 <Step title="Deny rules">22 <Step title="Deny rules">

23 Periksa aturan `deny` (dari `disallowed_tools` dan [settings.json](/docs/id/settings-reference#permission-settings)). Jika aturan deny cocok, alat diblokir, bahkan dalam mode `bypassPermissions`. Aturan deny dengan nama bare seperti `Bash` menghapus alat dari konteks Claude sebelum evaluasi ini dimulai, jadi hanya aturan yang dibatasi seperti `Bash(rm *)` yang diperiksa pada langkah ini.23 Periksa aturan `deny` (dari `disallowed_tools` dan [settings.json](/docs/id/settings-reference#permission-settings)). Jika aturan deny cocok, tool diblokir, bahkan dalam mode `bypassPermissions`. Aturan deny dengan nama bare seperti `Bash` menghapus tool dari konteks Claude sebelum evaluasi ini dimulai, jadi hanya aturan yang dibatasi seperti `Bash(rm *)` yang diperiksa pada langkah ini.

24 </Step>24 </Step>

25 25 

26 <Step title="Ask rules">26 <Step title="Ask rules">


161 161 

162<Tabs>162<Tabs>

163 <Tab title="Pada waktu query">163 <Tab title="Pada waktu query">

164 Lewatkan `permission_mode` (Python) atau `permissionMode` (TypeScript) saat membuat query. Mode ini berlaku untuk seluruh sesi kecuali diubah secara dinamis.164 Lewatkan `permission_mode` (Python) atau `permissionMode` (TypeScript) saat membuat query.

165 165 

166 <CodeGroup>166 <CodeGroup>

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


314 314 

315Claude menjelajahi basis kode dan menghasilkan rencana tanpa mengedit file sumber Anda. Tools read-only berjalan seperti dalam mode izin `default`.315Claude menjelajahi basis kode dan menghasilkan rencana tanpa mengedit file sumber Anda. Tools read-only berjalan seperti dalam mode izin `default`.

316 316 

317Pengeditan file tidak pernah auto-approved dalam mode rencana, bahkan ketika aturan izin cocok. Mereka meminta melalui callback `canUseTool` Anda sebagai gantinya. Pada Claude Code v2.1.212 atau lebih baru, perintah shell yang memodifikasi file, seperti `touch` dan `rm`, mencapai callback `canUseTool` Anda dengan cara yang sama.317Pengeditan file tidak pernah auto-approved dalam plan mode, bahkan ketika aturan allow cocok atau hook `PreToolUse` mengembalikan `allow`. Pengeditan tersebut meminta melalui callback `canUseTool` Anda sebagai gantinya. Pada Claude Code v2.1.212 atau lebih baru, perintah shell yang memodifikasi file, seperti `touch` dan `rm`, mencapai callback `canUseTool` Anda dengan cara yang sama.

318 318 

319Dalam SDK TypeScript, jika Anda mengatur `allowDangerouslySkipPermissions: true` bersama dengan `permissionMode: 'plan'`, pengeditan file dan perintah shell yang memodifikasi file masih mencapai callback `canUseTool` Anda. Opsi ini memungkinkan Anda untuk beralih ke `bypassPermissions` nanti dengan `setPermissionMode()`.319Dalam SDK TypeScript, jika Anda mengatur `allowDangerouslySkipPermissions: true` bersama dengan `permissionMode: 'plan'`, pengeditan file dan perintah shell yang memodifikasi file masih mencapai callback `canUseTool` Anda. Opsi ini memungkinkan Anda untuk beralih ke `bypassPermissions` nanti dengan `setPermissionMode()`.

320 320 


322 322 

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

324 324 

325<h4 id="auto-mode-auto">

326 Auto mode (`auto`)

327</h4>

328 

329Model pengklasifikasi meninjau tindakan seperti perintah shell dan permintaan jaringan sebelum dijalankan, serta mengizinkan atau memblokir masing-masing yang ditinjaunya. Untuk model dan penyedia yang diperlukan auto mode serta urutan evaluasi tindakannya, lihat [Hilangkan prompt izin dengan auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode).

330 

331Jika Anda mengalihkan sesi yang berada dalam auto mode ke model yang tidak didukung auto mode, menggunakan [`set_model()`](/docs/id/agent-sdk/python#claudesdkclient), [`setModel()`](/docs/id/agent-sdk/typescript#query-object), atau [`applyFlagSettings()`](/docs/id/agent-sdk/typescript#applyflagsettings), sesi berubah ke mode `default`:

332 

333* **Yang Anda lihat**: pesan `system` dengan subtype `status` dan `permissionMode` diatur ke `"default"`, yang diberi tipe oleh SDK TypeScript sebagai [`SDKStatusMessage`](/docs/id/agent-sdk/typescript#sdkstatusmessage). Sejak saat itu, panggilan yang memerlukan persetujuan dan tidak cocok dengan aturan allow mencapai callback `canUseTool` Anda.

334* **Untuk kembali ke auto mode**: beralih ke model yang didukung, lalu panggil `set_permission_mode("auto")` atau `setPermissionMode("auto")`. Jika Anda mengembalikan model tanpa melakukan panggilan tersebut, sesi tetap dalam mode `default`. Selama model yang tidak didukung aktif, panggilan tersebut gagal dengan `Cannot set permission mode to auto: auto mode unavailable for this model`.

335 

336Perubahan ke mode `default` setelah panggilan `set_model()`, `setModel()`, atau `applyFlagSettings()` memerlukan Claude Code v2.1.299 atau lebih baru.

337 

325<h2 id="related-resources">338<h2 id="related-resources">

326 Sumber daya terkait339 Sumber daya terkait

327</h2>340</h2>

Details

610| `receive_response()` | Terima pesan hingga dan termasuk ResultMessage |610| `receive_response()` | Terima pesan hingga dan termasuk ResultMessage |

611| `interrupt()` | Kirim sinyal interrupt (hanya bekerja dalam mode streaming) |611| `interrupt()` | Kirim sinyal interrupt (hanya bekerja dalam mode streaming) |

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

613| `set_model(model)` | Ubah model untuk sesi saat ini. Teruskan `None` untuk reset ke [model default Claude Code](/docs/id/model-config) |613| `set_model(model)` | Ubah model untuk sesi saat ini. Teruskan `None` untuk reset ke [model default Claude Code](/docs/id/model-config). Sesi dalam `auto` mode [berubah ke mode `default`](/docs/id/agent-sdk/permissions#auto-mode-auto) jika model baru tidak mendukung auto mode |

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

615| `get_mcp_status()` | Dapatkan status semua server MCP yang dikonfigurasi. Mengembalikan [`McpStatusResponse`](#mcpstatusresponse) |615| `get_mcp_status()` | Dapatkan status semua server MCP yang dikonfigurasi. Mengembalikan [`McpStatusResponse`](#mcpstatusresponse) |

616| `get_context_usage()` | Dapatkan rincian penggunaan jendela konteks berdasarkan kategori, skill, dan tool. Data yang sama yang ditampilkan `/context` dalam sesi interaktif. Mengembalikan [`ContextUsageResponse`](#contextusageresponse). Untuk menghitung rinciannya, Claude Code membuat beberapa permintaan API penghitungan token yang tidak muncul dalam aliran pesan; lihat [bagaimana permintaan ini ditangani](#contextusageresponse) |616| `get_context_usage()` | Dapatkan rincian penggunaan jendela konteks berdasarkan kategori, skill, dan tool. Data yang sama yang ditampilkan `/context` dalam sesi interaktif. Mengembalikan [`ContextUsageResponse`](#contextusageresponse). Untuk menghitung rinciannya, Claude Code membuat beberapa permintaan API penghitungan token yang tidak muncul dalam aliran pesan; lihat [bagaimana permintaan ini ditangani](#contextusageresponse) |


3884 Atur `"failIfUnavailable": True` dalam pengaturan sandbox Anda untuk berhenti sebagai gantinya. SDK meneruskan `failIfUnavailable` ke Claude Code bersama dengan field `SandboxSettings` yang dideklarasikan. `query()` kemudian melaporkan `ResultMessage` dengan `subtype="error_during_execution"` dan alasan dalam `errors`. Karena ini adalah panggilan `query()` sekali jalan, SDK menaikkan setelah menghasilkan hasil kesalahan itu, jadi bungkus loop dalam blok try untuk melanjutkan melewatinya. Lihat [Tangani hasil](/docs/id/agent-sdk/agent-loop#handle-the-result) untuk kontrak kesalahan.3884 Atur `"failIfUnavailable": True` dalam pengaturan sandbox Anda untuk berhenti sebagai gantinya. SDK meneruskan `failIfUnavailable` ke Claude Code bersama dengan field `SandboxSettings` yang dideklarasikan. `query()` kemudian melaporkan `ResultMessage` dengan `subtype="error_during_execution"` dan alasan dalam `errors`. Karena ini adalah panggilan `query()` sekali jalan, SDK menaikkan setelah menghasilkan hasil kesalahan itu, jadi bungkus loop dalam blok try untuk melanjutkan melewatinya. Lihat [Tangani hasil](/docs/id/agent-sdk/agent-loop#handle-the-result) untuk kontrak kesalahan.

3885</Note>3885</Note>

3886 3886 

3887Untuk mencegah perintah yang di-sandbox menulis ke sebuah file, cantumkan jalur absolutnya di bawah [`denyWrite`](/docs/id/settings-reference#sandbox-filesystem-denywrite) dalam pengaturan sandbox Anda, seperti `"filesystem": {"denyWrite": ["/home/user/project/.env"]}`. SDK meneruskan `filesystem` ke Claude Code bersama dengan field `SandboxSettings` yang dideklarasikan. Setelah sandbox dimulai, sandbox memblokir penulisan ke setiap jalur yang dicantumkan. Jika Anda mencantumkan `.env` atau `./.env`, perintah yang di-sandbox dapat menulis ke file `.env` di direktori kerja sesi.3887Untuk mencegah perintah yang di-sandbox menulis ke sebuah file, cantumkan jalur absolutnya di bawah [`denyWrite`](/docs/id/settings-reference#sandbox-filesystem-denywrite) dalam pengaturan sandbox Anda, seperti `"filesystem": {"denyWrite": ["/home/user/project/.env"]}`. SDK meneruskan `filesystem` ke Claude Code bersama dengan field `SandboxSettings` yang dideklarasikan. Setelah sandbox dimulai, sandbox memblokir penulisan ke setiap jalur absolut yang Anda cantumkan.

3888 3888 

3889<h4 id="example-usage">3889<h4 id="example-usage">

3890 Contoh penggunaan3890 Contoh penggunaan

Details

736| `interrupt()` | Menginterupsi query. Hanya tersedia dalam mode input streaming. Ketika CLI mengiklankan kapabilitas `interrupt_receipt_v1` dalam [`SDKSystemMessage.capabilities`](#sdksystemmessage), metode ini diselesaikan dengan [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) yang mencantumkan pesan-pesan yang tertunda saat interupsi tiba. Diselesaikan dengan `undefined` pada CLI sebelum v2.1.205 |736| `interrupt()` | Menginterupsi query. Hanya tersedia dalam mode input streaming. Ketika CLI mengiklankan kapabilitas `interrupt_receipt_v1` dalam [`SDKSystemMessage.capabilities`](#sdksystemmessage), metode ini diselesaikan dengan [`SDKControlInterruptResponse`](#sdkcontrolinterruptresponse) yang mencantumkan pesan-pesan yang tertunda saat interupsi tiba. Diselesaikan dengan `undefined` pada CLI sebelum v2.1.205 |

737| `rewindFiles(userMessageId, options?)` | Memulihkan file ke keadaannya pada pesan pengguna yang ditentukan. Teruskan `{ dryRun: true }` untuk melihat pratinjau perubahan. Memerlukan `enableFileCheckpointing: true`. Lihat [File checkpointing](/docs/id/agent-sdk/file-checkpointing) |737| `rewindFiles(userMessageId, options?)` | Memulihkan file ke keadaannya pada pesan pengguna yang ditentukan. Teruskan `{ dryRun: true }` untuk melihat pratinjau perubahan. Memerlukan `enableFileCheckpointing: true`. Lihat [File checkpointing](/docs/id/agent-sdk/file-checkpointing) |

738| `setPermissionMode()` | Mengubah mode izin (hanya tersedia dalam mode input streaming) |738| `setPermissionMode()` | Mengubah mode izin (hanya tersedia dalam mode input streaming) |

739| `setModel()` | Mengubah model (hanya tersedia dalam mode input streaming). Meneruskan `undefined` atau string `"default"` akan mereset ke [model default Claude Code](/docs/id/model-config) |739| `setModel()` | Mengubah model (hanya tersedia dalam mode input streaming). Meneruskan `undefined` atau string `"default"` mereset ke [model default Claude Code](/docs/id/model-config). Sesi dalam mode `auto` [berubah ke mode `default`](/docs/id/agent-sdk/permissions#auto-mode-auto) jika model baru tidak mendukung auto mode |

740| `setMaxThinkingTokens()` | *Tidak digunakan lagi:* Gunakan opsi `thinking` sebagai gantinya. Mengubah token thinking maksimum. Meneruskan `null` mereset thinking ke default sesi: override di tengah sesi dihapus, dan thinking tetap nonaktif untuk sesi yang menonaktifkannya |740| `setMaxThinkingTokens()` | *Tidak digunakan lagi:* Gunakan opsi `thinking` sebagai gantinya. Mengubah token thinking maksimum. Meneruskan `null` mereset thinking ke default sesi: override di tengah sesi dihapus, dan thinking tetap nonaktif untuk sesi yang menonaktifkannya |

741| `applyFlagSettings(settings)` | Menggabungkan pengaturan ke dalam lapisan flag settings sesi saat runtime (hanya tersedia dalam mode input streaming). Lihat [`applyFlagSettings()`](#applyflagsettings) |741| `applyFlagSettings(settings)` | Menggabungkan pengaturan ke dalam lapisan flag settings sesi saat runtime (hanya tersedia dalam mode input streaming). Lihat [`applyFlagSettings()`](#applyflagsettings) |

742| `updateSettings(source, settings)` | Menulis satu kunci yang ada dalam allowlist ke file pengaturan lokal proyek atau file pengaturan pengguna Anda, sehingga nilainya bertahan untuk sesi berikutnya. Lihat [`updateSettings()`](#updatesettings). Memerlukan TypeScript SDK v0.3.257 atau lebih baru, yang membundel Claude Code v2.1.257 |742| `updateSettings(source, settings)` | Menulis satu kunci yang ada dalam allowlist ke file pengaturan lokal proyek atau file pengaturan pengguna Anda, sehingga nilainya bertahan untuk sesi berikutnya. Lihat [`updateSettings()`](#updatesettings). Memerlukan TypeScript SDK v0.3.257 atau lebih baru, yang membundel Claude Code v2.1.257 |


6370| Properti | Tipe | Default | Deskripsi |6370| Properti | Tipe | Default | Deskripsi |

6371| :- | :- | :- | :- |6371| :- | :- | :- | :- |

6372| `allowWrite` | `string[]` | `[]` | Pola jalur file untuk mengizinkan akses tulis ke |6372| `allowWrite` | `string[]` | `[]` | Pola jalur file untuk mengizinkan akses tulis ke |

6373| `denyWrite` | `string[]` | `[]` | Pola jalur file untuk menolak akses tulis ke. Untuk memblokir penulisan sandboxed ke file di direktori kerja sesi, cantumkan jalur absolutnya. Jika Anda mencantumkan `.env` atau `./.env`, perintah sandboxed dapat menulis ke file `.env` di direktori kerja sesi |6373| `denyWrite` | `string[]` | `[]` | Pola jalur file untuk menolak akses tulis ke. Untuk memblokir penulisan sandboxed ke file di direktori kerja sesi, cantumkan jalur absolutnya. |

6374| `denyRead` | `string[]` | `[]` | Pola jalur file untuk menolak akses baca ke |6374| `denyRead` | `string[]` | `[]` | Pola jalur file untuk menolak akses baca ke |

6375 6375 

6376<h3 id="permissions-fallback-for-unsandboxed-commands">6376<h3 id="permissions-fallback-for-unsandboxed-commands">

agent-view.md +2 −2

Details

738[Mode izin](/docs/id/permissions) tergantung pada cara Anda memulai sesi:738[Mode izin](/docs/id/permissions) tergantung pada cara Anda memulai sesi:

739 739 

740* **Dipindahkan ke latar belakang dengan `/bg` atau `←`**: Claude Code mempertahankan mode izin yang digunakan sesi, jadi sesi yang Anda alihkan ke `acceptEdits` atau `auto` tetap dalam mode itu setelah dilepas740* **Dipindahkan ke latar belakang dengan `/bg` atau `←`**: Claude Code mempertahankan mode izin yang digunakan sesi, jadi sesi yang Anda alihkan ke `acceptEdits` atau `auto` tetap dalam mode itu setelah dilepas

741* **Dikirim dari agent view yang Anda buka dengan `←`**: konfigurasi target sendiri didahulukan, dan mode izin sesi asal Anda berlaku ketika tidak ada hal lain yang menetapkannya741* **Dikirim dari agent view yang Anda buka dengan `←`**: Claude Code mengambil mode izin sesi baru dari konfigurasi direktori target terlebih dahulu, lalu dari sesi asal Anda

742* **Dikirim dari `claude agents` yang dimulai di shell, atau dengan `claude --bg`**: sesi baru dimulai seperti sesi `claude` baru di direktori itu, kecuali Anda mengirimnya dari agent view yang Anda buka dengan [dispatch defaults](#dispatch-defaults). [Which permission mode a session starts in](/docs/id/permission-modes#which-mode-a-session-starts-in) mencantumkan urutannya742* **Dikirim dari `claude agents` yang dimulai di shell, atau dengan `claude --bg`**: sesi baru dimulai seperti sesi `claude` baru di direktori itu, kecuali Anda mengirimnya dari agent view yang Anda buka dengan [dispatch defaults](#dispatch-defaults). [Which permission mode a session starts in](/docs/id/permission-modes#which-mode-a-session-starts-in) mencantumkan urutannya

743 743 

744Untuk sesi yang Anda kirim dari agent view yang dibuka dengan `←`, Claude Code mengambil mode izin dari yang pertama berlaku di antara berikut:744Untuk sesi yang Anda kirim dari agent view yang dibuka dengan `←`, Claude Code mengambil mode izin dari yang pertama berlaku di antara berikut:


7461. [`permissions.defaultMode`](/docs/id/settings-reference#permissions-defaultmode) direktori target. Dua aturan sumber berlaku:7461. [`permissions.defaultMode`](/docs/id/settings-reference#permissions-defaultmode) direktori target. Dua aturan sumber berlaku:

747 * `auto` dan `bypassPermissions` [hanya berlaku dari pengaturan terkelola, file `--settings`, atau `~/.claude/settings.json`](/docs/id/settings-reference#permissions-defaultmode).747 * `auto` dan `bypassPermissions` [hanya berlaku dari pengaturan terkelola, file `--settings`, atau `~/.claude/settings.json`](/docs/id/settings-reference#permissions-defaultmode).

748 * Claude Code menolak `defaultMode` dari `.claude/settings.json` atau `.claude/settings.local.json` proyek yang memilih mode lebih permisif daripada mode sesi asal Anda.748 * Claude Code menolak `defaultMode` dari `.claude/settings.json` atau `.claude/settings.local.json` proyek yang memilih mode lebih permisif daripada mode sesi asal Anda.

7492. Mode izin sesi asal Anda7492. Mode izin sesi asal Anda. Jika sesi itu berada dalam mode `bypassPermissions`, sesi baru dapat dimulai dalam mode Manual sebagai gantinya, dengan pemberitahuan `Bypass permissions was requested at launch and ignored`. Hal itu terjadi ketika penerimaan penafian bypass Anda hanya ada di `.claude/settings.local.json` atau file `--settings`. Lanjutkan dalam mode Manual, atau [tambahkan penerimaan tersebut ke `~/.claude/settings.json`](/docs/id/permission-modes#bypass-permissions-acceptance).

750 750 

751Ketika Claude Code menolak mode suatu sumber karena terlalu permisif, sumber berikutnya dalam daftar yang menentukan. Misalnya, jika Anda mengirim dari sesi plan mode ke direktori yang pengaturan check-in-nya meminta `acceptEdits`, sesi baru dimulai dalam plan mode. Jika Anda memindahkan `defaultMode` itu ke `~/.claude/settings.json`, pengaturan tersebut berlaku terlepas dari mode izin sesi asal Anda.751Ketika Claude Code menolak mode suatu sumber karena terlalu permisif, sumber berikutnya dalam daftar yang menentukan. Misalnya, jika Anda mengirim dari sesi plan mode ke direktori yang pengaturan check-in-nya meminta `acceptEdits`, sesi baru dimulai dalam plan mode. Jika Anda memindahkan `defaultMode` itu ke `~/.claude/settings.json`, pengaturan tersebut berlaku terlepas dari mode izin sesi asal Anda.

752 752 

Details

84| `--continue`, `-c` | Muat percakapan terbaru dalam direktori saat ini, termasuk [sesi latar belakang yang telah selesai](/docs/id/sessions#where-the-session-picker-looks); membuka sesi latar belakang yang telah selesai memerlukan Claude Code v2.1.257 atau lebih baru. Melewati sesi yang dibuat dengan `claude -p` atau Agent SDK, dan sesi yang prompt pertamanya adalah `/loop`. `claude -p --continue` mencakup sesi `-p`, SDK, dan `/loop`. Mencakup sesi yang menambahkan direktori ini dengan `/add-dir` | `claude --continue` |84| `--continue`, `-c` | Muat percakapan terbaru dalam direktori saat ini, termasuk [sesi latar belakang yang telah selesai](/docs/id/sessions#where-the-session-picker-looks); membuka sesi latar belakang yang telah selesai memerlukan Claude Code v2.1.257 atau lebih baru. Melewati sesi yang dibuat dengan `claude -p` atau Agent SDK, dan sesi yang prompt pertamanya adalah `/loop`. `claude -p --continue` mencakup sesi `-p`, SDK, dan `/loop`. Mencakup sesi yang menambahkan direktori ini dengan `/add-dir` | `claude --continue` |

85| `--dangerously-load-development-channels` | Aktifkan [channel](/docs/id/channels-reference#test-during-the-research-preview) yang tidak ada di allowlist yang disetujui, untuk pengembangan lokal. Menerima entri `plugin:<name>@<marketplace>` dan `server:<name>`. Meminta konfirmasi, sehingga hanya berlaku dalam sesi interaktif. Dengan `-p`, Claude Code mengabaikan flag ini | `claude --dangerously-load-development-channels server:webhook` |85| `--dangerously-load-development-channels` | Aktifkan [channel](/docs/id/channels-reference#test-during-the-research-preview) yang tidak ada di allowlist yang disetujui, untuk pengembangan lokal. Menerima entri `plugin:<name>@<marketplace>` dan `server:<name>`. Meminta konfirmasi, sehingga hanya berlaku dalam sesi interaktif. Dengan `-p`, Claude Code mengabaikan flag ini | `claude --dangerously-load-development-channels server:webhook` |

86| `--dangerously-skip-permissions` | Lewati prompt izin. Setara dengan `--permission-mode bypassPermissions`. Lihat [mode izin](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) untuk apa yang dilakukan dan tidak dilakukan oleh ini. Untuk sesi yang dimulai dengan `--bg`, mode [bertahan ketika supervisor memulai ulang sesi](/docs/id/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |86| `--dangerously-skip-permissions` | Lewati prompt izin. Setara dengan `--permission-mode bypassPermissions`. Lihat [mode izin](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) untuk apa yang dilakukan dan tidak dilakukan oleh ini. Untuk sesi yang dimulai dengan `--bg`, mode [bertahan ketika supervisor memulai ulang sesi](/docs/id/agent-view#permission-mode-model-and-effort) | `claude --dangerously-skip-permissions` |

87| `--debug` | Aktifkan mode debug dengan penyaringan kategori opsional, seperti `--debug='mcp,startup'` atau `--debug='!1p'`. Filter mengikat hanya dalam bentuk `=`; filter yang dipisahkan spasi mengaktifkan mode debug tanpa penyaringan | `claude --debug='mcp,startup'` |87| `--debug` | Aktifkan mode debug dengan penyaringan kategori opsional, seperti `--debug='mcp,startup'` atau `--debug='!mcp'`. Filter hanya berlaku dalam bentuk `=`; filter yang dipisahkan spasi mengaktifkan mode debug tanpa penyaringan | `claude --debug='mcp,startup'` |

88| `--debug-file <path>` | Tulis log debug ke jalur file tertentu. Secara implisit mengaktifkan mode debug. Mengambil alih `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |88| `--debug-file <path>` | Tulis log debug ke jalur file tertentu. Secara implisit mengaktifkan mode debug. Mengambil alih `CLAUDE_CODE_DEBUG_LOGS_DIR` | `claude --debug-file /tmp/claude-debug.log` |

89| `--desktop` | Buka [aplikasi Claude Desktop](/docs/id/desktop) di direktori saat ini dan keluar tanpa memulai sesi di terminal. Tambahkan `--continue`, atau `--resume` dengan ID sesi, untuk [membuka sesi itu di Desktop](/docs/id/desktop#coming-from-the-cli) sebagai gantinya. `--resume` di sini hanya mengambil ID sesi, bukan nama atau jalur transkrip. Tidak mengambil prompt dan tidak ada bendera lain kecuali `--verbose` dan bendera `--debug`, karena aplikasi memulai sesi itu sendiri. Tersedia di macOS dan Windows x64 ketika Anda masuk dengan langganan Claude. Memerlukan Claude Code v2.1.285 atau lebih baru | `claude --desktop` |89| `--desktop` | Buka [aplikasi Claude Desktop](/docs/id/desktop) di direktori saat ini dan keluar tanpa memulai sesi di terminal. Tambahkan `--continue`, atau `--resume` dengan ID sesi, untuk [membuka sesi itu di Desktop](/docs/id/desktop#coming-from-the-cli) sebagai gantinya. `--resume` di sini hanya mengambil ID sesi, bukan nama atau jalur transkrip. Tidak mengambil prompt dan tidak ada bendera lain kecuali `--verbose` dan bendera `--debug`, karena aplikasi memulai sesi itu sendiri. Tersedia di macOS dan Windows x64 ketika Anda masuk dengan langganan Claude. Memerlukan Claude Code v2.1.285 atau lebih baru | `claude --desktop` |

90| `--disable-slash-commands` | Nonaktifkan semua skills dan perintah untuk sesi ini | `claude --disable-slash-commands` |90| `--disable-slash-commands` | Nonaktifkan semua skills dan perintah untuk sesi ini | `claude --disable-slash-commands` |

costs.md +1 −1

Details

429Sesi yang telah dibuka selama berjam-jam dapat menggunakan jauh lebih banyak batas paket Anda daripada yang disarankan oleh aktivitas Anda, biasanya karena salah satu alasan berikut:429Sesi yang telah dibuka selama berjam-jam dapat menggunakan jauh lebih banyak batas paket Anda daripada yang disarankan oleh aktivitas Anda, biasanya karena salah satu alasan berikut:

430 430 

431* **Konteks panjang**: Claude Code mengirimkan percakapan lengkap Anda dengan setiap permintaan, dan setiap kali Claude menggunakan tools, ia mengirimkan permintaan lain yang membawa batch hasil tool tersebut. Dengan [prompt caching](/docs/id/prompt-caching), Claude Code membaca ulang riwayat tersebut pada [tingkat token yang di-cache](https://platform.claude.com/docs/en/about-claude/pricing), jadi pertanyaan satu baris dalam sesi yang telah dibuka sepanjang hari masih menarik penggunaan untuk seluruh percakapan. Lihat [Kelola konteks secara proaktif](#manage-context-proactively) untuk cara-cara menjaga konteks Anda tetap kecil431* **Konteks panjang**: Claude Code mengirimkan percakapan lengkap Anda dengan setiap permintaan, dan setiap kali Claude menggunakan tools, ia mengirimkan permintaan lain yang membawa batch hasil tool tersebut. Dengan [prompt caching](/docs/id/prompt-caching), Claude Code membaca ulang riwayat tersebut pada [tingkat token yang di-cache](https://platform.claude.com/docs/en/about-claude/pricing), jadi pertanyaan satu baris dalam sesi yang telah dibuka sepanjang hari masih menarik penggunaan untuk seluruh percakapan. Lihat [Kelola konteks secara proaktif](#manage-context-proactively) untuk cara-cara menjaga konteks Anda tetap kecil

432* **Cache misses**: pesan pertama Anda setelah istirahat yang lebih lama dari [cache lifetime](/docs/id/prompt-caching#cache-lifetime) melewatkan cache dan memproses ulang konteks lengkap Anda. Masa hidup adalah satu jam pada langganan dan turun menjadi lima menit setelah Anda menggunakan [usage credits](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans); pada API key atau cloud provider, defaultnya adalah lima menit. Untuk mempertahankan masa hidup satu jam sambil menggunakan usage credits, [pilih TTL sendiri](/docs/id/prompt-caching#choose-the-ttl-yourself). Pada paket Pro dan Max, ketika Anda melanjutkan sesi besar setelah istirahat panjang, Claude Code [menawarkan untuk melanjutkan dari ringkasan](/docs/id/sessions#resume-from-a-summary) sehingga permintaan selanjutnya tidak membawa riwayat lengkap432* **Cache misses**: pesan pertama Anda setelah istirahat yang lebih lama dari [cache lifetime](/docs/id/prompt-caching#cache-lifetime) melewatkan cache dan memproses ulang konteks lengkap Anda. Masa hidup adalah satu jam pada langganan dan turun menjadi lima menit setelah Anda menggunakan [kredit penggunaan](https://support.claude.com/en/articles/12429409-extra-usage-for-paid-claude-plans); pada kunci API atau cloud provider, defaultnya adalah lima menit. Untuk mempertahankan masa hidup satu jam sambil menggunakan kredit penggunaan, [pilih TTL sendiri](/docs/id/prompt-caching#choose-the-ttl-yourself)

433* **Tugas terjadwal**: [tugas terjadwal](/docs/id/scheduled-tasks) dijalankan pada intervalnya bahkan saat sesi idle, mengirimkan konteks lengkap Anda setiap kali433* **Tugas terjadwal**: [tugas terjadwal](/docs/id/scheduled-tasks) dijalankan pada intervalnya bahkan saat sesi idle, mengirimkan konteks lengkap Anda setiap kali

434* **Pesan lintas sesi**: Claude Code mengirimkan [pesan dari salah satu sesi Anda yang lain](/docs/id/cross-session-messaging) sebagai giliran baru ketika sesi ini idle, mengirimkan konteks lengkap Anda setiap kali. Untuk menahan pesan masuk alih-alih mengirimkannya, atur [`crossSessionInbound`](/docs/id/settings-reference#crosssessioninbound) ke `hold`434* **Pesan lintas sesi**: Claude Code mengirimkan [pesan dari salah satu sesi Anda yang lain](/docs/id/cross-session-messaging) sebagai giliran baru ketika sesi ini idle, mengirimkan konteks lengkap Anda setiap kali. Untuk menahan pesan masuk alih-alih mengirimkannya, atur [`crossSessionInbound`](/docs/id/settings-reference#crosssessioninbound) ke `hold`

435* **Pemeriksaan tujuan**: sementara pekerjaan latar belakang membuat [tujuan](/docs/id/goal) aktif menunggu, Claude Code [meminta Claude untuk memeriksa pekerjaan tersebut](/docs/id/goal#background-work-defers-evaluation) bahkan ketika sesi idle, memulai giliran baru yang mengirimkan konteks lengkap Anda. Claude Code memulai paling banyak tiga pemeriksaan idle per tujuan di antara prompt Anda. Sebelum v2.1.246, pemeriksaan idle tidak terbatas. Untuk mematikan pemeriksaan, atur [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/id/env-vars) ke `0`. Pemeriksaan idle memerlukan Claude Code v2.1.236 atau lebih baru435* **Pemeriksaan tujuan**: sementara pekerjaan latar belakang membuat [tujuan](/docs/id/goal) aktif menunggu, Claude Code [meminta Claude untuk memeriksa pekerjaan tersebut](/docs/id/goal#background-work-defers-evaluation) bahkan ketika sesi idle, memulai giliran baru yang mengirimkan konteks lengkap Anda. Claude Code memulai paling banyak tiga pemeriksaan idle per tujuan di antara prompt Anda. Sebelum v2.1.246, pemeriksaan idle tidak terbatas. Untuk mematikan pemeriksaan, atur [`CLAUDE_CODE_GOAL_CHECKIN_MINUTES`](/docs/id/env-vars) ke `0`. Pemeriksaan idle memerlukan Claude Code v2.1.236 atau lebih baru

env-vars.md +1 −1

Details

196| `ANTHROPIC_VERTEX_PROJECT_ID` | ID proyek GCP yang menjadi tujuan permintaan Google Cloud's Agent Platform. Lihat [Mengonfigurasi kredensial GCP](/docs/id/google-vertex-ai#3-configure-gcp-credentials) |196| `ANTHROPIC_VERTEX_PROJECT_ID` | ID proyek GCP yang menjadi tujuan permintaan Google Cloud's Agent Platform. Lihat [Mengonfigurasi kredensial GCP](/docs/id/google-vertex-ai#3-configure-gcp-credentials) |

197| `ANTHROPIC_WORKSPACE_ID` | ID workspace untuk [workload identity federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation). Tetapkan ini saat aturan federasi Anda mencakup lebih dari satu workspace agar pertukaran token mengetahui workspace mana yang dituju |197| `ANTHROPIC_WORKSPACE_ID` | ID workspace untuk [workload identity federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation). Tetapkan ini saat aturan federasi Anda mencakup lebih dari satu workspace agar pertukaran token mengetahui workspace mana yang dituju |

198| `API_FORCE_IDLE_TIMEOUT` | Menimpa timeout idle body 5 menit yang membatalkan respons model streaming saat tidak ada byte yang tiba. Tetapkan ke `0` untuk mematikan timeout, misalnya saat [gateway](/docs/id/llm-gateway) yang lambat atau model lokal berhenti lebih dari 5 menit di antara potongan data, atau `1` untuk tetap mengaktifkannya bagi setiap penyedia. Jika tidak ditetapkan, timeout aktif pada penyedia selain Anthropic API langsung, [Claude Platform on AWS](/docs/id/claude-platform-on-aws), dan Amazon Bedrock dengan `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` ditetapkan. [Stream watchdog](/docs/id/network-config#streaming-idle-watchdogs) berjalan secara independen darinya dan membatalkan jeda senyap yang panjang bahkan saat Anda menetapkan `0` di sini |198| `API_FORCE_IDLE_TIMEOUT` | Menimpa timeout idle body 5 menit yang membatalkan respons model streaming saat tidak ada byte yang tiba. Tetapkan ke `0` untuk mematikan timeout, misalnya saat [gateway](/docs/id/llm-gateway) yang lambat atau model lokal berhenti lebih dari 5 menit di antara potongan data, atau `1` untuk tetap mengaktifkannya bagi setiap penyedia. Jika tidak ditetapkan, timeout aktif pada penyedia selain Anthropic API langsung, [Claude Platform on AWS](/docs/id/claude-platform-on-aws), dan Amazon Bedrock dengan `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` ditetapkan. [Stream watchdog](/docs/id/network-config#streaming-idle-watchdogs) berjalan secara independen darinya dan membatalkan jeda senyap yang panjang bahkan saat Anda menetapkan `0` di sini |

199| `API_TIMEOUT_MS` | Timeout untuk permintaan API dalam milidetik (default: 600000, atau 10 menit; maksimum: 2147483647). Naikkan nilai ini saat permintaan mengalami timeout pada jaringan lambat atau saat merutekan melalui proxy. Nilai di atas maksimum menyebabkan overflow pada timer yang mendasarinya dan membuat permintaan langsung gagal |199| `API_TIMEOUT_MS` | Timeout untuk permintaan API dalam milidetik (default: 600000, atau 10 menit; maksimum: 2147483647). Permintaan streaming harus menerima header responsnya dalam batas waktu ini. Tingkatkan nilai ini ketika permintaan mengalami timeout pada jaringan yang lambat atau saat merutekan melalui proxy |

200| `AWS_BEARER_TOKEN_BEDROCK` | Kunci API Amazon Bedrock untuk autentikasi (lihat [Kunci API Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |200| `AWS_BEARER_TOKEN_BEDROCK` | Kunci API Amazon Bedrock untuk autentikasi (lihat [Kunci API Amazon Bedrock](https://aws.amazon.com/blogs/machine-learning/accelerate-ai-development-with-amazon-bedrock-api-keys/)) |

201| `BASH_DEFAULT_TIMEOUT_MS` | Timeout default untuk perintah tool Bash atau PowerShell di latar depan, dalam milidetik (default: 120000, atau 2 menit). Nilai di atas [batas waktu default untuk perintah latar belakang](/docs/id/tools-reference#time-limit-for-background-commands) menggantikan default tersebut dalam sesi tanpa pengawasan. Batas waktu latar belakang memerlukan Claude Code v2.1.285 atau lebih baru |201| `BASH_DEFAULT_TIMEOUT_MS` | Timeout default untuk perintah tool Bash atau PowerShell di latar depan, dalam milidetik (default: 120000, atau 2 menit). Nilai di atas [batas waktu default untuk perintah latar belakang](/docs/id/tools-reference#time-limit-for-background-commands) menggantikan default tersebut dalam sesi tanpa pengawasan. Batas waktu latar belakang memerlukan Claude Code v2.1.285 atau lebih baru |

202| `BASH_MAX_OUTPUT_LENGTH` | Jumlah maksimum karakter output bash yang dibaca kembali oleh Claude Code ke dalam hasil perintah (default: 30000; maksimum: 150000). Jika Anda menetapkan pengaturan [`bashOutputMaxChars`](/docs/id/settings-reference#bashoutputmaxchars), Claude Code mengabaikan variabel ini. Lihat [Batas output](/docs/id/tools-reference#output-limits) |202| `BASH_MAX_OUTPUT_LENGTH` | Jumlah maksimum karakter output bash yang dibaca kembali oleh Claude Code ke dalam hasil perintah (default: 30000; maksimum: 150000). Jika Anda menetapkan pengaturan [`bashOutputMaxChars`](/docs/id/settings-reference#bashoutputmaxchars), Claude Code mengabaikan variabel ini. Lihat [Batas output](/docs/id/tools-reference#output-limits) |

errors.md +3 −1

Details

346| `Can't open — this session is running in another terminal` | [Background session errors](#this-session-is-running-in-another-terminal) |346| `Can't open — this session is running in another terminal` | [Background session errors](#this-session-is-running-in-another-terminal) |

347| `This conversation is already open in another running Claude session` | [Background session errors](#this-session-is-running-in-another-terminal) |347| `This conversation is already open in another running Claude session` | [Background session errors](#this-session-is-running-in-another-terminal) |

348| `This session's saved conversation is no longer on disk` | [Background session errors](#this-sessions-saved-conversation-is-no-longer-on-disk) |348| `This session's saved conversation is no longer on disk` | [Background session errors](#this-sessions-saved-conversation-is-no-longer-on-disk) |

349| `Bypass permissions was requested at launch and ignored` | [Skip all checks with bypassPermissions mode](/docs/id/permission-modes#bypass-permissions-acceptance) |

349| `kept <id> — its worktree is still at <path>` | [Background session errors](#worktree-has-commits-that-are-not-pushed-anywhere) |350| `kept <id> — its worktree is still at <path>` | [Background session errors](#worktree-has-commits-that-are-not-pushed-anywhere) |

350| `kept <id> — <n> unpushed commits on <branch>` | [Background session errors](#worktree-has-commits-that-are-not-pushed-anywhere) |351| `kept <id> — <n> unpushed commits on <branch>` | [Background session errors](#worktree-has-commits-that-are-not-pushed-anywhere) |

351| `kept <id> — worktree has commits that are not pushed anywhere` | [Background session errors](#worktree-has-commits-that-are-not-pushed-anywhere) |352| `kept <id> — worktree has commits that are not pushed anywhere` | [Background session errors](#worktree-has-commits-that-are-not-pushed-anywhere) |


418* 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.419* 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.

419* 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`.420* 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`.

420* 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`.421* 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`.

421* 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.422* 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. Ketika Anda menetapkan `CLAUDE_CODE_RETRY_WATCHDOG`, batas satu retry tidak berlaku.

422* 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.423* 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.

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

424 * Ketika Anda masuk dengan langganan claude.ai, ini mencakup 429 throttles yang tidak membawa header kuota paket Anda. Sebelum v2.1.199, Claude Code hanya mencoba ulang throttles tersebut untuk kunci API dan Enterprise sign-ins.425 * Ketika Anda masuk dengan langganan claude.ai, ini mencakup 429 throttles yang tidak membawa header kuota paket Anda. Sebelum v2.1.199, Claude Code hanya mencoba ulang throttles tersebut untuk kunci API dan Enterprise sign-ins.


4552 4553 

4553* Perbaiki setiap entri yang disebutkan kesalahan dengan mengacu pada [tool yang tersedia untuk subagent](/docs/id/sub-agents#available-tools)4554* Perbaiki setiap entri yang disebutkan kesalahan dengan mengacu pada [tool yang tersedia untuk subagent](/docs/id/sub-agents#available-tools)

4554* Hapus entri untuk tool yang tidak dimiliki sesi, seperti tool MCP dari server yang tidak terhubung4555* Hapus entri untuk tool yang tidak dimiliki sesi, seperti tool MCP dari server yang tidak terhubung

4556* Jika entri menyebutkan server MCP yang terhubung, bandingkan entri tersebut dengan nama server itu sebagaimana dieja oleh [nama tool](/docs/id/permissions#mcp) server tersebut, seperti `reports__v2` dalam `mcp__reports__v2__get_totals`. Untuk server itu, tulis `mcp__reports__v2__*`, yaitu `mcp__` diikuti nama lengkapnya dan `__*`. Dengan `mcp__reports` yang lebih pendek, yang menyebutkan server bernama `reports`, subagent tidak mendapatkan satu pun tool `reports__v2`

4555* Untuk tool yang [dilepaskan subagent latar belakang](/docs/id/sub-agents#available-tools), seperti `CronCreate`, hapus entri tersebut. Untuk mempertahankan tool tersebut, [matikan mode fork](/docs/id/sub-agents#turn-fork-mode-on-or-off) dan minta Claude menjalankan subagent di foreground4557* Untuk tool yang [dilepaskan subagent latar belakang](/docs/id/sub-agents#available-tools), seperti `CronCreate`, hapus entri tersebut. Untuk mempertahankan tool tersebut, [matikan mode fork](/docs/id/sub-agents#turn-fork-mode-on-or-off) dan minta Claude menjalankan subagent di foreground

4556* Hapus bidang `tools` alih-alih mencantumkan tool untuk memberikan subagent setiap [tool yang tersedia untuk subagent](/docs/id/sub-agents#available-tools)4558* Hapus bidang `tools` alih-alih mencantumkan tool untuk memberikan subagent setiap [tool yang tersedia untuk subagent](/docs/id/sub-agents#available-tools)

4557* Untuk daftar `tools` yang hanya berisi `Agent`, naikkan [batas kedalaman](/docs/id/sub-agents#let-subagents-spawn-their-own-subagents) atau berikan agent setidaknya satu tool lain: Claude Code menahan `Agent` pada batas itu, jadi daftar tanpa isi lain akan menghasilkan tidak ada tool4559* Untuk daftar `tools` yang hanya berisi `Agent`, naikkan [batas kedalaman](/docs/id/sub-agents#let-subagents-spawn-their-own-subagents) atau berikan agent setidaknya satu tool lain: Claude Code menahan `Agent` pada batas itu, jadi daftar tanpa isi lain akan menghasilkan tidak ada tool

hooks.md +53 −16

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| `onFailure` | tidak | Apakah tindakan yang memicu hook tetap dilanjutkan ketika hook gagal: `"continue"` atau `"block"`. Lihat [Blokir tindakan ketika hook gagal](#block-the-action-when-a-hook-fails) untuk `"block"` dan untuk membiarkan bidang ini tidak diatur. Memerlukan Claude Code v2.1.295 atau lebih baru |

480 480 

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

482 482 


829 829 

830* **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. [Hook yang memulai proses latar belakang](#hooks-that-start-a-background-process) membahas pengecualiannya.830* **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. [Hook yang memulai proses latar belakang](#hooks-that-start-a-background-process) membahas pengecualiannya.

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

832* **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).832* **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, kecuali untuk hook [yang kegagalannya memblokir tindakan](#block-the-action-when-a-hook-fails), misalnya hook dengan `onFailure` diatur ke `"block"`. Pada event seperti `PreToolUse`, Anda melihat pemberitahuan `<hook name> hook error` di transkrip.

833 833 

834Apa 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:834Apa yang dicetak hook Anda ke stdout dapat mengubah hasilnya. Misalnya, ketika hook `PreToolUse` keluar dengan 1 tetapi mencetak JSON yang lolos validasi, JSON tersebut tetap dapat 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:

835 835 

836| Stdout | Exit 0 | Exit 2 | Exit code lainnya |836| Stdout | Exit 0 | Exit 2 | Exit code lainnya |

837| :- | :- | :- | :- |837| :- | :- | :- | :- |

838| 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 |838| 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. Untuk hook [yang kegagalannya memblokir tindakan](#block-the-action-when-a-hook-fails), eksekusi ini justru dihitung sebagai kegagalan |

839| 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 |839| 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 |

840| [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 |840| [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 |

841 841 


864* **Dua baris atau lebih yang masing-masing dapat di-parse sebagai JSON secara terpisah, dengan baris pertama diawali `{` dan baris terakhir diakhiri `}`**: teks biasa ketika tidak ada baris yang merupakan objek output JSON yang mengatur suatu field, dan kegagalan parse ketika ada baris yang demikian.864* **Dua baris atau lebih yang masing-masing dapat di-parse sebagai JSON secara terpisah, dengan baris pertama diawali `{` dan baris terakhir diakhiri `}`**: teks biasa ketika tidak ada baris yang merupakan objek output JSON yang mengatur suatu field, dan kegagalan parse ketika ada baris yang demikian.

865* **Apa pun lainnya yang diawali dengan `{` dan diakhiri dengan `}` tetapi bukan JSON yang valid**: kegagalan parse.865* **Apa pun lainnya yang diawali dengan `{` dan diakhiri dengan `}` tetapi bukan JSON yang valid**: kegagalan parse.

866 866 

867Ketika 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.867Kecuali hook tersebut adalah hook [yang kegagalannya memblokir tindakan](#block-the-action-when-a-hook-fails), kegagalan parse atau objek yang di-parse tetapi gagal [validasi skema](#json-output) 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.

868 868 

869Claude 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.869Claude 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.

870 870 


907 Exit code lainnya907 Exit code lainnya

908</h4>908</h4>

909 909 

910Ketika 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:910Kecuali hook tersebut adalah hook [yang kegagalannya memblokir tindakan](#block-the-action-when-a-hook-fails), exit code selain 0 atau 2 dengan teks biasa atau tanpa apa pun di stdout adalah [error non-blocking](#exit-code-output). Jika tindakan dilanjutkan, Anda melihat pemberitahuan `<hook name> hook error` di transkrip dengan `Failed with non-blocking status code:` dan baris pertama stderr hook Anda.

911 

912Misalnya, ketika hook `PreToolUse` pada `Bash` mencetak `something broke` ke stderr dan keluar dengan 1, pemberitahuan `PreToolUse:Bash hook error` memuat baris ini:

911 913 

912```text theme={null}914```text theme={null}

913Failed with non-blocking status code: something broke915Failed with non-blocking status code: something broke


915 917 

916Untuk menangkap stderr lengkap alih-alih hanya baris pertamanya, aktifkan [logging debug](#debug-hooks).918Untuk menangkap stderr lengkap alih-alih hanya baris pertamanya, aktifkan [logging debug](#debug-hooks).

917 919 

918Hook 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).920Kecuali hook tersebut adalah hook [yang kegagalannya memblokir tindakan](#block-the-action-when-a-hook-fails), hook 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, ketika path skrip tidak ada, pemberitahuan memuat baris seperti ini:

921 

922```text theme={null}

923Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory

924```

925 

926Saat 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 ketika hook tidak dapat dimulai, atur [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

919 927 

920<Warning>928<Warning>

921 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`.929 Exit code 1 tanpa output JSON yang valid adalah error non-blocking kecuali hook tersebut adalah hook [yang kegagalannya memblokir tindakan](#block-the-action-when-a-hook-fails), meskipun 1 adalah kode kegagalan Unix yang konvensional. Jika hook Anda dimaksudkan untuk menegakkan kebijakan, gunakan `exit 2`.

922</Warning>930</Warning>

923 931 

924<h4 id="timeouts">932<h4 id="timeouts">


929 937 

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

931 939 

932* 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).940* Hook `command`, `http`, atau `mcp_tool` yang mengalami timeout tidak memblokir panggilan tool, kecuali untuk hook [yang kegagalannya memblokir tindakan](#block-the-action-when-a-hook-fails). 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).

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

934 942 

935<h4 id="hooks-that-start-a-background-process">943<h4 id="hooks-that-start-a-background-process">


959 Memblokir tindakan ketika hook gagal967 Memblokir tindakan ketika hook gagal

960</h4>968</h4>

961 969 

962Pada 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.970Pada sebagian besar event, ketika hook gagal atau mengalami timeout, Claude Code tetap menjalankan tindakan. Hook kebijakan dengan path yang salah atau skrip yang crash kemudian meloloskan semuanya. Untuk memblokir tindakan sebagai gantinya, atur `"onFailure": "block"` pada hook `command` atau `http`. Memerlukan Claude Code v2.1.295 atau lebih baru.

971 

972<Note>

973 Di Windows tanpa Git Bash, hook perintah `PreToolUse` atau `PermissionRequest` berbentuk shell yang gagal dengan `onFailure` tidak diatur dapat [memblokir panggilan tool](#failed-hooks-on-windows-without-git-bash) sebagai gantinya.

974</Note>

963 975 

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

965 977 


1007* **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 berjalan1019* **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

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

1009 1021 

1022<h4 id="failed-hooks-on-windows-without-git-bash">

1023 Hook yang gagal di Windows tanpa Git Bash

1024</h4>

1025 

1026Jika error untuk panggilan tool yang diblokir menyertakan teks ini, hook perintah `PreToolUse` atau `PermissionRequest` gagal atau mengalami timeout dan memblokir panggilan tersebut:

1027 

1028```text theme={null}

1029blocking because Git Bash wasn't found and this hook doesn't set "shell" to "powershell", so only exit code 0 or 2 counts as its verdict.

1030```

1031 

1032Hook berbentuk shell tanpa `shell` yang diatur berjalan di PowerShell ketika Git Bash tidak terinstal, dan skrip yang ditulis untuk Bash mungkin tidak berjalan sebagaimana ditulis di sana. Pilih perbaikan yang sesuai dengan hook Anda:

1033 

1034* **Hook ditulis untuk Bash**: instal [Git for Windows](https://git-scm.com/downloads/win), atau atur [`CLAUDE_CODE_GIT_BASH_PATH`](/docs/id/env-vars) jika Git Bash terinstal di lokasi yang tidak ditemukan Claude Code, lalu mulai sesi baru

1035* **Hook menjalankan satu `.exe`, bukan file `.cmd` atau `.bat`**: letakkan program di `command` dan argumennya di `args` untuk menggunakan [bentuk exec](#exec-form-and-shell-form), lalu tambahkan [`"onFailure": "block"`](#block-the-action-when-a-hook-fails). Claude Code kemudian memulai program tanpa shell. Tanpa `"onFailure": "block"`, panggilan dapat dilanjutkan ketika program gagal, tidak ada, atau mengalami timeout

1036* **Hook ditulis untuk PowerShell**: tambahkan `"shell": "powershell"` dan [`"onFailure": "block"`](#block-the-action-when-a-hook-fails) ke hook. Tanpa `"onFailure": "block"`, panggilan dapat dilanjutkan ketika hook masih gagal atau mengalami timeout. Untuk mengetahui mengapa hook gagal, periksa [log debug](#debug-hooks)

1037* **Tindakan sebaiknya dilanjutkan ketika hook gagal**: tambahkan `"onFailure": "continue"` ke hook

1038 

1039Untuk hook yang menampilkan error ini, exit code apa pun selain 0 atau 2 dihitung sebagai [kegagalan](#block-the-action-when-a-hook-fails), bahkan ketika hook mencetak JSON yang tidak menolak panggilan.

1040 

1010<h4 id="exit-code-2-behavior-per-event">1041<h4 id="exit-code-2-behavior-per-event">

1011 Perilaku exit code 2 per event1042 Perilaku exit code 2 per event

1012</h4>1043</h4>


1060* **2xx dengan body kosong**: berhasil, setara dengan exit code 0 tanpa output1091* **2xx dengan body kosong**: berhasil, setara dengan exit code 0 tanpa output

1061* **2xx dengan body objek JSON**: di-parse menggunakan skema [output JSON](#json-output) yang sama seperti hook perintah. Body yang gagal validasi skema adalah error non-blocking1092* **2xx dengan body objek JSON**: di-parse menggunakan skema [output JSON](#json-output) yang sama seperti hook perintah. Body yang gagal validasi skema adalah error non-blocking

1062* **2xx dengan body lain, seperti teks biasa**: error non-blocking, ditangani sama seperti status non-2xx. Claude Code tidak menambahkan teks tersebut ke konteks Claude1093* **2xx dengan body lain, seperti teks biasa**: error non-blocking, ditangani sama seperti status non-2xx. Claude Code tidak menambahkan teks tersebut ke konteks Claude

1063* **Status non-2xx**: error non-blocking, eksekusi berlanjut1094* **Status non-2xx**: error non-blocking

1064* **Kegagalan koneksi**: error non-blocking, eksekusi berlanjut1095* **Kegagalan koneksi**: error non-blocking

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

1066 1097 

1067Hook 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).1098Setelah [error non-blocking](#exit-code-output), tindakan dilanjutkan kecuali hook tersebut adalah hook [yang kegagalannya memblokir tindakan](#block-the-action-when-a-hook-fails). Untuk memblokir panggilan tool atau menolak izin, kembalikan respons 2xx dengan body JSON yang berisi [field keputusan](#decision-control) yang sesuai. Untuk memblokir tindakan ketika permintaan gagal atau mengembalikan status non-2xx, atur [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

1068 1099 

1069<h3 id="json-output">1100<h3 id="json-output">

1070 Output JSON1101 Output JSON


1573}1604}

1574```1605```

1575 1606 

1607Saat prompt berupa [skill](/docs/id/skills) atau perintah kustom yang Anda ketik, seperti `/deploy staging`, hook menerima baris tersebut sebagaimana Anda mengetiknya, bukan konten skill yang diperluas. Jika hook memblokir prompt, perintah tidak dijalankan, sehingga perintah shell yang [disisipkan skill dengan `` !`<command>` ``](/docs/id/skills#inject-dynamic-context) juga tidak dijalankan. Untuk mencocokkan nama atau argumen perintah sebagai gantinya, gunakan [UserPromptExpansion](#userpromptexpansion).

1608 

1576<h4 id="userpromptsubmit-decision-control">1609<h4 id="userpromptsubmit-decision-control">

1577 Kontrol keputusan UserPromptSubmit1610 Kontrol keputusan UserPromptSubmit

1578</h4>1611</h4>


2076 2109 

2077| Kolom | Deskripsi |2110| Kolom | Deskripsi |

2078| :- | :- |2111| :- | :- |

2079| `permissionDecision` | `"allow"` melewati permintaan izin, kecuali untuk [tindakan yang tidak disetujui otomatis oleh mode mana pun](/docs/id/permission-modes#actions-no-mode-auto-approves), untuk [pembacaan dari path jaringan](/docs/id/permissions#network-paths), dan untuk `AskUserQuestion` serta `ExitPlanMode`, yang memerlukan [`updatedInput` yang dipasangkan dengannya](#allow-with-updatedinput). `"deny"` mencegah panggilan tool. `"ask"` meminta pengguna untuk mengonfirmasi. `"defer"` keluar dengan baik sehingga tool dapat dilanjutkan nanti. [Aturan deny dan ask](/docs/id/permissions#manage-permissions) tetap dievaluasi apa pun yang dikembalikan hook |2112| `permissionDecision` | `"allow"` melewati permintaan izin, kecuali untuk [tindakan yang tidak disetujui otomatis oleh mode apa pun](/docs/id/permission-modes#actions-no-mode-auto-approves) dan [pembacaan dari path jaringan](/docs/id/permissions#network-paths). `AskUserQuestion` dan `ExitPlanMode` memerlukan [`updatedInput` yang dipasangkan dengan `"allow"`](#allow-with-updatedinput). Untuk plan mode, lihat [Persetujuan hook di plan mode](/docs/id/permissions#hook-approvals-in-plan-mode). `"deny"` mencegah panggilan tool. `"ask"` meminta pengguna untuk mengonfirmasi. `"defer"` keluar dengan baik sehingga tool dapat dilanjutkan nanti. [Aturan deny dan ask](/docs/id/permissions#manage-permissions) tetap dievaluasi terlepas dari apa yang dikembalikan hook |

2080| `permissionDecisionReason` | Untuk `"ask"`, ditampilkan kepada pengguna dalam permintaan izin. Saat Claude Code [menolak panggilan](/docs/id/headless#turn-off-permission-prompts-in-unattended-runs) dalam eksekusi `-p` tempat tidak ada yang dapat menjawab permintaan tersebut, Claude membaca alasannya di hasil tool sebagai gantinya. Untuk `"deny"`, ditampilkan kepada Claude. Untuk `"allow"` dan `"defer"`, hanya ditulis ke [debug log](#debug-hooks) |2113| `permissionDecisionReason` | Untuk `"ask"`, ditampilkan kepada pengguna dalam permintaan izin. Saat Claude Code [menolak panggilan](/docs/id/headless#turn-off-permission-prompts-in-unattended-runs) dalam eksekusi `-p` tempat tidak ada yang dapat menjawab permintaan tersebut, Claude membaca alasannya di hasil tool sebagai gantinya. Untuk `"deny"`, ditampilkan kepada Claude. Untuk `"allow"` dan `"defer"`, hanya ditulis ke [debug log](#debug-hooks) |

2081| `updatedInput` | Mengubah parameter input tool sebelum eksekusi. Menggantikan seluruh objek input, jadi sertakan kolom yang tidak berubah bersama kolom yang diubah. Claude Code mengevaluasi aturan izin dan [kelayakan auto-background](/docs/id/tools-reference#foreground-commands-that-move-to-the-background) perintah Bash terhadap input yang dikembalikan hook Anda, bukan input yang dikirim Claude. Kombinasikan dengan `"allow"` untuk menyetujui otomatis, atau `"ask"` untuk menampilkan input yang diubah kepada pengguna. Untuk `"defer"`, diabaikan |2114| `updatedInput` | Mengubah parameter input tool sebelum eksekusi. Menggantikan seluruh objek input, jadi sertakan kolom yang tidak berubah bersama kolom yang diubah. Claude Code mengevaluasi aturan izin dan [kelayakan auto-background](/docs/id/tools-reference#foreground-commands-that-move-to-the-background) perintah Bash terhadap input yang dikembalikan hook Anda, bukan input yang dikirim Claude. Kombinasikan dengan `"allow"` untuk menyetujui otomatis, atau `"ask"` untuk menampilkan input yang diubah kepada pengguna. Untuk `"defer"`, diabaikan |

2082| `additionalContext` | String yang ditambahkan ke konteks Claude bersama hasil tool. Diabaikan saat `permissionDecision` bernilai `"defer"`. Lihat [Menambahkan konteks untuk Claude](#add-context-for-claude) |2115| `additionalContext` | String yang ditambahkan ke konteks Claude bersama hasil tool. Diabaikan saat `permissionDecision` bernilai `"defer"`. Lihat [Menambahkan konteks untuk Claude](#add-context-for-claude) |


3718 3751 

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

3720 3753 

3721Hook PreModelSwitch yang tidak merespons sebelum timeout-nya akan memblokir pergantian. Untuk efek timeout pada event lain, lihat [Timeouts](#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.3754<h4 id="premodelswitch-timeouts-and-other-exit-codes">

3755 Timeout PreModelSwitch dan exit code lainnya

3756</h4>

3757 

3758Hook PreModelSwitch yang tidak merespons sebelum timeout-nya memblokir peralihan. Timeout default untuk event ini adalah 30 detik.

3722 3759 

3723Hook yang keluar dengan kode selain 0 atau 2 dan tidak mencetak keputusan JSON merupakan error non-blocking, seperti dijelaskan di [Exit code lainnya](#other-exit-codes).3760Untuk efek exit code selain 0 atau 2, lihat [Exit code lainnya](#other-exit-codes).

3724 3761 

3725<h3 id="postmodelswitch">3762<h3 id="postmodelswitch">

3726 PostModelSwitch3763 PostModelSwitch

hooks-guide.md +17 −4

Details

633 * Untuk hook `PreToolUse` ini tidak menyetujui panggilan alat: [alur izin](/docs/id/permissions) normal masih berlaku.633 * Untuk hook `PreToolUse` ini tidak menyetujui panggilan alat: [alur izin](/docs/id/permissions) normal masih berlaku.

634 * Untuk hook `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart`, dan `PostModelSwitch`, Claude Code menambahkan stdout yang [diperlakukan sebagai teks biasa](/docs/id/hooks#exit-code-0) ke konteks Claude.634 * Untuk hook `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart`, dan `PostModelSwitch`, Claude Code menambahkan stdout yang [diperlakukan sebagai teks biasa](/docs/id/hooks#exit-code-0) ke konteks Claude.

635* **Exit 2**: Claude Code memblokir tindakan. Tulis alasan ke stderr. Di mana itu mendarat tergantung pada acara: beberapa acara memberinya ke Claude sebagai umpan balik sehingga dapat menyesuaikan, yang lain menampilkannya kepada pengguna, dan beberapa, seperti `ConfigChange` dan `Elicitation`, tidak menampilkan pesan. Beberapa acara tidak dapat diblokir: untuk `SessionStart` dan lainnya, exit 2 menampilkan stderr kepada pengguna dan eksekusi berlanjut. Lihat [exit code 2 behavior per event](/docs/id/hooks#exit-code-2-behavior-per-event) untuk daftar lengkap.635* **Exit 2**: Claude Code memblokir tindakan. Tulis alasan ke stderr. Di mana itu mendarat tergantung pada acara: beberapa acara memberinya ke Claude sebagai umpan balik sehingga dapat menyesuaikan, yang lain menampilkannya kepada pengguna, dan beberapa, seperti `ConfigChange` dan `Elicitation`, tidak menampilkan pesan. Beberapa acara tidak dapat diblokir: untuk `SessionStart` dan lainnya, exit 2 menampilkan stderr kepada pengguna dan eksekusi berlanjut. Lihat [exit code 2 behavior per event](/docs/id/hooks#exit-code-2-behavior-per-event) untuk daftar lengkap.

636* **Kode keluar lainnya**: untuk sebagian besar acara, hasilnya tergantung pada apa yang dicetak hook Anda ke stdout:636* **Kode keluar lainnya**: untuk sebagian besar acara, tindakan berlanjut sebagai [kesalahan non-blocking](/docs/id/hooks#exit-code-output), kecuali hook tersebut adalah hook [yang kegagalannya memblokir tindakan](/docs/id/hooks#block-the-action-when-a-hook-fails) atau output JSON-nya lulus validasi:

637 * Objek yang diurai yang lulus validasi skema: Claude Code mengabaikan kode keluar, JSON saja yang menentukan hasilnya, dan hook tidak dilaporkan sebagai kesalahan. Pengecualian per-acara, seperti `WorktreeCreate` gagal pada kode keluar nonzero apa pun, tercantum di bagian [Exit code output](/docs/id/hooks#exit-code-output) referensi.637 * Objek yang diurai yang lulus validasi skema: Claude Code mengabaikan kode keluar, JSON saja yang menentukan hasilnya, dan hook tidak dilaporkan sebagai kesalahan. Pengecualian per-acara, seperti `WorktreeCreate` gagal pada kode keluar nonzero apa pun, tercantum di bagian [Exit code output](/docs/id/hooks#exit-code-output) referensi.

638 * Objek yang diurai yang gagal validasi skema, atau stdout yang Claude Code [coba parse sebagai JSON](/docs/id/hooks#exit-code-0) tetapi bukan JSON yang valid: kesalahan non-blocking; pemberitahuan membawa pesan validasi atau parse.638 * Objek yang diurai yang gagal validasi skema, atau stdout yang Claude Code [coba parse sebagai JSON](/docs/id/hooks#exit-code-0) tetapi bukan JSON yang valid: kesalahan non-blocking; pemberitahuan membawa pesan validasi atau parse.

639 * Stdout yang Claude Code [diperlakukan sebagai teks biasa](/docs/id/hooks#exit-code-0), atau stdout kosong: tindakan berlanjut sebagai kesalahan non-blocking. Transkrip menunjukkan pemberitahuan `<hook name> hook error`, kemudian baris pertama stderr dengan awalan `Failed with non-blocking status code:`. Untuk menangkap stderr lengkap, aktifkan [debug logging](/docs/id/hooks#debug-hooks) dengan `claude --debug` atau dengan menjalankan `/debug` di tengah sesi.639 * Stdout yang Claude Code [diperlakukan sebagai teks biasa](/docs/id/hooks#exit-code-0), atau stdout kosong: tindakan berlanjut sebagai kesalahan non-blocking. Transkrip menunjukkan pemberitahuan `<hook name> hook error`, kemudian baris pertama stderr dengan awalan `Failed with non-blocking status code:`. Untuk menangkap stderr lengkap, aktifkan [debug logging](/docs/id/hooks#debug-hooks) dengan `claude --debug` atau dengan menjalankan `/debug` di tengah sesi.


664 664 

665Pada `PreToolUse`, Claude Code menangani setiap nilai `permissionDecision` sebagai berikut:665Pada `PreToolUse`, Claude Code menangani setiap nilai `permissionDecision` sebagai berikut:

666 666 

667* `"allow"`: lewati dialog izin interaktif. Aturan deny dan ask, termasuk daftar deny yang dikelola perusahaan, masih berlaku, seperti juga dialog izin untuk pembacaan dari [jalur jaringan](/docs/id/permissions#network-paths), untuk tool MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool), dan untuk tool konektor yang [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan itu mencapai Claude Code667* `"allow"`: lewati dialog izin interaktif. Aturan deny dan ask, termasuk daftar deny terkelola perusahaan, masih berlaku, begitu pula dialog izin untuk:

668 

669 * Pembacaan dari [jalur jaringan](/docs/id/permissions#network-paths)

670 * Tool MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool)

671 * Tool konektor yang [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan itu mencapai Claude Code

672 

673 Untuk apa yang dilakukan `"allow"` dalam plan mode, lihat [Hook approvals in plan mode](/docs/id/permissions#hook-approvals-in-plan-mode).

668* `"deny"`: batalkan panggilan alat dan kirim alasan ke Claude674* `"deny"`: batalkan panggilan alat dan kirim alasan ke Claude

669* `"ask"`: tampilkan prompt izin kepada pengguna seperti biasa675* `"ask"`: tampilkan prompt izin kepada pengguna seperti biasa

670 676 


1015 1021 

1016Hook `PreToolUse` aktif sebelum pemeriksaan mode izin apa pun, dalam setiap [mode izin](/docs/id/permission-modes), termasuk `dontAsk`. Hook yang mengembalikan `permissionDecision: "deny"` memblokir alat bahkan dalam mode `bypassPermissions` atau dengan `--dangerously-skip-permissions`. Ini memungkinkan Anda menegakkan kebijakan yang pengguna tidak dapat lewati dengan mengubah mode izin mereka.1022Hook `PreToolUse` aktif sebelum pemeriksaan mode izin apa pun, dalam setiap [mode izin](/docs/id/permission-modes), termasuk `dontAsk`. Hook yang mengembalikan `permissionDecision: "deny"` memblokir alat bahkan dalam mode `bypassPermissions` atau dengan `--dangerously-skip-permissions`. Ini memungkinkan Anda menegakkan kebijakan yang pengguna tidak dapat lewati dengan mengubah mode izin mereka.

1017 1023 

1018Kebalikannya tidak benar: hook yang mengembalikan `"allow"` tidak melewati aturan deny dari pengaturan, dan tidak dapat menekan permintaan izin untuk pembacaan dari [jalur jaringan](/docs/id/permissions#network-paths), untuk tool MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool), atau untuk tool konektor yang [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan itu mencapai Claude Code. Hooks dalam file pengaturan dan dalam `hooks/hooks.json` plugin dapat mengetatkan pembatasan tetapi tidak melonggarkan mereka melampaui apa yang aturan izin izinkan.1024Kebalikannya tidak benar: hook dalam file pengaturan dan dalam `hooks/hooks.json` plugin dapat mengetatkan pembatasan tetapi tidak melonggarkannya melampaui apa yang diizinkan aturan izin. Hook yang mengembalikan `"allow"` tidak melewati aturan deny dari pengaturan, dan tidak dapat menekan permintaan izin untuk:

1025 

1026* Pembacaan dari [jalur jaringan](/docs/id/permissions#network-paths)

1027* Tool MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool)

1028* Tool konektor yang [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan itu mencapai Claude Code

1029 

1030Dalam [plan mode](/docs/id/permissions#hook-approvals-in-plan-mode), jika hook `PreToolUse` Anda mengembalikan `"allow"` untuk pengeditan file, Anda mendapatkan permintaan izin, pemblokiran, atau persetujuan yang sama seperti yang akan didapat pengeditan tersebut tanpa hook. Untuk mencabut batasan ini pada persetujuan hook, [setujui rencana](/docs/id/permission-modes#review-and-approve-a-plan) atau beralih ke mode izin lain.

1019 1031 

1020Sebuah [mod](/docs/id/plugins/mods/overview) yang Anda instal yang menangani `tool.check` dapat menyetujui panggilan yang hook `PreToolUse` Anda blokir, kecuali hook berada dalam pengaturan terkelola. [Perluas izin dengan hooks](/docs/id/permissions#extend-permissions-with-hooks) mencantumkan aturan mana yang berlaku atas mod.1032Sebuah [mod](/docs/id/plugins/mods/overview) yang Anda instal yang menangani `tool.check` dapat menyetujui panggilan yang hook `PreToolUse` Anda blokir, kecuali hook berada dalam pengaturan terkelola. Dalam plan mode, mod dapat menyetujui panggilan semacam itu jika bersifat read-only, tetapi tidak untuk pengeditan file atau panggilan lain yang tidak read-only. [Perluas izin dengan hooks](/docs/id/permissions#extend-permissions-with-hooks) mencantumkan aturan mana yang berlaku atas mod.

1021 1033 

1022<h3 id="hook-not-firing">1034<h3 id="hook-not-firing">

1023 Hook tidak aktif1035 Hook tidak aktif


1042 ```1054 ```

1043* Jika Anda melihat "command not found", gunakan jalur absolut atau `${CLAUDE_PROJECT_DIR}` untuk mereferensikan skrip. Untuk menghindari quoting shell sepenuhnya, tambahkan `"args": []` untuk beralih ke [exec form](/docs/id/hooks#exec-form-and-shell-form), yang menelurkan skrip secara langsung tanpa shell1055* Jika Anda melihat "command not found", gunakan jalur absolut atau `${CLAUDE_PROJECT_DIR}` untuk mereferensikan skrip. Untuk menghindari quoting shell sepenuhnya, tambahkan `"args": []` untuk beralih ke [exec form](/docs/id/hooks#exec-form-and-shell-form), yang menelurkan skrip secara langsung tanpa shell

1044* Jika Anda melihat "jq: command not found", instal `jq` atau gunakan Python/Node.js untuk parsing JSON1056* Jika Anda melihat "jq: command not found", instal `jq` atau gunakan Python/Node.js untuk parsing JSON

1057* Jika pesan menyertakan `blocking because Git Bash wasn't found`, Anda menggunakan Windows, Claude Code tidak menemukan Git Bash, dan hook yang gagal atau mengalami timeout memblokir panggilan tool. Lihat [Hook yang gagal di Windows tanpa Git Bash](/docs/id/hooks#failed-hooks-on-windows-without-git-bash) untuk perbaikannya

1045* Jika pemberitahuan menampilkan pesan validasi JSON, stdout hook Anda diurai sebagai JSON tetapi gagal validasi skema. Jika menampilkan pesan parsing JSON, stdout terlihat seperti objek JSON tetapi bukan JSON yang valid. Keduanya terjadi bahkan pada exit 0.1058* Jika pemberitahuan menampilkan pesan validasi JSON, stdout hook Anda diurai sebagai JSON tetapi gagal validasi skema. Jika menampilkan pesan parsing JSON, stdout terlihat seperti objek JSON tetapi bukan JSON yang valid. Keduanya terjadi bahkan pada exit 0.

1046 1059 

1047 Untuk memperbaiki kegagalan parsing, bangun payload dengan encoder JSON seperti `jq` daripada penggabungan string, sehingga tanda kutip dan garis miring terbalik di dalam nilai diloloskan. Bagian [Exit code output](/docs/id/hooks#exit-code-output) referensi mencakup kombinasi kode keluar dan JSON1060 Untuk memperbaiki kegagalan parsing, bangun payload dengan encoder JSON seperti `jq` daripada penggabungan string, sehingga tanda kutip dan garis miring terbalik di dalam nilai diloloskan. Bagian [Exit code output](/docs/id/hooks#exit-code-output) referensi mencakup kombinasi kode keluar dan JSON

Details

1091* `event.sequence`: penghitung per-proses untuk mengurutkan peristiwa, dijelaskan di bawah [Atribut korelasi peristiwa](#event-correlation-attributes)1091* `event.sequence`: penghitung per-proses untuk mengurutkan peristiwa, dijelaskan di bawah [Atribut korelasi peristiwa](#event-correlation-attributes)

1092* `from_mode`: Mode izin sebelumnya, misalnya `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, atau `"bypassPermissions"`1092* `from_mode`: Mode izin sebelumnya, misalnya `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, atau `"bypassPermissions"`

1093* `to_mode`: Mode izin baru1093* `to_mode`: Mode izin baru

1094* `trigger`: Apa yang menyebabkan perubahan. Salah satu dari `"shift_tab"`, `"exit_plan_mode"`, `"auto_gate_denied"`, atau `"auto_opt_in"`. Tidak ada ketika transisi berasal dari SDK atau bridge1094* `trigger`: Penyebab perubahan. Salah satu dari `"shift_tab"`, `"exit_plan_mode"`, `"auto_gate_denied"`, atau `"auto_opt_in"`. Tidak ada untuk beberapa perubahan, seperti ketika SDK menetapkan mode izin melalui [`setPermissionMode()`](/docs/id/agent-sdk/typescript#query-object)

1095 1095 

1096<h4 id="auth-event">1096<h4 id="auth-event">

1097 Peristiwa auth1097 Peristiwa auth

Details

203 Streaming idle watchdogs203 Streaming idle watchdogs

204</h2>204</h2>

205 205 

206Claude Code menjalankan empat timer independen yang menghentikan respons model streaming ketika diam, sehingga koneksi yang mati gagal dan mencoba ulang alih-alih menggantung. Tenggat waktu byte pertama mencakup penantian header respons, sebelum ada respons yang tiba. Masing-masing dari tiga lainnya memantau respons langsung untuk sinyal yang berbeda.206Claude Code menjalankan empat timer independen yang menghentikan respons model streaming ketika diam, sehingga koneksi yang mati gagal dan mencoba ulang alih-alih menggantung. Permintaan yang sama sekali tidak mendapatkan header respons berakhir dengan salah satu dari dua cara:

207 

208* **Di tempat first-byte deadline berjalan**: percobaan pertama berakhir pada deadline tersebut. Untuk mengubahnya, atur `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS`. Untuk waktu tunggu retry, lihat [No response from API](/docs/id/errors#no-response-from-api).

209* **Pada koneksi lainnya**: permintaan berakhir setelah 5 hingga 6 menit, ketika body idle timeout terpicu, kecuali Anda telah mematikan timeout tersebut. Untuk mengakhirinya lebih cepat, turunkan `API_TIMEOUT_MS`.

207 210 

208| Timer | Menghentikan ketika | Berjalan pada | Tenggat waktu default |211| Timer | Menghentikan ketika | Berjalan pada | Tenggat waktu default |

209| :- | :- | :- | :- |212| :- | :- | :- | :- |

210| First-byte deadline | Tidak ada header respons yang tiba setelah Claude Code mengirim permintaan | Direct Anthropic API dan [Claude Platform on AWS](/docs/id/claude-platform-on-aws), termasuk melalui proxy HTTPS, tetapi tidak ketika `ANTHROPIC_BASE_URL` atau `ANTHROPIC_AWS_BASE_URL` merutekannya melalui [gateway](/docs/id/gateways). Opt-in pada Amazon Bedrock dengan `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; tidak berjalan pada Google Cloud's Agent Platform atau Microsoft Foundry | 180 detik pada direct Anthropic API, 300 detik di tempat lain, ditambah satu detik per 32KB badan permintaan |213| First-byte deadline | Tidak ada header respons yang tiba setelah Claude Code mengirim permintaan | Direct Anthropic API dan [Claude Platform on AWS](/docs/id/claude-platform-on-aws), termasuk melalui proxy HTTPS, tetapi tidak ketika `ANTHROPIC_BASE_URL` atau `ANTHROPIC_AWS_BASE_URL` merutekannya melalui [gateway](/docs/id/gateways). Opt-in pada Amazon Bedrock dengan `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; tidak berjalan pada Google Cloud's Agent Platform atau Microsoft Foundry, atau dalam sesi [Claude apps gateway](/docs/id/claude-apps-gateway) | 180 detik pada direct Anthropic API, 300 detik di tempat lain, ditambah satu detik per 32KB badan permintaan |

211| Event-level watchdog | Tidak ada event respons yang diurai. Pada koneksi di mana byte-level watchdog berjalan selain Amazon Bedrock, byte yang tiba, termasuk keep-alive pings, juga mengatur ulang watchdog ini, selama sekitar lima menit tanpa event yang diurai | Setiap penyedia | 300 detik |214| Event-level watchdog | Tidak ada event respons yang diurai. Pada koneksi di mana byte-level watchdog berjalan selain Amazon Bedrock, byte yang tiba, termasuk keep-alive pings, juga mengatur ulang watchdog ini, selama sekitar lima menit tanpa event yang diurai | Setiap penyedia | 300 detik |

212| Byte-level watchdog | Tidak ada byte yang tiba di wire, termasuk SSE keep-alive pings | Direct Anthropic API, [Claude Platform on AWS](/docs/id/claude-platform-on-aws), dan koneksi [gateway](/docs/id/gateways), termasuk `ANTHROPIC_BASE_URL` kustom. Opt-in pada respons Amazon Bedrock `vnd.amazon.eventstream` dengan `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; tidak berjalan pada Google Cloud's Agent Platform atau Microsoft Foundry | 180 detik pada direct Anthropic API. 300 detik pada Claude Platform on AWS, pada Amazon Bedrock, dalam sesi [Claude apps gateway](/docs/id/claude-apps-gateway), dan melalui `ANTHROPIC_BASE_URL` kustom |215| Byte-level watchdog | Tidak ada byte yang tiba di wire, termasuk SSE keep-alive pings | Direct Anthropic API, [Claude Platform on AWS](/docs/id/claude-platform-on-aws), dan koneksi [gateway](/docs/id/gateways), termasuk `ANTHROPIC_BASE_URL` kustom. Opt-in pada respons Amazon Bedrock `vnd.amazon.eventstream` dengan `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`; tidak berjalan pada Google Cloud's Agent Platform atau Microsoft Foundry | 180 detik pada direct Anthropic API. 300 detik pada Claude Platform on AWS, pada Amazon Bedrock, dalam sesi [Claude apps gateway](/docs/id/claude-apps-gateway), dan melalui `ANTHROPIC_BASE_URL` kustom |

213| Body idle timeout | Tidak ada byte yang tiba selama 5 menit | Penyedia selain direct Anthropic API, Claude Platform on AWS, dan Amazon Bedrock dengan `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` diatur, kecuali [`API_FORCE_IDLE_TIMEOUT`](/docs/id/env-vars) mengubahnya | 5 menit |216| Body idle timeout | Tidak ada byte yang tiba selama 5 menit, termasuk waktu menunggu header respons | Penyedia selain direct Anthropic API, Claude Platform on AWS, dan Amazon Bedrock dengan `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` diatur, kecuali [`API_FORCE_IDLE_TIMEOUT`](/docs/id/env-vars) mengubahnya | 5 menit |

214 217 

215Jika Anda menetapkan `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`, byte-level watchdog menggantikan body idle timeout pada Bedrock daripada berjalan bersama dengannya. `CLAUDE_STREAM_IDLE_TIMEOUT_MS` kemudian juga mengatur berapa lama aliran Bedrock dapat tetap diam sebelum Claude Code memperlakukan koneksi sebagai mati, dalam batas yang tercantum di bawah. Byte yang tiba masih tidak mengatur ulang event-level watchdog pada Bedrock. Dengan debug logging aktif, setiap aliran Bedrock kemudian mencatat pesan debug yang dimulai dengan `wire-heartbeat: _chunkTimes absent`.218Jika Anda menetapkan `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1`, byte-level watchdog menggantikan body idle timeout pada Bedrock daripada berjalan bersama dengannya. `CLAUDE_STREAM_IDLE_TIMEOUT_MS` kemudian juga mengatur berapa lama aliran Bedrock dapat tetap diam sebelum Claude Code memperlakukan koneksi sebagai mati, dalam batas yang tercantum di bawah. Byte yang tiba masih tidak mengatur ulang event-level watchdog pada Bedrock. Dengan debug logging aktif, setiap aliran Bedrock kemudian mencatat pesan debug yang dimulai dengan `wire-heartbeat: _chunkTimes absent`.

216 219 


220* `CLAUDE_STREAM_IDLE_TIMEOUT_MS` menetapkan tenggat waktu kedua watchdog. Claude Code menaikkan nilai di bawah 5 menit menjadi 5 menit, dan membatasi nilai pada 30 menit untuk byte-level watchdog.223* `CLAUDE_STREAM_IDLE_TIMEOUT_MS` menetapkan tenggat waktu kedua watchdog. Claude Code menaikkan nilai di bawah 5 menit menjadi 5 menit, dan membatasi nilai pada 30 menit untuk byte-level watchdog.

221* `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` menetapkan tenggat waktu byte-level watchdog tanpa mengubah event-level watchdog, diklem antara 10 detik dan 30 menit, dan mengambil prioritas atas `CLAUDE_STREAM_IDLE_TIMEOUT_MS` untuk watchdog itu.224* `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` menetapkan tenggat waktu byte-level watchdog tanpa mengubah event-level watchdog, diklem antara 10 detik dan 30 menit, dan mengambil prioritas atas `CLAUDE_STREAM_IDLE_TIMEOUT_MS` untuk watchdog itu.

222* `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS` menetapkan first-byte deadline secara langsung. Biarkan tidak diatur dan Claude Code menggunakan tenggat waktu byte-level watchdog, sehingga `CLAUDE_STREAM_IDLE_TIMEOUT_MS` dan `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` juga mengubah deadline. Untuk klem, tunjangan unggah, batas `API_TIMEOUT_MS`, dan berapa lama percobaan ulang menunggu setelah penghentian tanpa respons, lihat [No response from API](/docs/id/errors#no-response-from-api).225* `CLAUDE_STREAM_FIRST_BYTE_TIMEOUT_MS` menetapkan first-byte deadline secara langsung. Biarkan tidak diatur dan Claude Code menggunakan tenggat waktu byte-level watchdog, sehingga `CLAUDE_STREAM_IDLE_TIMEOUT_MS` dan `CLAUDE_BYTE_STREAM_IDLE_TIMEOUT_MS` juga mengubah deadline. Untuk klem, tunjangan unggah, batas `API_TIMEOUT_MS`, dan berapa lama percobaan ulang menunggu setelah penghentian tanpa respons, lihat [No response from API](/docs/id/errors#no-response-from-api).

226* `API_TIMEOUT_MS` membatasi waktu tunggu header respons. Di tempat first-byte deadline tidak berjalan, seperti sesi Claude apps gateway, atur ke nilai di bawah `300000`, yaitu 5 menit, untuk mencoba ulang permintaan yang tidak dijawab lebih cepat. Pertahankan nilainya di atas waktu tunggu header terlama, dan [permintaan non-streaming](/docs/id/errors#streaming-response-ended-before-any-complete-data-was-received) terlama, yang Anda perkirakan: permintaan yang membutuhkan waktu lebih lama akan mengalami timeout lagi pada setiap retry.

223* `API_FORCE_IDLE_TIMEOUT` diatur ke `0` mematikan body idle timeout, dan diatur ke `1` menghidupkannya untuk setiap penyedia. Watchdog berjalan independen darinya, jadi untuk membiarkan aliran berhenti lebih lama dari ambang batas mereka, juga naikkan atau nonaktifkan mereka.227* `API_FORCE_IDLE_TIMEOUT` diatur ke `0` mematikan body idle timeout, dan diatur ke `1` menghidupkannya untuk setiap penyedia. Watchdog berjalan independen darinya, jadi untuk membiarkan aliran berhenti lebih lama dari ambang batas mereka, juga naikkan atau nonaktifkan mereka.

224 228 

225Ketika watchdog menghentikan aliran yang macet, Claude Code memperlakukan penghentian sebagai kegagalan mid-stream, dan apa yang Anda lihat tergantung pada seberapa jauh respons telah sampai. Claude Code mencoba ulang permintaan atau mengakhiri giliran dengan kesalahan, menyimpan output yang selesai dan menampilkan [pemberitahuan respons tidak lengkap](/docs/id/errors#the-response-above-may-be-incomplete), atau mengakhiri giliran secara normal. [Percobaan ulang otomatis](/docs/id/errors#automatic-retries) mengatakan di mana setiap hasil berlaku.229Ketika watchdog menghentikan aliran yang macet, Claude Code memperlakukan penghentian sebagai kegagalan mid-stream, dan apa yang Anda lihat tergantung pada seberapa jauh respons telah sampai. Claude Code mencoba ulang permintaan atau mengakhiri giliran dengan kesalahan, menyimpan output yang selesai dan menampilkan [pemberitahuan respons tidak lengkap](/docs/id/errors#the-response-above-may-be-incomplete), atau mengakhiri giliran secara normal. [Percobaan ulang otomatis](/docs/id/errors#automatic-retries) mengatakan di mana setiap hasil berlaku.

Details

627 627 

628Claude Code menolak `bypassPermissions` dalam sesi yang Anda mulai dengan [`--restricted`](/docs/id/cli-reference#cli-flags). `--restricted` memerlukan Claude Code v2.1.248 atau lebih baru.628Claude Code menolak `bypassPermissions` dalam sesi yang Anda mulai dengan [`--restricted`](/docs/id/cli-reference#cli-flags). `--restricted` memerlukan Claude Code v2.1.248 atau lebih baru.

629 629 

630Pertama kali Anda memulai sesi interaktif dengan mode ini diaktifkan, Claude Code menampilkan dialog peringatan yang meminta Anda menerima tanggung jawab untuk tindakan yang diambil tanpa pemeriksaan izin:630<span id="bypass-permissions-acceptance" />Pertama kali Anda memulai sesi interaktif dengan mode ini diaktifkan, Claude Code menampilkan dialog peringatan yang meminta Anda menerima tanggung jawab untuk tindakan yang diambil tanpa pemeriksaan izin:

631 631 

632* **Jika Anda menerima**: Claude Code menetapkan `skipDangerousModePermissionPrompt` ke `true` dalam `~/.claude/settings.json`, sehingga sesi berikutnya melewati dialog. Untuk melihat dialog lagi, hapus kunci dari file tersebut atau atur ke `false`. Referensi [`skipDangerousModePermissionPrompt`](/docs/id/settings-reference#skipdangerousmodepermissionprompt) mencantumkan file pengaturan lainnya di mana Anda atau organisasi Anda dapat mengaturnya.632* **Jika Anda menerima**: Claude Code menetapkan `skipDangerousModePermissionPrompt` ke `true` dalam `~/.claude/settings.json`, sehingga sesi berikutnya melewati dialog. Untuk melihat dialog lagi, hapus kunci dari file tersebut atau atur ke `false`. Referensi [`skipDangerousModePermissionPrompt`](/docs/id/settings-reference#skipdangerousmodepermissionprompt) mencantumkan file pengaturan lainnya di mana Anda atau organisasi Anda dapat mengaturnya.

633* **Jika Anda menolak**: Claude Code keluar.633* **Jika Anda menolak**: Claude Code keluar.


635Dalam [mode non-interaktif](/docs/id/headless) tidak ada dialog yang ditampilkan. [Sesi latar belakang](/docs/id/agent-view) menghormati penerimaan Anda ketika penerimaan tersebut tercatat dalam pengaturan pengguna atau pengaturan terkelola:635Dalam [mode non-interaktif](/docs/id/headless) tidak ada dialog yang ditampilkan. [Sesi latar belakang](/docs/id/agent-view) menghormati penerimaan Anda ketika penerimaan tersebut tercatat dalam pengaturan pengguna atau pengaturan terkelola:

636 636 

637* Tanpa penerimaan yang tercatat, `claude --bg --permission-mode bypassPermissions` ditolak sampai Anda menerima dialog dalam sesi interaktif.637* Tanpa penerimaan yang tercatat, `claude --bg --permission-mode bypassPermissions` ditolak sampai Anda menerima dialog dalam sesi interaktif.

638* Dengan `skipDangerousModePermissionPrompt` yang hanya diatur dalam `.claude/settings.local.json`, sesi latar belakang dimulai dengan permintaan bypass diabaikan dan menyematkan pemberitahuan `Bypass permissions was requested at launch and ignored · if that was you, ~/.claude/settings.json needs "skipDangerousModePermissionPrompt": true`. Agar bypass dihormati, tambahkan kunci tersebut ke `~/.claude/settings.json`, lalu mulai sesi latar belakang baru.638* Dengan `skipDangerousModePermissionPrompt` yang hanya diatur dalam `.claude/settings.local.json`, sesi latar belakang dimulai dengan permintaan bypass diabaikan dan menyematkan pemberitahuan `Bypass permissions was requested at launch and ignored · if that was you, ~/.claude/settings.json needs "skipDangerousModePermissionPrompt": true`. Tambahkan kunci tersebut ke `~/.claude/settings.json`, lalu mulai sesi latar belakang baru. Sesi yang menampilkan pemberitahuan tersebut tetap berjalan:

639 * Jika `--allow-dangerously-skip-permissions` diabaikan, `bypassPermissions` tidak disertakan dalam siklus `Shift+Tab`-nya.

640 * Jika `--permission-mode bypassPermissions` atau `--dangerously-skip-permissions` diabaikan, sesi dimulai dalam mode Manual sebagai gantinya.

639 641 

640Di Linux dan macOS, Claude Code menolak untuk memulai dalam mode ini saat berjalan sebagai root atau di bawah `sudo`:642Di Linux dan macOS, Claude Code menolak untuk memulai dalam mode `bypassPermissions` saat berjalan sebagai root atau di bawah `sudo`:

641 643 

642```text theme={null}644```text theme={null}

643--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons645--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons


692 * File markdown di direktori [auto memory](/docs/id/memory#storage-location) proyek, seperti `~/.claude/projects/<project>/memory/`, dalam sesi yang dimulai tanpa `--restricted`694 * File markdown di direktori [auto memory](/docs/id/memory#storage-location) proyek, seperti `~/.claude/projects/<project>/memory/`, dalam sesi yang dimulai tanpa `--restricted`

693 * File markdown di direktori [memori subagent](/docs/id/sub-agents#enable-persistent-memory), seperti `.claude/agent-memory/`, dalam sesi yang dimulai tanpa `--restricted`695 * File markdown di direktori [memori subagent](/docs/id/sub-agents#enable-persistent-memory), seperti `.claude/agent-memory/`, dalam sesi yang dimulai tanpa `--restricted`

694* Direktori yang Anda muat dengan [`--plugin-dir`](/docs/id/plugins/mods/create#change-a-mod-with-claude), karena Claude Code memuat ulang dan menjalankan kode mod dari sana ketika file berubah696* Direktori yang Anda muat dengan [`--plugin-dir`](/docs/id/plugins/mods/create#change-a-mod-with-claude), karena Claude Code memuat ulang dan menjalankan kode mod dari sana ketika file berubah

697* `~/.claude/dev-mods/`, atau `dev-mods/` di direktori yang ditunjuk oleh [`CLAUDE_CONFIG_DIR`](/docs/id/env-vars), tempat Claude menyimpan [mod yang ditulisnya untuk Anda](/docs/id/plugins/mods/create#ask-claude-for-a-mod)

695 698 

696File yang dilindungi:699File yang dilindungi:

697 700 

permissions.md +20 −2

Details

595 MCP595 MCP

596</h3>596</h3>

597 597 

598Aturan MCP menggunakan nama server sebagaimana dikonfigurasi di Claude Code, secara opsional diikuti oleh nama tool dari server tersebut.598Untuk mencocokkan setiap tool dari server MCP, tulis `mcp__<server>__*`. Untuk mencocokkan satu tool, tulis nama lengkapnya, `mcp__<server>__<tool>`.

599 599 

600* `mcp__puppeteer` cocok dengan tool apa pun yang disediakan oleh server `puppeteer`600* `mcp__puppeteer` cocok dengan tool apa pun yang disediakan oleh server `puppeteer`

601* `mcp__puppeteer__*` menggunakan sintaks wildcard dan juga cocok dengan semua tool dari server `puppeteer`601* `mcp__puppeteer__*` menggunakan sintaks wildcard dan juga cocok dengan semua tool dari server `puppeteer`

602* `mcp__puppeteer__puppeteer_navigate` cocok dengan tool `puppeteer_navigate` yang disediakan oleh server `puppeteer`602* `mcp__puppeteer__puppeteer_navigate` cocok dengan tool `puppeteer_navigate` yang disediakan oleh server `puppeteer`

603 603 

604Untuk `<server>`, tulis nama server sebagaimana nama tersebut muncul dalam nama tool server itu. Contoh-contoh berikut menunjukkan aturan yang perlu ditulis untuk nama dengan karakter khusus, server dari plugin, dan nama yang mengandung `__` atau berakhiran `_`:

605 

606* **Nama dengan karakter seperti `.` atau spasi**: karakter tersebut menjadi `_`, sehingga untuk server yang Anda konfigurasi sebagai `my.server`, tulis `mcp__my_server__*`

607* **Server yang disediakan plugin**: `<server>` menggunakan [bentuk bercakupan plugin](/docs/id/mcp#plugin-provided-mcp-servers), sehingga untuk server `database-tools` dalam plugin bernama `my-plugin`, tulis `mcp__plugin_my-plugin_database-tools__*`

608* **`<server>` yang mengandung `__` atau berakhiran `_`**: tulis bentuk wildcard, `mcp__<server>__*`, dengan nama lengkapnya. Untuk server bernama `reports__v2`, tulis `mcp__reports__v2__*`. `mcp__reports__v2` tanpa wildcard dan `mcp__reports` yang lebih pendek tidak cocok dengan tool-nya sebagai aturan allow, karena Claude Code membaca keduanya sebagai aturan untuk server bernama `reports`

609 

604Jika organisasi Anda telah menetapkan tool [konektor claude.ai](/docs/id/mcp#organization-controls-on-connector-tools) ke `ask` dan pengaturan tersebut sampai ke Claude Code dalam sesi Anda, aturan allow untuk tool tersebut tidak berlaku: Claude Code meminta persetujuan pada setiap panggilan, bahkan dalam mode `auto` dan `bypassPermissions`. Dalam mode `dontAsk`, yang tidak pernah meminta persetujuan, Claude Code justru menolak panggilan tersebut. Tool dari konektor yang diambil sendiri oleh Claude Code muncul sebagai `mcp__claude_ai_<server>__<tool>`.610Jika organisasi Anda telah menetapkan tool [konektor claude.ai](/docs/id/mcp#organization-controls-on-connector-tools) ke `ask` dan pengaturan tersebut sampai ke Claude Code dalam sesi Anda, aturan allow untuk tool tersebut tidak berlaku: Claude Code meminta persetujuan pada setiap panggilan, bahkan dalam mode `auto` dan `bypassPermissions`. Dalam mode `dontAsk`, yang tidak pernah meminta persetujuan, Claude Code justru menolak panggilan tersebut. Tool dari konektor yang diambil sendiri oleh Claude Code muncul sebagai `mcp__claude_ai_<server>__<tool>`.

605 611 

606Dalam sesi [Cowork](https://claude.com/docs/cowork/overview) di aplikasi Claude Desktop, Claude menjalankan perintah shell melalui tool `mcp__workspace__bash` milik Cowork alih-alih tool `Bash` bawaan, dan Cowork juga menyediakan `mcp__workspace__web_fetch` untuk fetch web. Claude Code juga menerapkan aturan deny yang menyebutkan seluruh tool `Bash` atau `WebFetch` ke tool Cowork ini, sehingga aturan deny `Bash` yang terkelola menghentikan Claude dari menjalankan perintah shell di Cowork. Ketika Claude Code memblokir panggilan semacam itu, pesannya menyebutkan tool Cowork: `Permission to use mcp__workspace__bash has been denied.` Aturan allow tidak terbawa: Claude Code tidak pernah menerapkan aturan allow `Bash` ke `mcp__workspace__bash`.612Dalam sesi [Cowork](https://claude.com/docs/cowork/overview) di aplikasi Claude Desktop, Claude menjalankan perintah shell melalui tool `mcp__workspace__bash` milik Cowork alih-alih tool `Bash` bawaan, dan Cowork juga menyediakan `mcp__workspace__web_fetch` untuk fetch web. Claude Code juga menerapkan aturan deny yang menyebutkan seluruh tool `Bash` atau `WebFetch` ke tool Cowork ini, sehingga aturan deny `Bash` yang terkelola menghentikan Claude dari menjalankan perintah shell di Cowork. Ketika Claude Code memblokir panggilan semacam itu, pesannya menyebutkan tool Cowork: `Permission to use mcp__workspace__bash has been denied.` Aturan allow tidak terbawa: Claude Code tidak pernah menerapkan aturan allow `Bash` ke `mcp__workspace__bash`.


649 655 

650[Hook Claude Code](/docs/id/hooks-guide) memungkinkan Anda mendaftarkan perintah shell kustom yang mengevaluasi izin saat runtime. Ketika Claude Code membuat panggilan alat, hook PreToolUse berjalan sebelum prompt izin, untuk setiap alat kecuali [`EndConversation`](/docs/id/tools-reference#endconversation-tool-behavior). Output hook dapat menolak panggilan alat, memaksa prompt, atau melewati prompt untuk membiarkan panggilan berlanjut.656[Hook Claude Code](/docs/id/hooks-guide) memungkinkan Anda mendaftarkan perintah shell kustom yang mengevaluasi izin saat runtime. Ketika Claude Code membuat panggilan alat, hook PreToolUse berjalan sebelum prompt izin, untuk setiap alat kecuali [`EndConversation`](/docs/id/tools-reference#endconversation-tool-behavior). Output hook dapat menolak panggilan alat, memaksa prompt, atau melewati prompt untuk membiarkan panggilan berlanjut.

651 657 

658<h3 id="precedence-among-rules-hooks-and-mods">

659 Prioritas di antara aturan, hook, dan mod

660</h3>

661 

652Keputusan hook PreToolUse tidak melewati aturan izin. Claude Code mengevaluasi aturan deny dan ask terlepas dari apa yang dikembalikan hook PreToolUse: aturan deny yang cocok memblokir panggilan, dan aturan ask masih meminta bahkan ketika hook mengembalikan `"allow"` atau `"ask"`. Ini mempertahankan prioritas deny-first yang dijelaskan dalam [Kelola izin](#manage-permissions), termasuk aturan deny yang ditetapkan dalam pengaturan terkelola.662Keputusan hook PreToolUse tidak melewati aturan izin. Claude Code mengevaluasi aturan deny dan ask terlepas dari apa yang dikembalikan hook PreToolUse: aturan deny yang cocok memblokir panggilan, dan aturan ask masih meminta bahkan ketika hook mengembalikan `"allow"` atau `"ask"`. Ini mempertahankan prioritas deny-first yang dijelaskan dalam [Kelola izin](#manage-permissions), termasuk aturan deny yang ditetapkan dalam pengaturan terkelola.

653 663 

654Prioritas tersebut mencakup hook dalam file pengaturan dan dalam `hooks/hooks.json` plugin. Sebuah [mod](/docs/id/plugins/mods/overview) yang Anda instal yang menangani `tool.check` menjawab setelah aturan dan hook `PreToolUse` telah memutuskan, dan jawabannya dapat menggantikan milik mereka:664Prioritas tersebut mencakup hook dalam file pengaturan dan dalam `hooks/hooks.json` plugin. Sebuah [mod](/docs/id/plugins/mods/overview) yang Anda instal yang menangani `tool.check` menjawab setelah aturan dan hook `PreToolUse` telah memutuskan. Di luar [plan mode](#hook-approvals-in-plan-mode), atau untuk panggilan read-only, jawabannya dapat menggantikan jawaban mereka:

655 665 

656* **Aturan Ask**: mod dapat menyetujui panggilan yang akan diminta oleh aturan ask666* **Aturan Ask**: mod dapat menyetujui panggilan yang akan diminta oleh aturan ask

657* **Blokir dari hook `PreToolUse`**: mod dapat menyetujui panggilan, kecuali hook berada dalam pengaturan terkelola667* **Blokir dari hook `PreToolUse`**: mod dapat menyetujui panggilan, kecuali hook berada dalam pengaturan terkelola


664 674 

665Hook pemblokiran juga memiliki prioritas atas aturan allow. Hook yang keluar dengan kode 2 menghentikan panggilan alat sebelum aturan izin dievaluasi, jadi blokir berlaku bahkan ketika aturan allow akan membiarkan panggilan berlanjut. Untuk menjalankan semua perintah Bash tanpa prompt kecuali untuk beberapa yang ingin Anda blokir, tambahkan `"Bash"` ke daftar allow Anda dan daftarkan hook PreToolUse yang menolak perintah tertentu itu. Lihat [Block edits to protected files](/docs/id/hooks-guide#block-edits-to-protected-files) untuk skrip hook yang dapat Anda sesuaikan.675Hook pemblokiran juga memiliki prioritas atas aturan allow. Hook yang keluar dengan kode 2 menghentikan panggilan alat sebelum aturan izin dievaluasi, jadi blokir berlaku bahkan ketika aturan allow akan membiarkan panggilan berlanjut. Untuk menjalankan semua perintah Bash tanpa prompt kecuali untuk beberapa yang ingin Anda blokir, tambahkan `"Bash"` ke daftar allow Anda dan daftarkan hook PreToolUse yang menolak perintah tertentu itu. Lihat [Block edits to protected files](/docs/id/hooks-guide#block-edits-to-protected-files) untuk skrip hook yang dapat Anda sesuaikan.

666 676 

677<h3 id="hook-approvals-in-plan-mode">

678 Persetujuan hook dalam plan mode

679</h3>

680 

681Dalam [plan mode](/docs/id/permission-modes#analyze-before-you-edit-with-plan-mode), selain `ExitPlanMode`, `"allow"` dari hook `PreToolUse` Anda tidak berpengaruh pada pengeditan file atau panggilan lain yang bukan read-only. Anda mendapatkan permintaan izin, blokir, atau persetujuan yang sama seperti yang akan didapat panggilan tersebut tanpa hook, dan Claude Code tetap menerapkan `updatedInput` apa pun yang dikembalikan hook. Jika hook menjawab [`ExitPlanMode`](/docs/id/hooks#allow-with-updatedinput) dengan `"allow"` dan `updatedInput`, tool tersebut tetap berjalan tanpa permintaan izin.

682 

683Dalam plan mode, mod yang menangani `tool.check` juga tidak dapat menyetujui pengeditan file atau panggilan lain yang bukan read-only, meskipun mod tersebut tetap dapat memblokir panggilan semacam itu. Untuk mencabut batasan ini pada persetujuan hook dan mod, [setujui rencana](/docs/id/permission-modes#review-and-approve-a-plan) atau beralih ke mode izin lain.

684 

667<h2 id="working-directories">685<h2 id="working-directories">

668 Direktori kerja686 Direktori kerja

669</h2>687</h2>

Details

27 27 

28<Steps>28<Steps>

29 <Step title="Jelaskan mod">29 <Step title="Jelaskan mod">

30 Minta mod dengan kata-kata Anda sendiri, misalnya `buat mod yang menunjukkan cabang git saat ini di atas prompt`. Claude menulis mod dalam direktori miliknya sendiri di folder mods sesi, yaitu `~/.claude/dev-mods/` diikuti dengan ID sesi. Jalur lengkap mod terlihat seperti `~/.claude/dev-mods/3f2a9c1e-5b7d-4e8a-9c21-6d0f4b8a7e13/git-branch/`.30 Minta mod dengan kata-kata Anda sendiri, misalnya `buat mod yang menunjukkan branch git saat ini di atas prompt`. Claude menulis mod dalam direktori miliknya sendiri di folder mods sesi, yaitu `~/.claude/dev-mods/` diikuti dengan ID sesi. Jalur lengkap mod terlihat seperti `~/.claude/dev-mods/3f2a9c1e-5b7d-4e8a-9c21-6d0f4b8a7e13/git-branch/`.

31 31 

32 <Note>32 <Note>

33 Dalam [mode izin](/docs/id/permission-modes#protected-paths) `default` dan `acceptEdits`, Claude Code menanyakan sebelum Claude membuat setiap file mod, karena `~/.claude` adalah jalur yang dilindungi. Setujui setiap file saat muncul.33 Dalam [mode izin](/docs/id/permission-modes) `default` dan `acceptEdits`, Claude Code menanyakan sebelum Claude membuat setiap file mod, karena folder mods adalah [jalur yang dilindungi](/docs/id/permission-modes#protected-paths). Setujui setiap file saat muncul.

34 </Note>34 </Note>

35 </Step>35 </Step>

36 36 

Details

216})216})

217```217```

218 218 

219Di `main`, hook mengembalikan `deny`, bahkan ketika suatu aturan mengizinkan `git push`. Di branch lain, dan untuk perintah lain, panggilan mendapatkan keputusan yang akan didapatnya tanpa mod.219Hook menolak `git push` di `main` dan meneruskan setiap panggilan lain:

220 

221* **Di `main`**: hook mengembalikan `deny`, bahkan ketika suatu aturan mengizinkan `git push`

222* **Di branch lain, dan untuk perintah lain**: panggilan mendapatkan keputusan yang akan didapatnya tanpa mod

220 223 

221Hook mencocokkan teks perintah, jadi perlakukan sebagai pengingat untuk Claude. Untuk memblokir push ke `main` bagi semua orang, lindungi branch tersebut di host Git Anda.224Hook mencocokkan teks perintah, jadi perlakukan sebagai pengingat untuk Claude. Untuk memblokir push ke `main` bagi semua orang, lindungi branch tersebut di host Git Anda.

222 225 

223Hook dapat mengembalikan `allow`, `ask`, atau `deny`, sehingga juga dapat menyetujui panggilan yang diblokir oleh hook `PreToolUse` di luar pengaturan terkelola. [Perluas izin dengan hook](/docs/id/permissions#extend-permissions-with-hooks) mencantumkan keputusan mana yang tetap berlaku atas mod.226Hook dapat mengembalikan `allow`, `ask`, atau `deny`, sehingga juga dapat menyetujui panggilan yang diblokir oleh hook `PreToolUse` di luar pengaturan terkelola. Dalam [plan mode](/docs/id/permissions#hook-approvals-in-plan-mode), untuk panggilan yang tidak read-only, seperti pengeditan file, hook Anda dapat memperketat keputusan yang dikembalikan `next(e)` tetapi tidak dapat melonggarkannya. [Perluas izin dengan hook](/docs/id/permissions#extend-permissions-with-hooks) mencantumkan keputusan mana yang tetap berlaku atas mod.

224 227 

225<h3 id="rewrite-or-add-to-a-prompt">228<h3 id="rewrite-or-add-to-a-prompt">

226 Tulis ulang atau tambahkan ke prompt229 Tulis ulang atau tambahkan ke prompt


337* **Hook `PreToolUse` dari pengaturan terkelola**: berjalan sebelum hook `tool.call` mod pertama, dan blok dari salah satu dari mereka adalah final, jadi tidak ada mod yang melihat panggilan.340* **Hook `PreToolUse` dari pengaturan terkelola**: berjalan sebelum hook `tool.call` mod pertama, dan blok dari salah satu dari mereka adalah final, jadi tidak ada mod yang melihat panggilan.

338* **Hook `PreToolUse` dari setiap file pengaturan lain dan dari `hooks/hooks.json` plugin**: berjalan setelah mod terakhir memanggil `next`, sebagai bagian dari perilaku Claude Code sendiri. Mod yang menjawab `tool.call` tanpa memanggil `next` mencegah mereka berjalan, dan mod yang memanggil `next` melihat keputusan mereka dalam hasil yang dikembalikan.341* **Hook `PreToolUse` dari setiap file pengaturan lain dan dari `hooks/hooks.json` plugin**: berjalan setelah mod terakhir memanggil `next`, sebagai bagian dari perilaku Claude Code sendiri. Mod yang menjawab `tool.call` tanpa memanggil `next` mencegah mereka berjalan, dan mod yang memanggil `next` melihat keputusan mereka dalam hasil yang dikembalikan.

339 342 

340[`tool.check`](#approve-or-refuse-a-tool-call-before-the-user-is-asked) diaktifkan setelah hook tersebut dan aturan izin telah memutuskan, sehingga hook pada peristiwa tersebut dapat menyetujui panggilan yang diblokir hook di grup kedua.343Hook [`tool.check`](#approve-or-refuse-a-tool-call-before-the-user-is-asked) dapat menyetujui panggilan yang diblokir oleh hook `PreToolUse` di luar pengaturan terkelola, karena `tool.check` diaktifkan setelah hook tersebut dan aturan izin telah memutuskan. Dalam plan mode, hook `tool.check` dapat menyetujui panggilan tersebut jika panggilan itu read-only, tetapi tidak untuk pengeditan file atau panggilan lain yang tidak read-only.

341 344 

342<h3 id="handle-a-hook-that-fails">345<h3 id="handle-a-hook-that-fails">

343 Tangani hook yang gagal346 Tangani hook yang gagal

Details

205 205 

206Untuk menghasilkan ringkasan, Claude Code mengirim permintaan terpisah dengan system prompt, tool, dan riwayat yang sama seperti percakapan Anda, ditambah instruksi peringkasan yang ditambahkan sebagai pesan pengguna terakhir. Saat cache hangat, permintaan itu membaca prefiks Anda dari cache, sehingga `/compact` di tengah sesi hanya memakan sebagian kecil dari biaya yang tersirat dari ukuran konteks dan menghabiskan sebagian besar waktunya untuk menghasilkan ringkasan.206Untuk menghasilkan ringkasan, Claude Code mengirim permintaan terpisah dengan system prompt, tool, dan riwayat yang sama seperti percakapan Anda, ditambah instruksi peringkasan yang ditambahkan sebagai pesan pengguna terakhir. Saat cache hangat, permintaan itu membaca prefiks Anda dari cache, sehingga `/compact` di tengah sesi hanya memakan sebagian kecil dari biaya yang tersirat dari ukuran konteks dan menghabiskan sebagian besar waktunya untuk menghasilkan ringkasan.

207 207 

208Setelah jeda yang lebih lama dari [masa berlaku cache](#cache-lifetime), tidak ada cache yang tersisa untuk dibaca, sehingga permintaan peringkasan memproses ulang seluruh riwayat sebagai input yang tidak di-cache. Inilah mengapa `/compact` paling mahal ketika Anda [melanjutkan sesi lama](/docs/id/sessions#resume-from-a-summary). Baik dalam kondisi cache hangat maupun dingin, giliran setelah compaction membangun ulang cache percakapan hanya untuk ringkasan yang jauh lebih pendek, sehingga giliran itu bukan bagian yang lambat.208Setelah jeda yang lebih lama dari [masa berlaku cache](#cache-lifetime), tidak ada cache yang tersisa untuk dibaca, sehingga permintaan peringkasan memproses ulang seluruh riwayat sebagai input yang tidak di-cache. Inilah mengapa `/compact` paling mahal ketika Anda [melanjutkan sesi lama](/docs/id/sessions#resume-a-session). Baik dalam kondisi cache hangat maupun dingin, giliran setelah compaction membangun ulang cache percakapan hanya untuk ringkasan yang jauh lebih pendek, sehingga giliran itu bukan bagian yang lambat.

209 209 

210<Tip>210<Tip>

211 Compaction menguntungkan Anda ketika konteks yang Anda buang adalah konten yang tidak lagi Anda butuhkan. Untuk memilih kapan overhead-nya terjadi, jalankan `/compact` pada jeda alami dalam pekerjaan Anda, seperti di antara tugas, alih-alih menunggu auto-compaction terpicu di tengah tugas. Jika Anda telah menempuh jalur yang ingin Anda tinggalkan sepenuhnya, gunakan [`/rewind`](#rewinding-the-conversation) ke giliran sebelumnya sebagai gantinya. Rewind memotong kembali ke prefiks yang sudah di-cache, alih-alih membangun prefiks baru seperti yang dilakukan compaction.211 Compaction menguntungkan Anda ketika konteks yang Anda buang adalah konten yang tidak lagi Anda butuhkan. Untuk memilih kapan overhead-nya terjadi, jalankan `/compact` pada jeda alami dalam pekerjaan Anda, seperti di antara tugas, alih-alih menunggu auto-compaction terpicu di tengah tugas. Jika Anda telah menempuh jalur yang ingin Anda tinggalkan sepenuhnya, gunakan [`/rewind`](#rewinding-the-conversation) ke giliran sebelumnya sebagai gantinya. Rewind memotong kembali ke prefiks yang sudah di-cache, alih-alih membangun prefiks baru seperti yang dilakukan compaction.


310 310 

311Prefix yang di-cache kedaluwarsa setelah periode tidak aktif. Setiap permintaan yang mencapai cache mengatur ulang timer, jadi cache tetap hangat selama Anda terus bekerja. Setelah jeda yang cukup lama, permintaan berikutnya menghitung ulang input penuh dan membangun kembali cache, itulah mengapa giliran pertama kembali setelah menjauh dapat terasa jauh lebih lambat.311Prefix yang di-cache kedaluwarsa setelah periode tidak aktif. Setiap permintaan yang mencapai cache mengatur ulang timer, jadi cache tetap hangat selama Anda terus bekerja. Setelah jeda yang cukup lama, permintaan berikutnya menghitung ulang input penuh dan membangun kembali cache, itulah mengapa giliran pertama kembali setelah menjauh dapat terasa jauh lebih lambat.

312 312 

313Pada paket Pro atau Max, ketika Anda melanjutkan sesi besar setelah istirahat lama, Claude Code [menawarkan untuk melanjutkan dari ringkasan](/docs/id/sessions#resume-from-a-summary) sehingga permintaan nanti tidak membawa riwayat penuh.

314 

315Time to live (TTL) mengontrol berapa lama jeda yang cache bertahan. API menawarkan dua: TTL lima menit, dan [TTL satu jam](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#1-hour-cache-duration) yang menjaga cache tetap hangat melalui istirahat yang lebih lama tetapi [menagih penulisan cache dengan tarif lebih tinggi](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing). TTL yang lebih lama membantu ketika Anda meninggalkan sesi idle dan kembali ke sana, karena Anda melewati pemrosesan ulang yang dikenakan prefix yang kedaluwarsa. Ini lebih mahal pada ledakan pekerjaan singkat yang tidak pernah idle melampaui lima menit, di mana tarif penulisan yang lebih tinggi berlaku dan masa pakai cache yang lebih lama tidak digunakan.313Time to live (TTL) mengontrol berapa lama jeda yang cache bertahan. API menawarkan dua: TTL lima menit, dan [TTL satu jam](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#1-hour-cache-duration) yang menjaga cache tetap hangat melalui istirahat yang lebih lama tetapi [menagih penulisan cache dengan tarif lebih tinggi](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing). TTL yang lebih lama membantu ketika Anda meninggalkan sesi idle dan kembali ke sana, karena Anda melewati pemrosesan ulang yang dikenakan prefix yang kedaluwarsa. Ini lebih mahal pada ledakan pekerjaan singkat yang tidak pernah idle melampaui lima menit, di mana tarif penulisan yang lebih tinggi berlaku dan masa pakai cache yang lebih lama tidak digunakan.

316 314 

317<h3 id="which-ttl-each-request-gets">315<h3 id="which-ttl-each-request-gets">

sandboxing.md +14 −0

Details

1080* **`Command line arguments`**: jika Anda memulai Claude Code dengan [`--settings`](/docs/id/settings#change-a-setting-for-one-session), periksa apakah file atau JSON yang Anda berikan menetapkan salah satu kunci tersebut. Jika ya, ubah nilainya di sana, atau mulai Claude Code lagi tanpa kunci-kunci tersebut.1080* **`Command line arguments`**: jika Anda memulai Claude Code dengan [`--settings`](/docs/id/settings#change-a-setting-for-one-session), periksa apakah file atau JSON yang Anda berikan menetapkan salah satu kunci tersebut. Jika ya, ubah nilainya di sana, atau mulai Claude Code lagi tanpa kunci-kunci tersebut.

1081* **`Enterprise managed settings`**: pengaturan terkelola organisasi Anda dimuat. Jika pengaturan tersebut menetapkan salah satu kunci tersebut, Anda tidak dapat mengubah kunci itu dari `/sandbox` atau dari file pengaturan apa pun yang Anda kendalikan, jadi tanyakan kepada administrator Anda.1081* **`Enterprise managed settings`**: pengaturan terkelola organisasi Anda dimuat. Jika pengaturan tersebut menetapkan salah satu kunci tersebut, Anda tidak dapat mengubah kunci itu dari `/sandbox` atau dari file pengaturan apa pun yang Anda kendalikan, jadi tanyakan kepada administrator Anda.

1082 1082 

1083<h3 id="/sandbox-prints-sandbox-settings-not-changed">

1084 `/sandbox` mencetak `Sandbox settings not changed`

1085</h3>

1086 

1087Baris ini berarti `/sandbox` tidak dapat menyimpan pilihan yang Anda buat di panelnya ke `.claude/settings.local.json` proyek Anda:

1088 

1089```text theme={null}

1090✗ Sandbox settings not changed: /home/you/project/.claude/settings.local.json couldn't be updated (EACCES). Start Claude Code in a project folder you can write to.

1091```

1092 

1093Jika alasan dalam tanda kurung adalah `EACCES`, `EPERM`, atau `EROFS`, mulai Claude Code di folder proyek yang dapat Anda tulisi, lalu jalankan `/sandbox` lagi dalam sesi tersebut.

1094 

1095Jika alasannya diawali dengan `Invalid JSON syntax in settings file`, perbaiki JSON di `.claude/settings.local.json` proyek Anda, lalu jalankan `/sandbox` lagi.

1096 

1083<h2 id="limitations">1097<h2 id="limitations">

1084 Keterbatasan1098 Keterbatasan

1085</h2>1099</h2>

sessions.md +0 −14

Details

102* Proses tidak dimulai melalui [channel](/docs/id/channels)102* Proses tidak dimulai melalui [channel](/docs/id/channels)

103* Tidak ada [aturan penolakan](/docs/id/permissions#manage-permissions) yang menghapus tool `ExitPlanMode`103* Tidak ada [aturan penolakan](/docs/id/permissions#manage-permissions) yang menghapus tool `ExitPlanMode`

104 104 

105<h3 id="resume-from-a-summary">

106 Lanjutkan dari ringkasan

107</h3>

108 

109Pada paket Pro atau Max, ketika Anda melanjutkan sesi yang tidak aktif selama lebih dari sekitar satu jam dan lebih dari 100.000 token, Claude Code memulihkan percakapan dan kemudian membuka dialog sebelum Anda mengirim pesan pertama Anda. [Cache prompt](/docs/id/prompt-caching#cache-lifetime) sesi telah kedaluwarsa pada saat itu, sehingga permintaan berikutnya memproses riwayat lengkap sekali tidak peduli opsi dialog mana yang Anda pilih.

110 

111Dialog menawarkan tiga cara untuk melanjutkan sesi:

112 

113* **Resume from summary**: menjalankan [`/compact`](/docs/id/context-window#what-survives-compaction) segera. Permintaan nanti membawa ringkasan daripada riwayat lengkap.

114* **Resume full session as-is**: memuat percakapan tanpa perubahan.

115* **Don't ask me again**: melanjutkan sesi penuh dan berhenti menampilkan dialog pada semua lanjutan masa depan.

116 

117Melanjutkan apa adanya menyimpan setiap detail percakapan yang tersedia, dengan biaya per permintaan yang diskalakan dengan ukuran percakapan. Melanjutkan dari ringkasan biaya lebih sedikit pada setiap permintaan nanti karena membawa ringkasan daripada riwayat lengkap, tetapi apa pun yang ditinggalkan ringkasan tidak lagi dalam konteks Claude. Lihat [mengapa penggunaan meningkat dalam sesi panjang](/docs/id/costs#why-usage-climbs-in-a-long-session) untuk tempat biaya per permintaan itu berasal.

118 

119<h3 id="where-the-session-picker-looks">105<h3 id="where-the-session-picker-looks">

120 Tempat pemilih sesi mencari106 Tempat pemilih sesi mencari

121</h3>107</h3>

sub-agents.md +17 −5

Details

316| `name` | Ya | Pengenal unik dengan paling banyak 256 karakter, seperti `code-reviewer` atau `reviewer-v2`. [Hooks](/docs/id/hooks#subagentstart) menerima nilai ini sebagai `agent_type`. Nama file tidak harus cocok. Nama tidak dapat berisi `:`, yang dicadangkan untuk [plugin-scoped identifiers](/docs/id/plugins/overview) seperti `my-plugin:reviewer` |316| `name` | Ya | Pengenal unik dengan paling banyak 256 karakter, seperti `code-reviewer` atau `reviewer-v2`. [Hooks](/docs/id/hooks#subagentstart) menerima nilai ini sebagai `agent_type`. Nama file tidak harus cocok. Nama tidak dapat berisi `:`, yang dicadangkan untuk [plugin-scoped identifiers](/docs/id/plugins/overview) seperti `my-plugin:reviewer` |

317| `description` | Ya | Kapan Claude harus mendelegasikan ke subagent ini |317| `description` | Ya | Kapan Claude harus mendelegasikan ke subagent ini |

318| `tools` | Tidak | [Tools](#available-tools) yang dapat digunakan subagent, sebagai string yang dipisahkan koma seperti `Read, Grep, Bash` atau daftar YAML. Mewarisi setiap tool yang tersedia untuk subagent jika dihilangkan. Jika tidak ada entri dalam daftar yang diselesaikan ke tool, subagent biasanya [gagal diluncurkan](/docs/id/errors#agent-would-be-spawned-with-zero-tools) dengan kesalahan yang menamai entri. Untuk memuat Skills ke dalam konteks, gunakan field `skills` daripada mencantumkan `Skill` di sini |318| `tools` | Tidak | [Tools](#available-tools) yang dapat digunakan subagent, sebagai string yang dipisahkan koma seperti `Read, Grep, Bash` atau daftar YAML. Mewarisi setiap tool yang tersedia untuk subagent jika dihilangkan. Jika tidak ada entri dalam daftar yang diselesaikan ke tool, subagent biasanya [gagal diluncurkan](/docs/id/errors#agent-would-be-spawned-with-zero-tools) dengan kesalahan yang menamai entri. Untuk memuat Skills ke dalam konteks, gunakan field `skills` daripada mencantumkan `Skill` di sini |

319| `disallowedTools` | Tidak | Tools untuk ditolak, dihapus dari daftar yang diwarisi atau ditentukan. Format yang sama seperti `tools`. Entri dengan specifier, seperti `Bash(git push *)`, masih [menghapus seluruh tool](#available-tools) |319| `disallowedTools` | Tidak | Tools untuk ditolak, dihapus dari daftar yang diwarisi atau ditentukan. Format yang sama seperti `tools`. Entri dengan specifier, seperti `Bash(git push *)`, masih [menghapus seluruh tool](#restrict-which-tools-a-subagent-can-use) |

320| `model` | Tidak | [Model](#choose-a-model) untuk digunakan: `sonnet`, `opus`, `haiku`, `fable`, ID model lengkap seperti `claude-opus-5-5`, atau `inherit`. Ketika Anda menghilangkannya, Claude Code memilih model dalam [subagent model order](#choose-a-model) |320| `model` | Tidak | [Model](#choose-a-model) untuk digunakan: `sonnet`, `opus`, `haiku`, `fable`, ID model lengkap seperti `claude-opus-5-5`, atau `inherit`. Ketika Anda menghilangkannya, Claude Code memilih model dalam [subagent model order](#choose-a-model) |

321| `permissionMode` | Tidak | [Mode izin](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, `plan`, atau `manual` sebagai alias untuk `default`. Diabaikan untuk [plugin subagents](#choose-the-subagent-scope) |321| `permissionMode` | Tidak | [Mode izin](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions`, `plan`, atau `manual` sebagai alias untuk `default`. Diabaikan untuk [plugin subagents](#choose-the-subagent-scope) |

322| `maxTurns` | Tidak | Jumlah maksimum giliran agentic sebelum subagent berhenti. Ketika subagent mencapai batas, Claude Code mengembalikan output-nya ditandai sebagai parsial, dan Claude dapat [melanjutkannya](#resume-subagents) untuk terus. Penandaan parsial memerlukan Claude Code v2.1.246 atau lebih baru |322| `maxTurns` | Tidak | Jumlah maksimum giliran agentic sebelum subagent berhenti. Ketika subagent mencapai batas, Claude Code mengembalikan output-nya ditandai sebagai parsial, dan Claude dapat [melanjutkannya](#resume-subagents) untuk terus. Penandaan parsial memerlukan Claude Code v2.1.246 atau lebih baru |


475 475 

476Dalam [sesi tanpa Task tools](/docs/id/tools-reference#task-tool-availability), Claude Code tidak menyediakan task tools ke subagent juga, bahkan ketika subagent menjalankan model berbeda. Teammate in-process mengikuti sesi Anda dengan cara yang sama, sementara teammate dalam [split pane](/docs/id/agent-teams#choose-a-display-mode) miliknya sendiri berjalan sebagai proses Claude Code terpisah, jadi modelnya sendiri yang memutuskan.476Dalam [sesi tanpa Task tools](/docs/id/tools-reference#task-tool-availability), Claude Code tidak menyediakan task tools ke subagent juga, bahkan ketika subagent menjalankan model berbeda. Teammate in-process mengikuti sesi Anda dengan cara yang sama, sementara teammate dalam [split pane](/docs/id/agent-teams#choose-a-display-mode) miliknya sendiri berjalan sebagai proses Claude Code terpisah, jadi modelnya sendiri yang memutuskan.

477 477 

478Untuk membatasi tool, gunakan field `tools` sebagai allowlist atau field `disallowedTools` sebagai denylist. Contoh ini menggunakan `tools` untuk hanya mengizinkan Read, Grep, Glob, dan Bash. Subagent tidak dapat mengedit file, menulis file, atau menggunakan tool MCP apa pun:478<h4 id="restrict-which-tools-a-subagent-can-use">

479 Batasi tool mana yang dapat digunakan subagent

480</h4>

481 

482Untuk membatasi tool, gunakan field `tools` sebagai allowlist atau field `disallowedTools` sebagai denylist. Jika keduanya diatur, `disallowedTools` diterapkan terlebih dahulu, kemudian `tools` diselesaikan terhadap pool yang tersisa. Tool yang tercantum di keduanya dihapus.

483 

484Contoh ini menggunakan `tools` untuk hanya mengizinkan Read, Grep, Glob, dan Bash. Subagent tidak dapat mengedit file, menulis file, atau menggunakan tool MCP apa pun:

479 485 

480```yaml theme={null}486```yaml theme={null}

481---487---


495---501---

496```502```

497 503 

498Jika keduanya diatur, `disallowedTools` diterapkan terlebih dahulu, kemudian `tools` diselesaikan terhadap pool yang tersisa. Tool yang tercantum di keduanya dihapus.

499 

500Ketika tidak ada dalam daftar `tools` yang diselesaikan ke tool, misalnya karena setiap entri salah eja atau menamai tool yang tidak tersedia untuk subagent, Claude Code biasanya menolak untuk meluncurkan subagent dan tool Agent mengembalikan kesalahan yang menamai entri yang tidak diselesaikan; lihat [Agent would be spawned with zero tools](/docs/id/errors#agent-would-be-spawned-with-zero-tools) untuk pesan dan cara memperbaiki setiap entri. Sebelum v2.1.208, subagent itu diluncurkan tanpa tool dan dapat mengembalikan hasil kosong atau membingungkan.504Ketika tidak ada dalam daftar `tools` yang diselesaikan ke tool, misalnya karena setiap entri salah eja atau menamai tool yang tidak tersedia untuk subagent, Claude Code biasanya menolak untuk meluncurkan subagent dan tool Agent mengembalikan kesalahan yang menamai entri yang tidak diselesaikan; lihat [Agent would be spawned with zero tools](/docs/id/errors#agent-would-be-spawned-with-zero-tools) untuk pesan dan cara memperbaiki setiap entri. Sebelum v2.1.208, subagent itu diluncurkan tanpa tool dan dapat mengembalikan hasil kosong atau membingungkan.

501 505 

502Kedua field menerima pola tingkat server MCP sebagai tambahan untuk nama tool yang tepat: `mcp__<server>` atau `mcp__<server>__*` memberikan atau menghapus setiap tool dari server yang dinamai. Dalam `disallowedTools`, `mcp__*` juga menghapus setiap tool MCP dari server apa pun. Contoh ini menghapus setiap tool dari server MCP `github` sambil menyimpan tool dari server lain dan tool bawaan dalam pool-nya:506Field `tools` dan `disallowedTools` juga menerima entri untuk seluruh server MCP:

507 

508| Tujuan | Field | Contoh entri |

509| :- | :- | :- |

510| Berikan subagent setiap tool dari satu server | `tools` | `mcp__github__*` |

511| Tahan tool dari satu server | `disallowedTools` | `mcp__github` atau `mcp__github__*` |

512| Tahan setiap tool MCP dari server mana pun | `disallowedTools` | `mcp__*` |

513 

514Contoh ini menghapus setiap tool dari server MCP `github` sambil menyimpan tool dari server lain dan tool bawaan dalam pool tool subagent:

503 515 

504```yaml theme={null}516```yaml theme={null}

505---517---