SpyBara
Go Premium

Documentation 2026-10-09 23:02 UTC to 2026-10-10 22:01 UTC

69 files changed +1,166 −353. View all changes and history on the product overview
2026
Sat 10 22: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

187 187 

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

189 189 

190* **`allowed_tools` / `allowedTools`** auto-approves tools yang terdaftar. Agent read-only dengan `["Read", "Glob", "Grep"]` dalam daftar allowed tools-nya menjalankan tools tersebut tanpa prompting. Tools yang tidak terdaftar masih tersedia, dan panggilan ke tools tersebut yang memerlukan approval jatuh melalui permission mode dan `canUseTool`.190* **`allowed_tools` / `allowedTools`** auto-approves tools yang terdaftar. Agent read-only dengan `["Read", "Glob", "Grep"]` dalam daftar allowed tools-nya menjalankan tools tersebut tanpa prompting, kecuali pembacaan dari [network paths](/docs/id/permissions#network-paths). Tools yang tidak terdaftar masih tersedia, dan panggilan ke tools tersebut yang memerlukan approval jatuh melalui permission mode dan `canUseTool`.

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

192* **`permission_mode` / `permissionMode`** mengontrol berapa banyak pengawasan manusia yang Anda inginkan. SDK mengevaluasi mode aktif bersama dengan aturan allow dan deny Anda dalam urutan tetap, dijelaskan dalam [How permissions are evaluated](/docs/id/agent-sdk/permissions#how-permissions-are-evaluated). Lihat [Permission mode](#permission-mode) untuk mode yang tersedia.192* **`permission_mode` / `permissionMode`** mengontrol berapa banyak pengawasan manusia yang Anda inginkan. SDK mengevaluasi mode aktif bersama dengan aturan allow dan deny Anda dalam urutan tetap, dijelaskan dalam [How permissions are evaluated](/docs/id/agent-sdk/permissions#how-permissions-are-evaluated). Lihat [Permission mode](#permission-mode) untuk mode yang tersedia.

193 193 


263| `"default"` | Tool calls yang memerlukan approval dan tidak tercakup oleh allow rules memicu `canUseTool` callback Anda; tidak ada callback berarti deny | Interactive applications dengan custom approval callback |263| `"default"` | Tool calls yang memerlukan approval dan tidak tercakup oleh allow rules memicu `canUseTool` callback Anda; tidak ada callback berarti deny | Interactive applications dengan custom approval callback |

264| `"acceptEdits"` | Auto-approves file edits dan common filesystem commands (`mkdir`, `touch`, `mv`, `cp`, dll.); Bash commands lainnya mengikuti default rules | Anda mempercayai edits Claude dan menginginkan iterasi lebih cepat, seperti selama prototyping atau saat bekerja dalam isolated directory |264| `"acceptEdits"` | Auto-approves file edits dan common filesystem commands (`mkdir`, `touch`, `mv`, `cp`, dll.); Bash commands lainnya mengikuti default rules | Anda mempercayai edits Claude dan menginginkan iterasi lebih cepat, seperti selama prototyping atau saat bekerja dalam isolated directory |

265| `"plan"` | Claude mengeksplorasi dan merencanakan tanpa mengedit source files Anda; file edits tidak pernah auto-approved dan prompt melalui `canUseTool` callback Anda | Anda menginginkan Claude untuk mengusulkan changes tanpa mengeksekusinya, seperti selama code review atau ketika Anda perlu approve changes sebelum dibuat |265| `"plan"` | Claude mengeksplorasi dan merencanakan tanpa mengedit source files Anda; file edits tidak pernah auto-approved dan prompt melalui `canUseTool` callback Anda | Anda menginginkan Claude untuk mengusulkan changes tanpa mengeksekusinya, seperti selama code review atau ketika Anda perlu approve changes sebelum dibuat |

266| `"dontAsk"` | Tidak pernah prompt. Tools pre-approved oleh [permission rules](/docs/id/settings-reference#permission-settings) berjalan, dan begitu juga calls yang tidak memerlukan approval dalam mode `default`, seperti file reads di dalam working directories Anda; setiap call yang sebaliknya akan prompt ditolak. `AskUserQuestion`, connector tools [organisasi Anda set ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools), dan MCP tools yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool) ditolak bahkan jika Anda telah mengizinkannya | Anda menginginkan fixed, explicit tool surface untuk headless agent dan lebih memilih hard deny daripada silent reliance pada `canUseTool` yang absent |266| `"dontAsk"` | Tidak pernah prompt. Tools pre-approved oleh [permission rules](/docs/id/settings-reference#permission-settings) berjalan, dan begitu juga calls yang tidak memerlukan approval dalam mode `default`, seperti file reads di dalam working directories Anda; setiap call yang sebaliknya akan prompt ditolak. `AskUserQuestion`, connector tools [organisasi Anda set ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools), MCP tools yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool), dan [pembacaan dari network paths](/docs/id/permissions#network-paths) ditolak bahkan jika Anda telah mengizinkannya | Anda menginginkan fixed, explicit tool surface untuk headless agent dan lebih memilih hard deny daripada silent reliance pada `canUseTool` yang absent |

267| `"auto"` | Menggunakan model classifier untuk review actions seperti shell commands dan network requests, allowing atau blocking masing-masing yang direview. Lihat [Auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) untuk availability dan decision order | Autonomous agents yang masih menginginkan safety guardrails pada tool use |267| `"auto"` | Menggunakan model classifier untuk review actions seperti shell commands dan network requests, allowing atau blocking masing-masing yang direview. Lihat [Auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) untuk availability dan decision order | Autonomous agents yang masih menginginkan safety guardrails pada tool use |

268| `"bypassPermissions"` | Menjalankan semua allowed tools tanpa bertanya, kecuali tools yang cocok dengan explicit [`ask` rule](/docs/id/settings-reference#permission-settings), connector tools [organisasi Anda set ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools), dan tools yang memerlukan user interaction. [Cross-session messaging safeguards](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) masih berlaku. Lihat [How permissions are evaluated](/docs/id/agent-sdk/permissions#how-permissions-are-evaluated) untuk urutan precedence. Dalam TypeScript SDK, juga memerlukan `allowDangerouslySkipPermissions: true` dalam `options`. Tidak dapat digunakan saat berjalan sebagai root pada Unix. Gunakan hanya dalam isolated environments di mana tindakan agent tidak dapat mempengaruhi systems yang Anda pedulikan | CI, containers, atau isolated environments lainnya |268| `"bypassPermissions"` | Menjalankan semua allowed tools tanpa bertanya, kecuali tools yang cocok dengan explicit [`ask` rule](/docs/id/settings-reference#permission-settings), connector tools [organisasi Anda set ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools), dan tools yang memerlukan user interaction. [Cross-session messaging safeguards](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) masih berlaku. Lihat [How permissions are evaluated](/docs/id/agent-sdk/permissions#how-permissions-are-evaluated) untuk urutan precedence. Dalam TypeScript SDK, juga memerlukan `allowDangerouslySkipPermissions: true` dalam `options`. Tidak dapat digunakan saat berjalan sebagai root pada Unix. Gunakan hanya dalam isolated environments di mana tindakan agent tidak dapat mempengaruhi systems yang Anda pedulikan | CI, containers, atau isolated environments lainnya |

269 269 

Details

424 Auto-approve tools spesifik424 Auto-approve tools spesifik

425</h3>425</h3>

426 426 

427Secara default, agent dapat meminta permission sebelum menggunakan tools tertentu. Contoh ini auto-approves read-only filesystem tools (Read, Glob, Grep) dengan mengembalikan `permissionDecision: 'allow'`, membiarkan mereka berjalan tanpa konfirmasi pengguna sambil meninggalkan semua tools lainnya tunduk pada pemeriksaan permission normal:427Secara default, agent dapat meminta permission sebelum menggunakan tools tertentu. Contoh ini melakukan auto-approve pada tool filesystem read-only (Read, Glob, Grep) dengan mengembalikan `permissionDecision: 'allow'`, membiarkannya berjalan tanpa konfirmasi pengguna, kecuali pembacaan dari [jalur jaringan](/docs/id/permissions#network-paths), sambil tetap membiarkan semua tool lainnya tunduk pada pemeriksaan izin normal:

428 428 

429<CodeGroup>429<CodeGroup>

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

Details

44 Periksa aturan `allow` (dari `allowed_tools` dan settings.json). Jika aturan cocok, alat disetujui. Panggilan yang alat setujui sendiri juga diselesaikan pada langkah ini, tanpa aturan yang diperlukan: misalnya pembacaan file di dalam direktori kerja Anda atau [perintah Bash read-only](/docs/id/permissions#read-only-commands).44 Periksa aturan `allow` (dari `allowed_tools` dan settings.json). Jika aturan cocok, alat disetujui. Panggilan yang alat setujui sendiri juga diselesaikan pada langkah ini, tanpa aturan yang diperlukan: misalnya pembacaan file di dalam direktori kerja Anda atau [perintah Bash read-only](/docs/id/permissions#read-only-commands).

45 45 

46 Penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](/docs/id/permission-modes#critical-paths) tidak pernah disetujui oleh aturan allow. Apakah mereka kemudian mencapai callback Anda tergantung pada mode izin: dalam sesi Agent SDK dalam mode `auto`, misalnya, Claude Code menolaknya secara default tanpa memanggilnya. Tabel mode [Critical paths](/docs/id/permission-modes#critical-paths) mencantumkan apa yang dilakukan setiap mode dengan mereka.46 Penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](/docs/id/permission-modes#critical-paths) tidak pernah disetujui oleh aturan allow. Apakah mereka kemudian mencapai callback Anda tergantung pada mode izin: dalam sesi Agent SDK dalam mode `auto`, misalnya, Claude Code menolaknya secara default tanpa memanggilnya. Tabel mode [Critical paths](/docs/id/permission-modes#critical-paths) mencantumkan apa yang dilakukan setiap mode dengan mereka.

47 

48 Aturan allow tidak menyetujui pembacaan dari [jalur jaringan](/docs/id/permissions#network-paths).

47 </Step>49 </Step>

48 50 

49 <Step title="canUseTool callback">51 <Step title="canUseTool callback">

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

51 53 

52 Dalam SDK TypeScript, jika Anda menetapkan [`permissionPrompts: 'none'`](/docs/id/agent-sdk/typescript#options), callback Anda tidak dipanggil pada langkah ini. Hook [`PermissionRequest`](/docs/id/hooks#permissionrequest) masih mendapat kesempatan untuk memutuskan, dan jika tidak, Claude Code menolak panggilan. Opsi memerlukan Claude Code v2.1.259 atau lebih baru.54 Dalam SDK TypeScript, jika Anda menetapkan [`permissionPrompts: 'none'`](/docs/id/agent-sdk/typescript#options), callback Anda tidak dipanggil pada langkah ini. Hook [`PermissionRequest`](/docs/id/hooks#permissionrequest) masih mendapat kesempatan untuk memutuskan, dan jika tidak, Claude Code menolak panggilan. Opsi memerlukan Claude Code v2.1.259 atau lebih baru.

53 </Step>55 </Step>


60Jika Anda meneruskan callback `canUseTool` dalam konfigurasi di mana SDK TypeScript mengharapkan urutan evaluasi untuk menyetujui panggilan secara otomatis sebelum callback dikonsultasikan, SDK memancarkan peringatan proses Node.js sekali ketika kueri dibangun. Kode peringatan adalah `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`. Dua konfigurasi memicunya:62Jika Anda meneruskan callback `canUseTool` dalam konfigurasi di mana SDK TypeScript mengharapkan urutan evaluasi untuk menyetujui panggilan secara otomatis sebelum callback dikonsultasikan, SDK memancarkan peringatan proses Node.js sekali ketika kueri dibangun. Kode peringatan adalah `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`. Dua konfigurasi memicunya:

61 63 

62* `permissionMode: 'bypassPermissions'`, yang menyetujui setiap panggilan yang mencapai langkah mode izin terlepas dari [tindakan yang tidak ada mode auto-approve](/docs/id/permission-modes#actions-no-mode-auto-approves)64* `permissionMode: 'bypassPermissions'`, yang menyetujui setiap panggilan yang mencapai langkah mode izin terlepas dari [tindakan yang tidak ada mode auto-approve](/docs/id/permission-modes#actions-no-mode-auto-approves)

63* Setiap entri `allowedTools` bare seperti `"Read"`, yang menyetujui seluruh alat itu sebelum callback dikonsultasikan, terlepas dari [tindakan yang tidak ada mode auto-approve](/docs/id/permission-modes#actions-no-mode-auto-approves)65* Setiap entri `allowedTools` bare seperti `"Read"`, yang menyetujui seluruh tool itu sebelum callback dikonsultasikan, terlepas dari [tindakan yang tidak ada mode auto-approve](/docs/id/permission-modes#actions-no-mode-auto-approves) dan [pembacaan dari jalur jaringan](/docs/id/permissions#network-paths)

64 66 

65Entri dengan spesifier seperti `Bash(ls *)` dan mode `acceptEdits` tidak memicunya, dan aturan allow yang berasal dari file pengaturan tidak terlihat oleh pemeriksaan.67Entri dengan spesifier seperti `Bash(ls *)` dan mode `acceptEdits` tidak memicunya, dan aturan allow yang berasal dari file pengaturan tidak terlihat oleh pemeriksaan.

66 68 


79 81 

80| Opsi | Efek |82| Opsi | Efek |

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

82| `allowed_tools=["Read", "Grep"]` | `Read` dan `Grep` disetujui secara otomatis. Alat lain yang tidak tercantum di sini masih ada, dan panggilan ke alat tersebut yang memerlukan persetujuan jatuh melalui mode izin dan `canUseTool`. |84| `allowed_tools=["Read", "Grep"]` | `Read` dan `Grep` disetujui secara otomatis, kecuali [pembacaan dari jalur jaringan](/docs/id/permissions#network-paths). Tool lain yang tidak tercantum di sini masih ada, dan panggilan ke tool tersebut yang memerlukan persetujuan diteruskan ke mode izin dan `canUseTool`. |

83| `disallowed_tools=["Bash"]` | Definisi alat `Bash` dihapus dari permintaan. Claude tidak melihat alat dan tidak dapat mencobanya. |85| `disallowed_tools=["Bash"]` | Definisi alat `Bash` dihapus dari permintaan. Claude tidak melihat alat dan tidak dapat mencobanya. |

84| `disallowed_tools=["Bash(rm *)"]` | `Bash` tetap tersedia. Panggilan yang cocok dengan `rm *` [seperti yang ditulis](/docs/id/permissions#bash-rule-limits) ditolak dalam setiap mode izin, termasuk `bypassPermissions`. Panggilan `Bash` lainnya, termasuk `/bin/rm`, jatuh melalui mode izin. |86| `disallowed_tools=["Bash(rm *)"]` | `Bash` tetap tersedia. Panggilan yang cocok dengan `rm *` [seperti yang ditulis](/docs/id/permissions#bash-rule-limits) ditolak dalam setiap mode izin, termasuk `bypassPermissions`. Panggilan `Bash` lainnya, termasuk `/bin/rm`, jatuh melalui mode izin. |

85| `disallowed_tools=["*"]` | Setiap definisi alat dihapus dari permintaan. Glob nama alat didukung dalam aturan penolakan: `"*"` cocok dengan setiap alat dan `"mcp__*"` cocok dengan setiap alat MCP di semua server. |87| `disallowed_tools=["*"]` | Setiap definisi alat dihapus dari permintaan. Glob nama alat didukung dalam aturan penolakan: `"*"` cocok dengan setiap alat dan `"mcp__*"` cocok dengan setiap alat MCP di semua server. |


95 97 

96 Aturan izin tidak pernah menyetujui secara otomatis `AskUserQuestion`, alat MCP yang ditandai [`_meta["anthropic/requiresUserInteraction"]`](/docs/id/mcp#require-approval-for-a-specific-tool), alat konektor [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools), atau penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](/docs/id/permission-modes#critical-paths). Dalam mode `dontAsk` Claude Code menolak panggilan ini tanpa memanggil callback. Dalam mode lain tiga yang pertama mencapai callback. Tergantung pada [mode izin](/docs/id/permission-modes#critical-paths), penghapusan jalur kritis mencapai callback juga atau Claude Code menolaknya tanpa memanggilnya, seperti yang dilakukannya secara default untuk sesi Agent SDK dalam mode `auto`.98 Aturan izin tidak pernah menyetujui secara otomatis `AskUserQuestion`, alat MCP yang ditandai [`_meta["anthropic/requiresUserInteraction"]`](/docs/id/mcp#require-approval-for-a-specific-tool), alat konektor [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools), atau penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](/docs/id/permission-modes#critical-paths). Dalam mode `dontAsk` Claude Code menolak panggilan ini tanpa memanggil callback. Dalam mode lain tiga yang pertama mencapai callback. Tergantung pada [mode izin](/docs/id/permission-modes#critical-paths), penghapusan jalur kritis mencapai callback juga atau Claude Code menolaknya tanpa memanggilnya, seperti yang dilakukannya secara default untuk sesi Agent SDK dalam mode `auto`.

97 99 

98 Cakupan tergantung pada bentuk entri: nama telanjang seperti `Read` atau `mcp__github__get_issue` menyetujui setiap panggilan ke alat tersebut terlepas dari pengecualian di atas, sementara aturan berskop seperti `Bash(npm test *)` hanya menyetujui panggilan yang cocok, dan panggilan `Bash` lainnya yang memerlukan persetujuan masih jatuh melalui callback. Untuk pemeriksaan yang harus berjalan pada setiap panggilan alat, gunakan [hook `PreToolUse`](/docs/id/agent-sdk/hooks): hook berjalan sebelum setiap langkah lainnya, dan penolakan hook bahkan berlaku dalam mode `bypassPermissions`.100 Cakupan tergantung pada bentuk entri: nama polos seperti `Read` atau `mcp__github__get_issue` menyetujui secara otomatis setiap panggilan ke tool tersebut kecuali pengecualian di atas dan [pembacaan dari jalur jaringan](/docs/id/permissions#network-paths), sementara aturan bercakupan seperti `Bash(npm test *)` hanya menyetujui secara otomatis panggilan yang cocok, dan panggilan `Bash` lainnya yang memerlukan persetujuan tetap diteruskan ke callback. Untuk pemeriksaan yang harus berjalan pada setiap panggilan tool, gunakan [hook `PreToolUse`](/docs/id/agent-sdk/hooks): hook berjalan sebelum setiap langkah lainnya, dan penolakan hook tetap berlaku bahkan dalam mode `bypassPermissions`.

99</Warning>101</Warning>

100 102 

101Untuk agen yang terkunci, pasangkan `allowedTools` dengan `permissionMode: "dontAsk"`:103Untuk agen yang terkunci, pasangkan `allowedTools` dengan `permissionMode: "dontAsk"`:


107};109};

108```110```

109 111 

110Alat yang tercantum disetujui, terlepas dari [tindakan yang tidak ada mode auto-approve](/docs/id/permission-modes#actions-no-mode-auto-approves), dan setiap panggilan lain yang akan meminta ditolak sebagai gantinya. Panggilan yang tidak memerlukan persetujuan dalam mode `default` berjalan apakah atau tidak Anda mencantumnya, seperti [perintah Bash hanya-baca](/docs/id/permissions#read-only-commands), alat seperti `Agent` yang tidak bertanya sebelum menjalankan, dan pembacaan file di dalam direktori kerja Anda. Untuk menempatkan alat di luar jangkauan Claude sepenuhnya, tambahkan nama telanjangnya ke `disallowedTools`.112Tool yang tercantum disetujui, kecuali [tindakan yang tidak disetujui otomatis oleh mode mana pun](/docs/id/permission-modes#actions-no-mode-auto-approves) dan [pembacaan dari jalur jaringan](/docs/id/permissions#network-paths), dan setiap panggilan lain yang akan memunculkan permintaan izin justru ditolak. Panggilan yang tidak memerlukan persetujuan dalam mode `default` tetap berjalan baik Anda mencantumkannya atau tidak, seperti [perintah Bash read-only](/docs/id/permissions#read-only-commands), tool seperti `Agent` yang tidak meminta persetujuan sebelum berjalan, dan pembacaan file di dalam direktori kerja Anda. Untuk menghapus tool sepenuhnya dari permintaan, tambahkan nama polosnya ke `disallowedTools`.

111 113 

112<Warning>114<Warning>

113 **`allowed_tools` tidak membatasi `bypassPermissions`.** `allowed_tools` pra-menyetujui alat yang Anda cantumkan. Alat unlisted lainnya tidak cocok dengan aturan izin apa pun dan jatuh melalui mode izin, di mana `bypassPermissions` menyetujuinya. Mengatur `allowed_tools=["Read"]` bersama dengan `permission_mode="bypassPermissions"` masih menyetujui setiap alat, termasuk `Bash`, `Write`, dan `Edit`. Jika Anda memerlukan `bypassPermissions` tetapi menginginkan alat spesifik diblokir, gunakan `disallowed_tools`.115 **`allowed_tools` tidak membatasi `bypassPermissions`.** `allowed_tools` pra-menyetujui alat yang Anda cantumkan. Alat unlisted lainnya tidak cocok dengan aturan izin apa pun dan jatuh melalui mode izin, di mana `bypassPermissions` menyetujuinya. Mengatur `allowed_tools=["Read"]` bersama dengan `permission_mode="bypassPermissions"` masih menyetujui setiap alat, termasuk `Bash`, `Write`, dan `Edit`. Jika Anda memerlukan `bypassPermissions` tetapi menginginkan alat spesifik diblokir, gunakan `disallowed_tools`.


139| Mode | Deskripsi | Perilaku Tool |141| Mode | Deskripsi | Perilaku Tool |

140| :- | :- | :- |142| :- | :- | :- |

141| `default` | Perilaku izin standar | Tidak ada persetujuan otomatis berbasis mode; panggilan yang memerlukan persetujuan dan tidak cocok dengan aturan izin memicu callback `canUseTool` Anda |143| `default` | Perilaku izin standar | Tidak ada persetujuan otomatis berbasis mode; panggilan yang memerlukan persetujuan dan tidak cocok dengan aturan izin memicu callback `canUseTool` Anda |

142| `dontAsk` | Tolak alih-alih meminta | Setiap panggilan yang sebaliknya akan meminta ditolak. Panggilan yang disetujui oleh `allowed_tools` atau aturan berjalan, begitu juga panggilan yang tidak memerlukan persetujuan dalam mode `default`, seperti pembacaan file di dalam direktori kerja Anda dan panggilan ke `Agent`. Connector tools [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dan tools yang memerlukan interaksi pengguna ditolak bahkan jika Anda telah menyetujuinya sebelumnya, begitu juga penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](/docs/id/permission-modes#critical-paths). `canUseTool` tidak pernah dipanggil |144| `dontAsk` | Tolak alih-alih meminta | Setiap panggilan yang sebaliknya akan meminta ditolak. Panggilan yang disetujui oleh `allowed_tools` atau aturan berjalan, begitu juga panggilan yang tidak memerlukan persetujuan dalam mode `default`; connector tools [yang diatur organisasi Anda ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dan tools yang memerlukan interaksi pengguna ditolak bahkan jika Anda telah menyetujuinya sebelumnya, begitu juga [pembacaan dari jalur jaringan](/docs/id/permissions#network-paths) serta penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](/docs/id/permission-modes#critical-paths). `canUseTool` tidak pernah dipanggil |

143| `acceptEdits` | Terima otomatis pengeditan file | Pengeditan file dan [operasi sistem file](#accept-edits-mode-acceptedits) (`mkdir`, `rm`, `mv`, dll.) secara otomatis disetujui |145| `acceptEdits` | Terima otomatis pengeditan file | Pengeditan file dan [operasi sistem file](#accept-edits-mode-acceptedits) (`mkdir`, `rm`, `mv`, dll.) secara otomatis disetujui |

144| `bypassPermissions` | Lewati pemeriksaan izin | Tools berjalan tanpa prompt izin, kecuali untuk [tindakan yang tidak ada mode auto-approve](/docs/id/permission-modes#actions-no-mode-auto-approves). Gunakan dengan hati-hati |146| `bypassPermissions` | Lewati pemeriksaan izin | Tools berjalan tanpa prompt izin, kecuali untuk [tindakan yang tidak ada mode auto-approve](/docs/id/permission-modes#actions-no-mode-auto-approves). Gunakan dengan hati-hati |

145| `plan` | Mode perencanaan | Claude menjelajahi dan merencanakan tanpa mengedit file sumber Anda; pengeditan file tidak pernah auto-approved dan meminta melalui callback `canUseTool` Anda |147| `plan` | Mode perencanaan | Claude menjelajahi dan merencanakan tanpa mengedit file sumber Anda; pengeditan file tidak pernah auto-approved dan meminta melalui callback `canUseTool` Anda |


286 Mode jangan tanya (`dontAsk`)288 Mode jangan tanya (`dontAsk`)

287</h4>289</h4>

288 290 

289Mengonversi prompt izin apa pun menjadi penolakan, tanpa memanggil `canUseTool`. Tools yang disetujui sebelumnya oleh `allowed_tools`, aturan izin `settings.json`, atau hook berjalan seperti biasa, begitu juga panggilan yang tidak memerlukan persetujuan dalam mode `default`, seperti pembacaan file di dalam direktori kerja Anda dan panggilan ke `Agent`. Connector tools [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools), tools yang memerlukan interaksi pengguna, dan penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](/docs/id/permission-modes#critical-paths) ditolak bahkan ketika aturan izin cocok. Hook allow `PreToolUse` juga tidak menghapus penghapusan jalur kritis.291Mengonversi prompt izin apa pun menjadi penolakan, tanpa memanggil `canUseTool`. Tools yang disetujui sebelumnya oleh `allowed_tools`, aturan allow `settings.json`, atau hook berjalan seperti biasa, begitu juga panggilan yang tidak memerlukan persetujuan dalam mode `default`, seperti pembacaan file di dalam direktori kerja Anda dan panggilan ke `Agent`. Connector tools [yang diatur organisasi Anda ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools), tools yang memerlukan interaksi pengguna, [pembacaan dari jalur jaringan](/docs/id/permissions#network-paths), serta penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](/docs/id/permission-modes#critical-paths) ditolak bahkan ketika aturan allow cocok. Hook allow `PreToolUse` juga tidak meloloskan penghapusan jalur kritis maupun pembacaan dari jalur jaringan.

290 292 

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

292 294 

Details

518 print(session.summary)518 print(session.summary)

519```519```

520 520 

521<h3 id="fork_session">

522 `fork_session()`

523</h3>

524 

525Menyalin transkrip sesi ke dalam sesi baru sehingga Anda dapat membawa percakapan ke arah lain sementara sesi asli tetap tidak berubah. Untuk bercabang dari titik sebelumnya dalam percakapan, teruskan `up_to_message_id`. Sinkron.

526 

527```python theme={null}

528def fork_session(

529 session_id: str,

530 directory: str | None = None,

531 up_to_message_id: str | None = None,

532 title: str | None = None,

533) -> ForkSessionResult

534```

535 

536<h4 id="parameters-9">

537 Parameter

538</h4>

539 

540| Parameter | Tipe | Default | Deskripsi |

541| :- | :- | :- | :- |

542| `session_id` | `str` | diperlukan | UUID sesi yang akan di-fork |

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

544| `up_to_message_id` | `str \| None` | `None` | Salin transkrip hingga dan termasuk pesan dengan UUID ini, seperti `uuid` dari [`get_session_messages()`](#get_session_messages). Ketika dihilangkan, menyalin seluruh transkrip |

545| `title` | `str \| None` | `None` | Judul untuk fork. Ketika dihilangkan, SDK menurunkan judul dari sesi asli, diikuti oleh `(fork)` |

546 

547Mengembalikan `ForkSessionResult` yang `session_id`-nya adalah UUID sesi baru. Teruskan sebagai [`resume`](#claudeagentoptions) untuk melanjutkan fork. Fork tidak menyertakan [file checkpoint](/docs/id/agent-sdk/file-checkpointing) sesi asli, sehingga Anda tidak dapat memutar balik fork ke checkpoint yang diambil sebelum fork.

548 

549`fork_session()` menimbulkan:

550 

551* `ValueError`: `session_id` atau `up_to_message_id` bukan UUID yang valid

552* `ValueError`: sesi tidak memiliki pesan, atau `up_to_message_id` tidak cocok dengan pesan mana pun dalam transkrip

553* `FileNotFoundError`: sesi tidak dapat ditemukan

554 

555<h4 id="example-8">

556 Contoh

557</h4>

558 

559Fork sesi terbaru dengan judul baru, lalu lanjutkan fork tersebut. Sesi asli tetap menyimpan riwayatnya sendiri.

560 

561```python theme={null}

562from claude_agent_sdk import fork_session, list_sessions

563 

564sessions = list_sessions(directory="/path/to/project", limit=1)

565if sessions:

566 forked = fork_session(sessions[0].session_id, title="Try the OAuth approach")

567 print(forked.session_id) # pass as ClaudeAgentOptions(resume=...) to continue the fork

568```

569 

521<h2 id="classes">570<h2 id="classes">

522 Kelas571 Kelas

523</h2>572</h2>


919| Properti | Tipe | Default | Deskripsi |968| Properti | Tipe | Default | Deskripsi |

920| :- | :- | :- | :- |969| :- | :- | :- | :- |

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

922| `allowed_tools` | `list[str]` | `[]` | Tools untuk auto-approve tanpa prompt. Ini tidak membatasi Claude hanya pada tools ini. Jika Anda menyebutkan salah satu dari [task-tracking tools](/docs/id/agent-sdk/todo-tracking#model-availability) di sini, Claude Code juga memilih sesi. Tools lainnya yang tidak terdaftar jatuh ke `permission_mode` dan `can_use_tool`. Gunakan `disallowed_tools` untuk memblokir tools. Lihat [Permissions](/docs/id/agent-sdk/permissions#allow-and-deny-rules) |971| `allowed_tools` | `list[str]` | `[]` | Tools untuk auto-approve tanpa prompt, kecuali pembacaan dari [jalur jaringan](/docs/id/permissions#network-paths). Ini tidak membatasi Claude hanya pada tools ini. Jika Anda menyebutkan salah satu dari [task-tracking tools](/docs/id/agent-sdk/todo-tracking#model-availability) di sini, Claude Code juga memilih sesi. Tools lainnya yang tidak terdaftar jatuh ke `permission_mode` dan `can_use_tool`. Gunakan `disallowed_tools` untuk memblokir tools. Lihat [Permissions](/docs/id/agent-sdk/permissions#allow-and-deny-rules) |

923| `system_prompt` | `str \| SystemPromptPreset \| SystemPromptCustom \| SystemPromptFile \| None` | `None` | Konfigurasi system prompt. Teruskan string untuk prompt kustom, `{"type": "preset", "preset": "claude_code"}` untuk system prompt Claude Code dengan `"append"` opsional, `{"type": "custom", "prompt": "..."}` untuk prompt kustom yang juga dapat mengatur `"snapshot"`, atau `{"type": "file", "path": "..."}` untuk memuat prompt besar dari disk. Lihat [`SystemPromptPreset`](#systempromptpreset), [`SystemPromptCustom`](#systempromptcustom), dan [`SystemPromptFile`](#systempromptfile) |972| `system_prompt` | `str \| SystemPromptPreset \| SystemPromptCustom \| SystemPromptFile \| None` | `None` | Konfigurasi system prompt. Teruskan string untuk prompt kustom, `{"type": "preset", "preset": "claude_code"}` untuk system prompt Claude Code dengan `"append"` opsional, `{"type": "custom", "prompt": "..."}` untuk prompt kustom yang juga dapat mengatur `"snapshot"`, atau `{"type": "file", "path": "..."}` untuk memuat prompt besar dari disk. Lihat [`SystemPromptPreset`](#systempromptpreset), [`SystemPromptCustom`](#systempromptcustom), dan [`SystemPromptFile`](#systempromptfile) |

924| `mcp_servers` | `dict[str, McpServerConfig] \| str \| Path` | `{}` | Konfigurasi server MCP atau jalur ke file konfigurasi |973| `mcp_servers` | `dict[str, McpServerConfig] \| str \| Path` | `{}` | Konfigurasi server MCP atau jalur ke file konfigurasi |

925| `strict_mcp_config` | `bool` | `False` | Ketika `True`, gunakan hanya server yang diteruskan dalam `mcp_servers` dan abaikan `.mcp.json` proyek, pengaturan pengguna, server MCP yang disediakan plugin, dan [konektor claude.ai](/docs/id/mcp#use-mcp-servers-from-claude-ai). Memetakan ke flag CLI `--strict-mcp-config` |974| `strict_mcp_config` | `bool` | `False` | Ketika `True`, gunakan hanya server yang diteruskan dalam `mcp_servers` dan abaikan `.mcp.json` proyek, pengaturan pengguna, server MCP yang disediakan plugin, dan [konektor claude.ai](/docs/id/mcp#use-mcp-servers-from-claude-ai). Memetakan ke flag CLI `--strict-mcp-config` |


1849* `terminal_reason`: mengapa loop query berakhir, seperti `"completed"`, `"max_turns"`, `"api_error"`, `"aborted_streaming"`, atau `"aborted_tools"`. Nilai `"aborted_streaming"` atau `"aborted_tools"` berarti giliran dibatalkan sebelum selesai. Penyebab umum adalah [`interrupt()`](#claudesdkclient) dan callback izin mengembalikan [`PermissionResultDeny`](#permissionresultdeny) dengan `interrupt=True`. `None` pada versi CLI yang mendahului field, pada hasil dari perintah lokal seperti `/voice` atau `/usage`, yang melewati loop query, atau pada hasil error yang disintesis yang dipancarkan ketika sesi gagal secara fatal. Mencerminkan [`SDKResultMessage.terminal_reason`](/docs/id/agent-sdk/typescript#sdkresultmessage) SDK TypeScript, yang mencantumkan set lengkap nilai.1898* `terminal_reason`: mengapa loop query berakhir, seperti `"completed"`, `"max_turns"`, `"api_error"`, `"aborted_streaming"`, atau `"aborted_tools"`. Nilai `"aborted_streaming"` atau `"aborted_tools"` berarti giliran dibatalkan sebelum selesai. Penyebab umum adalah [`interrupt()`](#claudesdkclient) dan callback izin mengembalikan [`PermissionResultDeny`](#permissionresultdeny) dengan `interrupt=True`. `None` pada versi CLI yang mendahului field, pada hasil dari perintah lokal seperti `/voice` atau `/usage`, yang melewati loop query, atau pada hasil error yang disintesis yang dipancarkan ketika sesi gagal secara fatal. Mencerminkan [`SDKResultMessage.terminal_reason`](/docs/id/agent-sdk/typescript#sdkresultmessage) SDK TypeScript, yang mencantumkan set lengkap nilai.

1850* `origin`: asal pesan pengguna yang memicu giliran ini. Dalam [mode input streaming](/docs/id/agent-sdk/streaming-vs-single-mode), periksa ini untuk membedakan hasil prompt Anda sendiri, di mana `origin` adalah `None` atau `{"kind": "human"}`, dari hasil giliran yang disuntikkan seperti notifikasi tugas latar belakang. Memerlukan Python Agent SDK 0.2.137 atau lebih baru.1899* `origin`: asal pesan pengguna yang memicu giliran ini. Dalam [mode input streaming](/docs/id/agent-sdk/streaming-vs-single-mode), periksa ini untuk membedakan hasil prompt Anda sendiri, di mana `origin` adalah `None` atau `{"kind": "human"}`, dari hasil giliran yang disuntikkan seperti notifikasi tugas latar belakang. Memerlukan Python Agent SDK 0.2.137 atau lebih baru.

1851 1900 

1901Ketika beberapa tugas latar belakang selesai dalam waktu berdekatan, Claude Code dapat menjawab notifikasinya dalam satu giliran alih-alih satu giliran untuk masing-masing. Anda tetap menerima satu `ResultMessage` per notifikasi, secara berurutan, masing-masing dengan `origin` yang `kind`-nya adalah `"task-notification"`. Semua kecuali yang terakhir memiliki `num_turns` yang diatur ke `0` dan `result` yang kosong, dan yang terakhir membawa giliran yang menjawab semuanya.

1902 

1852Dict `usage` mencakup loop agent utama saja dan mengecualikan subagent dan panggilan model bersarang atau tambahan lainnya. Dalam [mode input streaming](/docs/id/agent-sdk/streaming-vs-single-mode), nilainya per-giliran. Lebih suka `model_usage` untuk akuntansi token dan biaya. Dict `usage` berisi kunci berikut ketika ada:1903Dict `usage` mencakup loop agent utama saja dan mengecualikan subagent dan panggilan model bersarang atau tambahan lainnya. Dalam [mode input streaming](/docs/id/agent-sdk/streaming-vs-single-mode), nilainya per-giliran. Lebih suka `model_usage` untuk akuntansi token dan biaya. Dict `usage` berisi kunci berikut ketika ada:

1853 1904 

1854| Kunci | Tipe | Deskripsi |1905| Kunci | Tipe | Deskripsi |

Details

360* [`renameSession()`](/docs/id/agent-sdk/typescript#renamesession)360* [`renameSession()`](/docs/id/agent-sdk/typescript#renamesession)

361* [`tagSession()`](/docs/id/agent-sdk/typescript#tagsession)361* [`tagSession()`](/docs/id/agent-sdk/typescript#tagsession)

362* [`deleteSession()`](/docs/id/agent-sdk/typescript)362* [`deleteSession()`](/docs/id/agent-sdk/typescript)

363* [`forkSession()`](/docs/id/agent-sdk/typescript)363* [`forkSession()`](/docs/id/agent-sdk/typescript#forksession)

364* [`listSubagents()`](/docs/id/agent-sdk/typescript)364* [`listSubagents()`](/docs/id/agent-sdk/typescript)

365* [`getSubagentMessages()`](/docs/id/agent-sdk/typescript)365* [`getSubagentMessages()`](/docs/id/agent-sdk/typescript)

366 366 

Details

293 293 

294 Anda dapat melanjutkan dari direktori kerja apa pun:294 Anda dapat melanjutkan dari direktori kerja apa pun:

295 295 

296 * **Pencarian lintas direktori**: Claude Code mencari di luar direktori proyek saat ini untuk menemukan ID; lihat [Lanjutkan sesi](/docs/id/sessions#resume-a-session) untuk urutan pencarian yang tepat dan bagaimana salinan duplikat ditangani.296 * **Pencarian lintas direktori**: Claude Code mencari di luar direktori proyek saat ini untuk menemukan ID; lihat [Lanjutkan sesi](/docs/id/sessions#where-the-session-picker-looks) untuk urutan pencarian yang tepat dan bagaimana salinan duplikat ditangani.

297 * **Mesin yang sama saja**: file sesi masih perlu ada di mesin saat ini.297 * **Mesin yang sama saja**: file sesi masih perlu ada di mesin saat ini.

298 298 

299 Sebelum v2.1.223, pencarian dibatasi pada direktori proyek saat ini dan git worktrees-nya; versi SDK yang menggabungkan CLI yang lebih lama masih berperilaku dengan cara ini.299 Sebelum v2.1.223, pencarian dibatasi pada direktori proyek saat ini dan git worktrees-nya; versi SDK yang menggabungkan CLI yang lebih lama masih berperilaku dengan cara ini.


423 423 

424* **Pindahkan file sesi.** Pertahankan `~/.claude/projects/<encoded-cwd>/<session-id>.jsonl` dari run pertama dan pulihkan ke dalam direktori apa pun di bawah `~/.claude/projects/` di host baru sebelum memanggil `resume`.424* **Pindahkan file sesi.** Pertahankan `~/.claude/projects/<encoded-cwd>/<session-id>.jsonl` dari run pertama dan pulihkan ke dalam direktori apa pun di bawah `~/.claude/projects/` di host baru sebelum memanggil `resume`.

425 425 

426 Claude Code mencari di luar direktori proyek saat ini untuk menemukan ID; lihat [Lanjutkan sesi](/docs/id/sessions#resume-a-session) untuk urutan pencarian yang tepat dan bagaimana salinan duplikat ditangani. Sebelum v2.1.223, pencarian dibatasi pada direktori proyek saat ini dan git worktrees-nya; versi SDK yang menggabungkan CLI yang lebih lama masih berperilaku dengan cara ini.426 Claude Code mencari di luar direktori proyek saat ini untuk menemukan ID; lihat [Lanjutkan sesi](/docs/id/sessions#where-the-session-picker-looks) untuk urutan pencarian yang tepat dan bagaimana salinan duplikat ditangani. Sebelum v2.1.223, pencarian dibatasi pada direktori proyek saat ini dan git worktrees-nya; versi SDK yang menggabungkan CLI yang lebih lama masih berperilaku dengan cara ini.

427 427 

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

429 429 

Details

124 124 

125Tanpa pesan parsial diaktifkan, Anda menerima semua jenis pesan kecuali `StreamEvent`. Jenis umum termasuk `SystemMessage` (inisialisasi sesi), `AssistantMessage` (blok konten lengkap), `ResultMessage` (hasil akhir), dan pesan batas kompak yang menunjukkan kapan riwayat percakapan dikompres (`SDKCompactBoundaryMessage` di TypeScript; `SystemMessage` dengan subtipe `"compact_boundary"` di Python).125Tanpa pesan parsial diaktifkan, Anda menerima semua jenis pesan kecuali `StreamEvent`. Jenis umum termasuk `SystemMessage` (inisialisasi sesi), `AssistantMessage` (blok konten lengkap), `ResultMessage` (hasil akhir), dan pesan batas kompak yang menunjukkan kapan riwayat percakapan dikompres (`SDKCompactBoundaryMessage` di TypeScript; `SystemMessage` dengan subtipe `"compact_boundary"` di Python).

126 126 

127<h3 id="handle-a-stream-that’s-cut-off">

128 Menangani stream yang terputus

129</h3>

130 

131Jika sebuah stream terputus di tengah pesan, misalnya saat Anda menginterupsi giliran atau koneksi terputus, Anda tetap menerima `message_stop` untuk pesan tersebut sebelum giliran berakhir. Blok teks atau thinking block yang terputus juga mendapatkan `content_block_stop`-nya. Panggilan tool yang terputus tidak mendapatkannya, jadi jika `message_stop` tiba saat blok panggilan tool masih terbuka, anggap input panggilan tersebut tidak lengkap.

132 

133Sebelum Claude Code v2.1.290, stream yang terputus dapat mengakhiri giliran tanpa `message_stop`, sehingga balasan yang Anda render dari acara stream dapat tetap ditampilkan sebagai sedang berlangsung. TypeScript Agent SDK menyertakan Claude Code v2.1.290 atau yang lebih baru mulai dari v0.3.290, dan Python Agent SDK mulai dari v0.2.164. Jika balasan tetap ditampilkan sebagai sedang berlangsung setelah giliran berakhir, perbarui SDK.

134 

127<h2 id="stream-tool-calls">135<h2 id="stream-tool-calls">

128 Stream tool calls136 Stream tool calls

129</h2>137</h2>

Details

464| `tag` | `string \| null` | required | String tag, atau `null` untuk menghapus |464| `tag` | `string \| null` | required | String tag, atau `null` untuk menghapus |

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

466 466 

467<h3 id="forksession">

468 `forkSession()`

469</h3>

470 

471Menyalin transkrip sesi ke sesi baru sehingga Anda dapat membawa percakapan ke arah lain sementara sesi asli tetap tidak berubah. Untuk bercabang dari titik yang lebih awal dalam percakapan, lewatkan `upToMessageId`.

472 

473```typescript theme={null}

474function forkSession(

475 sessionId: string,

476 options?: ForkSessionOptions

477): Promise<ForkSessionResult>;

478```

479 

480<h4 id="parameters-10">

481 Parameter

482</h4>

483 

484| Parameter | Tipe | Default | Deskripsi |

485| :- | :- | :- | :- |

486| `sessionId` | `string` | required | UUID sesi yang akan di-fork |

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

488| `options.upToMessageId` | `string` | `undefined` | Salin transkrip hingga dan termasuk pesan dengan `uuid` ini: nilai dari [`getSessionMessages()`](#getsessionmessages), atau `uuid` yang Anda tetapkan pada [`SDKUserMessage`](#sdkusermessage) yang di-streaming. Ketika dihilangkan, menyalin seluruh transkrip |

489| `options.title` | `string` | `undefined` | Judul untuk fork. Ketika dihilangkan, SDK menurunkannya dari sesi asli, diikuti oleh `(fork)` |

490 

491Mengembalikan `{ sessionId }`, UUID sesi baru. Lewatkan sebagai [`resume`](#options) untuk melanjutkan fork. Fork tidak menyertakan [checkpoint file](/docs/id/agent-sdk/file-checkpointing) dari sesi asli, sehingga Anda tidak dapat mengembalikannya ke checkpoint yang diambil sebelum fork.

492 

493`forkSession()` melempar error ketika:

494 

495* `sessionId` bukan UUID

496* sesi tidak dapat ditemukan, atau tidak memiliki pesan

497* `upToMessageId` tidak cocok dengan pesan apa pun dalam transkrip

498 

467<h3 id="resolvesettings">499<h3 id="resolvesettings">

468 `resolveSettings()`500 `resolveSettings()`

469</h3>501</h3>


486): Promise<ResolvedSettings>;518): Promise<ResolvedSettings>;

487```519```

488 520 

489<h4 id="parameters-10">521<h4 id="parameters-11">

490 Parameter522 Parameter

491</h4>523</h4>

492 524 


547| `agents` | `Record<string, [`AgentDefinition`](#agentdefinition)>` | `undefined` | Mendefinisikan subagent secara terprogram |579| `agents` | `Record<string, [`AgentDefinition`](#agentdefinition)>` | `undefined` | Mendefinisikan subagent secara terprogram |

548| `agentProgressSummaries` | `boolean` | `false` | Jika `true`, buat ringkasan progres satu baris untuk subagent dan teruskan pada event [`task_progress`](#sdktaskprogressmessage) melalui field `summary`. Berlaku untuk subagent latar depan dan latar belakang |580| `agentProgressSummaries` | `boolean` | `false` | Jika `true`, buat ringkasan progres satu baris untuk subagent dan teruskan pada event [`task_progress`](#sdktaskprogressmessage) melalui field `summary`. Berlaku untuk subagent latar depan dan latar belakang |

549| `allowDangerouslySkipPermissions` | `boolean` | `false` | Aktifkan bypass izin. Diperlukan saat menggunakan `permissionMode: 'bypassPermissions'`, baik saat startup maupun nanti melalui `setPermissionMode()`. Lihat [plan mode](/docs/id/agent-sdk/permissions#plan-mode-plan) untuk cara opsi ini berinteraksi dengan `permissionMode: 'plan'` |581| `allowDangerouslySkipPermissions` | `boolean` | `false` | Aktifkan bypass izin. Diperlukan saat menggunakan `permissionMode: 'bypassPermissions'`, baik saat startup maupun nanti melalui `setPermissionMode()`. Lihat [plan mode](/docs/id/agent-sdk/permissions#plan-mode-plan) untuk cara opsi ini berinteraksi dengan `permissionMode: 'plan'` |

550| `allowedTools` | `string[]` | `[]` | Tool yang disetujui otomatis tanpa permintaan izin. Ini tidak membatasi Claude hanya pada tool ini. Jika Anda menyebutkan salah satu [tool pelacakan tugas](/docs/id/agent-sdk/todo-tracking#model-availability) di sini, Claude Code juga mengikutsertakan sesi tersebut. Tool lain yang tidak tercantum diteruskan ke `permissionMode` dan `canUseTool`. Gunakan `disallowedTools` untuk memblokir tool. Lihat [Izin](/docs/id/agent-sdk/permissions#allow-and-deny-rules) |582| `allowedTools` | `string[]` | `[]` | Tool yang disetujui otomatis tanpa meminta konfirmasi, kecuali pembacaan dari [path jaringan](/docs/id/permissions#network-paths). Ini tidak membatasi Claude hanya pada tool ini. Jika Anda menyebutkan salah satu [tool pelacakan tugas](/docs/id/agent-sdk/todo-tracking#model-availability) di sini, Claude Code juga mengikutsertakan sesi tersebut. Tool lain yang tidak tercantum diteruskan ke `permissionMode` dan `canUseTool`. Gunakan `disallowedTools` untuk memblokir tool. Lihat [Izin](/docs/id/agent-sdk/permissions#allow-and-deny-rules) |

551| `betas` | [`SdkBeta`](#sdkbeta)`[]` | `[]` | Aktifkan fitur beta |583| `betas` | [`SdkBeta`](#sdkbeta)`[]` | `[]` | Aktifkan fitur beta |

552| `canUseTool` | [`CanUseTool`](#canusetool) | `undefined` | Fungsi izin kustom, hanya dipanggil ketika [alur izin](/docs/id/agent-sdk/permissions#how-permissions-are-evaluated) berakhir pada permintaan izin. Tidak dipanggil untuk panggilan yang disetujui otomatis oleh `allowedTools`, aturan allow, atau `permissionMode`. Aturan allow tidak menyetujui terlebih dahulu [tindakan yang tidak disetujui otomatis oleh mode mana pun](/docs/id/permission-modes#actions-no-mode-auto-approves). Lihat [`CanUseTool`](#canusetool) untuk detail |584| `canUseTool` | [`CanUseTool`](#canusetool) | `undefined` | Fungsi izin kustom, hanya dipanggil ketika [alur izin](/docs/id/agent-sdk/permissions#how-permissions-are-evaluated) berakhir pada permintaan izin. Tidak dipanggil untuk panggilan yang disetujui otomatis oleh `allowedTools`, aturan allow, atau `permissionMode`. Aturan allow tidak menyetujui terlebih dahulu [tindakan yang tidak disetujui otomatis oleh mode mana pun](/docs/id/permission-modes#actions-no-mode-auto-approves). Lihat [`CanUseTool`](#canusetool) untuk detail |

553| `continue` | `boolean` | `false` | Melanjutkan percakapan terbaru |585| `continue` | `boolean` | `false` | Melanjutkan percakapan terbaru |


1588 1620 

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

1590 1622 

1591Claude Code menetapkan `user_message_uuid` dan `user_message_uuids` pada pesan asisten pertama giliran, di bawah kondisi dalam [`user_message_uuid`](#user_message_uuid). Ketika Claude Code menjalankan kembali giliran yang terinterupsi oleh restart, pesan asisten re-run yang membawa bidang itu juga membawa [`resume_reason`](#resume_reason).1623Claude Code menetapkan `user_message_uuid` dan `user_message_uuids` pada pesan asisten pertama dari giliran tersebut, dengan ketentuan yang dijelaskan di [`user_message_uuid`](#user_message_uuid). Ketika giliran tersebut melanjutkan giliran yang terinterupsi oleh restart, pesan asisten yang membawa field tersebut juga membawa [`resume_reason`](#resume_reason).

1592 1624 

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

1594 1626 


1631 1663 

1632Tetapkan `inline_pastes` untuk memberi tahu Claude Code bagian mana dari `message.content` yang ditempelkan pengguna alih-alih diketik, satu string per tempelan. Teks prompt tetap berada di tempat pengguna meletakkannya. Claude Code dapat membungkus setiap tempelan yang tercantum dalam tag `<pasted_content>` di tempatnya berada, sehingga Claude dapat membedakan materi yang ditempelkan dari kata-kata pengguna sendiri. Hanya tempelan di blok teks terakhir prompt yang dibungkus. Memerlukan TypeScript Agent SDK v0.3.280 atau lebih baru.1664Tetapkan `inline_pastes` untuk memberi tahu Claude Code bagian mana dari `message.content` yang ditempelkan pengguna alih-alih diketik, satu string per tempelan. Teks prompt tetap berada di tempat pengguna meletakkannya. Claude Code dapat membungkus setiap tempelan yang tercantum dalam tag `<pasted_content>` di tempatnya berada, sehingga Claude dapat membedakan materi yang ditempelkan dari kata-kata pengguna sendiri. Hanya tempelan di blok teks terakhir prompt yang dibungkus. Memerlukan TypeScript Agent SDK v0.3.280 atau lebih baru.

1633 1665 

1666Setiap field tempelan memiliki batas ukuran:

1667 

1668* `pasted_content`: jika jumlah entri ditambah blok konten di dalamnya melebihi 1.000, Claude Code mengabaikan seluruh field.

1669* `inline_pastes`: Claude Code menggunakan 100 entri pertama yang tidak kosong dan mengabaikan sisanya.

1670 

1634Tetapkan `shouldQuery`, `client_composed`, atau `priority` untuk mengubah cara Claude Code menangani pesan yang Anda kirim:1671Tetapkan `shouldQuery`, `client_composed`, atau `priority` untuk mengubah cara Claude Code menangani pesan yang Anda kirim:

1635 1672 

1636* `shouldQuery`: atur ke `false` untuk menambahkan pesan ke transkrip tanpa memicu giliran asisten. Pesan ditahan dan digabungkan ke pesan pengguna berikutnya yang memicu giliran. Gunakan ini untuk menyuntikkan konteks, seperti output perintah yang Anda jalankan di luar pita, tanpa menghabiskan panggilan model.1673* `shouldQuery`: atur ke `false` untuk menambahkan pesan ke transkrip tanpa memicu giliran asisten. Pesan ditahan dan digabungkan ke pesan pengguna berikutnya yang memicu giliran. Gunakan ini untuk menyuntikkan konteks, seperti output perintah yang Anda jalankan di luar pita, tanpa menghabiskan panggilan model.


1661* Panggilan WebFetch atau WebSearch yang dipindahkan Claude Code ke latar belakang untuk mengirimkan pesan `'now'`: pesan pengguna yang membawa `tool_result` dari panggilan tersebut memiliki `tool_use_result` yang ditetapkan ke `{ detachedToolCall: true }`. Panggilan masih berjalan, dan Claude menerima hasilnya setelah selesai. Tidak ada `tool_result` kedua untuk `tool_use_id` tersebut yang menyusul, jadi jika aplikasi Anda menggambar satu baris untuk setiap panggilan tool, tandai baris ini sebagai dipindahkan ke latar belakang ketika pesan ini tiba. Memerlukan Claude Code v2.1.287 atau lebih baru.1698* Panggilan WebFetch atau WebSearch yang dipindahkan Claude Code ke latar belakang untuk mengirimkan pesan `'now'`: pesan pengguna yang membawa `tool_result` dari panggilan tersebut memiliki `tool_use_result` yang ditetapkan ke `{ detachedToolCall: true }`. Panggilan masih berjalan, dan Claude menerima hasilnya setelah selesai. Tidak ada `tool_result` kedua untuk `tool_use_id` tersebut yang menyusul, jadi jika aplikasi Anda menggambar satu baris untuk setiap panggilan tool, tandai baris ini sebagai dipindahkan ke latar belakang ketika pesan ini tiba. Memerlukan Claude Code v2.1.287 atau lebih baru.

1662* Tool MCP yang hasilnya berisi blok `resource_link`: `tool_use_result` adalah objek dengan array `resourceLinks` berisi entri [`SDKMcpResourceLink`](#sdkmcpresourcelink). Claude menerima setiap tautan sebagai baris teks di blok `tool_result`, jadi baca `resourceLinks` untuk merender file yang dikembalikan server alih-alih mengurai teks tersebut. Claude Code menghilangkan `resourceLinks` ketika hasil tidak memiliki tautan dan pada hasil dari subagent, menyimpan paling banyak 50 tautan per hasil, dan berhenti menambahkan tautan setelah array mencapai 64 KiB JSON terserialisasi. `resourceLinks` memerlukan Agent SDK v0.3.257 atau lebih baru.1699* Tool MCP yang hasilnya berisi blok `resource_link`: `tool_use_result` adalah objek dengan array `resourceLinks` berisi entri [`SDKMcpResourceLink`](#sdkmcpresourcelink). Claude menerima setiap tautan sebagai baris teks di blok `tool_result`, jadi baca `resourceLinks` untuk merender file yang dikembalikan server alih-alih mengurai teks tersebut. Claude Code menghilangkan `resourceLinks` ketika hasil tidak memiliki tautan dan pada hasil dari subagent, menyimpan paling banyak 50 tautan per hasil, dan berhenti menambahkan tautan setelah array mencapai 64 KiB JSON terserialisasi. `resourceLinks` memerlukan Agent SDK v0.3.257 atau lebih baru.

1663* Tool MCP yang mengembalikan [`structuredContent`](#calltoolresult): `tool_use_result` adalah objek yang anggota `structuredContent`-nya berisi apa yang dikirim server dan anggota `content`-nya berisi nilai [`McpOutput`](#mcpoutput). Hasil dari subagent tidak membawa `structuredContent`.1700* Tool MCP yang mengembalikan [`structuredContent`](#calltoolresult): `tool_use_result` adalah objek yang anggota `structuredContent`-nya berisi apa yang dikirim server dan anggota `content`-nya berisi nilai [`McpOutput`](#mcpoutput). Hasil dari subagent tidak membawa `structuredContent`.

1664* Tool MCP yang `structuredContent`-nya terserialisasi menjadi lebih dari 1.048.576 karakter JSON: Claude Code tidak menyertakan `structuredContent` di `tool_use_result` dan menetapkan `structuredContentOmitted: true` sebagai gantinya, sehingga aplikasi Anda dapat membedakan objek yang dibuang dari tool yang tidak mengirimkannya sama sekali. Anggota lainnya, seperti `content` dan `resourceLinks`, tetap ada, dan apa yang diterima Claude tidak berubah. Tool dari [server SDK in-process](/docs/id/agent-sdk/custom-tools) dan tool yang entri `tools/list`-nya mendeklarasikan [resource MCP Apps `_meta.ui`](#mcpserverstatus) dikecualikan dan mengirimkan objek secara utuh. Claude Code v2.1.287 atau lebih baru menerapkan batas ini.1701* Tool MCP yang `structuredContent`-nya terserialisasi menjadi lebih dari 1.048.576 karakter JSON: Claude Code tidak menyertakan `structuredContent` pada `tool_use_result` dan menetapkan `structuredContentOmitted: true` sebagai gantinya, sehingga aplikasi Anda dapat membedakan objek yang dibuang dari tool yang tidak mengirim apa pun. Anggota lainnya, seperti `content` dan `resourceLinks`, tetap ada, dan apa yang diterima Claude tidak berubah. Claude Code v2.1.287 atau yang lebih baru menerapkan batas ini. Dua jenis tool berbeda:

1702 * Tool dari [server SDK in-process](/docs/id/agent-sdk/custom-tools) dikecualikan dan mengirimkan objek secara utuh.

1703 * Tool yang entri `tools/list`-nya mendeklarasikan [resource `ui://` MCP Apps](#mcpserverstatus) memiliki batas 8.388.608 karakter pada Claude Code v2.1.295 atau yang lebih baru, dan versi sebelum v2.1.295 mengecualikannya.

1665 1704 

1666<h3 id="sdkusermessagereplay">1705<h3 id="sdkusermessagereplay">

1667 `SDKUserMessageReplay`1706 `SDKUserMessageReplay`


1775* `ttft_stream_ms`: waktu dalam milidetik hingga acara aliran `message_start` pertama, ketika aliran respons terbuka. Lebih rendah dari `ttft_ms`; celah antara keduanya adalah waktu yang dihabiskan untuk streaming pesan pertama. Hadir hanya pada lengan kesuksesan.1814* `ttft_stream_ms`: waktu dalam milidetik hingga acara aliran `message_start` pertama, ketika aliran respons terbuka. Lebih rendah dari `ttft_ms`; celah antara keduanya adalah waktu yang dihabiskan untuk streaming pesan pertama. Hadir hanya pada lengan kesuksesan.

1776* `user_message_uuid`: `uuid` dari pesan yang Anda kirim yang dijawab giliran ini. Lihat [`user_message_uuid`](#user_message_uuid) untuk hasil mana yang membawanya.1815* `user_message_uuid`: `uuid` dari pesan yang Anda kirim yang dijawab giliran ini. Lihat [`user_message_uuid`](#user_message_uuid) untuk hasil mana yang membawanya.

1777* `user_message_uuids`: `uuid` dari setiap pesan yang Anda kirim yang dijawab Claude Code dalam giliran ini. Lihat [`user_message_uuids`](#user_message_uuids).1816* `user_message_uuids`: `uuid` dari setiap pesan yang Anda kirim yang dijawab Claude Code dalam giliran ini. Lihat [`user_message_uuids`](#user_message_uuids).

1778* `resume_reason`: alasan Claude Code menjalankan ulang giliran ini setelah restart menginterupsinya. Ada pada kedua cabang. Lihat [`resume_reason`](#resume_reason).1817* `resume_reason`: alasan giliran ini melanjutkan giliran yang terinterupsi oleh restart. Ada pada kedua cabang. Lihat [`resume_reason`](#resume_reason).

1779* `local_command`: nama perintah yang dijalankan giliran, pada hasil kesuksesan giliran yang diselesaikan oleh perintah tanpa memasuki loop agent, seperti `/compact`. Nama dilipat menjadi huruf kecil dan garis bawah, jadi `/reload-plugins` melaporkan `reload_plugins`. Perintah yang disediakan server MCP, dan `/mcp` bawaan, melaporkan `mcp`. Perintah yang Anda tentukan sendiri melaporkan `custom`. Argumen tidak pernah disertakan. Tidak ada pada setiap giliran yang memasuki loop agent dan pada pengiriman yang tidak menjalankan perintah. Memerlukan Agent SDK v0.3.268 atau lebih baru.1818* `local_command`: nama perintah yang dijalankan giliran, pada hasil kesuksesan giliran yang diselesaikan oleh perintah tanpa memasuki loop agent, seperti `/compact`. Nama dilipat menjadi huruf kecil dan garis bawah, jadi `/reload-plugins` melaporkan `reload_plugins`. Perintah yang disediakan server MCP, dan `/mcp` bawaan, melaporkan `mcp`. Perintah yang Anda tentukan sendiri melaporkan `custom`. Argumen tidak pernah disertakan. Tidak ada pada setiap giliran yang memasuki loop agent dan pada pengiriman yang tidak menjalankan perintah. Memerlukan Agent SDK v0.3.268 atau lebih baru.

1780* `request_sent_wall_ms`: epoch milidetik di mana Claude Code mengirim permintaan API, untuk penggabungan dengan stempel waktu sisi server. Hadir hanya bersama dengan [`user_message_uuid`](#user_message_uuid), pada hasil kesuksesan dengan `is_error` false yang gilirannya mengirim permintaan API.1819* `request_sent_wall_ms`: epoch milidetik di mana Claude Code mengirim permintaan API, untuk penggabungan dengan stempel waktu sisi server. Hadir hanya bersama dengan [`user_message_uuid`](#user_message_uuid), pada hasil kesuksesan dengan `is_error` false yang gilirannya mengirim permintaan API.

1781* `first_content_frame_ms`: waktu dalam milidetik hingga acara aliran `content_block_start` atau `content_block_delta` pertama, menghitung thinking block sebagai konten. Hadir hanya pada lengan kesuksesan, ketika `is_error` adalah false. Memerlukan Agent SDK v0.3.260 atau lebih baru.1820* `first_content_frame_ms`: waktu dalam milidetik hingga acara aliran `content_block_start` atau `content_block_delta` pertama, menghitung thinking block sebagai konten. Hadir hanya pada lengan kesuksesan, ketika `is_error` adalah false. Memerlukan Agent SDK v0.3.260 atau lebih baru.


1825 1864 

1826* **Pesan reguler yang Anda kirim**, yang berarti tanpa `isSynthetic: true`: giliran menjawab pesan itu untuk seluruh jalannya. Ketika Anda mengirim beberapa pesan berdekatan, Claude Code dapat menggabungkannya menjadi satu giliran, dan bidang kemudian membawa hanya `uuid` pesan terakhir. Untuk mencocokkan balasan dengan salah satu pesan yang digabungkan, gunakan [`user_message_uuids`](#user_message_uuids).1865* **Pesan reguler yang Anda kirim**, yang berarti tanpa `isSynthetic: true`: giliran menjawab pesan itu untuk seluruh jalannya. Ketika Anda mengirim beberapa pesan berdekatan, Claude Code dapat menggabungkannya menjadi satu giliran, dan bidang kemudian membawa hanya `uuid` pesan terakhir. Untuk mencocokkan balasan dengan salah satu pesan yang digabungkan, gunakan [`user_message_uuids`](#user_message_uuids).

1827* **Pesan yang Anda kirim dengan `isSynthetic: true`**: giliran menjawab pesan itu pada awalnya. Jika Claude Code mengambil pesan reguler Anda di antara panggilan tool, giliran menjawab pesan yang diambil dari saat itu. Mengulangi `uuid` pesan sintetis memerlukan Agent SDK v0.3.265 atau lebih baru; versi sebelumnya tidak mengulangi apa pun pada giliran sintetis.1866* **Pesan yang Anda kirim dengan `isSynthetic: true`**: giliran menjawab pesan itu pada awalnya. Jika Claude Code mengambil pesan reguler Anda di antara panggilan tool, giliran menjawab pesan yang diambil dari saat itu. Mengulangi `uuid` pesan sintetis memerlukan Agent SDK v0.3.265 atau lebih baru; versi sebelumnya tidak mengulangi apa pun pada giliran sintetis.

1828* **Prompt yang dihasilkan Claude Code untuk menjalankan kembali giliran terputus di bawah [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/id/env-vars)**: ketika prompt terakhir giliran terputus adalah pesan reguler yang Anda kirim, baik itu membuka giliran maupun Claude Code mengambilnya selama giliran, re-run menjawab pesan itu pada awalnya. [`resume_reason`](#resume_reason) membedakan frame re-run dari frame upaya terputus. Ketika prompt terakhir bukan pesan reguler Anda, re-run tidak menjawab pesan Anda pada awalnya. Jika Claude Code mengambil pesan reguler Anda di antara panggilan tool, giliran menjawab pesan yang diambil dari saat itu. Mengulangi prompt giliran terputus memerlukan Agent SDK v0.3.268 atau lebih baru.1867* **Prompt yang dihasilkan Claude Code untuk melanjutkan giliran yang terinterupsi di bawah [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/id/env-vars)**: ketika prompt terakhir dari giliran yang terinterupsi adalah pesan reguler yang Anda kirim, baik yang membuka giliran maupun yang diambil Claude Code selama giliran, giliran yang dilanjutkan menjawab pesan tersebut pada awalnya. [`resume_reason`](#resume_reason) membedakan frame giliran yang dilanjutkan dari frame upaya yang terinterupsi. Ketika prompt terakhir bukan pesan reguler Anda, giliran yang dilanjutkan tidak menjawab pesan Anda pada awalnya. Jika Claude Code mengambil pesan reguler Anda di antara panggilan tool, giliran menjawab pesan yang diambil tersebut sejak saat itu. Pengembalian prompt giliran yang terinterupsi memerlukan Agent SDK v0.3.268 atau yang lebih baru.

1829* **Prompt lain yang dihasilkan Claude Code sendiri**: giliran tidak menjawab pesan Anda pada awalnya dan frame-nya tidak membawa echo. Jika Claude Code mengambil pesan reguler Anda di antara panggilan tool, giliran menjawab pesan itu dari saat itu. Echo pengambilan memerlukan Agent SDK v0.3.265 atau lebih baru; versi sebelumnya tidak mengulangi apa pun pada giliran ini.1868* **Prompt lain yang dihasilkan Claude Code sendiri**: giliran tidak menjawab pesan Anda pada awalnya dan frame-nya tidak membawa echo. Jika Claude Code mengambil pesan reguler Anda di antara panggilan tool, giliran menjawab pesan itu dari saat itu. Echo pengambilan memerlukan Agent SDK v0.3.265 atau lebih baru; versi sebelumnya tidak mengulangi apa pun pada giliran ini.

1830 1869 

1831Claude Code mengulangi `uuid` pesan yang dijawab pada tiga jenis frame:1870Claude Code mengulangi `uuid` pesan yang dijawab pada tiga jenis frame:


1857 `resume_reason`1896 `resume_reason`

1858</h4>1897</h4>

1859 1898 

1860Mengapa Claude Code menjalankan kembali giliran ini setelah restart. Claude Code menetapkan bidang ini pada giliran yang dijalankan kembali di bawah [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/id/env-vars), jadi Anda dapat membedakan balasan dan hasil re-run dari upaya terputus. Memerlukan Agent SDK v0.3.268 atau lebih baru.1899Alasan giliran ini melanjutkan giliran yang terinterupsi oleh restart. Claude Code menetapkan field ini pada giliran yang melanjutkan giliran terinterupsi di bawah [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/id/env-vars), sehingga Anda dapat membedakan balasan dan hasil giliran yang dilanjutkan dari upaya yang terinterupsi. Memerlukan Agent SDK v0.3.268 atau yang lebih baru.

1861 1900 

1862Claude Code menetapkan bidang pada dua jenis frame:1901Claude Code menetapkan bidang pada dua jenis frame:

1863 1902 

1864* **Hasil re-run**: pada lengan kesuksesan dan kesalahan sama-sama, baik hasil membawa `user_message_uuid` maupun tidak.1903* **Hasil giliran yang dilanjutkan**: pada cabang success maupun error, baik hasil membawa `user_message_uuid` maupun tidak.

1865* **Frame balasan re-run**: yang membawa [`user_message_uuid`](#user_message_uuid).1904* **Frame balasan giliran yang dilanjutkan**: yang membawa [`user_message_uuid`](#user_message_uuid).

1866 1905 

1867Nilainya adalah token huruf kecil pendek yang menyebutkan alasan giliran dijalankan ulang, seperti `interrupted_turn`.1906Nilainya adalah token huruf kecil yang pendek, seperti `interrupted_turn`.

1868 1907 

1869<h4 id="queued_turn_count">1908<h4 id="queued_turn_count">

1870 `queued_turn_count`1909 `queued_turn_count`


2018```typescript theme={null}2057```typescript theme={null}

2019type SDKPartialAssistantMessage = {2058type SDKPartialAssistantMessage = {

2020 type: "stream_event";2059 type: "stream_event";

2021 event: BetaRawMessageStreamEvent; // Dari Anthropic SDK2060 event: BetaRawMessageStreamEvent; // From Anthropic SDK

2022 parent_tool_use_id: string | null;2061 parent_tool_use_id: string | null;

2023 uuid: UUID;2062 uuid: UUID;

2024 session_id: string;2063 session_id: string;

2025 ttft_ms?: number; // Waktu ke token pertama dalam ms, hadir hanya pada acara message_start2064 ttft_ms?: number; // Time to first token in ms, present only on message_start events

2026 user_message_uuid?: string;2065 user_message_uuid?: string;

2027 user_message_uuids?: string[];2066 user_message_uuids?: string[];

2028 resume_reason?: string;2067 resume_reason?: string;

2029};2068};

2030```2069```

2031 2070 

2032Claude Code menetapkan `user_message_uuid` dan `user_message_uuids` pada acara aliran non-ping pertama giliran, dan lagi ketika pesan yang dijawab giliran berubah, di bawah kondisi dalam [`user_message_uuid`](#user_message_uuid). Ketika Claude Code menjalankan kembali giliran yang terinterupsi oleh restart, acara aliran re-run yang membawa bidang itu juga membawa [`resume_reason`](#resume_reason).2071Claude Code menetapkan `user_message_uuid` dan `user_message_uuids` pada event stream non-ping pertama dari giliran, dan lagi ketika pesan yang dijawab giliran berubah, dengan ketentuan di [`user_message_uuid`](#user_message_uuid). Ketika giliran melanjutkan giliran yang terinterupsi oleh restart, event stream yang membawa field tersebut juga membawa [`resume_reason`](#resume_reason).

2033 2072 

2034<h3 id="sdkcompactboundarymessage">2073<h3 id="sdkcompactboundarymessage">

2035 `SDKCompactBoundaryMessage`2074 `SDKCompactBoundaryMessage`


3560| - | - | - |3599| - | - | - |

3561| `script` | `string` | Skrip workflow inline. Harus dimulai dengan `export const meta = { name, description }` sebagai literal, diikuti oleh badan skrip menggunakan `agent()`, `parallel()`, `pipeline()`, dan `phase()`. Array `phases` opsional dalam `meta` mengelompokkan agent di bawah tahap bernama dalam tampilan kemajuan |3600| `script` | `string` | Skrip workflow inline. Harus dimulai dengan `export const meta = { name, description }` sebagai literal, diikuti oleh badan skrip menggunakan `agent()`, `parallel()`, `pipeline()`, dan `phase()`. Array `phases` opsional dalam `meta` mengelompokkan agent di bawah tahap bernama dalam tampilan kemajuan |

3562| `name` | `string` | Nama workflow bawaan atau yang disimpan di `.claude/workflows/`. Diselesaikan ke skrip |3601| `name` | `string` | Nama workflow bawaan atau yang disimpan di `.claude/workflows/`. Diselesaikan ke skrip |

3563| `scriptPath` | `string` | Jalur ke file skrip workflow di disk. Diutamakan daripada `script` dan `name`. Claude Code tetap menyimpan skrip setiap invokasi dan mengembalikan jalur dalam hasil, sehingga Anda dapat mengedit file itu dan menginvokasi kembali dengan `scriptPath` yang sama untuk melakukan iterasi |3602| `scriptPath` | `string` | Jalur ke file skrip workflow di disk, seperti `scriptPath` yang dikembalikan oleh run sebelumnya. Diutamakan daripada `script` dan `name`. Claude Code menolak `scriptPath` dengan error ketika tool sesi tidak menyertakan `Read` |

3564| `args` | `unknown` | Nilai input yang diekspos ke skrip sebagai `args` global, untuk workflow bernama yang diparameterisasi seperti pertanyaan penelitian atau daftar jalur file. Lewatkan array dan objek sebagai nilai JSON aktual, bukan sebagai string yang dikodekan JSON |3603| `args` | `unknown` | Nilai input yang diekspos ke skrip sebagai `args` global, untuk workflow bernama yang diparameterisasi seperti pertanyaan penelitian atau daftar jalur file. Lewatkan array dan objek sebagai nilai JSON aktual, bukan sebagai string yang dikodekan JSON |

3565| `resumeFromRunId` | `string` | ID Jalankan dari invokasi `Workflow` sebelumnya untuk dilanjutkan. Panggilan `agent()` yang selesai dengan input tidak berubah biasanya mengembalikan hasil cache; sisanya berjalan langsung. [Lanjutkan setelah jeda](/docs/id/workflows#resume-after-a-pause) mencakup panggilan selesai mana yang dijalankan kembali. Sesi yang sama saja |3604| `resumeFromRunId` | `string` | ID Jalankan dari invokasi `Workflow` sebelumnya untuk dilanjutkan. Panggilan `agent()` yang selesai dengan input tidak berubah biasanya mengembalikan hasil cache; sisanya berjalan langsung. [Lanjutkan setelah jeda](/docs/id/workflows#resume-after-a-pause) mencakup panggilan selesai mana yang dijalankan kembali. Sesi yang sama saja |

3566| `title` | `string` | Diabaikan; blok `meta` skrip menetapkan judul |3605| `title` | `string` | Diabaikan; blok `meta` skrip menetapkan judul |

agent-view.md +18 −14

Details

152| Bentuk | Artinya |152| Bentuk | Artinya |

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

154| `✻` atau animasi `✽` | Proses sesi sedang berjalan, atau sesi membutuhkan masukan Anda |154| `✻` atau animasi `✽` | Proses sesi sedang berjalan, atau sesi membutuhkan masukan Anda |

155| `∙` | Proses telah keluar. Anda masih dapat mengintip baris, dan ketika Anda membalas atau melampirkan, Claude memulai ulang dari tempat ia berhenti |155| `∙` | Proses telah keluar. Anda masih dapat mengintip baris, dan ketika Anda membalas atau melampirkan, Claude memulai ulang proses tersebut dari percakapan yang tersimpan |

156| `✢` | Sesi [`/loop`](/docs/id/scheduled-tasks) yang tidur di antara iterasi. Baris menunjukkan jumlah jalannya dan hitungan mundur |156| `✢` | Sesi [`/loop`](/docs/id/scheduled-tasks) yang tidur di antara iterasi. Baris menunjukkan jumlah jalannya dan hitungan mundur |

157 157 

158Label `#N` atau `!N` yang dapat muncul di tepi kanan baris adalah tautan ke [pull request atau merge request](#pull-request-status) sesi, bukan bagian dari ikon status.158Label `#N` atau `!N` yang dapat muncul di tepi kanan baris adalah tautan ke [pull request atau merge request](#pull-request-status) sesi, bukan bagian dari ikon status.


256 256 

257Sesi yang dilampirkan selalu dirender dalam [mode layar penuh](/docs/id/fullscreen), terlepas dari pengaturan `tui` Anda, karena sesi latar belakang tidak memiliki scrollback terminal untuk ditambahkan. Gulir dengan `PgUp`, `PgDn`, atau roda mouse, dan tekan `Ctrl+O` untuk mode transkrip. Gulir asli terminal Anda dan mode salinan tmux hanya menampilkan viewport saat ini, sama seperti ketika Anda menjalankan aplikasi layar penuh apa pun.257Sesi yang dilampirkan selalu dirender dalam [mode layar penuh](/docs/id/fullscreen), terlepas dari pengaturan `tui` Anda, karena sesi latar belakang tidak memiliki scrollback terminal untuk ditambahkan. Gulir dengan `PgUp`, `PgDn`, atau roda mouse, dan tekan `Ctrl+O` untuk mode transkrip. Gulir asli terminal Anda dan mode salinan tmux hanya menampilkan viewport saat ini, sama seperti ketika Anda menjalankan aplikasi layar penuh apa pun.

258 258 

259Sesi yang dilampirkan tidak [melaporkan statusnya ke terminal Anda](/docs/id/terminal-config#see-session-status-in-your-terminal).

260 

259Tekan `←` pada prompt kosong, atau jalankan `/exit`, untuk melepaskan dan kembali ke tampilan agent, baik Anda membuka sesi dari tampilan agent maupun dengan `claude attach <id>` dari shell Anda.261Tekan `←` pada prompt kosong, atau jalankan `/exit`, untuk melepaskan dan kembali ke tampilan agent, baik Anda membuka sesi dari tampilan agent maupun dengan `claude attach <id>` dari shell Anda.

260 262 

261`←` juga melepaskan saat [overlay `/btw`](/docs/id/interactive-mode#side-questions-with-%2Fbtw) terbuka. Memerlukan Claude Code v2.1.257 atau lebih baru. Pertanyaan samping yang masih menjawab terus berjalan saat Anda pergi. Lain kali Anda melampirkan, overlay dibuka kembali dengannya, atau dengan jawabannya.263`←` juga melepaskan saat [overlay `/btw`](/docs/id/interactive-mode#side-questions-with-%2Fbtw) terbuka. Memerlukan Claude Code v2.1.257 atau lebih baru. Pertanyaan samping yang masih menjawab terus berjalan saat Anda pergi. Lain kali Anda melampirkan, overlay dibuka kembali dengannya, atau dengan jawabannya.


264 266 

265`Ctrl+Z` juga melepaskan tetapi kembali ke tempat Anda memulai: tampilan agent jika Anda melampirkan dari sana, atau shell Anda jika Anda menjalankan `claude attach`. Gunakan `Ctrl+Z` ketika dialog memiliki fokus dan tidak merespons `←`.267`Ctrl+Z` juga melepaskan tetapi kembali ke tempat Anda memulai: tampilan agent jika Anda melampirkan dari sana, atau shell Anda jika Anda menjalankan `claude attach`. Gunakan `Ctrl+Z` ketika dialog memiliki fokus dan tidak merespons `←`.

266 268 

267`Ctrl+C` mempertahankan perilaku interupsi standarnya saat dilampirkan: ini membatalkan respons yang sedang berjalan atau perintah shell `!` alih-alih melepaskan. Menekan `Ctrl+C` dua kali pada prompt kosong melepaskan, sama seperti di sesi apa pun.269`Ctrl+C` mempertahankan perilaku interupsi standarnya saat dilampirkan: ini membatalkan respons yang sedang berjalan atau perintah shell `!` alih-alih melepaskan. Menekan `Ctrl+C` dua kali pada prompt kosong melepaskan.

268 270 

269Melepaskan tidak pernah menghentikan sesi latar belakang: `←`, `Ctrl+Z`, `/exit`, dan `Ctrl+C` ganda atau `Ctrl+D` ganda semuanya membiarkannya berjalan. Untuk mengakhiri sesi dari dalamnya, jalankan `/stop`.271Melepaskan tidak pernah menghentikan sesi latar belakang: `←`, `Ctrl+Z`, `/exit`, dan `Ctrl+C` ganda atau `Ctrl+D` ganda semuanya membiarkannya berjalan. Jika Anda melepaskan saat `/loop` sedang menunggu iterasi berikutnya, loop terus berjalan dan iterasi itu dimulai sesuai jadwal tanpa Anda. Untuk menghentikan loop sebelum Anda melepaskan, lihat [Hentikan loop](/docs/id/scheduled-tasks#stop-a-loop). Untuk mengakhiri sesi dari dalamnya, jalankan `/stop`.

270 272 

271<h4 id="switch-sessions-without-leaving-the-terminal">273<h4 id="switch-sessions-without-leaving-the-terminal">

272 Alihkan sesi tanpa meninggalkan terminal274 Alihkan sesi tanpa meninggalkan terminal


293Setelah sekitar sepuluh detik, Claude Code mengirim sesi ke latar belakang tanpa menunggu lebih lama, kecuali dalam kasus seperti berikut:295Setelah sekitar sepuluh detik, Claude Code mengirim sesi ke latar belakang tanpa menunggu lebih lama, kecuali dalam kasus seperti berikut:

294 296 

295* **Subagent latar depan masih berjalan**: Claude Code terus menunggu sehingga pekerjaan [subagent latar depan](/docs/id/sub-agents#run-subagents-in-foreground-or-background) yang dimulai Claude terbawa, dan menampilkan `Still backgrounding after the current tool`. Tekan `←` lagi untuk mengirim ke latar belakang tanpa menunggu, yang memulai ulang subagent tersebut dari awal.297* **Subagent latar depan masih berjalan**: Claude Code terus menunggu sehingga pekerjaan [subagent latar depan](/docs/id/sub-agents#run-subagents-in-foreground-or-background) yang dimulai Claude terbawa, dan menampilkan `Still backgrounding after the current tool`. Tekan `←` lagi untuk mengirim ke latar belakang tanpa menunggu, yang memulai ulang subagent tersebut dari awal.

296* **Permintaan izin atau pertanyaan sedang menunggu jawaban Anda**: saat permintaan izin atau pertanyaan yang diajukan Claude sedang menunggu, Claude Code terus menunggu dan menampilkan `Still backgrounding after the current tool — a question is waiting for your answer.`298* **Permintaan izin atau pertanyaan sedang menunggu jawaban Anda**: saat permintaan izin atau pertanyaan yang diajukan Claude sedang menunggu, Claude Code terus menunggu dan menampilkan `Still backgrounding after the current tool — a question is waiting for your answer.` Jika jawaban Anda memungkinkan giliran berlanjut, seperti **Yes** pada permintaan izin, Claude Code mengirim sesi ke latar belakang ketika tool saat ini selesai.

297* **Anda mengetik ke dalam input prompt**: Claude Code membatalkan peralihan, karena teks yang belum dikirim tetap berada di kotak input terminal Anda dan tidak akan pindah ke sesi latar belakang. Claude Code menampilkan `Backgrounding cancelled — you have unsent text in the input. Send it or clear it, then press ← again.`299* **Anda mengetik ke dalam input prompt**: Claude Code membatalkan peralihan, karena teks yang belum dikirim tetap berada di kotak input terminal Anda dan tidak akan pindah ke sesi latar belakang. Claude Code menampilkan `Backgrounding cancelled — you have unsent text in the input. Send it or clear it, then press ← again.`

300* **Anda menghentikan giliran**: Claude Code membatalkan peralihan dan menampilkan `Backgrounding cancelled — the turn was stopped.` Misalnya, giliran berhenti ketika Anda [menginterupsi Claude dengan `Esc`](/docs/id/interactive-mode#general-controls) atau memilih **No** [tanpa komentar](/docs/id/permissions#add-a-comment-when-you-answer-a-permission-prompt) pada permintaan izin dari percakapan utama, atau menekan `Esc` pada pertanyaan yang diajukan Claude di sana. Tekan `←` lagi untuk mengirim sesi ke latar belakang.

298* **Pesan dalam antrean tidak dapat dipindahkan**: pesan yang Anda [masukkan ke antrean saat Claude sedang bekerja](/docs/id/interactive-mode#queue-messages-while-claude-works) berpindah ke sesi latar belakang bersama percakapan. Ketika salah satunya tidak dapat berpindah, sesi tetap berada di latar depan dan Claude Code menampilkan pemberitahuan seperti `Cannot open agents — 1 queued message can't move to the background. Press ← again once Claude has read it.`301* **Pesan dalam antrean tidak dapat dipindahkan**: pesan yang Anda [masukkan ke antrean saat Claude sedang bekerja](/docs/id/interactive-mode#queue-messages-while-claude-works) berpindah ke sesi latar belakang bersama percakapan. Ketika salah satunya tidak dapat berpindah, sesi tetap berada di latar depan dan Claude Code menampilkan pemberitahuan seperti `Cannot open agents — 1 queued message can't move to the background. Press ← again once Claude has read it.`

299 302 

300Menekan `←` membuat baris sesi bahkan ketika percakapan belum memiliki pesan, jadi `→` tetap kembali ke sana.303Menekan `←` membuat baris sesi bahkan ketika percakapan belum memiliki pesan, jadi `→` tetap kembali ke sana.


513* `--fallback-model`516* `--fallback-model`

514* `--allow-dangerously-skip-permissions`517* `--allow-dangerously-skip-permissions`

515 518 

516Direktori yang Anda tambahkan selama sesi dengan [`/add-dir`](/docs/id/permissions#additional-directories-grant-file-access-not-configuration) juga terbawa. Membawa `--allow-dangerously-skip-permissions` membuat `bypassPermissions` tetap dapat dijangkau dalam sesi yang di-background, tetapi tidak memberikan apa pun yang baru: mode tersebut tetap memerlukan penerimaan interaktif satu kali yang dijelaskan dalam [Permission mode, model, and effort](#permission-mode-model-and-effort).519Direktori yang Anda tambahkan selama sesi dengan [`/add-dir`](/docs/id/permissions#additional-directories-grant-file-access-not-configuration) juga terbawa. Membawa `--allow-dangerously-skip-permissions` membuat `bypassPermissions` tetap dapat dijangkau dalam sesi yang di-background, tetapi tidak memberikan apa pun yang baru: mode tersebut tetap memerlukan [penerimaan penafian bypass](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) Anda yang sudah tercatat.

517 520 

518<span id="from-your-shell" />521<span id="from-your-shell" />

519 522 


767 770 

768Default yang aktif muncul di footer di bawah input pengiriman.771Default yang aktif muncul di footer di bawah input pengiriman.

769 772 

770Claude Code menolak `claude --bg --permission-mode bypassPermissions` sampai Anda menerima penafian bypass dengan menjalankan `claude --dangerously-skip-permissions` sekali secara interaktif, karena mode itu memungkinkan sesi yang tidak Anda pantau bertindak tanpa persetujuan. Memberikan `--dangerously-skip-permissions` atau `--permission-mode bypassPermissions` ke `claude agents` menampilkan penafian yang sama ketika Anda belum menerimanya sebelumnya, dan menerimanya menerapkan `bypassPermissions` ke sesi yang Anda luncurkan dari tampilan ini. Memberikan `--allow-dangerously-skip-permissions` juga menampilkan penafian yang sama, dan menerimanya membuat `bypassPermissions` tersedia dalam siklus `Shift+Tab` sesi tersebut tanpa memulainya dalam mode itu.773Sesi latar belakang yang dimulai dalam mode `bypassPermissions` memerlukan [penerimaan penafian bypass](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) Anda yang sudah tercatat, karena mode itu memungkinkan sesi yang tidak Anda pantau bertindak tanpa persetujuan. Memberikan `--dangerously-skip-permissions` atau `--permission-mode bypassPermissions` ke `claude agents` menampilkan penafian yang sama ketika Anda belum menerimanya sebelumnya, dan menerimanya menerapkan `bypassPermissions` ke sesi yang Anda luncurkan dari tampilan ini. Memberikan `--allow-dangerously-skip-permissions` juga menampilkan penafian yang sama, dan menerimanya membuat `bypassPermissions` tersedia dalam siklus `Shift+Tab` sesi tersebut tanpa memulainya dalam mode itu.

771 774 

772<h4 id="what-persists-across-restarts">775<h4 id="what-persists-across-restarts">

773 What persists across restarts776 What persists across restarts

774</h4>777</h4>

775 778 

776Mode izin, model, dan effort yang Anda pilih untuk sesi latar belakang, bersama dengan [flag konfigurasi yang dibawanya](#what-carries-over-when-you-background), semuanya bertahan ketika supervisor nanti [menghentikan dan memulai ulang](#the-supervisor-process) prosesnya. Sesi yang Anda luncurkan dengan `claude --bg --dangerously-skip-permissions` atau `claude --bg --permission-mode bypassPermissions` tetap dalam `bypassPermissions` setelah restart itu. Model atau effort yang Anda ubah di tengah sesi dengan `/model` atau `/effort` juga dipertahankan.779Mode izin, model, dan effort yang Anda pilih untuk sesi latar belakang, bersama dengan [flag konfigurasi yang dibawanya](#what-carries-over-when-you-background), semuanya bertahan ketika supervisor nanti [menghentikan dan memulai ulang](#the-supervisor-process) prosesnya. Model atau effort yang Anda ubah di tengah sesi dengan `/model` atau `/effort` juga dipertahankan.

777 780 

778Jika sesi mengambil effort-nya dari pengaturan Anda, bukan dari `--effort` atau `/effort`, Claude Code membaca pengaturan Anda lagi setiap kali memulai proses untuk sesi tersebut. Setelah Anda mengedit effort yang disimpan di `settings.json`, perubahan mencapai sesi yang Anda pindahkan ke latar belakang dengan `←` atau `/bg`, serta restart berikutnya. Effort yang disimpan adalah kunci [`effortLevel`](/docs/id/settings-reference#effortlevel) atau entri [`modelSettings`](/docs/id/settings-reference#modelsettings).781Jika sesi mengambil effort-nya dari pengaturan Anda, bukan dari `--effort` atau `/effort`, Claude Code membaca pengaturan Anda lagi setiap kali memulai proses untuk sesi tersebut. Setelah Anda mengedit effort yang disimpan di `settings.json`, perubahan mencapai sesi yang Anda pindahkan ke latar belakang dengan `←` atau `/bg`, serta restart berikutnya. Effort yang disimpan adalah kunci [`effortLevel`](/docs/id/settings-reference#effortlevel) atau entri [`modelSettings`](/docs/id/settings-reference#modelsettings).

779 782 


822| `claude attach <id\|name>` | Lampirkan ke sesi di terminal ini |825| `claude attach <id\|name>` | Lampirkan ke sesi di terminal ini |

823| `claude logs <id\|name>` | Cetak output terbaru sesi |826| `claude logs <id\|name>` | Cetak output terbaru sesi |

824| `claude stop <id>` | Hentikan sesi. Juga menerima `claude kill` |827| `claude stop <id>` | Hentikan sesi. Juga menerima `claude kill` |

825| `claude respawn <id>` | Mulai ulang sesi, baik yang sedang berjalan maupun yang dihentikan, misalnya untuk mengambil biner Claude Code yang telah diperbarui. Sesi yang dimulai ulang melanjutkan percakapan yang disimpannya; ketika tidak ada di disk, sesi tersebut menjalankan prompt aslinya lagi sebagai percakapan baru |828| `claude respawn <id>` | Mulai ulang sesi, baik yang sedang berjalan maupun yang dihentikan, misalnya untuk mengambil biner Claude Code yang telah diperbarui. Sesi yang memiliki percakapan tersimpan akan melanjutkan percakapan tersebut |

826| `claude respawn --all` | Mulai ulang setiap sesi yang sedang berjalan, misalnya untuk memindahkan semua sesi ke biner Claude Code yang telah diperbarui sekaligus |829| `claude respawn --all` | Mulai ulang setiap sesi yang sedang berjalan, misalnya untuk memindahkan semua sesi ke biner Claude Code yang telah diperbarui sekaligus |

827| `claude rm <id>` | Hapus sesi dari daftar, bersama dengan worktree yang dibuat Claude untuk sesi tersebut ketika aman untuk dihapus; lihat [Apa yang dihapus saat menghapus sesi](#what-deleting-a-session-removes). Transkrip percakapan tetap berada di mesin lokal Anda dan tetap tersedia melalui `claude --resume` |830| `claude rm <id>` | Hapus sesi dari daftar, bersama dengan worktree yang dibuat Claude untuk sesi tersebut ketika aman untuk dihapus; lihat [Apa yang dihapus saat menghapus sesi](#what-deleting-a-session-removes). Transkrip percakapan tetap berada di mesin lokal Anda dan tetap tersedia melalui `claude --resume` |

828| `claude rm <id> --discard-unpushed <commit>@<worktree-id>` | Hapus sesi yang penghapusannya ditolak karena commit yang belum di-push, membuang worktree beserta branch dan commitnya. Lewatkan nilai yang tepat yang ditampilkan penolakan; lihat [Apa yang dihapus saat menghapus sesi](#what-deleting-a-session-removes). Memerlukan v2.1.260 atau lebih baru |831| `claude rm <id> --discard-unpushed <commit>@<worktree-id>` | Hapus sesi yang penghapusannya ditolak karena commit yang belum di-push, membuang worktree beserta branch dan commitnya. Lewatkan nilai yang tepat yang ditampilkan penolakan; lihat [Apa yang dihapus saat menghapus sesi](#what-deleting-a-session-removes). Memerlukan v2.1.260 atau lebih baru |

829| `claude rm <id> --force-remove-worktree <worktree-id>` | Hapus sesi yang penghapusannya ditolak karena git atau hook `WorktreeRemove` tidak dapat menghapus worktreenya, menghapus direktori worktree bagaimanapun dan meninggalkan branch-nya di repositori. Lewatkan nilai yang tepat yang ditampilkan penolakan; lihat [Apa yang dihapus saat menghapus sesi](#what-deleting-a-session-removes). Memerlukan v2.1.268 atau lebih baru |832| `claude rm <id> --force-remove-worktree <worktree-id>` | Hapus sesi yang penghapusannya ditolak karena git atau hook `WorktreeRemove` tidak dapat menghapus worktreenya, menghapus direktori worktree bagaimanapun dan meninggalkan branch-nya di repositori. Lewatkan nilai yang tepat yang ditampilkan penolakan; lihat [Apa yang dihapus saat menghapus sesi](#what-deleting-a-session-removes). Memerlukan v2.1.268 atau lebih baru |

830| `claude daemon status` | Cetak status [supervisor](#the-supervisor-process), versi, direktori soket, dan jumlah pekerja |833| `claude daemon status` | Cetak status [supervisor](#the-supervisor-process), versi, direktori soket, dan jumlah pekerja |

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

832| `claude daemon stop --any` | Hentikan proses supervisor dan sesi latar belakang yang dihosting. Lewatkan `--keep-workers` untuk membiarkan sesi latar belakang tetap berjalan sehingga supervisor berikutnya dapat terhubung kembali ke sesi tersebut. `claude agents` atau `claude --bg` berikutnya memulai supervisor baru |835| `claude daemon stop --any` | Hentikan proses supervisor dan sesi latar belakang yang dihosting. Lewatkan `--keep-workers` untuk membiarkan sesi latar belakang tetap berjalan sehingga [supervisor berikutnya](#the-supervisor-process) dapat terhubung kembali ke sesi tersebut. `claude agents` atau `claude --bg` berikutnya memulai supervisor baru |

833 836 

834`claude attach` dan `claude logs` dapat menerima sebagian nama sesi sebagai pengganti ID, seperti dalam `claude logs "auth refactor"`. Meneruskan nama memerlukan Claude Code v2.1.290 atau lebih baru.837`claude attach` dan `claude logs` dapat menerima sebagian nama sesi sebagai pengganti ID, seperti dalam `claude logs "auth refactor"`. `claude attach` membuka sesi berdasarkan nama hanya selama prosesnya sedang berjalan, jadi lewatkan ID sebagai gantinya untuk memulai ulang sesi yang dihentikan. Meneruskan nama memerlukan Claude Code v2.1.290 atau lebih baru.

835 838 

836<h3 id="list-sessions-as-json">839<h3 id="list-sessions-as-json">

837 Daftar sesi sebagai JSON840 Daftar sesi sebagai JSON


889* **Selesai atau menunggu pesan Anda berikutnya, dan tidak terhubung selama sekitar satu jam**: supervisor menghentikan proses untuk membebaskan sumber daya. Sesi yang mengakhiri giliran dengan mengajukan pertanyaan kepada Anda dihitung sebagai menunggu pesan Anda berikutnya. Percakapan tetap di disk, dan lain kali Anda melampirkan atau membalas, sesi dilanjutkan dari tempat ia berhenti. Pin sesi dengan `Ctrl+T` untuk membuat prosesnya tetap berjalan.892* **Selesai atau menunggu pesan Anda berikutnya, dan tidak terhubung selama sekitar satu jam**: supervisor menghentikan proses untuk membebaskan sumber daya. Sesi yang mengakhiri giliran dengan mengajukan pertanyaan kepada Anda dihitung sebagai menunggu pesan Anda berikutnya. Percakapan tetap di disk, dan lain kali Anda melampirkan atau membalas, sesi dilanjutkan dari tempat ia berhenti. Pin sesi dengan `Ctrl+T` untuk membuat prosesnya tetap berjalan.

890* **Keluar secara tidak terduga sementara supervisor berjalan**: supervisor memulai ulang proses. Mengakhiri sesi yang Anda kirim ke latar belakang sendiri dengan `←` atau `/background`, misalnya dengan `kill`, menandainya sebagai berhenti alih-alih memulai ulangnya. Untuk sesi yang berakhir dengan shutdown, lihat [Sesi menampilkan sebagai gagal atau berhenti setelah shutdown](#sessions-show-as-failed-after-shutdown).893* **Keluar secara tidak terduga sementara supervisor berjalan**: supervisor memulai ulang proses. Mengakhiri sesi yang Anda kirim ke latar belakang sendiri dengan `←` atau `/background`, misalnya dengan `kill`, menandainya sebagai berhenti alih-alih memulai ulangnya. Untuk sesi yang berakhir dengan shutdown, lihat [Sesi menampilkan sebagai gagal atau berhenti setelah shutdown](#sessions-show-as-failed-after-shutdown).

891* **Setelah auto-update**: supervisor memulai ulang dirinya sendiri ke versi baru dan memindahkan sesi idle ke latar belakang. Sesi yang bekerja, menunggu Anda, atau terhubung tidak terganggu.894* **Setelah auto-update**: supervisor memulai ulang dirinya sendiri ke versi baru dan memindahkan sesi idle ke latar belakang. Sesi yang bekerja, menunggu Anda, atau terhubung tidak terganggu.

895* **Supervisor itu sendiri berhenti**, misalnya karena prosesnya diakhiri dari luar Claude Code: di macOS dan Linux, proses setiap sesi menunggu sekitar satu menit agar supervisor baru terhubung kembali dengannya, dan berhenti jika tidak ada yang terhubung. Jalankan `claude agents` di shell Anda dalam satu menit tersebut untuk memulai supervisor baru dan membuat sesi Anda tetap berjalan. Jika satu menit berlalu lebih dulu, sesi berhenti, tetapi percakapan yang tersimpan tetap ada di disk: lampirkan atau balas ke sesi dan sesi tersebut akan dimulai ulang dari percakapan yang tersimpan, seperti dijelaskan di [Sesi menampilkan sebagai gagal atau berhenti setelah shutdown](#sessions-show-as-failed-after-shutdown).

892 896 

893Ketika proses sesi berhenti atau dimulai ulang, perintah shell latar belakang, alur kerja dinamis, dan subagent latar belakang yang Claude mulai di dalamnya dibawa ke proses berikutnya; monitor yang berjalan dan perintah shell yang subagent mulai berhenti dengan proses. Menghapus sesi menghentikan semua yang dibawanya. Untuk menghentikan semuanya dengan proses alih-alih membawanya, atur [`CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF`](/docs/id/env-vars#variables) ke `1`.897Ketika proses sesi berhenti atau dimulai ulang, perintah shell latar belakang, alur kerja dinamis, dan subagent latar belakang yang Claude mulai di dalamnya dibawa ke proses berikutnya; monitor yang berjalan dan perintah shell yang subagent mulai berhenti dengan proses. Menghapus sesi menghentikan semua yang dibawanya. Untuk menghentikan semuanya dengan proses alih-alih membawanya, atur [`CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF`](/docs/id/env-vars#variables) ke `1`.

894 898 


911 915 

912Untuk memeriksa status ini tanpa membaca file secara langsung, jalankan `claude daemon status`. Ini melaporkan apakah supervisor dapat dijangkau, ID proses dan versinya, direktori soket, dan berapa banyak sesi latar belakang yang aktif.916Untuk memeriksa status ini tanpa membaca file secara langsung, jalankan `claude daemon status`. Ini melaporkan apakah supervisor dapat dijangkau, ID proses dan versinya, direktori soket, dan berapa banyak sesi latar belakang yang aktif.

913 917 

914Perintah ini juga memperingatkan ketika supervisor yang berjalan berada pada versi yang berbeda dari `claude` yang Anda panggil, yang terjadi setelah pembaruan yang belum dimulai ulang oleh supervisor. Peringatan menunjukkan kedua versi dan memberi tahu Anda untuk menjalankan `claude daemon stop --any` untuk mengambil versi baru. Ketika Claude Code diinstal sebagai layanan OS, perintah yang disarankan adalah `claude daemon stop` tanpa flag.918Perintah ini juga memperingatkan ketika supervisor yang berjalan berada pada versi yang berbeda dari `claude` yang Anda panggil, yang terjadi setelah pembaruan yang belum dimulai ulang oleh supervisor. Peringatan menunjukkan kedua versi dan memberi tahu Anda untuk menjalankan `claude daemon stop --any` untuk mengambil versi baru.

915 919 

916Sesi bertahan melalui ketidaksesuaian versi itu utuh: versi Claude Code yang lebih lama yang memperbarui `state.json` sesi menyimpan bidang yang tidak dikenalinya dan membuat sesi tetap terdaftar. Daftar sesi dalam `roster.json` mengikuti aturan yang sama, jadi sesi yang dimulai oleh versi yang lebih baru tetap dapat dijangkau dan terus menerima masukan setelah supervisor dimulai ulang.920Sesi bertahan melalui ketidaksesuaian versi itu utuh: versi Claude Code yang lebih lama yang memperbarui `state.json` sesi menyimpan bidang yang tidak dikenalinya dan membuat sesi tetap terdaftar. Daftar sesi dalam `roster.json` mengikuti aturan yang sama, jadi sesi yang dimulai oleh versi yang lebih baru tetap dapat dijangkau dan terus menerima masukan setelah supervisor dimulai ulang.

917 921 


963 967 

964Mematikan atau memulai ulang mesin Anda menghentikan sesi latar belakang yang sedang berjalan. Sesi yang menunggu input Anda tetap di bawah `Needs input` saat Anda kembali. Untuk sesi yang sedang berjalan lainnya, apa yang ditampilkan tampilan agent tergantung pada berapa lama yang lalu sesi terakhir membuat kemajuan:968Mematikan atau memulai ulang mesin Anda menghentikan sesi latar belakang yang sedang berjalan. Sesi yang menunggu input Anda tetap di bawah `Needs input` saat Anda kembali. Untuk sesi yang sedang berjalan lainnya, apa yang ditampilkan tampilan agent tergantung pada berapa lama yang lalu sesi terakhir membuat kemajuan:

965 969 

966* Dalam 48 jam, sesi menampilkan sebagai gagal. Lampirkan atau balas dan sesi itu dimulai ulang dari tempat ia berhenti.970* Dalam 48 jam, sesi menampilkan sebagai gagal. Lampirkan atau balas sesi tersebut dan sesi itu dimulai ulang dari percakapan yang disimpannya. Untuk melanjutkan pekerjaan yang terputus, kirim balasan yang memintanya untuk melanjutkan.

967* Melewati 48 jam, seperti setelah mesin mati selama berhari-hari, sesi menampilkan sebagai dihentikan dengan `ended while the background service was off`. Tekan `Enter` pada baris dan footer menampilkan `Press enter again to resume this session (it ended while the background service was off), or ctrl+x to delete it.` Tekan `Enter` pada baris yang sama lagi untuk melanjutkan percakapan yang disimpannya. Balasan, atau `claude attach <id>`, melanjutkannya tanpa prompt footer itu.971* Melewati 48 jam, seperti setelah mesin mati selama berhari-hari, sesi menampilkan sebagai dihentikan dengan `ended while the background service was off`. Tekan `Enter` pada baris dan footer menampilkan `Press enter again to resume this session (it ended while the background service was off), or ctrl+x to delete it.` Tekan `Enter` pada baris yang sama lagi untuk melanjutkan percakapan yang disimpannya. Balasan, atau `claude attach <id>`, melanjutkannya tanpa prompt footer itu.

968 972 

969Ketika [pembersihan transkrip](/docs/id/settings-reference#cleanupperioddays) telah menghapus percakapan yang disimpan dari sesi yang dihentikan, Claude Code menolak untuk membuka baris: pesan mengatakan tidak ada yang dapat dilanjutkan. `claude rm <id>` menghapus baris, kecuali dalam [kasus yang disimpan](#what-deleting-a-session-removes) yang dijelaskan di atas, dan `claude respawn <id>` menjalankan prompt aslinya lagi. Lihat [Percakapan yang disimpan sesi ini tidak lagi ada di disk](/docs/id/errors#this-sessions-saved-conversation-is-no-longer-on-disk).973Ketika [pembersihan transkrip](/docs/id/settings-reference#cleanupperioddays) telah menghapus percakapan yang disimpan dari sesi yang dihentikan, Claude Code menolak untuk membuka baris: pesan mengatakan tidak ada yang dapat dilanjutkan. `claude rm <id>` menghapus baris, kecuali dalam [kasus yang disimpan](#what-deleting-a-session-removes) yang dijelaskan di atas, dan `claude respawn <id>` menjalankan prompt aslinya lagi. Lihat [Percakapan yang disimpan sesi ini tidak lagi ada di disk](/docs/id/errors#this-sessions-saved-conversation-is-no-longer-on-disk).


1022claude daemon stop --any --keep-workers1026claude daemon stop --any --keep-workers

1023```1027```

1024 1028 

1025Supervisor baru terhubung kembali ke sesi yang sedang berjalan. Tanpa `--keep-workers`, perintah mengakhiri sesi latar belakang juga. Flag `--any` mengonfirmasi Anda ingin menghentikan supervisor yang dimulai sesuai permintaan daripada sebagai layanan yang diinstal, yang merupakan default.1029Kemudian jalankan `claude agents` di shell Anda untuk memulai supervisor baru. Jika Anda melakukannya dalam [sekitar satu menit](#the-supervisor-process) setelah penghentian, supervisor tersebut terhubung kembali ke sesi yang masih berjalan, dan pekerjaannya berlanjut tanpa gangguan. Jika Anda membutuhkan waktu lebih lama, di macOS dan Linux sesi tersebut sudah berhenti dengan sendirinya pada saat itu, dan melampirkan atau membalas salah satunya akan memulai ulang sesi itu dari percakapan yang disimpannya. Tanpa `--keep-workers`, perintah mengakhiri sesi latar belakang juga. Flag `--any` membuat perintah menghentikan supervisor yang dimulai Claude Code sesuai permintaan.

1026 1030 

1027Supervisor yang dimulai tetapi tidak dapat menerima koneksi keluar dan melepaskan kuncinya sendiri, jadi `claude agents` berikutnya memulai yang baru tanpa penghentian manual ini. Langkah-langkah di atas berlaku ketika supervisor yang sedang berjalan macet.1031Supervisor yang dimulai tetapi tidak dapat menerima koneksi keluar dan melepaskan kuncinya sendiri, jadi `claude agents` berikutnya memulai yang baru tanpa penghentian manual ini. Langkah-langkah di atas berlaku ketika supervisor yang sedang berjalan macet.

1028 1032 


1040claude daemon stop --any --keep-workers1044claude daemon stop --any --keep-workers

1041```1045```

1042 1046 

1043`claude agents` atau `claude --bg` berikutnya memulai supervisor segar yang membaca kredensial yang disimpan Anda. Jika Anda mengautentikasi dengan environment variable seperti `ANTHROPIC_API_KEY` daripada `/login`, jalankan perintah berikutnya dari shell tempat variabel diatur.1047Dalam [sekitar satu menit](#the-supervisor-process), jalankan `claude agents` atau `claude --bg` di shell Anda untuk memulai supervisor segar yang membaca kredensial yang disimpan Anda. Jika Anda mengautentikasi dengan environment variable seperti `ANTHROPIC_API_KEY` daripada `/login`, jalankan perintah berikutnya dari shell tempat variabel diatur.

1044 1048 

1045Lihat [referensi kesalahan](/docs/id/errors#could-not-resolve-authentication-method) untuk daftar lengkap penyebab dan perbaikan.1049Lihat [referensi kesalahan](/docs/id/errors#could-not-resolve-authentication-method) untuk daftar lengkap penyebab dan perbaikan.

1046 1050 

analytics.md +1 −1

Details

67* **"GitHub app required"**: pasang aplikasi GitHub untuk melihat metrik kontribusi67* **"GitHub app required"**: pasang aplikasi GitHub untuk melihat metrik kontribusi

68* **"Data processing in progress"**: periksa kembali dalam beberapa hari dan konfirmasi aplikasi GitHub terpasang jika data tidak muncul68* **"Data processing in progress"**: periksa kembali dalam beberapa hari dan konfirmasi aplikasi GitHub terpasang jika data tidak muncul

69 69 

70Metrik kontribusi mendukung GitHub Cloud dan GitHub Enterprise Server.70Metrik kontribusi mencakup repositori yang di-host di github.com. Untuk repositori di [GitHub Enterprise Server](/docs/id/github-enterprise-server), dasbor analitik hanya menampilkan metrik penggunaan.

71 71 

72<h3 id="review-summary-metrics">72<h3 id="review-summary-metrics">

73 Tinjau metrik ringkasan73 Tinjau metrik ringkasan

Details

96 <Step title="Tambahkan pengguna">96 <Step title="Tambahkan pengguna">

97 Anda dapat menambahkan pengguna melalui salah satu metode:97 Anda dapat menambahkan pengguna melalui salah satu metode:

98 98 

99 * Undang pengguna secara massal dari dalam Console: Settings -> Members -> Invite99 * Undang pengguna secara massal dari halaman Members di Console di [platform.claude.com/settings/members](https://platform.claude.com/settings/members): klik **Invite**

100 * [Atur SSO](https://support.claude.com/en/articles/13132885-setting-up-single-sign-on-sso)100 * [Atur SSO](https://support.claude.com/en/articles/13132885-setting-up-single-sign-on-sso)

101 </Step>101 </Step>

102 102 

Details

1> ## Documentation Index

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

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

4 

5# Biaya permintaan pengklasifikasi auto mode

6 

7> Selesaikan pemberitahuan Claude Code yang mengatakan sesi ini tidak memenuhi syarat untuk permintaan pengklasifikasi tanpa biaya auto mode: apa artinya, mengapa muncul, dan apa yang harus dilakukan.

8 

9Dalam [mode otomatis](/docs/id/permission-modes#eliminate-prompts-with-auto-mode), classifier memeriksa tindakan seperti perintah shell dan permintaan jaringan sebelum dijalankan. Di mana pun [pemeriksaan sisi server aktif](/docs/id/permission-modes#server-side-classifier-review), server melakukan pemeriksaan tersebut sebagai bagian dari permintaan model sesi itu sendiri, tanpa biaya. Dialog ini berarti pemeriksaan server tidak menjangkau sesi Anda, jadi Claude Code membuat permintaan classifier-nya sendiri, dan pada akun Anda permintaan tersebut diperhitungkan terhadap penggunaan token Anda:

10 

11```text theme={null}

12We're changing auto mode to no longer charge for classifier requests in Claude Code. However, this session isn't eligible.

13```

14 

15Pada prompt, Claude Code menahan tindakan pertama yang akan diperiksa dengan cara itu sampai Anda menjawab. Tidak ada yang rusak: mode otomatis terus bekerja, dan permintaan classifier-nya ditagih seperti sebelumnya. Penyebab paling umum adalah gateway LLM atau proxy antara Claude Code dan API, dan ketika Claude Code dapat mengidentifikasinya, dialog menamakannya. Tekan **Enter** untuk melanjutkan, atau lihat [Buat sesi memenuhi syarat](#make-the-session-eligible) untuk mencegahnya muncul di sesi baru.

16 

17<h2 id="respond-to-the-notice">

18 Merespons pemberitahuan

19</h2>

20 

21Pemberitahuan menahan tindakan sampai Anda menjawabnya:

22 

23* **Enter** melanjutkan: tindakan yang ditahan dan sisa sesi menggunakan permintaan classifier Claude Code sendiri, ditagih sebagai penggunaan token seperti sebelumnya, dan pemberitahuan tidak muncul lagi dalam sesi itu. Ketika pemberitahuan menyebutkan gateway, mengakuinya mencegahnya muncul kembali di mesin ini selama 24 jam. Ketika tidak, pemberitahuan kembali muncul saat sesi berikutnya jatuh kembali.

24* **Esc** atau **Ctrl+C** membatalkan: tindakan yang ditahan tidak berjalan dan giliran saat ini berhenti, dengan sesi masih dalam mode otomatis. Tidak ada yang diingat, jadi pemberitahuan muncul lagi sebelum tindakan yang diperiksa berikutnya.

25 

26Untuk berhenti menggunakan mode otomatis, alihkan mode izin dengan `Shift+Tab` setelah Anda menjawab.

27 

28Ketika pemberitahuan tidak dapat menunggu jawaban, Claude Code melaporkan teks yang sama dan sesi berlanjut dalam mode otomatis, kecuali pengakuan gateway pada mesin ini dalam 24 jam terakhir telah menutupnya. Dalam [mode non-interaktif](/docs/id/headless) dengan `-p` ia mencetak teks ke stderr, dan dalam output `stream-json` ia mengirimkan pesan peringatan `system`, yang dapat dibaca aplikasi Agent SDK dari aliran pesan.

29 

30<h2 id="make-the-session-eligible">

31 Buat sesi memenuhi syarat

32</h2>

33 

34Jika gateway adalah penyebabnya, minta admin perusahaan Anda atau penyedia gateway Anda untuk meneruskan permintaan dan balasan tanpa perubahan. Itu berarti meneruskan header permintaan dan bidang badan seperti adanya, termasuk yang tidak dikenali gateway seperti bidang permintaan `safeguards`, dan mengembalikan respons dan acara streaming tanpa menghapus kunci seperti bidang `safeguard_results` atau menulis ulang ID penggunaan alat, seperti yang dijelaskan dalam [panduan kompatibilitas gateway](/docs/id/llm-gateway-protocol#feature-pass-through). Gateway yang meneruskan lalu lintas dengan cara ini terus bekerja dengan fitur ini dan dengan fitur mendatang. Sesi baru kemudian menggunakan pemeriksaan server lagi.

35 

36Jika Anda sudah tahu bahwa gateway Anda tidak dapat menyediakan pemeriksaan server, beri tahu Claude Code untuk tidak memintanya di sana dengan menetapkan `CLAUDE_CODE_AUTO_MODE_SERVER` ke `0` sebelum Anda memulai sesi, di shell Anda atau di [kunci pengaturan `env`](/docs/id/settings-reference#env):

37 

38```bash theme={null}

39export CLAUDE_CODE_AUTO_MODE_SERVER=0

40```

41 

42Permintaan classifier kemudian selalu milik Claude Code sendiri, ditagih dengan cara yang sama, dan pemberitahuan tidak muncul. Pada koneksi langsung ke API Anthropic, variabel memerlukan Claude Code v2.1.281 atau lebih baru. Menetapkan `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1` sementara `CLAUDE_CODE_AUTO_MODE_SERVER` tidak disetel mematikan pemeriksaan server juga, kecuali seperti yang dijelaskan dalam [Nonaktifkan kemampuan pra-rilis](/docs/id/llm-gateway-protocol#disable-pre-release-capabilities).

43 

44`CLAUDE_CODE_AUTO_MODE_SERVER` adalah pengaturan sementara dan mungkin dihapus dalam rilis yang lebih baru.

45 

46<h2 id="why-the-notice-appears">

47 Mengapa pemberitahuan muncul

48</h2>

49 

50[Tinjauan classifier sisi server](/docs/id/permission-modes#server-side-classifier-review) mencantumkan sesi mana yang meminta server untuk pemeriksaan classifier. Paket Pro, Max, dan Team tidak pernah menampilkan pemberitahuan. Ketika muncul, penyebab umum adalah:

51 

52* **Gateway LLM atau proxy berada di jalur**: yang menghapus atau menulis ulang header permintaan, menghilangkan bidang permintaan yang tidak dikenalinya, atau mengedit respons. Server kemudian tidak pernah menerima permintaan untuk pemeriksaan, atau Claude Code tidak pernah menerima hasilnya. Ketika konfigurasi Anda atau respons mengidentifikasi gateway, pemberitahuan menamakannya.

53* **Pemeriksaan sisi server belum mencapai platform, wilayah, atau kredensial Anda**: apakah platform atau wilayah melakukannya tergantung pada peluncuran platform tersebut. Jika Anda melihat pemberitahuan tanpa gateway atau proxy di jalur dan terus muncul, ini kemungkinan penyebabnya. Untuk mengonfirmasi, hubungi dukungan atau admin perusahaan Anda, atau laporkan dengan `/feedback`.

54 

55Untuk memeriksa sesi yang dalam mode otomatis, jalankan `/status` di prompt Claude Code: baris **Auto mode server** membaca `Enabled` sementara pemeriksaan server memutuskan tindakan sesi dan `Disabled` setelah sesi telah jatuh kembali.

56 

57Ketika gateway memotong respons pendek atau menulis ulang hasil ke dalam bentuk yang tidak dapat dibaca Claude Code, Anda mendapatkan penolakan tanpa putusan sebagai pengganti pemberitahuan ini; lihat [Tinjauan classifier sisi server](/docs/id/permission-modes#server-side-classifier-review).

58 

59<h2 id="related-resources">

60 Sumber daya terkait

61</h2>

62 

63* [Mode otomatis](/docs/id/permission-modes#eliminate-prompts-with-auto-mode): apa itu mode otomatis dan apa yang diblokir secara default

64* [Tinjauan pengklasifikasi sisi server](/docs/id/permission-modes#server-side-classifier-review): sesi mana yang meminta server untuk memeriksa tindakan, dan versi Claude Code yang diperlukan untuk masing-masing

65* [Panduan kompatibilitas gateway](/docs/id/llm-gateway-protocol#feature-pass-through): apa yang rusak ketika gateway menghapus header atau bidang badan

66* [Server tidak mengembalikan keputusan keamanan](/docs/id/errors#the-server-returned-no-safety-verdict): penolakan yang Anda lihat ketika server tidak memberikan keputusan untuk suatu tindakan

67* [Kelola biaya secara efektif](/docs/id/costs): lacak penggunaan token dan kurangi biaya Claude Code

Details

383 383 

384Dua tempat lain di layar yang melaporkan penolakan menghilangkan perintah atau URL: pemberitahuan di dekat kotak input, seperti `bash denied by auto mode · [Data Exfiltration] · /permissions`, memberikan alat dan alasannya, dan tab **Recently denied** mencantumkan perintah shell berdasarkan deskripsi yang ditulis Claude untuknya. Untuk menangkap input yang tepat dari penolakan ini secara terprogram, tambahkan [`PermissionDenied` hook](/docs/id/hooks#permissiondenied), yang menerimanya sebagai `tool_input`.384Dua tempat lain di layar yang melaporkan penolakan menghilangkan perintah atau URL: pemberitahuan di dekat kotak input, seperti `bash denied by auto mode · [Data Exfiltration] · /permissions`, memberikan alat dan alasannya, dan tab **Recently denied** mencantumkan perintah shell berdasarkan deskripsi yang ditulis Claude untuknya. Untuk menangkap input yang tepat dari penolakan ini secara terprogram, tambahkan [`PermissionDenied` hook](/docs/id/hooks#permissiondenied), yang menerimanya sebagai `tool_input`.

385 385 

386Teks di bawah panggilan memberi tahu Anda apakah ada yang perlu diperbaiki. Teks yang melaporkan masalah dengan pengklasifikasi itu sendiri, seperti model yang `is temporarily unavailable` atau kesalahan pengklasifikasi, berarti Claude Code memblokir panggilan tanpa putusan akhir dari pengklasifikasi; lihat [Auto mode cannot determine the safety of an action](/docs/id/errors#auto-mode-cannot-determine-the-safety-of-an-action) untuk mengetahui apa yang harus dilakukan. Jika tidak, baris yang berbunyi `Denied by auto mode classifier` dengan alasan seperti `[Production Deploy]` atau `Blocked by classifier` berarti pengklasifikasi menilai panggilan tidak aman, jadi pilih perbaikan dari apa yang dicoba oleh panggilan untuk dicapai atau lakukan:386Teks di bawah panggilan memberi tahu Anda apakah ada yang perlu diperbaiki. Baris redup `Not run · auto mode's check had no usable answer`, atau teks yang melaporkan masalah dengan pengklasifikasi itu sendiri, seperti `Auto mode could not evaluate this action`, berarti Claude Code memblokir panggilan tanpa putusan dari pengklasifikasi. Untuk baris `Not run`, tekan `Ctrl+O` untuk membaca pesan lengkapnya, lalu lihat [Auto mode cannot determine the safety of an action](/docs/id/errors#auto-mode-cannot-determine-the-safety-of-an-action) atau [The server returned no safety verdict](/docs/id/errors#the-server-returned-no-safety-verdict) untuk mengetahui apa yang harus dilakukan.

387 

388Jika tidak, baris yang berbunyi `Denied by auto mode classifier` dengan alasan seperti `[Production Deploy]` atau `Blocked by classifier` berarti pengklasifikasi menilai panggilan tidak aman, jadi pilih perbaikan dari apa yang dicoba oleh panggilan untuk dicapai atau lakukan:

387 389 

388* Tujuan yang Claude butuhkan sepanjang tugas, seperti registri paket, domain internal, atau host repositori: tambahkan ke `autoMode.environment`.390* Tujuan yang Claude butuhkan sepanjang tugas, seperti registri paket, domain internal, atau host repositori: tambahkan ke `autoMode.environment`.

389* Perintah yang ingin Anda jalankan tanpa tinjauan dari sekarang: tambahkan aturan `allow`.391* Perintah yang ingin Anda jalankan tanpa tinjauan dari sekarang: tambahkan aturan `allow`.

Details

114 Pesan yang dikirim di tengah giliran tidak di-checkpoint114 Pesan yang dikirim di tengah giliran tidak di-checkpoint

115</h3>115</h3>

116 116 

117Ketika pesan yang Anda [antri saat Claude bekerja](/docs/id/interactive-mode#queue-messages-while-claude-works) mencapai Claude dalam giliran yang sedang berjalan, pesan tersebut bergabung dengan giliran itu alih-alih memulai yang baru. Pesan muncul dalam percakapan, tetapi Claude Code tidak membuat checkpoint untuknya. Pesan antri yang Claude Code kirim sebagai bagian dari giliran baru mendapatkan checkpoint seperti biasa, termasuk ketika beberapa pesan antri [berbagi giliran itu](/docs/id/interactive-mode#when-claude-code-sends-what-you-queued).117Di menu rewind, pesan yang Anda [ketik saat Claude masih bekerja](/docs/id/interactive-mode#queue-messages-while-claude-works) dapat ditandai **No code restore**. Claude membaca pesan tersebut sebelum gilirannya berakhir. [Checkpoint diambil untuk prompt yang memulai giliran](#how-checkpoints-work), sehingga pesan ini tidak memiliki checkpoint sendiri. Edit yang Claude buat setelah membacanya dihitung sebagai bagian dari prompt yang memulai giliran tersebut.

118 118 

119Untuk membatalkan edit yang Claude buat setelah pesan seperti itu, rewind ke prompt yang memulai giliran. Itu melakukan rewind seluruh giliran, termasuk pekerjaan yang Claude lakukan sebelum pesan Anda tiba.119Anda tidak perlu melakukan apa pun terhadap pesan itu sendiri. Untuk membatalkan perubahan file dari bagian sesi tersebut, pilih prompt yang memulai giliran dan pilih **Restore code** atau **Restore code and conversation**. Itu mengembalikan edit file Claude dari seluruh giliran, termasuk edit yang dibuat sebelum pesan Anda tiba. Memilih pesan yang ditandai tetap menawarkan **Restore conversation**, yang melakukan rewind percakapan ke pesan tersebut dan membiarkan file Anda apa adanya.

120 120 

121<h3 id="symlinked-and-hard-linked-paths-not-restored">121<h3 id="symlinked-and-hard-linked-paths-not-restored">

122 Jalur symlink dan hard-link tidak dipulihkan122 Jalur symlink dan hard-link tidak dipulihkan

chrome.md +3 −4

Details

129 Dialog izin dalam sesi VS Code129 Dialog izin dalam sesi VS Code

130</h3>130</h3>

131 131 

132Dalam sesi VS Code, apakah Claude Code meminta konfirmasi Anda sebelum tindakan browser bergantung pada cara sesi tersebut terhubung ke browser Anda:132Dalam sesi VS Code, ketika Claude Code meminta konfirmasi sebelum tindakan browser, dialog izin muncul sebagai kartu di panel chat. Ketika tindakan tersebut menargetkan situs yang belum Anda izinkan, kartu tersebut juga menawarkan untuk mengizinkan situs itu.

133 133 

134* **Anda mengetik `@browser`**: ekstensi menyetujui setiap tindakan browser yang jika tidak demikian akan ditanyakan Claude Code kepada Anda.134Dalam sesi yang terhubung ke browser Anda saat dimulai karena [Enabled by default](#enable-chrome-by-default) aktif, Claude Code meminta konfirmasi Anda sebelum tindakan browser di situs yang belum Anda izinkan, dalam mode izin Manual, Edit automatically, Auto, dan Bypass permissions. Dalam mode izin Auto dan Bypass permissions, hal ini berlaku hingga Anda mengetik `@browser` dalam sesi tersebut.

135* **Pengaturan [Enabled by default](#enable-chrome-by-default) menghubungkannya saat dimulai**: Claude Code meminta konfirmasi Anda sebelum tindakan browser di situs yang belum Anda izinkan, dalam mode izin Manual, Edit automatically, Auto, dan Bypass permissions, hingga Anda mengetik `@browser` dalam sesi tersebut.

136 135 

137<h3 id="browser-tools-in-plan-mode">136<h3 id="browser-tools-in-plan-mode">

138 Alat browser dalam plan mode137 Alat browser dalam plan mode

139</h3>138</h3>

140 139 

141Dalam [plan mode](/docs/id/permission-modes#analyze-before-you-edit-with-plan-mode), dialog izin muncul sebelum Claude merekam GIF, membuka tab baru, atau menjalankan pintasan, kecuali dalam sesi VS Code di mana Anda mengetik [`@browser`](#permission-prompts-in-vs-code-sessions). Dalam sesi CLI interaktif, jika [mode bypass permissions tersedia](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) dan [pengambilan feature-flag](/docs/id/env-vars#features-that-need-feature-flag-fetching) dimatikan, panggilan ini berjalan tanpa dialog izin.140Dalam [plan mode](/docs/id/permission-modes#analyze-before-you-edit-with-plan-mode), dialog izin muncul sebelum Claude merekam GIF, membuka tab baru, atau menjalankan pintasan. Dalam sesi CLI interaktif, jika [mode bypass permissions tersedia](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) dan [pengambilan feature-flag](/docs/id/env-vars#features-that-need-feature-flag-fetching) dimatikan, panggilan ini berjalan tanpa dialog izin.

142 141 

143Panggilan `tabs_context_mcp` juga meminta ketika menetapkan `createIfEmpty`, dan begitu juga panggilan `browser_batch` yang mencakup salah satu tindakan ini.142Panggilan `tabs_context_mcp` juga meminta ketika menetapkan `createIfEmpty`, dan begitu juga panggilan `browser_batch` yang mencakup salah satu tindakan ini.

144 143 

Details

261 Hubungkan pengembang261 Hubungkan pengembang

262</h2>262</h2>

263 263 

264Pengembang terhubung dari laptop mereka sendiri dengan satu kali masuk browser, menggunakan akun kerja perusahaan mereka. Mereka tidak memerlukan akun claude.ai, kunci API, atau langganan, karena permintaan ke model melewati gateway menggunakan kredensial upstream organisasi. Koneksi didorong oleh [pengaturan yang dikelola sisi klien](/docs/id/claude-apps-gateway-config#client-side-managed-settings) yang Anda dorong melalui MDM, jadi tidak ada pengaturan manual di sisi pengembang; bagian ini mencakup apa yang dikonfigurasi admin.264Pengembang terhubung dari laptop mereka sendiri dengan satu kali masuk browser, menggunakan akun kerja perusahaan mereka. Mereka tidak memerlukan akun claude.ai, kunci API, atau langganan, karena permintaan ke model melewati gateway menggunakan kredensial upstream organisasi. Koneksi didorong oleh [pengaturan terkelola sisi klien](/docs/id/claude-apps-gateway-config#client-side-managed-settings) yang Anda dorong melalui MDM, dan bagian ini mencakup apa yang dikonfigurasi admin.

265 265 

266CLI memvalidasi sertifikat TLS leaf gateway pada koneksi pertama dan menyematkannya per nama host. Ini memeriksa pin tersebut lagi selama masuk, pada penyegaran sesi senyap, dan pada pengambilan pengaturan yang dikelola, sementara permintaan inferensi menggunakan validasi TLS standar tanpa pin. Permintaan yang dirutekan melalui proxy HTTPS melewati pemeriksaan pin, jadi tambahkan host gateway ke `NO_PROXY` untuk menjaganya tetap langsung.266CLI memvalidasi sertifikat TLS leaf gateway pada koneksi pertama dan menyematkannya per nama host. Ini memeriksa pin tersebut lagi selama masuk, pada penyegaran sesi senyap, dan pada pengambilan pengaturan yang dikelola, sementara permintaan inferensi menggunakan validasi TLS standar tanpa pin. Permintaan yang dirutekan melalui proxy HTTPS melewati pemeriksaan pin, jadi tambahkan host gateway ke `NO_PROXY` untuk menjaganya tetap langsung.

267 267 


285 Atur URL gateway285 Atur URL gateway

286</h3>286</h3>

287 287 

288Tiga kunci masuk dalam file [pengaturan yang dikelola](/docs/id/managed-settings#delivery-mechanisms) per-OS yang Anda terapkan melalui MDM atau langsung di disk. `forceLoginMethod` dan `forceLoginGatewayUrl` membuka `/login` langsung di layar **Cloud gateway** dengan URL terisi, dan `parentSettingsBehavior: "merge"` memungkinkan Claude Desktop mengirimkan daftar izin egress gateway ke sesi Claude Code yang diluncurkannya, dijelaskan dalam [Kirimkan kebijakan ke sesi Claude Desktop](#deliver-policy-to-claude-desktop-sessions):288Tiga kunci masuk dalam [file pengaturan terkelola](/docs/id/managed-settings#delivery-mechanisms) per-OS yang Anda terapkan melalui MDM atau langsung di disk. Untuk mesin tanpa pengaturan terkelola, lihat [Atur URL gateway dalam pengaturan pengguna](#set-the-gateway-url-in-user-settings) sebagai gantinya. `forceLoginMethod` dan `forceLoginGatewayUrl` membuka `/login` langsung di layar **Cloud gateway** dengan URL terisi, dan `parentSettingsBehavior: "merge"` memungkinkan Claude Desktop mengirimkan allowlist egress gateway ke sesi Claude Code yang diluncurkannya, dijelaskan dalam [Kirimkan kebijakan ke sesi Claude Desktop](#deliver-policy-to-claude-desktop-sessions):

289 289 

290```json theme={null}290```json theme={null}

291{291{


297 297 

298Pengembang menekan Enter untuk terhubung. Prompt sidik jari TLS [koneksi pertama](#connect-developers) masih muncul. Setelah file berada di mesin, pengembang yang belum menyelesaikan masuk gateway melihat salah satu pesan yang dijelaskan di bawah [Kebijakan administrator memerlukan masuk Cloud gateway](/docs/id/errors#administrator-policy-requires-a-cloud-gateway-sign-in). Pengembang yang memilih penyedia cloud melalui variabel lingkungan seperti `CLAUDE_CODE_USE_BEDROCK` tidak memerlukan masuk gateway.298Pengembang menekan Enter untuk terhubung. Prompt sidik jari TLS [koneksi pertama](#connect-developers) masih muncul. Setelah file berada di mesin, pengembang yang belum menyelesaikan masuk gateway melihat salah satu pesan yang dijelaskan di bawah [Kebijakan administrator memerlukan masuk Cloud gateway](/docs/id/errors#administrator-policy-requires-a-cloud-gateway-sign-in). Pengembang yang memilih penyedia cloud melalui variabel lingkungan seperti `CLAUDE_CODE_USE_BEDROCK` tidak memerlukan masuk gateway.

299 299 

300Pengembang tidak dapat mengatur ini secara manual. Pemilih masuk tidak memiliki opsi gateway, dan `forceLoginGatewayUrl` diabaikan dalam file pengaturan pengembang sendiri. `forceLoginMethod` saja, tanpa URL, meninggalkan pengembang di pesan "Hubungi administrator IT Anda". Kunci masuk milik file yang Anda dorong ke mesin, bukan di blok `managed.policies[].cli` gateway, yang hanya menjangkau klien yang sudah terhubung.300Pemilih masuk tidak memiliki opsi gateway, dan dalam pengaturan terkelola, `forceLoginMethod` saja, tanpa URL, meninggalkan pengembang di pesan "Contact your IT administrator". Kunci masuk termasuk dalam file yang Anda dorong ke mesin, bukan di blok `managed.policies[].cli` gateway, yang hanya menjangkau klien yang sudah terhubung.

301 

302<h4 id="set-the-gateway-url-in-user-settings">

303 Atur URL gateway dalam pengaturan pengguna

304</h4>

305 

306Pada mesin tanpa pengaturan terkelola, minta setiap pengembang menambahkan `forceLoginMethod` dan `forceLoginGatewayUrl` ke file pengaturan pengguna mereka sendiri, `~/.claude/settings.json`. Ini memerlukan Claude Code v2.1.295 atau lebih baru di mesin pengembang. Contoh ini menyebutkan gateway di `claude-gateway.internal.example.com`:

307 

308```json theme={null}

309{

310 "forceLoginMethod": "gateway",

311 "forceLoginGatewayUrl": "https://claude-gateway.internal.example.com"

312}

313```

314 

315Ketika pengembang menjalankan `/login` di prompt Claude Code, layar **Cloud gateway** terbuka pada alamat tersebut dan mereka menekan Enter untuk terhubung. Prompt sidik jari TLS [koneksi pertama](#connect-developers) masih muncul. Batasan berikut berlaku untuk kunci yang diatur dengan cara ini:

316 

317* **Hanya pengaturan pengguna**: Claude Code membaca kedua kunci dari `~/.claude/settings.json`, bukan dari `.claude/settings.json` atau `.claude/settings.local.json` milik proyek.

318* **Pengaturan terkelola menonaktifkannya**: setelah pengaturan administrator mencapai mesin melalui file pengaturan terkelola, plist macOS atau kebijakan HKLM Windows, atau [policy helper](/docs/id/settings-reference#policyhelper), Claude Code mengabaikan gateway yang disebutkan dalam pengaturan pengguna.

301 319 

302<h3 id="allow-a-gateway-on-public-address-space-you-own">320<h3 id="allow-a-gateway-on-public-address-space-you-own">

303 Izinkan gateway pada ruang alamat publik yang Anda miliki321 Izinkan gateway pada ruang alamat publik yang Anda miliki

Details

981 * **Kunci campuran**: file yang memiliki `code` dan `cli` sekaligus, atau ejaan lamanya `settings`, menghentikan gateway saat boot. Letakkan setiap blok di bawah satu kunci, dalam satu kali edit.981 * **Kunci campuran**: file yang memiliki `code` dan `cli` sekaligus, atau ejaan lamanya `settings`, menghentikan gateway saat boot. Letakkan setiap blok di bawah satu kunci, dalam satu kali edit.

982</Warning>982</Warning>

983 983 

984Pengaturan Claude Code suatu kebijakan, seperti aturan yang menolak pembacaan file `.env`, ditempatkan dalam blok di bawah kunci `cli` atau `code`. Kedua kunci menerima isi yang sama. Kunci menentukan di mana pengaturan ditegakkan:984Pengaturan Claude Code suatu kebijakan, seperti aturan yang menolak pembacaan file `.env`, diletakkan dalam blok di bawah kunci `cli` atau `code`. `code` adalah kunci yang direkomendasikan, dan `cli` adalah kunci lama. Kedua kunci menerima isi yang sama. Kunci tersebut menentukan di mana pengaturan ditegakkan:

985 985 

986* **`cli`**: terminal, ekstensi VS Code dan JetBrains, serta Agent SDK. Di bawah `cli`, tab Code di Claude Desktop mendapatkan [pengaturan turunan](#claude-desktop-overlay), sehingga aturan berlingkup seperti `Read(./.env)` tidak menghentikan pengguna di sana.986* **`cli`**: terminal, ekstensi VS Code dan JetBrains, serta Agent SDK. Di bawah `cli`, tab Code di Claude Desktop mendapatkan [pengaturan turunan](#claude-desktop-overlay), sehingga aturan berlingkup seperti `Read(./.env)` tidak menghentikan pengguna di sana.

987* **`code`**: tempat yang sama, dan tab Code di Claude Desktop juga dapat dicakup.987* **`code`**: tempat yang sama, dan tab Code di Claude Desktop juga dapat dicakup.

988 988 

989Pilihannya adalah apakah pengaturan ini juga harus mencakup tab Code. Jika tidak, jangan ubah apa pun. File yang menggunakan `cli` berfungsi seperti sebelumnya, dan gateway yang menemukan `cli` dalam kebijakan dengan kunci [`desktop`](#claude-desktop-overlay) memberikan peringatan saat boot dan tetap mulai. Untuk mencakup tab Code, beralihlah ke `code`, kunci yang direkomendasikan.989File yang menggunakan `cli` tetap berfungsi seperti sebelumnya, dan gateway yang menemukan `cli` dalam kebijakan dengan kunci [`desktop`](#claude-desktop-overlay) memberi peringatan saat boot dan tetap dimulai. Beralihlah ke `code` agar pengaturan juga dapat mencakup tab Code.

990 990 

991Sebelum beralih, baca [Menerapkan pengaturan `code` di tab Code](#apply-code-settings-in-the-code-tab). Kebijakan memerlukan kunci `desktop` dan mesin pengguna memerlukan penyiapan sebelum pengaturan berlaku di sana, dan pencarian web dimatikan di Claude Desktop.991Sebelum beralih, baca [Menerapkan pengaturan `code` di tab Code](#apply-code-settings-in-the-code-tab). Kebijakan memerlukan kunci `desktop` dan mesin pengguna memerlukan penyiapan sebelum pengaturan berlaku di sana, dan pencarian web dimatikan di Claude Desktop.

992 992 


1713 1713 

1714Untuk Claude Desktop, atur key `bootstrapUrl` dalam [managed configuration](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop sendiri ke `<listen.public_url>/user/bootstrap`. Sign-in flow dan per-group policy kemudian cocok dengan CLI's setelah policy opt-in server-side dengan key `desktop`; tanpa opt-in, `/user/bootstrap` mengembalikan 404. Lihat [Claude Desktop overlay](#claude-desktop-overlay) untuk bagian server-side.1714Untuk Claude Desktop, atur key `bootstrapUrl` dalam [managed configuration](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop sendiri ke `<listen.public_url>/user/bootstrap`. Sign-in flow dan per-group policy kemudian cocok dengan CLI's setelah policy opt-in server-side dengan key `desktop`; tanpa opt-in, `/user/bootstrap` mengembalikan 404. Lihat [Claude Desktop overlay](#claude-desktop-overlay) untuk bagian server-side.

1715 1715 

1716Claude Code menghormati [`forceLoginGatewayUrl`](/docs/id/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/id/settings-reference#gatewayinternalnetworks), dan nilai `"gateway"` dari [`forceLoginMethod`](/docs/id/settings-reference#forceloginmethod) hanya dari managed source di mesin: `managed-settings.json`, plist macOS atau Windows HKLM registry, atau policy helper. Menetapkannya dalam `~/.claude/settings.json` developer sendiri atau dalam gateway payload tidak mengonfigurasi gateway sign-in.1716Claude Code menghormati [`forceLoginGatewayUrl`](/docs/id/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/id/settings-reference#gatewayinternalnetworks), dan nilai `"gateway"` dari [`forceLoginMethod`](/docs/id/settings-reference#forceloginmethod) dari managed source di mesin: `managed-settings.json`, plist macOS atau Windows HKLM registry, atau policy helper. Menetapkannya dalam gateway payload tidak mengonfigurasi gateway sign-in. Untuk `~/.claude/settings.json` milik developer sendiri, lihat [Set the gateway URL in user settings](/docs/id/claude-apps-gateway#set-the-gateway-url-in-user-settings).

1717 1717 

1718Tinggalkan `forceLoginMethod` dan `forceLoginOrgUUID` di luar payload. Claude Code masih membaca kedua keys dari payload untuk startup credential check-nya, jadi developer yang menyimpan credential yang dikeluarkan Anthropic di mesin mendapatkan startup exit yang dijelaskan di bawah [Administrator policy requires a Cloud gateway sign-in](/docs/id/errors#administrator-policy-requires-a-cloud-gateway-sign-in) bahkan setelah mereka sign in.1718Tinggalkan `forceLoginMethod` dan `forceLoginOrgUUID` di luar payload. Claude Code masih membaca kedua keys dari payload untuk startup credential check-nya, jadi developer yang menyimpan credential yang dikeluarkan Anthropic di mesin mendapatkan startup exit yang dijelaskan di bawah [Administrator policy requires a Cloud gateway sign-in](/docs/id/errors#administrator-policy-requires-a-cloud-gateway-sign-in) bahkan setelah mereka sign in.

1719 1719 

Details

135 Dorong URL gateway ke mesin pengembang135 Dorong URL gateway ke mesin pengembang

136</h3>136</h3>

137 137 

138Setelah gateway melayani, dorong `forceLoginMethod`, `forceLoginGatewayUrl`, dan `parentSettingsBehavior: "merge"` ke mesin setiap pengembang melalui pengaturan terkelola, melalui MDM atau dengan menulis `managed-settings.json` per-OS secara langsung. Tanpa ini, `/login` menampilkan pemilih akun standar tanpa opsi gateway.138Setelah gateway melayani, dorong `forceLoginMethod`, `forceLoginGatewayUrl`, dan `parentSettingsBehavior: "merge"` ke mesin setiap pengembang melalui pengaturan terkelola, melalui MDM atau dengan menulis `managed-settings.json` per-OS secara langsung.

139 139 

140Setelah Anda menyebarkan kunci, Claude Code berhenti menggunakan kunci API sisa atau login claude.ai di mesin, jadi rencanakan push bersama dengan instruksi sign-in Anda. [Kebijakan administrator memerlukan sign-in gateway Cloud](/docs/id/errors#administrator-policy-requires-a-cloud-gateway-sign-in) menjelaskan pesan yang dilihat pengembang.140Setelah Anda menyebarkan kunci, Claude Code berhenti menggunakan kunci API sisa atau login claude.ai di mesin, jadi rencanakan push bersama dengan instruksi sign-in Anda. [Kebijakan administrator memerlukan sign-in gateway Cloud](/docs/id/errors#administrator-policy-requires-a-cloud-gateway-sign-in) menjelaskan pesan yang dilihat pengembang.

141 141 

Details

277 277 

278Thread berjalan dalam [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) ketika model thread mendukungnya, jadi sebagian besar panggilan alat berjalan tanpa meminta Anda. Ketika thread membutuhkan persetujuan Anda, prompt ada di dalam thread itu dan thread menunggu sampai Anda menjawabnya di sana. Memberi tahu Claude dalam percakapan project untuk melanjutkan tidak mencapainya.278Thread berjalan dalam [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) ketika model thread mendukungnya, jadi sebagian besar panggilan alat berjalan tanpa meminta Anda. Ketika thread membutuhkan persetujuan Anda, prompt ada di dalam thread itu dan thread menunggu sampai Anda menjawabnya di sana. Memberi tahu Claude dalam percakapan project untuk melanjutkan tidak mencapainya.

279 279 

280Setiap persetujuan mencakup prompt itu, atau sisa thread itu jika Anda memilih opsi yang lebih luas. Untuk membiarkan setiap thread menjalankan perintah tertentu tanpa bertanya, atau untuk memblokir beberapa, tambahkan [permission rules](/docs/id/permissions) ke `.claude/settings.json` repositori. Thread menerapkannya hanya dalam project dengan satu repositori; lihat [Apa yang diambil thread dari repositori Anda](#what-threads-pick-up-from-your-repositories). Dalam project dengan beberapa repositori, tidak ada permission rules repositori yang mencapai thread cloud, jadi Anda mengandalkan auto mode dan pada persetujuan yang Anda berikan di dalam setiap thread.280Setiap persetujuan mencakup prompt itu, atau sisa thread itu jika Anda memilih opsi yang lebih luas.

281 

282Untuk membiarkan setiap thread menjalankan perintah tertentu tanpa bertanya, atau untuk memblokir beberapa, tambahkan [aturan izin](/docs/id/permissions) ke `.claude/settings.json` repositori. Periksa apakah thread cloud di project Anda menerapkannya:

283 

284* **Satu repositori**: thread cloud menerapkan aturan tersebut. Lihat [Apa yang diambil thread dari repositori Anda](#what-threads-pick-up-from-your-repositories).

285* **Beberapa repositori, lingkungan yang di-host Anthropic**: tidak ada aturan izin repositori yang mencapai thread cloud, jadi Anda mengandalkan auto mode dan pada persetujuan yang Anda berikan di dalam setiap thread.

286* **Beberapa repositori, lingkungan self-hosted**: lihat [pengaturan repositori mana yang berlaku](/docs/id/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories).

281 287 

282<h3 id="run-a-thread-on-your-own-computer">288<h3 id="run-a-thread-on-your-own-computer">

283 Jalankan thread di komputer Anda sendiri289 Jalankan thread di komputer Anda sendiri


381 Apa yang diambil thread dari repositori Anda387 Apa yang diambil thread dari repositori Anda

382</h3>388</h3>

383 389 

384Setiap thread cloud mengkloning setiap repositori dalam project dan memuat `CLAUDE.md` dan skills dari semuanya. Aturan izin, hook, dan `env` hanya datang dari `.claude/settings.json` di direktori tempat thread dimulai: di dalam repositori ketika project memiliki satu, dan di atas klon ketika memiliki beberapa, di mana file repositori mana pun tidak dibaca untuk hal tersebut.390Setiap thread cloud mengkloning setiap repositori dalam project dan memuat `CLAUDE.md` dan skills dari semuanya. Aturan izin, hook, dan `env` hanya datang dari `.claude/settings.json` di direktori tempat thread dimulai.

385 391 

386| Di setiap repositori | Satu repositori | Beberapa repositori |392| Di setiap repositori | Satu repositori | Beberapa repositori |

387| :- | :- | :- |393| :- | :- | :- |

388| `CLAUDE.md` | Dimuat ketika thread dimulai | Dimuat dari setiap repositori ketika thread dimulai |394| `CLAUDE.md` | Dimuat ketika thread dimulai | Dimuat dari setiap repositori ketika thread dimulai |

389| Skills, agent, dan perintah di bawah `.claude/` | Dimuat | Dimuat dari setiap repositori |395| Skills, agent, dan perintah di bawah `.claude/` | Dimuat | Dimuat dari setiap repositori |

390| Plugin yang diaktifkan di `.claude/settings.json` | Tidak dimuat. Tambahkan plugin di **Project settings > Plugins** sebagai gantinya | Tidak dimuat. Tambahkan plugin di **Project settings > Plugins** sebagai gantinya |396| Plugin yang diaktifkan di `.claude/settings.json` | Tidak dimuat. Tambahkan plugin di **Project settings > Plugins** sebagai gantinya | Tidak dimuat. Tambahkan plugin di **Project settings > Plugins** sebagai gantinya |

391| Aturan izin, hook, dan `env` yang didefinisikan di `.claude/settings.json` | Berlaku untuk thread, kecuali kunci `env` yang [tidak dihormati sesi cloud apa pun](/docs/id/cloud-environments#what-carries-over-from-your-setup) | Tidak berlaku |397| Aturan izin, hook, dan `env` yang didefinisikan di `.claude/settings.json` | Berlaku untuk thread, kecuali kunci `env` yang [tidak dihormati sesi cloud apa pun](/docs/id/cloud-environments#what-carries-over-from-your-setup) | Tidak berlaku dalam environment yang dihosting Anthropic. Untuk environment self-hosted, lihat [pengaturan repositori mana yang berlaku](/docs/id/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories) |

392 398 

393Dalam project dengan beberapa repositori, setiap klon dilampirkan ke thread sebagai [direktori tambahan](/docs/id/memory#load-from-additional-directories) dengan pemuatan `CLAUDE.md` diaktifkan, itulah mengapa `CLAUDE.md` dan skills setiap repositori dimuat saat mulai meskipun thread dimulai di atasnya. Dalam project seperti itu, masukkan aturan berdiri di project instructions dan berikan thread environment variable melalui [cloud environment](#choose-an-environment-for-threads).399Dalam project dengan beberapa repositori, masukkan aturan berdiri di project instructions dan berikan thread environment variable melalui [cloud environment](#choose-an-environment-for-threads).

394 400 

395<h3 id="choose-an-environment-for-threads">401<h3 id="choose-an-environment-for-threads">

396 Pilih environment untuk thread402 Pilih environment untuk thread


406 412 

407Thread cloud tidak memiliki skills, server MCP, plugin, dan tool yang diinstal hanya di mesin Anda. Thread yang Claude jalankan di mesin Anda melalui [Remote Control](/docs/id/remote-control) menggunakan apa yang diinstal di sana. Untuk membuat masing-masing tersedia untuk thread cloud:413Thread cloud tidak memiliki skills, server MCP, plugin, dan tool yang diinstal hanya di mesin Anda. Thread yang Claude jalankan di mesin Anda melalui [Remote Control](/docs/id/remote-control) menggunakan apa yang diinstal di sana. Untuk membuat masing-masing tersedia untuk thread cloud:

408 414 

409* Skills, subagent, dan perintah: commit ke repositori yang Anda tambahkan ke project, misalnya skill di `.claude/skills/<skill-name>/SKILL.md`. Setiap thread cloud mengkloning setiap repositori dalam project dan memuat `.claude/skills/`, `.claude/agents/`, dan `.claude/commands/` dari masing-masing, jadi skill yang di-commit ke satu repositori tersedia di setiap thread cloud. Thread cloud juga memuat skills yang Anda aktifkan untuk akun claude.ai Anda.415* Skills, subagent, dan perintah: commit ke repositori yang Anda tambahkan ke project, misalnya skill di `.claude/skills/<skill-name>/SKILL.md`. Setiap thread cloud mengkloning setiap repositori dalam project dan memuat `.claude/skills/`, `.claude/agents/`, dan `.claude/commands/` dari masing-masing, jadi skill yang di-commit ke satu repositori tersedia di setiap thread cloud. Thread cloud juga memuat [skills yang Anda aktifkan untuk akun claude.ai Anda](/docs/id/skills#skills-in-cowork-and-cloud-sessions).

410* Plugin: tambahkan di **Project settings > Plugins**; mereka dimuat ke setiap thread cloud baru. Plugin yang dideklarasikan repositori di `.claude/settings.json`-nya [tidak dimuat dalam thread cloud](/docs/id/cloud-environments#what-carries-over-from-your-setup).416* Plugin: tambahkan di **Project settings > Plugins**; mereka dimuat ke setiap thread cloud baru. Plugin yang dideklarasikan repositori di `.claude/settings.json`-nya [tidak dimuat dalam thread cloud](/docs/id/cloud-environments#what-carries-over-from-your-setup).

411* Server MCP: thread cloud mendapatkan tool MCP mereka dari konektor di akun claude.ai Anda, yang merupakan server MCP yang Anda hubungkan sekali di [claude.ai/customize/connectors](https://claude.ai/customize/connectors) atau melalui link **Manage connectors** di **Project settings > Environment**. Setiap thread cloud dapat menggunakan semuanya tanpa setup per-project. Percakapan project itu sendiri tidak memiliki konektor, jadi kirim pekerjaan yang membutuhkan konektor sebagai tugas untuk thread cloud. Dalam project dengan satu repositori, thread cloud juga memuat server MCP dari [`.mcp.json`](/docs/id/cloud-environments#what-carries-over-from-your-setup) repositori itu. [Bagaimana konektor mencapai Claude Code](/docs/id/mcp#how-connectors-reach-claude-code) mencantumkan aturan untuk sesi cloud dan pengaturan yang mematikan konektor.417* Server MCP: thread cloud mendapatkan tool MCP mereka dari konektor di akun claude.ai Anda, yang merupakan server MCP yang Anda hubungkan sekali di [claude.ai/customize/connectors](https://claude.ai/customize/connectors) atau melalui link **Manage connectors** di **Project settings > Environment**. Setiap thread cloud dapat menggunakan semuanya tanpa setup per-project. Percakapan project itu sendiri tidak memiliki konektor, jadi kirim pekerjaan yang membutuhkan konektor sebagai tugas untuk thread cloud. Dalam project dengan satu repositori, thread cloud juga memuat server MCP dari [`.mcp.json`](/docs/id/cloud-environments#what-carries-over-from-your-setup) repositori itu. [Bagaimana konektor mencapai Claude Code](/docs/id/mcp#how-connectors-reach-claude-code) mencantumkan aturan untuk sesi cloud dan pengaturan yang mematikan konektor.

412* Tool command-line dan paket: instal di [setup script](/docs/id/cloud-environments#setup-scripts) environment.418* Tool command-line dan paket: instal di [setup script](/docs/id/cloud-environments#setup-scripts) environment.

Details

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

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

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

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

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

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

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


66| `--add-dir` | Tambahkan direktori kerja tambahan untuk Claude membaca dan mengedit file. Memberikan akses file; Claude Code [tidak menemukan](/docs/id/permissions#additional-directories-grant-file-access-not-configuration) sebagian besar konfigurasi `.claude/` dari direktori ini. Memvalidasi bahwa setiap jalur ada sebagai direktori. Anda tidak dapat menambahkan sebagian besar [jalur jaringan](/docs/id/errors#working-directory-is-a-network-path), seperti `\\server\share`. Untuk mempertahankan direktori ini di seluruh sesi, atur [`permissions.additionalDirectories`](/docs/id/settings-reference#permissions-additionaldirectories) dalam pengaturan | `claude --add-dir ../apps ../lib` |66| `--add-dir` | Tambahkan direktori kerja tambahan untuk Claude membaca dan mengedit file. Memberikan akses file; Claude Code [tidak menemukan](/docs/id/permissions#additional-directories-grant-file-access-not-configuration) sebagian besar konfigurasi `.claude/` dari direktori ini. Memvalidasi bahwa setiap jalur ada sebagai direktori. Anda tidak dapat menambahkan sebagian besar [jalur jaringan](/docs/id/errors#working-directory-is-a-network-path), seperti `\\server\share`. Untuk mempertahankan direktori ini di seluruh sesi, atur [`permissions.additionalDirectories`](/docs/id/settings-reference#permissions-additionaldirectories) dalam pengaturan | `claude --add-dir ../apps ../lib` |

67| `--advisor <model>` | Aktifkan [alat penasihat](/docs/id/advisor) sisi server untuk sesi ini dengan alias model, `fable`, `opus`, atau `sonnet`, atau ID model lengkap. Mengambil alih pengaturan `advisorModel` untuk sesi. `fable` memerlukan [akses Fable](/docs/id/advisor#choose-an-advisor-model) | `claude --advisor opus` |67| `--advisor <model>` | Aktifkan [alat penasihat](/docs/id/advisor) sisi server untuk sesi ini dengan alias model, `fable`, `opus`, atau `sonnet`, atau ID model lengkap. Mengambil alih pengaturan `advisorModel` untuk sesi. `fable` memerlukan [akses Fable](/docs/id/advisor#choose-an-advisor-model) | `claude --advisor opus` |

68| `--agent` | Tentukan agen untuk sesi saat ini (menimpa pengaturan `agent`) | `claude --agent my-custom-agent` |68| `--agent` | Tentukan agen untuk sesi saat ini (menimpa pengaturan `agent`) | `claude --agent my-custom-agent` |

69| `--agents` | Tentukan subagen khusus secara dinamis melalui JSON. Menerima [bidang yang tercantum untuk subagen yang ditentukan CLI](/docs/id/sub-agents#choose-the-subagent-scope). Dengan `--print`, nilainya dapat berupa jalur ke file JSON yang menyimpan objek; bentuk file memerlukan Claude Code v2.1.281 atau lebih baru. Claude Code memvalidasi nilai saat startup dan keluar pada nilai yang tidak valid; lihat [`Konfigurasi --agents tidak valid`](/docs/id/errors#invalid-agents-configuration) untuk pesan dan untuk bendera dan variabel lingkungan yang melewati validasi. Validasi memerlukan Claude Code v2.1.242 atau lebih baru | `claude --agents '{"reviewer":{"description":"Reviews code","prompt":"You are a code reviewer"}}'` |69| `--agents` | Definisikan subagent kustom secara dinamis melalui JSON. Menerima [field yang tercantum untuk subagent yang didefinisikan CLI](/docs/id/sub-agents#choose-the-subagent-scope). Dengan `--print`, nilainya dapat berupa jalur ke file JSON yang berisi objek tersebut; bentuk file memerlukan Claude Code v2.1.281 atau lebih baru. Claude Code memvalidasi nilai saat startup dan keluar jika nilainya tidak valid; lihat [`Invalid --agents configuration`](/docs/id/errors#invalid-agents-configuration) untuk pesan tersebut serta flag dan environment variable yang melewati validasi. Validasi memerlukan Claude Code v2.1.242 atau lebih baru | `claude --agents '{"reviewer":{"description":"Reviews code","prompt":"You are a code reviewer"}}'` |

70| `--allow-dangerously-skip-permissions` | Tambahkan `bypassPermissions` ke siklus mode `Shift+Tab` tanpa memulai di dalamnya. Memungkinkan Anda memulai dalam mode berbeda seperti `plan` dan beralih ke `bypassPermissions` nanti. Lihat [mode izin](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) | `claude --permission-mode plan --allow-dangerously-skip-permissions` |70| `--allow-dangerously-skip-permissions` | Tambahkan `bypassPermissions` ke siklus mode `Shift+Tab` tanpa memulai di dalamnya. Memungkinkan Anda memulai dalam mode berbeda seperti `plan` dan beralih ke `bypassPermissions` nanti. Lihat [mode izin](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) | `claude --permission-mode plan --allow-dangerously-skip-permissions` |

71| `--allowedTools`, `--allowed-tools` | Alat yang dijalankan tanpa meminta izin. Lihat [sintaks aturan izin](/docs/id/settings-reference#permission-rule-syntax) untuk pencocokan pola. Untuk membatasi alat mana yang tersedia, gunakan `--tools` sebagai gantinya. Jika Anda menamai salah satu [alat pelacakan tugas](/docs/id/tools-reference#task-tool-availability) di sini, Claude Code juga memilih sesi masuk | `"Bash(git log *)" "Bash(git diff *)" "Read"` |71| `--allowedTools`, `--allowed-tools` | Tool yang dijalankan tanpa meminta izin, kecuali pembacaan dari [jalur jaringan](/docs/id/permissions#network-paths). Lihat [sintaks aturan izin](/docs/id/settings-reference#permission-rule-syntax) untuk pencocokan pola. Untuk membatasi tool mana yang tersedia, gunakan `--tools` sebagai gantinya. Jika Anda menyebutkan salah satu [tool pelacakan tugas](/docs/id/tools-reference#task-tool-availability) di sini, Claude Code juga mengikutsertakan sesi tersebut | `"Bash(git log *)" "Bash(git diff *)" "Read"` |

72| `--append-subagent-system-prompt` | Tambahkan teks khusus ke akhir prompt sistem setiap [subagen](/docs/id/sub-agents), termasuk subagen bersarang, terlepas dari [subagen yang bercabang](/docs/id/sub-agents#fork-the-current-conversation), yang menggunakan kembali prompt percakapan sendiri. Hanya berlaku dalam mode non-interaktif dengan `-p`. Memerlukan Claude Code v2.1.205 atau lebih baru | `claude -p --append-subagent-system-prompt "Cite file paths in every answer" "query"` |72| `--append-subagent-system-prompt` | Tambahkan teks khusus ke akhir prompt sistem setiap [subagen](/docs/id/sub-agents), termasuk subagen bersarang, terlepas dari [subagen yang bercabang](/docs/id/sub-agents#fork-the-current-conversation), yang menggunakan kembali prompt percakapan sendiri. Hanya berlaku dalam mode non-interaktif dengan `-p`. Memerlukan Claude Code v2.1.205 atau lebih baru | `claude -p --append-subagent-system-prompt "Cite file paths in every answer" "query"` |

73| `--append-subagent-system-prompt-file` | Muat teks dari file dan tambahkan ke prompt sistem [subagen](/docs/id/sub-agents). Alternatif untuk `--append-subagent-system-prompt` untuk teks yang terlalu panjang untuk dilewatkan di baris perintah. Kedua bendera tidak dapat digabungkan. Hanya berlaku dalam mode non-interaktif dengan `-p`. Memerlukan Claude Code v2.1.261 atau lebih baru | `claude -p --append-subagent-system-prompt-file ./subagent-rules.txt "query"` |73| `--append-subagent-system-prompt-file` | Muat teks dari file dan tambahkan ke prompt sistem [subagen](/docs/id/sub-agents). Alternatif untuk `--append-subagent-system-prompt` untuk teks yang terlalu panjang untuk dilewatkan di baris perintah. Kedua bendera tidak dapat digabungkan. Hanya berlaku dalam mode non-interaktif dengan `-p`. Memerlukan Claude Code v2.1.261 atau lebih baru | `claude -p --append-subagent-system-prompt-file ./subagent-rules.txt "query"` |

74| `--append-system-prompt` | Tambahkan teks khusus ke akhir prompt sistem default | `claude --append-system-prompt "Always use TypeScript"` |74| `--append-system-prompt` | Tambahkan teks khusus ke akhir prompt sistem default | `claude --append-system-prompt "Always use TypeScript"` |


81| `--channels` | (Pratinjau penelitian) Server MCP yang [notifikasi saluran](/docs/id/channels) Claude harus mendengarkan dalam sesi ini. Daftar yang dipisahkan spasi dari entri `plugin:<name>@<marketplace>`. Memerlukan autentikasi Anthropic melalui claude.ai atau kunci API Console | `claude --channels plugin:my-notifier@my-marketplace` |81| `--channels` | (Pratinjau penelitian) Server MCP yang [notifikasi saluran](/docs/id/channels) Claude harus mendengarkan dalam sesi ini. Daftar yang dipisahkan spasi dari entri `plugin:<name>@<marketplace>`. Memerlukan autentikasi Anthropic melalui claude.ai atau kunci API Console | `claude --channels plugin:my-notifier@my-marketplace` |

82| `--chrome` | Aktifkan [integrasi browser Chrome](/docs/id/chrome) untuk otomasi web dan pengujian | `claude --chrome` |82| `--chrome` | Aktifkan [integrasi browser Chrome](/docs/id/chrome) untuk otomasi web dan pengujian | `claude --chrome` |

83| `--cloud` | Dengan deskripsi tugas, buat [sesi cloud](/docs/id/claude-code-on-the-web) baru. Dengan ID sesi (`session_...` atau `cse_...`) atau URL claude.ai/code, antrekan pesan ke sesi yang ada sebagai gantinya, dengan `-p`. Lihat [kirim pesan lanjutan](/docs/id/claude-code-on-the-web#send-follow-ups-from-the-cli). | `claude --cloud "Fix the login bug"` |83| `--cloud` | Dengan deskripsi tugas, buat [sesi cloud](/docs/id/claude-code-on-the-web) baru. Dengan ID sesi (`session_...` atau `cse_...`) atau URL claude.ai/code, antrekan pesan ke sesi yang ada sebagai gantinya, dengan `-p`. Lihat [kirim pesan lanjutan](/docs/id/claude-code-on-the-web#send-follow-ups-from-the-cli). | `claude --cloud "Fix the login bug"` |

84| `--continue`, `-c` | Muat percakapan terbaru dalam direktori saat ini, termasuk [sesi latar belakang yang telah selesai](/docs/id/sessions#resume-a-session); membuka sesi latar belakang yang 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='!1p'`. Filter mengikat hanya dalam bentuk `=`; filter yang dipisahkan spasi mengaktifkan mode debug tanpa penyaringan | `claude --debug='mcp,startup'` |


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

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

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

111| `--mcp-config` | Muat server MCP dari file atau string JSON (dipisahkan spasi). Ketika Anda melewatkan bendera ini dengan `-p`, Claude Code menunggu server yang masih tertunda untuk terhubung sebelum menjalankan putaran pertama, hingga waktu tunggu startup [`MCP_TIMEOUT`](/docs/id/env-vars), 30 detik secara default; server dengan [daftar alat yang di-cache](/docs/id/mcp#managing-your-servers) melewati tunggu dan terhubung saat penggunaan pertama. Tunggu memerlukan Claude Code v2.1.221 atau lebih baru | `claude --mcp-config ./mcp.json` |111| `--mcp-config` | Muat server MCP dari file atau string JSON (dipisahkan spasi). Ketika Anda meneruskan flag ini dengan `-p`, Claude Code menunggu server yang masih tertunda untuk terhubung sebelum menjalankan giliran pertama, hingga timeout startup [`MCP_TIMEOUT`](/docs/id/env-vars), 30 detik secara default; server dengan [daftar tool yang di-cache](/docs/id/mcp#managing-your-servers) melewati penantian dan terhubung saat penggunaan pertama. Di [lingkungan yang dihosting sendiri](/docs/id/self-hosted-environments-configuration#connection-timing), penantian yang lebih singkat berlaku sebagai gantinya. Penantian ini memerlukan Claude Code v2.1.221 atau lebih baru | `claude --mcp-config ./mcp.json` |

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

113| `--name`, `-n` | Atur nama tampilan untuk sesi, ditampilkan di `/resume` dan judul terminal. Anda dapat melanjutkan sesi bernama dengan `claude --resume <name>`. Dalam sesi interaktif, jika sesi langsung lain di mesin ini sudah menggunakan nama, Claude Code menerapkan [varian darinya](/docs/id/sessions#name-your-sessions) sebagai gantinya. <br /><br />[`/rename`](/docs/id/commands) mengubah nama pertengahan sesi dan juga menampilkannya di bilah prompt | `claude -n "my-feature-work"` |113| `--name`, `-n` | Atur nama tampilan untuk sesi, ditampilkan di `/resume` dan judul terminal. Anda dapat melanjutkan sesi bernama dengan `claude --resume <name>`. <br /><br />[`/rename`](/docs/id/commands) mengubah nama di tengah sesi dan juga menampilkannya di bilah prompt | `claude -n "my-feature-work"` |

114| `--no-chrome` | Nonaktifkan [integrasi browser Chrome](/docs/id/chrome) untuk sesi ini | `claude --no-chrome` |114| `--no-chrome` | Nonaktifkan [integrasi browser Chrome](/docs/id/chrome) untuk sesi ini | `claude --no-chrome` |

115| `--no-session-persistence` | Nonaktifkan persistensi sesi sehingga sesi tidak disimpan ke disk dan tidak dapat dilanjutkan. Mode cetak saja. Variabel lingkungan [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/docs/id/env-vars) melakukan hal yang sama dalam mode apa pun | `claude -p --no-session-persistence "query"` |115| `--no-session-persistence` | Nonaktifkan persistensi sesi sehingga sesi tidak disimpan ke disk dan tidak dapat dilanjutkan. Mode cetak saja. Variabel lingkungan [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/docs/id/env-vars) melakukan hal yang sama dalam mode apa pun | `claude -p --no-session-persistence "query"` |

116| `--output-format` | Tentukan format output untuk mode cetak (opsi: `text`, `json`, `stream-json`) | `claude -p "query" --output-format json` |116| `--output-format` | Tentukan format output untuk mode cetak (opsi: `text`, `json`, `stream-json`) | `claude -p "query" --output-format json` |

Details

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

315| [Pengaturan terkelola server](/docs/id/server-managed-settings) organisasi Anda | Ya, kecuali dalam sesi [Claude Tag](https://claude.com/docs/claude-tag/overview) | Diambil dari server Anthropic ketika sesi dimulai. Lihat [Surface coverage](/docs/id/model-config#surface-coverage) untuk cara `availableModels` diterapkan di sesi cloud. Pengaturan yang digunakan di perangkat Anda melalui MDM atau file pengaturan terkelola tidak berlaku, karena sesi berjalan di VM yang dikelola Anthropic; di [lingkungan yang di-host sendiri](/docs/id/self-hosted-environments), sesi juga membaca file pengaturan terkelola dalam gambar runner, per [cara Claude Code menggabungkan sumber terkelola](/docs/id/managed-settings#how-claude-code-combines-managed-sources) |315| [Pengaturan terkelola server](/docs/id/server-managed-settings) organisasi Anda | Ya, kecuali dalam sesi [Claude Tag](https://claude.com/docs/claude-tag/overview) | Diambil dari server Anthropic ketika sesi dimulai. Lihat [Surface coverage](/docs/id/model-config#surface-coverage) untuk cara `availableModels` diterapkan di sesi cloud. Pengaturan yang digunakan di perangkat Anda melalui MDM atau file pengaturan terkelola tidak berlaku, karena sesi berjalan di VM yang dikelola Anthropic; di [lingkungan yang di-host sendiri](/docs/id/self-hosted-environments), sesi juga membaca file pengaturan terkelola dalam gambar runner, per [cara Claude Code menggabungkan sumber terkelola](/docs/id/managed-settings#how-claude-code-combines-managed-sources) |

316| `~/.claude/CLAUDE.md` pengguna Anda | Tidak | Hidup di mesin Anda, bukan di repo. Lihat [Tambahkan preferensi pribadi tanpa melakukan commit ke repo](#add-personal-preferences-without-committing-to-the-repo) |316| `~/.claude/CLAUDE.md` pengguna Anda | Tidak | Hidup di mesin Anda, bukan di repo. Lihat [Tambahkan preferensi pribadi tanpa melakukan commit ke repo](#add-personal-preferences-without-committing-to-the-repo) |

317| `~/.claude/skills/`, `~/.claude/agents/`, `~/.claude/commands/` pengguna Anda | Tidak | Hidup di mesin Anda, bukan di repo. Commit mereka ke direktori `.claude/` repo sebagai gantinya. Sesi cloud secara otomatis memuat skill yang Anda aktifkan di claude.ai |317| `~/.claude/skills/`, `~/.claude/agents/`, `~/.claude/commands/` pengguna Anda | Tidak | Hidup di mesin Anda, bukan di repo. Commit mereka ke direktori `.claude/` repo sebagai gantinya. Sesi cloud secara otomatis memuat [skill yang Anda aktifkan di claude.ai](/docs/id/skills#skills-in-cowork-and-cloud-sessions) |

318| Plugin yang hanya diaktifkan di pengaturan pengguna Anda | Tidak | `enabledPlugins` yang dibatasi pengguna hidup di `~/.claude/settings.json` di mesin Anda |318| Plugin yang hanya diaktifkan di pengaturan pengguna Anda | Tidak | `enabledPlugins` yang dibatasi pengguna hidup di `~/.claude/settings.json` di mesin Anda |

319| Server MCP yang Anda tambahkan dengan `claude mcp add` di cakupan lokal default atau cakupan pengguna | Tidak | Mereka menulis ke `~/.claude.json` di mesin Anda, bukan repo. Tambahkan server dengan `claude mcp add --scope project`, yang menulis [`.mcp.json`](/docs/id/mcp#project-scope) repo, dan commit file itu. Sesi dengan satu repositori memuat file itu |319| Server MCP yang Anda tambahkan dengan `claude mcp add` di cakupan lokal default atau cakupan pengguna | Tidak | Mereka menulis ke `~/.claude.json` di mesin Anda, bukan repo. Tambahkan server dengan `claude mcp add --scope project`, yang menulis [`.mcp.json`](/docs/id/mcp#project-scope) repo, dan commit file itu. Sesi dengan satu repositori memuat file itu |

320| Variabel transport di blok `env` `.claude/settings.json` repo Anda, seperti `NODE_EXTRA_CA_CERTS` dan [variabel sertifikat klien mTLS](/docs/id/network-config#mtls-authentication) | Tidak | Lingkungan hosting mengelola koneksi API sesi, jadi Claude Code mengabaikan kunci ini dan mencatat setiap kunci yang diabaikan di log debug sesi |320| Variabel transport di blok `env` `.claude/settings.json` repo Anda, seperti `NODE_EXTRA_CA_CERTS` dan [variabel sertifikat klien mTLS](/docs/id/network-config#mtls-authentication) | Tidak | Lingkungan hosting mengelola koneksi API sesi, jadi Claude Code mengabaikan kunci ini dan mencatat setiap kunci yang diabaikan di log debug sesi |

code-review.md +4 −4

Details

270| Bagian | Apa yang ditampilkan |270| Bagian | Apa yang ditampilkan |

271| :- | :- |271| :- | :- |

272| PRs reviewed | Hitungan harian permintaan tarik yang ditinjau selama rentang waktu yang dipilih |272| PRs reviewed | Hitungan harian permintaan tarik yang ditinjau selama rentang waktu yang dipilih |

273| Cost weekly | Pengeluaran mingguan pada Code Review |273| Code Review cost | Pengeluaran Code Review sejauh ini pada bulan ini |

274| Feedback | Hitungan komentar ulasan yang secara otomatis diselesaikan karena pengembang mengatasi masalah |274| Feedback | Hitungan komentar ulasan yang secara otomatis diselesaikan karena pengembang mengatasi masalah |

275| Repository breakdown | Hitungan per-repo PR yang ditinjau dan komentar yang diselesaikan |275| Repository breakdown | Hitungan per-repo PR yang ditinjau, komentar yang diselesaikan, dan eksekusi review, dengan perkiraan biaya dan tampilan per-PR |

276 276 

277Angka biaya dasbor adalah perkiraan untuk memantau aktivitas. Untuk pengeluaran yang akurat pada tagihan, lihat tagihan Anthropic Anda.277Kartu Code Review cost hanya menampilkan jumlah ketika bulan saat ini dipilih. Angka biaya di analitik dapat berbeda dari faktur Anda. Biaya pada Repository breakdown diperkirakan berdasarkan harga daftar, sebelum diskon atau kredit apa pun, dan hanya mencakup review yang diposting Claude pada pull request. Untuk pengeluaran yang akurat sesuai faktur, lihat tagihan Anthropic Anda.

278 278 

279<h2 id="pricing">279<h2 id="pricing">

280 Harga280 Harga


292 292 

293Biaya muncul pada tagihan Anthropic Anda terlepas dari apakah organisasi Anda menggunakan Amazon Bedrock atau Google Cloud's Agent Platform untuk fitur Claude Code lainnya. Untuk menetapkan batas pengeluaran bulanan untuk Code Review, buka [claude.ai/admin-settings/usage](https://claude.ai/admin-settings/usage) dan konfigurasikan batas untuk layanan Claude Code Review.293Biaya muncul pada tagihan Anthropic Anda terlepas dari apakah organisasi Anda menggunakan Amazon Bedrock atau Google Cloud's Agent Platform untuk fitur Claude Code lainnya. Untuk menetapkan batas pengeluaran bulanan untuk Code Review, buka [claude.ai/admin-settings/usage](https://claude.ai/admin-settings/usage) dan konfigurasikan batas untuk layanan Claude Code Review.

294 294 

295Pantau pengeluaran melalui bagan biaya mingguan di [analitik](#view-usage) atau kolom biaya rata-rata per-repo di pengaturan admin.295Untuk memantau pengeluaran, gunakan [dasbor analitik](#view-usage).

296 296 

297<h2 id="troubleshooting">297<h2 id="troubleshooting">

298 Pemecahan masalah298 Pemecahan masalah

commands.md +2 −2

Details

77| `/compact [instructions]` | Bebaskan konteks dengan merangkum percakapan sejauh ini. Secara opsional berikan instruksi fokus untuk ringkasan. Lihat [bagaimana compaction menangani aturan, skill, dan file memori](/docs/id/context-window#what-survives-compaction) |77| `/compact [instructions]` | Bebaskan konteks dengan merangkum percakapan sejauh ini. Secara opsional berikan instruksi fokus untuk ringkasan. Lihat [bagaimana compaction menangani aturan, skill, dan file memori](/docs/id/context-window#what-survives-compaction) |

78| `/config [key=value ...]` | Buka antarmuka [Pengaturan](/docs/id/settings) untuk menyesuaikan tema, model, [gaya output](/docs/id/output-styles), dan preferensi lainnya. Berikan satu atau lebih pasangan `key=value` untuk mengatur pengaturan secara langsung tanpa membuka antarmuka, misalnya `/config thinking=false`, `/config theme=dark`, atau `/config model=sonnet`. Bentuk `key=value` juga berfungsi dalam mode non-interaktif (`-p`) dan dari aplikasi mobile Claude melalui [Remote Control](/docs/id/remote-control). Bentuk `key=value` tidak dapat mengaktifkan pengaturan yang memerlukan konfirmasi Anda di panel, seperti [`autoContinueAtUsageLimit`](/docs/id/interactive-mode#turn-automatic-continue-off), meskipun dapat menonaktifkannya. Jalankan `/config --help` untuk mencantumkan kunci yang diterima. Alias: `/settings` |78| `/config [key=value ...]` | Buka antarmuka [Pengaturan](/docs/id/settings) untuk menyesuaikan tema, model, [gaya output](/docs/id/output-styles), dan preferensi lainnya. Berikan satu atau lebih pasangan `key=value` untuk mengatur pengaturan secara langsung tanpa membuka antarmuka, misalnya `/config thinking=false`, `/config theme=dark`, atau `/config model=sonnet`. Bentuk `key=value` juga berfungsi dalam mode non-interaktif (`-p`) dan dari aplikasi mobile Claude melalui [Remote Control](/docs/id/remote-control). Bentuk `key=value` tidak dapat mengaktifkan pengaturan yang memerlukan konfirmasi Anda di panel, seperti [`autoContinueAtUsageLimit`](/docs/id/interactive-mode#turn-automatic-continue-off), meskipun dapat menonaktifkannya. Jalankan `/config --help` untuk mencantumkan kunci yang diterima. Alias: `/settings` |

79| `/context [all]` | Visualisasikan penggunaan konteks saat ini sebagai grid berwarna. Menunjukkan saran optimasi untuk tool yang berat konteks, bloat memori, dan peringatan kapasitas. Ketika percakapan melebihi context window, output mencakup [peringatan](/docs/id/errors#context-exceeds-the-token-limit) yang menunjukkan seberapa jauh Anda melampaui batas dan perintah mana yang membebaskan ruang. Dalam [mode layar penuh](/docs/id/fullscreen), `/context` meruntuhkan rincian per-item untuk menjaga grid tetap terlihat. Berikan `all` untuk meluaskannya |79| `/context [all]` | Visualisasikan penggunaan konteks saat ini sebagai grid berwarna. Menunjukkan saran optimasi untuk tool yang berat konteks, bloat memori, dan peringatan kapasitas. Ketika percakapan melebihi context window, output mencakup [peringatan](/docs/id/errors#context-exceeds-the-token-limit) yang menunjukkan seberapa jauh Anda melampaui batas dan perintah mana yang membebaskan ruang. Dalam [mode layar penuh](/docs/id/fullscreen), `/context` meruntuhkan rincian per-item untuk menjaga grid tetap terlihat. Berikan `all` untuk meluaskannya |

80| `/copy [N]` | Salin respons asisten terakhir ke clipboard. Berikan angka `N` untuk menyalin respons ke-N terbaru: `/copy 2` menyalin yang kedua terakhir. Ketika blok kode ada, menunjukkan pemilih interaktif untuk memilih blok individual atau respons lengkap. Tekan `w` di pemilih untuk menulis pilihan ke file alih-alih clipboard, yang berguna melalui SSH |80| `/copy [N]` | Salin respons asisten terakhir ke clipboard. Berikan angka `N` untuk menyalin respons ke-N terbaru: `/copy 2` menyalin yang kedua terakhir. Ketika blok kode atau blockquote ada, menunjukkan pemilih interaktif untuk memilih blok individual atau respons lengkap. Tekan `w` di pemilih untuk menulis pilihan ke file alih-alih clipboard, yang berguna melalui SSH |

81| `/cost` | Alias untuk `/usage` |81| `/cost` | Alias untuk `/usage` |

82| `/dataviz [request]` | **[Skill](/docs/id/skills#bundled-skills).** Panduan desain untuk bagan, grafik, dan dasbor. Claude memilih bentuk bagan untuk data, menetapkan warna berdasarkan peran, memvalidasi palet untuk keamanan buta warna dan kontras dengan skrip bawaan, dan menerapkan aturan tanda, interaksi, dan aksesibilitas. Menggunakan palet placeholder netral merek yang Anda ganti dengan milik Anda sendiri |82| `/dataviz [request]` | **[Skill](/docs/id/skills#bundled-skills).** Panduan desain untuk bagan, grafik, dan dasbor. Claude memilih bentuk bagan untuk data, menetapkan warna berdasarkan peran, memvalidasi palet untuk keamanan buta warna dan kontras dengan skrip bawaan, dan menerapkan aturan tanda, interaksi, dan aksesibilitas. Menggunakan palet placeholder netral merek yang Anda ganti dengan milik Anda sendiri |

83| `/debug [description]` | **[Skill](/docs/id/skills#bundled-skills).** Aktifkan pencatatan debug untuk sesi saat ini dan selesaikan masalah dengan membaca log debug sesi. Pencatatan debug dimatikan secara default kecuali Anda memulai dengan `claude --debug`, jadi menjalankan `/debug` di tengah sesi mulai menangkap log dari titik itu maju. Secara opsional jelaskan masalah untuk fokus analisis |83| `/debug [description]` | **[Skill](/docs/id/skills#bundled-skills).** Aktifkan pencatatan debug untuk sesi saat ini dan selesaikan masalah dengan membaca log debug sesi. Pencatatan debug dimatikan secara default kecuali Anda memulai dengan `claude --debug`, jadi menjalankan `/debug` di tengah sesi mulai menangkap log dari titik itu maju. Secara opsional jelaskan masalah untuk fokus analisis |


132| `/reload-skills` | Pindai ulang direktori [skill](/docs/id/skills) dan perintah sehingga skill yang ditambahkan atau diubah di disk selama sesi menjadi tersedia tanpa memulai ulang. Melaporkan berapa banyak skill yang tersedia dan berapa banyak yang ditambahkan atau dihapus |132| `/reload-skills` | Pindai ulang direktori [skill](/docs/id/skills) dan perintah sehingga skill yang ditambahkan atau diubah di disk selama sesi menjadi tersedia tanpa memulai ulang. Melaporkan berapa banyak skill yang tersedia dan berapa banyak yang ditambahkan atau dihapus |

133| `/remote-control` | Buat sesi ini tersedia untuk [Remote Control](/docs/id/remote-control) dari claude.ai. Menjalankannya saat keluar mencetak bahwa Remote Control memerlukan langganan claude.ai dan memberi tahu Anda cara masuk; sebelum v2.1.206 melaporkan `Unknown command: /remote-control`. Alias: `/rc` |133| `/remote-control` | Buat sesi ini tersedia untuk [Remote Control](/docs/id/remote-control) dari claude.ai. Menjalankannya saat keluar mencetak bahwa Remote Control memerlukan langganan claude.ai dan memberi tahu Anda cara masuk; sebelum v2.1.206 melaporkan `Unknown command: /remote-control`. Alias: `/rc` |

134| `/remote-env` | Pilih [lingkungan cloud](/docs/id/cloud-environments#select-an-environment-from-the-cli) default untuk sesi cloud yang Anda mulai dari CLI |134| `/remote-env` | Pilih [lingkungan cloud](/docs/id/cloud-environments#select-an-environment-from-the-cli) default untuk sesi cloud yang Anda mulai dari CLI |

135| `/rename [name]` | Ganti nama sesi saat ini dan tampilkan nama di bilah prompt. Tanpa nama, auto-generate dari riwayat percakapan. Juga tersedia dalam mode non-interaktif (`-p`); memerlukan Claude Code v2.1.205 atau lebih baru. Dari setiap surface penggantian nama, termasuk claude.ai dan aplikasi desktop, Claude Code mengganti karakter kontrol dan tidak terlihat dalam nama baru dengan spasi dan membatasi nama pada 200 karakter. Jika nama kosong setelah karakter tidak terlihat dihapus, Claude Code menolaknya dan menunjukkan `That name is empty once invisible characters are removed. Usage: /rename <name>`. Penggantian karakter dan batas panjang memerlukan Claude Code v2.1.221 atau lebih baru. Jika sesi langsung lain di mesin ini sudah menggunakan nama yang Anda berikan, Claude Code menerapkan [varian darinya](/docs/id/sessions#name-your-sessions) sebagai gantinya |135| `/rename [name]` | Ganti nama sesi saat ini dan tampilkan nama di bilah prompt. Tanpa nama, auto-generate dari riwayat percakapan. Juga tersedia dalam mode non-interaktif (`-p`); memerlukan Claude Code v2.1.205 atau lebih baru. Dari setiap surface penggantian nama, termasuk claude.ai dan aplikasi desktop, Claude Code mengganti karakter kontrol dan tidak terlihat dalam nama baru dengan spasi dan membatasi nama pada 200 karakter. Jika nama kosong setelah karakter tidak terlihat dihapus, Claude Code menolaknya dan menunjukkan `That name is empty once invisible characters are removed. Usage: /rename <name>`. Penggantian karakter dan batas panjang memerlukan Claude Code v2.1.221 atau lebih baru |

136| `/resume [session]` | Lanjutkan percakapan berdasarkan ID atau nama, atau buka pemilih sesi. [Sesi latar belakang](/docs/id/agent-view) muncul di pemilih ditandai dengan `bg`. Melanjutkan satu yang masih berjalan, dari pemilih atau berdasarkan ID atau nama, [membuka sesi itu](/docs/id/sessions#resume-a-running-background-session): percakapan saat ini Anda pindah ke latar belakang dan terminal ini melampirkan ke yang berjalan. Tekan `←` pada prompt kosong untuk kembali ke tampilan agent, yang juga mencantumkan percakapan yang Anda tinggalkan. Sebelum v2.1.285, Claude Code menolak dan memberi tahu Anda untuk membuka sesi dengan `claude attach` atau menghentikannya terlebih dahulu. Alias: `/continue` |136| `/resume [session]` | Lanjutkan percakapan berdasarkan ID atau nama, atau buka pemilih sesi. [Sesi latar belakang](/docs/id/agent-view) muncul di pemilih ditandai dengan `bg`. Melanjutkan satu yang masih berjalan, dari pemilih atau berdasarkan ID atau nama, [membuka sesi itu](/docs/id/sessions#resume-a-running-background-session): percakapan saat ini Anda pindah ke latar belakang dan terminal ini melampirkan ke yang berjalan. Tekan `←` pada prompt kosong untuk kembali ke tampilan agent, yang juga mencantumkan percakapan yang Anda tinggalkan. Sebelum v2.1.285, Claude Code menolak dan memberi tahu Anda untuk membuka sesi dengan `claude attach` atau menghentikannya terlebih dahulu. Alias: `/continue` |

137| `/review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [--max-findings n\|all\|default] [pr#\|branch\|path]` | Alias dari [`/code-review`](/docs/id/code-review#review-a-diff-locally): meninjau diff saat ini, atau nomor PR, branch, atau jalur yang Anda berikan, seperti `/review 1234`, dan mengambil tingkat effort dan flag yang sama. Tanpa level yang diberikan, tinjauan menggunakan kembali level `low` hingga `max` terakhir yang Anda ketik; lihat [Tinjau diff secara lokal](/docs/id/code-review#review-a-diff-locally) untuk aturan yang tepat. Untuk tinjauan cloud mendalam, gunakan [`/code-review ultra`](/docs/id/ultrareview). Sebelum v2.1.223, `/review` adalah perintah terpisah yang menjalankan tinjauan read-only satu lintasan dari pull request GitHub berdasarkan nomor, mencantumkan PR terbuka untuk dipilih saat dijalankan tanpa argumen; dari v2.1.186 hingga v2.1.201, itu menjalankan mesin multi-agent yang sama seperti `/code-review medium` |137| `/review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [--max-findings n\|all\|default] [pr#\|branch\|path]` | Alias dari [`/code-review`](/docs/id/code-review#review-a-diff-locally): meninjau diff saat ini, atau nomor PR, branch, atau jalur yang Anda berikan, seperti `/review 1234`, dan mengambil tingkat effort dan flag yang sama. Tanpa level yang diberikan, tinjauan menggunakan kembali level `low` hingga `max` terakhir yang Anda ketik; lihat [Tinjau diff secara lokal](/docs/id/code-review#review-a-diff-locally) untuk aturan yang tepat. Untuk tinjauan cloud mendalam, gunakan [`/code-review ultra`](/docs/id/ultrareview). Sebelum v2.1.223, `/review` adalah perintah terpisah yang menjalankan tinjauan read-only satu lintasan dari pull request GitHub berdasarkan nomor, mencantumkan PR terbuka untuk dipilih saat dijalankan tanpa argumen; dari v2.1.186 hingga v2.1.201, itu menjalankan mesin multi-agent yang sama seperti `/code-review medium` |

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

Details

8 8 

9Beberapa organisasi memerlukan setiap proses pada workstation untuk dimulai melalui peluncur wajib. Peluncur menerapkan sandbox, kontrol jaringan, atau injeksi kredensial yang postur keamanan perusahaan bergantung padanya, dan biner yang dimulai tanpanya adalah pelanggaran kebijakan.9Beberapa organisasi memerlukan setiap proses pada workstation untuk dimulai melalui peluncur wajib. Peluncur menerapkan sandbox, kontrol jaringan, atau injeksi kredensial yang postur keamanan perusahaan bergantung padanya, dan biner yang dimulai tanpanya adalah pelanggaran kebijakan.

10 10 

11`CLAUDE_CODE_PROCESS_WRAPPER` memulai setiap proses yang diluncurkan Claude Code dari binernya sendiri melalui peluncur Anda: layanan latar belakang, setiap sesi yang dihosting dalam [tampilan agen](/docs/id/agent-view), dan peluncuran ulang Claude Code setelah pembaruan. Atur ke jalur absolut peluncur Anda, dan Claude Code menjalankan peluncur dengan perintah Claude Code sebagai argumennya.11`CLAUDE_CODE_PROCESS_WRAPPER` memulai setiap proses yang diluncurkan Claude Code dari binernya sendiri melalui peluncur Anda: [layanan latar belakang](/docs/id/agent-view#the-supervisor-process), setiap sesi yang dihostingnya dalam [tampilan agent](/docs/id/agent-view), dan peluncuran ulang Claude Code setelah pembaruan. Atur ke jalur absolut peluncur Anda, dan Claude Code menjalankan peluncur dengan perintah Claude Code sebagai argumennya.

12 12 

13Peluncur yang membungkus perintah `claude` pada `PATH` Anda tidak dapat menjangkau layanan latar belakang atau sesi yang dihosting, karena mereka dimulai dari jalur langsung biner tanpa mencari `claude`.13Peluncur yang membungkus perintah `claude` pada `PATH` Anda tidak dapat menjangkau layanan latar belakang atau sesi yang dihosting, karena mereka dimulai dari jalur langsung biner tanpa mencari `claude`.

14 14 


39 39 

40Proses berikut tidak dimulai melalui launcher:40Proses berikut tidak dimulai melalui launcher:

41 41 

42* Sebuah [layanan latar belakang yang terpasang](/docs/id/agent-view#the-supervisor-process) yang unitnya ditulis sebelum launcher dikonfigurasi: `launchd` atau `systemd` memulai proses itu dari file unitnya. `/status` dan `claude daemon status` memperingatkan saat layanan yang berjalan dan launcher yang dikonfigurasi tidak cocok, dan sesi yang dimulai layanan masih dimulai melalui launcher setelah layanan dimulai ulang dengan variabel di pengaturannya.

43* Sesi yang Anda mulai sendiri di terminal, yang berjalan sesuai cara Anda menjalankannya. Untuk mencakup sesi ini, letakkan skrip bernama `claude` di direktori lebih awal di `PATH` yang menjalankan launcher Anda dengan biner asli; jangan ganti symlink yang dikelola. Layanan latar belakang dan sesinya dimulai tanpa pencarian `PATH`, jadi dua launcher tidak bertumpuk di sana.42* Sesi yang Anda mulai sendiri di terminal, yang berjalan sesuai cara Anda menjalankannya. Untuk mencakup sesi ini, letakkan skrip bernama `claude` di direktori lebih awal di `PATH` yang menjalankan launcher Anda dengan biner asli; jangan ganti symlink yang dikelola. Layanan latar belakang dan sesinya dimulai tanpa pencarian `PATH`, jadi dua launcher tidak bertumpuk di sana.

44* Proses pertama dari deep link `claude-cli://`, yang dimulai langsung oleh penanganan protokol sistem operasi. Semua yang dimulai sesi itu di latar belakang setelahnya berjalan melalui launcher. Untuk menutup jalur ini sepenuhnya, [cegah pendaftaran penanganan](/docs/id/deep-links#registration-and-supported-platforms) dengan pengaturan `disableDeepLinkRegistration`.43* Proses pertama dari deep link `claude-cli://`, yang dimulai langsung oleh penanganan protokol sistem operasi. Semua yang dimulai sesi itu di latar belakang setelahnya berjalan melalui launcher. Untuk menutup jalur ini sepenuhnya, [cegah pendaftaran penanganan](/docs/id/deep-links#registration-and-supported-platforms) dengan pengaturan `disableDeepLinkRegistration`.

45* Peluncuran kembali yang dilakukan `--worktree` dikombinasikan dengan `--tmux`: multiplexer terminal memulai pane itu, bukan biner Claude Code.44* Peluncuran kembali yang dilakukan `--worktree` dikombinasikan dengan `--tmux`: multiplexer terminal memulai pane itu, bukan biner Claude Code.


104 </Step>103 </Step>

105 104 

106 <Step title="Mulai ulang layanan latar belakang dan sesi Anda">105 <Step title="Mulai ulang layanan latar belakang dan sesi Anda">

107 Layanan latar belakang yang berjalan dan sesi `claude` apa pun yang terbuka membaca variabel sekali saat startup, jadi mereka terus meluncurkan proses tanpa pembungkus sampai dimulai ulang. Jalankan `claude daemon stop --any` untuk menghentikan layanan sesuai permintaan; perintah berikutnya yang membutuhkannya, seperti `claude agents`, memulai yang dibungkus. [Layanan yang diinstal](/docs/id/agent-view#the-supervisor-process) mengambil `claude daemon stop` tanpa `--any`. Kemudian mulai ulang sesi `claude` terbuka Anda.106 Layanan latar belakang yang berjalan dan sesi `claude` apa pun yang terbuka membaca variabel sekali saat startup, jadi mereka terus meluncurkan proses tanpa pembungkus sampai dimulai ulang. Jalankan `claude daemon stop --any` untuk menghentikan layanan sesuai permintaan. Perintah berikutnya yang membutuhkannya, seperti `claude agents`, memulai yang dibungkus. Kemudian mulai ulang sesi `claude` terbuka Anda.

108 107 

109 Pada mesin yang tidak dapat Anda mulai ulang dengan tangan, sesi pertama yang dimulai setelah push pengaturan secara otomatis menghentikan layanan sesuai permintaan yang tersisa tanpa pembungkus. Mesin di mana tidak ada sesi baru yang dimulai menyimpan layanannya yang tanpa pembungkus sampai satu dimulai, dan layanan yang diinstal selalu memerlukan restart dalam langkah ini.108 Pada mesin yang tidak dapat Anda mulai ulang sendiri, sesi pertama yang dimulai setelah push pengaturan secara otomatis menghentikan layanan sesuai permintaan yang tersisa tanpa pembungkus. Mesin di mana tidak ada sesi baru yang dimulai tetap menyimpan layanan latar belakangnya yang tanpa pembungkus sampai satu sesi dimulai.

110 </Step>109 </Step>

111 110 

112 <Step title="Verifikasi">111 <Step title="Verifikasi">

Details

142 142 

143Sebuah sesi merespons nama yang Anda tetapkan dengan perintah [`/rename`](/docs/id/commands) atau flag [`--name`](/docs/id/cli-reference#cli-flags). Jika Anda tidak menetapkannya, Claude Code menamai sesi tersebut sendiri. Untuk sesi interaktif, nama tersebut adalah nama yang ditampilkan dalam [daftar sesi yang sedang berjalan](/docs/id/sessions#name-your-sessions).143Sebuah sesi merespons nama yang Anda tetapkan dengan perintah [`/rename`](/docs/id/commands) atau flag [`--name`](/docs/id/cli-reference#cli-flags). Jika Anda tidak menetapkannya, Claude Code menamai sesi tersebut sendiri. Untuk sesi interaktif, nama tersebut adalah nama yang ditampilkan dalam [daftar sesi yang sedang berjalan](/docs/id/sessions#name-your-sessions).

144 144 

145Ketika Anda mengganti nama sesi, atau memulai atau melanjutkan sesi interaktif, dengan nama yang sudah digunakan oleh sesi aktif lain di mesin ini, Claude Code membiarkan nama tersebut tetap pada sesi yang sudah memilikinya dan [mengganti nama sesi Anda menjadi variannya](/docs/id/sessions#name-your-sessions). Sesi-sesi tetap dapat berbagi nama, misalnya ketika salah satunya menjalankan versi Claude Code yang lebih lama atau nama bersama tersebut adalah nama yang dihasilkan Claude Code. Kecuali sesi ini terhubung ke Remote Control, Claude Code menampilkan direktori kerja setiap sesi lokal di output `/list-agents`, sehingga Anda dapat membedakan sesi-sesi dengan nama yang sama ketika berjalan di direktori yang berbeda. Claude mengalamatkan pesan dengan salah satu dari dua cara, bergantung pada berapa banyak sesi aktif yang merespons nama tersebut:145Kecuali sesi ini terhubung ke Remote Control, Claude Code menampilkan direktori kerja setiap sesi lokal di output `/list-agents`, sehingga Anda dapat membedakan sesi-sesi dengan nama yang sama ketika berjalan di direktori yang berbeda. Claude mengalamatkan pesan dengan salah satu dari dua cara, bergantung pada berapa banyak sesi aktif yang merespons nama tersebut:

146 146 

147* **Satu sesi merespons nama tersebut**: Claude Code menyampaikan pesan hanya berdasarkan nama.147* **Satu sesi merespons nama tersebut**: Claude Code menyampaikan pesan hanya berdasarkan nama.

148* **Beberapa sesi berbagi nama tersebut, atau Claude Code tidak dapat memeriksa semua tempat sesi Anda berjalan**: Claude menambahkan pengenal singkat ke setiap baris dalam daftarnya dan menggunakan pengenal tersebut dalam alamat.148* **Beberapa sesi berbagi nama tersebut, atau Claude Code tidak dapat memeriksa semua tempat sesi Anda berjalan**: Claude menambahkan pengenal singkat ke setiap baris dalam daftarnya dan menggunakan pengenal tersebut dalam alamat.

desktop.md +30 −4

Details

400 400 

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

402 402 

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

404 404 

405Untuk menyertakan file yang diabaikan git seperti `.env` di worktree baru, buat file [`.worktreeinclude`](/docs/id/worktrees#copy-gitignored-files-into-worktrees) di root proyek Anda.405* **Sesi lokal**: atur **Worktree location** di **Settings > Claude Code**

406* **Sesi SSH**: atur **Worktree folder** pada [koneksi SSH](#choose-where-ssh-session-worktrees-go)

407 

408Anda juga dapat mengatur **Branch prefix** di **Settings > Claude Code**. Desktop menambahkannya di depan setiap nama branch worktree, yang berguna untuk menjaga branch yang dibuat Claude tetap terorganisir.

409 

410Untuk menghapus worktree ketika selesai, arahkan ke sesi di sidebar dan klik ikon archive. Untuk memiliki sesi mengarsipkan diri mereka sendiri ketika pull request mereka di-merge atau ditutup, aktifkan **Auto-archive after PR merge or close** di **Settings > Claude Code**. Auto-archive hanya berlaku untuk sesi lokal yang telah selesai berjalan.

411 

412Untuk menyertakan file yang diabaikan git seperti `.env` di worktree baru, buat file [`.worktreeinclude`](/docs/id/worktrees#copy-gitignored-files-into-worktrees) di root proyek Anda. Lihat [Apa yang dibagikan worktree dengan checkout utama](/docs/id/worktrees#what-worktrees-share-with-the-main-checkout) untuk mengetahui dari mana sesi worktree membaca pengaturan proyek, hook, dan skill.

406 413 

407<Note>414<Note>

408 Isolasi sesi memerlukan [Git](https://git-scm.com/downloads). Sebagian besar Mac menyertakan Git secara default. Jalankan `git --version` di Terminal untuk memeriksa; jika menampilkan nomor versi, Git sudah terinstal. Jika Anda mengalami kesalahan Git, tanyakan Claude di tab [Cowork](https://claude.com/product/cowork) untuk membantu memecahkan masalah setup Anda.415 Isolasi sesi memerlukan [Git](https://git-scm.com/downloads). Sebagian besar Mac menyertakan Git secara default. Jalankan `git --version` di Terminal untuk memeriksa; jika menampilkan nomor versi, Git sudah terinstal. Jika Anda mengalami kesalahan Git, tanyakan Claude di tab [Cowork](https://claude.com/product/cowork) untuk membantu memecahkan masalah setup Anda.


811* **SSH host**: `user@hostname` atau host yang ditentukan di `~/.ssh/config`818* **SSH host**: `user@hostname` atau host yang ditentukan di `~/.ssh/config`

812* **SSH port**: default ke 22 jika dibiarkan kosong, atau menggunakan port dari konfigurasi SSH Anda819* **SSH port**: default ke 22 jika dibiarkan kosong, atau menggunakan port dari konfigurasi SSH Anda

813* **SSH key (optional)**: path ke kunci pribadi Anda, seperti `~/.ssh/id_ed25519`. Biarkan kosong untuk menggunakan konfigurasi SSH atau SSH agent Anda.820* **SSH key (optional)**: path ke kunci pribadi Anda, seperti `~/.ssh/id_ed25519`. Biarkan kosong untuk menggunakan konfigurasi SSH atau SSH agent Anda.

821* **Worktree folder**: folder di mesin jarak jauh, seperti `~/worktrees`, tempat sesi baru membuat worktree-nya. Biarkan kosong untuk menggunakan [default mesin jarak jauh](#choose-where-ssh-session-worktrees-go).

814 822 

815Setelah ditambahkan, koneksi muncul di bawah **SSH** di dropdown lingkungan. Pilih untuk memulai sesi di mesin itu. Claude berjalan di mesin jarak jauh dengan akses ke file dan tool-nya.823Setelah ditambahkan, koneksi muncul di bawah **SSH** di dropdown lingkungan. Pilih untuk memulai sesi di mesin itu. Claude berjalan di mesin jarak jauh dengan akses ke file dan tool-nya.

816 824 

817Mesin jarak jauh harus menjalankan Linux atau macOS. Desktop menginstal Claude Code di mesin jarak jauh secara otomatis saat pertama kali Anda terhubung. Setelah terhubung, sesi SSH mendukung permission modes, connectors, plugins, dan MCP servers.825Mesin jarak jauh harus menjalankan Linux atau macOS. Desktop menginstal Claude Code di mesin jarak jauh secara otomatis saat pertama kali Anda terhubung. Setelah terhubung, sesi SSH mendukung permission modes, connectors, plugins, dan MCP servers.

818 826 

827<h4 id="choose-where-ssh-session-worktrees-go">

828 Memilih lokasi worktree sesi SSH

829</h4>

830 

831Kecuali organisasi Anda membatasi folder mana yang boleh digunakan sesi, sesi SSH baru membuat [worktree](#work-in-parallel-with-sessions)-nya di lokasi pertama dari berikut ini yang telah diatur:

832 

8331. **Worktree folder** pada koneksi SSH

8342. [`worktree.location`](/docs/id/settings-reference#worktree-location) di `~/.claude/settings.json` pada mesin jarak jauh

8353. `<project-root>/.claude/worktrees/`, default-nya

836 

837Setiap proyek mendapatkan subfoldernya sendiri di folder yang Anda atur, sehingga dengan `~/worktrees`, path sebuah worktree adalah `~/worktrees/<project>-<id>/<worktree-name>`. Jika folder yang Anda atur berada di dalam proyek, Desktop mengabaikannya untuk proyek tersebut dan menggunakan default.

838 

839Untuk mengatur **Worktree folder** pada koneksi yang Anda tambahkan sebelumnya atau koneksi yang dikelola organisasi Anda, arahkan ke koneksi tersebut di dropdown lingkungan dan klik ikon gear.

840 

841Bidang ini memerlukan Claude Desktop v1.44121.0 atau yang lebih baru. Jika organisasi Anda membatasi folder mana yang boleh digunakan sesi, Desktop menyembunyikan bidang ini dan menyimpan worktree di dalam proyek.

842 

819<h4 id="open-an-ssh-session-from-a-link">843<h4 id="open-an-ssh-session-from-a-link">

820 Membuka sesi SSH dari tautan844 Membuka sesi SSH dari tautan

821</h4>845</h4>


869 Pre-configure SSH connections for your team893 Pre-configure SSH connections for your team

870</h4>894</h4>

871 895 

872Administrator dapat mendistribusikan koneksi SSH kepada anggota tim dengan mengatur `sshConfigs` di [pengaturan terkelola](/docs/id/managed-settings). Koneksi yang ditentukan dengan cara ini muncul di dropdown lingkungan setiap pengguna secara otomatis dan ditampilkan sebagai terkelola, sehingga pengguna dapat memilihnya tetapi tidak dapat mengedit atau menghapusnya di aplikasi.896Administrator dapat mendistribusikan koneksi SSH kepada anggota tim dengan mengatur `sshConfigs` di [pengaturan terkelola](/docs/id/managed-settings). Koneksi yang ditentukan dengan cara ini muncul di dropdown lingkungan setiap pengguna secara otomatis dan ditampilkan sebagai terkelola. Pengguna dapat memilihnya dan [mengatur **Worktree folder** mereka sendiri](#choose-where-ssh-session-worktrees-go) untuk koneksi tersebut, tetapi tidak dapat mengedit hal lain atau menghapusnya di aplikasi.

873 897 

874Contoh berikut pre-configure satu koneksi:898Contoh berikut pre-configure satu koneksi:

875 899 


935 Formulir OpenTelemetry untuk Cowork di bawah **Monitoring** dalam [Data and privacy settings](https://claude.ai/admin-settings/data-privacy-controls) konsol admin berlaku untuk sesi Cowork saja. Dalam sesi Cowork di mesin ini, aplikasi desktop meneruskan kolektor tersebut ke Claude Code sebagai environment variable `OTEL_*`, sehingga formulir berlaku meskipun Claude Code dalam sesi tersebut [tidak pernah mengambil pengaturan konsol admin](#managed-settings).959 Formulir OpenTelemetry untuk Cowork di bawah **Monitoring** dalam [Data and privacy settings](https://claude.ai/admin-settings/data-privacy-controls) konsol admin berlaku untuk sesi Cowork saja. Dalam sesi Cowork di mesin ini, aplikasi desktop meneruskan kolektor tersebut ke Claude Code sebagai environment variable `OTEL_*`, sehingga formulir berlaku meskipun Claude Code dalam sesi tersebut [tidak pernah mengambil pengaturan konsol admin](#managed-settings).

936 960 

937 Untuk mengekspor telemetri dari sesi Code tab, atur `CLAUDE_CODE_ENABLE_TELEMETRY` dan variabel `OTEL_*` dalam blok `env` dari pengaturan terkelola Claude Code Anda, seperti yang ditunjukkan dalam [administrator configuration for monitoring](/docs/id/monitoring-usage#administrator-configuration). Sesi lokal, cloud, dan SSH masing-masing membaca [pengaturan terkelola dari sumber yang berbeda](#managed-settings). Untuk host yang dapat dijangkau sesi cloud, lihat [network access](/docs/id/cloud-environments#network-access). Untuk `service.name` yang dilaporkan sesi Code tab, lihat [service information](/docs/id/monitoring-usage#service-information).961 Untuk mengekspor telemetri dari sesi Code tab, atur `CLAUDE_CODE_ENABLE_TELEMETRY` dan variabel `OTEL_*` dalam blok `env` dari pengaturan terkelola Claude Code Anda, seperti yang ditunjukkan dalam [administrator configuration for monitoring](/docs/id/monitoring-usage#administrator-configuration). Sesi lokal, cloud, dan SSH masing-masing membaca [pengaturan terkelola dari sumber yang berbeda](#managed-settings). Untuk host yang dapat dijangkau sesi cloud, lihat [network access](/docs/id/cloud-environments#network-access). Untuk `service.name` yang dilaporkan sesi Code tab, lihat [service information](/docs/id/monitoring-usage#service-information).

962 

963 Untuk mengetahui di mesin jarak jauh mana sebuah sesi SSH berjalan, lihat [Attribute telemetry to Desktop SSH sessions](/docs/id/monitoring-usage#attribute-telemetry-to-desktop-ssh-sessions).

938</Note>964</Note>

939 965 

940<h3 id="managed-settings">966<h3 id="managed-settings">


951| `browserExternalPageTools` | atur ke `"disabled"` untuk mencegah Claude menggunakan tools untuk membaca atau bertindak pada halaman eksternal di [Browser pane](#browse-external-sites). Pengguna masih dapat menavigasi ke situs eksternal sendiri, dan pratinjau server dev lokal tidak terpengaruh. |977| `browserExternalPageTools` | atur ke `"disabled"` untuk mencegah Claude menggunakan tools untuk membaca atau bertindak pada halaman eksternal di [Browser pane](#browse-external-sites). Pengguna masih dapat menavigasi ke situs eksternal sendiri, dan pratinjau server dev lokal tidak terpengaruh. |

952| `disableMobileSimulatorTools` | atur ke `true` untuk memblokir tools Claude untuk mengontrol dan menangkap perangkat di [iOS Simulator pane](/docs/id/desktop-ios-simulator#turn-off-simulator-access). Pane tetap dapat digunakan untuk ketukan pengguna sendiri; hanya akses Claude yang dihapus. Nilainya harus berupa boolean JSON `true`; string `"true"` diabaikan. |978| `disableMobileSimulatorTools` | atur ke `true` untuk memblokir tools Claude untuk mengontrol dan menangkap perangkat di [iOS Simulator pane](/docs/id/desktop-ios-simulator#turn-off-simulator-access). Pane tetap dapat digunakan untuk ketukan pengguna sendiri; hanya akses Claude yang dihapus. Nilainya harus berupa boolean JSON `true`; string `"true"` diabaikan. |

953| `disableBrowserExternalNavigation` | atur ke `true` untuk mematikan penjelajahan eksternal di [Browser pane](#browse-external-sites) sepenuhnya. Baik pengguna maupun Claude tidak dapat menavigasi ke situs eksternal, dan pratinjau server dev localhost tidak terpengaruh. Nilainya harus berupa boolean JSON `true`; string `"true"` diabaikan. |979| `disableBrowserExternalNavigation` | atur ke `true` untuk mematikan penjelajahan eksternal di [Browser pane](#browse-external-sites) sepenuhnya. Baik pengguna maupun Claude tidak dapat menavigasi ke situs eksternal, dan pratinjau server dev localhost tidak terpengaruh. Nilainya harus berupa boolean JSON `true`; string `"true"` diabaikan. |

954| `sshConfigs` | pre-configure [SSH connections](#pre-configure-ssh-connections-for-your-team) yang muncul di dropdown lingkungan. Pengguna tidak dapat mengedit atau menghapus koneksi yang dikelola. |980| `sshConfigs` | pre-configure [SSH connections](#pre-configure-ssh-connections-for-your-team) yang muncul di dropdown lingkungan. Pengguna tidak dapat menghapus koneksi yang dikelola atau mengedit apa pun selain **Worktree folder** mereka sendiri. |

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

956| `disableDesktopLocalSessions` | atur ke `true` untuk mematikan [Code sessions yang berjalan di perangkat](#local-sessions-on-managed-devices), meninggalkan sesi SSH ke host lain dan sesi cloud tersedia. Nilainya harus berupa boolean JSON `true`. Dibaca dari pengaturan terkelola saja. Memerlukan Claude Desktop v1.37937.0 atau lebih baru. |982| `disableDesktopLocalSessions` | atur ke `true` untuk mematikan [Code sessions yang berjalan di perangkat](#local-sessions-on-managed-devices), meninggalkan sesi SSH ke host lain dan sesi cloud tersedia. Nilainya harus berupa boolean JSON `true`. Dibaca dari pengaturan terkelola saja. Memerlukan Claude Desktop v1.37937.0 atau lebih baru. |

957| `disableSshSavedPasswords` | atur ke `true` untuk menghentikan Desktop dari menawarkan untuk mengingat kata sandi SSH serta dari menggunakan atau menampilkan kata sandi yang telah disimpannya sebelumnya. Mengaktifkannya tidak menghapus kata sandi tersebut. Dibaca dari pengaturan terkelola saja. Memerlukan Claude Desktop v1.49585.0 atau lebih baru. |983| `disableSshSavedPasswords` | atur ke `true` untuk menghentikan Desktop dari menawarkan untuk mengingat kata sandi SSH serta dari menggunakan atau menampilkan kata sandi yang telah disimpannya sebelumnya. Mengaktifkannya tidak menghapus kata sandi tersebut. Dibaca dari pengaturan terkelola saja. Memerlukan Claude Desktop v1.49585.0 atau lebih baru. |

env-vars.md +5 −5

Details

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

211| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | Timeout macet dalam milidetik untuk subagent. Juga mencakup [agent workflow](/docs/id/workflows#when-an-agent-stalls-and-restarts) pada Claude Code v2.1.286 atau lebih baru. Default `600000` (10 menit); jika Anda menaikkan `CLAUDE_STREAM_IDLE_TIMEOUT_MS` saat stream watchdog aktif, default ikut naik, seperti yang dijelaskan di [Menangani respons API yang lambat atau macet](/docs/id/agent-sdk/typescript#handle-slow-or-stalled-api-responses) |211| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | Timeout macet dalam milidetik untuk subagent. Juga mencakup [agent workflow](/docs/id/workflows#when-an-agent-stalls-and-restarts) pada Claude Code v2.1.286 atau lebih baru. Default `600000` (10 menit); jika Anda menaikkan `CLAUDE_STREAM_IDLE_TIMEOUT_MS` saat stream watchdog aktif, default ikut naik, seperti yang dijelaskan di [Menangani respons API yang lambat atau macet](/docs/id/agent-sdk/typescript#handle-slow-or-stalled-api-responses) |

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

213| `CLAUDE_AUTO_BACKGROUND_TASKS` | Tetapkan ke `1` untuk memaksa mengaktifkan pemindahan otomatis tugas agent yang berjalan lama ke latar belakang. Saat diaktifkan, subagent dipindahkan ke latar belakang setelah berjalan sekitar dua menit. Juga mengaktifkan [pemindahan otomatis panggilan tool MCP yang lama ke latar belakang](/docs/id/mcp#automatic-backgrounding-of-long-tool-calls) dalam mode non-interaktif pada Claude Code v2.1.212 atau lebih baru |213| `CLAUDE_AUTO_BACKGROUND_TASKS` | Tetapkan ke `1` untuk memaksa aktifkan pemindahan otomatis tugas agent yang berjalan lama ke latar belakang. Jika diaktifkan, [subagent](/docs/id/sub-agents#run-subagents-in-foreground-or-background) berpindah ke latar belakang setelah berjalan sekitar dua menit. Jika Claude mengantrekan panggilan tool seperti pengeditan file di belakang subagent, subagent selesai di latar depan sebelum panggilan tersebut dimulai. Juga mengaktifkan [pemindahan otomatis panggilan tool MCP yang panjang ke latar belakang](/docs/id/mcp#automatic-backgrounding-of-long-tool-calls) dalam mode non-interaktif pada Claude Code v2.1.212 atau lebih baru |

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

215| `CLAUDE_AX_SCREEN_READER` | Tetapkan ke `1` untuk merender output yang ramah pembaca layar: teks datar tanpa border dekoratif atau animasi. Tetapkan ke `0` untuk memaksa mode pembaca layar nonaktif bahkan saat [`axScreenReader`](/docs/id/settings-reference#axscreenreader) bernilai `true`. Flag [`--ax-screen-reader`](/docs/id/cli-reference#cli-flags) diutamakan. Memerlukan Claude Code v2.1.181 atau lebih baru |215| `CLAUDE_AX_SCREEN_READER` | Tetapkan ke `1` untuk merender output yang ramah pembaca layar: teks datar tanpa border dekoratif atau animasi. Tetapkan ke `0` untuk memaksa mode pembaca layar nonaktif bahkan saat [`axScreenReader`](/docs/id/settings-reference#axscreenreader) bernilai `true`. Flag [`--ax-screen-reader`](/docs/id/cli-reference#cli-flags) diutamakan. Memerlukan Claude Code v2.1.181 atau lebih baru |

216| `CLAUDE_AX_STARTUP_QUIET_MS` | Dalam [mode pembaca layar](/docs/id/accessibility), berapa milidetik Claude Code menahan render antarmuka pertama setelah baris konfirmasi startup, sehingga pembaca layar Anda dapat mengucapkan baris tersebut secara lengkap sebelum output baru menyelanya. Default `3000`. Tetapkan `0` untuk merender segera. Claude Code membatasi penahanan hingga `600000` (10 menit). Penekanan tombol pertama Anda mengakhiri penahanan lebih awal. Memerlukan Claude Code v2.1.217 atau lebih baru |216| `CLAUDE_AX_STARTUP_QUIET_MS` | Dalam [mode pembaca layar](/docs/id/accessibility), berapa milidetik Claude Code menahan render antarmuka pertama setelah baris konfirmasi startup, sehingga pembaca layar Anda dapat mengucapkan baris tersebut secara lengkap sebelum output baru menyelanya. Default `3000`. Tetapkan `0` untuk merender segera. Claude Code membatasi penahanan hingga `600000` (10 menit). Penekanan tombol pertama Anda mengakhiri penahanan lebih awal. Memerlukan Claude Code v2.1.217 atau lebih baru |


285| `CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK` | Tetapkan ke `1` untuk mematikan [peralihan model otomatis saat pengklasifikasi keamanan menandai permintaan](/docs/id/model-config#automatic-model-fallback), perilaku yang dikontrol oleh pengaturan [`switchModelsOnFlag`](/docs/id/settings-reference#switchmodelsonflag) |285| `CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK` | Tetapkan ke `1` untuk mematikan [peralihan model otomatis saat pengklasifikasi keamanan menandai permintaan](/docs/id/model-config#automatic-model-fallback), perilaku yang dikontrol oleh pengaturan [`switchModelsOnFlag`](/docs/id/settings-reference#switchmodelsonflag) |

286| `CLAUDE_CODE_DISABLE_STRUCTURED_OUTPUTS` | Tetapkan ke `1` untuk menghentikan Claude Code mengirim field structured-output `output_config.format` dan nilai `anthropic-beta` yang berpasangan dengannya, untuk [LLM gateway](/docs/id/llm-gateway-protocol#feature-pass-through) yang upstream-nya menolaknya. Ini tetap mengaktifkan kapabilitas pra-rilis lain yang dimatikan oleh [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/id/llm-gateway-protocol#disable-pre-release-capabilities). Memerlukan Claude Code v2.1.288 atau lebih baru |286| `CLAUDE_CODE_DISABLE_STRUCTURED_OUTPUTS` | Tetapkan ke `1` untuk menghentikan Claude Code mengirim field structured-output `output_config.format` dan nilai `anthropic-beta` yang berpasangan dengannya, untuk [LLM gateway](/docs/id/llm-gateway-protocol#feature-pass-through) yang upstream-nya menolaknya. Ini tetap mengaktifkan kapabilitas pra-rilis lain yang dimatikan oleh [`CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`](/docs/id/llm-gateway-protocol#disable-pre-release-capabilities). Memerlukan Claude Code v2.1.288 atau lebih baru |

287| `CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT` | Tetapkan ke `1` untuk mematikan pemeriksaan [path kritis](/docs/id/permission-modes#critical-paths) untuk `rm` rekursif yang targetnya sepenuhnya merupakan output dari substitusi perintah, seperti `rm -rf "$(pwd)"`. Pemeriksaan path kritis lainnya tetap berjalan. Tetapkan di lingkungan yang menjalankan Claude Code, karena Claude Code mengabaikan salinan yang dikirimkan melalui blok `env` pengaturan. Memerlukan Claude Code v2.1.281 atau lebih baru |287| `CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT` | Tetapkan ke `1` untuk mematikan pemeriksaan [path kritis](/docs/id/permission-modes#critical-paths) untuk `rm` rekursif yang targetnya sepenuhnya merupakan output dari substitusi perintah, seperti `rm -rf "$(pwd)"`. Pemeriksaan path kritis lainnya tetap berjalan. Tetapkan di lingkungan yang menjalankan Claude Code, karena Claude Code mengabaikan salinan yang dikirimkan melalui blok `env` pengaturan. Memerlukan Claude Code v2.1.281 atau lebih baru |

288| `CLAUDE_CODE_DISABLE_TERMINAL_TITLE` | Tetapkan ke `1` untuk menonaktifkan pembaruan judul terminal otomatis berdasarkan konteks percakapan. Ini juga melewati permintaan model kecil/cepat di latar belakang yang [menghasilkan judul sesi](/docs/id/sessions#name-your-sessions) |288| `CLAUDE_CODE_DISABLE_TERMINAL_TITLE` | Tetapkan ke `1` untuk menonaktifkan pembaruan judul terminal otomatis berdasarkan konteks percakapan. Ini juga melewati permintaan model kecil/cepat di latar belakang yang [membuat judul sesi](/docs/id/sessions#name-your-sessions), dan menonaktifkan [laporan status ke terminal Anda](/docs/id/terminal-config#see-session-status-in-your-terminal) |

289| `CLAUDE_CODE_DISABLE_THINKING` | Tetapkan ke `1` untuk menghilangkan parameter `thinking` dari permintaan API sepenuhnya. Ini adalah opsi kompatibilitas untuk proxy dan gateway yang menolak parameter tersebut. Pada model yang melakukan thinking secara default, menghilangkan parameter berarti model mungkin tetap melakukan thinking. Untuk secara eksplisit menonaktifkan [extended thinking](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) di Anthropic API, gunakan `MAX_THINKING_TOKENS=0` sebagai gantinya. Tidak satu pun dari kedua variabel ini yang mematikan thinking pada Opus 5.5, Sonnet 5.5, Haiku 5.5, atau model Fable, yang thinking-nya tidak dapat dimatikan. Pada [penyedia pihak ketiga](/docs/id/third-party-integrations), `MAX_THINKING_TOKENS=0` juga menghilangkan parameter tersebut, sehingga kedua variabel berperilaku sama di sana |289| `CLAUDE_CODE_DISABLE_THINKING` | Tetapkan ke `1` untuk menghilangkan parameter `thinking` dari permintaan API sepenuhnya. Ini adalah opsi kompatibilitas untuk proxy dan gateway yang menolak parameter tersebut. Pada model yang melakukan thinking secara default, menghilangkan parameter berarti model mungkin tetap melakukan thinking. Untuk secara eksplisit menonaktifkan [extended thinking](https://platform.claude.com/docs/en/build-with-claude/extended-thinking) di Anthropic API, gunakan `MAX_THINKING_TOKENS=0` sebagai gantinya. Tidak satu pun dari kedua variabel ini yang mematikan thinking pada Opus 5.5, Sonnet 5.5, Haiku 5.5, atau model Fable, yang thinking-nya tidak dapat dimatikan. Pada [penyedia pihak ketiga](/docs/id/third-party-integrations), `MAX_THINKING_TOKENS=0` juga menghilangkan parameter tersebut, sehingga kedua variabel berperilaku sama di sana |

290| `CLAUDE_CODE_DISABLE_UNKNOWN_MODEL_WINDOW_ENFORCEMENT` | Tetapkan ke `1` untuk melewati [auto-compaction](/docs/id/costs#reduce-token-usage) proaktif saat Claude Code tidak mengenali ID model, seperti alias [LLM gateway](/docs/id/llm-gateway). Tanpa variabel ini, Claude Code melakukan compaction pada context window yang diasumsikannya untuk ID tersebut. `CLAUDE_CODE_MAX_CONTEXT_TOKENS` dapat mengoreksi jendela yang diasumsikan sebagai gantinya; lihat [Mengoreksi jendela untuk gateway atau ID model kustom](/docs/id/model-config#correct-the-window-for-a-gateway-or-custom-model-id) untuk mengetahui kapan masing-masing variabel berlaku. Memerlukan Claude Code v2.1.223 atau lebih baru |290| `CLAUDE_CODE_DISABLE_UNKNOWN_MODEL_WINDOW_ENFORCEMENT` | Tetapkan ke `1` untuk melewati [auto-compaction](/docs/id/costs#reduce-token-usage) proaktif saat Claude Code tidak mengenali ID model, seperti alias [LLM gateway](/docs/id/llm-gateway). Tanpa variabel ini, Claude Code melakukan compaction pada context window yang diasumsikannya untuk ID tersebut. `CLAUDE_CODE_MAX_CONTEXT_TOKENS` dapat mengoreksi jendela yang diasumsikan sebagai gantinya; lihat [Mengoreksi jendela untuk gateway atau ID model kustom](/docs/id/model-config#correct-the-window-for-a-gateway-or-custom-model-id) untuk mengetahui kapan masing-masing variabel berlaku. Memerlukan Claude Code v2.1.223 atau lebih baru |

291| `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL` | Tetapkan ke `1` untuk menonaktifkan virtual scrolling dalam [rendering layar penuh](/docs/id/fullscreen) dan merender setiap pesan dalam transkrip. Gunakan ini jika scroll dalam mode layar penuh menampilkan area kosong di tempat pesan seharusnya muncul |291| `CLAUDE_CODE_DISABLE_VIRTUAL_SCROLL` | Tetapkan ke `1` untuk menonaktifkan virtual scrolling dalam [rendering layar penuh](/docs/id/fullscreen) dan merender setiap pesan dalam transkrip. Gunakan ini jika scroll dalam mode layar penuh menampilkan area kosong di tempat pesan seharusnya muncul |


309| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | Waktu dalam milidetik untuk menunggu setelah loop kueri menjadi idle sebelum keluar secara otomatis. Berguna untuk alur kerja otomatis dan skrip yang menggunakan mode SDK |309| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | Waktu dalam milidetik untuk menunggu setelah loop kueri menjadi idle sebelum keluar secara otomatis. Berguna untuk alur kerja otomatis dan skrip yang menggunakan mode SDK |

310| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | Setel ke `1` untuk mengaktifkan [tim agent](/docs/id/agent-teams). Tim agent bersifat eksperimental dan nonaktif secara default |310| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | Setel ke `1` untuk mengaktifkan [tim agent](/docs/id/agent-teams). Tim agent bersifat eksperimental dan nonaktif secara default |

311| `CLAUDE_CODE_EXTRA_BODY` | Objek JSON untuk digabungkan ke tingkat teratas setiap body permintaan API. Berguna untuk meneruskan parameter khusus penyedia yang tidak diekspos langsung oleh Claude Code. Nilai yang diekspor di shell Anda juga berlaku untuk [sesi latar belakang](/docs/id/agent-view) yang Anda kirim dengan `claude agents` atau `--bg`. Sebelum v2.1.206, sesi latar belakang mengabaikan nilai yang diekspor shell dan menggunakan salinan apa pun yang diwarisi oleh proses supervisor latar belakang |311| `CLAUDE_CODE_EXTRA_BODY` | Objek JSON untuk digabungkan ke tingkat teratas setiap body permintaan API. Berguna untuk meneruskan parameter khusus penyedia yang tidak diekspos langsung oleh Claude Code. Nilai yang diekspor di shell Anda juga berlaku untuk [sesi latar belakang](/docs/id/agent-view) yang Anda kirim dengan `claude agents` atau `--bg`. Sebelum v2.1.206, sesi latar belakang mengabaikan nilai yang diekspor shell dan menggunakan salinan apa pun yang diwarisi oleh proses supervisor latar belakang |

312| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | Menimpa batas token default untuk pembacaan file. Berguna saat Anda perlu membaca file yang lebih besar secara utuh |312| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | Menimpa batas token default untuk [pembacaan file](/docs/id/tools-reference#large-files), yaitu 25.000 token. Berguna ketika Anda perlu membaca file yang lebih besar secara utuh. Pembacaan yang dilakukan Claude dengan parameter `allow_large` dapat melampaui batas ini ketika context window masih memiliki ruang |

313| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | Setel ke `1` untuk memaksa persistensi transkrip, riwayat prompt, dan pendaftaran `claude agents` bahkan ketika `claude` ini diluncurkan dari dalam sesi Claude Code lain. Gunakan ketika nilai `CLAUDE_CODE_CHILD_SESSION` yang diwarisi, misalnya dari sesi `screen` atau peluncur latar belakang yang pertama kali dimulai oleh tool Bash Claude Code, menyebabkan sesi tingkat atas yang sebenarnya salah diklasifikasikan sebagai bersarang. Sejak v2.1.178, Claude Code mendeteksi kasus tmux secara otomatis dan mengabaikan penanda yang diwarisi, sehingga tmux tidak lagi memerlukan variabel ini. Juga dihormati di v2.1.169 dan sebelumnya; tidak berpengaruh di v2.1.170 dan v2.1.171, di mana deteksi sesi bersarang yang ditimpanya dihapus |313| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | Setel ke `1` untuk memaksa persistensi transkrip, riwayat prompt, dan pendaftaran `claude agents` bahkan ketika `claude` ini diluncurkan dari dalam sesi Claude Code lain. Gunakan ketika nilai `CLAUDE_CODE_CHILD_SESSION` yang diwarisi, misalnya dari sesi `screen` atau peluncur latar belakang yang pertama kali dimulai oleh tool Bash Claude Code, menyebabkan sesi tingkat atas yang sebenarnya salah diklasifikasikan sebagai bersarang. Sejak v2.1.178, Claude Code mendeteksi kasus tmux secara otomatis dan mengabaikan penanda yang diwarisi, sehingga tmux tidak lagi memerlukan variabel ini. Juga dihormati di v2.1.169 dan sebelumnya; tidak berpengaruh di v2.1.170 dan v2.1.171, di mana deteksi sesi bersarang yang ditimpanya dihapus |

314| `CLAUDE_CODE_FORCE_STRIKETHROUGH` | Setel ke `1` untuk memaksa rendering coretan untuk `~~text~~` dalam respons Claude saat terminal Anda mendukungnya tetapi tidak terdeteksi otomatis, misalnya melalui SSH tanpa `TERM_PROGRAM` diteruskan. Tanpa ini, terminal yang tidak terdeteksi menampilkan penanda `~~` secara literal alih-alih merender teks sebagai coretan. Memerlukan Claude Code v2.1.186 atau lebih baru |314| `CLAUDE_CODE_FORCE_STRIKETHROUGH` | Setel ke `1` untuk memaksa rendering coretan untuk `~~text~~` dalam respons Claude saat terminal Anda mendukungnya tetapi tidak terdeteksi otomatis, misalnya melalui SSH tanpa `TERM_PROGRAM` diteruskan. Tanpa ini, terminal yang tidak terdeteksi menampilkan penanda `~~` secara literal alih-alih merender teks sebagai coretan. Memerlukan Claude Code v2.1.186 atau lebih baru |

315| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | Setel ke `1` untuk memaksa mengaktifkan [output tersinkronisasi](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036) DEC private mode 2026 saat terminal Anda mendukungnya tetapi tidak terdeteksi otomatis. Berguna untuk emulator seperti Emacs `eat` yang mengimplementasikan BSU/ESU tetapi tidak membalas probe kapabilitas. Tidak berpengaruh di bawah tmux. Tidak seperti `CLAUDE_CODE_NO_FLICKER`, yang beralih ke [rendering layar penuh](/docs/id/fullscreen), ini tidak mengubah renderer |315| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | Setel ke `1` untuk memaksa mengaktifkan [output tersinkronisasi](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036) DEC private mode 2026 saat terminal Anda mendukungnya tetapi tidak terdeteksi otomatis. Berguna untuk emulator seperti Emacs `eat` yang mengimplementasikan BSU/ESU tetapi tidak membalas probe kapabilitas. Tidak berpengaruh di bawah tmux. Tidak seperti `CLAUDE_CODE_NO_FLICKER`, yang beralih ke [rendering layar penuh](/docs/id/fullscreen), ini tidak mengubah renderer |


340| `CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION` | Batas panggilan [WebSearch](/docs/id/tools-reference#session-search-limit) (default: 200). Saat Claude mencapai batas, panggilan WebSearch berikutnya mengembalikan pemberitahuan yang memintanya melanjutkan dengan informasi yang sudah dikumpulkan. Menerima bilangan bulat positif tanpa batas atas. Nilai lain diabaikan dan default berlaku, sehingga batas dapat dinaikkan tetapi tidak dapat dimatikan. Memerlukan Claude Code v2.1.212 atau lebih baru |340| `CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION` | Batas panggilan [WebSearch](/docs/id/tools-reference#session-search-limit) (default: 200). Saat Claude mencapai batas, panggilan WebSearch berikutnya mengembalikan pemberitahuan yang memintanya melanjutkan dengan informasi yang sudah dikumpulkan. Menerima bilangan bulat positif tanpa batas atas. Nilai lain diabaikan dan default berlaku, sehingga batas dapat dinaikkan tetapi tidak dapat dimatikan. Memerlukan Claude Code v2.1.212 atau lebih baru |

341| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | Setel ke `1` untuk memunculkan server MCP stdio hanya dengan lingkungan dasar yang aman ditambah `env` yang dikonfigurasi untuk server, alih-alih mewarisi lingkungan shell Anda |341| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | Setel ke `1` untuk memunculkan server MCP stdio hanya dengan lingkungan dasar yang aman ditambah `env` yang dikonfigurasi untuk server, alih-alih mewarisi lingkungan shell Anda |

342| `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` | Waktu berlalu dalam milidetik sebelum panggilan tool MCP yang masih berjalan [dipindahkan ke tugas latar belakang](/docs/id/mcp#automatic-backgrounding-of-long-tool-calls) (default: 120000, atau 2 menit). Setel ke `0` untuk mematikan pemindahan otomatis ke latar belakang. Memerlukan Claude Code v2.1.212 atau lebih baru |342| `CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS` | Waktu berlalu dalam milidetik sebelum panggilan tool MCP yang masih berjalan [dipindahkan ke tugas latar belakang](/docs/id/mcp#automatic-backgrounding-of-long-tool-calls) (default: 120000, atau 2 menit). Setel ke `0` untuk mematikan pemindahan otomatis ke latar belakang. Memerlukan Claude Code v2.1.212 atau lebih baru |

343| `CLAUDE_CODE_MCP_STARTUP_WAIT_MS` | Berapa lama dalam milidetik giliran pertama sesi [non-interaktif](/docs/id/headless) menunggu server MCP yang masih terhubung, menggantikan [penantian giliran pertama](/docs/id/agent-sdk/mcp#connection-timing) default. Saat disetel, penantian mencakup setiap server yang tertunda. Setel ke `0` untuk melewati penantian. Server [`--permission-prompt-tool`](/docs/id/cli-reference#cli-flags) mempertahankan penantian `MCP_TIMEOUT`-nya sendiri terlepas dari nilainya. Memerlukan Claude Code v2.1.274 atau lebih baru |343| `CLAUDE_CODE_MCP_STARTUP_WAIT_MS` | Berapa lama dalam milidetik giliran pertama sesi [non-interaktif](/docs/id/headless) menunggu server MCP yang masih menyambung, menggantikan [penantian giliran pertama](/docs/id/agent-sdk/mcp#connection-timing) default. Ketika diatur, penantian mencakup setiap server yang tertunda; dalam [lingkungan self-hosted](/docs/id/self-hosted-environments-configuration#connection-timing), ini hanya mengubah berapa lama penantian berlangsung. Atur ke `0` untuk melewati penantian. Server [`--permission-prompt-tool`](/docs/id/cli-reference#cli-flags) tetap menggunakan penantian `MCP_TIMEOUT`-nya sendiri terlepas dari nilai ini. Memerlukan Claude Code v2.1.274 atau lebih baru |

344| `CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT` | Timeout idle dalam milidetik untuk panggilan tool MCP. Saat server MCP stdio, HTTP, SSE, WebSocket, atau [konektor claude.ai](/docs/id/mcp#use-mcp-servers-from-claude-ai) tidak mengirim respons dan tidak ada notifikasi progres selama selama ini, panggilan tool dibatalkan dengan error alih-alih menunggu `MCP_TOOL_TIMEOUT` keseluruhan. Menimpa default per transport sebesar 300000 (5 menit) untuk server jaringan dan 1800000 (30 menit) untuk server stdio. Setel ke `0` untuk menonaktifkan pemeriksaan idle. Nilai di bawah 1000 dinaikkan menjadi satu detik, dan nilai dibatasi pada `MCP_TOOL_TIMEOUT` efektif. `timeout` per server di `.mcp.json` setidaknya 1000 menaikkan jendela idle server tersebut setidaknya menjadi nilai `timeout`. Tidak berlaku untuk server IDE atau server in-process SDK. Memerlukan Claude Code v2.1.187 atau lebih baru. Sebelum v2.1.203, server stdio dikecualikan dari timeout idle |344| `CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT` | Timeout idle dalam milidetik untuk panggilan tool MCP. Saat server MCP stdio, HTTP, SSE, WebSocket, atau [konektor claude.ai](/docs/id/mcp#use-mcp-servers-from-claude-ai) tidak mengirim respons dan tidak ada notifikasi progres selama selama ini, panggilan tool dibatalkan dengan error alih-alih menunggu `MCP_TOOL_TIMEOUT` keseluruhan. Menimpa default per transport sebesar 300000 (5 menit) untuk server jaringan dan 1800000 (30 menit) untuk server stdio. Setel ke `0` untuk menonaktifkan pemeriksaan idle. Nilai di bawah 1000 dinaikkan menjadi satu detik, dan nilai dibatasi pada `MCP_TOOL_TIMEOUT` efektif. `timeout` per server di `.mcp.json` setidaknya 1000 menaikkan jendela idle server tersebut setidaknya menjadi nilai `timeout`. Tidak berlaku untuk server IDE atau server in-process SDK. Memerlukan Claude Code v2.1.187 atau lebih baru. Sebelum v2.1.203, server stdio dikecualikan dari timeout idle |

345| `CLAUDE_CODE_MESSAGING_SOCKET` | Disetel oleh Claude Code, bukan oleh Anda: dalam sesi yang mengikat [socket inbox](/docs/id/cross-session-messaging#the-sessions-inbox-socket), Claude Code mengekspor path socket tersebut ke hook dan perintah Bash saat mengikat socket. Dalam sesi yang dimulai dengan pesan aktif, Claude Code mengikat socket sebelum hook apa pun berjalan. Sesi lain di mesin mengirim pesan ke path ini. Setiap sesi mengekspor socket-nya sendiri alih-alih yang diwarisi dari induk, dan pesan yang tiba di socket tersebut melewati [kontrol masuk](/docs/id/cross-session-messaging#control-inbound-messages) sesi. Blok `env` pengaturan tidak dapat menyetelnya. Memerlukan Claude Code v2.1.224 atau lebih baru |345| `CLAUDE_CODE_MESSAGING_SOCKET` | Disetel oleh Claude Code, bukan oleh Anda: dalam sesi yang mengikat [socket inbox](/docs/id/cross-session-messaging#the-sessions-inbox-socket), Claude Code mengekspor path socket tersebut ke hook dan perintah Bash saat mengikat socket. Dalam sesi yang dimulai dengan pesan aktif, Claude Code mengikat socket sebelum hook apa pun berjalan. Sesi lain di mesin mengirim pesan ke path ini. Setiap sesi mengekspor socket-nya sendiri alih-alih yang diwarisi dari induk, dan pesan yang tiba di socket tersebut melewati [kontrol masuk](/docs/id/cross-session-messaging#control-inbound-messages) sesi. Blok `env` pengaturan tidak dapat menyetelnya. Memerlukan Claude Code v2.1.224 atau lebih baru |

346| `CLAUDE_CODE_MESSAGING_TOKEN` | Disetel oleh Claude Code, bukan oleh Anda: dalam sesi yang mengikat [socket inbox](/docs/id/cross-session-messaging#the-sessions-inbox-socket), Claude Code mengekspor token per sesi ini ke hook dan perintah Bash bersama `CLAUDE_CODE_MESSAGING_SOCKET`. Skrip yang mengirim ke socket dapat mengirim `{"type":"auth","token":"<token>"}` sebagai baris pertamanya untuk membuktikan bahwa skrip tersebut milik sesi. Di Windows native, Claude Code mewajibkan baris ini dan menutup koneksi apa pun yang tidak dibuka dengan baris yang valid. [Aturan anak sendiri](/docs/id/cross-session-messaging#the-sessions-inbox-socket) menjelaskan kapan Claude Code memeriksa token. Setiap sesi mengekspor tokennya sendiri, tidak pernah yang diwarisi dari sesi induk. Blok `env` pengaturan tidak dapat menyetelnya. Memerlukan Claude Code v2.1.228 atau lebih baru |346| `CLAUDE_CODE_MESSAGING_TOKEN` | Disetel oleh Claude Code, bukan oleh Anda: dalam sesi yang mengikat [socket inbox](/docs/id/cross-session-messaging#the-sessions-inbox-socket), Claude Code mengekspor token per sesi ini ke hook dan perintah Bash bersama `CLAUDE_CODE_MESSAGING_SOCKET`. Skrip yang mengirim ke socket dapat mengirim `{"type":"auth","token":"<token>"}` sebagai baris pertamanya untuk membuktikan bahwa skrip tersebut milik sesi. Di Windows native, Claude Code mewajibkan baris ini dan menutup koneksi apa pun yang tidak dibuka dengan baris yang valid. [Aturan anak sendiri](/docs/id/cross-session-messaging#the-sessions-inbox-socket) menjelaskan kapan Claude Code memeriksa token. Setiap sesi mengekspor tokennya sendiri, tidak pernah yang diwarisi dari sesi induk. Blok `env` pengaturan tidak dapat menyetelnya. Memerlukan Claude Code v2.1.228 atau lebih baru |


443| `CLAUDE_ENABLE_BYTE_WATCHDOG` | Atur ke `1` untuk memaksa mengaktifkan watchdog idle streaming tingkat byte, atau atur ke `0` untuk memaksa menonaktifkannya. `0` juga mematikan [tenggat byte pertama](/docs/id/network-config#streaming-idle-watchdogs) pada koneksi tempat tenggat tersebut berjalan. Jika tidak diatur, watchdog diaktifkan secara default untuk koneksi langsung ke Anthropic API dan [Claude Platform on AWS](/docs/id/claude-platform-on-aws), serta untuk respons streaming pada koneksi [gateway](/docs/id/gateways) yang dicapai melalui `ANTHROPIC_BASE_URL` atau `ANTHROPIC_AWS_BASE_URL`; sebelum v2.1.222 watchdog ini tidak berjalan pada koneksi gateway tersebut, sehingga watchdog tingkat event dapat melaporkan macet di sana meskipun ping keep-alive sedang diterima. Untuk timeout dan cara timer saling berinteraksi, lihat [Watchdog idle streaming](/docs/id/network-config#streaming-idle-watchdogs) |443| `CLAUDE_ENABLE_BYTE_WATCHDOG` | Atur ke `1` untuk memaksa mengaktifkan watchdog idle streaming tingkat byte, atau atur ke `0` untuk memaksa menonaktifkannya. `0` juga mematikan [tenggat byte pertama](/docs/id/network-config#streaming-idle-watchdogs) pada koneksi tempat tenggat tersebut berjalan. Jika tidak diatur, watchdog diaktifkan secara default untuk koneksi langsung ke Anthropic API dan [Claude Platform on AWS](/docs/id/claude-platform-on-aws), serta untuk respons streaming pada koneksi [gateway](/docs/id/gateways) yang dicapai melalui `ANTHROPIC_BASE_URL` atau `ANTHROPIC_AWS_BASE_URL`; sebelum v2.1.222 watchdog ini tidak berjalan pada koneksi gateway tersebut, sehingga watchdog tingkat event dapat melaporkan macet di sana meskipun ping keep-alive sedang diterima. Untuk timeout dan cara timer saling berinteraksi, lihat [Watchdog idle streaming](/docs/id/network-config#streaming-idle-watchdogs) |

444| `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK` | Atur ke `1` untuk mengaktifkan watchdog idle streaming tingkat byte pada respons `vnd.amazon.eventstream` Amazon Bedrock, yang juga mengaktifkan [tenggat byte pertama](/docs/id/network-config#streaming-idle-watchdogs) pada permintaan streaming Bedrock. Nonaktif secara default. Konfigurasikan timeout dengan `CLAUDE_STREAM_IDLE_TIMEOUT_MS` |444| `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK` | Atur ke `1` untuk mengaktifkan watchdog idle streaming tingkat byte pada respons `vnd.amazon.eventstream` Amazon Bedrock, yang juga mengaktifkan [tenggat byte pertama](/docs/id/network-config#streaming-idle-watchdogs) pada permintaan streaming Bedrock. Nonaktif secara default. Konfigurasikan timeout dengan `CLAUDE_STREAM_IDLE_TIMEOUT_MS` |

445| `CLAUDE_ENABLE_STREAM_WATCHDOG` | Atur ke `0` untuk memaksa menonaktifkan watchdog idle streaming tingkat event, atau atur ke `1` untuk memaksa mengaktifkannya. Jika tidak diatur, watchdog aktif secara default untuk semua penyedia. Sebelum v2.1.196, default saat tidak diatur dikontrol oleh server pada Anthropic API langsung dan nonaktif pada penyedia lain. Konfigurasikan timeout dengan `CLAUDE_STREAM_IDLE_TIMEOUT_MS`; untuk timer macet lain yang berjalan bersama yang ini, lihat [Watchdog idle streaming](/docs/id/network-config#streaming-idle-watchdogs) |445| `CLAUDE_ENABLE_STREAM_WATCHDOG` | Atur ke `0` untuk memaksa menonaktifkan watchdog idle streaming tingkat event, atau atur ke `1` untuk memaksa mengaktifkannya. Jika tidak diatur, watchdog aktif secara default untuk semua penyedia. Sebelum v2.1.196, default saat tidak diatur dikontrol oleh server pada Anthropic API langsung dan nonaktif pada penyedia lain. Konfigurasikan timeout dengan `CLAUDE_STREAM_IDLE_TIMEOUT_MS`; untuk timer macet lain yang berjalan bersama yang ini, lihat [Watchdog idle streaming](/docs/id/network-config#streaming-idle-watchdogs) |

446| `CLAUDE_ENV_FILE` | Path ke skrip shell yang isinya dijalankan Claude Code sebelum setiap perintah Bash dalam proses shell yang sama, sehingga export dalam file tersebut terlihat oleh perintah. Gunakan untuk mempertahankan aktivasi virtualenv atau conda di seluruh perintah. Juga diisi secara dinamis oleh hook [SessionStart](/docs/id/hooks#persist-environment-variables), [Setup](/docs/id/hooks#setup), [CwdChanged](/docs/id/hooks#cwdchanged), dan [FileChanged](/docs/id/hooks#filechanged) |446| `CLAUDE_ENV_FILE` | Path ke skrip shell yang isinya dijalankan Claude Code sebelum setiap perintah Bash dalam proses shell yang sama, sehingga export dalam file tersebut terlihat oleh perintah. Gunakan untuk mempertahankan aktivasi virtualenv atau conda di seluruh perintah. Perintah PowerShell juga menerima variabelnya, di v2.1.296 atau yang lebih baru, dengan ketentuan dalam [Variabel yang dipertahankan dalam perintah PowerShell](/docs/id/hooks#persisted-variables-in-powershell-commands). Juga diisi secara dinamis oleh hook [SessionStart](/docs/id/hooks#persist-environment-variables), [Setup](/docs/id/hooks#setup), [CwdChanged](/docs/id/hooks#cwdchanged), dan [FileChanged](/docs/id/hooks#filechanged) |

447| `CLAUDE_JOB_DIR` | Diatur oleh Claude Code di setiap [sesi latar belakang](/docs/id/agent-view) ke direktori `~/.claude/jobs/<id>` milik sesi tersebut. Perintah shell yang dijalankan sesi mewarisinya. Tulis file sementara ke [`$CLAUDE_JOB_DIR/tmp`](/docs/id/agent-view#where-state-is-stored). Panggilan `Write` dan `Edit` Claude di sana tidak meminta izin, dan direktori dihapus saat sesi dihapus |447| `CLAUDE_JOB_DIR` | Diatur oleh Claude Code di setiap [sesi latar belakang](/docs/id/agent-view) ke direktori `~/.claude/jobs/<id>` milik sesi tersebut. Perintah shell yang dijalankan sesi mewarisinya. Tulis file sementara ke [`$CLAUDE_JOB_DIR/tmp`](/docs/id/agent-view#where-state-is-stored). Panggilan `Write` dan `Edit` Claude di sana tidak meminta izin, dan direktori dihapus saat sesi dihapus |

448| `CLAUDE_PID` | Claude Code mengatur ini ke ID prosesnya sendiri dalam subproses yang dibuatnya: perintah tool Bash dan PowerShell serta perintah hook. Di Linux, integrasi shell tool Bash menggunakannya untuk menolak pola `pkill` yang akan mencocokkan proses Claude Code itu sendiri; lihat [referensi error](/docs/id/errors#pkill-pattern-matches-the-claude-code-process). Baca dari skrip Anda sendiri untuk mengidentifikasi atau mengirim sinyal ke proses induk Claude Code secara sengaja. Memerlukan Claude Code v2.1.214 atau yang lebih baru |448| `CLAUDE_PID` | Claude Code mengatur ini ke ID prosesnya sendiri dalam subproses yang dibuatnya: perintah tool Bash dan PowerShell serta perintah hook. Di Linux, integrasi shell tool Bash menggunakannya untuk menolak pola `pkill` yang akan mencocokkan proses Claude Code itu sendiri; lihat [referensi error](/docs/id/errors#pkill-pattern-matches-the-claude-code-process). Baca dari skrip Anda sendiri untuk mengidentifikasi atau mengirim sinyal ke proses induk Claude Code secara sengaja. Memerlukan Claude Code v2.1.214 atau yang lebih baru |

449| `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` | Prefiks untuk nama sesi [Remote Control](/docs/id/remote-control) yang dibuat otomatis ketika tidak ada nama eksplisit yang diberikan. Default-nya adalah hostname mesin Anda, menghasilkan nama seperti `myhost-graceful-unicorn`. Flag CLI `--remote-control-session-name-prefix` mengatur nilai yang sama untuk satu pemanggilan |449| `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` | Prefiks untuk nama sesi [Remote Control](/docs/id/remote-control) yang dibuat otomatis ketika tidak ada nama eksplisit yang diberikan. Default-nya adalah hostname mesin Anda, menghasilkan nama seperti `myhost-graceful-unicorn`. Flag CLI `--remote-control-session-name-prefix` mengatur nilai yang sama untuk satu pemanggilan |

errors.md +74 −11

Details

37| `Connection lost while your computer was asleep` | [Automatic retries](#automatic-retries) |37| `Connection lost while your computer was asleep` | [Automatic retries](#automatic-retries) |

38| `<model> is temporarily unavailable, so auto mode cannot determine the safety of...` | [Server errors](#auto-mode-cannot-determine-the-safety-of-an-action) |38| `<model> is temporarily unavailable, so auto mode cannot determine the safety of...` | [Server errors](#auto-mode-cannot-determine-the-safety-of-an-action) |

39| `Auto mode could not evaluate this action and is blocking it for safety` | [Server errors](#auto-mode-cannot-determine-the-safety-of-an-action) |39| `Auto mode could not evaluate this action and is blocking it for safety` | [Server errors](#auto-mode-cannot-determine-the-safety-of-an-action) |

40| `Not run · auto mode's check had no usable answer` | [Server errors](#auto-mode-cannot-determine-the-safety-of-an-action) |

40| `Auto mode classifier transcript exceeded context window` | [Server errors](#auto-mode-cannot-determine-the-safety-of-an-action) |41| `Auto mode classifier transcript exceeded context window` | [Server errors](#auto-mode-cannot-determine-the-safety-of-an-action) |

41| `Agent aborted: auto mode classifier request refused by the safety safeguard` | [Server errors](#auto-mode-cannot-determine-the-safety-of-an-action) |42| `Agent aborted: auto mode classifier request refused by the safety safeguard` | [Server errors](#auto-mode-cannot-determine-the-safety-of-an-action) |

42| `The server-side auto mode classifier gave no verdict` | [Server errors](#the-server-returned-no-safety-verdict) |43| `The server-side auto mode classifier gave no verdict` | [Server errors](#the-server-returned-no-safety-verdict) |


247| `Windows reported an error (EBADF) when Claude Code read this session's transcript file` | [Command-line errors](#windows-reported-an-error-ebadf) |248| `Windows reported an error (EBADF) when Claude Code read this session's transcript file` | [Command-line errors](#windows-reported-an-error-ebadf) |

248| `Cannot switch renderers in this session` | [Command-line errors](#cannot-switch-renderers-in-this-session) |249| `Cannot switch renderers in this session` | [Command-line errors](#cannot-switch-renderers-in-this-session) |

249| `Cannot switch renderers while work is running in the background` | [Command-line errors](#cannot-switch-renderers-in-this-session) |250| `Cannot switch renderers while work is running in the background` | [Command-line errors](#cannot-switch-renderers-in-this-session) |

251| `Claude Code couldn't restart` | [Command-line errors](#claude-code-couldnt-restart) |

250| `Couldn't open Claude Desktop` | [Command-line errors](#couldnt-open-claude-desktop) |252| `Couldn't open Claude Desktop` | [Command-line errors](#couldnt-open-claude-desktop) |

251| `Failed to open Claude Desktop. Please try opening it manually.` | [Command-line errors](#couldnt-open-claude-desktop) |253| `Failed to open Claude Desktop. Please try opening it manually.` | [Command-line errors](#couldnt-open-claude-desktop) |

252| `Couldn't read your Zed keymap` / `Couldn't back up your Zed keymap` / `Couldn't update your Zed keymap` | [Command-line errors](#terminal-setup-left-your-zed-keymap-unchanged) |254| `Couldn't read your Zed keymap` / `Couldn't back up your Zed keymap` / `Couldn't update your Zed keymap` | [Command-line errors](#terminal-setup-left-your-zed-keymap-unchanged) |


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

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

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

267| `Cannot add marketplace "<name>": Claude Code reserves this name and cannot register a marketplace under it` | [Plugin troubleshooting](/docs/id/plugins/troubleshooting#claude-code-reserves-this-name) |

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

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

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


308| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` | [Tool errors](#disk-quota-or-temp-filesystem-is-full) |311| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` | [Tool errors](#disk-quota-or-temp-filesystem-is-full) |

309| `The filesystem with Claude Code's temp directory <dir>, or your disk quota on it, is full (ENOSPC)` | [Tool errors](#disk-quota-or-temp-filesystem-is-full) |312| `The filesystem with Claude Code's temp directory <dir>, or your disk quota on it, is full (ENOSPC)` | [Tool errors](#disk-quota-or-temp-filesystem-is-full) |

310| `Command output was lost: the temp filesystem at <dir> is full` / `is out of inodes` | [Tool errors](#disk-quota-or-temp-filesystem-is-full) |313| `Command output was lost: the temp filesystem at <dir> is full` / `is out of inodes` | [Tool errors](#disk-quota-or-temp-filesystem-is-full) |

314| `File is not valid UTF-8. It may use a legacy encoding such as Windows-1252, Shift-JIS or GBK, or be binary` | [Tool errors](#file-is-not-valid-utf-8) |

311| `the source file is not valid UTF-8 text` / `the source file is not valid UTF-16 text` | [Tool errors](#the-source-file-is-not-valid-utf-8-text) |315| `the source file is not valid UTF-8 text` / `the source file is not valid UTF-16 text` | [Tool errors](#the-source-file-is-not-valid-utf-8-text) |

312| `the source file has the replacement character U+FFFD` | [Tool errors](#the-source-file-is-not-valid-utf-8-text) |316| `the source file has the replacement character U+FFFD` | [Tool errors](#the-source-file-is-not-valid-utf-8-text) |

313| `Not published: that file is on a network share` | [Tool errors](#not-published-that-file-is-on-a-network-share) |317| `Not published: that file is on a network share` | [Tool errors](#not-published-that-file-is-on-a-network-share) |


334| `Session isn't responding` / `Press enter again to restart this session — it isn't responding` | [Background session errors](#session-isnt-responding) |338| `Session isn't responding` / `Press enter again to restart this session — it isn't responding` | [Background session errors](#session-isnt-responding) |

335| `Session <id> was stopped while the respawn was in flight` | [Background session errors](#session-was-stopped-while-the-respawn-was-in-flight) |339| `Session <id> was stopped while the respawn was in flight` | [Background session errors](#session-was-stopped-while-the-respawn-was-in-flight) |

336| `This session was running agent '<name>', which is no longer available` | [Background session errors](#session-agent-no-longer-available) |340| `This session was running agent '<name>', which is no longer available` | [Background session errors](#session-agent-no-longer-available) |

341| `This session restarted <time> after its next /loop wakeup was due, so that wakeup will not fire` | [Background session errors](#restarted-after-its-next-loop-wakeup-was-due) |

337| `CLAUDE_CODE_PROCESS_WRAPPER: launcher ...` | [Background session errors](#claude_code_process_wrapper-launcher-errors) |342| `CLAUDE_CODE_PROCESS_WRAPPER: launcher ...` | [Background session errors](#claude_code_process_wrapper-launcher-errors) |

338| `EUNKNOWN: unknown error, uv_spawn` | [Background session errors](#eunknown-when-starting-a-background-session) |343| `EUNKNOWN: unknown error, uv_spawn` | [Background session errors](#eunknown-when-starting-a-background-session) |

339| `EACCES: permission denied, posix_spawn` | [Background session errors](#eacces-when-starting-a-background-session) |344| `EACCES: permission denied, posix_spawn` | [Background session errors](#eacces-when-starting-a-background-session) |


439| :- | :- | :- |444| :- | :- | :- |

440| [`CLAUDE_CODE_MAX_RETRIES`](/docs/id/env-vars) | 10 | Jumlah percobaan retry. Dibatasi pada 15 mulai v2.1.186; mulai v2.1.199 `CLAUDE_CODE_RETRY_WATCHDOG` menaikkan default dan menghapus batas. Turunkan untuk menampilkan kegagalan lebih cepat dalam script. |445| [`CLAUDE_CODE_MAX_RETRIES`](/docs/id/env-vars) | 10 | Jumlah percobaan retry. Dibatasi pada 15 mulai v2.1.186; mulai v2.1.199 `CLAUDE_CODE_RETRY_WATCHDOG` menaikkan default dan menghapus batas. Turunkan untuk menampilkan kegagalan lebih cepat dalam script. |

441| [`CLAUDE_CODE_RETRY_WATCHDOG`](/docs/id/env-vars) | unset | Atur ke `1` dalam sesi tanpa pengawasan seperti CI jobs untuk mencoba ulang `429` dan `529` capacity errors tanpa batas bukan gagal setelah `CLAUDE_CODE_MAX_RETRIES` percobaan. Claude Code gagal sekaligus ketika standard-speed request mendapat `429` yang melaporkan spend limit atau kredit penggunaan yang habis, bahkan satu dari [gateway spend cap](#spend-limit-reached) yang reset pada jadwal. Sebelum v2.1.239, watchdog mencoba ulang ini tanpa batas. Untuk fast mode requests, lihat [Handle rate limits](/docs/id/fast-mode#handle-rate-limits). Pada v2.1.199 atau lebih baru itu juga menaikkan default retry count untuk transient errors lainnya, seperti server errors, timeouts, dan dropped connections, menjadi 300, kira-kira tiga jam backoff, dan menghapus batas 15 pada `CLAUDE_CODE_MAX_RETRIES` jika Anda menetapkan variabel itu secara eksplisit. |446| [`CLAUDE_CODE_RETRY_WATCHDOG`](/docs/id/env-vars) | unset | Atur ke `1` dalam sesi tanpa pengawasan seperti CI jobs untuk mencoba ulang `429` dan `529` capacity errors tanpa batas bukan gagal setelah `CLAUDE_CODE_MAX_RETRIES` percobaan. Claude Code gagal sekaligus ketika standard-speed request mendapat `429` yang melaporkan spend limit atau kredit penggunaan yang habis, bahkan satu dari [gateway spend cap](#spend-limit-reached) yang reset pada jadwal. Sebelum v2.1.239, watchdog mencoba ulang ini tanpa batas. Untuk fast mode requests, lihat [Handle rate limits](/docs/id/fast-mode#handle-rate-limits). Pada v2.1.199 atau lebih baru itu juga menaikkan default retry count untuk transient errors lainnya, seperti server errors, timeouts, dan dropped connections, menjadi 300, kira-kira tiga jam backoff, dan menghapus batas 15 pada `CLAUDE_CODE_MAX_RETRIES` jika Anda menetapkan variabel itu secara eksplisit. |

447| [`CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS`](/docs/id/env-vars) | unset | Waktu maksimum dalam milidetik yang dihabiskan setiap permintaan API untuk menunggu kesalahan `429` dan `529` ketika `CLAUDE_CODE_RETRY_WATCHDOG` ditetapkan. Ketika tidak ditetapkan, waktu tunggunya tidak terbatas. Memerlukan Claude Code v2.1.295 atau lebih baru. |

442| [`CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS`](/docs/id/env-vars) | 500 | Penundaan awal dalam milidetik dari backoff di antara retry permintaan yang ditolak API dengan kesalahan `529` overloaded. Naikkan, hingga 32000, untuk menyebarkan retry dalam rentang waktu yang lebih panjang ketika API sedang mencapai kapasitas. Tidak berpengaruh ketika `CLAUDE_CODE_RETRY_WATCHDOG` diatur ke `1`, atau ketika permintaan yang ditolak dikirim dalam [fast mode](/docs/id/fast-mode#handle-rate-limits). Memerlukan Claude Code v2.1.292 atau lebih baru. |448| [`CLAUDE_CODE_OVERLOADED_RETRY_BASE_DELAY_MS`](/docs/id/env-vars) | 500 | Penundaan awal dalam milidetik dari backoff di antara retry permintaan yang ditolak API dengan kesalahan `529` overloaded. Naikkan, hingga 32000, untuk menyebarkan retry dalam rentang waktu yang lebih panjang ketika API sedang mencapai kapasitas. Tidak berpengaruh ketika `CLAUDE_CODE_RETRY_WATCHDOG` diatur ke `1`, atau ketika permintaan yang ditolak dikirim dalam [fast mode](/docs/id/fast-mode#handle-rate-limits). Memerlukan Claude Code v2.1.292 atau lebih baru. |

443| [`API_TIMEOUT_MS`](/docs/id/env-vars) | 600000 | Per-request timeout dalam milliseconds. Naikkan untuk jaringan lambat atau proxy. Ini juga membatasi berapa lama Claude Code menunggu response headers, dijelaskan dalam [No response from API](#no-response-from-api). |449| [`API_TIMEOUT_MS`](/docs/id/env-vars) | 600000 | Per-request timeout dalam milliseconds. Naikkan untuk jaringan lambat atau proxy. Ini juga membatasi berapa lama Claude Code menunggu response headers, dijelaskan dalam [No response from API](#no-response-from-api). |

444| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](/docs/id/env-vars) | unset | Batas pengiriman ulang [permintaan non-streaming](#streaming-response-ended-before-any-complete-data-was-received) yang mengalami timeout. Saat batas tercapai, permintaan gagal. Respons dari Claude yang membutuhkan waktu lebih lama dari timeout untuk dihasilkan akan mengalami timeout lagi pada setiap pengiriman ulang, jadi tetapkan angka rendah seperti `0` agar gagal lebih cepat. Setiap percobaan non-streaming mengalami timeout setelah 300 detik dalam sesi lokal, atau setelah `API_TIMEOUT_MS` ketika Anda menetapkan nilai positif. Memerlukan Claude Code v2.1.285 atau lebih baru. |450| [`CLAUDE_CODE_NONSTREAMING_TIMEOUT_RETRIES`](/docs/id/env-vars) | unset | Batas pengiriman ulang [permintaan non-streaming](#streaming-response-ended-before-any-complete-data-was-received) yang mengalami timeout. Saat batas tercapai, permintaan gagal. Respons dari Claude yang membutuhkan waktu lebih lama dari timeout untuk dihasilkan akan mengalami timeout lagi pada setiap pengiriman ulang, jadi tetapkan angka rendah seperti `0` agar gagal lebih cepat. Setiap percobaan non-streaming mengalami timeout setelah 300 detik dalam sesi lokal, atau setelah `API_TIMEOUT_MS` ketika Anda menetapkan nilai positif. Memerlukan Claude Code v2.1.285 atau lebih baru. |


596<model> is temporarily unavailable, so auto mode cannot determine the safety of <tool> right now. Wait a moment and then try this action again.602<model> is temporarily unavailable, so auto mode cannot determine the safety of <tool> right now. Wait a moment and then try this action again.

597```603```

598 604 

605Dalam sesi interaktif, baris redup `Not run · auto mode's check had no usable answer` muncul di bawah panggilan tool alih-alih pesan ini. Tekan `Ctrl+O` untuk membaca pesan di [penampil transkrip](/docs/id/interactive-mode#transcript-viewer). Penolakan di bawah [The server returned no safety verdict](#the-server-returned-no-safety-verdict) menampilkan baris yang sama. Sebelum v2.1.296, pesan muncul di bawah panggilan sebagai kesalahan merah.

606 

599Ketika Claude Code dapat menentukan kategori kegagalan, ia menyebutkan kategori dalam tanda kurung setelah `temporarily unavailable`, misalnya `<model> is temporarily unavailable (rate-limited), so auto mode cannot determine the safety of <tool> right now`. Kategorinya adalah `(rate-limited)`, `(overloaded)`, `(server error)`, `(timed out)`, dan `(connection failed)`. Jika `(timed out)` atau `(connection failed)` terulang, periksa koneksi Anda; lihat [Unable to connect to API](#unable-to-connect-to-api). Sebelum v2.1.229, pesan tidak pernah menyebutkan kategori dan berbunyi `Wait briefly and then try this action again`.607Ketika Claude Code dapat menentukan kategori kegagalan, ia menyebutkan kategori dalam tanda kurung setelah `temporarily unavailable`, misalnya `<model> is temporarily unavailable (rate-limited), so auto mode cannot determine the safety of <tool> right now`. Kategorinya adalah `(rate-limited)`, `(overloaded)`, `(server error)`, `(timed out)`, dan `(connection failed)`. Jika `(timed out)` atau `(connection failed)` terulang, periksa koneksi Anda; lihat [Unable to connect to API](#unable-to-connect-to-api). Sebelum v2.1.229, pesan tidak pernah menyebutkan kategori dan berbunyi `Wait briefly and then try this action again`.

600 608 

601Ketika tidak ada kategori yang cocok, pesan muncul tanpa kategori dalam tanda kurung; lebih dari satu kegagalan menghasilkan bentuk itu. Di [Amazon Bedrock](/docs/id/amazon-bedrock), termasuk [Mantle endpoint](/docs/id/amazon-bedrock#use-the-mantle-endpoint), itu juga muncul ketika akun AWS Anda tidak dapat memanggil model yang disebutkan dalam pesan, dan kegagalan itu terulang pada setiap retry sampai akun Anda diberi akses ke model.609Ketika tidak ada kategori yang cocok, pesan muncul tanpa kategori dalam tanda kurung; lebih dari satu kegagalan menghasilkan bentuk itu. Di [Amazon Bedrock](/docs/id/amazon-bedrock), termasuk [Mantle endpoint](/docs/id/amazon-bedrock#use-the-mantle-endpoint), itu juga muncul ketika akun AWS Anda tidak dapat memanggil model yang disebutkan dalam pesan, dan kegagalan itu terulang pada setiap retry sampai akun Anda diberi akses ke model.


1900 1908 

1901Claude Code melewati pemeriksaan ini ketika [file pengaturan terkelola, kebijakan MDM, atau pembantu kebijakan](/docs/id/managed-settings) menetapkan [`forceLoginMethod`](/docs/id/settings-reference#forceloginmethod) ke `"gateway"`, atau menetapkan [`forceLoginGatewayUrl`](/docs/id/settings-reference#forcelogingatewayurl) tanpa `forceLoginMethod`. Dengan salah satu konfigurasi, Claude Code membuka langkah masuk di layar **Cloud gateway** daripada metode masuk Anthropic. Claude Code juga melewati pemeriksaan ketika sumber pengaturan terkelola di mesin ada tetapi tidak dapat dibaca, karena sumber itu mungkin menyimpan konfigurasi gateway. Sebelum v2.1.247, Claude Code menjalankan pemeriksaan di bawah konfigurasi ini juga, dan keluar dengan kesalahan ini ketika endpoint Anthropic tidak dapat dijangkau.1909Claude Code melewati pemeriksaan ini ketika [file pengaturan terkelola, kebijakan MDM, atau pembantu kebijakan](/docs/id/managed-settings) menetapkan [`forceLoginMethod`](/docs/id/settings-reference#forceloginmethod) ke `"gateway"`, atau menetapkan [`forceLoginGatewayUrl`](/docs/id/settings-reference#forcelogingatewayurl) tanpa `forceLoginMethod`. Dengan salah satu konfigurasi, Claude Code membuka langkah masuk di layar **Cloud gateway** daripada metode masuk Anthropic. Claude Code juga melewati pemeriksaan ketika sumber pengaturan terkelola di mesin ada tetapi tidak dapat dibaca, karena sumber itu mungkin menyimpan konfigurasi gateway. Sebelum v2.1.247, Claude Code menjalankan pemeriksaan di bawah konfigurasi ini juga, dan keluar dengan kesalahan ini ketika endpoint Anthropic tidak dapat dijangkau.

1902 1910 

1911Claude Code juga melewati pemeriksaan di mesin tanpa pengaturan terkelola ketika `~/.claude/settings.json` milik Anda sendiri [menamai gateway](/docs/id/claude-apps-gateway#set-the-gateway-url-in-user-settings) dengan `forceLoginMethod` dan `forceLoginGatewayUrl`. Sebelum v2.1.295, Claude Code menjalankan pemeriksaan dalam kasus tersebut.

1912 

1903**Yang harus dilakukan:**1913**Yang harus dilakukan:**

1904 1914 

1905* Jika pesan menamai variabel proxy, periksa bahwa nilainya menunjuk ke proxy yang tepat dan minta tim jaringan Anda untuk memungkinkan koneksi HTTPS melaluinya ke host dalam pesan. Lihat [Konfigurasi jaringan](/docs/id/network-config).1915* Jika pesan menamai variabel proxy, periksa bahwa nilainya menunjuk ke proxy yang tepat dan minta tim jaringan Anda untuk memungkinkan koneksi HTTPS melaluinya ke host dalam pesan. Lihat [Konfigurasi jaringan](/docs/id/network-config).


3412 3422 

3413Claude Code menampilkan kesalahan yang sama untuk skill apa pun yang [menyisipkan konteks dinamis](/docs/id/skills#when-an-injected-command-fails), dan perintah sisipan yang gagal membatalkan pemanggilan skill tersebut. Dua string terkait muncul bahkan sebelum perintah dijalankan:3423Claude Code menampilkan kesalahan yang sama untuk skill apa pun yang [menyisipkan konteks dinamis](/docs/id/skills#when-an-injected-command-fails), dan perintah sisipan yang gagal membatalkan pemanggilan skill tersebut. Dua string terkait muncul bahkan sebelum perintah dijalankan:

3414 3424 

3415* `Shell command permission check failed for pattern "..."`: pemeriksaan izin perintah tidak mengizinkannya. [Pemeriksaan izin pada perintah sisipan](/docs/id/skills#permission-checks-on-injected-commands) membahas hasil mana yang membatalkan di setiap mode izin dan cara menyetujui perintah sebelumnya dengan `allowed-tools`3425* `Shell command permission check failed for pattern "..."`: pemeriksaan izin perintah tidak mengizinkannya. [Pemeriksaan izin pada perintah sisipan](/docs/id/skills#permission-checks-on-injected-commands) membahas hasil mana yang membatalkan di setiap mode izin dan cara menyetujui perintah terlebih dahulu dengan `allowed-tools`

3416* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``: frontmatter skill menuntut bash di mesin yang tidak memilikinya. Instal Git for Windows atau ubah frontmatter menjadi `shell: powershell`. Lihat [Cara perintah sisipan dijalankan](/docs/id/skills#how-injected-commands-run)3426* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``: frontmatter skill menuntut bash pada mesin yang tidak memilikinya. Instal Git for Windows atau ubah frontmatter menjadi `shell: powershell`. Lihat [Cara perintah sisipan dijalankan](/docs/id/skills#how-injected-commands-run)

3417 3427 

3418**Yang perlu dilakukan:**3428**Yang perlu dilakukan:**

3419 3429 


3562 3572 

3563* **Anda tidak memberikan branch dasar**: Claude Code membandingkan dengan branch default repositori dan menyarankan untuk memberikan branch dasar Anda secara eksplisit, seperti pada contoh di atas3573* **Anda tidak memberikan branch dasar**: Claude Code membandingkan dengan branch default repositori dan menyarankan untuk memberikan branch dasar Anda secara eksplisit, seperti pada contoh di atas

3564* **Anda memberikan branch dasar yang sudah ada di clone Anda**: petunjuknya berbunyi ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``3574* **Anda memberikan branch dasar yang sudah ada di clone Anda**: petunjuknya berbunyi ``Make sure <branch> exists locally or on origin (try `git fetch origin <branch>`)``

3565* **Anda memberikan branch dasar yang tidak ada di clone Anda**: Claude Code melakukan fetch dari origin sebelum membandingkan. Petunjuknya berbunyi ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``; ketika Claude Code tidak dapat mengetahui apakah clone Anda dangkal, Claude Code menyarankan `git fetch --unshallow origin`. Sebelum v2.1.221, petunjuk menyarankan `git fetch --unshallow origin` untuk setiap branch dasar yang di-fetch, dan pada clone yang lengkap perintah tersebut gagal dengan `fatal: --unshallow on a complete repository does not make sense`.3575* **Anda meneruskan base branch yang tidak ada di clone Anda**: Claude Code mengambilnya dari origin sebelum membandingkan. Petunjuk berbunyi ``<branch> was fetched from origin but shares no history with HEAD. If another branch is your real base, pass it explicitly (`/code-review ultra <branch>`)``; ketika Claude Code tidak dapat mengetahui apakah clone Anda dangkal (shallow), Claude Code menyarankan `git fetch --unshallow origin` sebagai gantinya. Sebelum v2.1.221, petunjuk menyarankan `git fetch --unshallow origin` untuk setiap base branch yang diambil, dan pada clone yang lengkap perintah tersebut gagal dengan `fatal: --unshallow on a complete repository does not make sense`.

3566 3576 

3567**Yang perlu dilakukan:**3577**Yang perlu dilakukan:**

3568 3578 


3756No conversation found with session ID: <session-id>3766No conversation found with session ID: <session-id>

3757```3767```

3758 3768 

3759Claude Code keluar dengan kode 1 setelah menampilkan pesan tersebut. Claude Code [mencari ID tersebut di proyek saat ini terlebih dahulu, lalu di setiap proyek lain di mesin ini](/docs/id/sessions#resume-a-session). Sebelum v2.1.223, pencarian berhenti di direktori proyek saat ini dan git worktree-nya, jadi lanjutkan dari direktori tempat sesi terakhir bekerja.3769Claude Code keluar dengan kode 1 setelah menampilkan pesan tersebut. Claude Code [mencari ID tersebut di proyek saat ini terlebih dahulu, lalu di setiap proyek lain di mesin ini](/docs/id/sessions#where-the-session-picker-looks). Sebelum v2.1.223, pencarian berhenti di direktori proyek saat ini dan git worktree-nya, jadi lanjutkan sesi dari direktori tempat sesi terakhir bekerja.

3760 3770 

3761Penyebab umum:3771Penyebab umum:

3762 3772 


3816 3826 

3817* Dalam sesi yang dimulai tanpa batasan tersebut, jalankan `/tui fullscreen`, atau `/tui default` untuk beralih kembali. Claude Code menyimpan [pengaturan `tui`](/docs/id/settings-reference#tui) di sana3827* Dalam sesi yang dimulai tanpa batasan tersebut, jalankan `/tui fullscreen`, atau `/tui default` untuk beralih kembali. Claude Code menyimpan [pengaturan `tui`](/docs/id/settings-reference#tui) di sana

3818 3828 

3829<h3 id="claude-code-couldnt-restart">

3830 Claude Code couldn't restart

3831</h3>

3832 

3833Claude Code sedang memulai ulang, misalnya untuk beralih ke atau dari rendering layar penuh setelah Anda menjalankan [`/tui`](/docs/id/fullscreen#enable-fullscreen-rendering). Claude Code menutup sesi tetapi tidak dapat memulai proses baru, sehingga mencetak pesan ini dan keluar dengan status 1:

3834 

3835```text theme={null}

3836Claude Code couldn't restart. Your conversation is saved. Start Claude Code again and run /resume to pick it up.

3837```

3838 

3839Jika proses mulai ulang tidak memiliki percakapan untuk dibuka kembali, misalnya karena `/tui` adalah input pertama Anda di sesi baru, pesannya berbunyi `Claude Code couldn't restart. Start Claude Code again.`

3840 

3841**Yang perlu dilakukan:**

3842 

3843* Jalankan `claude` lagi di shell Anda dari direktori yang sama. Jika pesan menyebutkan bahwa percakapan Anda tersimpan, jalankan [`/resume`](/docs/id/sessions#resume-a-session) di sesi baru dan pilih percakapan tersebut

3844* Jika proses mulai ulang terus gagal, mulai Claude Code dari shell Anda dengan [`claude --debug-file claude-debug.log`](/docs/id/cli-reference#cli-flags). Jika mulai ulang dari sesi tersebut gagal, `claude-debug.log` di direktori tempat Anda memulai mencatat baris `Failed to relaunch:` dengan error dari sistem operasi. Sertakan baris tersebut saat Anda [melaporkan masalahnya](#report-an-error)

3845 

3819<h3 id="couldnt-open-claude-desktop">3846<h3 id="couldnt-open-claude-desktop">

3820 Tidak dapat membuka Claude Desktop3847 Tidak dapat membuka Claude Desktop

3821</h3>3848</h3>


4593* Atau mulai ulang Claude Code dengan [`CLAUDE_CODE_TMPDIR`](/docs/id/env-vars) diatur ke direktori di sistem file yang memiliki ruang4620* Atau mulai ulang Claude Code dengan [`CLAUDE_CODE_TMPDIR`](/docs/id/env-vars) diatur ke direktori di sistem file yang memiliki ruang

4594* Kemudian minta Claude menjalankan perintah lagi. Output yang dicetaknya hilang, bukan terpotong4621* Kemudian minta Claude menjalankan perintah lagi. Output yang dicetaknya hilang, bukan terpotong

4595 4622 

4623<h3 id="file-is-not-valid-utf-8">

4624 File is not valid UTF-8

4625</h3>

4626 

4627Claude menggunakan tool Edit atau NotebookEdit pada file yang byte-nya tidak dapat didekodekan sebagai UTF-8, dan Claude Code menolak perubahan tersebut. Tidak ada yang ditulis, jadi file tetap seperti semula. Tool tersebut menyimpan kembali seluruh file sebagai UTF-8, yang akan mengubah setiap byte yang tidak dapat didekodekannya menjadi karakter pengganti `U+FFFD`. Pesan muncul dalam hasil tool:

4628 

4629```text wrap theme={null}

4630File is not valid UTF-8. It may use a legacy encoding such as Windows-1252, Shift-JIS or GBK, or be binary. This tool saves the whole file as UTF-8, which would replace every byte it cannot decode with U+FFFD. Nothing was written. Make the change with a shell command that reads and writes the file in its own encoding, or ask the user whether to convert the file to UTF-8 first.

4631```

4632 

4633File yang seharusnya berformat UTF-8 juga mendapatkan pesan ini ketika berisi bahkan satu urutan byte yang tidak valid, karena pemeriksaan mencakup byte file secara keseluruhan.

4634 

4635**What to do:**

4636 

4637* Untuk mempertahankan file dalam encoding saat ini, biarkan Claude membuat perubahan dengan perintah shell yang membaca dan menulis file dalam encoding tersebut, seperti yang diinstruksikan pesan

4638* Untuk terus mengedit file dengan tool Edit, konversikan file ke UTF-8, atau perbaiki byte yang tidak valid dalam file yang seharusnya berformat UTF-8, lalu minta Claude melakukan edit lagi

4639 

4640Sebelum v2.1.296, Edit dan NotebookEdit menerapkan edit seperti itu dan menyimpan setiap byte yang tidak dapat didekodekan sebagai `U+FFFD`. Pada versi tersebut, perbarui Claude Code.

4641 

4596<h3 id="the-source-file-is-not-valid-utf-8-text">4642<h3 id="the-source-file-is-not-valid-utf-8-text">

4597 The source file is not valid UTF-8 text4643 The source file is not valid UTF-8 text

4598</h3>4644</h3>


4752 Perintah diblokir oleh pemeriksaan isolasi worktree4798 Perintah diblokir oleh pemeriksaan isolasi worktree

4753</h3>4799</h3>

4754 4800 

4755Claude menjalankan perintah Bash atau Monitor dalam [sesi yang terisolasi dalam worktree](/docs/id/worktrees#how-claude-code-enforces-isolation), dan Claude Code menolaknya karena salah satu dari dua alasan:4801Claude menjalankan perintah Bash, [PowerShell](/docs/id/tools-reference#powershell-tool), atau [Monitor](/docs/id/tools-reference#monitor-tool) dalam [sesi yang terisolasi dalam worktree](/docs/id/worktrees#how-claude-code-enforces-isolation), dan Claude Code menolaknya karena salah satu alasan berikut:

4756 4802 

4757* Perintah menunjukkan git ke checkout utama.4803* Perintah akan berjalan di checkout utama atau di worktree lain. Pesan mengatakan direktori kerjanya `resolved to the shared checkout` atau `is in a different worktree`.

4758* Claude Code tidak dapat memverifikasi dari teks perintah bahwa git apa pun yang dijalankan perintah tetap berada di dalam worktree. Perintah yang tidak pernah menamai git masih dapat ditolak karena alasan ini, karena memperluas indirection variabel seperti `${!name}` atau menjalankan substitusi fungsi Bash seperti `${ command; }` menghasilkan nilai pada runtime yang dapat menjadi perintah itu sendiri.4804* Perintah Bash atau Monitor menunjukkan git ke checkout utama.

4805* Claude Code tidak dapat memverifikasi dari teks perintah Bash atau Monitor bahwa git apa pun yang dijalankan perintah tetap berada di dalam worktree. Perintah yang tidak pernah menamai git masih dapat ditolak karena alasan ini, karena memperluas indirection variabel seperti `${!name}` atau menjalankan substitusi fungsi Bash seperti `${ command; }` menghasilkan nilai pada runtime yang dapat menjadi perintah itu sendiri.

4759 4806 

4760Bagian tengah pesan menamai apa yang tidak dapat diverifikasi:4807Pesan mengatakan `is isolated in the worktree <path>, but this command`, diikuti oleh alasannya, seperti perintah yang teksnya tidak dapat diverifikasi Claude Code:

4761 4808 

4762```text wrap theme={null}4809```text wrap theme={null}

4763This session is isolated in the worktree /path/to/worktree, but this command evaluates ${!x@P} arithmetically inside a construct too complex to verify, which can run a command hidden in a variable's value. Refusing to run it — a worktree-isolated session's git operations must target its own worktree. Split it into plain, separate commands and run them from /path/to/worktree.4810This session is isolated in the worktree /path/to/worktree, but this command evaluates ${!x@P} arithmetically inside a construct too complex to verify, which can run a command hidden in a variable's value. Refusing to run it — a worktree-isolated session's git operations must target its own worktree. Split it into plain, separate commands and run them from /path/to/worktree.


4765 4812 

4766**Yang harus dilakukan:**4813**Yang harus dilakukan:**

4767 4814 

4768* Biasanya tidak ada: Claude membaca pesan dan menulis ulang perintah dengan cara yang diminta kalimat terakhirnya4815* **Git yang ditunjukkan ke checkout utama, atau teks perintah yang tidak dapat diverifikasi**: tidak ada. Claude membaca pesan dan menulis ulang perintah dengan cara yang diminta kalimat terakhirnya. Jika perintah yang Anda minta terus ditolak karena ekspansi dalam teksnya, ejakan nilai yang ditandai secara harfiah dan jalankan git sebagai perintah biasa tersendiri dari dalam worktree

4769* Jika perintah yang Anda minta terus ditolak, ejakan nilai yang ditandai secara harfiah: ganti indirection atau substitusi dengan nilainya, dan jalankan git sebagai perintah biasa terpisahnya dari dalam worktree

4770* Untuk bertindak pada checkout utama dengan sengaja, jalankan perintah sendiri di terminal di luar sesi4816* Untuk bertindak pada checkout utama dengan sengaja, jalankan perintah sendiri di terminal di luar sesi

4771 4817 

4772<h3 id="this-session-has-no-saved-transcript">4818<h3 id="this-session-has-no-saved-transcript">


4946* Atau lanjutkan dengan `--agent <name>` yang menamai agent yang memang ada, untuk menjalankan sesi sebagai agent itu sebagai gantinya4992* Atau lanjutkan dengan `--agent <name>` yang menamai agent yang memang ada, untuk menjalankan sesi sebagai agent itu sebagai gantinya

4947* Jika agent bersifat proyek dan Anda belum mempercayai direktori asli sesi, jalankan Claude Code di sana sekali, terima dialog kepercayaan, kemudian lanjutkan lagi4993* Jika agent bersifat proyek dan Anda belum mempercayai direktori asli sesi, jalankan Claude Code di sana sekali, terima dialog kepercayaan, kemudian lanjutkan lagi

4948 4994 

4995<h3 id="restarted-after-its-next-loop-wakeup-was-due">

4996 Sesi ini dimulai ulang setelah wakeup /loop berikutnya jatuh tempo

4997</h3>

4998 

4999Sebuah [`/loop` yang mengatur tempo sendiri](/docs/id/scheduled-tasks#let-claude-choose-the-interval) dalam [sesi latar belakang](/docs/id/agent-view) telah berhenti. Proses sesi berakhir saat loop sedang menunggu wakeup berikutnya, dan wakeup itu jatuh tempo sebelum [proses berikutnya](/docs/id/agent-view#the-supervisor-process) sesi dimulai. Wakeup yang terlewat tidak dijalankan terlambat. Pemberitahuan menyebutkan seberapa terlambat wakeup tersebut ketika sesi dimulai ulang:

5000 

5001```text theme={null}

5002This session restarted 12m after its next /loop wakeup was due, so that wakeup will not fire. The loop stays stopped until Claude schedules it again: reply to continue it.

5003```

5004 

5005Sebelum v2.1.295, loop berhenti dalam situasi ini tanpa pemberitahuan.

5006 

5007**Yang harus dilakukan:**

5008 

5009* Untuk melanjutkan loop, [balas ke sesi](/docs/id/agent-view#peek-and-reply) dan katakan demikian, seperti `keep the loop running`. Claude membaca pemberitahuan bersama balasan Anda dan dapat menjadwalkan wakeup berikutnya

5010* Jika Anda sudah selesai dengan loop, tidak perlu melakukan apa pun. Loop sudah berhenti

5011 

4949<h3 id="claude_code_process_wrapper-launcher-errors">5012<h3 id="claude_code_process_wrapper-launcher-errors">

4950 Kesalahan peluncur CLAUDE\_CODE\_PROCESS\_WRAPPER5013 Kesalahan peluncur CLAUDE\_CODE\_PROCESS\_WRAPPER

4951</h3>5014</h3>


5343Jalur yang Claude Code tolak dengan cara ini termasuk:5406Jalur yang Claude Code tolak dengan cara ini termasuk:

5344 5407 

5345* Berbagi UNC seperti `\\server\share`5408* Berbagi UNC seperti `\\server\share`

5346* Jalur automount seperti `/net/<host>`, kecuali Anda meluncurkan Claude Code dari direktori di bawah automount host itu5409* Jalur automount seperti `/net/<host>`, kecuali Anda meluncurkan Claude Code dari direktori di bawah automount host itu. Pembacaan di bawah automount itu tetap melalui [pemeriksaan jalur jaringan](/docs/id/permissions#network-paths).

5347* Jalur lokal yang mencapai lokasi jaringan melalui symbolic link atau junction5410* Jalur lokal yang mencapai lokasi jaringan melalui symbolic link atau junction

5348 5411 

5349Huruf drive yang dipetakan dan jalur `\\wsl$` tidak dihitung sebagai jalur jaringan.5412Huruf drive yang dipetakan dan jalur `\\wsl$` tidak dihitung sebagai jalur jaringan.

Details

27| Claude Security | ✅ Didukung | Tersedia dalam beta publik untuk paket Enterprise di [claude.ai/security](https://claude.ai/security) |27| Claude Security | ✅ Didukung | Tersedia dalam beta publik untuk paket Enterprise di [claude.ai/security](https://claude.ai/security) |

28| Teleport sessions | ✅ Didukung | Pindahkan sesi antara cloud dan terminal dengan `--teleport` |28| Teleport sessions | ✅ Didukung | Pindahkan sesi antara cloud dan terminal dengan `--teleport` |

29| Pasar plugin | ✅ Didukung | Persyaratan kredensial berbeda menurut permukaan. Lihat [Pasar plugin di GHES](#plugin-marketplaces-on-ghes) |29| Pasar plugin | ✅ Didukung | Persyaratan kredensial berbeda menurut permukaan. Lihat [Pasar plugin di GHES](#plugin-marketplaces-on-ghes) |

30| Metrik kontribusi | ✅ Didukung | Dikirimkan melalui webhook ke [dasbor analitik](/docs/id/analytics) |30| Metrik kontribusi | ❌ Tidak didukung | Memerlukan repositori yang di-host di github.com. [Dasbor analitik](/docs/id/analytics) tetap menampilkan metrik penggunaan untuk pekerjaan di repositori GHES |

31| GitHub Actions | ✅ Didukung | Memerlukan pengaturan alur kerja manual; `/install-github-app` hanya untuk github.com |31| GitHub Actions | ✅ Didukung | Memerlukan pengaturan alur kerja manual; `/install-github-app` hanya untuk github.com |

32| Server GitHub MCP | ❌ Tidak didukung | Server GitHub MCP tidak berfungsi dengan instans GHES |32| Server GitHub MCP | ❌ Tidak didukung | Server GitHub MCP tidak berfungsi dengan instans GHES |

33 33 


56 Dari halaman GitHub App di instance GHES Anda, instal app tersebut di repositori atau organisasi yang ingin Anda izinkan untuk diakses Claude. Anda dapat memulai dengan sebagian dan menambahkan lebih banyak nanti.56 Dari halaman GitHub App di instance GHES Anda, instal app tersebut di repositori atau organisasi yang ingin Anda izinkan untuk diakses Claude. Anda dapat memulai dengan sebagian dan menambahkan lebih banyak nanti.

57 </Step>57 </Step>

58 58 

59 <Step title="Aktifkan fitur">59 <Step title="Aktifkan Code Review">

60 Buka [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) dan aktifkan [Code Review](/docs/id/code-review#set-up-code-review) serta [metrik kontribusi](/docs/id/analytics#enable-contribution-metrics) untuk repositori GHES Anda menggunakan konfigurasi yang sama seperti github.com.60 Buka [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code) dan aktifkan [Code Review](/docs/id/code-review#set-up-code-review) untuk repositori GHES Anda menggunakan konfigurasi yang sama seperti github.com.

61 </Step>61 </Step>

62</Steps>62</Steps>

63 63 


65 Izin GitHub App65 Izin GitHub App

66</h3>66</h3>

67 67 

68Manifest mengonfigurasi GitHub App dengan izin dan event webhook di bawah ini, yang secara keseluruhan mencakup sesi cloud, Code Review, Claude Security, plugin marketplace, dan metrik kontribusi:68Manifest mengonfigurasi GitHub App dengan izin dan event webhook di bawah ini, yang secara keseluruhan mencakup sesi cloud, Code Review, Claude Security, dan plugin marketplace:

69 69 

70| Izin | Akses | Digunakan untuk |70| Izin | Akses | Digunakan untuk |

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


270* [Claude Code di web](/docs/id/claude-code-on-the-web): jalankan sesi Claude Code di infrastruktur cloud270* [Claude Code di web](/docs/id/claude-code-on-the-web): jalankan sesi Claude Code di infrastruktur cloud

271* [Code Review](/docs/id/code-review): tinjauan PR otomatis271* [Code Review](/docs/id/code-review): tinjauan PR otomatis

272* [Pasar plugin](/docs/id/plugins/host-marketplace): bangun dan distribusikan katalog plugin272* [Pasar plugin](/docs/id/plugins/host-marketplace): bangun dan distribusikan katalog plugin

273* [Analytics](/docs/id/analytics): lacak penggunaan dan metrik kontribusi273* [Analytics](/docs/id/analytics): lacak penggunaan Claude Code di seluruh organisasi Anda

274* [Pengaturan terkelola](/docs/id/settings): konfigurasi kebijakan di seluruh organisasi274* [Pengaturan terkelola](/docs/id/settings): konfigurasi kebijakan di seluruh organisasi

275* [Konfigurasi jaringan](/docs/id/network-config): persyaratan firewall dan daftar izin IP275* [Konfigurasi jaringan](/docs/id/network-config): persyaratan firewall dan daftar izin IP

headless.md +37 −35

Details

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

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

91 91 

92Ketika stderr adalah terminal dan eksekusi telah menunggu selama lima detik, Claude Code mencetak satu baris ke stderr yang diawali dengan `Waiting for background work to finish` dan menyebutkan pekerjaan tersebut. Dengan [output `json` atau `stream-json`](#get-structured-output), baris tersebut hanya dicetak ketika stdout bukan terminal, sehingga JSON yang dibaca skrip Anda tidak pernah memuatnya.

93 

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

93 95 

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


209claude -p "Explain recursion" --output-format stream-json --verbose --include-partial-messages211claude -p "Explain recursion" --output-format stream-json --verbose --include-partial-messages

210```212```

211 213 

212Baris terakhir dari aliran adalah pesan `result` dengan teks respons akhir, biaya, dan metadata sesi.214Baris terakhir dari stream adalah pesan `result` dengan teks respons akhir, biaya, dan metadata sesi.

213 215 

214Jika konsumen Anda membaca aliran dengan lambat, Claude Code menunggu output yang antri untuk mengalir sebelum keluar, menskalakan tunggu dengan berapa banyak yang masih antri, dibatasi pada 30 detik. Sebelum v2.1.214 tunggu keluar dibatasi pada sekitar dua detik, yang dapat memotong akhir respons besar.216Jika konsumen Anda membaca stream dengan lambat, Claude Code menunggu output yang antri untuk terkuras sebelum keluar, menskalakan waktu tunggu dengan berapa banyak yang masih antri, dibatasi pada 30 detik. Sebelum v2.1.214 waktu tunggu keluar dibatasi pada sekitar dua detik, yang dapat memotong akhir respons besar.

215 217 

216Contoh berikut menggunakan [jq](https://jqlang.org/) untuk memfilter delta teks dan menampilkan hanya teks streaming. Flag `-r` menampilkan string mentah (tanpa tanda kutip) dan `-j` bergabung tanpa baris baru sehingga token streaming terus menerus:218Contoh berikut menggunakan [jq](https://jqlang.org/) untuk memfilter delta teks dan menampilkan hanya teks streaming. Flag `-r` menampilkan string mentah (tanpa tanda kutip) dan `-j` bergabung tanpa baris baru sehingga token streaming terus menerus:

217 219 


226 Ikuti pesan subagent228 Ikuti pesan subagent

227</h4>229</h4>

228 230 

229Pesan dari [subagent](/docs/id/sub-agents) dan dari skill yang [berjalan dalam subagent](/docs/id/skills#run-skills-in-a-subagent) muncul dalam aliran sebagai pesan `assistant` dan `user`. Bidang `parent_tool_use_id` pada pesan tersebut menunjukkan eksekusi mana yang memiliki setiap pesan. Pesan dari percakapan utama membawa `null` di bidang itu.231Pesan dari [subagent](/docs/id/sub-agents) dan dari skill yang [berjalan dalam subagent](/docs/id/skills#run-skills-in-a-subagent) muncul dalam stream sebagai pesan `assistant` dan `user`. Bidang `parent_tool_use_id` pada pesan tersebut menunjukkan eksekusi mana yang memiliki setiap pesan. Pesan dari percakapan utama membawa `null` di bidang itu.

230 232 

231Pesan pertama dari forked skill, atau dari subagent yang berjalan di [foreground](/docs/id/sub-agents#run-subagents-in-foreground-or-background), adalah pesan `user` yang membawa prompt atau konten skill yang mendorongnya. Setelah pesan pertama itu, Claude Code memancarkan:233Pesan pertama dari forked skill, atau dari subagent yang berjalan di [foreground](/docs/id/sub-agents#run-subagents-in-foreground-or-background), adalah pesan `user` yang membawa prompt atau konten skill yang mendorongnya. Setelah pesan pertama itu, Claude Code memancarkan:

232 234 


245 247 

246Untuk forked skill yang dimulai dari prompt, cocokkan `parent_tool_use_id` pada awalan `forked-command-`, karena nama setelahnya dapat berbeda dari yang Anda ketik.248Untuk forked skill yang dimulai dari prompt, cocokkan `parent_tool_use_id` pada awalan `forked-command-`, karena nama setelahnya dapat berbeda dari yang Anda ketik.

247 249 

248Jika sebagian pesan ini tidak ada di aliran Anda, periksa versi Claude Code Anda terhadap versi minimum berikut:250Jika sebagian pesan ini tidak ada di stream Anda, periksa versi Claude Code Anda terhadap versi minimum berikut:

249 251 

250* **`--forward-subagent-text` dan `CLAUDE_CODE_FORWARD_SUBAGENT_TEXT`**: v2.1.211 atau lebih baru252* **`--forward-subagent-text` dan `CLAUDE_CODE_FORWARD_SUBAGENT_TEXT`**: v2.1.211 atau lebih baru

251* **Penerusan di setiap kedalaman nesting**: v2.1.219 atau lebih baru253* **Penerusan di setiap kedalaman nesting**: v2.1.219 atau lebih baru


254* **Pesan forked skill yang Anda mulai dengan memberikan `/<skill-name>` sebagai prompt**: v2.1.287 atau lebih baru256* **Pesan forked skill yang Anda mulai dengan memberikan `/<skill-name>` sebagai prompt**: v2.1.287 atau lebih baru

255 257 

256<h4 id="handle-api-retries">258<h4 id="handle-api-retries">

257 Tangani percobaan ulang API259 Tangani retry API

258</h4>260</h4>

259 261 

260Ketika permintaan API gagal dengan kesalahan yang dapat dicoba ulang, Claude Code memancarkan acara `system/api_retry` sebelum mencoba ulang. Pada v2.1.246 atau lebih baru, ketika `401` atau `403` menolak kredensial [`apiKeyHelper`](/docs/id/settings-reference#apikeyhelper), Claude Code membuat dua percobaan ulang pertama diam-diam tanpa acara, kemudian memancarkan acara seperti biasa dari percobaan ulang berturut-turut ketiga dan seterusnya. Percobaan ulang diam-diam masih dihitung menuju `attempt`. Anda dapat menggunakan acara untuk menampilkan kemajuan percobaan ulang di antarmuka Anda sendiri.262Ketika permintaan API gagal dengan kesalahan yang dapat dicoba ulang, Claude Code memancarkan acara `system/api_retry` sebelum mencoba ulang. Pada v2.1.246 atau lebih baru, ketika `401` atau `403` menolak kredensial [`apiKeyHelper`](/docs/id/settings-reference#apikeyhelper), Claude Code melakukan dua retry pertama secara diam-diam tanpa acara, kemudian memancarkan acara seperti biasa mulai dari retry berturut-turut ketiga dan seterusnya. Retry diam-diam tersebut tetap dihitung dalam `attempt`. Anda dapat menggunakan acara ini untuk menampilkan kemajuan retry di antarmuka Anda sendiri.

261 263 

262| Bidang | Tipe | Deskripsi |264| Bidang | Tipe | Deskripsi |

263| - | - | - |265| - | - | - |

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

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

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

267| `max_retries` | integer | total percobaan ulang yang diizinkan untuk penyebab kegagalan ini |269| `max_retries` | integer | total retry yang diizinkan untuk penyebab kegagalan ini |

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

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

270| `no_response` | object, opsional | hadir hanya ketika percobaan yang gagal mendapat [tidak ada header respons tepat waktu](/docs/id/errors#no-response-from-api). `waited_ms` adalah berapa lama percobaan itu menunggu dan `retry_wait_ms` adalah berapa lama percobaan ulang akan menunggu. Memerlukan Claude Code v2.1.261 atau lebih baru |272| `no_response` | object, opsional | hadir hanya ketika percobaan yang gagal [tidak mendapat header respons tepat waktu](/docs/id/errors#no-response-from-api). `waited_ms` adalah berapa lama percobaan itu menunggu dan `retry_wait_ms` adalah berapa lama retry akan menunggu. Memerlukan Claude Code v2.1.261 atau lebih baru |

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

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

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


276 Baca metadata sesi278 Baca metadata sesi

277</h4>279</h4>

278 280 

279Acara `system/init` melaporkan metadata sesi termasuk model, alat, server MCP, dan plugin yang dimuat. Ini adalah acara pertama dalam aliran kecuali acara startup mendahuluinya:281Acara `system/init` melaporkan metadata sesi termasuk model, tool, server MCP, dan plugin yang dimuat. Ini adalah acara pertama dalam stream kecuali acara startup mendahuluinya:

280 282 

281* Acara `plugin_install`, ketika [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/docs/id/env-vars) diatur.283* Acara `plugin_install`, ketika [`CLAUDE_CODE_SYNC_PLUGIN_INSTALL`](/docs/id/env-vars) diatur.

282* [Acara `hook_started`, `hook_progress`, dan `hook_response`](/docs/id/agent-sdk/typescript#sdkhookstartedmessage), saat hook [`SessionStart`](/docs/id/hooks#sessionstart) atau [`Setup`](/docs/id/hooks#setup) yang dikonfigurasi berjalan. Ini streaming saat hook menghasilkannya. Claude Code v2.1.169 hingga v2.1.203 mengirimkannya dalam satu batch setelah hook selesai, masih sebelum `system/init`; v2.1.204 mengembalikan pengiriman langsung.284* [Acara `hook_started`, `hook_progress`, dan `hook_response`](/docs/id/agent-sdk/typescript#sdkhookstartedmessage), saat hook [`SessionStart`](/docs/id/hooks#sessionstart) atau [`Setup`](/docs/id/hooks#setup) yang dikonfigurasi berjalan. Acara ini di-stream saat hook menghasilkannya. Claude Code v2.1.169 hingga v2.1.203 mengirimkannya dalam satu batch setelah hook selesai, masih sebelum `system/init`; v2.1.204 mengembalikan pengiriman langsung.

283 285 

284Acara ini juga membawa array `capabilities` opsional dari string yang menamai perilaku protokol yang diimplementasikan versi Claude Code ini, seperti `interrupt_receipt_v1` atau `interrupt_cancel_queued_v1`. Periksanya untuk mendeteksi fitur alih-alih membandingkan string versi, dan abaikan nilai yang tidak Anda kenali. Bidang ini memerlukan Claude Code v2.1.205 atau lebih baru dan tidak ada di versi sebelumnya. Lihat [`SDKSystemMessage`](/docs/id/agent-sdk/typescript#sdksystemmessage) untuk daftar kemampuan.286Acara ini juga membawa array `capabilities` opsional dari string yang menamai perilaku protokol yang diimplementasikan versi Claude Code ini, seperti `interrupt_receipt_v1` atau `interrupt_cancel_queued_v1`. Periksanya untuk mendeteksi fitur alih-alih membandingkan string versi, dan abaikan nilai yang tidak Anda kenali. Bidang ini memerlukan Claude Code v2.1.205 atau lebih baru dan tidak ada di versi sebelumnya. Lihat [`SDKSystemMessage`](/docs/id/agent-sdk/typescript#sdksystemmessage) untuk daftar kemampuan.

285 287 


296 298 

297Ketika direktori `--plugin-dir` atau arsip itu sendiri gagal dimuat, entri `plugin_errors`-nya mencakup jalur absolut yang diselesaikan sebagai `path`. Gunakan untuk membedakan mana dari beberapa nilai `--plugin-dir` yang gagal. Bidang `path` memerlukan Claude Code v2.1.283 atau lebih baru.299Ketika direktori `--plugin-dir` atau arsip itu sendiri gagal dimuat, entri `plugin_errors`-nya mencakup jalur absolut yang diselesaikan sebagai `path`. Gunakan untuk membedakan mana dari beberapa nilai `--plugin-dir` yang gagal. Bidang `path` memerlukan Claude Code v2.1.283 atau lebih baru.

298 300 

299Gunakan bidang server MCP dengan cara yang sama. Ketika Anda berikan [`--mcp-config`](/docs/id/cli-reference#cli-flags) dengan `-p`, Claude Code menunggu server yang masih tertunda sebelum menjalankan giliran pertama, hingga timeout startup [`MCP_TIMEOUT`](/docs/id/env-vars), 30 detik secara default. Server jarak jauh dengan [daftar alat yang di-cache](/docs/id/agent-sdk/mcp#connection-timing) melewati tunggu, menampilkan `pending` di `system/init`, dan terhubung pada pemanggilan alat pertamanya. Tunggu memerlukan Claude Code v2.1.221 atau lebih baru.301Gunakan bidang server MCP dengan cara yang sama. Ketika Anda memberikan [`--mcp-config`](/docs/id/cli-reference#cli-flags) dengan `-p`, Claude Code menunggu server yang masih tertunda sebelum menjalankan giliran pertama, hingga timeout startup [`MCP_TIMEOUT`](/docs/id/env-vars), 30 detik secara default. Server jarak jauh dengan [daftar tool yang di-cache](/docs/id/agent-sdk/mcp#connection-timing) melewati penantian, menampilkan `pending` di `system/init`, dan terhubung pada panggilan tool pertamanya. Dalam [lingkungan self-hosted](/docs/id/self-hosted-environments-configuration#connection-timing), penantian yang lebih singkat berlaku sebagai gantinya. Penantian ini memerlukan Claude Code v2.1.221 atau lebih baru.

300 302 

301Claude Code memvalidasi setiap entri `--mcp-config` pada startup dan melewati entri yang gagal validasi, misalnya entri `url` tanpa `type`. Jalankan berlanjut dan keluar dengan bersih, jadi periksa bidang ini untuk menangkap server yang tidak pernah dimuat:303Claude Code memvalidasi setiap entri `--mcp-config` pada startup dan melewati entri yang gagal validasi, misalnya entri `url` tanpa `type`. Jalankan berlanjut dan keluar dengan bersih, jadi periksa bidang ini untuk menangkap server yang tidak pernah dimuat:

302 304 


324| `session_id` | string | sesi yang dimiliki acara |326| `session_id` | string | sesi yang dimiliki acara |

325 327 

326<h3 id="auto-approve-tools">328<h3 id="auto-approve-tools">

327 Persetujuan otomatis alat329 Persetujuan otomatis tool

328</h3>330</h3>

329 331 

330Gunakan `--allowedTools` untuk membiarkan Claude menggunakan alat tertentu tanpa meminta. Mencantumkan `Read` dan `Edit` memungkinkan Claude membaca dan mengedit file tanpa meminta izin. Mencantumkan `Bash` melakukan hal yang sama untuk perintah shell, kecuali dalam jalankan yang dimulai dalam [mode auto](/docs/id/permission-modes#how-auto-mode-evaluates-actions), di mana Claude Code menghapus entri `Bash` telanjang sebagai aturan allow yang luas dan mode auto mengevaluasi setiap perintah sebagai gantinya. Contoh ini menjalankan suite pengujian dan memperbaiki kegagalan dengan ketiga alat tersebut tercantum:332Gunakan `--allowedTools` untuk membiarkan Claude menggunakan tool tertentu tanpa meminta persetujuan. Mencantumkan `Read` dan `Edit` memungkinkan Claude membaca dan mengedit file tanpa meminta izin, kecuali pembacaan dari [jalur jaringan](/docs/id/permissions#network-paths). Mencantumkan `Bash` melakukan hal yang sama untuk perintah shell, kecuali dalam jalankan yang dimulai dalam [auto mode](/docs/id/permission-modes#how-auto-mode-evaluates-actions), di mana Claude Code menghapus entri `Bash` polos sebagai aturan allow yang luas dan auto mode mengevaluasi setiap perintah sebagai gantinya. Contoh ini menjalankan suite pengujian dan memperbaiki kegagalan dengan ketiga tool tersebut tercantum:

331 333 

332```bash theme={null}334```bash theme={null}

333claude -p "Run the test suite and fix any failures" \335claude -p "Run the test suite and fix any failures" \

334 --allowedTools "Bash,Read,Edit"336 --allowedTools "Bash,Read,Edit"

335```337```

336 338 

337Untuk menetapkan baseline untuk seluruh sesi alih-alih mencantumkan alat individual, berikan [mode izin](/docs/id/permission-modes). Jalankan di mana tidak ada yang menetapkan mode izin mengambil [mode izin awal bawaan](/docs/id/permission-modes#which-mode-a-session-starts-in), yang dapat berupa `auto`, jadi berikan yang Anda inginkan:339Untuk menetapkan baseline untuk seluruh sesi alih-alih mencantumkan tool individual, berikan [mode izin](/docs/id/permission-modes). Jalankan di mana tidak ada yang menetapkan mode izin mengambil [mode izin awal bawaan](/docs/id/permission-modes#which-mode-a-session-starts-in), yang dapat berupa `auto`, jadi berikan yang Anda inginkan:

338 340 

339* **`auto`**: berikan `--permission-mode auto` untuk memiliki pengklasifikasi meninjau sebagian besar tindakan alih-alih Anda341* **`auto`**: berikan `--permission-mode auto` agar pengklasifikasi meninjau sebagian besar tindakan alih-alih Anda

340* **`dontAsk`**: Claude Code menolak setiap panggilan yang akan meminta sebaliknya, yang berguna untuk CI runs yang terkunci. Tindakan yang tidak memerlukan persetujuan dalam mode Manual masih berjalan, seperti pembacaan file di direktori kerja Anda dan [set perintah read-only](/docs/id/permissions#read-only-commands), dan begitu juga tindakan yang entri `--allowedTools` Anda atau aturan `permissions.allow` cover. `AskUserQuestion`, alat konektor [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools), dan alat MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool) ditolak bahkan ketika aturan allow cocok342* **`dontAsk`**: Claude Code menolak setiap panggilan yang sebaliknya akan memunculkan permintaan izin, yang berguna untuk jalankan CI yang terkunci. Tindakan yang tidak memerlukan persetujuan dalam mode Manual tetap berjalan, seperti pembacaan file di direktori kerja Anda dan [set perintah read-only](/docs/id/permissions#read-only-commands), begitu juga tindakan yang dicakup oleh entri `--allowedTools` Anda atau aturan `permissions.allow`. `AskUserQuestion`, tool konektor yang [diatur organisasi Anda ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools), tool MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool), dan [pembacaan dari jalur jaringan](/docs/id/permissions#network-paths) ditolak bahkan ketika aturan allow cocok

341* **`acceptEdits`**: Claude menulis file tanpa meminta, dan Claude Code auto-approves perintah filesystem umum seperti `mkdir`, `touch`, `mv`, dan `cp`. [Tindakan yang tidak ada mode auto-approve](/docs/id/permission-modes#actions-no-mode-auto-approves) masih berlaku. Terlepas dari set perintah read-only, perintah shell lainnya dan permintaan jaringan masih memerlukan entri `--allowedTools` atau aturan `permissions.allow`. Lihat [apa yang `acceptEdits` auto-approve](/docs/id/permission-modes#auto-approve-file-edits-with-acceptedits-mode) untuk daftar lengkap343* **`acceptEdits`**: Claude menulis file tanpa meminta persetujuan, dan Claude Code menyetujui secara otomatis perintah filesystem umum seperti `mkdir`, `touch`, `mv`, dan `cp`. [Tindakan yang tidak disetujui otomatis oleh mode mana pun](/docs/id/permission-modes#actions-no-mode-auto-approves) tetap berlaku. Selain set perintah read-only, perintah shell lainnya dan permintaan jaringan masih memerlukan entri `--allowedTools` atau aturan `permissions.allow`. Lihat [apa yang disetujui otomatis oleh `acceptEdits`](/docs/id/permission-modes#auto-approve-file-edits-with-acceptedits-mode) untuk daftar lengkap

342 344 

343Contoh ini menerapkan perbaikan lint dengan `acceptEdits` sebagai baseline:345Contoh ini menerapkan perbaikan lint dengan `acceptEdits` sebagai baseline:

344 346 


347```349```

348 350 

349<h3 id="turn-off-permission-prompts-in-unattended-runs">351<h3 id="turn-off-permission-prompts-in-unattended-runs">

350 Matikan prompt izin dalam jalankan tanpa pengawasan352 Matikan permintaan izin dalam jalankan tanpa pengawasan

351</h3>353</h3>

352 354 

353Berikan `--permission-prompts none` ketika tidak ada yang tersedia untuk menjawab prompt izin, misalnya dalam pekerjaan terjadwal. Bendera paling penting ketika jalankan Anda memiliki host izin: aplikasi Agent SDK dengan callback [`canUseTool`](/docs/id/agent-sdk/user-input), atau alat MCP yang Anda berikan dengan [`--permission-prompt-tool`](/docs/id/cli-reference#cli-flags). Tanpa bendera, jalankan Anda menunggu host itu menjawab setiap permintaan izin.355Berikan `--permission-prompts none` ketika tidak ada yang tersedia untuk menjawab permintaan izin, misalnya dalam pekerjaan terjadwal. Flag ini paling penting ketika jalankan Anda memiliki host izin: aplikasi Agent SDK dengan [callback `canUseTool`](/docs/id/agent-sdk/user-input), atau tool MCP yang Anda berikan dengan [`--permission-prompt-tool`](/docs/id/cli-reference#cli-flags). Tanpa flag ini, jalankan Anda menunggu host itu menjawab setiap permintaan izin.

354 356 

355Dengan bendera, jalankan Anda tidak berkonsultasi dengan host atau menunggu itu. Apa pun yang akan meminta ditolak kecuali hook `PermissionRequest` mengizinkannya, Claude diberitahu bahwa tidak ada yang dapat menyetujui permintaan dan tidak mencoba ulang, dan jalankan berlanjut. Dalam jalankan `-p` tanpa host, permintaan ini ditolak baik cara, dan bendera juga memberitahu Claude tidak mencoba ulang mereka. Aturan izin, [hook `PermissionRequest`](/docs/id/hooks#permissionrequest), dan mode izin yang Anda atur masih memutuskan setiap panggilan terlebih dahulu; Claude Code hanya menolak permintaan yang tidak ada yang lain selesaikan.357Dengan flag ini, jalankan Anda tidak berkonsultasi dengan host atau menunggunya. Apa pun yang akan memunculkan permintaan izin ditolak kecuali hook `PermissionRequest` mengizinkannya, Claude diberi tahu bahwa tidak ada yang dapat menyetujui permintaan tersebut dan agar tidak mencobanya ulang, dan jalankan berlanjut. Dalam jalankan `-p` tanpa host, permintaan ini tetap ditolak, dan flag ini juga memberi tahu Claude agar tidak mencobanya ulang. Aturan izin, [hook `PermissionRequest`](/docs/id/hooks#permissionrequest), dan mode izin yang Anda atur tetap memutuskan setiap panggilan terlebih dahulu; Claude Code hanya menolak permintaan yang tidak diselesaikan oleh hal lain.

356 358 

357Contoh ini menjalankan tugas tanpa pengawasan dalam [mode auto](/docs/id/permission-modes#eliminate-prompts-with-auto-mode). Pengklasifikasi meninjau setiap tindakan seperti biasa, dan Claude Code menolak apa pun yang akan jatuh kembali ke prompt:359Contoh ini menjalankan tugas tanpa pengawasan dalam [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode). Pengklasifikasi meninjau setiap tindakan seperti biasa, dan Claude Code menolak apa pun yang akan jatuh kembali ke permintaan izin:

358 360 

359```bash theme={null}361```bash theme={null}

360claude -p "Update the dependency pins and run the tests" --permission-mode auto --permission-prompts none362claude -p "Update the dependency pins and run the tests" --permission-mode auto --permission-prompts none

361```363```

362 364 

363Dengan `--permission-prompts none`, Claude Code menghapus alat yang memerlukan jawaban dari orang, seperti [`AskUserQuestion`](/docs/id/tools-reference#askuserquestion-tool-behavior), sehingga Claude tidak dapat memanggilnya. Setiap [permintaan elicitasi MCP](/docs/id/mcp#respond-to-mcp-elicitation-requests) yang tidak ada hook [`Elicitation`](/docs/id/hooks#elicitation) jawab dibatalkan.365Dengan `--permission-prompts none`, Claude Code menghapus tool yang memerlukan jawaban dari seseorang, seperti [`AskUserQuestion`](/docs/id/tools-reference#askuserquestion-tool-behavior), sehingga Claude tidak dapat memanggilnya. Setiap [permintaan elicitation MCP](/docs/id/mcp#respond-to-mcp-elicitation-requests) yang tidak dijawab oleh [hook `Elicitation`](/docs/id/hooks#elicitation) dibatalkan.

364 366 

365Dengan `--output-format stream-json`, penolakan muncul sebagai pesan sistem `permission_denied`, dan pesan hasil akhir mencantumnya di `permission_denials`.367Dengan `--output-format stream-json`, penolakan muncul sebagai pesan sistem `permission_denied`, dan pesan hasil akhir mencantumkannya di `permission_denials`.

366 368 

367<Note>369<Note>

368 Bendera `--permission-prompts` memerlukan Claude Code v2.1.259 atau lebih baru. Versi sebelumnya menolaknya dengan kesalahan opsi tidak dikenal.370 Flag `--permission-prompts` memerlukan Claude Code v2.1.259 atau lebih baru. Versi sebelumnya menolaknya dengan kesalahan opsi tidak dikenal.

369</Note>371</Note>

370 372 

371<h3 id="create-a-commit">373<h3 id="create-a-commit">

372 Buat komit374 Buat commit

373</h3>375</h3>

374 376 

375Contoh ini meninjau perubahan yang dipentaskan dan membuat komit dengan pesan yang sesuai:377Contoh ini meninjau perubahan yang di-stage dan membuat commit dengan pesan yang sesuai:

376 378 

377```bash theme={null}379```bash theme={null}

378claude -p "Look at my staged changes and create an appropriate commit" \380claude -p "Look at my staged changes and create an appropriate commit" \

379 --allowedTools "Bash(git diff *),Bash(git log *),Bash(git status *),Bash(git commit *)"381 --allowedTools "Bash(git diff *),Bash(git log *),Bash(git status *),Bash(git commit *)"

380```382```

381 383 

382Bendera `--allowedTools` menggunakan [sintaks aturan izin](/docs/id/settings-reference#permission-rule-syntax). Spasi di akhir ` *` memungkinkan pencocokan awalan, jadi `Bash(git diff *)` memungkinkan perintah apa pun yang dimulai dengan `git diff`. Spasi sebelum `*` penting: tanpanya, `Bash(git diff*)` juga akan cocok dengan `git diff-index`.384Flag `--allowedTools` menggunakan [sintaks aturan izin](/docs/id/settings-reference#permission-rule-syntax). ` *` di akhir memungkinkan pencocokan awalan, jadi `Bash(git diff *)` mengizinkan perintah apa pun yang dimulai dengan `git diff`. Spasi sebelum `*` penting: tanpanya, `Bash(git diff*)` juga akan cocok dengan `git diff-index`.

383 385 

384<Note>386<Note>

385 Dukungan perintah berbeda dalam mode `-p`:387 Dukungan perintah berbeda dalam mode `-p`:

386 388 

387 * [skills](/docs/id/skills) yang dipanggil pengguna dan perintah kustom bekerja. Sertakan `/skill-name` dalam string prompt dan Claude Code memperluasnya sebelum menjalankan.389 * [Skills](/docs/id/skills) yang dipanggil pengguna dan perintah kustom berfungsi. Sertakan `/skill-name` dalam string prompt dan Claude Code memperluasnya sebelum menjalankan.

388 * Perintah bawaan yang hanya berjalan di antarmuka terminal, seperti `/login`, tidak tersedia.390 * Perintah bawaan yang hanya berjalan di antarmuka terminal, seperti `/login`, tidak tersedia.

389 * `/model`, `/effort`, `/fast`, `/color`, dan `/rename` menerima nilai sebagai argumen, misalnya `/model sonnet`, dan `/mcp` tanpa argumen mencetak ringkasan teks status server. Bentuk-bentuk ini memerlukan Claude Code v2.1.205 atau lebih baru dan mengikuti [catatan ketersediaan](/docs/id/commands#all-commands) setiap perintah.391 * `/model`, `/effort`, `/fast`, `/color`, dan `/rename` menerima nilai sebagai argumen, misalnya `/model sonnet`, dan `/mcp` tanpa argumen mencetak ringkasan teks status server. Bentuk-bentuk ini memerlukan Claude Code v2.1.205 atau lebih baru dan mengikuti [catatan ketersediaan](/docs/id/commands#all-commands) setiap perintah.

390 * Untuk mengubah pengaturan, berikan `key=value` ke `/config`, misalnya `/config thinking=false`.392 * Untuk mengubah pengaturan, berikan `key=value` ke `/config`, misalnya `/config thinking=false`.

391 * `/output-style <style>` beralih [output styles](/docs/id/output-styles) dan `/output-style` saja mencantumnya. Memerlukan Claude Code v2.1.269 atau lebih baru.393 * `/output-style <style>` beralih [gaya output](/docs/id/output-styles) dan `/output-style` saja mencantumkannya. Memerlukan Claude Code v2.1.269 atau lebih baru.

392</Note>394</Note>

393 395 

394<h3 id="customize-the-system-prompt">396<h3 id="customize-the-system-prompt">

395 Sesuaikan prompt sistem397 Sesuaikan system prompt

396</h3>398</h3>

397 399 

398Gunakan `--append-system-prompt` untuk menambahkan instruksi sambil mempertahankan perilaku default Claude Code. Contoh ini menyalurkan diff PR ke Claude dan menginstruksikannya untuk meninjau kerentanan keamanan. Simpan sebagai skrip shell, misalnya `review.sh`:400Gunakan `--append-system-prompt` untuk menambahkan instruksi sambil mempertahankan perilaku default Claude Code. Contoh ini menyalurkan diff PR ke Claude dan menginstruksikannya untuk meninjau kerentanan keamanan. Simpan sebagai skrip shell, misalnya `review.sh`:


403 --output-format json405 --output-format json

404```406```

405 407 

406Dalam skrip, `"$1"` berdiri untuk argumen pertama yang Anda berikan di baris perintah. Jalankan `bash review.sh 123` dan shell mengganti `"$1"` dengan `123`, jadi skrip mengambil diff untuk PR 123. Claude Code mencetak tinjauan sebagai JSON, dengan teks di bidang `result`.408Dalam skrip, `"$1"` mewakili argumen pertama yang Anda berikan di baris perintah. Jalankan `bash review.sh 123` dan shell mengganti `"$1"` dengan `123`, jadi skrip mengambil diff untuk PR 123. Claude Code mencetak tinjauan sebagai JSON, dengan teks di bidang `result`.

407 409 

408Lihat [system prompt flags](/docs/id/cli-reference#system-prompt-flags) untuk opsi lebih lanjut termasuk `--system-prompt` untuk sepenuhnya mengganti prompt default.410Lihat [flag system prompt](/docs/id/cli-reference#system-prompt-flags) untuk opsi lebih lanjut termasuk `--system-prompt` untuk sepenuhnya mengganti prompt default.

409 411 

410<h3 id="continue-conversations">412<h3 id="continue-conversations">

411 Lanjutkan percakapan413 Lanjutkan percakapan

412</h3>414</h3>

413 415 

414Gunakan `--continue` untuk melanjutkan percakapan terbaru, atau `--resume` dengan ID sesi untuk melanjutkan percakapan tertentu. Pada Claude Code v2.1.257 atau lebih baru, ketika Anda berikan `--continue`, Claude Code membuka [sesi latar belakang](/docs/id/sessions#resume-a-session) yang telah selesai, tetapi bukan yang masih berjalan. Contoh ini menjalankan tinjauan, kemudian mengirim prompt tindak lanjut:416Gunakan `--continue` untuk melanjutkan percakapan terbaru, atau `--resume` dengan ID sesi untuk melanjutkan percakapan tertentu. Pada Claude Code v2.1.257 atau lebih baru, ketika Anda memberikan `--continue`, Claude Code membuka [sesi latar belakang](/docs/id/sessions#where-the-session-picker-looks) yang telah selesai, tetapi bukan yang masih berjalan. Contoh ini menjalankan tinjauan, kemudian mengirim prompt tindak lanjut:

415 417 

416```bash theme={null}418```bash theme={null}

417# First request419# First request


429claude -p "Continue that review" --resume "$session_id"431claude -p "Continue that review" --resume "$session_id"

430```432```

431 433 

432Anda dapat menjalankan dua perintah dari direktori yang berbeda: Claude Code [menemukan sesi berdasarkan ID-nya](/docs/id/sessions#resume-a-session) di proyek apa pun di mesin ini. Sebelum v2.1.223, Claude Code mencari ID hanya di direktori proyek saat ini dan git worktrees-nya, jadi Anda harus menjalankan kedua perintah dari direktori yang sama.434Anda dapat menjalankan dua perintah dari direktori yang berbeda: Claude Code [menemukan sesi berdasarkan ID-nya](/docs/id/sessions#where-the-session-picker-looks) di proyek apa pun di mesin ini.

433 435 

434Sebagai ganti ID sesi, Anda dapat memberikan `--resume` jalur absolut ke file [transkrip](/docs/id/sessions#where-transcripts-are-stored) `.jsonl` sesi, dan Claude Code melanjutkan percakapan yang disimpan dalam file itu.436Sebagai ganti ID sesi, Anda dapat memberikan `--resume` jalur absolut ke file [transkrip](/docs/id/sessions#where-transcripts-are-stored) `.jsonl` sesi, dan Claude Code melanjutkan percakapan yang disimpan dalam file itu.

435 437 

hooks.md +40 −13

Details

302| :- | :- | :- |302| :- | :- | :- |

303| `"*"`, `""`, atau dihilangkan | Cocokkan semua | dijalankan pada setiap kemunculan event |303| `"*"`, `""`, atau dihilangkan | Cocokkan semua | dijalankan pada setiap kemunculan event |

304| Hanya huruf, digit, `_`, `-`, spasi, `,`, dan `\|` | String yang tepat, atau daftar string yang tepat dipisahkan `\|` atau `,` dengan whitespace opsional di sekitarnya | `Bash` cocok hanya dengan tool Bash; `Edit\|Write` dan `Edit, Write` masing-masing cocok dengan salah satu tool dengan tepat; `code-reviewer` cocok hanya dengan tipe agent itu |304| Hanya huruf, digit, `_`, `-`, spasi, `,`, dan `\|` | String yang tepat, atau daftar string yang tepat dipisahkan `\|` atau `,` dengan whitespace opsional di sekitarnya | `Bash` cocok hanya dengan tool Bash; `Edit\|Write` dan `Edit, Write` masing-masing cocok dengan salah satu tool dengan tepat; `code-reviewer` cocok hanya dengan tipe agent itu |

305| Berisi karakter lain apa pun | Ekspresi reguler JavaScript, tidak berlabuh | `^Notebook` cocok dengan tool apa pun yang dimulai dengan Notebook; `mcp__memory__.*` cocok dengan setiap tool dari server `memory` |305| Berisi karakter lain apa pun | Ekspresi reguler JavaScript, tidak berlabuh | `^Notebook` cocok dengan tool apa pun yang namanya dimulai dengan `Notebook`; `mcp__memory__.*` cocok dengan setiap tool dari server `memory` |

306 306 

307Matcher pada jalur ekspresi reguler diuji dengan `RegExp.prototype.test` JavaScript, yang berhasil pada kecocokan di mana pun dalam nilai. `Edit.*` cocok dengan `Edit` dan `NotebookEdit`; bungkus pola dalam `^` dan `$`, seperti `^Edit$`, ketika Anda memerlukan kecocokan seluruh string.307Matcher pada jalur ekspresi reguler diuji dengan `RegExp.prototype.test` JavaScript, yang berhasil pada kecocokan di mana pun dalam nilai. `Edit.*` cocok dengan `Edit` dan `NotebookEdit`; bungkus pola dalam `^` dan `$`, seperti `^Edit$`, ketika Anda memerlukan kecocokan seluruh string.

308 308 


425 425 

426Semua matching hooks berjalan secara paralel. Jika Anda mendefinisikan handler yang sama di lebih dari satu file pengaturan, itu berjalan sekali. Salinan handler yang sama dari plugin atau skill tetap terpisah.426Semua matching hooks berjalan secara paralel. Jika Anda mendefinisikan handler yang sama di lebih dari satu file pengaturan, itu berjalan sekali. Salinan handler yang sama dari plugin atau skill tetap terpisah.

427 427 

428Handlers berjalan di direktori saat ini dengan lingkungan Claude Code. Jika direktori saat ini tidak lagi ada, misalnya worktree atau direktori temp yang shell lain hapus di tengah-sesi, Claude Code menjalankan command hooks dari yang pertama dari ini yang masih ada: direktori tempat sesi dimulai, akar proyek, direktori home Anda, atau direktori temp sistem. Claude Code mencatat warning yang menamai direktori fallback dalam [debug log](#debug-hooks).428Handlers berjalan di direktori saat ini dengan lingkungan Claude Code. Jika direktori saat ini tidak lagi ada, misalnya worktree atau direktori temp yang shell lain hapus di tengah-sesi, Claude Code menjalankan command hooks dari yang pertama dari ini yang masih ada: direktori tempat sesi dimulai, akar proyek, direktori home Anda, atau direktori temp sistem. Claude Code mencatat warning yang menamai direktori fallback dalam [debug log](#debug-hooks). Untuk sesi worktree yang Anda mulai dari aplikasi desktop, lihat [Apa yang dibagikan worktree dengan checkout utama](/docs/id/worktrees#what-worktrees-share-with-the-main-checkout).

429 429 

430Variabel lingkungan `$CLAUDE_CODE_REMOTE` adalah `"true"` di lingkungan web jarak jauh dan tidak diatur di CLI lokal. Claude Code v2.1.199 dan lebih baru menetapkan [`$CLAUDE_CODE_BRIDGE_SESSION_ID`](/docs/id/env-vars) ke [Remote Control](/docs/id/remote-control) session ID saat sesi lokal memiliki koneksi Remote Control yang aktif.430Variabel lingkungan `$CLAUDE_CODE_REMOTE` adalah `"true"` di lingkungan web jarak jauh dan tidak diatur di CLI lokal. Claude Code v2.1.199 dan lebih baru menetapkan [`$CLAUDE_CODE_BRIDGE_SESSION_ID`](/docs/id/env-vars) ke [Remote Control](/docs/id/remote-control) session ID saat sesi lokal memiliki koneksi Remote Control yang aktif.

431 431 


645 645 

646 * **`${CLAUDE_PROJECT_DIR}` tetap di tempat**: itu masih menunjuk ke akar proyek tempat sesi dimulai, jadi perintah seperti `${CLAUDE_PROJECT_DIR}/.claude/hooks/check-style.sh` masih menjalankan skrip di checkout utama.646 * **`${CLAUDE_PROJECT_DIR}` tetap di tempat**: itu masih menunjuk ke akar proyek tempat sesi dimulai, jadi perintah seperti `${CLAUDE_PROJECT_DIR}/.claude/hooks/check-style.sh` masih menjalankan skrip di checkout utama.

647 * **`cwd` mengikuti Claude**: bidang `cwd` dalam [input JSON](#common-input-fields) hook adalah akar worktree setelah Claude memasuki worktree, dan direktori baru setelah Claude menjalankan `cd`. Bacanya ketika hook perlu tahu direktori mana Claude sedang bekerja.647 * **`cwd` mengikuti Claude**: bidang `cwd` dalam [input JSON](#common-input-fields) hook adalah akar worktree setelah Claude memasuki worktree, dan direktori baru setelah Claude menjalankan `cd`. Bacanya ketika hook perlu tahu direktori mana Claude sedang bekerja.

648 

649 Untuk sesi worktree yang Anda mulai dari aplikasi desktop, lihat [Apa yang dibagikan worktree dengan checkout utama](/docs/id/worktrees#what-worktrees-share-with-the-main-checkout) untuk mengetahui ke mana `${CLAUDE_PROJECT_DIR}` menunjuk.

648</Note>650</Note>

649 651 

650Lebih suka [exec form](#exec-form-and-shell-form) untuk hook apa pun yang mereferensikan path placeholder. Dalam shell form, bungkus setiap placeholder dalam tanda kutip ganda.652Lebih suka [exec form](#exec-form-and-shell-form) untuk hook apa pun yang mereferensikan path placeholder. Dalam shell form, bungkus setiap placeholder dalam tanda kutip ganda.


782| `effort` | Objek dengan field `level` yang berisi [tingkat effort](/docs/id/model-config#adjust-effort-level) yang berlaku saat hook berjalan: `"low"`, `"medium"`, `"high"`, `"xhigh"`, atau `"max"`. Jika Anda mengatur tingkat yang tidak didukung model aktif, `level` melaporkan tingkat yang sebenarnya dijalankan Claude Code; [Menyesuaikan tingkat effort](/docs/id/model-config#adjust-effort-level) menjelaskan cara tingkat tersebut dipilih. Objek ini cocok dengan field `effort` pada [baris status](/docs/id/statusline#available-data). Ada untuk event yang dijalankan dalam konteks penggunaan tool, seperti `PreToolUse`, `PostToolUse`, `Stop`, dan `SubagentStop`, ketika model saat ini mendukung parameter effort. Tingkat ini juga tersedia untuk perintah hook dan tool Bash sebagai environment variable `$CLAUDE_EFFORT`. |784| `effort` | Objek dengan field `level` yang berisi [tingkat effort](/docs/id/model-config#adjust-effort-level) yang berlaku saat hook berjalan: `"low"`, `"medium"`, `"high"`, `"xhigh"`, atau `"max"`. Jika Anda mengatur tingkat yang tidak didukung model aktif, `level` melaporkan tingkat yang sebenarnya dijalankan Claude Code; [Menyesuaikan tingkat effort](/docs/id/model-config#adjust-effort-level) menjelaskan cara tingkat tersebut dipilih. Objek ini cocok dengan field `effort` pada [baris status](/docs/id/statusline#available-data). Ada untuk event yang dijalankan dalam konteks penggunaan tool, seperti `PreToolUse`, `PostToolUse`, `Stop`, dan `SubagentStop`, ketika model saat ini mendukung parameter effort. Tingkat ini juga tersedia untuk perintah hook dan tool Bash sebagai environment variable `$CLAUDE_EFFORT`. |

783| `hook_event_name` | Nama event yang dijalankan |785| `hook_event_name` | Nama event yang dijalankan |

784 786 

785Saat berjalan dengan `--agent` atau di dalam subagent, dua field tambahan disertakan:787`agent_id` dan `agent_type` memberi tahu skrip Anda di agent mana hook dijalankan, seperti subagent, [rekan tim in-process](/docs/id/agent-teams#choose-a-display-mode), atau agent yang Anda pilih dengan `--agent`:

786 788 

787| Field | Deskripsi |789| Field | Deskripsi |

788| :- | :- |790| :- | :- |

789| `agent_id` | Pengidentifikasi unik untuk subagent. Hanya ada ketika hook dijalankan di dalam pemanggilan subagent. Gunakan ini untuk membedakan pemanggilan hook subagent dari pemanggilan thread utama. |791| `agent_id` | Pengidentifikasi unik untuk subagent atau rekan tim in-process tempat hook dijalankan. |

790| `agent_type` | Nama agent (misalnya, `"Explore"` atau `"security-reviewer"`). Ada ketika sesi menggunakan `--agent` atau hook dijalankan di dalam subagent. Untuk subagent, tipe subagent diutamakan daripada nilai `--agent` sesi. Lihat [SubagentStart](#subagentstart) untuk nilai yang dilaporkan subagent kustom dan plugin serta cara menulis matcher untuk nama yang dibatasi pada plugin. |792| `agent_type` | Nama agent (misalnya, `"Explore"` atau `"security-reviewer"`). Ada ketika sesi menggunakan `--agent` atau hook dijalankan di dalam subagent. Untuk subagent, tipe subagent diutamakan daripada nilai `--agent` sesi. Lihat [SubagentStart](#subagentstart) untuk nilai yang dilaporkan subagent kustom dan plugin serta cara menulis matcher untuk nama yang dibatasi pada plugin. |

791 793 

792Hanya hook [`SessionStart`](#sessionstart) yang dapat menerima field `model`, dan Claude Code tidak selalu menyertakannya. Hook [`PreModelSwitch`](#premodelswitch) dan [`PostModelSwitch`](#postmodelswitch) menerima `from_model` dan `to_model` sebagai gantinya, jadi gunakan hook PostModelSwitch untuk mengikuti model saat model berubah selama sesi.794Hanya hook [`SessionStart`](#sessionstart) yang dapat menerima field `model`, dan Claude Code tidak selalu menyertakannya. Hook [`PreModelSwitch`](#premodelswitch) dan [`PostModelSwitch`](#postmodelswitch) menerima `from_model` dan `to_model` sebagai gantinya, jadi gunakan hook PostModelSwitch untuk mengikuti model saat model berubah selama sesi.


855 857 

856Untuk sebagian besar event, Claude Code menulis stdout ke log debug dan tidak menampilkannya di transkrip. Pengecualiannya adalah `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart`, dan `PostModelSwitch`, di mana Claude Code menambahkan stdout teks biasa sebagai konteks yang dapat dilihat dan ditindaklanjuti oleh Claude.858Untuk sebagian besar event, Claude Code menulis stdout ke log debug dan tidak menampilkannya di transkrip. Pengecualiannya adalah `UserPromptSubmit`, `UserPromptExpansion`, `SessionStart`, dan `PostModelSwitch`, di mana Claude Code menambahkan stdout teks biasa sebagai konteks yang dapat dilihat dan ditindaklanjuti oleh Claude.

857 859 

858Apakah Claude Code membaca stdout Anda sebagai [output JSON](#json-output) atau sebagai teks biasa bergantung pada bagaimana stdout diawali dan diakhiri, dengan mengabaikan whitespace di sekitarnya:860Untuk hook yang tidak [async](#how-async-hooks-execute), Claude Code mem-parse stdout Anda sebagai [output JSON](#json-output) ketika seluruh output adalah satu objek JSON tanpa apa pun di sekitarnya selain whitespace, dan jika tidak, sebagai teks biasa atau kegagalan parse:

859 861 

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

861* **Diawali dengan `{` tetapi tidak diakhiri dengan `}`**: Claude Code memperlakukannya sebagai teks biasa.863* **Output yang tidak diawali dengan `{`, atau yang diawali dengan `{` tetapi tidak diakhiri dengan `}`**: teks biasa. Array JSON dan string JSON yang diberi tanda kutip merupakan teks biasa menurut aturan ini.

862* **Diawali dengan hal lain**: Claude Code memperlakukannya sebagai teks biasa, termasuk array JSON atau string JSON yang diberi tanda kutip.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.

863 866 

864Ketika Claude Code mencoba mem-parse stdout Anda sebagai JSON dan gagal, atau objek yang di-parse gagal [validasi skema](#json-output), eksekusi tersebut adalah [error non-blocking](#exit-code-output). Pemberitahuan `<hook name> hook error` memuat pesan parse atau validasi. Pada event yang menambahkan stdout teks biasa sebagai konteks, Claude Code tidak menambahkan stdout yang gagal di-parse.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.

865 868 


1050 Pilih satu pendekatan per hook: gunakan exit code saja untuk memberi sinyal, atau keluar dengan 0 dan cetak JSON untuk kontrol terstruktur. Jika Anda mencampurnya, exit 2 tetap mempertahankan [efek pemblokirannya](#exit-code-2-behavior-per-event), dan Claude Code tetap membaca field JSON, dengan satu pengecualian elicitation yang dicatat di bagian [Exit code 2](#exit-code-2).1053 Pilih satu pendekatan per hook: gunakan exit code saja untuk memberi sinyal, atau keluar dengan 0 dan cetak JSON untuk kontrol terstruktur. Jika Anda mencampurnya, exit 2 tetap mempertahankan [efek pemblokirannya](#exit-code-2-behavior-per-event), dan Claude Code tetap membaca field JSON, dengan satu pengecualian elicitation yang dicatat di bagian [Exit code 2](#exit-code-2).

1051</Note>1054</Note>

1052 1055 

1053Stdout hook Anda hanya boleh berisi objek JSON. Jika profil shell Anda mencetak teks saat startup, hal itu dapat mengganggu parsing JSON. Lihat [JSON hook tidak berpengaruh](/docs/id/hooks-guide#hook-json-has-no-effect) dalam panduan pemecahan masalah.1056Jangan cetak apa pun selain objek JSON ke stdout. Untuk hook yang tidak [async](#how-async-hooks-execute), teks lain di sana, seperti baris yang dicetak profil shell Anda saat startup, mencegah Claude Code membaca objek tersebut sebagai JSON, dan [JSON hook tidak berpengaruh](/docs/id/hooks-guide#hook-json-has-no-effect) menunjukkan cara menemukan dan membungkam teks tersebut.

1054 1057 

1055String `additionalContext`, `systemMessage`, dan `initialUserMessage` dari hook, serta stdout biasanya, dibatasi hingga 10.000 karakter:1058String `additionalContext`, `systemMessage`, dan `initialUserMessage` dari hook, serta stdout biasanya, dibatasi hingga 10.000 karakter:

1056 1059 


1142 1145 

1143Ketika beberapa hook mengembalikan `additionalContext` untuk event yang sama, Claude menerima semua nilainya.1146Ketika beberapa hook mengembalikan `additionalContext` untuk event yang sama, Claude menerima semua nilainya.

1144 1147 

1148Jika string Anda berisi tag `<system-reminder>` atau `</system-reminder>`, Claude menerima string tersebut dengan `<` pada tag itu diganti dengan `&lt;`.

1149 

1145Jika suatu nilai melebihi 10.000 karakter, Claude Code menulis teks tersebut ke file di direktori sesi dan sebagai gantinya meneruskan path file kepada Claude beserta pratinjau hingga 2.000 karakter pertama. Claude dapat membaca file tersebut, tetapi Claude Code tidak memintanya untuk melakukannya.1150Jika suatu nilai melebihi 10.000 karakter, Claude Code menulis teks tersebut ke file di direktori sesi dan sebagai gantinya meneruskan path file kepada Claude beserta pratinjau hingga 2.000 karakter pertama. Claude dapat membaca file tersebut, tetapi Claude Code tidak memintanya untuk melakukannya.

1146 1151 

1147Gunakan `additionalContext` untuk informasi yang perlu diketahui Claude tentang status environment Anda saat ini atau operasi yang baru saja dijalankan:1152Gunakan `additionalContext` untuk informasi yang perlu diketahui Claude tentang status environment Anda saat ini atau operasi yang baru saja dijalankan:


1364 Mempertahankan environment variable1369 Mempertahankan environment variable

1365</h4>1370</h4>

1366 1371 

1367Hook SessionStart memiliki akses ke environment variable `CLAUDE_ENV_FILE`, yang menyediakan path file tempat Anda dapat mempertahankan environment variable untuk perintah Bash berikutnya.1372Hook SessionStart memiliki akses ke environment variable `CLAUDE_ENV_FILE`, yang menyediakan path file tempat Anda dapat mempertahankan environment variable untuk perintah shell yang dijalankan Claude di kemudian waktu dalam sesi.

1368 1373 

1369Untuk menetapkan environment variable satu per satu, tulis pernyataan `export` ke `CLAUDE_ENV_FILE`. Gunakan append (`>>`) untuk mempertahankan variabel yang ditetapkan oleh hook lain:1374Untuk menetapkan environment variable satu per satu, tulis pernyataan `export` ke `CLAUDE_ENV_FILE`. Gunakan append (`>>`) untuk mempertahankan variabel yang ditetapkan oleh hook lain:

1370 1375 


1399exit 01404exit 0

1400```1405```

1401 1406 

1407Setiap perintah Bash menjalankan isi file sebagai kode shell sebelum perintah itu sendiri, sehingga baris di sana dapat menggunakan apa pun yang dievaluasi Bash, seperti referensi `$PATH` dalam `export PATH="$PATH:./node_modules/.bin"`.

1408 

1409<a id="persisted-variables-in-powershell-commands" />

1410 

1411<h5 id="persisted-variables-in-powershell-commands">

1412 Variabel yang dipertahankan dalam perintah PowerShell

1413</h5>

1414 

1415Perintah [PowerShell](/docs/id/tools-reference#powershell-tool) juga menerima variabel dari `CLAUDE_ENV_FILE`, di Claude Code v2.1.296 atau yang lebih baru, tetapi PowerShell tidak pernah menjalankan file tersebut. Sebagai gantinya, Claude Code membaca penetapan di dalamnya dan menyalinnya ke environment perintah PowerShell. Hal ini hanya dilakukan ketika setiap baris merupakan salah satu dari berikut, di seluruh yang ditulis oleh setiap hook dalam sesi ini dan skrip apa pun yang Anda [tetapkan sebagai `CLAUDE_ENV_FILE`](/docs/id/env-vars) sebelum peluncuran:

1416 

1417* Baris kosong atau komentar `#`

1418* Satu penetapan di awal baris, ditulis `export NAME=value`, `declare -x NAME=value`, atau `NAME=value`, dengan nilai yang akan digunakan Bash persis seperti yang tertulis, terdiri dari campuran bagian-bagian berikut: teks tanpa tanda kutip yang hanya menggunakan huruf, angka, dan karakter `_ @ % + = : , . / -`, teks dalam tanda kutip tunggal, dan teks dalam tanda kutip ganda di mana setiap `$`, backtick, atau `"` di dalamnya di-escape dengan backslash

1419 

1420Jika ada baris dengan jenis lain, seperti `export PATH="$PATH:./node_modules/.bin"` dengan `$PATH` yang tidak di-escape, perintah `source`, atau string `$'...'` yang dicetak oleh `direnv export bash`, perintah PowerShell tidak menerima variabel apa pun, dan `claude --debug` mencatat `Session environment is not all plain assignments`. Perintah Bash tetap menerima semuanya. Di Windows, perintah PowerShell juga tidak menerima variabel yang nilainya mengandung `/` atau `\`, karena Git Bash dan Windows menulis path secara berbeda. Perintah PowerShell yang berjalan dalam [sandbox](/docs/id/sandboxing) tidak menerima variabel apa pun.

1421 

1402<Note>1422<Note>

1403 `CLAUDE_ENV_FILE` tersedia untuk hook SessionStart, [Setup](#setup), [CwdChanged](#cwdchanged), dan [FileChanged](#filechanged). Jenis hook lain tidak memiliki akses ke variabel ini.1423 `CLAUDE_ENV_FILE` tersedia untuk hook SessionStart, [Setup](#setup), [CwdChanged](#cwdchanged), dan [FileChanged](#filechanged). Event hook lain tidak memiliki akses ke variabel ini, begitu pula hook yang berjalan di PowerShell, baik melalui [`"shell": "powershell"`](#command-hook-fields) maupun secara default di Windows tanpa Git Bash.

1404</Note>1424</Note>

1405 1425 

1406<h3 id="setup">1426<h3 id="setup">


2030 2050 

2031| Field | Deskripsi |2051| Field | Deskripsi |

2032| :- | :- |2052| :- | :- |

2033| `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 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 |2053| `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` dan `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 terlepas dari apa yang dikembalikan hook |

2034| `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 run `-p` tempat tidak ada yang dapat menjawab permintaan tersebut, Claude membaca alasan tersebut di hasil tool sebagai gantinya. Untuk `"deny"`, ditampilkan kepada Claude. Untuk `"allow"` dan `"defer"`, hanya ditulis ke [log debug](#debug-hooks) |2054| `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 run `-p` tempat tidak ada yang dapat menjawab permintaan tersebut, Claude membaca alasan tersebut di hasil tool sebagai gantinya. Untuk `"deny"`, ditampilkan kepada Claude. Untuk `"allow"` dan `"defer"`, hanya ditulis ke [log debug](#debug-hooks) |

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

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


2136Jika tool yang ditangguhkan tidak lagi tersedia saat Anda melanjutkan, proses keluar dengan `stop_reason: "tool_deferred_unavailable"` dan `is_error: true` sebelum hook dipicu. Ini terjadi saat server MCP yang menyediakan tool tidak terhubung untuk sesi yang dilanjutkan. Payload `deferred_tool_use` tetap disertakan sehingga Anda dapat mengidentifikasi tool mana yang hilang.2156Jika tool yang ditangguhkan tidak lagi tersedia saat Anda melanjutkan, proses keluar dengan `stop_reason: "tool_deferred_unavailable"` dan `is_error: true` sebelum hook dipicu. Ini terjadi saat server MCP yang menyediakan tool tidak terhubung untuk sesi yang dilanjutkan. Payload `deferred_tool_use` tetap disertakan sehingga Anda dapat mengidentifikasi tool mana yang hilang.

2137 2157 

2138<Note>2158<Note>

2139 Untuk melanjutkan sesi yang ditangguhkan dalam plan mode, teruskan [`--permission-prompt-tool`](/docs/id/cli-reference#cli-flags) bersama `--resume` sehingga Claude Code dapat menyajikan rencana untuk disetujui. Jika Anda meneruskan flag peluncuran tertentu lainnya, run yang dilanjutkan tidak kembali ke plan mode; lihat [Melanjutkan dalam plan mode dengan `-p`](/docs/id/sessions#resume-in-plan-mode-with-p). Memerlukan Claude Code v2.1.246 atau yang lebih baru.2159 Untuk melanjutkan sesi yang ditangguhkan dalam plan mode, berikan [`--permission-prompt-tool`](/docs/id/cli-reference#cli-flags) bersama `--resume` agar Claude Code dapat menyajikan rencana untuk disetujui. Untuk kondisi lainnya, lihat [Melanjutkan dalam plan mode dengan `-p`](/docs/id/sessions#resume-in-plan-mode-with-p). Memerlukan Claude Code v2.1.246 atau yang lebih baru.

2140 2160 

2141 Saat Anda melanjutkan dengan `-p`, Claude Code tidak memulihkan mode izin tersimpan lainnya. Claude Code memulai run dalam mode izin yang akan digunakan oleh run `claude -p` baru, jadi teruskan `--permission-mode` atau `--dangerously-skip-permissions` lagi jika sesi yang ditangguhkan menggunakannya. Saat Anda melanjutkan dengan `claude --resume <session-id>` tanpa `-p`, Claude Code memulihkan mode izin yang tersimpan, dengan pengecualian yang tercantum di [mode izin saat resume](/docs/id/sessions#permission-mode-on-resume).2161 Saat Anda melanjutkan dengan `-p`, Claude Code tidak memulihkan mode izin tersimpan lainnya. Claude Code memulai run dalam mode izin yang akan digunakan oleh run `claude -p` baru, jadi teruskan `--permission-mode` atau `--dangerously-skip-permissions` lagi jika sesi yang ditangguhkan menggunakannya. Saat Anda melanjutkan dengan `claude --resume <session-id>` tanpa `-p`, Claude Code memulihkan mode izin yang tersimpan, dengan pengecualian yang tercantum di [mode izin saat resume](/docs/id/sessions#permission-mode-on-resume).

2142</Note>2162</Note>


4304 4324 

4305Setelah proses latar belakang keluar, Claude Code mengirimkan bidang `additionalContext` dan `systemMessage` dari respons JSON hook ke Claude pada turn percakapan berikutnya. Tidak seperti `systemMessage` hook sinkron, tidak ada bidang yang ditampilkan kepada Anda.4325Setelah proses latar belakang keluar, Claude Code mengirimkan bidang `additionalContext` dan `systemMessage` dari respons JSON hook ke Claude pada turn percakapan berikutnya. Tidak seperti `systemMessage` hook sinkron, tidak ada bidang yang ditampilkan kepada Anda.

4306 4326 

4327Cetak respons JSON sendirian di stdout atau pada satu barisnya sendiri:

4328 

4329* **Sendirian di stdout**: ketika respons adalah satu-satunya teks di stdout, respons tersebut dapat mencakup beberapa baris, seperti output `jq` yang diformat rapi. Mencakup beberapa baris memerlukan Claude Code v2.1.295 atau yang lebih baru.

4330* **Pada satu barisnya sendiri**: async hook dapat mencetak teks lain ke stdout ketika respons muat dalam satu baris tersendiri, misalnya dengan `jq -c`.

4331 

4307Claude Code memvalidasi respons JSON tersebut terhadap [output schema](#json-output) yang sama seperti hooks sinkron, dan menghapus bidang apa pun yang nilainya memiliki tipe yang salah, seperti `systemMessage` yang bukan string, alih-alih menyampaikannya. Jalankan dengan `--debug` untuk melihat peringatan yang menyebutkan setiap bidang yang dihapus. Sebelum v2.1.202, output JSON yang tidak terbentuk dengan baik dari async hook dapat menghancurkan sesi, dan kerusakan terulang setiap kali sesi dilanjutkan.4332Claude Code memvalidasi respons JSON tersebut terhadap [output schema](#json-output) yang sama seperti hooks sinkron, dan menghapus bidang apa pun yang nilainya memiliki tipe yang salah, seperti `systemMessage` yang bukan string, alih-alih menyampaikannya. Jalankan dengan `--debug` untuk melihat peringatan yang menyebutkan setiap bidang yang dihapus. Sebelum v2.1.202, output JSON yang tidak terbentuk dengan baik dari async hook dapat menghancurkan sesi, dan kerusakan terulang setiap kali sesi dilanjutkan.

4308 4333 

4309Notifikasi penyelesaian async hook ditekan secara default. Untuk melihatnya, aktifkan mode verbose dengan `Ctrl+O` atau mulai Claude Code dengan `--verbose`.4334Notifikasi penyelesaian async hook ditekan secara default. Untuk melihatnya, aktifkan mode verbose dengan `Ctrl+O` atau mulai Claude Code dengan `--verbose`.


44572026-07-19T02:03:24.382Z [DEBUG] "Hook PostToolUse:Write (PostToolUse) success:\nhook-ran"44822026-07-19T02:03:24.382Z [DEBUG] "Hook PostToolUse:Write (PostToolUse) success:\nhook-ran"

4458```4483```

4459 4484 

4485Untuk menemukan hook yang lambat, cari baris `Hooks:` di log yang diakhiri dengan durasi. Di Claude Code v2.1.296 atau yang lebih baru, setiap hook perintah pada event tool, `UserPromptSubmit`, `SessionStart`, `Stop`, dan beberapa event lainnya meninggalkan satu baris tersebut saat selesai, apa pun yang dicetaknya. Baris tersebut memuat nama event, digabungkan dengan titik dua ke nama tool atau nilai lain yang dicocokkan oleh hook, lalu perintah hook dalam tanda kurung siku, plugin asalnya jika ada, bagaimana eksekusi berakhir, dan berapa lama waktu yang dibutuhkan, seperti pada `Hooks: PostToolUse:Write [.claude/hooks/log-write.sh] finished with status 0 (31ms)`. Eksekusi juga dapat berakhir sebagai `timed out after <N>ms`, `cancelled`, `moved to the background`, atau `failed to start`. Pada beberapa event, seperti `Notification`, `SessionEnd`, dan `PreCompact`, hook perintah justru meninggalkan baris `completed with status` tanpa durasi.

4486 

4460Untuk detail pencocokan hook yang lebih granular, atur `CLAUDE_CODE_DEBUG_LOG_LEVEL=verbose` untuk melihat baris log tambahan seperti jumlah matcher hook dan pencocokan query.4487Untuk detail pencocokan hook yang lebih granular, atur `CLAUDE_CODE_DEBUG_LOG_LEVEL=verbose` untuk melihat baris log tambahan seperti jumlah matcher hook dan pencocokan query.

4461 4488 

4462Untuk troubleshooting masalah umum seperti hooks tidak dijalankan, Stop hooks yang terus memblokir, atau kesalahan konfigurasi, lihat [Limitations and troubleshooting](/docs/id/hooks-guide#limitations-and-troubleshooting) dalam panduan. Untuk panduan diagnostik yang lebih luas mencakup `/context`, `/doctor`, dan precedence pengaturan, lihat [Debug your config](/docs/id/debug-your-config).4489Untuk troubleshooting masalah umum seperti hooks tidak dijalankan, Stop hooks yang terus memblokir, atau kesalahan konfigurasi, lihat [Limitations and troubleshooting](/docs/id/hooks-guide#limitations-and-troubleshooting) dalam panduan. Untuk panduan diagnostik yang lebih luas mencakup `/context`, `/doctor`, dan precedence pengaturan, lihat [Debug your config](/docs/id/debug-your-config).

hooks-guide.md +15 −7

Details

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 prompt izin interaktif. Aturan deny dan ask, termasuk daftar deny yang dikelola perusahaan, masih berlaku, seperti juga prompt untuk MCP tools yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool) dan untuk connector tools 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 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 Code

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

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

670 670 


1015 1015 

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

1017 1017 

1018Kebalikannya tidak benar: hook yang mengembalikan `"allow"` tidak melewati aturan deny dari pengaturan, dan tidak dapat menekan prompt untuk alat MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool) atau untuk alat konektor [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.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.

1019 1019 

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

1021 1021 


1083 1083 

1084Hook Anda mencetak JSON yang valid, tetapi keputusan tidak berlaku dan tidak ada kesalahan yang muncul dalam transkrip. Periksa penyebab mana yang berlaku:1084Hook Anda mencetak JSON yang valid, tetapi keputusan tidak berlaku dan tidak ada kesalahan yang muncul dalam transkrip. Periksa penyebab mana yang berlaku:

1085 1085 

1086* **Output tambahan sebelum JSON**: sesuatu yang lain menulis ke stdout terlebih dahulu, biasanya `echo` tanpa syarat dalam profil shell Anda, sehingga output tidak lagi dimulai dengan `{` dan Claude Code tidak menguraikannya sebagai JSON. Penyebab dan perbaikan mengikuti daftar ini.1086* **Output tambahan sebelum JSON**: sesuatu yang lain menulis ke stdout terlebih dahulu, biasanya `echo` tanpa syarat dalam profil shell Anda, sehingga output tidak lagi dimulai dengan `{`. Lihat [Output profil shell sebelum JSON](#shell-profile-output-before-the-json).

1087* **Bidang di level yang salah**: bandingkan penempatan setiap bidang terhadap format [JSON output](/docs/id/hooks#json-output). Misalnya, `permissionDecision` milik di dalam `hookSpecificOutput`, bukan di level atas.1087* **Bidang di level yang salah**: bandingkan penempatan setiap bidang terhadap format [JSON output](/docs/id/hooks#json-output). Misalnya, `permissionDecision` berada di dalam `hookSpecificOutput`, bukan di level atas. Lihat [Bidang di level yang salah](#fields-at-the-wrong-level).

1088 1088 

1089Ketika Claude Code menjalankan hook perintah bentuk shell, satu tanpa `args`, ia menelurkan `sh -c` pada macOS dan Linux, Git Bash pada Windows, atau PowerShell ketika Git Bash tidak diinstal secara default. Shell ini non-interaktif, tetapi Git Bash dan beberapa konfigurasi, seperti `BASH_ENV` menunjuk ke `~/.bashrc`, masih bersumber dari profil Anda. Jika profil itu berisi pernyataan `echo` tanpa syarat, output itu ditambahkan ke JSON hook Anda:1089<h4 id="shell-profile-output-before-the-json">

1090 Output profil shell sebelum JSON

1091</h4>

1092 

1093Hooks berjalan di shell non-interaktif, tetapi Git Bash dan beberapa konfigurasi, seperti `BASH_ENV` yang menunjuk ke `~/.bashrc`, masih memuat profil Anda, dan apa pun yang dicetak profil tersebut mencapai stdout sebelum JSON hook Anda:

1090 1094 

1091```text theme={null}1095```text theme={null}

1092Shell ready on arm641096Shell ready on arm64

1093{"decision": "block", "reason": "Not allowed"}1097{"decision": "block", "reason": "Not allowed"}

1094```1098```

1095 1099 

1096Output gabungan tidak lagi dimulai dengan `{`, jadi Claude Code memperlakukan semua stdout sebagai teks biasa dan mengabaikan JSON. Pada exit 0 tidak ada yang dilaporkan dalam transkrip; upaya parsing hanya dicatat dalam [debug log](/docs/id/hooks#debug-hooks). Untuk memperbaiki ini, bungkus pernyataan echo dalam profil shell Anda sehingga hanya berjalan di shell interaktif:1100Kecuali hook bersifat [async](/docs/id/hooks#how-async-hooks-execute), Claude Code membaca output yang tidak dimulai dengan `{` sebagai teks biasa, sehingga JSON Anda diabaikan. Karena hook keluar dengan 0, transkrip juga tidak menampilkan kesalahan. Untuk memeriksa penyebab ini, mulai Claude Code dengan `claude --debug`, picu hook, dan cari `Hook output does not start with {` dalam [debug log](/docs/id/hooks#debug-hooks). Untuk memperbaikinya, bungkus pernyataan `echo` dalam profil Anda sehingga hanya berjalan di shell interaktif:

1097 1101 

1098```bash theme={null}1102```bash theme={null}

1099# In ~/.zshrc or ~/.bashrc1103# In ~/.zshrc or ~/.bashrc


1104 1108 

1105Variabel `$-` berisi flag shell, dan `i` berarti interaktif. Hooks berjalan di shell non-interaktif, jadi echo dilewati.1109Variabel `$-` berisi flag shell, dan `i` berarti interaktif. Hooks berjalan di shell non-interaktif, jadi echo dilewati.

1106 1110 

1111<h4 id="fields-at-the-wrong-level">

1112 Bidang di level yang salah

1113</h4>

1114 

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

1108 1116 

1109<h3 id="check-what-a-hook-did">1117<h3 id="check-what-a-hook-did">


1119 1127 

1120Untuk mencari hasil untuk exit code dan stdout tertentu, termasuk pengecualian per-acara, lihat [Exit code output](/docs/id/hooks#exit-code-output) dalam referensi.1128Untuk mencari hasil untuk exit code dan stdout tertentu, termasuk pengecualian per-acara, lihat [Exit code output](/docs/id/hooks#exit-code-output) dalam referensi.

1121 1129 

1122Untuk detail eksekusi lengkap termasuk kode keluar hook, stdout, dan stderr, baca debug log. Mulai Claude Code dengan `claude --debug-file /tmp/claude.log` untuk menulis ke jalur yang diketahui, kemudian `tail -f /tmp/claude.log` di terminal lain. Jika Anda memulai tanpa flag itu, jalankan `/debug` di tengah sesi untuk mengaktifkan logging dan temukan jalur log.1130Untuk detail eksekusi lengkap, termasuk kode keluar hook, stdout, dan stderr, baca [debug log](/docs/id/hooks#debug-hooks). Mulai Claude Code dengan `claude --debug-file /tmp/claude.log` untuk menulis ke jalur yang diketahui, kemudian `tail -f /tmp/claude.log` di terminal lain. Jika Anda memulai tanpa flag itu, jalankan `/debug` di tengah sesi untuk mengaktifkan logging dan temukan jalur log.

1123 1131 

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

1125 Pelajari lebih lanjut1133 Pelajari lebih lanjut

Details

22 22 

23| Pintasan | Deskripsi | Konteks |23| Pintasan | Deskripsi | Konteks |

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

25| `Ctrl+C` | Interupsi, atau hapus input | Menghentikan operasi yang sedang berjalan. Jika tidak ada yang berjalan, tekan pertama menghapus input prompt dan tekan kedua keluar dari Claude Code |25| `Ctrl+C` | Interupsi, atau hapus input | Menghentikan operasi yang sedang berjalan. Jika tidak ada yang berjalan, tekan pertama menghapus input prompt dan tekan kedua keluar dari Claude Code. Tekan `Up` saat prompt masih kosong untuk mengembalikan draf yang dihapus, yang memerlukan Claude Code v2.1.288 atau yang lebih baru |

26| `Ctrl+X Ctrl+K` | Hentikan semua [subagent latar belakang](/docs/id/sub-agents#run-subagents-in-foreground-or-background) yang berjalan dalam sesi ini, dan matikan [balasan otomatis artifact](/docs/id/artifacts#let-claude-reply-to-comments-on-its-own) untuk sisa sesi tersebut. Tekan dua kali dalam 3 detik untuk mengonfirmasi. Anda dapat menekannya saat permintaan izin subagent latar belakang sedang terbuka | Kontrol subagent |26| `Ctrl+X Ctrl+K` | Hentikan semua [subagent latar belakang](/docs/id/sub-agents#run-subagents-in-foreground-or-background) yang berjalan dalam sesi ini, dan matikan [balasan otomatis artifact](/docs/id/artifacts#let-claude-reply-to-comments-on-its-own) untuk sisa sesi tersebut. Tekan dua kali dalam 3 detik untuk mengonfirmasi. Anda dapat menekannya saat permintaan izin subagent latar belakang sedang terbuka | Kontrol subagent |

27| `Ctrl+D` | Keluar dari sesi Claude Code | Tekan pertama menampilkan petunjuk konfirmasi dan tekan kedua dalam 800ms keluar. Ketika prompt memiliki teks, `Ctrl+D` menghapus karakter setelah kursor |27| `Ctrl+D` | Keluar dari sesi Claude Code | Tekan pertama menampilkan petunjuk konfirmasi dan tekan kedua dalam 800ms keluar. Ketika prompt memiliki teks, `Ctrl+D` menghapus karakter setelah kursor |

28| `Ctrl+G` atau `Ctrl+X Ctrl+E` | Buka di editor teks default | Edit prompt atau respons kustom Anda di editor teks default Anda. `Ctrl+X Ctrl+E` adalah binding readline asli. Aktifkan **Tampilkan respons terakhir di editor eksternal** di `/config` untuk menambahkan balasan sebelumnya Claude sebagai konteks berkomentar `#` di atas prompt Anda; Claude Code menghapus blok komentar saat Anda menyimpan |28| `Ctrl+G` atau `Ctrl+X Ctrl+E` | Buka di editor teks default | Edit prompt atau respons kustom Anda di editor teks default Anda. `Ctrl+X Ctrl+E` adalah binding readline asli. Aktifkan **Tampilkan respons terakhir di editor eksternal** di `/config` untuk menambahkan balasan sebelumnya Claude sebagai konteks berkomentar `#` di atas prompt Anda; Claude Code menghapus blok komentar saat Anda menyimpan |


442 442 

443Claude Code mengambil kembali perintah shell yang antri hanya ketika kotak input kosong dan Anda tidak memiliki apa pun yang antri, dan beralih kotak input ke mode shell saat melakukannya. Jika tidak, Claude Code membiarkannya tetap dalam antrian, terdaftar dengan awalan `!` mereka, dan menjalankannya setelah giliran berakhir.443Claude Code mengambil kembali perintah shell yang antri hanya ketika kotak input kosong dan Anda tidak memiliki apa pun yang antri, dan beralih kotak input ke mode shell saat melakukannya. Jika tidak, Claude Code membiarkannya tetap dalam antrian, terdaftar dengan awalan `!` mereka, dan menjalankannya setelah giliran berakhir.

444 444 

445Jika Anda mengambil kembali teks yang antri saat `←` [menunggu untuk memindahkan sesi ke latar belakang](/docs/id/agent-view#switch-sessions-without-leaving-the-terminal), teks tetap berada di kotak input dan Claude Code membatalkan peralihan tersebut. Jika Anda mengambilnya kembali tepat pada saat sesi berpindah, teks menghilang bersama layar latar depan: teks tersebut tidak terkirim. Setiap pesan yang Anda ambil kembali disimpan sebagai entri tersendiri di [riwayat perintah](#command-history). Untuk memulihkannya, buka kembali sesi dan tekan `Up` pada prompt yang kosong tanpa ada apa pun yang antri.

446 

445<h2 id="prompt-suggestions">447<h2 id="prompt-suggestions">

446 Saran prompt448 Saran prompt

447</h2>449</h2>

Details

299 299 

300[Claude Code di Slack](/docs/id/slack) dan [sesi cloud](/docs/id/claude-code-on-the-web) bukan bagian dari deployment gateway. Variabel gateway yang diatur dalam konfigurasi lingkungan sesi cloud tidak diterapkan. Jika lalu lintas Anda harus tetap di gateway, jangan aktifkan surface ini untuk pengguna tersebut.300[Claude Code di Slack](/docs/id/slack) dan [sesi cloud](/docs/id/claude-code-on-the-web) bukan bagian dari deployment gateway. Variabel gateway yang diatur dalam konfigurasi lingkungan sesi cloud tidak diterapkan. Jika lalu lintas Anda harus tetap di gateway, jangan aktifkan surface ini untuk pengguna tersebut.

301 301 

302[Remote Control](/docs/id/remote-control) dan [voice dictation](/docs/id/voice-dictation) keduanya mengandalkan identitas claude.ai: Remote Control untuk memasangkan sesi langsung dengan akun Anda, dan voice dictation untuk menjangkau titik akhir transkripsi claude.ai. Mereka tidak tersedia sementara `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, atau `apiKeyHelper` aktif. Remote Control juga dinonaktifkan sementara `ANTHROPIC_BASE_URL` menunjuk ke host non-Anthropic, jadi masuk dengan claude.ai saja tidak cukup. Sebelum v2.1.196, URL dasar non-Anthropic tidak memblokir Remote Control.302[Remote Control](/docs/id/remote-control) dan [voice dictation](/docs/id/voice-dictation) keduanya mengandalkan identitas claude.ai: Remote Control untuk memasangkan sesi langsung dengan akun Anda, dan voice dictation untuk menjangkau endpoint transkripsi claude.ai. Keduanya tidak tersedia selama `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, atau `apiKeyHelper` aktif. Remote Control juga dinonaktifkan selama `ANTHROPIC_BASE_URL` menunjuk ke host non-Anthropic, jadi masuk dengan claude.ai saja tidak cukup.

303 303 

304Untuk mengembalikan salah satu fitur, masuk dengan claude.ai dan batalkan pengaturan variabel gateway yang diperiksa fitur tersebut. Bagian Remote Control dari `claude doctor` menamai apa yang saat ini memblokir Remote Control.304Untuk mengembalikan salah satu fitur, masuk dengan claude.ai dan batalkan pengaturan variabel gateway yang diperiksa fitur tersebut. Bagian Remote Control dari `claude doctor` menamai apa yang saat ini memblokir Remote Control.

305 305 

mcp.md +3 −3

Details

283 Persetujuan server proyek dan kepercayaan workspace283 Persetujuan server proyek dan kepercayaan workspace

284</h4>284</h4>

285 285 

286Sejak v2.1.196, `claude mcp list` dan `claude mcp get` membaca persetujuan `.mcp.json` hanya dari file pengaturan yang tidak dimasukkan ke dalam repositori sampai Anda mempercayai workspace dengan menjalankan `claude` di dalamnya dan menerima dialog kepercayaan workspace. Repositori yang diklon tidak dapat menyetujui server miliknya sendiri: [`enableAllProjectMcpServers`](/docs/id/settings-reference#enableallprojectmcpservers) atau [`enabledMcpjsonServers`](/docs/id/settings-reference#enabledmcpjsonservers) yang di-commit ke `.claude/settings.json` proyek diabaikan di folder yang tidak dipercaya, dan server tetap di `⏸ Pending approval` alih-alih terhubung dan diperiksa kesehatannya.286`claude mcp list` dan `claude mcp get` membaca persetujuan `.mcp.json` hanya dari file pengaturan yang tidak dimasukkan ke dalam repositori sampai Anda mempercayai workspace dengan menjalankan `claude` di dalamnya dan menerima dialog kepercayaan workspace. Repositori yang diklon tidak dapat menyetujui server miliknya sendiri: [`enableAllProjectMcpServers`](/docs/id/settings-reference#enableallprojectmcpservers) atau [`enabledMcpjsonServers`](/docs/id/settings-reference#enabledmcpjsonservers) yang di-commit ke `.claude/settings.json` proyek diabaikan di folder yang tidak dipercaya, dan server tetap di `⏸ Pending approval` alih-alih terhubung dan diperiksa kesehatannya.

287 287 

288Persetujuan dari sumber ini masih berlaku di folder yang tidak dipercaya:288Persetujuan dari sumber ini masih berlaku di folder yang tidak dipercaya:

289 289 


859 859 

860Pemberitahuan mengumumkan setiap server sekali dan mengeluarkannya dari hitungan di peluncuran berikutnya sampai server itu telah terhubung dan memerlukan masuk lagi. `/mcp` masih mencantumkan setiap server yang memerlukan masuk.860Pemberitahuan mengumumkan setiap server sekali dan mengeluarkannya dari hitungan di peluncuran berikutnya sampai server itu telah terhubung dan memerlukan masuk lagi. `/mcp` masih mencantumkan setiap server yang memerlukan masuk.

861 861 

862Dalam mode non-interaktif tidak ada panel `/mcp`, jadi Claude Code tidak dapat menjalankan alur OAuth untuk Anda. Mulai dari v2.1.196, ketika server yang dikonfigurasi memerlukan autentikasi selama `claude -p` atau jalankan Agent SDK dengan [pencarian alat](#scale-with-mcp-tool-search) diaktifkan, yang merupakan default, Claude Code memberi tahu Claude bahwa alat server tidak tersedia sampai Anda mengotorisasinya. Claude kemudian dapat menyebutkan server yang memerlukan masuk daripada merespons seolah-olah server tidak dikonfigurasi. Selesaikan masuk dari sesi interaktif dengan `/mcp` atau `claude mcp login <name>`.862Dalam mode non-interaktif tidak ada panel `/mcp`, jadi Claude Code tidak dapat menjalankan alur OAuth untuk Anda. Ketika server yang dikonfigurasi memerlukan autentikasi selama `claude -p` atau jalankan Agent SDK dengan [pencarian tool](#scale-with-mcp-tool-search) diaktifkan, yang merupakan default, Claude Code memberi tahu Claude bahwa tool server tidak tersedia sampai Anda mengotorisasinya. Claude kemudian dapat menyebutkan server yang memerlukan masuk. Selesaikan masuk dari sesi interaktif dengan `/mcp` atau `claude mcp login <name>`.

863 863 

864Jika Anda mengonfigurasi `headers.Authorization` untuk server dan server menolak header itu, Claude Code melaporkan koneksi sebagai gagal daripada kembali ke OAuth. Periksa bahwa token valid untuk titik akhir MCP, atau hapus header untuk menggunakan alur OAuth.864Jika Anda mengonfigurasi `headers.Authorization` untuk server dan server menolak header itu, Claude Code melaporkan koneksi sebagai gagal daripada kembali ke OAuth. Periksa bahwa token valid untuk titik akhir MCP, atau hapus header untuk menggunakan alur OAuth.

865 865 


1048 1048 

1049`oauth.scopes` mengambil prioritas atas `authServerMetadataUrl` dan cakupan yang ditemukan server di `/.well-known`. Biarkan tidak diatur untuk membiarkan server MCP menentukan set cakupan yang diminta.1049`oauth.scopes` mengambil prioritas atas `authServerMetadataUrl` dan cakupan yang ditemukan server di `/.well-known`. Biarkan tidak diatur untuk membiarkan server MCP menentukan set cakupan yang diminta.

1050 1050 

1051Mulai dari v2.1.196, ketika `oauth.scopes` tidak diatur, Claude Code meminta cakupan yang disediakan oleh header `WWW-Authenticate` server atau metadata sumber daya terlindungnya, dan mengirim tidak ada parameter `scope` ketika tidak ada yang menyediakannya. Ini tidak lagi meminta katalog `scopes_supported` lengkap dari metadata server otorisasi yang ditemukan secara otomatis. Meminta katalog itu membuat penyedia identitas yang mengiklankan cakupan khusus admin atau template menolak permintaan otorisasi dengan kesalahan `invalid_scope`. Metadata yang diambil dari `authServerMetadataUrl` yang dikonfigurasi masih menyediakan `scopes_supported` sebagai cakupan yang diminta.1051Ketika `oauth.scopes` tidak diatur, Claude Code tidak meminta katalog `scopes_supported` lengkap dari metadata server otorisasi yang ditemukan secara otomatis. Metadata yang diambil dari `authServerMetadataUrl` yang dikonfigurasi masih menyediakan `scopes_supported`-nya sebagai scope yang diminta.

1052 1052 

1053Jika server otorisasi mengiklankan `offline_access` di `scopes_supported`, Claude Code menambahkannya ke cakupan yang disematkan sehingga token akses dapat disegarkan tanpa masuk browser baru.1053Jika server otorisasi mengiklankan `offline_access` di `scopes_supported`, Claude Code menambahkannya ke cakupan yang disematkan sehingga token akses dapat disegarkan tanpa masuk browser baru.

1054 1054 

Details

470 Membungkus nilai dalam tanda kutip tidak menghindari spasi. Misalnya, `org.name="My Company"` menghasilkan nilai literal `"My Company"` dengan tanda kutip disertakan, bukan `My Company`.470 Membungkus nilai dalam tanda kutip tidak menghindari spasi. Misalnya, `org.name="My Company"` menghasilkan nilai literal `"My Company"` dengan tanda kutip disertakan, bukan `My Company`.

471</Warning>471</Warning>

472 472 

473<h3 id="attribute-telemetry-to-desktop-ssh-sessions">

474 Atribusikan telemetri ke sesi SSH Desktop

475</h3>

476 

477Untuk melihat di mesin jarak jauh mana sebuah [sesi SSH Desktop](/docs/id/desktop#ssh-sessions) berjalan, beri nama setiap mesin dalam atribut kustom. Metrik dan event tidak menyebutkan mesin tempat sebuah sesi berjalan.

478 

479Di setiap mesin jarak jauh, tambahkan [`OTEL_RESOURCE_ATTRIBUTES`](#multi-team-organization-support) ke blok `env` yang mengaktifkan telemetri, dalam [file pengaturan terkelola yang dibaca sesi](/docs/id/desktop#managed-settings). Tuliskan namanya secara eksplisit di file setiap mesin. Claude Code tidak mengekspansi nilai tersebut, sehingga `host.name=$(hostname)` tiba sebagai karakter-karakter itu apa adanya.

480 

481Contoh berikut menamai mesin `build-7`:

482 

483```json theme={null}

484{

485 "env": {

486 "CLAUDE_CODE_ENABLE_TELEMETRY": "1",

487 "OTEL_METRICS_EXPORTER": "otlp",

488 "OTEL_LOGS_EXPORTER": "otlp",

489 "OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",

490 "OTEL_EXPORTER_OTLP_ENDPOINT": "http://collector.example.com:4317",

491 "OTEL_RESOURCE_ATTRIBUTES": "host.name=build-7"

492 }

493}

494```

495 

496Ketika tidak ada hal lain yang menetapkan variabel tersebut, `host.name` tiba di blok sumber daya, dalam sesi SSH Desktop dan di CLI pada mesin tersebut. Untuk tempat lain atribut kustom muncul, lihat [Dukungan organisasi multi-tim](#multi-team-organization-support).

497 

498Jika nama tersebut tidak tiba, periksa salah satu penyebab berikut:

499 

500* **Anda menetapkannya di komputer yang menjalankan Desktop**: Desktop tidak meneruskan nilai yang Anda tetapkan di sana ke sesi SSH

501* **Anda mengekspornya di file login**: hanya login shell yang membaca file seperti `/etc/profile`. Nilai yang Anda `export` di sana mencapai Claude Code yang Anda mulai dari login shell. Nilai tersebut tidak mencapai sesi SSH Desktop, karena Desktop tidak memulai Claude Code melalui login shell.

502* **Sebuah nilai mengandung spasi**: Claude Code kemudian tidak menyalin satu pun kunci ke event atau titik data dan tidak melaporkan error. [Hapus spasi dari nilai tersebut](#multi-team-organization-support).

503* **Sesuatu yang lain sudah menetapkan variabel tersebut**: dalam sesi yang dimulai oleh aplikasi desktop, variabel yang sudah ditetapkan di lingkungan peluncuran [diutamakan daripada file pengaturan](/docs/id/settings-reference#how-env-values-interact-with-your-shell). [Log debug](/docs/id/debug-your-config) menyebutkan setiap variabel yang diabaikan. Ketika deployment Desktop pihak ketiga [menyebutkan endpoint OTLP](#how-managed-settings-lock-the-otlp-destination) dalam lingkungan yang disediakannya, lingkungan tersebut membawa `OTEL_RESOURCE_ATTRIBUTES` milik Desktop sendiri.

504 

473<h3 id="example-configurations">505<h3 id="example-configurations">

474 Konfigurasi contoh506 Konfigurasi contoh

475</h3>507</h3>


1746 1778 

1747Semua metrik dan acara diekspor dengan atribut sumber daya berikut:1779Semua metrik dan acara diekspor dengan atribut sumber daya berikut:

1748 1780 

1749* `service.name`: `claude-code` untuk sesi terminal, `claude-code-desktop` untuk sesi yang dimulai dari tab Code di [aplikasi Claude Desktop](/docs/id/desktop)1781* `service.name`: `claude-code` untuk sesi terminal, `claude-code-desktop` untuk sesi lokal yang dimulai dari tab Code di [aplikasi Claude Desktop](/docs/id/desktop)

1750* `service.version`: Versi Claude Code saat ini, atau versi aplikasi Desktop untuk sesi tab Code1782* `service.version`: Versi Claude Code saat ini, atau versi aplikasi Desktop untuk sesi lokal tab Code

1751* `os.type`: Jenis sistem operasi (misalnya, `linux`, `darwin`, `windows`)1783* `os.type`: Jenis sistem operasi (misalnya, `linux`, `darwin`, `windows`)

1752* `os.version`: String versi sistem operasi1784* `os.version`: String versi sistem operasi

1753* `host.arch`: Arsitektur host (misalnya, `amd64`, `arm64`)1785* `host.arch`: Arsitektur host (misalnya, `amd64`, `arm64`)

1754* `wsl.version`: Nomor versi WSL (hanya ada saat berjalan di Windows Subsystem for Linux)1786* `wsl.version`: Nomor versi WSL (hanya ada saat berjalan di Windows Subsystem for Linux)

1755* Nama Meter: `com.anthropic.claude_code`1787* Nama Meter: `com.anthropic.claude_code`

1756 1788 

1757Jika pipeline pengumpul atau dasbor Anda memfilter pada `service.name = claude-code`, tambahkan `claude-code-desktop` ke filter untuk juga menangkap telemetri dari sesi tab Code.1789Jika pipeline pengumpul atau dasbor Anda memfilter pada `service.name = claude-code`, tambahkan `claude-code-desktop` ke filter untuk juga menangkap telemetri dari sesi lokal tab Code.

1758 1790 

1759<h2 id="roi-measurement-resources">1791<h2 id="roi-measurement-resources">

1760 Sumber daya pengukuran ROI1792 Sumber daya pengukuran ROI

Details

183 Atur variabel jaringan dalam pengaturan, bukan shell183 Atur variabel jaringan dalam pengaturan, bukan shell

184</h3>184</h3>

185 185 

186Supervisor adalah satu proses yang dibagikan oleh setiap terminal. Supervisor mewarisi lingkungan dari shell mana pun yang memulainya terlebih dahulu, dan supervisor yang diinstal OS tidak menerima lingkungan shell sama sekali. Jika Anda mengekspor proxy, jalur CA, atau variabel mTLS hanya di shell Anda, variabel tersebut mencapai agen latar belakang ketika shell itu kebetulan cold-start supervisor, dan diam-diam tidak mencapai ketika shell yang berbeda melakukannya.186Supervisor adalah satu proses yang dibagikan oleh setiap terminal. Supervisor mewarisi lingkungan dari shell mana pun yang memulainya terlebih dahulu. Jika Anda mengekspor proxy, jalur CA, atau variabel mTLS hanya di shell Anda, variabel tersebut mencapai agent latar belakang ketika shell itu kebetulan melakukan cold-start supervisor, dan diam-diam tidak mencapainya ketika shell yang berbeda yang melakukannya.

187 187 

188Letakkan variabel yang sama dalam blok `env` dari `~/.claude/settings.json` atau [pengaturan terkelola](/docs/id/settings) sebagai gantinya. Setiap variabel di halaman ini dapat diatur di sana, dan pengaturan adalah satu-satunya konfigurasi yang mencapai setiap sesi latar belakang di setiap mesin.188Letakkan variabel yang sama dalam blok `env` dari `~/.claude/settings.json` atau [pengaturan terkelola](/docs/id/settings) sebagai gantinya. Setiap variabel di halaman ini dapat diatur di sana, dan pengaturan adalah satu-satunya konfigurasi yang mencapai setiap sesi latar belakang di setiap mesin.

189 189 


196Atur pengaturan [`processWrapper`](/docs/id/settings-reference#processwrapper) untuk menambahkan awalan supervisor, pekerja-pekerjanya, dan proses latar belakang lainnya yang tercantum di bawah [Apa yang dicakup peluncur](/docs/id/corporate-launcher#what-the-launcher-covers) dengan peluncur Anda. Variabel lingkungan [`CLAUDE_CODE_PROCESS_WRAPPER`](/docs/id/env-vars) yang setara mengambil prioritas ketika keduanya diatur, dan variabel tersebut tunduk pada aturan yang sama: berikan melalui pengaturan terkelola atau `~/.claude/settings.json`, bukan ekspor shell. [Jalankan Claude Code di balik peluncur perusahaan](/docs/id/corporate-launcher) mencakup kontrak yang harus dipenuhi peluncur, apa yang dilakukan dan tidak dilakukan, dan cara menerapkannya.196Atur pengaturan [`processWrapper`](/docs/id/settings-reference#processwrapper) untuk menambahkan awalan supervisor, pekerja-pekerjanya, dan proses latar belakang lainnya yang tercantum di bawah [Apa yang dicakup peluncur](/docs/id/corporate-launcher#what-the-launcher-covers) dengan peluncur Anda. Variabel lingkungan [`CLAUDE_CODE_PROCESS_WRAPPER`](/docs/id/env-vars) yang setara mengambil prioritas ketika keduanya diatur, dan variabel tersebut tunduk pada aturan yang sama: berikan melalui pengaturan terkelola atau `~/.claude/settings.json`, bukan ekspor shell. [Jalankan Claude Code di balik peluncur perusahaan](/docs/id/corporate-launcher) mencakup kontrak yang harus dipenuhi peluncur, apa yang dilakukan dan tidak dilakukan, dan cara menerapkannya.

197 197 

198<Note>198<Note>

199 Supervisor yang sudah berjalan menyimpan konfigurasi peluncuran yang dimulainya. Setelah menerapkan pengaturan peluncur, jalankan [`claude daemon stop --any`](/docs/id/agent-view#the-supervisor-process) sehingga `claude agents` atau `--bg` berikutnya memulai supervisor yang menghormatinya. Layanan yang diinstal memerlukan `claude daemon stop` tanpa `--any`.199 Supervisor yang sudah berjalan menyimpan konfigurasi peluncuran yang dimulainya. Setelah menerapkan pengaturan peluncur, jalankan [`claude daemon stop --any`](/docs/id/agent-view#the-supervisor-process) sehingga `claude agents` atau `--bg` berikutnya memulai supervisor yang menghormatinya.

200</Note>200</Note>

201 201 

202<h2 id="streaming-idle-watchdogs">202<h2 id="streaming-idle-watchdogs">

Details

22| [`acceptEdits`](#auto-approve-file-edits-with-acceptedits-mode) | Membaca, pengeditan file, dan perintah sistem file umum (`mkdir`, `touch`, `mv`, `cp`, dll.) | Iterasi pada kode yang Anda tinjau |22| [`acceptEdits`](#auto-approve-file-edits-with-acceptedits-mode) | Membaca, pengeditan file, dan perintah sistem file umum (`mkdir`, `touch`, `mv`, `cp`, dll.) | Iterasi pada kode yang Anda tinjau |

23| [`plan`](#analyze-before-you-edit-with-plan-mode) | Membaca, plus perintah yang disetujui pengklasifikasi ketika [mode auto](#eliminate-prompts-with-auto-mode) tersedia | Menjelajahi basis kode sebelum mengubahnya |23| [`plan`](#analyze-before-you-edit-with-plan-mode) | Membaca, plus perintah yang disetujui pengklasifikasi ketika [mode auto](#eliminate-prompts-with-auto-mode) tersedia | Menjelajahi basis kode sebelum mengubahnya |

24| [`auto`](#eliminate-prompts-with-auto-mode) | Segalanya, dengan pemeriksaan keamanan latar belakang | Tugas panjang, mengurangi kelelahan prompt |24| [`auto`](#eliminate-prompts-with-auto-mode) | Segalanya, dengan pemeriksaan keamanan latar belakang | Tugas panjang, mengurangi kelelahan prompt |

25| [`dontAsk`](#allow-only-pre-approved-tools-with-dontask-mode) | Membaca dan alat yang telah disetujui sebelumnya; apa pun yang akan meminta izin ditolak | CI dan skrip terkunci |25| [`dontAsk`](#allow-only-pre-approved-tools-with-dontask-mode) | Pembacaan file di dalam direktori kerja Anda dan alat yang telah disetujui sebelumnya; apa pun yang akan meminta izin ditolak | CI dan skrip terkunci |

26| [`bypassPermissions`](#skip-all-checks-with-bypasspermissions-mode) | Segalanya | Hanya kontainer dan VM terisolasi |26| [`bypassPermissions`](#skip-all-checks-with-bypasspermissions-mode) | Segalanya | Hanya kontainer dan VM terisolasi |

27 27 

28Mode yang meninjau setiap tindakan dinamai **Manual** di CLI, di `claude --help`, di ekstensi VS Code dan JetBrains, dan di aplikasi desktop. Nilai konfignya adalah `default`, yang digunakan oleh hook dan integrasi SDK. CLI menerima `manual` sebagai alias di mana pun Anda mengetik nilainya, misalnya `claude --permission-mode manual` atau `"defaultMode": "manual"`.28Mode yang meninjau setiap tindakan dinamai **Manual** di CLI, di `claude --help`, di ekstensi VS Code dan JetBrains, dan di aplikasi desktop. Nilai konfignya adalah `default`, yang digunakan oleh hook dan integrasi SDK. CLI menerima `manual` sebagai alias di mana pun Anda mengetik nilainya, misalnya `claude --permission-mode manual` atau `"defaultMode": "manual"`.


466 Pembacaan pertama di luar direktori kerja466 Pembacaan pertama di luar direktori kerja

467</h3>467</h3>

468 468 

469Selama [`permissions.blockReadsOutsideWorkingDirectories`](/docs/id/settings-reference#permissions-blockreadsoutsideworkingdirectories) nonaktif, pembacaan file berjalan tanpa permintaan izin dalam auto mode, termasuk pembacaan di luar [direktori kerja](/docs/id/permissions#working-directories). Pertama kali Claude menggunakan tool Read, Grep, atau Glob pada jalur di luar direktori tersebut, Claude Code menanyakan apakah pembacaan itu diizinkan.469Selama [`permissions.blockReadsOutsideWorkingDirectories`](/docs/id/settings-reference#permissions-blockreadsoutsideworkingdirectories) nonaktif, pembacaan file selain [pembacaan dari jalur jaringan](/docs/id/permissions#network-paths) berjalan tanpa permintaan izin dalam auto mode, termasuk pembacaan di luar [direktori kerja](/docs/id/permissions#working-directories). Pertama kali Claude menggunakan tool Read, Grep, atau Glob pada jalur di luar direktori tersebut, Claude Code menanyakan apakah pembacaan itu diizinkan.

470 470 

471Permintaan izin ini tidak muncul dalam eksekusi `-p` non-interaktif atau sesi latar belakang; pembacaan di sana berjalan seperti sebelumnya.471Permintaan izin ini tidak muncul dalam eksekusi `-p` non-interaktif atau sesi latar belakang; pembacaan di sana berjalan seperti sebelumnya.

472 472 


530 Setiap tindakan melalui urutan keputusan yang tetap. Langkah pertama yang cocok yang menentukan:530 Setiap tindakan melalui urutan keputusan yang tetap. Langkah pertama yang cocok yang menentukan:

531 531 

532 1. Tindakan yang cocok dengan [aturan allow, ask, atau deny](/docs/id/permissions#manage-permissions) Anda langsung diselesaikan, dengan pengecualian berikut:532 1. Tindakan yang cocok dengan [aturan allow, ask, atau deny](/docs/id/permissions#manage-permissions) Anda langsung diselesaikan, dengan pengecualian berikut:

533 * Penulisan ke [jalur yang dilindungi](#protected-paths) diarahkan ke pengklasifikasi bahkan ketika aturan allow cocok533 * Penulisan ke [jalur yang dilindungi](#protected-paths) diarahkan ke pengklasifikasi bahkan ketika aturan allow cocok. Ketika jalur yang dilindungi adalah file yang dituju oleh file pengaturan berupa symlink, penulisan tersebut dapat meminta persetujuan Anda sebagai gantinya, seperti yang dijelaskan daftar [jalur yang dilindungi](#protected-paths)

534 * Tidak ada aturan allow yang menyetujui penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](#critical-paths)534 * Tidak ada aturan allow yang menyetujui penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](#critical-paths)

535 * Tool MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool) langsung meminta persetujuan Anda bahkan ketika aturan allow cocok, begitu pula tool konektor yang [diatur organisasi Anda ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan itu mencapai Claude Code535 * Tool MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool) langsung meminta persetujuan Anda bahkan ketika aturan allow cocok, begitu pula tool konektor yang [diatur organisasi Anda ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan itu mencapai Claude Code

536 * Perintah shell yang membawa [domain yang diizinkan per perintah](/docs/id/sandboxing#per-command-allowed-domains-in-auto-mode) juga diarahkan ke pengklasifikasi bahkan ketika aturan allow cocok, karena aturan menyetujui perintahnya, bukan host-nya536 * Perintah shell yang membawa [domain yang diizinkan per perintah](/docs/id/sandboxing#per-command-allowed-domains-in-auto-mode) juga diarahkan ke pengklasifikasi bahkan ketika aturan allow cocok, karena aturan menyetujui perintahnya, bukan host-nya

537 * Aturan ask yang mencocokkan konten perintah, seperti `Bash(git push *)`, beralih ke permintaan izin537 * Aturan ask yang mencocokkan konten perintah, seperti `Bash(git push *)`, beralih ke permintaan izin

538 * Penulisan yang di-resolve oleh [pemeriksaan symlink](/docs/id/permissions#symlinks) ke jalur yang dilindungi akan meminta persetujuan Anda ketika jalur yang diminta Claude sendiri tidak dilindungi538 * Penulisan yang di-resolve oleh [pemeriksaan symlink](/docs/id/permissions#symlinks) ke jalur yang dilindungi akan meminta persetujuan Anda ketika jalur yang diminta Claude sendiri tidak dilindungi

539 * Pembacaan dari [jalur jaringan](/docs/id/permissions#network-paths) meminta persetujuan Anda bahkan ketika aturan allow cocok

539 2. Tindakan read-only dan pengeditan file di direktori kerja Anda disetujui otomatis, kecuali penulisan ke [jalur yang dilindungi](#protected-paths) dan [pembacaan pertama di luar direktori kerja](#first-read-outside-the-working-directories), yang meminta persetujuan Anda540 2. Tindakan read-only dan pengeditan file di direktori kerja Anda disetujui otomatis, kecuali penulisan ke [jalur yang dilindungi](#protected-paths) dan [pembacaan pertama di luar direktori kerja](#first-read-outside-the-working-directories), yang meminta persetujuan Anda

540 * Dalam sesi dengan [tinjauan pengklasifikasi di sisi server](#server-side-classifier-review), perintah shell read-only dan yang [di-sandbox](/docs/id/sandboxing#sandbox-modes) menunggu tinjauan itu dan diblokir jika tinjauan menandainya541 * Dalam sesi dengan [tinjauan pengklasifikasi di sisi server](#server-side-classifier-review), perintah shell read-only dan yang [di-sandbox](/docs/id/sandboxing#sandbox-modes) menunggu tinjauan itu dan diblokir jika tinjauan menandainya

541 * Penulisan di dalam direktori kerja Anda yang di-resolve oleh [pemeriksaan symlink](/docs/id/permissions#symlinks) ke lokasi di luarnya akan meminta persetujuan Anda542 * Penulisan di dalam direktori kerja Anda yang di-resolve oleh [pemeriksaan symlink](/docs/id/permissions#symlinks) ke lokasi di luarnya akan meminta persetujuan Anda

542 * Ketika Claude membaca [artifact yang dibuat orang lain](/docs/id/artifacts#read-an-artifact-shared-with-you), kasus persetujuan yang tercantum di bagian tersebut berlaku543 * Ketika Claude membaca [artifact yang dibuat orang lain](/docs/id/artifacts#read-an-artifact-shared-with-you), kasus persetujuan yang tercantum di bagian tersebut berlaku

544 * Pembacaan dari [jalur jaringan](/docs/id/permissions#network-paths) meminta persetujuan Anda

543 3. Semua hal lain dikirim ke pengklasifikasi, kecuali [penghapusan jalur kritis](#critical-paths) dengan penanganan default-nya. Tool konektor dan tool MCP `requiresUserInteraction` yang langsung meminta persetujuan Anda di langkah 1 juga tidak pernah mencapai pengklasifikasi, sehingga baik persetujuan yang diwajibkan organisasi maupun langkah persetujuan tidak disetujui otomatis545 3. Semua hal lain dikirim ke pengklasifikasi, kecuali [penghapusan jalur kritis](#critical-paths) dengan penanganan default-nya. Tool konektor dan tool MCP `requiresUserInteraction` yang langsung meminta persetujuan Anda di langkah 1 juga tidak pernah mencapai pengklasifikasi, sehingga baik persetujuan yang diwajibkan organisasi maupun langkah persetujuan tidak disetujui otomatis

544 4. Jika pengklasifikasi memblokir, Claude menerima alasannya. Dalam sebagian besar sesi, alasan tersebut menyebutkan aturan yang dicocokkan pengklasifikasi, seperti `[Data Exfiltration]`, alih-alih memberikan penjelasan tertulis; lihat [Tinjau penolakan](/docs/id/auto-mode-config#review-denials)546 4. Jika pengklasifikasi memblokir, Claude menerima alasannya. Dalam sebagian besar sesi, alasan tersebut menyebutkan aturan yang dicocokkan pengklasifikasi, seperti `[Data Exfiltration]`, alih-alih memberikan penjelasan tertulis; lihat [Tinjau penolakan](/docs/id/auto-mode-config#review-denials)

545 547 


593 595 

594Claude Code menolak panggilan yang cocok dengan [aturan `ask`](/docs/id/permissions#manage-permissions) eksplisit Anda daripada meminta persetujuan. Ini juga menolak tool `AskUserQuestion` bawaan bahkan jika aturan allow Anda cocok dengannya, dan melakukan hal yang sama untuk tool konektor yang [diatur organisasi Anda ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan itu mencapai Claude Code. Ini menolak tool MCP yang ditandai [`_meta["anthropic/requiresUserInteraction"]`](/docs/id/mcp#require-approval-for-a-specific-tool) dengan cara yang sama, karena kartu persetujuan mereka memerlukan jawaban yang tidak pernah dikumpulkan oleh mode ini.596Claude Code menolak panggilan yang cocok dengan [aturan `ask`](/docs/id/permissions#manage-permissions) eksplisit Anda daripada meminta persetujuan. Ini juga menolak tool `AskUserQuestion` bawaan bahkan jika aturan allow Anda cocok dengannya, dan melakukan hal yang sama untuk tool konektor yang [diatur organisasi Anda ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan itu mencapai Claude Code. Ini menolak tool MCP yang ditandai [`_meta["anthropic/requiresUserInteraction"]`](/docs/id/mcp#require-approval-for-a-specific-tool) dengan cara yang sama, karena kartu persetujuan mereka memerlukan jawaban yang tidak pernah dikumpulkan oleh mode ini.

595 597 

596Penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](#critical-paths), seperti `rm -rf /` dan `rm -rf ~`, ditolak bahkan ketika aturan allow cocok dengannya atau hook `PreToolUse` memungkinkannya.598Penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](#critical-paths), seperti `rm -rf /` dan `rm -rf ~`, ditolak bahkan ketika aturan allow cocok dengannya atau hook `PreToolUse` mengizinkannya. Pembacaan dari [jalur jaringan](/docs/id/permissions#network-paths) ditolak dengan cara yang sama.

597 599 

598Sesi cloud di [Claude Code di web](/docs/id/claude-code-on-the-web) mengabaikan `defaultMode: "dontAsk"`; lihat [bypassPermissions](#skip-all-checks-with-bypasspermissions-mode) untuk detail.600Sesi cloud di [Claude Code di web](/docs/id/claude-code-on-the-web) mengabaikan `defaultMode: "dontAsk"`; lihat [bypassPermissions](#skip-all-checks-with-bypasspermissions-mode) untuk detail.

599 601 


639* **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.641* **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.

640* **Jika Anda menolak**: Claude Code keluar.642* **Jika Anda menolak**: Claude Code keluar.

641 643 

642Dalam [mode non-interaktif](/docs/id/headless) tidak ada dialog yang ditampilkan, dan [sesi latar belakang](/docs/id/agent-view) yang dimulai dengan `--bg` ditolak sampai Anda telah menerima dialog dalam sesi interaktif.644Dalam [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:

645 

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

647* 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.

643 648 

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

645 650 


708* `.devcontainer.json`713* `.devcontainer.json`

709* `.ripgreprc`, `pyrightconfig.json`714* `.ripgreprc`, `pyrightconfig.json`

710* `.mcp.json`, `.claude.json`715* `.mcp.json`, `.claude.json`

716* File yang ditunjuk oleh [file pengaturan](/docs/id/settings#settings-files-and-who-they-affect) pengguna, proyek, atau lokal Anda ketika file pengaturan itu sendiri merupakan tautan simbolis, misalnya ke repositori dotfiles. Dalam mode yang merutekan penulisan jalur yang dilindungi ke pengklasifikasi, penulisan ke file ini meminta Anda sebagai gantinya, bahkan ketika aturan allow cocok. Jika jalur file itu sendiri juga merupakan jalur file pengaturan, seperti `.claude/settings.json` di folder lain, penulisan tersebut dirutekan ke pengklasifikasi seperti penulisan jalur yang dilindungi lainnya

711 717 

712<h2 id="critical-paths">718<h2 id="critical-paths">

713 Jalur kritis719 Jalur kritis


727 733 

728* Akar filesystem734* Akar filesystem

729* Direktori tingkat atas, artinya anak langsung apa pun dari akar, seperti `/usr`, `/etc`, atau `/data`735* Direktori tingkat atas, artinya anak langsung apa pun dari akar, seperti `/usr`, `/etc`, atau `/data`

730* Direktori home Anda736* Direktori home Anda. Di Windows, nama pendek 8.3-nya juga dihitung, seperti `C:\Users\LONGNA~1`

731* Akar drive Windows dan direktori tingkat atas mereka, seperti `C:\` dan `C:\Windows`737* Akar drive Windows dan direktori tingkat atas mereka, seperti `C:\` dan `C:\Windows`. Penulisan seperti `\\?\C:\` dan `\\localhost\C$` dihitung sebagai `C:\`

732* Direktori kerja Anda dan induknya738* Direktori kerja Anda dan induknya

733* Direktori kerja tambahan Anda dan induk mereka, tetapi hanya ketika penghapusan adalah glob di bawah salah satu dari mereka, seperti `rm -rf <dir>/*`. `rm -rf <dir>` pada direktori itu sendiri tidak memicu pemeriksaan ini739* Direktori kerja tambahan Anda dan induk mereka, tetapi hanya ketika penghapusan adalah glob di bawah salah satu dari mereka, seperti `rm -rf <dir>/*`. `rm -rf <dir>` pada direktori itu sendiri tidak memicu pemeriksaan ini

734 740 

741Pemeriksaan pada nama pendek 8.3 direktori home dan pada penulisan `\\?\C:\` dan `\\localhost\C$` memerlukan Claude Code v2.1.292 atau lebih baru.

742 

735<h3 id="other-targets-that-count-as-critical-paths">743<h3 id="other-targets-that-count-as-critical-paths">

736 Target lain yang dihitung sebagai jalur kritis744 Target lain yang dihitung sebagai jalur kritis

737</h3>745</h3>


747| Target yang hanya output dari substitusi perintah, ketika `rm` bersifat rekursif | `rm -rf "$(pwd)"` | Claude Code tidak dapat memeriksa target sebelum perintah berjalan |755| Target yang hanya output dari substitusi perintah, ketika `rm` bersifat rekursif | `rm -rf "$(pwd)"` | Claude Code tidak dapat memeriksa target sebelum perintah berjalan |

748| Substitusi perintah di akhir setelah jalur kritis | `rm -rf ~/$(cmd)` | Claude Code memeriksa jalur yang akan tetap jika substitusi berkembang kosong, di sini direktori home Anda |756| Substitusi perintah di akhir setelah jalur kritis | `rm -rf ~/$(cmd)` | Claude Code memeriksa jalur yang akan tetap jika substitusi berkembang kosong, di sini direktori home Anda |

749| Target yang hanya garis miring terbalik | `rm -rf "\\"` | Git Bash di Windows membaca garis miring terbalik tunggal sebagai akar drive saat ini, jadi pemeriksaan berlaku di setiap platform |757| Target yang hanya garis miring terbalik | `rm -rf "\\"` | Git Bash di Windows membaca garis miring terbalik tunggal sebagai akar drive saat ini, jadi pemeriksaan berlaku di setiap platform |

758| Jalur Windows yang menamai volume dengan GUID alih-alih huruf drive | `rm -rf '\\?\Volume{GUID}\work\build'` | Jalur tersebut tidak menyebutkan drive mana tempatnya berada, sehingga bisa jadi merupakan jalur kritis. Memerlukan Claude Code v2.1.292 atau lebih baru |

750| Beberapa target yang berakhir dengan `/*` atau `/*/` | `rm -rf logs/*/*`, `rm -rf logs/*/`, `cd logs && rm -rf a/*` | Claude Code tidak dapat mengetahui sebelum perintah berjalan direktori mana yang dijangkaunya |759| Beberapa target yang berakhir dengan `/*` atau `/*/` | `rm -rf logs/*/*`, `rm -rf logs/*/`, `cd logs && rm -rf a/*` | Claude Code tidak dapat mengetahui sebelum perintah berjalan direktori mana yang dijangkaunya |

751 760 

752Untuk mematikan pemeriksaan pada target yang hanya output substitusi perintah, atur [`CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT=1`](/docs/id/env-vars#variables) dalam lingkungan yang meluncurkan Claude Code.761Untuk mematikan pemeriksaan pada target yang hanya output substitusi perintah, atur [`CLAUDE_CODE_DISABLE_SUBSTITUTION_RM_PROMPT=1`](/docs/id/env-vars#variables) dalam lingkungan yang meluncurkan Claude Code.

permissions.md +39 −8

Details

36 36 

37Sebelum v2.1.211, Claude Code selalu menyimpan aturan di direktori awal, jadi persetujuan yang diberikan di worktree atau subdirektori tidak berlaku untuk sisa repositori. Aturan yang disimpan versi sebelumnya di subdirektori atau worktree masih berlaku untuk sesi yang dimulai di sana.37Sebelum v2.1.211, Claude Code selalu menyimpan aturan di direktori awal, jadi persetujuan yang diberikan di worktree atau subdirektori tidak berlaku untuk sisa repositori. Aturan yang disimpan versi sebelumnya di subdirektori atau worktree masih berlaku untuk sesi yang dimulai di sana.

38 38 

39Kadang-kadang prompt izin hanya menawarkan persetujuan satu kali, tanpa opsi "jangan tanya lagi" dan tanpa opsi untuk mengizinkan tindakan untuk sisa sesi. Claude Code menawarkan opsi-opsi itu hanya ketika prompt dapat menunjukkan kepada Anda semua yang akan mereka izinkan, jadi aturan yang Anda simpan dari prompt mencakup hanya apa yang dinamai opsinya. Ketika prompt hanya menawarkan persetujuan satu kali, setujui tindakan sekali, atau tambahkan aturan sendiri di [`/permissions`](#manage-permissions).39Kadang-kadang permintaan izin hanya menawarkan persetujuan satu kali, tanpa opsi "jangan tanya lagi" dan tanpa opsi untuk mengizinkan tindakan untuk sisa sesi. Claude Code menawarkan opsi-opsi itu hanya ketika permintaan izin dapat menunjukkan kepada Anda semua yang akan mereka izinkan, jadi aturan yang Anda simpan dari permintaan izin mencakup hanya apa yang dinamai opsinya. Ketika permintaan izin hanya menawarkan persetujuan satu kali, setujui tindakan sekali, atau tambahkan aturan sendiri di [`/permissions`](#manage-permissions). Untuk menghentikan permintaan izin bagi perintah yang diawali dengan exec wrapper seperti `watch`, atau bagi perintah `find` dengan tindakan seperti `-delete`, lihat [Exec wrapper dan tindakan `find`](#exec-wrappers-and-find-actions).

40 40 

41<h3 id="add-a-comment-when-you-answer-a-permission-prompt">41<h3 id="add-a-comment-when-you-answer-a-permission-prompt">

42 Tambahkan komentar ketika Anda menjawab prompt izin42 Tambahkan komentar ketika Anda menjawab prompt izin


91| `acceptEdits` | Secara otomatis menerima edit file dan perintah sistem file umum seperti `mkdir`, `touch`, `mv`, dan `cp` untuk jalur di direktori kerja atau `additionalDirectories` |91| `acceptEdits` | Secara otomatis menerima edit file dan perintah sistem file umum seperti `mkdir`, `touch`, `mv`, dan `cp` untuk jalur di direktori kerja atau `additionalDirectories` |

92| `plan` | Claude membaca file dan menjalankan perintah shell hanya-baca untuk menjelajahi tetapi tidak mengedit file sumber Anda; dengan [mode auto](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) tersedia, perintah yang disetujui classifier juga berjalan. Berlabel Plan di CLI dan ekstensi VS Code |92| `plan` | Claude membaca file dan menjalankan perintah shell hanya-baca untuk menjelajahi tetapi tidak mengedit file sumber Anda; dengan [mode auto](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) tersedia, perintah yang disetujui classifier juga berjalan. Berlabel Plan di CLI dan ekstensi VS Code |

93| `auto` | Berjalan tanpa prompt rutin; sebelum tindakan seperti perintah shell dan permintaan jaringan berjalan, [classifier](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) latar belakang memeriksa bahwa tindakan tersebut selaras dengan permintaan Anda |93| `auto` | Berjalan tanpa prompt rutin; sebelum tindakan seperti perintah shell dan permintaan jaringan berjalan, [classifier](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) latar belakang memeriksa bahwa tindakan tersebut selaras dengan permintaan Anda |

94| `dontAsk` | Secara otomatis menolak setiap panggilan yang sebaliknya akan meminta; pembacaan file di direktori kerja Anda dan tindakan lain yang tidak memerlukan persetujuan masih berjalan, begitu juga dengan alat yang telah disetujui sebelumnya melalui `/permissions` atau aturan `permissions.allow`. `AskUserQuestion`, alat MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool), dan alat konektor [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan itu mencapai Claude Code ditolak bahkan jika Anda telah mengizinkannya |94| `dontAsk` | Secara otomatis menolak setiap panggilan yang sebaliknya akan meminta izin; pembacaan file di direktori kerja Anda dan tindakan lain yang tidak memerlukan persetujuan masih berjalan, begitu juga dengan tool yang telah disetujui sebelumnya melalui `/permissions` atau aturan `permissions.allow`. `AskUserQuestion`, tool MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool), [pembacaan dari jalur jaringan](#network-paths), dan tool konektor yang [diatur organisasi Anda ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan itu mencapai Claude Code ditolak bahkan jika Anda telah mengizinkannya |

95| `bypassPermissions` | Melewati prompt izin, kecuali untuk [tindakan yang tidak ada mode auto-approve](/docs/id/permission-modes#actions-no-mode-auto-approves) |95| `bypassPermissions` | Melewati prompt izin, kecuali untuk [tindakan yang tidak ada mode auto-approve](/docs/id/permission-modes#actions-no-mode-auto-approves) |

96 96 

97<Warning>97<Warning>


240 Bash240 Bash

241</h3>241</h3>

242 242 

243Aturan Bash mencocokkan seluruh teks perintah, dengan `*` mewakili teks apa pun. [Pola wildcard](#wildcard-patterns) menunjukkan perintah mana yang dicocokkan oleh setiap bentuk aturan dan di mana harus meletakkan `*`. Bagian selanjutnya dari bagian ini membahas cara Claude Code mencocokkan perintah gabungan dan wrapper, apa yang tidak dicocokkan oleh sebuah aturan, perintah read-only, dan pengalihan.243Aturan Bash mencocokkan seluruh teks perintah, dengan `*` mewakili teks apa pun. [Pola wildcard](#wildcard-patterns) menunjukkan perintah mana yang dicocokkan oleh setiap bentuk aturan dan di mana harus meletakkan `*`. Bagian selanjutnya dari bagian ini membahas cara Claude Code mencocokkan perintah gabungan dan wrapper, wrapper dan aksi `find` mana yang tidak dapat disetujui oleh aturan prefiks, apa yang tidak dicocokkan oleh sebuah aturan, perintah read-only, dan pengalihan.

244 244 

245<h4 id="compound-commands">245<h4 id="compound-commands">

246 Perintah gabungan246 Perintah gabungan


268 268 

269Daftar wrapper ini bawaan dan tidak dapat dikonfigurasi. Runner lingkungan pengembangan seperti `direnv exec`, `devbox run`, `mise exec`, `npx`, dan `docker exec` tidak ada dalam daftar. Karena tool ini mengeksekusi argumennya sebagai perintah, aturan seperti `Bash(devbox run *)` cocok dengan apa pun yang muncul setelah `run`, termasuk `devbox run rm -rf .`. Untuk menyetujui pekerjaan di dalam runner lingkungan, tulis aturan spesifik yang mencakup runner dan perintah di dalamnya, seperti `Bash(devbox run npm test)`. Tambahkan satu aturan per perintah di dalamnya yang ingin Anda izinkan.269Daftar wrapper ini bawaan dan tidak dapat dikonfigurasi. Runner lingkungan pengembangan seperti `direnv exec`, `devbox run`, `mise exec`, `npx`, dan `docker exec` tidak ada dalam daftar. Karena tool ini mengeksekusi argumennya sebagai perintah, aturan seperti `Bash(devbox run *)` cocok dengan apa pun yang muncul setelah `run`, termasuk `devbox run rm -rf .`. Untuk menyetujui pekerjaan di dalam runner lingkungan, tulis aturan spesifik yang mencakup runner dan perintah di dalamnya, seperti `Bash(devbox run npm test)`. Tambahkan satu aturan per perintah di dalamnya yang ingin Anda izinkan.

270 270 

271Wrapper eksekusi seperti `watch`, `setsid`, `ionice`, dan `flock` tidak dapat disetujui otomatis oleh aturan prefiks seperti `Bash(watch *)`, sehingga dalam mode Manual selalu muncul permintaan izin. Hal yang sama berlaku untuk `find` dengan `-exec` atau `-delete`: aturan `Bash(find *)` tidak mencakup bentuk-bentuk ini. Untuk menyetujui pemanggilan tertentu, tulis aturan pencocokan persis untuk string perintah lengkap.271<h4 id="exec-wrappers-and-find-actions">

272 Wrapper eksekusi dan aksi `find`

273</h4>

274 

275Aturan prefiks seperti `Bash(watch *)` atau `Bash(find *)` tidak dapat menyetujui otomatis perintah-perintah berikut, sehingga dalam mode Manual perintah tersebut memunculkan permintaan izin:

276 

277* **Wrapper eksekusi**: seperti `watch`, `setsid`, `ionice`, dan `flock`

278* **`find`**: dengan aksi yang menjalankan perintah, menghapus file, atau menulis file, seperti `-exec`, `-delete`, atau `-fprint`, atau dengan `-files0-from`, yang mengambil path yang akan dicari dari sebuah file

279 

280Untuk menyetujui pemanggilan tertentu yang tidak mengandung `*`, tulis aturan pencocokan persis untuk string perintah lengkap, seperti `Bash(find build -type f -delete)`.

281 

282Ketika perintah mengandung `*`, seperti pada `find . -name '*.tmp' -delete`, Claude Code membaca aturan tersebut sebagai [pola wildcard](#wildcard-patterns), bukan pencocokan persis, sehingga perintah tersebut tetap memunculkan permintaan izin. Setujui setiap kali permintaan izin muncul, atau gunakan [hook PreToolUse](/docs/id/hooks#pretooluse-decision-control) yang mengembalikan `"allow"` untuknya.

272 283 

273<h4 id="bash-rule-limits">284<h4 id="bash-rule-limits">

274 Apa yang tidak dicocokkan oleh aturan Bash285 Apa yang tidak dicocokkan oleh aturan Bash


301* **Glob tanpa tanda kutip untuk perintah dengan flag yang dapat menulis**: perintah dengan flag yang dapat menulis atau mengeksekusi, seperti `find`, `sort`, `sed`, dan `git`, memunculkan permintaan izin ketika ada glob tanpa tanda kutip, karena glob tersebut dapat diperluas menjadi flag seperti `-delete`.312* **Glob tanpa tanda kutip untuk perintah dengan flag yang dapat menulis**: perintah dengan flag yang dapat menulis atau mengeksekusi, seperti `find`, `sort`, `sed`, dan `git`, memunculkan permintaan izin ketika ada glob tanpa tanda kutip, karena glob tersebut dapat diperluas menjadi flag seperti `-delete`.

302* **`docker` yang diarahkan ke daemon lain**: bentuk read-only dari `docker` memunculkan permintaan izin ketika perintah membawa flag yang memilih daemon berbeda, seperti `-H`, `--context`, atau `--url` dan `--connection` milik Podman.313* **`docker` yang diarahkan ke daemon lain**: bentuk read-only dari `docker` memunculkan permintaan izin ketika perintah membawa flag yang memilih daemon berbeda, seperti `-H`, `--context`, atau `--url` dan `--connection` milik Podman.

303* **`file` dengan flag yang membuka path**: `file` memunculkan permintaan izin ketika meneruskan `-m`/`--magic-file` atau `-f`/`--files-from`, karena flag tersebut membuat `file` membuka path yang disebutkan dalam nilai flag.314* **`file` dengan flag yang membuka path**: `file` memunculkan permintaan izin ketika meneruskan `-m`/`--magic-file` atau `-f`/`--files-from`, karena flag tersebut membuat `file` membuka path yang disebutkan dalam nilai flag.

315* **`ps` yang dapat mencetak environment variable**: `ps` memunculkan permintaan izin ketika salah satu argumennya dapat berfungsi sebagai opsi `e`, seperti pada `ps auxe` atau `ps aux -e`, karena opsi tersebut mencetak environment variable proses. `ps aux` dan `ps -ef` berjalan tanpa permintaan izin. Pemeriksaan pada bentuk dengan tanda hubung seperti `ps aux -e` memerlukan Claude Code v2.1.290 atau yang lebih baru.

304* **Path jaringan di Windows**: perintah yang argumennya mencakup path jaringan (UNC), seperti `\\server\share\file`, memunculkan permintaan izin karena mengakses path jaringan dapat mengirimkan kredensial Windows Anda ke host yang disebutkannya. Pemeriksaan yang sama berlaku untuk perintah [tool PowerShell](/docs/id/tools-reference#powershell-tool).316* **Path jaringan di Windows**: perintah yang argumennya mencakup path jaringan (UNC), seperti `\\server\share\file`, memunculkan permintaan izin karena mengakses path jaringan dapat mengirimkan kredensial Windows Anda ke host yang disebutkannya. Pemeriksaan yang sama berlaku untuk perintah [tool PowerShell](/docs/id/tools-reference#powershell-tool).

305* **Penulisan ke variabel shell khusus**: perintah yang menetapkan, menghapus, atau melakukan loop atas variabel shell khusus tertentu, seperti `PATH` atau `IFS`, memunculkan permintaan izin meskipun bagian lain dari perintah bersifat read-only.317* **Penulisan ke variabel shell khusus**: perintah yang menetapkan, menghapus, atau melakukan loop atas variabel shell khusus tertentu, seperti `PATH` atau `IFS`, memunculkan permintaan izin meskipun bagian lain dari perintah bersifat read-only.

306* **Perintah yang tidak dapat di-parse oleh analisis**: ketika Claude Code tidak dapat sepenuhnya mem-parse sebuah perintah, ia meminta persetujuan alih-alih memperlakukan perintah tersebut sebagai read-only. Perintah yang lebih panjang dari 10.000 karakter selalu memunculkan permintaan izin karena melebihi batas yang di-parse oleh analisis.318* **Perintah yang tidak dapat di-parse oleh analisis**: ketika Claude Code tidak dapat sepenuhnya mem-parse sebuah perintah, ia meminta persetujuan alih-alih memperlakukan perintah tersebut sebagai read-only. Perintah yang lebih panjang dari 10.000 karakter selalu memunculkan permintaan izin karena melebihi batas yang di-parse oleh analisis.


508 520 

509Ketika sebuah tool kemudian membuka file yang disetujui, tool tersebut [memastikan bahwa path masih mengarah ke lokasi yang disetujui oleh pemeriksaan izin](/docs/id/errors#refusing-after-a-symlink-changed).521Ketika sebuah tool kemudian membuka file yang disetujui, tool tersebut [memastikan bahwa path masih mengarah ke lokasi yang disetujui oleh pemeriksaan izin](/docs/id/errors#refusing-after-a-symlink-changed).

510 522 

523<h4 id="network-paths">

524 Path jaringan

525</h4>

526 

527Ketika tool pembaca file Claude, seperti Read, Grep, dan Glob, membaca dari path jaringan, pembacaan tersebut mendapatkan pemeriksaan izinnya sendiri. Path jaringan adalah path yang dapat menjangkau komputer lain: di Windows, path UNC seperti `\\server\share\file`, dan di macOS serta Linux, path automount `/net` seperti `/net/fileserver/notes.txt`. Mencari path semacam itu dapat menghubungi host yang disebutkannya, dan di Windows kontak tersebut dapat mengirimkan kredensial Anda ke host tersebut. Perintah shell memiliki pemeriksaannya sendiri: dalam mode Manual, perintah Bash atau PowerShell read-only yang argumennya mencakup path UNC [tetap memunculkan permintaan izin di Windows](#read-only-commands).

528 

529Di Claude Code v2.1.292 dan yang lebih baru, masing-masing hal berikut tetap mempertahankan permintaan izin:

530 

531* **Aturan allow**: sebuah aturan tidak menyetujui pembacaan tersebut terlebih dahulu, termasuk aturan untuk seluruh tool, seperti `Read`

532* **Hook PreToolUse**: [hook](#extend-permissions-with-hooks) yang mengembalikan `"allow"` tidak melewati permintaan izin

533* **Auto mode**: permintaan izin datang kepada Anda, dan [pengklasifikasi](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) tidak memutuskan pembacaan tersebut

534 

535Dalam mode `dontAsk`, Claude Code menolak pembacaan alih-alih meminta persetujuan. Dalam mode `bypassPermissions`, dan dalam sesi terminal interaktif dalam plan mode dengan [bypass permissions](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) tersedia, pembacaan berjalan tanpa permintaan izin ini.

536 

537Untuk membaca file di share jaringan tanpa permintaan izin ini, berikan share tersebut path lokal terlebih dahulu:

538 

539* **Windows**: petakan share ke sebuah huruf drive dan teruskan drive tersebut dengan `--add-dir` saat Anda meluncurkan Claude Code, seperti yang dijelaskan di [Direktori kerja](#working-directories)

540* **macOS dan Linux**: mount share di path lokal, seperti direktori di bawah `/mnt` atau `/Volumes`, dan baca file dari sana, seperti yang dijelaskan di [Direktori kerja adalah path jaringan](/docs/id/errors#working-directory-is-a-network-path)

541 

511<h3 id="webfetch">542<h3 id="webfetch">

512 WebFetch543 WebFetch

513</h3>544</h3>

514 545 

515Aturan WebFetch menggunakan prefiks `domain:` dan dicocokkan dengan hostname dari URL yang diminta. Pencocokan tidak peka huruf besar/kecil, mendukung wildcard `*`, dan menghapus `.` di akhir dari aturan maupun hostname sehingga `example.com.` dan `example.com` diperlakukan sama.546Aturan WebFetch menggunakan prefiks `domain:` dan dicocokkan dengan hostname dari URL yang diminta. Pencocokan tidak peka huruf besar/kecil, mendukung wildcard `*`, dan menghapus `.` di akhir dari aturan maupun hostname sehingga `example.com.` dan `example.com` diperlakukan sama.

516 547 

517* `WebFetch(domain:example.com)` cocok dengan permintaan ke `example.com`548* `WebFetch(domain:example.com)` hanya cocok dengan permintaan ke `example.com`. Untuk juga mencakup subdomain seperti `api.example.com`, tambahkan aturan `WebFetch(domain:*.example.com)`

518* `WebFetch(domain:*.example.com)` cocok dengan subdomain apa pun di kedalaman mana pun, seperti `api.example.com` atau `a.b.example.com`, tetapi tidak dengan `example.com` itu sendiri549* `WebFetch(domain:*.example.com)` cocok dengan subdomain apa pun di kedalaman mana pun, seperti `api.example.com` atau `a.b.example.com`, tetapi tidak dengan `example.com` itu sendiri

519* `WebFetch(domain:*)` cocok dengan setiap domain. Ini tidak sama dengan aturan `WebFetch` tanpa argumen; lihat [Mengizinkan atau menolak setiap fetch](#allow-or-deny-every-fetch)550* `WebFetch(domain:*)` cocok dengan setiap domain. Ini tidak sama dengan aturan `WebFetch` tanpa argumen; lihat [Mengizinkan atau menolak setiap fetch](#allow-or-deny-every-fetch)

520 551 


622 653 

623Lihat [Tentukan apakah akan mempercayai mod](/docs/id/plugins/mods/overview#decide-whether-to-trust-a-mod), atau [Kelola mod untuk organisasi Anda](/docs/id/plugins/mods/admin#know-what-happens-by-default) jika Anda menerapkan pengaturan terkelola.654Lihat [Tentukan apakah akan mempercayai mod](/docs/id/plugins/mods/overview#decide-whether-to-trust-a-mod), atau [Kelola mod untuk organisasi Anda](/docs/id/plugins/mods/admin#know-what-happens-by-default) jika Anda menerapkan pengaturan terkelola.

624 655 

625Alat MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool) juga masih meminta ketika hook mengembalikan `"allow"`, begitu juga alat connector [yang organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan tersebut mencapai Claude Code.656Untuk [tool yang memerlukan interaksi pengguna](/docs/id/permission-modes#actions-no-mode-auto-approves), seperti `AskUserQuestion` atau tool MCP yang ditandai `requiresUserInteraction`, persetujuan `tool.check` dari mod tidak melewati permintaan izin. Memerlukan Claude Code v2.1.292 atau yang lebih baru. Tool MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool) juga tetap meminta persetujuan ketika hook mengembalikan `"allow"`, begitu juga pembacaan dari [jalur jaringan](#network-paths) dan tool konektor [yang diatur organisasi Anda ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dalam sesi di mana pengaturan tersebut mencapai Claude Code.

626 657 

627Hook 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.658Hook 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.

628 659 


636* **Selama sesi**: gunakan perintah `/add-dir`667* **Selama sesi**: gunakan perintah `/add-dir`

637* **Konfigurasi persisten**: tambahkan ke `additionalDirectories` dalam [file pengaturan](/docs/id/settings#where-settings-live)668* **Konfigurasi persisten**: tambahkan ke `additionalDirectories` dalam [file pengaturan](/docs/id/settings#where-settings-live)

638 669 

639File di direktori tambahan mengikuti aturan izin yang sama dengan direktori kerja asli: mereka menjadi dapat dibaca tanpa prompt, dan izin edit file mengikuti mode izin saat ini.670File di direktori tambahan mengikuti aturan izin yang sama dengan direktori kerja asli: mereka menjadi dapat dibaca tanpa prompt selain pemeriksaan [jalur jaringan](#network-paths), dan izin edit file mengikuti mode izin saat ini.

640 671 

641Anda tidak dapat menambahkan sebagian besar [jalur jaringan](/docs/id/errors#working-directory-is-a-network-path), seperti berbagi UNC `\\server\share`, sebagai direktori kerja, karena pencarian dapat menghubungi host yang dinamainya. Di Windows, petakan berbagi ke huruf drive sebagai gantinya dan teruskan drive dengan `--add-dir` saat peluncuran.672Anda tidak dapat menambahkan sebagian besar [jalur jaringan](/docs/id/errors#working-directory-is-a-network-path), seperti berbagi UNC `\\server\share`, sebagai direktori kerja, karena pencarian dapat menghubungi host yang dinamainya. Di Windows, petakan berbagi ke huruf drive sebagai gantinya dan teruskan drive dengan `--add-dir` saat peluncuran.

642 673 


648 Memindahkan sesi ke direktori lain679 Memindahkan sesi ke direktori lain

649</h3>680</h3>

650 681 

651Untuk memindahkan sesi ke direktori kerja utama yang berbeda, daripada [menambahkan direktori](#working-directories) bersama yang saat ini, jalankan `/cd <path>`. Claude Code menyimpan percakapan, memuat `CLAUDE.md` direktori baru, dan meminta Anda untuk [mempercayai workspace](#project-allow-rules-and-workspace-trust) jika Anda belum pernah bekerja di dalamnya sebelumnya. Setelahnya, Claude Code [menemukan sesi yang dipindahkan](/docs/id/sessions#resume-a-session) ketika Anda menjalankan `--resume` dari direktori baru.682Untuk memindahkan sesi ke direktori kerja utama yang berbeda, daripada [menambahkan direktori](#working-directories) bersama yang saat ini, jalankan `/cd <path>`. Claude Code menyimpan percakapan, memuat `CLAUDE.md` direktori baru, dan meminta Anda untuk [mempercayai workspace](#project-allow-rules-and-workspace-trust) jika Anda belum pernah bekerja di dalamnya sebelumnya. Setelahnya, Claude Code [menemukan sesi yang dipindahkan](/docs/id/sessions#where-the-session-picker-looks) ketika Anda menjalankan `--resume` dari direktori baru.

652 683 

653Segera setelah Anda memindahkan, Claude Code menerapkan konfigurasi proyek direktori baru:684Segera setelah Anda memindahkan, Claude Code menerapkan konfigurasi proyek direktori baru:

654 685 

Details

790 790 

791Hooks di `hooks/hooks.json` dan di kunci manifest `hooks` keduanya dimuat. Untuk setiap event dan payload-nya, lihat [Hook events](/docs/id/hooks#hook-events).791Hooks di `hooks/hooks.json` dan di kunci manifest `hooks` keduanya dimuat. Untuk setiap event dan payload-nya, lihat [Hook events](/docs/id/hooks#hook-events).

792 792 

793Ketika plugin lain yang diaktifkan memiliki nama yang sama, salah satu dari keduanya mendaftarkan hook `hooks/hooks.json`-nya dan hook milik yang lain tidak disertakan. Lihat [Hooks ketika dua plugin yang diaktifkan memiliki nama yang sama](/docs/id/plugins/loading#hooks-when-two-enabled-plugins-share-a-name) untuk mengetahui yang mana, serta catatan di `/plugin` yang memberi tahu Anda.

794 

793Untuk menulis hooks sebagai fungsi JavaScript yang berjalan di dalam Claude Code dan dapat menggambar di antarmukanya, daftarkan file modul di bawah kunci `modules` dalam `hooks/hooks.json` yang sama. Plugin dengan satu adalah mod. Lihat [Create a mod](/docs/id/plugins/mods/create).795Untuk menulis hooks sebagai fungsi JavaScript yang berjalan di dalam Claude Code dan dapat menggambar di antarmukanya, daftarkan file modul di bawah kunci `modules` dalam `hooks/hooks.json` yang sama. Plugin dengan satu adalah mod. Lihat [Create a mod](/docs/id/plugins/mods/create).

794 796 

795<h4 id="when-plugin-hooks-fire">797<h4 id="when-plugin-hooks-fire">

Details

209* **Plugin dengan repositori sendiri**: instalasi gagal dengan pesan yang berisi `Dependency "secrets-vault@your-marketplace" has no git tag satisfying`.209* **Plugin dengan repositori sendiri**: instalasi gagal dengan pesan yang berisi `Dependency "secrets-vault@your-marketplace" has no git tag satisfying`.

210* **Plugin yang direferensikan oleh jalur relatif**: instalasi menggunakan salinan marketplace saat ini sebagai gantinya, dan batasan diperiksa ketika plugin dimuat. Jika salinan itu berada di luar rentang, plugin dependen tetap dinonaktifkan dan `claude plugin list` menunjukkan `Requires "secrets-vault@your-marketplace" ~2.1.0, installed 3.0.0`.210* **Plugin yang direferensikan oleh jalur relatif**: instalasi menggunakan salinan marketplace saat ini sebagai gantinya, dan batasan diperiksa ketika plugin dimuat. Jika salinan itu berada di luar rentang, plugin dependen tetap dinonaktifkan dan `claude plugin list` menunjukkan `Requires "secrets-vault@your-marketplace" ~2.1.0, installed 3.0.0`.

211 211 

212Untuk plugin yang direferensikan marketplace oleh jalur folder lokal, marketplace yang Anda tambahkan sebagai jalur folder lokal juga menyelesaikan batasan terhadap tag git folder itu, ketika folder adalah repositori git. Ini memerlukan Claude Code v2.1.196 atau lebih baru. Folder lokal yang bukan repositori git tidak memiliki tag, jadi Claude Code menginstal dependensi dari konten folder saat ini sebagai gantinya.212Untuk plugin yang direferensikan marketplace oleh jalur relatif, marketplace yang Anda tambahkan sebagai jalur folder lokal juga menyelesaikan batasan terhadap tag git folder itu, ketika folder adalah repositori git. Folder lokal yang bukan repositori git tidak memiliki tag, jadi Claude Code menginstal dependensi dari konten folder saat ini sebagai gantinya.

213 213 

214<h3 id="confirm-the-resolved-version">214<h3 id="confirm-the-resolved-version">

215 Konfirmasi versi yang diselesaikan215 Konfirmasi versi yang diselesaikan

Details

144Entry source ini tidak memerlukan akun git:144Entry source ini tidak memerlukan akun git:

145 145 

146* **`archive`**: zip yang diunduh melalui HTTPS. Pengguna tidak memerlukan `git` atau akun, hanya akses jaringan ke URL. Memerlukan Claude Code v2.1.224 atau lebih baru. Pin setiap archive dengan `sha256` sehingga Claude Code menolak unduhan yang berubah. Untuk mengirim kredensial dengan unduhan, lihat [Authenticate archive downloads](#authenticate-archive-downloads).146* **`archive`**: zip yang diunduh melalui HTTPS. Pengguna tidak memerlukan `git` atau akun, hanya akses jaringan ke URL. Memerlukan Claude Code v2.1.224 atau lebih baru. Pin setiap archive dengan `sha256` sehingga Claude Code menolak unduhan yang berubah. Untuk mengirim kredensial dengan unduhan, lihat [Authenticate archive downloads](#authenticate-archive-downloads).

147* **Repositori git publik**: Claude Code mengkloning source `url` atau `git-subdir` publik melalui HTTPS tanpa kredensial ketika entri memberikan URL `https://`. Untuk source `github`, atau source `git-subdir` yang ditulis sebagai `owner/repo`, pengguna tanpa kunci SSH GitHub mengatur `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`.147* **Repositori git publik**: Claude Code mengkloning source `url` atau `git-subdir` publik melalui HTTPS tanpa kredensial ketika entri memberikan URL `https://`. Untuk source `github`, atau source `git-subdir` yang ditulis sebagai `owner/repo`, beri tahu pengguna tanpa kunci SSH GitHub untuk mengatur `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`.

148 

149Tetap cantumkan `CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1` dalam instruksi Anda meskipun `claude plugin install` berhasil tanpanya dari shell di mesin tanpa kunci SSH. Untuk source `github`, perintah tersebut dapat beralih ke HTTPS dengan sendirinya, sambil mencetak `SSH not configured, cloning via HTTPS`. Instalasi dari `/plugin` di dalam sesi dan pembaruan plugin tidak beralih ke HTTPS, sehingga tanpa variabel tersebut keduanya gagal bagi pengguna yang tidak memiliki kunci SSH GitHub.

148 150 

149Untuk tim di satu jaringan, marketplace `directory` pada filesystem bersama juga bekerja tanpa akun git. Pengguna hanya memerlukan akses baca ke path.151Untuk tim di satu jaringan, marketplace `directory` pada filesystem bersama juga bekerja tanpa akun git. Pengguna hanya memerlukan akses baca ke path.

150 152 

Details

80 80 

81Sesi cloud tidak menambahkan marketplace yang daftar repositori di bawah [`extraKnownMarketplaces`](/docs/id/settings-reference#extraknownmarketplaces), karena itu memerlukan dialog kepercayaan workspace, yang tidak pernah ditampilkan sesi cloud.81Sesi cloud tidak menambahkan marketplace yang daftar repositori di bawah [`extraKnownMarketplaces`](/docs/id/settings-reference#extraknownmarketplaces), karena itu memerlukan dialog kepercayaan workspace, yang tidak pernah ditampilkan sesi cloud.

82 82 

83Plugin direktori skills dengan cakupan proyek dimuat hanya dari `.claude/skills/` dari [direktori kerja utama](/docs/id/permissions#working-directories) sesi, dan hanya setelah Anda menerima [dialog kepercayaan workspace](/docs/id/permissions#what-runs-before-you-trust-a-folder) untuk folder itu. Plugin tidak [mencari direktori induk hingga akar repositori](/docs/id/skills#discovery-from-parent-and-nested-directories) seperti yang dilakukan skill dan perintah biasa. Jika Anda meluncurkan dari subdirektori, plugin di akar repositori tidak dimuat. Luncurkan dari akar repositori sebagai gantinya, atau [pindahkan sesi ke sana dengan `/cd`](/docs/id/permissions#move-the-session-to-another-directory) pada v2.1.246 atau lebih baru.83Jika plugin dalam `.claude/skills/` repositori Anda tidak dimuat, periksa di mana Anda memulai sesi dan apakah Anda telah mempercayai folder tersebut:

84 

85* **Di subdirektori**: plugin di akar repositori tidak dimuat. Claude Code membaca `.claude/skills/` dari [direktori kerja utama](/docs/id/permissions#working-directories) sesi dan, tidak seperti skill dan perintah biasa, tidak [mencari direktori induk](/docs/id/skills#discovery-from-parent-and-nested-directories) untuk plugin. Luncurkan dari akar repositori sebagai gantinya, atau [pindahkan sesi ke sana dengan `/cd`](/docs/id/permissions#move-the-session-to-another-directory) pada v2.1.246 atau lebih baru

86* **Dari aplikasi desktop, dalam worktree**: plugin dimuat dari `.claude/skills/` checkout utama, bukan dari worktree. Lihat [Apa yang dibagikan worktree dengan checkout utama](/docs/id/worktrees#what-worktrees-share-with-the-main-checkout)

87* **Di folder yang belum Anda percayai**: plugin dimuat hanya setelah Anda menerima [dialog kepercayaan workspace](/docs/id/permissions#what-runs-before-you-trust-a-folder) untuk folder itu

84 88 

85Plugin dengan cakupan proyek diperiksa ke dalam repositori dan mencapai setiap kolaborator yang mengklonnya. Karena konten itu berasal dari repositori daripada dari Anda, plugin dimuat hanya setelah pemeriksaan kepercayaan yang sama yang berlaku untuk aturan izin proyek dalam `.claude/settings.json`. Mempercayai folder induk atau menjalankan dengan `-p` tidak cukup. Komponen yang menjalankan kode dibatasi lebih lanjut:89Plugin dengan cakupan proyek diperiksa ke dalam repositori dan mencapai setiap kolaborator yang mengklonnya. Karena konten itu berasal dari repositori daripada dari Anda, plugin dimuat hanya setelah pemeriksaan kepercayaan yang sama yang berlaku untuk aturan izin proyek dalam `.claude/settings.json`. Mempercayai folder induk atau menjalankan dengan `-p` tidak cukup. Komponen yang menjalankan kode dibatasi lebih lanjut:

86 90 


421 425 

422Karena urutan membandingkan nama manifest, plugin `--plugin-dir` bernama `hello-plugin` menggantikan `hello@example-marketplace` ketika manifest plugin itu juga mengatakan `"name": "hello-plugin"`.426Karena urutan membandingkan nama manifest, plugin `--plugin-dir` bernama `hello-plugin` menggantikan `hello@example-marketplace` ketika manifest plugin itu juga mengatakan `"name": "hello-plugin"`.

423 427 

428<h3 id="hooks-when-two-enabled-plugins-share-a-name">

429 Hook ketika dua plugin yang diaktifkan berbagi nama

430</h3>

431 

432Ketika Anda menginstal dan mengaktifkan dua plugin dengan nama manifest yang sama dari marketplace yang berbeda, keduanya muncul sebagai diaktifkan di `/plugin`, tetapi hook dari salah satunya tidak disertakan. Satu plugin per nama mendaftarkan hook dalam `hooks/hooks.json`-nya, dan satu plugin per nama memuat [modul hook](/docs/id/plugins/mods/overview). Ketika pengaturan terkelola organisasi Anda mengaktifkan salah satu salinan, salinan itulah yang memegang nama tersebut. Jika tidak, salinan yang dimuat Claude Code terlebih dahulu yang memegangnya.

433 

434Untuk melihat salinan mana yang memegang nama tersebut, jalankan `/plugin` dalam sesi Anda dan buka tab **Errors**. Catatan di sana untuk salinan yang hook-nya tidak disertakan menyebutkan salinan yang memegang nama tersebut, dan detail salinan yang tidak disertakan menampilkan catatan yang sama. Untuk hook `hooks/hooks.json`, catatan dimulai dengan `Its hooks.json hooks do not run`, dan untuk modul hook, catatan dimulai dengan `Its hooks module does not load`. Catatan ini memerlukan Claude Code v2.1.296 atau yang lebih baru.

435 

436Untuk menjalankan hook dari salinan yang tidak disertakan sebagai gantinya, nonaktifkan atau hapus instalan salinan yang memegang nama tersebut, lalu jalankan `/reload-plugins` dalam sesi Anda. Pemuatan ulang mendaftarkan hook dari salinan yang tersisa dan menghapus catatan tersebut. Ketika salinan yang memegang nama tersebut adalah salinan yang diaktifkan oleh pengaturan terkelola Anda, Anda tidak dapat menonaktifkannya, dan hook dari salinan lainnya tetap nonaktif selama keduanya terinstal.

437 

424<h3 id="keep-a-session-only-plugin-from-loading">438<h3 id="keep-a-session-only-plugin-from-loading">

425 Jaga plugin session-only agar tidak dimuat439 Jaga plugin session-only agar tidak dimuat

426</h3>440</h3>

Details

51* <span id="reserved-name-spellings" />**Ejaan lain dari nama yang dicadangkan**: nama yang berbeda dari nama yang dicadangkan hanya dengan titik di akhir, atau dengan simbol selain garis bawah sebagai pengganti tanda hubung, jadi `claude.code.plugins` dihitung sebagai `claude-code-plugins`. Menambahkan marketplace gagal dengan [`is another spelling of "<reserved>", a reserved marketplace name`](/docs/id/errors#marketplace-name-is-another-spelling-of-a-reserved-name), dan marketplace yang sudah terdaftar di bawah satu berhenti dimuat. Pemeriksaan ini memerlukan Claude Code v2.1.280 atau lebih baru.51* <span id="reserved-name-spellings" />**Ejaan lain dari nama yang dicadangkan**: nama yang berbeda dari nama yang dicadangkan hanya dengan titik di akhir, atau dengan simbol selain garis bawah sebagai pengganti tanda hubung, jadi `claude.code.plugins` dihitung sebagai `claude-code-plugins`. Menambahkan marketplace gagal dengan [`is another spelling of "<reserved>", a reserved marketplace name`](/docs/id/errors#marketplace-name-is-another-spelling-of-a-reserved-name), dan marketplace yang sudah terdaftar di bawah satu berhenti dimuat. Pemeriksaan ini memerlukan Claude Code v2.1.280 atau lebih baru.

52* **Nama yang Claude Code gunakan untuk plugin yang tidak berasal dari marketplace**: `inline` untuk plugin yang dimuat dengan [`--plugin-dir`](/docs/id/cli-reference), `builtin` untuk plugin bawaan, `skills-dir` untuk plugin yang dimuat otomatis dari [`.claude/skills/`](/docs/id/skills), dan `synced` untuk plugin yang disinkronkan dari akun claude.ai Anda. `claude-plugin-test` juga dicadangkan. `skills-dir` juga muncul sebagai `{"source": "skills-dir"}` dalam `strictKnownMarketplaces` dan `blockedMarketplaces`, dijelaskan di bawah [Nilai sumber yang valid hanya dalam daftar kebijakan](#source-values-valid-only-in-policy-lists).52* **Nama yang Claude Code gunakan untuk plugin yang tidak berasal dari marketplace**: `inline` untuk plugin yang dimuat dengan [`--plugin-dir`](/docs/id/cli-reference), `builtin` untuk plugin bawaan, `skills-dir` untuk plugin yang dimuat otomatis dari [`.claude/skills/`](/docs/id/skills), dan `synced` untuk plugin yang disinkronkan dari akun claude.ai Anda. `claude-plugin-test` juga dicadangkan. `skills-dir` juga muncul sebagai `{"source": "skills-dir"}` dalam `strictKnownMarketplaces` dan `blockedMarketplaces`, dijelaskan di bawah [Nilai sumber yang valid hanya dalam daftar kebijakan](#source-values-valid-only-in-policy-lists).

53* **`npm`, `pip`, `uv`, `cargo`, `github`, dan `gh`**: dicadangkan dalam huruf apa pun. Pemeriksaan ini memerlukan Claude Code v2.1.275 atau lebih baru.53* **`npm`, `pip`, `uv`, `cargo`, `github`, dan `gh`**: dicadangkan dalam huruf apa pun. Pemeriksaan ini memerlukan Claude Code v2.1.275 atau lebih baru.

54* **Nama anggota yang dimiliki setiap objek JavaScript**: `constructor`, `hasOwnProperty`, `isPrototypeOf`, `propertyIsEnumerable`, `toLocaleString`, `toString`, dan `valueOf`. `claude plugin marketplace add` menolak marketplace yang menggunakan salah satunya dengan [`Claude Code reserves this name and cannot register a marketplace under it`](/docs/id/plugins/troubleshooting#claude-code-reserves-this-name). Pemeriksaan ini memerlukan Claude Code v2.1.296 atau lebih baru.

54* **Nama yang dimulai dengan `claudeai-`**: dicadangkan untuk marketplace yang dihosting di claude.ai. `claude plugin marketplace add` menolak marketplace lain apa pun yang menggunakannya dengan `Cannot add marketplace "<name>": names starting with "claudeai-" are reserved for marketplaces hosted on claude.ai`.55* **Nama yang dimulai dengan `claudeai-`**: dicadangkan untuk marketplace yang dihosting di claude.ai. `claude plugin marketplace add` menolak marketplace lain apa pun yang menggunakannya dengan `Cannot add marketplace "<name>": names starting with "claudeai-" are reserved for marketplaces hosted on claude.ai`.

55* **Folder unduhan dari marketplace GitHub yang terdaftar, `<owner>-<repo>`**: Claude Code mengunduh marketplace yang ditambahkan dari sumber `github` seperti `acme/x-tools` melalui folder bernama `acme-x-tools`, apa pun `name` milik marketplace tersebut. Selama marketplace tersebut terdaftar dengan nama selain `acme-x-tools`, `claude plugin marketplace add` menolak marketplace lain yang bernama `acme-x-tools` setelah mengunduhnya, dan melaporkan `Can't use the marketplace name "acme-x-tools"`. Pemeriksaan ini memerlukan Claude Code v2.1.290 atau lebih baru.56* **Folder unduhan dari marketplace GitHub yang terdaftar, `<owner>-<repo>`**: Claude Code mengunduh marketplace yang ditambahkan dari sumber `github` seperti `acme/x-tools` melalui folder bernama `acme-x-tools`, apa pun `name` milik marketplace tersebut. Selama marketplace tersebut terdaftar dengan nama selain `acme-x-tools`, `claude plugin marketplace add` menolak marketplace lain yang bernama `acme-x-tools` setelah mengunduhnya, dan melaporkan `Can't use the marketplace name "acme-x-tools"`. Pemeriksaan ini memerlukan Claude Code v2.1.290 atau lebih baru.

56 57 

Details

68* **Penjaga melindungi apa yang Anda kelola.** Mod pengguna tidak dapat mengubah apa yang diterima atau diputuskan hook terkelola Anda, prompt sistem, `CLAUDE.md` terkelola Anda dan instruksi terkelola lainnya, apa yang dibaca mod apa pun sebagai pengaturan, atau alat dan deskripsi server MCP terkelola Anda.68* **Penjaga melindungi apa yang Anda kelola.** Mod pengguna tidak dapat mengubah apa yang diterima atau diputuskan hook terkelola Anda, prompt sistem, `CLAUDE.md` terkelola Anda dan instruksi terkelola lainnya, apa yang dibaca mod apa pun sebagai pengaturan, atau alat dan deskripsi server MCP terkelola Anda.

69* **Semuanya yang lain diizinkan.** Penjaga tidak menambahkan batasan lain. Mod pengguna masih dapat membaca dan menulis file, memulai proses, membuat permintaan jaringan, menulis ulang panggilan alat dan prompt, menolak panggilan alat, menyetujui yang sebaliknya akan meminta, dan menggambar di antarmuka, semuanya dengan izin pengguna itu.69* **Semuanya yang lain diizinkan.** Penjaga tidak menambahkan batasan lain. Mod pengguna masih dapat membaca dan menulis file, memulai proses, membuat permintaan jaringan, menulis ulang panggilan alat dan prompt, menolak panggilan alat, menyetujui yang sebaliknya akan meminta, dan menggambar di antarmuka, semuanya dengan izin pengguna itu.

70* **Aturan penolakan dan hook terkelola Anda diutamakan.** Di mana penjaga dimuat, mod pengguna tidak dapat menyetujui panggilan yang ditolak aturan `deny`, file pengaturan mana pun yang menyimpan aturan tersebut. Blok dari hook `PreToolUse` dalam pengaturan terkelola juga final. Keduanya berlaku untuk panggilan tool Claude. Tidak satu pun berlaku untuk [panggilan `$.fs` dan `$.process` milik mod](/docs/id/plugins/mods/api#reach-files-processes-and-the-network): dengan `Read(.env)` ditolak, mod masih dapat membaca file itu dengan `$.fs.read` atau memulai program yang melakukannya. Untuk membatasi panggilan tersebut, cegah mod agar tidak dimuat atau tangani panggilan tersebut dalam [mod kebijakan](#enforce-a-policy-with-a-mod-of-your-own).70* **Aturan penolakan dan hook terkelola Anda diutamakan.** Di mana penjaga dimuat, mod pengguna tidak dapat menyetujui panggilan yang ditolak aturan `deny`, file pengaturan mana pun yang menyimpan aturan tersebut. Blok dari hook `PreToolUse` dalam pengaturan terkelola juga final. Keduanya berlaku untuk panggilan tool Claude. Tidak satu pun berlaku untuk [panggilan `$.fs` dan `$.process` milik mod](/docs/id/plugins/mods/api#reach-files-processes-and-the-network): dengan `Read(.env)` ditolak, mod masih dapat membaca file itu dengan `$.fs.read` atau memulai program yang melakukannya. Untuk membatasi panggilan tersebut, cegah mod agar tidak dimuat atau tangani panggilan tersebut dalam [mod kebijakan](#enforce-a-policy-with-a-mod-of-your-own).

71* **Pemeriksaan izin lainnya dapat ditimpa.** Mod pengguna yang menyetujui panggilan alat dapat menyetujui panggilan yang akan diminta aturan `ask`, atau yang diblokir hook `PreToolUse` di luar pengaturan terkelola. Dalam mode otomatis, panggilan yang disetujui mod berjalan tanpa pemeriksaan pengklasifikasi.71* **Pemeriksaan izin lainnya dapat ditimpa.** Mod pengguna yang menyetujui panggilan tool dapat menyetujui panggilan yang akan dimintakan izin oleh aturan `ask`, atau yang diblokir hook `PreToolUse` di luar pengaturan terkelola. Dalam auto mode, panggilan yang disetujui mod berjalan tanpa pemeriksaan pengklasifikasi. Untuk permintaan izin yang tidak dilewati oleh persetujuan `tool.check` mod, lihat [Perluas izin dengan hook](/docs/id/permissions#extend-permissions-with-hooks).

72 72 

73Sumber penjaga bersifat publik di [direktori `mods/sec-default` dari repositori Claude Code](https://github.com/anthropics/claude-code/tree/main/mods/sec-default).73Sumber penjaga bersifat publik di [direktori `mods/sec-default` dari repositori Claude Code](https://github.com/anthropics/claude-code/tree/main/mods/sec-default).

74 74 


81* **Hook pengaturan tetap berfungsi.** Hook perintah, HTTP, prompt, dan agen dalam file pengaturan dan dalam `hooks/hooks.json` plugin berjalan seperti sebelumnya, bersama mod. Tidak ada yang sudah usang tentang mereka.81* **Hook pengaturan tetap berfungsi.** Hook perintah, HTTP, prompt, dan agen dalam file pengaturan dan dalam `hooks/hooks.json` plugin berjalan seperti sebelumnya, bersama mod. Tidak ada yang sudah usang tentang mereka.

82* **Aturan penolakan memiliki prioritas di mana penjaga memuat.** Mod pengguna tidak dapat menyetujui panggilan yang ditolak aturan `deny`, kecuali Anda menetapkan [`allowModsToOverrideDenyRules`](#set-options-on-the-built-in-guard).82* **Aturan penolakan memiliki prioritas di mana penjaga memuat.** Mod pengguna tidak dapat menyetujui panggilan yang ditolak aturan `deny`, kecuali Anda menetapkan [`allowModsToOverrideDenyRules`](#set-options-on-the-built-in-guard).

83* **Hook terkelola berjalan terlebih dahulu.** Hook `PreToolUse` dalam pengaturan terkelola berjalan sebelum mod apa pun melihat panggilan alat, dan bloknya final. Jika mod kemudian menulis ulang panggilan, hook terkelola Anda berjalan lagi pada panggilan yang ditulis ulang, jadi blok masih berlaku. Hook `PreToolUse` dari file pengaturan lain dan dari plugin berjalan setelah mod terakhir, jadi mod yang mengembalikan hasilnya sendiri sebagai pengganti menjalankan alat mencegah yang lain berjalan. Lihat [Urutan mod berjalan](/docs/id/plugins/mods/events#the-order-mods-run-in).83* **Hook terkelola berjalan terlebih dahulu.** Hook `PreToolUse` dalam pengaturan terkelola berjalan sebelum mod apa pun melihat panggilan alat, dan bloknya final. Jika mod kemudian menulis ulang panggilan, hook terkelola Anda berjalan lagi pada panggilan yang ditulis ulang, jadi blok masih berlaku. Hook `PreToolUse` dari file pengaturan lain dan dari plugin berjalan setelah mod terakhir, jadi mod yang mengembalikan hasilnya sendiri sebagai pengganti menjalankan alat mencegah yang lain berjalan. Lihat [Urutan mod berjalan](/docs/id/plugins/mods/events#the-order-mods-run-in).

84* **Kebijakan jaringan mencakup `$.http.fetch`.** Jika organisasi Anda mematikan pengambilan web, atau lalu lintas jaringan yang tidak penting dimatikan untuk sesi, Claude Code menolak permintaan jaringan yang dibuat mod dengan `$.http.fetch`. Kebijakan tidak mencakup program yang dimulai mod dengan `$.process.run`. Program itu menjangkau jaringan dengan akses pengguna mereka sendiri.84* **Kebijakan jaringan mencakup `$.http.fetch`.**

85 

86 * **Kebijakan organisasi Anda tidak mengizinkan WebFetch**: Claude Code juga menolak setiap permintaan `$.http.fetch` dari mod. Lihat [Ketersediaan WebFetch](/docs/id/tools-reference#webfetch-availability).

87 * **Anda menetapkan [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/id/env-vars)**: mod yang Anda atau pengguna Anda pasang masih dapat membuat permintaan ini. Variabel tersebut hanya menghentikan [mod bawaan Claude Code](/docs/id/plugins/mods/overview#mods-built-into-claude-code), ditambah setiap permintaan `$.http.fetch` yang membawa kredensial Anthropic milik sesi. Sebelum v2.1.288, variabel tersebut menghentikan setiap permintaan `$.http.fetch` dari mod.

88 

89 Keduanya tidak mencakup program yang dimulai mod dengan `$.process.run`, yang menjangkau jaringan dengan akses pengguna sendiri.

85* **Kontrol plugin mencakup mod.** Mod adalah plugin, jadi [pengaturan yang membatasi apa yang dapat dipasang pengguna](/docs/id/plugins/org#restrict-what-users-can-install), seperti `strictKnownMarketplaces`, memutuskan apakah itu dapat dipasang sama sekali.90* **Kontrol plugin mencakup mod.** Mod adalah plugin, jadi [pengaturan yang membatasi apa yang dapat dipasang pengguna](/docs/id/plugins/org#restrict-what-users-can-install), seperti `strictKnownMarketplaces`, memutuskan apakah itu dapat dipasang sama sekali.

86* **Mod tidak dapat mengubah prompt izin.** Mod dapat mengubah gaya banyak antarmuka Claude Code, tetapi bukan prompt izin, jadi tidak dapat mengubah apa yang ditampilkan prompt. Mod masih dapat menyetujui atau menolak panggilan alat sebelum prompt muncul, seperti yang dijelaskan [Ketahui apa yang terjadi secara default](#know-what-happens-by-default).91* **Mod tidak dapat mengubah prompt izin.** Mod dapat mengubah gaya banyak antarmuka Claude Code, tetapi bukan prompt izin, jadi tidak dapat mengubah apa yang ditampilkan prompt. Mod masih dapat menyetujui atau menolak panggilan alat sebelum prompt muncul, seperti yang dijelaskan [Ketahui apa yang terjadi secara default](#know-what-happens-by-default).

87* **Prompt kepercayaan datang terlebih dahulu.** Dalam sesi interaktif di direktori yang belum dipercaya pengguna, tidak ada mod yang memuat sampai mereka menjawab prompt kepercayaan.92* **Prompt kepercayaan datang terlebih dahulu.** Dalam sesi interaktif di direktori yang belum dipercaya pengguna, tidak ada mod yang memuat sampai mereka menjawab prompt kepercayaan.

Details

303| `$.session` | `messages()` mengembalikan transkrip sebagai daftar `{ role, text, toolUses }`. Juga direktori kerja, model, dan lainnya. [`usage()`](/docs/id/plugins/mods/reference#mods-api-methods) mengembalikan penggunaan context window dan batas paket. |303| `$.session` | `messages()` mengembalikan transkrip sebagai daftar `{ role, text, toolUses }`. Juga direktori kerja, model, dan lainnya. [`usage()`](/docs/id/plugins/mods/reference#mods-api-methods) mengembalikan penggunaan context window dan batas paket. |

304| `$.mcp` | `call` tool pada server MCP yang terhubung |304| `$.mcp` | `call` tool pada server MCP yang terhubung |

305 305 

306File dan proses memiliki beberapa aturan mereka sendiri:306File, proses, dan permintaan memiliki beberapa aturan mereka sendiri:

307 307 

308* **Paths**: jalur relatif di-resolve terhadap direktori kerja sesi308* **Paths**: jalur relatif di-resolve terhadap direktori kerja sesi, atau direktori kerja subagent yang peristiwanya sedang ditangani oleh hook

309* **`$.fs.list`**: mengembalikan entri satu direktori sebagai `{ name, kind, size, isLink }` dan tidak turun ke subdirektori309* **`$.fs.list`**: mengembalikan entri satu direktori sebagai `{ name, kind, size, isLink }` dan tidak turun ke subdirektori

310* **`$.process.run`**: mengambil daftar argumen dan tidak menggunakan shell. Itu menyelesaikan ke `{ exitCode, stdout, stderr }` apa pun kode keluar. Itu menolak jika program tidak dapat dimulai atau masih berjalan pada timeout, yang merupakan 30 detik secara default, jadi bungkus dalam `try` dan `catch`.310* **`$.process.run`**: mengambil daftar argumen dan tidak menggunakan shell. Itu menyelesaikan ke `{ exitCode, stdout, stderr }` apa pun kode keluar. Itu menolak jika program tidak dapat dimulai atau masih berjalan pada timeout, yang merupakan 30 detik secara default, jadi bungkus dalam `try` dan `catch`.

311* **`$.http.fetch`**: mengikuti hingga lima pengalihan. Pada pengalihan ke origin yang berbeda, fungsi ini hanya mempertahankan header permintaan `accept`, `accept-language`, `content-type`, dan `user-agent` yang Anda tetapkan dan membuang sisanya, sehingga permintaan yang bergantung pada header lain, seperti `Authorization`, dapat gagal setelah pengalihan tersebut. [Batas](/docs/id/plugins/mods/reference#limits) memberikan timeout dan ukuran badannya.

311 312 

312Setiap satu dari panggilan ini sendiri adalah peristiwa, dinamai untuk namespace dan metodenya tanpa `$.`, seperti `fs.read` untuk `$.fs.read`. Mod [lebih awal dalam rantai](/docs/id/plugins/mods/events#the-order-mods-run-in) dapat mengamati, menulis ulang, atau menolak panggilan Anda, yang merupakan cara organisasi membatasi apa yang dijangkau mod.313Setiap satu dari panggilan ini sendiri adalah peristiwa, dinamai untuk namespace dan metodenya tanpa `$.`, seperti `fs.read` untuk `$.fs.read`. Mod [lebih awal dalam rantai](/docs/id/plugins/mods/events#the-order-mods-run-in) dapat mengamati, menulis ulang, atau menolak panggilan Anda, yang merupakan cara organisasi membatasi apa yang dijangkau mod.

313 314 

Details

148| `agent.offer` | Sebuah tipe subagent ditawarkan kepada Claude | `{ isOffered: false }` untuk menahannya |148| `agent.offer` | Sebuah tipe subagent ditawarkan kepada Claude | `{ isOffered: false }` untuk menahannya |

149| `agent.spawn` | Sebuah subagent atau rekan tim dalam [tim agent](/docs/id/agent-teams) akan dimulai. Untuk rekan tim, `e.isTeammate` bernilai `true`. | `next({ ...e, model })` untuk memilih modelnya, atau `{ deny: reason }` |149| `agent.spawn` | Sebuah subagent atau rekan tim dalam [tim agent](/docs/id/agent-teams) akan dimulai. Untuk rekan tim, `e.isTeammate` bernilai `true`. | `next({ ...e, model })` untuk memilih modelnya, atau `{ deny: reason }` |

150 150 

151Saat Claude melanjutkan subagent dengan tool [`SendMessage`](/docs/id/sub-agents#resume-subagents), hook `agent.spawn` Anda tidak dijalankan lagi. Untuk menolak panggilan `SendMessage` yang melanjutkan subagent, cocokkan tool tersebut dalam hook [`tool.call`](/docs/id/plugins/mods/events#guard-or-change-a-tool-call).

152 

151<h3 id="interface">153<h3 id="interface">

152 Antarmuka154 Antarmuka

153</h3>155</h3>


175| [`plugin.register`](/docs/id/plugins/mods/admin#enforce-a-policy-with-a-mod-of-your-own) | Sebuah modul hook akan dimuat. `e.uses` mencantumkan event, panggilan API mod, environment variable, dan state-nya, sebagaimana dicetak oleh `claude plugin validate`. Setiap panggilan ditulis tanpa prefiks `$.`, seperti `fs.read`. | `{ refuse: reason }` |177| [`plugin.register`](/docs/id/plugins/mods/admin#enforce-a-policy-with-a-mod-of-your-own) | Sebuah modul hook akan dimuat. `e.uses` mencantumkan event, panggilan API mod, environment variable, dan state-nya, sebagaimana dicetak oleh `claude plugin validate`. Setiap panggilan ditulis tanpa prefiks `$.`, seperti `fs.read`. | `{ refuse: reason }` |

176| `engine.create` | API mod sedang dibangun untuk mod ini | API mod yang diubah, untuk menambahkan namespace. Mod di luar [tingkat](#the-hook-function) `user` juga dapat menahan salah satunya. |178| `engine.create` | API mod sedang dibangun untuk mod ini | API mod yang diubah, untuk menambahkan namespace. Mod di luar [tingkat](#the-hook-function) `user` juga dapat menahan salah satunya. |

177 179 

180Saat hook mod lain memanggil metode pada namespace yang Anda tambahkan dalam `engine.create`, panggilan `$` dari metode Anda dijalankan dalam konteks hook tersebut hingga setiap hook pada event tersebut kembali. Misalnya, path relatif di-resolve terhadap direktori kerja hook tersebut, dan `$.prompt.submit` ditolak selama giliran sedang menunggu hook tersebut. Panggilan yang dilakukan metode Anda setelah itu dijalankan dalam konteks mod Anda sendiri.

181 

178<h3 id="telemetry">182<h3 id="telemetry">

179 Telemetri183 Telemetri

180</h3>184</h3>


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

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

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

324| Body permintaan `$.http.fetch` | 4 MiB, dihitung dalam karakter. Panggilan dengan body yang lebih besar akan ditolak (reject). |

325| Body respons `$.http.fetch` | 4 MiB. `text` berisi 4 MiB pertama dan sisanya tidak dibaca. Ketika header `Content-Length` menyatakan ukuran yang lebih besar, panggilan tersebut justru ditolak (reject), dengan alasan yang diakhiri `is over the 4194304-byte limit`, kecuali jika permintaan terakhir setelah semua redirect menggunakan metode `HEAD`. Pengecualian `HEAD` memerlukan Claude Code v2.1.296 atau yang lebih baru. |

326| Satu panggilan `$.http.fetch`, termasuk redirect dan body | 30 detik |

327| Redirect yang diikuti oleh satu panggilan `$.http.fetch` | 5 |

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

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

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

Details

78| `disableAllHooks in managed settings` | Organisasi Anda mematikan hooks dari plugin yang diinstal |78| `disableAllHooks in managed settings` | Organisasi Anda mematikan hooks dari plugin yang diinstal |

79| `only managed plugins and built-in plugins run` | `allowManagedHooksOnly` diatur, atau `disableAllHooks` diatur dalam file pengaturan selain pengaturan terkelola |79| `only managed plugins and built-in plugins run` | `allowManagedHooksOnly` diatur, atau `disableAllHooks` diatur dalam file pengaturan selain pengaturan terkelola |

80| `installed plugins that are not managed load no hooks module in this mode (--bare)` | Anda memulai Claude Code dengan `--bare` |80| `installed plugins that are not managed load no hooks module in this mode (--bare)` | Anda memulai Claude Code dengan `--bare` |

81| `another plugin of that name loads first` | Dua plugin berbagi nama. Yang terkelola, atau yang dimuat terlebih dahulu, digunakan. |81| `another plugin of that name loads first` | Plugin lain yang diaktifkan memiliki nama yang sama dengan mod Anda dan [memegang nama tersebut](/docs/id/plugins/loading#hooks-when-two-enabled-plugins-share-a-name), sehingga modul hook Anda tidak dimuat |

82 82 

83<h3 id="messages-from-the-built-in-guard">83<h3 id="messages-from-the-built-in-guard">

84 Pesan dari built-in guard84 Pesan dari built-in guard


191 191 

192Sebelum v2.1.292, panggilan tersebut dijalankan untuk kedua kalinya, sehingga prompt dikirimkan, perintah dijalankan, atau subagent dimulai dua kali.192Sebelum v2.1.292, panggilan tersebut dijalankan untuk kedua kalinya, sehingga prompt dikirimkan, perintah dijalankan, atau subagent dimulai dua kali.

193 193 

194<h3 id="$-agent-register-refused-the-hooks-module-that-made-the-call-is-no-longer-loaded">

195 `$.agent.register refused: the hooks module that made the call is no longer loaded`

196</h3>

197 

198Baris dimulai dengan nama mod Anda, seperti `first-mod: $.agent.register refused: the hooks module that made the call is no longer loaded (it was reloaded or removed)`, dan agent tidak terdaftar. Mod Anda dimuat ulang atau dibongkar sebelum panggilan tersebut. Pemuatan ulang memuat salinan baru dari modul hook, dan panggilan ini berasal dari kode yang masih berjalan di salinan lama, seperti hook yang belum selesai mengembalikan hasil.

199 

200Jika hook tersebut tidak menangkap penolakan, hook akan gagal dan Claude Code [melewatinya](#hook-skipped). Untuk mendaftarkan agent dari salinan yang tetap dimuat, lakukan panggilan tersebut di hook [`session.start`](/docs/id/plugins/mods/reference#session) Anda, yang dijalankan lagi di setiap salinan baru setelah pemuatan ulang.

201 

194<h3 id="mods-that-run-in-the-hooks-worker-are-off-for-this-session">202<h3 id="mods-that-run-in-the-hooks-worker-are-off-for-this-session">

195 `mods that run in the hooks worker are off for this session`203 `mods that run in the hooks worker are off for this session`

196</h3>204</h3>

Details

256 256 

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

258 258 

259<h3 id="claude-code-reserves-this-name">

260 `Cannot add marketplace "<name>": Claude Code reserves this name and cannot register a marketplace under it`

261</h3>

262 

263Anda menambahkan marketplace, dan [`name`](/docs/id/plugins/marketplace-reference#top-level-fields) di `marketplace.json`-nya adalah salah satu nama anggota yang dimiliki setiap objek JavaScript, seperti `constructor`, `toString`, atau `valueOf`. Claude Code mencadangkan nama-nama tersebut, sehingga menolak penambahan tersebut dan tidak mendaftarkan apa pun. [Nama yang dicadangkan](/docs/id/plugins/marketplace-reference#reserved-names) mencantumkannya.

264 

265Dalam contoh ini, marketplace bernama `constructor`:

266 

267```text theme={null}

268Cannot add marketplace "constructor": Claude Code reserves this name and cannot register a marketplace under it. The name is set by "name" in the marketplace's marketplace.json; ask its maintainer to change it.

269```

270 

271Jika file pengaturan mendeklarasikan marketplace di bawah [`extraKnownMarketplaces`](/docs/id/settings-reference#extraknownmarketplaces), upaya Claude Code untuk menambahkannya saat startup gagal dengan cara yang sama, dan pesan tersebut muncul di tab **Errors** di `/plugin`.

272 

273Berikan marketplace nama lain, lalu tambahkan lagi:

274 

275* **Anda memiliki marketplace**: ubah `name` di `marketplace.json`

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

277 

278Sebelum v2.1.296, menambahkan marketplace seperti itu gagal dengan kesalahan internal alih-alih pesan ini.

279 

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

260 `SSH authentication failed` or `HTTPS authentication failed`281 `SSH authentication failed` or `HTTPS authentication failed`

261</h3>282</h3>


907 Hook loads but never fires928 Hook loads but never fires

908</h4>929</h4>

909 930 

910Jika hook memuat tanpa kesalahan tetapi tidak pernah menyala, periksa definisinya lalu tonton itu berjalan:931Jika hook memuat tanpa kesalahan tetapi tidak pernah menyala, pertama-tama jalankan `/plugin` dalam sesi Anda dan buka detail plugin. Catatan di sana yang diawali dengan `Its hooks.json hooks do not run` berarti plugin lain yang diaktifkan dengan nama yang sama telah mendaftarkan hook-nya sebagai gantinya, dan [Hooks when two enabled plugins share a name](/docs/id/plugins/loading#hooks-when-two-enabled-plugins-share-a-name) menjelaskan salinan mana itu dan cara beralih. Jika tidak, periksa definisi hook lalu amati saat hook berjalan:

911 932 

912<Steps>933<Steps>

913 <Step title="Check the event name">934 <Step title="Check the event name">

routines.md +3 −3

Details

86 </Step>86 </Step>

87 87 

88 <Step title="Pilih repositori">88 <Step title="Pilih repositori">

89 Tambahkan satu atau lebih repositori GitHub untuk Claude kerjakan. Setiap repositori diklon di awal jalankan, dimulai dari cabang default. Claude membuat cabang dengan awalan `claude/` untuk perubahannya.89 Tambahkan satu atau lebih repositori GitHub untuk dikerjakan Claude. Setiap repositori diklon di awal run. Claude membuat branch dengan awalan `claude/` untuk perubahannya.

90 </Step>90 </Step>

91 91 

92 <Step title="Pilih lingkungan">92 <Step title="Pilih lingkungan">


359 Repositori dan izin cabang359 Repositori dan izin cabang

360</h3>360</h3>

361 361 

362Rutinitas memerlukan akses GitHub untuk mengklon repositori. Ketika Anda membuat rutinitas dari CLI dengan `/schedule`, Claude memeriksa apakah akun Anda memiliki akses GitHub untuk repositori tempat Anda menjalankannya dan, jika tidak, menambahkan catatan penyiapan yang menamai cara memberikan akses. Lihat [GitHub authentication options](/docs/id/claude-code-on-the-web#github-authentication-options) untuk dua cara memberikan akses.362Routine memerlukan akses GitHub untuk mengklon repositori. Ketika Anda membuat routine dari CLI dengan `/schedule`, Claude memeriksa apakah akun Anda memiliki akses GitHub untuk repositori tempat Anda menjalankannya dan, jika tidak, menambahkan catatan penyiapan yang menjelaskan cara memberikan akses tersebut. Lihat [GitHub authentication options](/docs/id/claude-code-on-the-web#github-authentication-options) untuk dua cara memberikan akses. Pada paket Team dan Enterprise, seorang [Owner](/docs/id/server-managed-settings#access-control) organisasi Claude Anda harus mengaktifkan setiap metode sebelum Anda dapat menggunakannya; lihat [Connect GitHub](/docs/id/web-quickstart#connect-github).

363 363 

364Jika koneksi GitHub Anda hilang atau kedaluwarsa ketika jalankan akan dilakukan, rutinitas melewati jalankan hingga Anda terhubung kembali, hingga 72 jam. Hubungkan kembali GitHub dalam jendela tersebut dan rutinitas akan dilanjutkan dengan sendirinya. Setelah 72 jam tanpa koneksi, rutinitas mati, dan Anda menghidupkannya kembali setelah terhubung kembali ke GitHub.364Jika koneksi GitHub Anda hilang atau kedaluwarsa ketika jalankan akan dilakukan, rutinitas melewati jalankan hingga Anda terhubung kembali, hingga 72 jam. Hubungkan kembali GitHub dalam jendela tersebut dan rutinitas akan dilanjutkan dengan sendirinya. Setelah 72 jam tanpa koneksi, rutinitas mati, dan Anda menghidupkannya kembali setelah terhubung kembali ke GitHub.

365 365 

366Setiap repositori yang Anda tambahkan diklon pada setiap jalankan. Claude dimulai dari cabang default repositori kecuali prompt Anda menentukan sebaliknya.366Setiap repositori yang Anda tambahkan diklon pada setiap eksekusi. Claude memulai dari branch default repositori kecuali prompt Anda menentukan sebaliknya. Jika sebuah [peristiwa pull request GitHub](#add-a-github-trigger) memicu eksekusi dan repositori pull request tersebut adalah repositori pertama dalam routine, repositori tersebut dimulai dari head commit pull request.

367 367 

368Claude melakukan push pekerjaannya ke branch dengan awalan `claude/` kecuali prompt Anda mengarahkannya untuk melakukan push ke branch lain. Untuk mengontrol branch mana yang dapat menjadi tujuan push suatu eksekusi, gunakan aturan perlindungan branch atau ruleset di GitHub. Untuk eksekusi pada infrastruktur yang dikelola Anthropic, dan untuk eksekusi self-hosted yang melakukan push melalui [proxy git Anthropic](/docs/id/self-hosted-environments-deploy#use-the-anthropic-git-proxy), GitHub menerapkannya pada akses GitHub yang Anda hubungkan, sehingga aturan yang dapat dilewati oleh akses tersebut tidak memblokir push suatu eksekusi. Eksekusi self-hosted yang melakukan push dengan kredensial git yang disediakan deployment Anda akan diperiksa terhadap kredensial tersebut. Lihat [Konfigurasi git](/docs/id/self-hosted-environments-deploy#configure-git).368Claude melakukan push pekerjaannya ke branch dengan awalan `claude/` kecuali prompt Anda mengarahkannya untuk melakukan push ke branch lain. Untuk mengontrol branch mana yang dapat menjadi tujuan push suatu eksekusi, gunakan aturan perlindungan branch atau ruleset di GitHub. Untuk eksekusi pada infrastruktur yang dikelola Anthropic, dan untuk eksekusi self-hosted yang melakukan push melalui [proxy git Anthropic](/docs/id/self-hosted-environments-deploy#use-the-anthropic-git-proxy), GitHub menerapkannya pada akses GitHub yang Anda hubungkan, sehingga aturan yang dapat dilewati oleh akses tersebut tidak memblokir push suatu eksekusi. Eksekusi self-hosted yang melakukan push dengan kredensial git yang disediakan deployment Anda akan diperiksa terhadap kredensial tersebut. Lihat [Konfigurasi git](/docs/id/self-hosted-environments-deploy#configure-git).

369 369 

sandboxing.md +1 −0

Details

203* Perintah `rm` atau `rmdir` yang menargetkan [jalur kritis](/docs/id/permission-modes#critical-paths) tetap melalui alur izin biasa203* Perintah `rm` atau `rmdir` yang menargetkan [jalur kritis](/docs/id/permission-modes#critical-paths) tetap melalui alur izin biasa

204* [Aturan ask](/docs/id/permissions) yang dibatasi konten seperti `Bash(git push *)` tetap memaksa munculnya permintaan izin bahkan untuk perintah yang di-sandbox204* [Aturan ask](/docs/id/permissions) yang dibatasi konten seperti `Bash(git push *)` tetap memaksa munculnya permintaan izin bahkan untuk perintah yang di-sandbox

205* Aturan ask `Bash` polos, atau bentuk setaranya `Bash(*)`, dilewati untuk perintah yang berjalan di-sandbox; aturan ini tetap berlaku untuk perintah yang kembali ke alur izin biasa. Dalam [plan mode](/docs/id/permission-modes#analyze-before-you-edit-with-plan-mode), aturan ini tidak dilewati: aturan ini memunculkan permintaan izin untuk perintah yang di-sandbox juga, termasuk yang read-only205* Aturan ask `Bash` polos, atau bentuk setaranya `Bash(*)`, dilewati untuk perintah yang berjalan di-sandbox; aturan ini tetap berlaku untuk perintah yang kembali ke alur izin biasa. Dalam [plan mode](/docs/id/permission-modes#analyze-before-you-edit-with-plan-mode), aturan ini tidak dilewati: aturan ini memunculkan permintaan izin untuk perintah yang di-sandbox juga, termasuk yang read-only

206* Perintah [tool Monitor](/docs/id/tools-reference#monitor-tool) tidak disetujui secara otomatis, meskipun tetap berjalan di dalam sandbox. Untuk melewati permintaan izin, tambahkan [aturan allow](/docs/id/permissions#bash) yang cocok dengan perintah tersebut, seperti `Bash(npm run *)`

206 207 

207<Info>208<Info>

208 Mode auto-allow bekerja secara independen dari pengaturan mode izin Anda, dengan tiga pengecualian: [plan mode](/docs/id/permission-modes#analyze-before-you-edit-with-plan-mode), perintah auto mode yang membawa [domain yang diizinkan per perintah](#per-command-allowed-domains-in-auto-mode), dan [peninjauan pengklasifikasi sisi server](/docs/id/permission-modes#how-the-classifier-evaluates-actions) terhadap perintah yang di-sandbox dalam auto mode. Meskipun Anda tidak berada dalam mode "accept edits", perintah Bash yang di-sandbox berjalan secara otomatis ketika auto-allow diaktifkan. Ini berarti perintah Bash yang memodifikasi file di dalam batas sandbox dieksekusi tanpa permintaan izin, bahkan dalam mode Manual, di mana tool pengeditan file akan memunculkan permintaan izin.209 Mode auto-allow bekerja secara independen dari pengaturan mode izin Anda, dengan tiga pengecualian: [plan mode](/docs/id/permission-modes#analyze-before-you-edit-with-plan-mode), perintah auto mode yang membawa [domain yang diizinkan per perintah](#per-command-allowed-domains-in-auto-mode), dan [peninjauan pengklasifikasi sisi server](/docs/id/permission-modes#how-the-classifier-evaluates-actions) terhadap perintah yang di-sandbox dalam auto mode. Meskipun Anda tidak berada dalam mode "accept edits", perintah Bash yang di-sandbox berjalan secara otomatis ketika auto-allow diaktifkan. Ini berarti perintah Bash yang memodifikasi file di dalam batas sandbox dieksekusi tanpa permintaan izin, bahkan dalam mode Manual, di mana tool pengeditan file akan memunculkan permintaan izin.

Details

132Runner dan sesinya membuat beberapa jenis koneksi keluar, dan tidak ada konektivitas masuk dari Anthropic yang diperlukan:132Runner dan sesinya membuat beberapa jenis koneksi keluar, dan tidak ada konektivitas masuk dari Anthropic yang diperlukan:

133 133 

134* **Control plane**: runner polling `api.anthropic.com` untuk pekerjaan dan posting peristiwa kemajuan setup dan kegagalan, semua HTTPS keluar. Polling berfungsi ganda sebagai detak jantung runner.134* **Control plane**: runner polling `api.anthropic.com` untuk pekerjaan dan posting peristiwa kemajuan setup dan kegagalan, semua HTTPS keluar. Polling berfungsi ganda sebagai detak jantung runner.

135* **SCM connector**: orchestrator opsional [SCM connector](/docs/id/self-hosted-environments-reference#scm-connector-flags) tunnel adalah satu-satunya koneksi WebSocket.135* **Git**: runner mengkloning dari dan melakukan push ke host git Anda melalui HTTPS atau SSH, diautentikasi dengan kredensial yang disediakan deployment Anda. Lihat [Konfigurasi git](/docs/id/self-hosted-environments-deploy#configure-git) untuk opsinya, termasuk kredensial yang dicetak per sesi. Dengan [proxy git Anthropic](/docs/id/self-hosted-environments-deploy#use-the-anthropic-git-proxy), lalu lintas git untuk repositori di github.com melewati `api.anthropic.com` sebagai gantinya.

136* **Git**: runner mengkloning dari dan mendorong ke host git Anda melalui HTTPS atau SSH, diautentikasi dengan kredensial yang disediakan deployment Anda; [Konfigurasi git](/docs/id/self-hosted-environments-deploy#configure-git) mencakup opsinya, termasuk kredensial yang dicetak per-sesi dan [proxy git Anthropic](/docs/id/self-hosted-environments-deploy#use-the-anthropic-git-proxy), yang merutekan git melalui `api.anthropic.com` sebagai gantinya.136* **Session child**: proses Claude Code anak memegang stream peristiwa sesi ke `api.anthropic.com`, dan membuat panggilan keluarnya sendiri untuk inferensi model dan untuk perintah git yang dijalankan selama sesi. Dalam sesi yang menggunakan [git yang dikelola Anthropic](/docs/id/self-hosted-environments-deploy#use-the-anthropic-git-proxy), proses anak mengirim lalu lintas `git` dan `gh` untuk github.com melalui koneksi WebSocket yang dibukanya ke `api.anthropic.com`.

137* **Session child**: proses Claude Code anak menyimpan aliran peristiwa sesi ke `api.anthropic.com`, dan membuat panggilan keluar miliknya sendiri untuk inferensi model dan untuk perintah git yang dijalankan selama sesi. Lihat [Persyaratan jaringan](/docs/id/self-hosted-environments-deploy#network-requirements) untuk daftar egress lengkap. [Diagram di atas](#how-self-hosted-environments-work) menunjukkan jalur ini, terlepas dari SCM connector opsional.137* **SCM connector**: [SCM connector](/docs/id/self-hosted-environments-reference#scm-connector-flags) orchestrator yang opsional tidak tersedia, sehingga tunnel-nya tidak terbuka. Tunnel tersebut adalah koneksi WebSocket ke `api.anthropic.com`.

138 

139Lihat [Persyaratan jaringan](/docs/id/self-hosted-environments-deploy#network-requirements) untuk daftar egress lengkap. [Diagram di atas](#how-self-hosted-environments-work) menunjukkan jalur-jalur ini, kecuali SCM connector opsional dan koneksi git yang dikelola Anthropic.

138 140 

139Secara default, inferensi model menggunakan Anthropic API. Control plane mengirimkan endpoint API ke setiap sesi, dan sesi mengautentikasi dengan token OAuth yang diterbitkan Anthropic dan berlingkup sesi. Untuk mengirim permintaan model ke akun cloud Anda sendiri sebagai gantinya, lihat [Kirim permintaan model ke Bedrock atau Agent Platform](/docs/id/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform).141Secara default, inferensi model menggunakan Anthropic API. Control plane mengirimkan endpoint API ke setiap sesi, dan sesi mengautentikasi dengan token OAuth yang diterbitkan Anthropic dan berlingkup sesi. Untuk mengirim permintaan model ke akun cloud Anda sendiri sebagai gantinya, lihat [Kirim permintaan model ke Bedrock atau Agent Platform](/docs/id/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform).

140 142 

Details

31| Variabel | Deskripsi |31| Variabel | Deskripsi |

32| :- | :- |32| :- | :- |

33| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | JWT sesi, diawali dengan `sk-ant-cc-`. Klaim `act` mengidentifikasi pembuat sesi, dengan email pembuat ketika surface pembuatan merekamnya. Nilainya adalah token pada waktu pemijahan; penyegaran tiba melalui stdin anak, jadi wrapper hanya melihat nilai awal. Lihat [Verify session identity](/docs/id/self-hosted-environments-identity). |33| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | JWT sesi, diawali dengan `sk-ant-cc-`. Klaim `act` mengidentifikasi pembuat sesi, dengan email pembuat ketika surface pembuatan merekamnya. Nilainya adalah token pada waktu pemijahan; penyegaran tiba melalui stdin anak, jadi wrapper hanya melihat nilai awal. Lihat [Verify session identity](/docs/id/self-hosted-environments-identity). |

34| `CCR_SESSION_ACCOUNT_EMAIL` | Email pembuat sesi, pra-ekstrak oleh runner dari klaim `act.email` token tanpa verifikasi tanda tangan. Cocok untuk pelabelan, seperti trailer commit. Ketika email membuka akses penyediaan kredensial, verifikasi token dan baca klaim darinya; lihat [Provision credentials scoped to the session creator](#provision-credentials-scoped-to-the-session-creator). Tidak diatur ketika token tidak membawa email pembuat. Perlakukan sebagai informasi yang dapat diidentifikasi secara pribadi. |34| `CCR_SESSION_ACCOUNT_EMAIL` | Email pembuat sesi, pra-ekstrak oleh runner dari klaim `act.email` token tanpa verifikasi tanda tangan. Cocok untuk pelabelan, seperti trailer commit. Ketika email membuka akses penyediaan kredensial, verifikasi token dan baca klaim darinya sebagai gantinya. Lihat [Provision credentials scoped to the session creator](#provision-credentials-scoped-to-the-session-creator). Tidak diatur ketika token tidak membawa email pembuat, misalnya pada sesi yang dibuat oleh identitas layanan organisasi Anda. Perlakukan sebagai informasi yang dapat diidentifikasi secara pribadi. |

35| `CLAUDE_RUNNER_CLIENT_PLATFORM` | Surface klien yang membuat sesi, seperti `web_claude_ai`, `desktop_app`, `ios`, `claude_code_cli`, atau `scheduled_trigger`. Anthropic merekam nilainya sekali saat pembuatan sesi, jadi wrapper dan setiap hook siklus hidup melihat nilai yang sama. Gunakan untuk analitik adopsi dan pelabelan saja, bukan sebagai sinyal otorisasi. Tidak diatur ketika sesi tidak memiliki surface yang tercatat atau dikenali, jadi referensikan sebagai `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}` di bawah `set -u`. Memerlukan Claude Code v2.1.229 atau lebih baru. |35| `CLAUDE_RUNNER_CLIENT_PLATFORM` | Surface klien yang membuat sesi, seperti `web_claude_ai`, `desktop_app`, `ios`, `claude_code_cli`, atau `scheduled_trigger`. Anthropic merekam nilainya sekali saat pembuatan sesi, jadi wrapper dan setiap hook siklus hidup melihat nilai yang sama. Gunakan untuk analitik adopsi dan pelabelan saja, bukan sebagai sinyal otorisasi. Tidak diatur ketika sesi tidak memiliki surface yang tercatat atau dikenali. Memerlukan Claude Code v2.1.229 atau lebih baru. |

36| `CLAUDE_RUNNER_CLAUDE_BIN` | Jalur absolut ke biner Claude Code runner sendiri. Akhiri wrapper Anda dengan `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` untuk menyerahkan ke biner yang disematkan tanpa hardcoding jalur instalasi. |36| `CLAUDE_RUNNER_CLAUDE_BIN` | Jalur absolut ke biner Claude Code runner sendiri. Akhiri wrapper Anda dengan `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` untuk menyerahkan ke biner yang disematkan tanpa hardcoding jalur instalasi. |

37| `CLAUDE_CODE_REMOTE_SESSION_ID` | ID sesi dalam bentuk `cse_...` yang ditandai. Ini adalah sesi yang sama yang dilihat [lifecycle hooks](#lifecycle-hooks) sebagai `CLAUDE_RUNNER_SESSION_ID` dalam bentuk `session_...`; variabel UUID cocok di kedua sisi, dan mengganti awalan `cse_` dengan `session_` menghasilkan ID yang ditampilkan di URL sesi. |37| `CLAUDE_CODE_REMOTE_SESSION_ID` | ID sesi dalam bentuk `cse_...` yang ditandai. Ini adalah sesi yang sama yang dilihat [lifecycle hooks](#lifecycle-hooks) sebagai `CLAUDE_RUNNER_SESSION_ID` dalam bentuk `session_...`; variabel UUID cocok di kedua sisi, dan mengganti awalan `cse_` dengan `session_` menghasilkan ID yang ditampilkan di URL sesi. |

38| `CLAUDE_CODE_REMOTE_SESSION_UUID` | ID sesi yang sama dalam bentuk UUID kanonik, untuk sistem yang menggunakan UUID sebagai kunci. |38| `CLAUDE_CODE_REMOTE_SESSION_UUID` | ID sesi yang sama dalam bentuk UUID kanonik, untuk sistem yang menggunakan UUID sebagai kunci. |

39| `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` | Untuk sesi [Claude Tag](https://claude.com/docs/claude-tag/overview) yang dimiliki oleh satu thread Slack, tautan ke thread tersebut. Tidak diatur untuk sesi lain, dan dapat juga tidak diatur untuk sesi thread. |

40| `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` | Untuk sesi Claude Tag yang dimiliki oleh satu thread Slack, timestamp Slack thread tersebut, seperti `1700000000.000100`. Dapat tidak diatur, dan dapat diatur ketika `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` tidak diatur, jadi periksa setiap variabel secara terpisah. |

39| `CLAUDE_SESSION_INGRESS_TOKEN_FILE` | Jalur absolut ke file per-sesi yang menyimpan JWT sesi saat ini, tetap segar di seluruh penyegaran token. Subproses shell membacanya untuk header `Authorization` mereka saat mengunduh lampiran yang ditambahkan pengguna ke sesi. `exec` menyimpan variabel secara otomatis; wrapper yang membangun kembali lingkungan anak harus membawa variabel, atau unduhan lampiran berhenti bekerja diam-diam. |41| `CLAUDE_SESSION_INGRESS_TOKEN_FILE` | Jalur absolut ke file per-sesi yang menyimpan JWT sesi saat ini, tetap segar di seluruh penyegaran token. Subproses shell membacanya untuk header `Authorization` mereka saat mengunduh lampiran yang ditambahkan pengguna ke sesi. `exec` menyimpan variabel secara otomatis; wrapper yang membangun kembali lingkungan anak harus membawa variabel, atau unduhan lampiran berhenti bekerja diam-diam. |

40| `CLAUDE_CONFIG_DIR` | Direktori konfigurasi Claude per-sesi, ditulis saat awal sesi dari snapshot konfigurasi host runner yang ditangkap runner saat startup; lihat [Permissions and tool approval](#permissions-and-tool-approval). Penulisan di sini terisolasi ke sesi ini. Direktori tetap di bawah `<base-dir>/_sessions/` setelah sesi berakhir kecuali Anda memulai runner dengan [`--remove-session-state`](/docs/id/self-hosted-environments-reference#runner-cli-flags); lihat [Reuse a pre-warmed checkout](/docs/id/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout). |42| `CLAUDE_CONFIG_DIR` | Direktori konfigurasi Claude per-sesi, ditulis saat awal sesi dari snapshot konfigurasi host runner yang ditangkap runner saat startup; lihat [Permissions and tool approval](#permissions-and-tool-approval). Penulisan di sini terisolasi ke sesi ini. Direktori tetap di bawah `<base-dir>/_sessions/` setelah sesi berakhir kecuali Anda memulai runner dengan [`--remove-session-state`](/docs/id/self-hosted-environments-reference#runner-cli-flags); lihat [Reuse a pre-warmed checkout](/docs/id/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout). |

41| `ANTHROPIC_BASE_URL` | URL dasar API yang akan digunakan anak, dikirimkan oleh bidang kontrol per sesi dan biasanya `https://api.anthropic.com`. Jangan timpa: kredensial inferensi sesi adalah token OAuth yang dikeluarkan Anthropic yang tidak diterima penyedia lain. |43| `ANTHROPIC_BASE_URL` | URL dasar API yang akan digunakan anak, dikirimkan oleh bidang kontrol per sesi dan biasanya `https://api.anthropic.com`. Jangan timpa: kredensial inferensi sesi adalah token OAuth yang dikeluarkan Anthropic yang tidak diterima penyedia lain. |


43 45 

44Wrapper juga mewarisi sisa lingkungan anak yang dikelola, termasuk environment variable yang disediakan server. `exec` menyebarkan semuanya secara otomatis; jika wrapper Anda memijahkan anak dengan cara lain, teruskan lingkungan lengkap.46Wrapper juga mewarisi sisa lingkungan anak yang dikelola, termasuk environment variable yang disediakan server. `exec` menyebarkan semuanya secara otomatis; jika wrapper Anda memijahkan anak dengan cara lain, teruskan lingkungan lengkap.

45 47 

48`CLAUDE_CODE_REMOTE_SLACK_THREAD_URL` dan `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` sampai ke wrapper Anda atau [hook `command`](#command). Variabel tersebut juga sampai ke apa yang dijalankan sesi, seperti perintah shell, hook git, dan hook Claude Code. Hook `checkout`, `post-session`, dan `spawn-runner` tidak menerimanya.

49 

50<h3 id="give-a-default-to-variables-that-can-be-unset">

51 Berikan nilai default untuk variabel yang dapat tidak diatur

52</h3>

53 

54`CCR_SESSION_ACCOUNT_EMAIL`, `CLAUDE_RUNNER_CLIENT_PLATFORM`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL`, dan `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS` masing-masing dapat tidak diatur. Jika skrip Anda menggunakan `set -u`, Bash berhenti dengan `unbound variable` ketika mengekspansi variabel yang tidak diatur, jadi ekspansikan dengan nilai default, seperti `${CCR_SESSION_ACCOUNT_EMAIL:-}`.

55 

56Di mana pun shell mengekspansi tautan thread Slack, lakukan tindakan pencegahan berikut:

57 

58* **Beri tanda kutip**: tautan dapat berisi karakter yang diproses shell, seperti `?` dan `&`, jadi beri tanda kutip pada variabel, seperti dalam `"${CLAUDE_CODE_REMOTE_SLACK_THREAD_URL:-}"`.

59* **Jauhkan nilainya dari string `eval` dan `sh -c`**: jangan substitusikan nilainya ke dalam string yang dijalankan `eval` atau `sh -c`, bahkan di dalam tanda kutip. Buat string tersebut mereferensikan variabelnya sebagai gantinya.

60 

46<h3 id="keep-stdin-and-file-descriptor-3-attached">61<h3 id="keep-stdin-and-file-descriptor-3-attached">

47 Jaga stdin dan file descriptor 3 terlampir62 Jaga stdin dan file descriptor 3 terlampir

48</h3>63</h3>

49 64 

50Stdin anak adalah saluran kontrol runner. Rotasi token dan sinyal akhir sesi tiba di atasnya. Runner juga membuka pipa pada file descriptor 3 dan membaca sinyal aktivitas anak darinya untuk mendorong timeout idle dan startup. `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` biasa menyimpan keduanya secara otomatis.65Stdin anak adalah saluran kontrol runner. Rotasi token dan sinyal akhir sesi tiba di atasnya. Runner juga membuka pipa pada file descriptor 3 dan membaca sinyal aktivitas anak darinya untuk mendorong timeout idle dan startup. `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"` biasa menyimpan keduanya secara otomatis.

51 66 

52Jika wrapper Anda menempatkan anak di latar belakang dengan `&` telanjang, itu memutus stdin anak: sesi terlihat sehat sampai masa pakai token OAuth awal sekitar 30 menit berakhir, kemudian setiap panggilan API gagal dengan `401 authentication_error`. Jika wrapper Anda harus menempatkan anak di latar belakang, misalnya untuk menjaga perangkap pembongkaran tetap hidup, simpan stdin pada file descriptor 4 atau lebih tinggi dan lampirkan kembali secara eksplisit:67Jika wrapper Anda menempatkan anak di latar belakang dengan `&` telanjang, itu memutus stdin anak. Sesi terlihat sehat sampai masa pakai token OAuth awal sekitar 30 menit berakhir, kemudian setiap panggilan API yang menggunakan token tersebut gagal dengan `401 authentication_error`. Jika wrapper Anda harus menempatkan anak di latar belakang, misalnya untuk menjaga perangkap pembongkaran tetap hidup, simpan stdin pada file descriptor 4 atau lebih tinggi dan lampirkan kembali secara eksplisit:

53 68 

54```bash theme={null}69```bash theme={null}

55exec 4<&070exec 4<&0


59wait "$CHILD"74wait "$CHILD"

60```75```

61 76 

62Jangan tutup atau gunakan kembali file descriptor 3 di wrapper. Mengalihkan stdout dan stderr anak tidak apa-apa.77Anda dapat mengalihkan stdout anak. Jaga file descriptor 3 dan stderr tetap terlampir ke runner:

78 

79* **File descriptor 3**: membawa sinyal aktivitas anak ke runner. Jangan tutup atau gunakan kembali di wrapper.

80* **stderr**: ketika wrapper atau anak keluar dengan kode bukan nol, runner mengirimkan baris-baris terakhir stderr ke sesi dan mencetaknya di log-nya sendiri. Pengguna sesi melihat baris-baris tersebut, jadi jangan cetak rahasia ke stderr, dan hapus `set -x` sebelum Anda men-deploy wrapper. Jika Anda mengalihkan stderr, sesi tetap berjalan, tetapi runner melaporkan kegagalan hanya dengan exit code.

63 81 

64<h3 id="pass-the-system-prompt-flags-through">82<h3 id="pass-the-system-prompt-flags-through">

65 Teruskan flag system prompt83 Teruskan flag system prompt


108 checkout126 checkout

109</h3>127</h3>

110 128 

111Berjalan sekali per repositori, sebagai pengganti klon dan fetch bawaan runner. Gunakan hook untuk mengkloning dari mirror read-through, mengisi working tree dari arsip, atau menerapkan autentikasi git per-sesi. Runner menetapkan variabel-variabel ini, dan dapat menetapkan variabel `CLAUDE_RUNNER_` lain yang tidak tercantum dalam tabel:129Berjalan sekali per repositori, sebagai pengganti clone dan fetch bawaan runner. Gunakan hook untuk melakukan clone dari mirror read-through yang Anda jangkau melalui HTTPS atau SSH, mengisi working tree dari arsip, atau menerapkan autentikasi git per-sesi. Runner menetapkan variabel-variabel ini, dan dapat menetapkan variabel `CLAUDE_RUNNER_` lain yang tidak tercantum dalam tabel:

112 130 

113| Variabel | Deskripsi |131| Variabel | Deskripsi |

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

115| `CLAUDE_RUNNER_REPO_URL` | URL repositori untuk mengkloning, setelah `--git-host-rewrite` dan `--git-ssh-rewrite` apa pun telah diterapkan |133| `CLAUDE_RUNNER_REPO_URL` | URL repositori untuk mengkloning, setelah `--git-host-rewrite` dan `--git-ssh-rewrite` apa pun telah diterapkan |

116| `CLAUDE_RUNNER_REPO_REF` | Revisi untuk checkout: cabang, tag, atau commit SHA seperti yang diminta sesi. Kosong berarti cabang default repositori. |134| `CLAUDE_RUNNER_REPO_REF` | Revisi untuk di-checkout, sebagaimana diminta oleh sesi: branch, tag, commit SHA, atau nama referensi lengkap seperti `refs/pull/<number>/head`. Kosong berarti branch default repositori. |

117| `CLAUDE_RUNNER_CHECKOUT_PATH` | Jalur absolut di mana pohon kerja harus ditinggalkan |135| `CLAUDE_RUNNER_CHECKOUT_PATH` | Jalur absolut di mana pohon kerja harus ditinggalkan |

118| `CLAUDE_RUNNER_SESSION_ID` | ID sesi dalam bentuk `session_...` yang ditandai, untuk logging dan korelasi |136| `CLAUDE_RUNNER_SESSION_ID` | ID sesi dalam bentuk `session_...` yang ditandai, untuk logging dan korelasi |

119| `CLAUDE_RUNNER_SESSION_UUID` | ID sesi yang sama dalam bentuk UUID kanonik |137| `CLAUDE_RUNNER_SESSION_UUID` | ID sesi yang sama dalam bentuk UUID kanonik |

120| `CLAUDE_RUNNER_API_BASE_URL` | URL dasar API Anthropic untuk panggilan yang dibatasi sesi |138| `CLAUDE_RUNNER_API_BASE_URL` | URL dasar API Anthropic untuk panggilan yang dibatasi sesi |

121| `CLAUDE_RUNNER_CLIENT_PLATFORM` | Permukaan klien yang membuat sesi, seperti `web_claude_ai`, `desktop_app`, atau `ios`. Tidak diatur ketika sesi tidak memiliki permukaan yang tercatat atau dikenali. |139| `CLAUDE_RUNNER_CLIENT_PLATFORM` | Surface klien yang membuat sesi, seperti `web_claude_ai`, `desktop_app`, atau `ios`. Tidak diatur ketika sesi tidak memiliki surface yang tercatat atau dikenali, jadi rujuk sebagai `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}` di bawah `set -u`. Memerlukan Claude Code v2.1.229 atau lebih baru. |

122| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Token akses sesi, untuk panggilan API yang dibatasi sesi |140| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Token akses sesi, untuk panggilan API yang dibatasi sesi |

123| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Pengaturan git yang ditetapkan runner untuk git yang dijalankan hook Anda. [Konfigurasi Git di dalam lifecycle hooks](#git-configuration-inside-lifecycle-hooks) menjelaskannya. Memerlukan Claude Code v2.1.280 atau lebih baru. |141| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Pengaturan git yang ditetapkan runner untuk git yang dijalankan hook Anda. [Konfigurasi Git di dalam lifecycle hooks](#git-configuration-inside-lifecycle-hooks) menjelaskannya. Memerlukan Claude Code v2.1.280 atau lebih baru. |

124 142 

125Skrip harus meninggalkan pohon kerja di `CLAUDE_RUNNER_CHECKOUT_PATH` yang diperiksa pada revisi yang diminta. Detached HEAD tidak apa-apa; runner membuat cabang kerja sesi di atasnya. Runner memverifikasi jalur berisi `.git` sesudahnya; jika hook Anda mewujudkan sumber non-git seperti Perforce atau tarball yang dibuka, atur `CLAUDE_RUNNER_SKIP_GIT_VERIFY=1` di lingkungan runner untuk melewati pemeriksaan itu. Alur berbasis Git seperti pembuatan cabang kerja dan hasil push memerlukan checkout git, jadi ekspor hasil dari pohon non-git dengan hook [`post-session`](#post-session).143Skrip harus meninggalkan working tree di `CLAUDE_RUNNER_CHECKOUT_PATH` yang di-checkout pada revisi yang diminta. Detached HEAD dapat digunakan, karena runner membuat branch kerja sesi di atasnya.

126 144 

127Runner tidak melewatkan kredensial git ke hook. Sebaliknya, cetak kredensial klon per-sesi dari identitas sesi: verifikasi `CLAUDE_CODE_SESSION_ACCESS_TOKEN` dengan perpustakaan JWT standar terhadap titik akhir JWKS di bawah `CLAUDE_RUNNER_API_BASE_URL`, seperti yang dijelaskan dalam [Verify the token from your service](/docs/id/self-hosted-environments-identity#verify-the-token-from-your-service), kemudian buat layanan kredensial Anda mengeluarkan kredensial klon jangka pendek untuk identitas dalam klaim `act` token. `CLAUDE_RUNNER_CLAUDE_BIN` tidak diatur di lingkungan checkout-hook, jadi subperintah `decode-token` tidak tersedia di sini. Kembali ke apa pun autentikasi git yang sudah dimiliki host, seperti agen SSH, pembantu kredensial, atau `.netrc`, juga merupakan pilihan.145Setelah hook Anda selesai, runner memverifikasi bahwa `CLAUDE_RUNNER_CHECKOUT_PATH` berisi `.git`. Jika hook Anda mewujudkan sumber non-git seperti Perforce atau tarball yang telah dibongkar, atur `CLAUDE_RUNNER_SKIP_GIT_VERIFY=1` di lingkungan runner untuk melewati pemeriksaan itu. Alur berbasis Git seperti pembuatan branch kerja dan push hasil memerlukan checkout git, jadi ekspor hasil dari tree non-git dengan [hook `post-session`](#post-session).

128 146 

129Ketika hook keluar bukan nol, atau keluar 0 tanpa meninggalkan checkout yang dapat digunakan di belakang, apa yang dilakukan runner tergantung pada repositori:147<h4 id="get-git-credentials-in-the-hook">

148 Mendapatkan kredensial git di dalam hook

149</h4>

130 150 

131* **Repositori yang sesi dorong hasil ke**: runner gagal sesi, dan pada keluar bukan nol permukaan ekor stderr skrip ke pengguna.151Runner tidak meneruskan kredensial git ke hook. Subperintah `decode-token` juga tidak tersedia di sini, karena `CLAUDE_RUNNER_CLAUDE_BIN` tidak diatur di lingkungan checkout-hook. Sebagai gantinya, buat kredensial clone per-sesi dari identitas sesi, atau gunakan autentikasi git milik host sendiri sebagai alternatif:

132* **Repositori yang hanya dibaca sesi**, seperti repositori yang ditambahkan ke sesi yang berjalan: runner mencatat baris `[runner:warn]` dengan detail kegagalan, memposting langkah `Skipped` ke sesi, menghapus apa pun yang ditinggalkan hook di jalur checkout, dan melanjutkan dengan repositori yang tersisa. Ketika runner tidak dapat menghapus jalur segera, itu mencoba penghapusan lagi saat akhir sesi. Jika melewati meninggalkan sesi tanpa repositori sama sekali, runner gagal sesi pula.

133 152 

134Sebelum v2.1.228, runner gagal sesi pada kegagalan hook untuk repositori apa pun, jadi repositori hanya-baca yang tidak dapat dilayani hook gagal sesi lagi pada setiap runner segar yang dilanjutkan sesi.153* **Kredensial clone per-sesi**: verifikasi `CLAUDE_CODE_SESSION_ACCESS_TOKEN` dengan library JWT standar terhadap endpoint JWKS di bawah `CLAUDE_RUNNER_API_BASE_URL`, seperti yang dijelaskan dalam [Verify the token from your service](/docs/id/self-hosted-environments-identity#verify-the-token-from-your-service). Kemudian minta layanan kredensial Anda menerbitkan kredensial clone berumur pendek untuk identitas dalam klaim `act` token. Kaitkan kredensial tersebut dengan `act.sub`, dan jangan mewajibkan `act.email`.

154* **Autentikasi git host**: gunakan autentikasi git apa pun yang sudah dimiliki host, seperti SSH agent, credential helper, atau `.netrc`.

135 155 

136Runner menghapus jalur checkout setelah sesi berakhir.156<h4 id="when-the-hook-fails">

157 Ketika hook gagal

158</h4>

159 

160Hook gagal ketika keluar dengan kode bukan nol, atau keluar dengan 0 tanpa meninggalkan checkout yang dapat digunakan:

161 

162* **Repositori yang sesi dorong hasil ke**: runner gagal sesi, dan pada keluar bukan nol permukaan ekor stderr skrip ke pengguna.

163* **Repositori yang hanya dibaca sesi**, seperti repositori yang ditambahkan ke sesi yang sedang berjalan: runner mencatat baris `[runner:warn]` dengan detail kegagalan, memposting langkah `Skipped` ke sesi, menghapus apa pun yang ditinggalkan hook di jalur checkout, dan melanjutkan dengan repositori yang tersisa. Jika proses melewati ini membuat sesi tidak memiliki repositori sama sekali, runner tetap menggagalkan sesi.

164 

165Ketika hook berhasil, runner menghapus jalur checkout setelah sesi berakhir.

137 166 

138<h3 id="post-session">167<h3 id="post-session">

139 post-session168 post-session


151| `CLAUDE_RUNNER_WORKSPACE_PATHS` | Jalur absolut yang dipisahkan titik dua dari pohon kerja sesi. Kosong untuk sesi tanpa repo. |180| `CLAUDE_RUNNER_WORKSPACE_PATHS` | Jalur absolut yang dipisahkan titik dua dari pohon kerja sesi. Kosong untuk sesi tanpa repo. |

152| `CLAUDE_RUNNER_DEBUG_LOG_PATH` | Jalur ke log debug sesi, masih di disk saat hook berjalan |181| `CLAUDE_RUNNER_DEBUG_LOG_PATH` | Jalur ke log debug sesi, masih di disk saat hook berjalan |

153| `CLAUDE_RUNNER_API_BASE_URL` | URL dasar API Anthropic untuk panggilan yang dibatasi sesi |182| `CLAUDE_RUNNER_API_BASE_URL` | URL dasar API Anthropic untuk panggilan yang dibatasi sesi |

154| `CLAUDE_RUNNER_CLIENT_PLATFORM` | Permukaan klien yang membuat sesi, seperti `web_claude_ai`, `desktop_app`, atau `ios`. Tidak diatur ketika sesi tidak memiliki permukaan yang tercatat atau dikenali. Memerlukan Claude Code v2.1.229 atau lebih baru. |183| `CLAUDE_RUNNER_CLIENT_PLATFORM` | Surface klien yang membuat sesi, seperti `web_claude_ai`, `desktop_app`, atau `ios`. Tidak diatur ketika sesi tidak memiliki surface yang tercatat atau dikenali, jadi rujuk sebagai `${CLAUDE_RUNNER_CLIENT_PLATFORM:-}` di bawah `set -u`. Memerlukan Claude Code v2.1.229 atau lebih baru. |

155| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Token akses sesi, untuk panggilan API yang dibatasi sesi |184| `CLAUDE_CODE_SESSION_ACCESS_TOKEN` | Token akses sesi, untuk panggilan API yang dibatasi sesi |

156| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Pengaturan git yang ditetapkan runner untuk git yang dijalankan hook Anda. [Konfigurasi Git di dalam lifecycle hooks](#git-configuration-inside-lifecycle-hooks) menjelaskannya. Memerlukan Claude Code v2.1.280 atau lebih baru. |185| `GIT_CONFIG_COUNT`, `GIT_CONFIG_KEY_n`, `GIT_CONFIG_VALUE_n` | Pengaturan git yang ditetapkan runner untuk git yang dijalankan hook Anda. [Konfigurasi Git di dalam lifecycle hooks](#git-configuration-inside-lifecycle-hooks) menjelaskannya. Memerlukan Claude Code v2.1.280 atau lebih baru. |

157 186 

158`CLAUDE_RUNNER_EXIT_REASON` mengambil salah satu dari empat nilai:187`CLAUDE_RUNNER_EXIT_REASON` mengambil salah satu dari empat nilai:

159 188 

160* `completed`: sesi berakhir dengan bersih. Proses Claude Code keluar secara normal, atau sesi diarsipkan atau dihapus saat masih berjalan.189* `completed`: sesi berakhir dengan bersih. Proses Claude Code keluar secara normal, atau keluar dengan sendirinya setelah sesi diarsipkan atau dihapus.

161* `failed`: proses Claude Code mogok, atau setup gagal setelah dimulai.190* `failed`: proses Claude Code mogok, atau setup gagal setelah dimulai.

162* `interrupted`: runner menghentikan sesi. Itu merilis sesi untuk membebaskan slot, sesi timeout saat startup, server memindahkan sesi dari runner ini, runner sedang mengalirkan, atau sesi melampaui batas [`--kill-session-after-min`](/docs/id/self-hosted-environments-reference#runner-cli-flags) nya.191* `interrupted`: runner menghentikan sesi, dalam salah satu kasus berikut:

192 * Runner melepaskan sesi untuk membebaskan slot.

193 * Sesi mengalami timeout saat startup.

194 * Server memindahkan sesi dari runner ini.

195 * Polling runner mendeteksi pengarsipan atau penghapusan sebelum proses keluar.

196 * Runner sedang melakukan drain.

197 * Sesi melampaui batas [`--kill-session-after-min`](/docs/id/self-hosted-environments-reference#runner-cli-flags) miliknya.

163* `abandoned`: dicadangkan untuk sesi yang diklaim runner lain. Hook saat ini tidak menyala dalam kasus itu.198* `abandoned`: dicadangkan untuk sesi yang diklaim runner lain. Hook saat ini tidak menyala dalam kasus itu.

164 199 

165[Penghitung siklus hidup sesi](/docs/id/self-hosted-environments-reference#session-lifecycle-counter-semantics) menghitung rilis, timeout startup, dan perpindahan server sebagai `completed` daripada `interrupted`, karena runner menyerahkan slot kembali dengan bersih. Harapkan perbedaan itu jika Anda membandingkan penerimaan hook dengan penghitung.200Jika Anda membandingkan catatan penerimaan hook dengan [penghitung siklus hidup sesi](/docs/id/self-hosted-environments-reference#session-lifecycle-counter-semantics), perkirakan beberapa catatan `interrupted` dihitung sebagai `completed` di sana. Penghitung menghitung pelepasan, timeout startup, perpindahan server, serta pengarsipan atau penghapusan yang lebih dulu dideteksi polling runner sebagai `completed`, karena runner mengembalikan slot dengan bersih.

166 201 

167Status keluar hook tidak pernah mempengaruhi hasil sesi; kegagalan dicatat dan diabaikan. Runner menunggu hingga `--post-session-hook-timeout-sec`, 60 detik secara default, pada setiap akhir sesi termasuk shutdown runner. Contoh ini menyimpan pekerjaan yang tidak dikomit ke cabang penyelamatan:202Status keluar hook tidak pernah mempengaruhi hasil sesi; kegagalan dicatat dan diabaikan. Runner menunggu hingga `--post-session-hook-timeout-sec`, 60 detik secara default, pada setiap akhir sesi termasuk shutdown runner. Contoh ini menyimpan pekerjaan yang tidak dikomit ke cabang penyelamatan:

168 203 

169```bash theme={null}204```bash theme={null}

170#!/usr/bin/env bash205#!/usr/bin/env bash

171set -u206set -u

207export GIT_ALLOW_PROTOCOL=${GIT_ALLOW_PROTOCOL:-https:http:ssh}

172IFS=':'208IFS=':'

173# Override -c mengalahkan pengaturan lokal repo, memblokir konfigurasi fsmonitor,209# -c overrides beat repo-local settings, blocking session-written fsmonitor,

174# hook-path, dan gpg-program yang ditulis sesi agar tidak mengeksekusi kode dengan210# hook-path, and gpg-program config from executing code with the hook's

175# hak istimewa hook. -c commit.gpgsign=false juga membuat commit penyelamatan ini211# privileges. -c commit.gpgsign=false also leaves these rescue commits

176# tidak ditandatangani di bawah --configure-git.212# unsigned under --configure-git.

177# credential.helper dan pushurl lokal repo masih berlaku, dan pada runner213# Repo-local credential.helper and pushurl still apply, and on a runner

178# sebelum v2.1.280 begitu pula core.sshCommand; jika hook menyimpan kredensial214# before v2.1.280 so does core.sshCommand; see the note below the script

179# yang tidak dimiliki sesi, lihat catatan di bawah skrip.215# before you give this push a credential.

180g() { git -c core.fsmonitor=false -c core.hooksPath=/dev/null \216g() { git -c core.fsmonitor=false -c core.hooksPath=/dev/null \

181 -c commit.gpgsign=false "$@"; }217 -c commit.gpgsign=false "$@"; }

182for ws in $CLAUDE_RUNNER_WORKSPACE_PATHS; do218for ws in $CLAUDE_RUNNER_WORKSPACE_PATHS; do


188done224done

189```225```

190 226 

191Hook melakukan push dengan kredensial git apa pun yang tersedia di lingkungannya sendiri di host runner. Di bawah [postur tanpa-kredensial-dalam-image](/docs/id/self-hosted-environments-deploy#configure-git), termasuk ketika klon bawaan melewati proxy git Anthropic, tidak ada kredensial, jadi buat kredensial push jangka pendek di dalam hook sebelum melakukan push: tukarkan token sesi yang diterima hook di `CLAUDE_CODE_SESSION_ACCESS_TOKEN` dengan layanan token Anda sendiri, dengan memverifikasinya seperti yang dijelaskan di [Verify session identity](/docs/id/self-hosted-environments-identity). Ketika hook menyimpan kredensial yang tidak dimiliki sesi, ganti `origin` dengan URL yang disediakan operator dan teruskan `-c credential.helper=` ditambah helper Anda sendiri. [Konfigurasi Git di dalam lifecycle hooks](#git-configuration-inside-lifecycle-hooks) menjelaskan apa yang masih dapat dipengaruhi oleh konfigurasi yang ditulis sesi.227Baris `GIT_ALLOW_PROTOCOL` dalam skrip membatasi git pada remote HTTPS, HTTP, dan SSH. Jika lingkungan runner sudah menetapkan daftar `GIT_ALLOW_PROTOCOL` sendiri yang tidak kosong, skrip mempertahankan daftar tersebut.

228 

229Hook melakukan push dengan kredensial git apa pun yang tersedia di lingkungannya sendiri di host runner. Di bawah [postur tanpa-kredensial-dalam-image](/docs/id/self-hosted-environments-deploy#configure-git), termasuk ketika klon bawaan melewati proxy git Anthropic, tidak ada kredensial, jadi buat kredensial push jangka pendek di dalam hook sebelum melakukan push: tukarkan token sesi yang diterima hook di `CLAUDE_CODE_SESSION_ACCESS_TOKEN` dengan layanan token Anda sendiri, dengan memverifikasinya seperti yang dijelaskan di [Verify session identity](/docs/id/self-hosted-environments-identity).

230 

231Perlakukan setiap kredensial yang diberikan hook Anda kepada git sebagai kredensial yang dapat diperoleh sesi, dan buat kredensial tersebut sehingga tidak dapat melakukan lebih dari push ini. Git di hook Anda membaca file konfigurasi yang dapat ditulis oleh sesi, dan credential helper atau filter driver yang disebutkan di salah satunya berjalan dengan hak istimewa hook Anda. Pengaturan dalam file tersebut juga dapat mengubah tujuan push, remote apa pun yang Anda sebutkan. Untuk pengaturan git yang ditetapkan runner di hook Anda dan pengaturan yang diserahkan ke file tersebut, lihat [Konfigurasi Git di dalam lifecycle hooks](#git-configuration-inside-lifecycle-hooks).

192 232 

193<h4 id="hook-timing-when-the-runner-releases-a-session">233<h4 id="hook-timing-when-the-runner-releases-a-session">

194 Hook timing when the runner releases a session234 Hook timing when the runner releases a session


264| `CLAUDE_RUNNER_ORDER_ID` | Kunci idempotency yang buram, unik per permintaan pemijahan dan aman untuk nama sumber daya Kubernetes. Gunakan hanya order ID sebagai kunci dedup provisioner Anda. |304| `CLAUDE_RUNNER_ORDER_ID` | Kunci idempotency yang buram, unik per permintaan pemijahan dan aman untuk nama sumber daya Kubernetes. Gunakan hanya order ID sebagai kunci dedup provisioner Anda. |

265| `CLAUDE_RUNNER_SESSION_ID` | Sesi yang diminta ini untuk. Ini berulang pada setiap permintaan ulang untuk sesi, jadi gunakan untuk logging dan routing, bukan sebagai kunci dedup. Kosong untuk permintaan pre-warming, yang boot runner standby sebelum sesi spesifik apa pun ketika [`--min-idle`](/docs/id/self-hosted-environments-reference#orchestrator-cli-flags) diatur, jadi jangan asumsikan variabel diatur. |305| `CLAUDE_RUNNER_SESSION_ID` | Sesi yang diminta ini untuk. Ini berulang pada setiap permintaan ulang untuk sesi, jadi gunakan untuk logging dan routing, bukan sebagai kunci dedup. Kosong untuk permintaan pre-warming, yang boot runner standby sebelum sesi spesifik apa pun ketika [`--min-idle`](/docs/id/self-hosted-environments-reference#orchestrator-cli-flags) diatur, jadi jangan asumsikan variabel diatur. |

266| `CLAUDE_RUNNER_SESSION_UUID` | ID sesi yang sama dalam bentuk UUID kanonik. Kosong untuk permintaan pre-warming. |306| `CLAUDE_RUNNER_SESSION_UUID` | ID sesi yang sama dalam bentuk UUID kanonik. Kosong untuk permintaan pre-warming. |

267| `CLAUDE_RUNNER_ATTEMPT` | Berapa banyak permintaan pemijahan yang dimiliki sesi ini. `0` untuk permintaan pre-warming. |307| `CLAUDE_RUNNER_ATTEMPT` | Penghitung per sesi untuk digunakan dalam logging. Ini bukan jumlah retry maupun jumlah permintaan. `0` untuk permintaan pre-warming, meskipun permintaan untuk suatu sesi juga dapat membawa `0`. |

268| `CLAUDE_RUNNER_ORDER_SERVER_TIME` | Waktu server dari header HTTP `Date` respons polling. Ketika hook memverifikasi `exp` JWT pesanan kerja, bandingkan terhadap nilai ini daripada jam lokal untuk mentoleransi skew. Kosong ketika gateway menghilangkan header. |308| `CLAUDE_RUNNER_ORDER_SERVER_TIME` | Waktu server dari header HTTP `Date` respons polling. Ketika hook memverifikasi `exp` JWT pesanan kerja, bandingkan terhadap nilai ini daripada jam lokal untuk mentoleransi skew. Kosong ketika gateway menghilangkan header. |

269| `CLAUDE_RUNNER_POOL_ID` | ID lingkungan yang harus diikuti runner baru, dalam bentuk `ccpool_...` |309| `CLAUDE_RUNNER_POOL_ID` | ID lingkungan yang harus diikuti runner baru, dalam bentuk `ccpool_...` |

270| `CLAUDE_RUNNER_ACCOUNT_ID` | ID yang ditandai dari akun yang antri sesi, untuk routing per-akun, kuota, atau chargeback. Kosong ketika tidak tersedia, dan selalu kosong untuk sesi saluran Claude Tag, yang tidak ada akun antri. |310| `CLAUDE_RUNNER_ACCOUNT_ID` | ID yang ditandai dari akun yang antri sesi, untuk routing per-akun, kuota, atau chargeback. Kosong ketika tidak tersedia, dan selalu kosong untuk sesi saluran Claude Tag, yang tidak ada akun antri. |

271| `CLAUDE_RUNNER_ACCOUNT_EMAIL` | Email akun yang antri sesi. Kosong ketika tidak tersedia. Perlakukan email sebagai informasi yang dapat diidentifikasi secara pribadi dan jangan catat. |311| `CLAUDE_RUNNER_ACCOUNT_EMAIL` | Email akun yang antri sesi. Kosong ketika tidak tersedia. Perlakukan email sebagai informasi yang dapat diidentifikasi secara pribadi dan jangan catat. |

272| `CLAUDE_RUNNER_PRIMARY_REPO_URL` | URL sumber git pertama sesi, untuk routing ke runner dengan repositori itu pre-warmed. Kosong ketika sesi tidak memiliki sumber git. |312| `CLAUDE_RUNNER_PRIMARY_REPO_URL` | URL sumber git pertama sesi, untuk routing ke runner dengan repositori itu pre-warmed. Kosong ketika sesi tidak memiliki sumber git. |

273| `CLAUDE_RUNNER_PRIMARY_REPO_REVISION` | Revisi sumber git pertama sesi: cabang, SHA, atau tag. Kosong ketika tidak ditentukan. |313| `CLAUDE_RUNNER_PRIMARY_REPO_REVISION` | Revisi sumber git pertama sesi: branch, SHA, tag, atau nama referensi lengkap. Kosong ketika tidak ditentukan. |

274| `CLAUDE_RUNNER_REPO_SOURCES` | Array JSON dari `{url, revision}` untuk semua sumber git sesi, untuk hook yang route pada repositori sekunder. Kosong ketika tidak ada sumber. |314| `CLAUDE_RUNNER_REPO_SOURCES` | Array JSON dari `{url, revision}` untuk semua sumber git sesi, untuk hook yang route pada repositori sekunder. Kosong ketika tidak ada sumber. |

275| `CLAUDE_RUNNER_CORRELATION_ID` | ID korelasi yang disediakan saat pembuatan sesi, digemakan kembali sehingga hook dapat memetakan pesanan kerja ini ke permintaan yang membuat sesi. Kosong ketika sesi tidak memiliki satu. |315| `CLAUDE_RUNNER_CORRELATION_ID` | ID korelasi yang disediakan saat pembuatan sesi, digemakan kembali sehingga hook dapat memetakan pesanan kerja ini ke permintaan yang membuat sesi. Kosong ketika sesi tidak memiliki satu. |

276| `CLAUDE_RUNNER_CLIENT_PLATFORM` | Permukaan klien yang membuat sesi, seperti `web_claude_ai`, `desktop_app`, `ios`, atau `scheduled_trigger`, untuk analitik adopsi. Tidak diatur ketika sesi tidak memiliki permukaan yang tercatat atau dikenali, dan untuk permintaan pre-warming; periksa dengan `[ -n "${CLAUDE_RUNNER_CLIENT_PLATFORM:-}" ]`, yang tetap aman di bawah `set -u`. |316| `CLAUDE_RUNNER_CLIENT_PLATFORM` | Permukaan klien yang membuat sesi, seperti `web_claude_ai`, `desktop_app`, `ios`, atau `scheduled_trigger`, untuk analitik adopsi. Tidak diatur ketika sesi tidak memiliki permukaan yang tercatat atau dikenali, dan untuk permintaan pre-warming; periksa dengan `[ -n "${CLAUDE_RUNNER_CLIENT_PLATFORM:-}" ]`, yang tetap aman di bawah `set -u`. |


282* **Gunakan `--capacity 1` di runner yang dipijahkan**: pesanan kerja yang terikat sesi mendaftarkan tepat satu runner yang terikat ke sesi itu, jadi kapasitas lebih tinggi menambah slot yang tidak pernah menerima pekerjaan, dan runner mencatat peringatan saat startup.322* **Gunakan `--capacity 1` di runner yang dipijahkan**: pesanan kerja yang terikat sesi mendaftarkan tepat satu runner yang terikat ke sesi itu, jadi kapasitas lebih tinggi menambah slot yang tidak pernah menerima pekerjaan, dan runner mencatat peringatan saat startup.

283* **Pesanan kerja pre-warming mendaftarkan tidak terikat**: runner standby tidak terikat ke sesi dan mengklaim pekerjaan antri seperti runner fleet tetap.323* **Pesanan kerja pre-warming mendaftarkan tidak terikat**: runner standby tidak terikat ke sesi dan mengklaim pekerjaan antri seperti runner fleet tetap.

284 324 

285Kontrak memiliki empat aturan yang agnostik provisioner:325Kontrak memiliki empat aturan, di platform mana pun hook Anda melakukan provisioning:

286 326 

2871. **Jadilah idempoten pada `CLAUDE_RUNNER_ORDER_ID`.** Pengiriman ulang permintaan yang sama harus memijahkan paling banyak satu runner. Turunkan nama sumber daya deterministik dari order ID dan biarkan platform Anda menolak duplikat. Jangan kunci pada `CLAUDE_RUNNER_SESSION_ID` sebagai gantinya. Setiap permintaan ulang untuk sesi membawa ID sesi yang sama dengan order ID baru, jadi beban kerja yang dinamai atau dideduplikasi oleh ID sesi dibuat sekali dan tidak pernah lagi untuk sesi itu.3271. **Jadilah idempoten pada `CLAUDE_RUNNER_ORDER_ID`.** Pengiriman ulang permintaan yang sama harus memijahkan paling banyak satu runner. Turunkan nama sumber daya deterministik dari order ID dan biarkan platform Anda menolak duplikat. Jangan kunci pada `CLAUDE_RUNNER_SESSION_ID` sebagai gantinya. Setiap permintaan ulang untuk sesi membawa ID sesi yang sama dengan order ID baru, jadi beban kerja yang dinamai atau dideduplikasi oleh ID sesi dibuat sekali dan tidak pernah lagi untuk sesi itu.

2882. **Jangan coba ulang beban kerja.** Satu ID pesanan berarti paling banyak satu beban kerja yang dibuat. Jika runner tidak pernah mendaftar, Anthropic meminta ulang dengan ID pesanan segar setelah `--expected-spawn-seconds`.3282. **Jangan coba ulang beban kerja.** Satu ID pesanan berarti paling banyak satu beban kerja yang dibuat. Jika runner tidak pernah mendaftar, Anthropic meminta ulang dengan ID pesanan segar setelah `--expected-spawn-seconds`.

2893. **Gunakan kontrak kode keluar.** Keluar 0 berarti dikirimkan. Keluar 1 berarti kegagalan yang dapat dicoba ulang; sesi mundur dan ditawarkan kembali. Keluar 2 atau lebih tinggi berarti tidak dapat dicoba ulang; sesi diblokir dari pemijahan lagi sampai [Owner](/docs/id/cloud-environments#organization-shared-environments) memilih **Retry** di atasnya di tab **Activity** lingkungan. Pada keluar bukan nol, ekor stderr hook muncul di sana sebagai alasan kegagalan, jadi tulis kesalahan yang dapat ditindaklanjuti ke stderr dan jangan pernah rahasia. Untuk permintaan pre-warming tidak ada sesi untuk gagal: orchestrator mencatat keluar bukan nol secara lokal saja, dan server meminta ulang pemijahan setelah sewa.3293. **Gunakan kontrak exit code.** Keluar dengan status yang sesuai dengan hasilnya:

2904. **Atur `--expected-spawn-seconds` ke setidaknya waktu boot p99 Anda.** Ini adalah sewa server-side. Semua replika orchestrator harus menggunakan nilai yang sama.330 

331 * **Keluar 0**: dikirimkan.

332 * **Keluar 1**: kegagalan yang dapat dicoba ulang. Sesi mundur dan ditawarkan kembali.

333 * **Keluar 2 atau lebih tinggi**: kegagalan yang tidak dapat dicoba ulang. Sesi diblokir dari pemijahan lagi sampai pengguna mengirimkan pesan baru ke sesi tersebut atau [Owner](/docs/id/cloud-environments#organization-shared-environments) memilih **Retry** di atasnya di tab **Activity** lingkungan.

334 

335 Pada keluar bukan nol, ekor stderr hook muncul di tab **Activity** sebagai alasan kegagalan, jadi tulis kesalahan yang dapat ditindaklanjuti ke stderr dan jangan pernah menulis rahasia di sana. Dalam hook shell, [pertahankan kegagalan sementara agar dapat dicoba ulang](#keep-transient-failures-retryable-in-a-shell-hook).

336 

337 Permintaan pre-warming tidak memiliki sesi untuk gagal: orchestrator mencatat keluar bukan nol secara lokal saja, dan server meminta ulang pemijahan setelah sewa `--expected-spawn-seconds` kedaluwarsa.

3384. **Atur `--expected-spawn-seconds` ke setidaknya waktu p99 Anda dari permintaan pemijahan hingga pendaftaran runner.** Ukur sejak orchestrator menerima permintaan pemijahan, dan sertakan waktu tunggu untuk kapasitas di platform Anda serta waktu boot. Nilai ini adalah sewa server-side, dan pesanan kerja kedaluwarsa bersamanya, sehingga runner yang beban kerjanya membutuhkan waktu lebih lama tidak dapat mendaftar. Semua replika orchestrator harus menggunakan nilai yang sama.

291 339 

292Semua yang ditulis hook ke stdout atau stderr muncul dalam log orchestrator dengan kredensial secara otomatis diredaksi. Jika sesi tetap antri, periksa badan `/healthz` orchestrator untuk hitungan antrian, kemudian buka tab **Activity** lingkungan Anda di [halaman admin **Cloud environments**](https://claude.ai/admin-settings/cloud-environments): perluas sesi yang gagal di sana untuk kesalahan pemijahan, dan pilih **Retry** untuk memintanya ulang.340Semua yang ditulis hook ke stdout atau stderr muncul dalam log orchestrator dengan kredensial secara otomatis diredaksi. Jika sesi tetap antri, periksa badan `/healthz` orchestrator untuk hitungan antrian, kemudian buka tab **Activity** lingkungan Anda di [halaman admin **Cloud environments**](https://claude.ai/admin-settings/cloud-environments): perluas sesi yang gagal di sana untuk kesalahan pemijahan, dan pilih **Retry** untuk memintanya ulang.

293 341 

294Sesi yang tetap antri tanpa kesalahan pemijahan di tab **Activity** dapat berarti hook dikunci pada ID sesi. Untuk mengonfirmasi, periksa apakah platform Anda memiliki beban kerja untuk permintaan pemijahan pertama sesi itu dan tidak ada untuk permintaan ulang. Jika demikian, kunci beban kerja pada `CLAUDE_RUNNER_ORDER_ID` sebagai gantinya.342Sesi yang tetap antri tanpa kesalahan pemijahan di tab **Activity** dapat berarti hook dikunci pada ID sesi. Untuk mengonfirmasi, periksa apakah platform Anda memiliki beban kerja untuk permintaan pemijahan pertama sesi itu dan tidak ada untuk permintaan ulang. Jika demikian, kunci beban kerja pada `CLAUDE_RUNNER_ORDER_ID` sebagai gantinya.

295 343 

344<h4 id="keep-transient-failures-retryable-in-a-shell-hook">

345 Pertahankan kegagalan sementara agar dapat dicoba ulang dalam hook shell

346</h4>

347 

348Dalam hook shell yang menggunakan `set -e`, kegagalan yang sebenarnya dapat teratasi dengan retry dapat memblokir sesi. Hook berhenti pada perintah yang gagal dan keluar dengan status milik perintah itu sendiri, dan orchestrator menerapkan kontrak exit code pada status tersebut. Banyak kegagalan mengembalikan status 2 atau lebih tinggi, seperti `127` ketika suatu perintah tidak terinstal dan `22` dari `curl --fail` pada kesalahan HTTP, sehingga kegagalan tersebut memblokir sesi pada kegagalan pertamanya.

349 

350Sesi yang telah diblokir oleh hook tetap diblokir sampai pengguna mengirimkan pesan baru ke sesi tersebut atau [Owner](/docs/id/cloud-environments#organization-shared-environments) memilih **Retry** di atasnya di tab **Activity** lingkungan.

351 

352Untuk mengubah kegagalan semacam itu menjadi keluar 1, letakkan baris-baris berikut tepat di bawah baris `#!` hook, di atas apa pun yang dapat gagal:

353 

354```bash theme={null}

355set -e

356PERMANENT=; permanent() { printf '%s\n' "$*" >&2; PERMANENT=1; exit 2; }

357trap 'rc=$?; [ "$rc" -eq 0 ] || [ -n "${PERMANENT:-}" ] || exit 1' EXIT

358```

359 

360Baris-baris ini mengubah perilaku bagian hook lainnya, jadi periksa hook untuk setiap pola berikut setelah Anda menambahkannya:

361 

362* **`exit 2` atau lebih tinggi secara langsung**: dengan trap terpasang, ini menjadi keluar 1. Untuk kesalahan yang tidak dapat diperbaiki oleh retry apa pun, panggil `permanent` dengan alasannya sebagai gantinya, seperti `permanent "namespace claude-runners does not exist"`. Panggil di shell utama, bukan di dalam `$( )`, `( )`, atau pipe.

363* **`exec`**: jangan memulai perintah terakhir hook dengan `exec`, karena `exec` menggantikan shell dan trap tidak berjalan.

364* **Trap `EXIT` kedua**: `trap ... EXIT` kedua menggantikan yang pertama, jadi gabungkan keduanya menjadi satu trap. Letakkan perintah pembersihan Anda tepat setelah `rc=$?;` dan akhiri masing-masing dengan `|| true;`. Pembersihan kemudian berjalan saat gagal maupun saat berhasil, dan perintah pembersihan yang gagal tidak menetapkan status keluar hook. Trap gabungan ini menunjukkan bentuknya, dengan `your-cleanup-command` sebagai pengganti perintah Anda sendiri:

365 

366 ```bash theme={null}

367 trap 'rc=$?; your-cleanup-command || true; [ "$rc" -eq 0 ] || [ -n "${PERMANENT:-}" ] || exit 1' EXIT

368 ```

369* **Perintah yang boleh gagal**: jika hook sebelumnya tidak menggunakan `set -e`, kini hook berhenti pada perintah pertama yang mengembalikan nilai bukan nol, seperti pencarian yang tidak menemukan apa pun atau pengiriman duplikat yang ditolak platform Anda. Jika hook bertindak berdasarkan hasilnya, jadikan perintah tersebut kondisi dari sebuah `if`. Jika hook mengabaikan hasilnya, tambahkan `|| true` setelah perintah tersebut.

370 

371Untuk mengonfirmasi bahwa trap berfungsi, tambahkan baris tepat di bawah baris `trap` yang memanggil perintah yang tidak ada, seperti `no-such-command`. Jalankan file hook dari shell Anda dan periksa bahwa `echo $?` mencetak `1`, lalu hapus baris tersebut.

372 

296<h2 id="send-model-requests-to-bedrock-or-agent-platform">373<h2 id="send-model-requests-to-bedrock-or-agent-platform">

297 Mengirim permintaan model ke Bedrock atau Agent Platform374 Mengirim permintaan model ke Bedrock atau Agent Platform

298</h2>375</h2>


381Sesi yang mengirim permintaan model ke Amazon Bedrock atau Google Cloud's Agent Platform berbeda dari sesi di Anthropic API dalam hal-hal berikut:458Sesi yang mengirim permintaan model ke Amazon Bedrock atau Google Cloud's Agent Platform berbeda dari sesi di Anthropic API dalam hal-hal berikut:

382 459 

383* **Kebijakan dari claude.ai**: [pengaturan yang dikelola server](/docs/id/server-managed-settings) tidak sampai ke sesi ini. Begitu pula kebijakan organisasi yang ditetapkan Owner di pengaturan admin Claude Code, sehingga Claude Code tidak memberlakukannya di dalam sesi. Letakkan aturan yang Anda andalkan di [file pengaturan terkelola](/docs/id/managed-settings#delivery-mechanisms) pada image runner.460* **Kebijakan dari claude.ai**: [pengaturan yang dikelola server](/docs/id/server-managed-settings) tidak sampai ke sesi ini. Begitu pula kebijakan organisasi yang ditetapkan Owner di pengaturan admin Claude Code, sehingga Claude Code tidak memberlakukannya di dalam sesi. Letakkan aturan yang Anda andalkan di [file pengaturan terkelola](/docs/id/managed-settings#delivery-mechanisms) pada image runner.

461* **Skill akun**: sesi ini tidak mengunduh skill yang diaktifkan untuk akun claude.ai seseorang. Lihat [Bagaimana konfigurasi setiap sesi disusun](#how-each-session’s-config-is-assembled).

384* **File**: file yang dilampirkan orang ke sesi di claude.ai atau aplikasi seluler atau desktop tidak sampai ke sesi tersebut, dan Claude tidak dapat mengirim file kembali dengan [tool `SendUserFile`](/docs/id/tools-reference). Sebagai gantinya, letakkan file input di repositori atau di runner.462* **File**: file yang dilampirkan orang ke sesi di claude.ai atau aplikasi seluler atau desktop tidak sampai ke sesi tersebut, dan Claude tidak dapat mengirim file kembali dengan [tool `SendUserFile`](/docs/id/tools-reference). Sebagai gantinya, letakkan file input di repositori atau di runner.

385* **Pemilihan model**: control plane Anthropic mengirimkan model setiap sesi, dan ketika sesi dimulai tanpa model, Claude Code menggunakan model default untuk penyedia tersebut. Runner menghapus `ANTHROPIC_MODEL` dan `ANTHROPIC_DEFAULT_MODEL` dari environment yang diteruskannya ke sesi. Contoh di halaman penyedia menetapkan `ANTHROPIC_MODEL`, tetapi di environment runner tidak satu pun variabel tersebut berpengaruh. Variabel per keluarga model di Menyematkan versi model untuk [Amazon Bedrock](/docs/id/amazon-bedrock#4-pin-model-versions) dan [Agent Platform](/docs/id/google-vertex-ai#5-pin-model-versions) memang sampai ke sesi. Variabel tersebut menentukan ke mana alias seperti `opus` diarahkan, bukan ke mana ID model lengkap diarahkan.463* **Pemilihan model**: control plane Anthropic mengirimkan model setiap sesi, dan ketika sesi dimulai tanpa model, Claude Code menggunakan model default untuk penyedia tersebut. Anda tidak dapat memilih model dengan `ANTHROPIC_MODEL` atau `ANTHROPIC_DEFAULT_MODEL` di environment runner, tetapi Anda dapat menyematkan ke mana sebuah alias diarahkan:

464 * **`ANTHROPIC_MODEL` dan `ANTHROPIC_DEFAULT_MODEL`**: runner menghapus keduanya dari environment yang diteruskannya ke sesi, meskipun contoh di halaman penyedia menetapkan `ANTHROPIC_MODEL`.

465 * **Variabel penyematan per keluarga model**: variabel di Menyematkan versi model untuk [Amazon Bedrock](/docs/id/amazon-bedrock#4-pin-model-versions) dan [Agent Platform](/docs/id/google-vertex-ai#5-pin-model-versions) memang sampai ke sesi. Variabel tersebut menentukan ke mana alias seperti `opus` diarahkan, bukan ke mana ID model lengkap diarahkan.

386* **Model yang tidak dilayani akun Anda**: sebuah sesi dapat gagal pada suatu pesan dengan error yang menyebutkan nama model. Aktifkan model yang dapat dipilih developer Anda, model latar belakang yang dijelaskan dalam Menyematkan versi model, dan model pengklasifikasi yang digunakan [auto mode](/docs/id/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry). Di Amazon Bedrock, izinkan masing-masing model tersebut dalam kebijakan Anda.466* **Model yang tidak dilayani akun Anda**: sebuah sesi dapat gagal pada suatu pesan dengan error yang menyebutkan nama model. Aktifkan model yang dapat dipilih developer Anda, model latar belakang yang dijelaskan dalam Menyematkan versi model, dan model pengklasifikasi yang digunakan [auto mode](/docs/id/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry). Di Amazon Bedrock, izinkan masing-masing model tersebut dalam kebijakan Anda.

387* **Pencarian web dan fast mode**: [pencarian web](/docs/id/tools-reference#websearch-tool-behavior) tidak tersedia di Amazon Bedrock, dan [fast mode](/docs/id/fast-mode) tidak tersedia di kedua penyedia. Untuk kemampuan lain yang berbeda menurut penyedia, lihat [Kemampuan CLI yang bervariasi menurut penyedia](/docs/id/feature-availability#cli-capabilities-that-vary-by-provider).467* **Pencarian web dan fast mode**: [pencarian web](/docs/id/tools-reference#websearch-tool-behavior) tidak tersedia di Amazon Bedrock, dan [fast mode](/docs/id/fast-mode) tidak tersedia di kedua penyedia. Untuk kemampuan lain yang berbeda menurut penyedia, lihat [Kemampuan CLI yang bervariasi menurut penyedia](/docs/id/feature-availability#cli-capabilities-that-vary-by-provider).

388 468 


411 491 

412Sesi mewarisi environment runner, jadi atur [`ENABLE_TOOL_SEARCH`](/docs/id/mcp#scale-with-mcp-tool-search) di sana untuk mengontrol pencarian tool MCP bagi setiap sesi yang dijalankan runner; halaman MCP menjelaskan nilai-nilainya.492Sesi mewarisi environment runner, jadi atur [`ENABLE_TOOL_SEARCH`](/docs/id/mcp#scale-with-mcp-tool-search) di sana untuk mengontrol pencarian tool MCP bagi setiap sesi yang dijalankan runner; halaman MCP menjelaskan nilai-nilainya.

413 493 

494<a id="connection-timing" />

495 

496<h3 id="wait-for-mcp-servers-before-the-first-turn">

497 Menunggu server MCP sebelum giliran pertama

498</h3>

499 

500Sesi self-hosted menunggu sebentar server MCP yang masih dalam proses terhubung, pada dua titik terpisah. Server yang terlewat dari suatu penantian akan kehilangan tool-nya saat giliran pertama dimulai, dan tool tersebut akan tersedia kemudian tanpa tindakan apa pun dari Anda. Kedua penantian tersebut adalah:

501 

502* **Startup sesi**: sebelum daftar tool pertama kali diambil, sesi menunggu hingga 5 detik secara default untuk server HTTP atau SSE yang entrinya mengatur [`alwaysLoad: true`](/docs/id/mcp#exempt-a-server-from-deferral), atau untuk semua server ketika Anda mengatur [`MCP_CONNECTION_NONBLOCKING=0`](/docs/id/env-vars) di environment runner. Jika tidak, server HTTP dan SSE terhubung di latar belakang. Selama sesi menunggu di sini, inisialisasinya menjadi lebih lambat. [`MCP_CONNECT_TIMEOUT_MS`](/docs/id/env-vars) mengubah default 5 detik tersebut.

503* **Giliran pertama**: setelah pesan tiba, giliran pertama menunggu hingga 2 detik untuk server stdio yang masih dalam proses terhubung. Selama sesi menunggu di sini, balasan pertama menjadi lebih lambat. Untuk mengubah berapa lama penantian ini berlangsung, atur [`CLAUDE_CODE_MCP_STARTUP_WAIT_MS`](/docs/id/env-vars) di environment runner. Variabel ini tidak mengubah server mana yang dicakup oleh penantian tersebut. Memerlukan Claude Code v2.1.274 atau yang lebih baru.

504 

505`claude mcp add` tidak memiliki flag `alwaysLoad`. Untuk mengatur kunci tersebut, tambahkan server dengan `claude mcp add-json` sebagai gantinya, yang menerima kunci itu dalam JSON server dan menuliskannya ke `.claude.json`. Di Dockerfile Anda:

506 

507```dockerfile theme={null}

508RUN claude mcp add-json core '{"type":"http","url":"https://mcp.example.com/mcp","alwaysLoad":true}' --scope user

509```

510 

511Jika tool sebuah server juga tidak muncul pada giliran berikutnya, periksa apakah server tersebut benar-benar mencapai sesi, seperti yang dijelaskan di [Server MCP](#mcp-servers).

512 

414<h3 id="turn-off-built-in-session-tools">513<h3 id="turn-off-built-in-session-tools">

415 Matikan tool sesi bawaan514 Matikan tool sesi bawaan

416</h3>515</h3>


574 673 

575Atur `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` untuk menabur dari jalur berbeda, atau arahkan ke direktori kosong untuk menonaktifkan penanaman.674Atur `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` untuk menabur dari jalur berbeda, atau arahkan ke direktori kosong untuk menonaktifkan penanaman.

576 675 

577`.claude/settings.json` yang di-commit ke repositori diterapkan di atasnya sebagai pengaturan proyek. Dalam sesi dengan beberapa repositori, [paling banyak hanya file dari satu repositori yang berlaku](#repository-settings-in-sessions-with-several-repositories). Sesi juga membaca [`managed-settings.json`](/docs/id/settings#where-settings-live) dari jalur sistem standar di image runner Anda. Apakah kuncinya berlaku bersama [pengaturan terkelola server](/docs/id/server-managed-settings) mengikuti [bagaimana Claude Code menggabungkan sumber terkelola](/docs/id/managed-settings#how-claude-code-combines-managed-sources): secara default, ketika organisasi Anda mengirimkan kunci terkelola server apa pun, sesi mengabaikan file image runner kecuali [kunci yang dibaca Claude Code dari setiap sumber admin](/docs/id/managed-settings#keys-read-from-every-admin-source), seperti blok `env`, kunci sandbox, jalur biner sandbox, dan `forceRemoteSettingsRefresh`. Lihat [prioritas pengaturan](/docs/id/settings#settings-precedence).676Sesi juga membaca file pengaturan berikut:

677 

678* **Pengaturan proyek**: `.claude/settings.json` yang di-commit ke repositori diterapkan di atas baseline tingkat pengguna. Dalam sesi dengan beberapa repositori, [paling banyak hanya file dari satu repositori yang berlaku](#repository-settings-in-sessions-with-several-repositories).

679* **Pengaturan terkelola**: sesi membaca [`managed-settings.json`](/docs/id/settings#where-settings-live) dari jalur sistem standar di image runner Anda. Untuk mengetahui apakah kuncinya berlaku bersama [pengaturan terkelola server](/docs/id/server-managed-settings), lihat [bagaimana Claude Code menggabungkan sumber terkelola](/docs/id/managed-settings#how-claude-code-combines-managed-sources).

680 

681Untuk urutan penerapan sumber-sumber ini, lihat [prioritas pengaturan](/docs/id/settings#settings-precedence).

578 682 

579Ketika bidang kontrol Anthropic memasok sesi dengan [Claude Code hooks](/docs/id/hooks), runner memasangnya bersama, bukan di atas, konfigurasi Anda sendiri. Memerlukan Claude Code v2.1.229 atau lebih baru.683Ketika bidang kontrol Anthropic memasok sesi dengan [Claude Code hooks](/docs/id/hooks), runner memasangnya bersama, bukan di atas, konfigurasi Anda sendiri. Memerlukan Claude Code v2.1.229 atau lebih baru.

580 684 


582* **Siapa yang menulisnya**: bidang kontrol mengisinya dari konstanta tetap dalam deployment-nya sendiri, tidak pernah dari input per-sesi atau pihak ketiga.686* **Siapa yang menulisnya**: bidang kontrol mengisinya dari konstanta tetap dalam deployment-nya sendiri, tidak pernah dari input per-sesi atau pihak ketiga.

583* **Apa yang masih mengaturnya**: hook yang dikirimkan melalui `--settings` memasuki konfigurasi hook yang digabungkan biasa, bukan tingkat yang dikelola, jadi pengaturan yang dikelola Anda masih berlaku. `disableAllHooks` menonaktifkannya, dan mereka bukan di antara kategori yang [`allowManagedHooksOnly`](/docs/id/settings-reference#allowmanagedhooksonly) tetap dimuat.687* **Apa yang masih mengaturnya**: hook yang dikirimkan melalui `--settings` memasuki konfigurasi hook yang digabungkan biasa, bukan tingkat yang dikelola, jadi pengaturan yang dikelola Anda masih berlaku. `disableAllHooks` menonaktifkannya, dan mereka bukan di antara kategori yang [`allowManagedHooksOnly`](/docs/id/settings-reference#allowmanagedhooksonly) tetap dimuat.

584 688 

689Ketika seseorang memulai sesinya sendiri, Claude Code juga mengunduh [skills yang diaktifkan untuk akun claude.ai mereka](/docs/id/skills#skills-in-cowork-and-cloud-sessions) ke direktori konfigurasi sesi tersebut. Eksekusi [routine](/docs/id/routines) tidak mendapatkan skills pemiliknya, dan sesi yang [mengirimkan permintaan model ke Bedrock atau Agent Platform](#send-model-requests-to-bedrock-or-agent-platform) tidak mengunduh skill apa pun. Untuk skill yang dibutuhkan sesi tersebut, commit skill tersebut ke `.claude/skills/` repositori atau tambahkan ke image runner Anda.

690 

585Di luar sesi [Claude Tag](https://claude.com/docs/claude-tag/overview), sesi dalam lingkungan yang di-host sendiri berjalan dengan [auto memory](/docs/id/memory#auto-memory) nonaktif secara default. Untuk instruksi yang harus terbawa antar sesi, gunakan `CLAUDE.md` di image runner Anda atau di repositori.691Di luar sesi [Claude Tag](https://claude.com/docs/claude-tag/overview), sesi dalam lingkungan yang di-host sendiri berjalan dengan [auto memory](/docs/id/memory#auto-memory) nonaktif secara default. Untuk instruksi yang harus terbawa antar sesi, gunakan `CLAUDE.md` di image runner Anda atau di repositori.

586 692 

587Snapshot runner atas `~/.claude/` host tidak menyertakan direktori `projects/`. Lokasi penyimpanan default auto memory berada di bawah direktori tersebut. Jika Anda meletakkan file memori di sana, runner tidak menanamkannya ke dalam sesi, dan file tersebut tidak mengaktifkan auto memory.693Snapshot runner atas `~/.claude/` host tidak menyertakan direktori `projects/`. Lokasi penyimpanan default auto memory berada di bawah direktori tersebut. Jika Anda meletakkan file memori di sana, runner tidak menanamkannya ke dalam sesi, dan file tersebut tidak mengaktifkan auto memory.

Details

20 20 

21* **Container ephemeral per sesi**: jalankan setiap proses runner dalam container atau VM baru yang dihancurkan saat proses berakhir, dengan `--capacity 1` dan `--drain-grace-sec 0` default sehingga setiap container melayani tepat satu sesi. Pada kapasitas yang lebih tinggi, atau dengan drain grace positif, satu container melayani beberapa sesi dari [pemilik terkunci](/docs/id/self-hosted-environments#key-concepts) yang sama; lihat [Siklus hidup runner](/docs/id/self-hosted-environments#runner-lifecycle). Jangan gunakan ulang sistem file di antara restart runner, kecuali dalam penyiapan [checkout yang sudah dipanaskan sebelumnya](#reuse-a-pre-warmed-checkout) yang disengaja, dan jangan pernah lintas pemilik.21* **Container ephemeral per sesi**: jalankan setiap proses runner dalam container atau VM baru yang dihancurkan saat proses berakhir, dengan `--capacity 1` dan `--drain-grace-sec 0` default sehingga setiap container melayani tepat satu sesi. Pada kapasitas yang lebih tinggi, atau dengan drain grace positif, satu container melayani beberapa sesi dari [pemilik terkunci](/docs/id/self-hosted-environments#key-concepts) yang sama; lihat [Siklus hidup runner](/docs/id/self-hosted-environments#runner-lifecycle). Jangan gunakan ulang sistem file di antara restart runner, kecuali dalam penyiapan [checkout yang sudah dipanaskan sebelumnya](#reuse-a-pre-warmed-checkout) yang disengaja, dan jangan pernah lintas pemilik.

22 * <span id="processes-a-stopped-session-leaves" />Saat runner menghentikan sesi, runner tidak mengirimkan sinyal ke proses yang masih berjalan setelah perintah shell-nya selesai, seperti layanan yang berjalan sebagai daemon. Menghancurkan container atau VM akan mengakhiri proses tersebut.22 * <span id="processes-a-stopped-session-leaves" />Saat runner menghentikan sesi, runner tidak mengirimkan sinyal ke proses yang masih berjalan setelah perintah shell-nya selesai, seperti layanan yang berjalan sebagai daemon. Menghancurkan container atau VM akan mengakhiri proses tersebut.

23* **Tidak ada kredensial luas di dalam image**: jangan sertakan kunci SSH berumur panjang, kredensial penyedia cloud, atau token akses pribadi yang memberikan lebih dari yang dibutuhkan sesi. Buat kredensial yang digunakan selama sesi, seperti token push atau API, per sesi dari [skrip wrapper](/docs/id/self-hosted-environments-configuration#wrapper-scripts) Anda. Untuk clone awal, yang terjadi sebelum wrapper berjalan, gunakan [hook siklus hidup `checkout`](/docs/id/self-hosted-environments-configuration#checkout) atau [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy); lihat [Konfigurasikan git](#configure-git).23* **Tidak ada kredensial luas di dalam image**: jangan sertakan kunci SSH berumur panjang, kredensial penyedia cloud, atau token akses pribadi yang memberikan lebih dari yang dibutuhkan sesi. Buat kredensial yang digunakan selama sesi, seperti token push atau API, per sesi dari [skrip wrapper](/docs/id/self-hosted-environments-configuration#wrapper-scripts) Anda. Clone awal terjadi sebelum wrapper berjalan, jadi tangani dengan [hook siklus hidup `checkout`](/docs/id/self-hosted-environments-configuration#checkout), atau dengan [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) jika semua repositori sesi berada di github.com. Untuk keduanya, lihat [Konfigurasikan git](#configure-git).

24* **Jauhkan kredensial GitHub milik host dari sesi**: Claude dapat menggunakan kredensial GitHub apa pun yang dapat dibaca oleh sesi, dengan akses apa pun yang diberikan oleh kredensial tersebut. Jauhkan kredensial GitHub milik host runner sendiri yang memiliki cakupan luas dari apa pun yang dapat dibaca oleh sesi. Kredensial semacam itu dapat berupa token akses pribadi, token yang disimpan `gh auth login` untuk akun Anda, atau `GH_TOKEN` di lingkungan runner.

25 * **Dengan [git yang dikelola Anthropic](#use-the-anthropic-git-proxy)**: dengan kredensial semacam itu, Claude menjangkau GitHub secara langsung alih-alih melalui git yang dikelola Anthropic.

26 * **Tanpa git yang dikelola Anthropic**: kredensial clone dapat tetap berada di dalam image jika Anda membatasinya seketat yang dijelaskan di [Sertakan konfigurasi git di image Anda](#ship-git-config-in-your-image).

24* **Jauhkan secret lingkungan dari host yang menjalankan sesi**: secret lingkungan dapat mendaftarkan runner dan mengambil sesi apa pun yang diantrekan pada lingkungan tersebut. Pada armada tetap, secret ini berada di setiap host runner, tempat kode sesi mana pun dapat membaca file secret. Utamakan [runner on-demand](/docs/id/self-hosted-environments-configuration#on-demand-runners), di mana secret tetap berada di host orkestrator, yang tidak pernah menjalankan kode pengguna, dan setiap runner menerima work order sekali pakai yang mendaftarkan tepat satu runner. Pada armada tetap, perlakukan file secret lingkungan sebagai dapat dibaca oleh setiap sesi dan rotasi secret setelah adanya dugaan kompromi sesi.27* **Jauhkan secret lingkungan dari host yang menjalankan sesi**: secret lingkungan dapat mendaftarkan runner dan mengambil sesi apa pun yang diantrekan pada lingkungan tersebut. Pada armada tetap, secret ini berada di setiap host runner, tempat kode sesi mana pun dapat membaca file secret. Utamakan [runner on-demand](/docs/id/self-hosted-environments-configuration#on-demand-runners), di mana secret tetap berada di host orkestrator, yang tidak pernah menjalankan kode pengguna, dan setiap runner menerima work order sekali pakai yang mendaftarkan tepat satu runner. Pada armada tetap, perlakukan file secret lingkungan sebagai dapat dibaca oleh setiap sesi dan rotasi secret setelah adanya dugaan kompromi sesi.

25* **Tolak egress jaringan secara default**: batasi lalu lintas keluar runner dan container sesi di batas jaringan Anda sendiri pada setiap lingkungan; [Tolak egress secara default](#default-deny-egress) menjelaskan apa yang perlu diizinkan dan alasannya.28* **Tolak egress jaringan secara default**: batasi lalu lintas keluar runner dan container sesi di batas jaringan Anda sendiri pada setiap lingkungan; [Tolak egress secara default](#default-deny-egress) menjelaskan apa yang perlu diizinkan dan alasannya.

26* **IAM host dengan hak akses minimal**: identitas komputasi yang terpasang pada host runner, seperti instance profile atau akun layanan node, sebaiknya hanya memberikan apa yang dibutuhkan oleh runner itu sendiri. Sesi sebaiknya memperoleh kredensialnya sendiri melalui skrip wrapper Anda alih-alih mewarisi kredensial host.29* **IAM host dengan hak akses minimal**: identitas komputasi yang terpasang pada host runner, seperti instance profile atau akun layanan node, sebaiknya hanya memberikan apa yang dibutuhkan oleh runner itu sendiri. Sesi sebaiknya memperoleh kredensialnya sendiri melalui skrip wrapper Anda alih-alih mewarisi kredensial host.


42 Guard berjalan terlepas dari [`--trust-workspace`](/docs/id/self-hosted-environments-reference#runner-cli-flags), dan tidak mencakup hook repositori, `.mcp.json`, atau aturan Bash; lihat [Izin dan persetujuan tool](/docs/id/self-hosted-environments-configuration#permissions-and-tool-approval) untuk mengetahui tempat pemberian akses tersebut seharusnya berada.45 Guard berjalan terlepas dari [`--trust-workspace`](/docs/id/self-hosted-environments-reference#runner-cli-flags), dan tidak mencakup hook repositori, `.mcp.json`, atau aturan Bash; lihat [Izin dan persetujuan tool](/docs/id/self-hosted-environments-configuration#permissions-and-tool-approval) untuk mengetahui tempat pemberian akses tersebut seharusnya berada.

43 46 

44<Note>47<Note>

45 Allowlist IP organisasi Anda tidak mencakup lalu lintas runner self-hosted secara default. Jangan mengandalkannya sebagai kontrol jaringan untuk lalu lintas runner atau sesi; sebagai gantinya, terapkan penolakan egress secara default di batas jaringan Anda sendiri, dan hubungi tim akun Anthropic Anda jika Anda menginginkan penerapan allowlist IP untuk organisasi Anda.48 Jika organisasi Anda mengaktifkan [allowlist IP](https://support.claude.com/en/articles/13200993-restrict-access-to-claude-with-ip-allowlisting), tambahkan alamat egress publik runner dan container sesi Anda ke allowlist sebelum Anda memulainya. Jika Anda menjalankan [runner on-demand](/docs/id/self-hosted-environments-configuration#on-demand-runners), tambahkan juga alamat host orkestrator. Jangan mengandalkan allowlist sebagai kontrol jaringan untuk lalu lintas runner atau sesi. Sebagai gantinya, terapkan penolakan egress secara default di batas jaringan Anda sendiri.

46</Note>49</Note>

47 50 

48<h2 id="network-requirements">51<h2 id="network-requirements">


55 58 

56| Host | Port | Digunakan untuk |59| Host | Port | Digunakan untuk |

57| :- | :- | :- |60| :- | :- | :- |

58| `api.anthropic.com` | 443, HTTPS; WSS untuk konektor SCM saja | Bidang kontrol runner dan streaming sesi, inferensi model, flag fitur, analitik produk, pengambilan kunci [JWKS](/docs/id/self-hosted-environments-identity), penandatanganan komit, proxy git ketika `--use-anthropic-git-proxy` diatur, dan terowongan [SCM connector](/docs/id/self-hosted-environments-reference#scm-connector-flags) orchestrator ketika `--scm-connector-host` diatur |61| `api.anthropic.com` | 443, HTTPS; WSS untuk [git yang dikelola Anthropic](#use-the-anthropic-git-proxy) | Bidang kontrol runner dan streaming sesi, inferensi model, flag fitur, analitik produk, pengambilan kunci [JWKS](/docs/id/self-hosted-environments-identity), penandatanganan commit, dan git yang dikelola Anthropic ketika `--use-anthropic-git-proxy` diatur |

59| Host git Anda, seperti `github.com` atau host GitHub Enterprise Anda | 443 atau 22 | Kloning dan push repositori. Tidak diperlukan jika runner menggunakan `--use-anthropic-git-proxy`, yang merutekan lalu lintas git melalui `api.anthropic.com`. |62| Host git Anda, seperti `github.com` atau host GitHub Enterprise Anda | 443 atau 22 | Kloning dan push repositori di setiap host git yang digunakan oleh sesi runner. Pada runner yang menggunakan [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), lihat [kapan jalur `github.com` masih diperlukan](#github-com-egress-with-the-anthropic-git-proxy). |

63 

64<span id="github-com-egress-with-the-anthropic-git-proxy" />Runner yang menggunakan [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) merutekan lalu lintas git `github.com`-nya melalui `api.anthropic.com`, sehingga tidak memerlukan jalur host git untuk `github.com`. Runner tersebut tetap memerlukan jalur itu jika Anda mengatur `--push-outcome-on-release` atau melakukan push dari hook `post-session`.

60 65 

61Apakah host-host ini diperlukan tergantung pada konfigurasi Anda:66Apakah host-host ini diperlukan tergantung pada konfigurasi Anda:

62 67 


71| `browser-intake-us5-datadoghq.com` | 443 | Unggahan laporan kesalahan Anthropic, dikirim hanya ketika [pelaporan kesalahan](/docs/id/data-usage#telemetry-services) diaktifkan untuk akun sesi. Ditekan oleh `DISABLE_ERROR_REPORTING=1` atau `DISABLE_TELEMETRY=1`. |76| `browser-intake-us5-datadoghq.com` | 443 | Unggahan laporan kesalahan Anthropic, dikirim hanya ketika [pelaporan kesalahan](/docs/id/data-usage#telemetry-services) diaktifkan untuk akun sesi. Ditekan oleh `DISABLE_ERROR_REPORTING=1` atau `DISABLE_TELEMETRY=1`. |

72| Endpoint penyedia cloud Anda untuk permintaan model, pencarian model, dan pembaruan kredensial, seperti `bedrock-runtime.us-east-1.amazonaws.com` atau `aiplatform.googleapis.com` | 443 | Hanya ketika runner [mengirim permintaan model ke Amazon Bedrock atau Agent Platform Google Cloud](/docs/id/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform) |77| Endpoint penyedia cloud Anda untuk permintaan model, pencarian model, dan pembaruan kredensial, seperti `bedrock-runtime.us-east-1.amazonaws.com` atau `aiplatform.googleapis.com` | 443 | Hanya ketika runner [mengirim permintaan model ke Amazon Bedrock atau Agent Platform Google Cloud](/docs/id/self-hosted-environments-configuration#send-model-requests-to-bedrock-or-agent-platform) |

73 78 

74Runner tidak menjangkau `statsig.anthropic.com`, `*.sentry.io`, `claude.ai`, atau `platform.claude.com`. Host-host ini muncul dalam beberapa daftar periksa jaringan enterprise yang lebih lama, tetapi Anda tidak perlu mengizinkan daftar mereka untuk lalu lintas runner atau sesi: pengambilan flag fitur pergi ke `api.anthropic.com`, dan runner mengautentikasi dengan rahasia lingkungan daripada OAuth interaktif. Dua alur sisi host memang menjangkau `claude.ai`, jadi jalankan dari host yang egress-nya memungkinkannya daripada memperluas egress kontainer sesi: installer satu baris mengambil `install.sh` dari `claude.ai` pada waktu instalasi, dan `claude auth login` interaktif, yang [guided setup](/docs/id/self-hosted-environments-quickstart#set-up-an-environment-and-runner), mode signed-in `doctor`, dan [CI dispatch](/docs/id/self-hosted-environments-testing#authenticate-from-ci) gunakan, masuk melalui `claude.ai`, `claude.com`, dan `platform.claude.com`. `mcp-proxy.anthropic.com` juga tidak diperlukan: sesi yang di-host sendiri tidak menggunakannya, dan pengiriman konektor claude.ai organisasi Anda ke sesi, ketika diaktifkan untuk organisasi Anda, merutekan melalui `api.anthropic.com`. Lihat [MCP servers](/docs/id/self-hosted-environments-configuration#mcp-servers).79Anda tidak perlu menambahkan host-host ini ke allowlist untuk lalu lintas runner atau sesi:

80 

81* **`statsig.anthropic.com`, `*.sentry.io`, `claude.ai`, dan `platform.claude.com`**: host-host ini muncul dalam beberapa daftar periksa jaringan enterprise yang lebih lama, tetapi runner tidak menjangkaunya. Pengambilan flag fitur pergi ke `api.anthropic.com`, dan runner mengautentikasi dengan rahasia lingkungan daripada OAuth interaktif.

82* **`mcp-proxy.anthropic.com`**: sesi yang di-host sendiri tidak menggunakannya. Ketika pengiriman konektor diaktifkan untuk organisasi Anda, konektor claude.ai organisasi Anda menjangkau sesi melalui `api.anthropic.com`. Lihat [MCP servers](/docs/id/self-hosted-environments-configuration#mcp-servers).

83 

84Alur sisi host berikut memang menjangkau `claude.ai`, jadi jalankan dari host yang egress-nya memungkinkannya daripada memperluas egress kontainer sesi:

85 

86* **Installer satu baris**: mengambil `install.sh` dari `claude.ai` pada waktu instalasi.

87* **`claude auth login` interaktif**: masuk melalui `claude.ai`, `claude.com`, dan `platform.claude.com`. [Guided setup](/docs/id/self-hosted-environments-quickstart#run-the-guided-setup), mode signed-in `doctor`, dan [CI dispatch](/docs/id/self-hosted-environments-testing#authenticate-from-ci) menggunakannya. Browser yang Anda gunakan untuk masuk juga memuat pemeriksaan browser halaman masuk claude.ai dari `hcaptcha.com`, `*.hcaptcha.com`, dan `challenges.cloudflare.com`.

75 88 

76<h3 id="default-deny-egress">89<h3 id="default-deny-egress">

77 Default-deny egress90 Default-deny egress


127* **Biarkan runner mengonfigurasi git**: mulai runner dengan `--configure-git` untuk memilikinya menulis identitas yang sama dan konfigurasi penandatanganan komit yang digunakan sesi yang di-host Anthropic140* **Biarkan runner mengonfigurasi git**: mulai runner dengan `--configure-git` untuk memilikinya menulis identitas yang sama dan konfigurasi penandatanganan komit yang digunakan sesi yang di-host Anthropic

128* **Kirim konfigurasi git dalam gambar Anda**: atur identitas dan kredensial push sendiri, misalnya untuk berkomitmen di bawah identitas bot Anda sendiri141* **Kirim konfigurasi git dalam gambar Anda**: atur identitas dan kredensial push sendiri, misalnya untuk berkomitmen di bawah identitas bot Anda sendiri

129 142 

143Untuk repositori di github.com, Anda juga dapat memulai runner dengan [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), atau menetapkan `CLAUDE_RUNNER_USE_GIT_PROXY=1`, untuk meminta Anthropic melayani git bagi sesi-sesi runner.

144 

130Lantai versi Git di host runner: [`--configure-git`](#let-the-runner-configure-git) penandatanganan komit SSH memerlukan Git 2.34 atau lebih baru, [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) memerlukan 2.32 atau lebih baru, dan melanjutkan sesi dari cabang yang didorong oleh [`--push-outcome-on-release`](/docs/id/self-hosted-environments-reference#runner-cli-flags) memerlukan 2.29 atau lebih baru. Git 2.24 cukup jika Anda menghilangkan ketiganya dan mengelola identitas git sendiri.145Lantai versi Git di host runner: [`--configure-git`](#let-the-runner-configure-git) penandatanganan komit SSH memerlukan Git 2.34 atau lebih baru, [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy) memerlukan 2.32 atau lebih baru, dan melanjutkan sesi dari cabang yang didorong oleh [`--push-outcome-on-release`](/docs/id/self-hosted-environments-reference#runner-cli-flags) memerlukan 2.29 atau lebih baru. Git 2.24 cukup jika Anda menghilangkan ketiganya dan mengelola identitas git sendiri.

131 146 

132<h3 id="let-the-runner-configure-git">147<h3 id="let-the-runner-configure-git">


138* `user.name = Claude` dan `user.email = noreply@anthropic.com`, cocok dengan sesi yang di-host Anthropic153* `user.name = Claude` dan `user.email = noreply@anthropic.com`, cocok dengan sesi yang di-host Anthropic

139* Penandatanganan komit dan tag format SSH, dirutekan melalui shim yang dikelola runner yang menandatangani setiap komit melalui layanan penandatanganan Anthropic menggunakan kredensial sesi itu sendiri. Tanda tangan dapat diverifikasi di GitHub terhadap kunci penandatanganan SSH yang dipublikasikan Anthropic.154* Penandatanganan komit dan tag format SSH, dirutekan melalui shim yang dikelola runner yang menandatangani setiap komit melalui layanan penandatanganan Anthropic menggunakan kredensial sesi itu sendiri. Tanda tangan dapat diverifikasi di GitHub terhadap kunci penandatanganan SSH yang dipublikasikan Anthropic.

140* `push.negotiate = true`, jadi git menanyakan host git Anda komit mana yang sudah dimilikinya sebelum mengemas push. Memerlukan Claude Code v2.1.257 atau lebih baru.155* `push.negotiate = true`, jadi git menanyakan host git Anda komit mana yang sudah dimilikinya sebelum mengemas push. Memerlukan Claude Code v2.1.257 atau lebih baru.

141* `core.hooksPath` menunjuk ke direktori hooks yang dikelola runner. Hook `commit-msg` dan `prepare-commit-msg`-nya menambahkan trailer `Co-authored-by:` untuk pembuat sesi ke setiap komit, dibangun dari email dalam [`CCR_SESSION_ACCOUNT_EMAIL`](/docs/id/self-hosted-environments-configuration#wrapper-scripts) dan dihilangkan ketika variabel itu tidak diatur. Jika gambar Anda sudah menetapkan `core.hooksPath`, runner membiarkan pengaturan Anda tetap, melewati instalasi hook ini, dan mencetak peringatan `[runner:git]`.156* `core.hooksPath` menunjuk ke direktori hooks yang dikelola runner. Hook `commit-msg` dan `prepare-commit-msg`-nya menambahkan trailer `Co-authored-by:` untuk pembuat sesi ke setiap commit. Trailer tersebut dibangun dari email dalam [`CCR_SESSION_ACCOUNT_EMAIL`](/docs/id/self-hosted-environments-configuration#wrapper-scripts) dan dihilangkan ketika variabel itu tidak diatur. Jika gambar Anda sudah menetapkan `core.hooksPath` dan runner tidak menggunakan [git yang dikelola Anthropic](#use-the-anthropic-git-proxy), runner mempertahankan pengaturan Anda, melewati instalasi hook ini, dan mencetak peringatan `[runner:git]`.

142 157 

143Penandatanganan komit memerlukan git 2.34 atau lebih baru; runner memeriksa pada startup dan keluar dengan kesalahan jika git Anda lebih lama. Flag ini tidak mengonfigurasi kredensial push, yang masih Anda sediakan dalam gambar.158Penandatanganan komit memerlukan git 2.34 atau lebih baru; runner memeriksa pada startup dan keluar dengan kesalahan jika git Anda lebih lama. Flag ini tidak mengonfigurasi kredensial push, yang masih Anda sediakan dalam gambar.

144 159 

145Pada runner dengan v2.1.280 atau lebih baru, commit yang Anda buat dari lifecycle hook `checkout` atau `post-session` juga ditandatangani sebagai sesi, tanpa trailer `Co-authored-by:`. [Konfigurasi git di dalam lifecycle hook](/docs/id/self-hosted-environments-configuration#git-configuration-inside-lifecycle-hooks) menjelaskan pengaturan git yang ditetapkan runner di dalam hook tersebut.160Pada runner dengan v2.1.280 atau lebih baru, commit yang Anda buat dari lifecycle hook `checkout` atau `post-session` juga ditandatangani sebagai sesi, tanpa trailer `Co-authored-by:`. [Konfigurasi git di dalam lifecycle hook](/docs/id/self-hosted-environments-configuration#git-configuration-inside-lifecycle-hooks) menjelaskan pengaturan git yang ditetapkan runner di dalam hook tersebut.

146 161 

162Dengan atau tanpa `--configure-git`, Claude Code menginstruksikan Claude untuk mengakhiri pesan commit-nya dengan trailer `Claude-Session: <url>` dan deskripsi pull request-nya dengan URL sesi. Untuk menghilangkan keduanya, atur [`attribution.sessionUrl`](/docs/id/settings-reference#attribution-sessionurl) ke `false` di [`~/.claude/settings.json`](/docs/id/self-hosted-environments-configuration#how-each-session’s-config-is-assembled) host runner, lalu mulai ulang runner.

163 

147<h3 id="ship-git-config-in-your-image">164<h3 id="ship-git-config-in-your-image">

148 Kirim konfigurasi git dalam gambar Anda165 Kirim konfigurasi git dalam gambar Anda

149</h3>166</h3>


186 Gunakan proxy git Anthropic203 Gunakan proxy git Anthropic

187</h3>204</h3>

188 205 

189Mulai runner dengan `--use-anthropic-git-proxy`, atau atur `CLAUDE_RUNNER_USE_GIT_PROXY=1`, untuk memilikinya klon melalui proxy git Anthropic, diautentikasi dengan token jangka pendek sesi itu sendiri. Untuk sesi pengguna biasa, proxy menggunakan token OAuth GitHub atau GitHub Enterprise yang disimpan untuk pembuat sesi; untuk sesi bot dan agen, itu menggunakan token instalasi GitHub App organisasi Anda. Bagaimanapun, gambar runner tidak memerlukan kredensial git sama sekali: tidak ada kunci SSH, tidak ada credential helper, tidak ada `.netrc`. Ini adalah jalur auth yang sama yang digunakan lingkungan yang di-host Anthropic.206Dengan proxy git Anthropic, yang juga disebut git yang dikelola Anthropic, gambar runner tidak memerlukan kunci SSH, credential helper, `.netrc`, atau kredensial git lain untuk sesi itu sendiri. Sebagai gantinya, runner meminta Anthropic untuk melayani git bagi sesi-sesinya. Untuk sesi pengguna yang dilayani Anthropic, clone runner serta fetch dan push milik sesi itu sendiri melewati Anthropic, yang menggunakan token OAuth GitHub yang disimpan untuk pembuat sesi. [Bagaimana Anthropic melayani git untuk sebuah sesi](#how-anthropic-serves-git-for-a-session) membahas sesi bot dan agent.

207 

208Proxy git nonaktif kecuali Anda [mengaktifkannya](#turn-the-anthropic-git-proxy-on). Runner yang menjangkau host git Anda dengan kredensialnya sendiri tidak memerlukannya, dan git-nya bekerja dengan host git apa pun.

209 

210Sebagai gantinya, proxy git membatasi apa yang didukung runner dan mengubah apa yang dibutuhkannya:

211 

212* **Hanya github.com**: Anthropic melayani sebuah sesi hanya ketika semua repositorinya berada di github.com, dan proxy git belum mendukung GitHub Enterprise Server. Pada runner dengan proxy git, sesi dengan repositori di host git lain [gagal dimulai](#when-anthropic-doesnt-serve-a-session).

213* **Kredensial hanya untuk repositori sesi**: Anthropic menyediakan kredensial git untuk repositori yang merupakan bagian dari sesi, bukan untuk repositori lain di host git yang sama. Submodule privat, dependensi yang di-fetch oleh package manager Anda dengan git, atau marketplace plugin di repositori lain tidak mendapatkan kredensial dari Anthropic. Minta orang-orang yang membuat sesi untuk [menambahkan setiap repositori](/docs/id/web-quickstart#start-a-task) yang dibutuhkan sesi saat mereka membuatnya.

214* **Hanya push branch**: push yang menghapus branch gagal, begitu pula push ke jenis ref lain, seperti tag. Untuk branch mana yang dapat diperbarui oleh push, lihat [GitHub proxy](/docs/id/cloud-environments#github-proxy).

215* **Akun GitHub yang terhubung**: orang yang membuat sesi pengguna harus telah menghubungkan GitHub di claude.ai, atau sesi [tidak dimulai](#creator-has-no-github-connection).

216* **`--capacity 1`**: proxy git memerlukan satu sesi per proses runner, jadi jalankan lebih banyak replika untuk paralelisme. [Aktifkan proxy git Anthropic](#turn-the-anthropic-git-proxy-on) mencantumkan persyaratannya.

217* **Konfigurasi git global yang digantikan**: runner [menghapus dan menggantikan konfigurasi git global](#git-proxy-replaces-global-git-config) milik pengguna yang menjalankannya. Jalankan runner sebagai pengguna khusus atau di dalam kontainer.

218* **Kredensial host untuk push dari host**: push [`--push-outcome-on-release`](/docs/id/self-hosted-environments-reference#runner-cli-flags) milik runner dan push apa pun yang dilakukan [hook `post-session`](/docs/id/self-hosted-environments-configuration#post-session) Anda tetap menggunakan kredensial git milik host runner sendiri dan [jalur jaringannya ke `github.com`](#github-com-egress-with-the-anthropic-git-proxy). Untuk kredensial tersebut, lihat [Kirim konfigurasi git dalam gambar Anda](#ship-git-config-in-your-image).

219* **Keputusan per sesi**: Anthropic memutuskan untuk setiap sesi di runner apakah akan melayani git-nya, dan sesi yang tidak dilayaninya gagal dimulai. [Ketika sesi gagal dimulai pada runner dengan proxy git](#when-anthropic-doesnt-serve-a-session) membahas penyebabnya.

220 

221<span id="git-proxy-replaces-global-git-config" />

222 

223<Warning>

224 Dengan `--use-anthropic-git-proxy` ditetapkan, runner menghapus dan menggantikan konfigurasi git global milik pengguna yang menjalankannya, tanpa menyimpan cadangan. Ini dilakukan saat startup dan sebelum setiap sesi. Login atau credential helper yang Anda simpan di sana akan hilang. Pengaturan yang ditulis [`--configure-git`](#let-the-runner-configure-git) tetap bertahan. Jalankan runner sebagai pengguna khusus atau di dalam kontainer, jangan pernah sebagai pengguna Anda sendiri.

225</Warning>

226 

227Simpan pengaturan git yang tidak rahasia, seperti identitas dan `safe.directory`, di konfigurasi git sistem.

228 

229<h4 id="turn-the-anthropic-git-proxy-on">

230 Aktifkan proxy git Anthropic

231</h4>

232 

233Sebelum Anda memulai runner dengan `--use-anthropic-git-proxy`, pastikan host runner memenuhi setiap persyaratan berikut. Runner menolak untuk dimulai ketika persyaratan kapasitas atau git tidak terpenuhi:

190 234 

191Proxy memerlukan `--capacity 1` karena URL proxy adalah per-sesi, dan git 2.32 atau lebih baru karena git yang lebih lama mengabaikan mekanisme konfigurasi yang digunakan proxy untuk mengisolasi sesi satu sama lain. Runner menolak untuk memulai jika salah satu persyaratan tidak terpenuhi. Karena proxy mengambil dari sisi Anthropic, host git Anda harus dapat dijangkau dari infrastruktur Anthropic, persyaratan yang sama yang dimiliki sesi yang di-host Anthropic; untuk host git yang hanya dapat dirutekan di dalam jaringan Anda, gunakan [`checkout` lifecycle hook](/docs/id/self-hosted-environments-configuration#checkout). Setiap proses runner menangani satu sesi pada satu waktu, jadi jalankan lebih banyak replika untuk paralelisme. Ketika proxy diaktifkan, `--git-host-rewrite` dan `--git-ssh-rewrite` tidak berpengaruh: URL proxy menunjuk ke `api.anthropic.com`, bukan host git Anda.235* **Claude Code v2.1.267 atau lebih baru**: versi sebelumnya menerima flag tetapi tidak melaporkan permintaan agar Anthropic melayani git atau mencetak baris `Registering as opted in`, sehingga Anthropic tidak melayani sesi-sesinya.

236* **`--capacity 1`, nilai default**: setiap proses runner menangani satu sesi pada satu waktu, jadi jalankan lebih banyak replika untuk paralelisme.

237* **Git 2.32 atau lebih baru**: git yang lebih lama mengabaikan konfigurasi git per sesi yang disiapkan runner untuk proxy git.

192 238 

193<Warning>239<Warning>

194 Resep [Kubernetes](#kubernetes) dan [Docker Compose](#docker-compose) di halaman ini menggunakan `--capacity 4`. Jika Anda menambahkan `--use-anthropic-git-proxy` atau `CLAUDE_RUNNER_USE_GIT_PROXY=1` ke salah satunya tanpa mengubah kapasitas menjadi `1`, runner keluar pada startup setiap kali orchestrator Anda memulainya kembali. Atur `--capacity 1` dan jalankan lebih banyak replika untuk paralelisme. [When the runner exits](#when-the-runner-exits) menunjukkan baris yang dicetak runner.240 Resep [Kubernetes](#kubernetes) dan [Docker Compose](#docker-compose) di halaman ini menggunakan `--capacity 4`. Jika Anda menambahkan `--use-anthropic-git-proxy` atau `CLAUDE_RUNNER_USE_GIT_PROXY=1` ke salah satunya tanpa mengubah kapasitas menjadi `1`, runner keluar pada startup setiap kali orchestrator Anda memulainya kembali. Atur `--capacity 1` dan jalankan lebih banyak replika untuk paralelisme. [When the runner exits](#when-the-runner-exits) menunjukkan baris yang dicetak runner.

195</Warning>241</Warning>

196 242 

197Runner juga melaporkan opt-in ke Anthropic ketika mendaftar, mencetak `Registering as opted in to Anthropic-managed git (--use-anthropic-git-proxy)` pada startup. Melaporkan opt-in memerlukan Claude Code v2.1.267 atau lebih baru, dan versi sebelumnya menerima flag tanpa melaporkannya atau mencetak baris itu. Setiap sesi pada runner yang telah opt-in kemudian menggunakan baik git yang dikelola Anthropic atau URL proxy per-sesi. Ketika sesi menggunakan URL proxy per-sesi, runner mencatat satu baris `[runner:warn]` mengatakan demikian.243Untuk mengaktifkan proxy git, tambahkan `--use-anthropic-git-proxy` ke perintah runner, atau atur `CLAUDE_RUNNER_USE_GIT_PROXY=1` di lingkungan runner. Perintah ini, yang dijalankan di shell pada host runner, memulai runner dari [mulai cepat](/docs/id/self-hosted-environments-quickstart#set-up-manually) dengan proxy git aktif:

244 

245```bash theme={null}

246claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>' --use-anthropic-git-proxy

247```

248 

249Saat startup, runner mencetak `Registering as opted in to Anthropic-managed git (--use-anthropic-git-proxy)`. Anthropic kemudian memutuskan untuk setiap sesi pada runner tersebut apakah akan melayani git-nya. Untuk setiap sesi yang dilayaninya, runner mencatat baris `[runner:session]` yang berisi `governed git ACTIVE`. Jika sebuah sesi justru gagal dimulai, lihat [Ketika sesi gagal dimulai pada runner dengan proxy git](#when-anthropic-doesnt-serve-a-session).

250 

251<h4 id="how-anthropic-serves-git-for-a-session">

252 Bagaimana Anthropic melayani git untuk sebuah sesi

253</h4>

254 

255Untuk sesi yang dilayani Anthropic, clone runner serta fetch dan push milik sesi itu sendiri melewati Anthropic, diautentikasi dengan token jangka pendek milik sesi itu sendiri:

256 

257* **Sesi pengguna**: Anthropic menggunakan token OAuth GitHub yang disimpan untuk pembuat sesi.

258* **Sesi bot dan agent**: Anthropic menggunakan token instalasi GitHub App organisasi Anda.

259* **Penulisan ulang URL**: `--git-host-rewrite` dan `--git-ssh-rewrite` tidak berpengaruh pada repositori yang dilayani proxy git.

260 

261<h4 id="when-anthropic-doesnt-serve-a-session">

262 Ketika sesi gagal dimulai pada runner dengan proxy git

263</h4>

264 

265Pada runner yang dimulai dengan `--use-anthropic-git-proxy`, sebuah sesi gagal dimulai ketika Anthropic tidak melayani git-nya. Cari di log runner kesalahan git yang menyebutkan alamat `api.anthropic.com` yang berisi `/git_proxy/`.

266 

267Untuk setiap sesi, runner dengan Claude Code v2.1.267 atau lebih baru juga mencatat baris `[runner:session]` yang berisi `governed git ACTIVE` ketika Anthropic melayani git sesi tersebut, atau satu baris `[runner:warn]` yang berisi `the server withheld Anthropic-managed git for this session` ketika tidak. Temukan baris yang Anda lihat di antara kasus-kasus berikut:

268 

269* **Baik `governed git ACTIVE` maupun baris `withheld` tidak ada**: runner yang lebih lama dari Claude Code v2.1.267 tidak mencatat kedua baris tersebut, dan Anthropic tidak melayani sesi-sesinya. Perbarui runner ke v2.1.267 atau lebih baru dengan mengikuti [Pin the version](#pin-the-version).

270* **Baris `withheld`**: Anthropic tidak melayani sesi tersebut. Runner yang sebelumnya bekerja dengan proxy git dapat gagal dengan cara ini tanpa perubahan apa pun di pihak Anda.

271 * **Sebuah repositori tidak berada di github.com**: sesi dengan satu repositori saja di host git lain, seperti GitHub Enterprise Server, tidak dilayani, termasuk repositori github.com-nya. [Nonaktifkan proxy git Anthropic](#turn-the-anthropic-git-proxy-off) untuk runner di lingkungan tersebut.

272 * **Setiap repositori berada di github.com**: laporkan kegagalan tersebut ke [tim akun Anthropic Anda](#report-an-issue) dengan ID sesi dari baris `withheld`. Anthropic mencatat alasannya di sisinya.

273* **Baris yang berisi `remote: access denied by the git proxy`**: sesi yang dilayani Anthropic masih dapat ditolak, misalnya ketika kebijakan organisasi menolak akses git untuk sesi tersebut, atau sesi tidak diotorisasi untuk repositori. Log runner kemudian menampilkan baris yang berisi `remote: access denied by the git proxy`, dan sisa baris tersebut menjelaskan alasannya.

274* <span id="creator-has-no-github-connection" />**`GitHub authentication required`**: ini muncul ketika pembuat sesi tidak memiliki koneksi GitHub yang berfungsi di claude.ai. Clone sesi gagal, dan kesalahan git berbunyi `GitHub authentication required. Please reconnect your GitHub account.` Minta orang tersebut untuk menghubungkan atau menghubungkan ulang GitHub di pengaturan claude.ai mereka.

275 

276Setelah Anda memperbaiki penyebabnya, mulai lagi sesi-sesi yang gagal.

277 

278<h4 id="turn-the-anthropic-git-proxy-off">

279 Nonaktifkan proxy git Anthropic

280</h4>

281 

282Jika sesi di suatu lingkungan menggunakan repositori di host git selain github.com, seperti GitHub Enterprise Server, nonaktifkan `--use-anthropic-git-proxy` untuk runner di lingkungan tersebut.

283 

284<Steps>

285 <Step title="Hapus flag">

286 Hapus `--use-anthropic-git-proxy` dari perintah runner. Jika Anda mengatur `CLAUDE_RUNNER_USE_GIT_PROXY` di lingkungan runner, seperti pod spec atau file Compose, hapus dari sana. Di shell, batalkan pengaturannya:

287 

288 ```bash theme={null}

289 unset CLAUDE_RUNNER_USE_GIT_PROXY

290 ```

291 </Step>

292 

293 <Step title="Berikan kredensial git ke runner">

294 Sediakan kredensial yang bekerja tanpa prompt untuk setiap host git yang digunakan sesi-sesi runner, termasuk github.com. Kredensial apa pun yang ada di konfigurasi git global pengguna runner sudah hilang, karena runner menghapus konfigurasi tersebut selama `--use-anthropic-git-proxy` ditetapkan. [Kirim kredensial dalam gambar Anda](#ship-git-config-in-your-image) atau gunakan [lifecycle hook `checkout`](/docs/id/self-hosted-environments-configuration#checkout).

295 </Step>

296 

297 <Step title="Buka jalur jaringan">

298 Izinkan runner menjangkau setiap host git yang digunakan sesi-sesi runner pada port 443 atau 22. Lihat baris host git di [Persyaratan jaringan](#network-requirements).

299 </Step>

300 

301 <Step title="Mulai ulang runner">

302 Mulai ulang runner agar terdaftar tanpa proxy git. Kemudian mulai lagi setiap sesi yang gagal.

303 </Step>

304</Steps>

198 305 

199<h4 id="github-api-access-without-the-github-cli">306<h4 id="github-api-access-without-the-github-cli">

200 Akses GitHub API tanpa GitHub CLI307 Akses GitHub API tanpa GitHub CLI


266```dockerfile theme={null}373```dockerfile theme={null}

267FROM debian:bookworm-slim374FROM debian:bookworm-slim

268ARG CLAUDE_CODE_VERSION375ARG CLAUDE_CODE_VERSION

269RUN apt-get update && apt-get install -y --no-install-recommends git curl ca-certificates openssh-client \376RUN apt-get update && apt-get install -y --no-install-recommends git curl ca-certificates openssh-client jq \

270 && rm -rf /var/lib/apt/lists/*377 && rm -rf /var/lib/apt/lists/*

271RUN curl -fsSL "https://downloads.claude.ai/claude-code-releases/${CLAUDE_CODE_VERSION:?set with --build-arg CLAUDE_CODE_VERSION}/linux-x64/claude" \378RUN curl -fsSL "https://downloads.claude.ai/claude-code-releases/${CLAUDE_CODE_VERSION:?set with --build-arg CLAUDE_CODE_VERSION}/linux-x64/claude" \

272 -o /usr/local/bin/claude && chmod +x /usr/local/bin/claude379 -o /usr/local/bin/claude && chmod +x /usr/local/bin/claude


382kubectl create namespace claude-runners489kubectl create namespace claude-runners

383```490```

384 491 

385Buat Secret pendukung dari file lokal yang memegang nilai yang Anda salin dalam langkah [**Copy environment key**](/docs/id/self-hosted-environments-quickstart#set-up-an-environment-and-runner) UI admin, jadi rahasia tidak pernah muncul dalam riwayat shell Anda. Jalankan `(umask 077 && cat > ./environment-secret)`, tempel rahasia, tekan Enter, kemudian Ctrl-D. Kemudian buat Secret dan hapus file:492Buat Secret pendukung dari file lokal yang memegang nilai yang Anda salin dalam [langkah **Copy environment key**](/docs/id/self-hosted-environments-quickstart#set-up-manually) UI admin, jadi rahasia tidak pernah muncul dalam riwayat shell Anda. Jalankan `(umask 077 && cat > ./environment-secret)`, tempel rahasia, tekan Enter, kemudian Ctrl-D. Kemudian buat Secret dan hapus file:

386 493 

387```bash theme={null}494```bash theme={null}

388kubectl create secret generic claude-runner-environment-secret -n claude-runners --from-file=environment-secret=./environment-secret495kubectl create secret generic claude-runner-environment-secret -n claude-runners --from-file=environment-secret=./environment-secret


500 Gunakan kembali checkout yang telah dipanaskan sebelumnya607 Gunakan kembali checkout yang telah dipanaskan sebelumnya

501</h2>608</h2>

502 609 

503Untuk repositori besar, klon dapat mendominasi startup sesi. Pada `--capacity 1` tanpa [`checkout` hook](/docs/id/self-hosted-environments-configuration#checkout), runner menyimpan satu klon kanonik per repositori di `<base-dir>/<repo-owner>/<repo>` dan menggunakannya kembali di seluruh sesi: itu mengambil ref yang diminta, melepaskan `HEAD`, dan reset keras ke sana, yang hampir instan ketika sedikit yang berubah. Untuk melewati klon dingin, sediakan klon dalam salah satu dari dua cara:610Untuk repositori besar, klon dapat mendominasi startup sesi. Untuk melewati klon dingin, sediakan sendiri klon di jalur tempat runner menyimpan klonnya sendiri. Tanpa [`checkout` hook](/docs/id/self-hosted-environments-configuration#checkout), runner menyimpan satu klon kanonik per repositori di `<base-dir>/<repo-owner>/<repo>` dan menggunakannya kembali di seluruh sesi:

611 

612* **Pada `--capacity 1`**: runner mengambil ref yang diminta, melepaskan `HEAD`, dan melakukan reset keras ke sana, yang hampir instan ketika hanya sedikit yang berubah.

613* **Pada `--capacity` di atas satu**: runner mengambil ke dalam klon tersebut, lalu melakukan checkout worktree terpisah darinya untuk setiap sesi. Klon yang telah dipanaskan sebelumnya menghemat unduhan tetapi tidak menghemat checkout.

614 

615Sediakan klon di dalam image atau pada volume persisten:

504 616 

505* **Klon dalam gambar**: bangun klon ke gambar runner Anda di jalur itu. Setiap kontainer segar kemudian dimulai dengan klon hangat tanpa menggunakan kembali disk.617* **Klon dalam gambar**: bangun klon ke gambar runner Anda di jalur itu. Setiap kontainer segar kemudian dimulai dengan klon hangat tanpa menggunakan kembali disk.

506* **Klon pada volume persisten**: pada runner yang Anda pre-lock ke akun satu pengguna dengan [`--lock-to-account`](/docs/id/self-hosted-environments-reference#runner-cli-flags), arahkan `--base-dir` ke volume persisten, jadi disk hanya pernah melayani akun itu. Runner yang pre-locked tidak pernah mengambil sesi saluran Claude Tag, jadi opsi ini tidak berlaku untuk runner yang melayani mereka.618* **Klon pada volume persisten**: pada runner yang Anda pre-lock ke akun satu pengguna dengan [`--lock-to-account`](/docs/id/self-hosted-environments-reference#runner-cli-flags), arahkan `--base-dir` ke volume persisten, jadi disk hanya pernah melayani akun itu. Runner yang pre-locked tidak pernah mengambil sesi saluran Claude Tag, jadi opsi ini tidak berlaku untuk runner yang melayani mereka.


508Apa jalur penggunaan kembali lakukan dan tidak jamin:620Apa jalur penggunaan kembali lakukan dan tidak jamin:

509 621 

510* **Bentuk klon apa pun bekerja**: klon penuh, shallow, atau single-branch di jalur digunakan apa adanya. Runner tidak pernah melewatkan `--depth` ketika mengambil ke klon yang ada, jadi pre-warm penuh menyimpan riwayat penuhnya dan yang shallow tetap shallow. `CLAUDE_RUNNER_FETCH_DEPTH` (`full`, `0`, atau angka; default 50) mengontrol hanya klon dingin yang dibuat runner ketika tidak ada klon yang ada.622* **Bentuk klon apa pun bekerja**: klon penuh, shallow, atau single-branch di jalur digunakan apa adanya. Runner tidak pernah melewatkan `--depth` ketika mengambil ke klon yang ada, jadi pre-warm penuh menyimpan riwayat penuhnya dan yang shallow tetap shallow. `CLAUDE_RUNNER_FETCH_DEPTH` (`full`, `0`, atau angka; default 50) mengontrol hanya klon dingin yang dibuat runner ketika tidak ada klon yang ada.

511* **Perubahan terlacak reset, file tidak terlacak bertahan**: setiap sesi dimulai dari reset keras yang menghapus modifikasi sesi sebelumnya, tetapi runner tidak pernah menjalankan `git clean`, jadi file tidak terlacak dari sesi sebelumnya pemilik terkunci tetap di pohon.623* **Perubahan terlacak di-reset, file tidak terlacak bertahan**: pada `--capacity 1`, setiap sesi dimulai dari reset keras yang menghapus modifikasi terlacak dari sesi sebelumnya, tetapi runner tidak pernah menjalankan `git clean`, sehingga file tidak terlacak dari sesi-sesi sebelumnya milik pemilik terkunci tetap ada di pohon.

512* **Direktori per-sesi juga bertahan**: di samping checkout, runner membuat entri per-sesi di bawah `<base-dir>/_sessions/` untuk setiap sesi yang dijalankannya. Direktori konfigurasi Claude sesi menyimpan salinan lokal transkrip percakapan. Di sebelahnya duduk file yang diunggah sesi, ketika sesi memiliki apa pun. Direktori sesi duduk di sana juga: itu menyimpan worktree per-sesi apa pun dan checkout hook `checkout` sementara sesi berjalan, dan itu menyimpan apa pun yang Claude tulis di dalamnya.624* **Direktori per-sesi juga bertahan**: di samping checkout, runner membuat entri per-sesi di bawah `<base-dir>/_sessions/` untuk setiap sesi yang dijalankannya. Direktori konfigurasi Claude sesi menyimpan salinan lokal transkrip percakapan. Di sebelahnya duduk file yang diunggah sesi, ketika sesi memiliki apa pun. Direktori sesi duduk di sana juga: itu menyimpan worktree per-sesi apa pun dan checkout hook `checkout` sementara sesi berjalan, dan itu menyimpan apa pun yang Claude tulis di dalamnya.

513 625 

514 Secara default runner meninggalkan ini di tempat ketika sesi berakhir, jadi pada disk yang melampaui proses runner mereka menumpuk. Setiap sesi berjalan sebagai pengguna runner sendiri, jadi sesi kemudian apa pun yang disk layani dapat membacanya. Jika Anda menyimpan `--base-dir` persisten, ukuran volume untuk pertumbuhan itu. Hal yang sama berlaku untuk setup apa pun yang memulai ulang runner pada filesystem yang sama, termasuk resep [Docker Compose](#docker-compose).626 Secara default runner meninggalkan ini di tempat ketika sesi berakhir, jadi pada disk yang melampaui proses runner mereka menumpuk. Setiap sesi berjalan sebagai pengguna runner sendiri, jadi sesi kemudian apa pun yang disk layani dapat membacanya. Jika Anda menyimpan `--base-dir` persisten, ukuran volume untuk pertumbuhan itu. Hal yang sama berlaku untuk setup apa pun yang memulai ulang runner pada filesystem yang sama, termasuk resep [Docker Compose](#docker-compose).


522 634 

523Proses Claude Code anak setiap sesi menjalankan biner runner itu sendiri, dan runner mematikan auto-update di dalam sesi yang dihasilkannya, jadi setiap sesi menjalankan versi yang Anda instal di host atau bangun ke gambar. Update tingkat host berlaku waktu berikutnya runner dimulai.635Proses Claude Code anak setiap sesi menjalankan biner runner itu sendiri, dan runner mematikan auto-update di dalam sesi yang dihasilkannya, jadi setiap sesi menjalankan versi yang Anda instal di host atau bangun ke gambar. Update tingkat host berlaku waktu berikutnya runner dimulai.

524 636 

525Model yang digunakan sesi Anda dapat memerlukan versi Claude Code yang lebih baru daripada yang mereka jalankan. Server kemudian menolak permintaan untuk model tersebut dengan [Claude Code does not support this model](/docs/id/errors#claude-code-does-not-support-this-model). Sebelum Anda menyematkan versi, periksa [versi Claude Code yang diperlukan model](/docs/id/model-config#available-models) untuk setiap model yang digunakan sesi Anda.637Pilih versi yang dijalankan sesi Anda dan kapan versi tersebut berubah:

526 638 

639* **Sebelum Anda menyematkan versi**: periksa [versi Claude Code yang diperlukan model](/docs/id/model-config#available-models) untuk setiap model yang digunakan sesi Anda. Jika suatu model memerlukan versi yang lebih baru daripada yang dijalankan sesi Anda, server menolak permintaan untuk model tersebut dengan [Claude Code does not support this model](/docs/id/errors#claude-code-does-not-support-this-model).

527* **Untuk menyimpan armada pada satu versi**: bangun gambar dengan versi yang disematkan, atau pada host telanjang instal versi spesifik dan [nonaktifkan auto-update](/docs/id/setup#disable-auto-updates)640* **Untuk menyimpan armada pada satu versi**: bangun gambar dengan versi yang disematkan, atau pada host telanjang instal versi spesifik dan [nonaktifkan auto-update](/docs/id/setup#disable-auto-updates)

528* **Untuk upgrade**: instal versi yang lebih baru atau bangun ulang gambar, kemudian mulai ulang runner641* **Untuk upgrade armada tetap**: baca entri [changelog](/docs/en/changelog) antara versi Anda dan versi yang akan Anda instal, kemudian instal versi yang lebih baru atau build ulang gambar dan mulai ulang runner

642* **Untuk upgrade runner sesuai permintaan**: baca entri [changelog](/docs/en/changelog) antara versi Anda dan versi yang akan Anda instal, kemudian ubah gambar yang dimulai oleh [hook `spawn-runner`](/docs/id/self-hosted-environments-configuration#the-spawn-runner-hook) Anda. Setiap runner baru mendapatkan versi baru. Runner yang sudah berjalan, termasuk runner siaga yang dimulai oleh [`--min-idle`](/docs/id/self-hosted-environments-reference#orchestrator-cli-flags), mempertahankan versinya hingga keluar. Jangan mulai ulang runner tersebut, karena perintah kerjanya hanya sekali pakai.

529* **Plugin**: marketplace plugin tidak auto-update juga; atur `FORCE_AUTOUPDATE_PLUGINS=1` dalam lingkungan runner untuk membiarkan plugin auto-update sementara biner tetap disematkan643* **Plugin**: marketplace plugin tidak auto-update juga; atur `FORCE_AUTOUPDATE_PLUGINS=1` dalam lingkungan runner untuk membiarkan plugin auto-update sementara biner tetap disematkan

530 644 

531<h2 id="scale-the-fleet">645<h2 id="scale-the-fleet">


580</h3>694</h3>

581 695 

582* **Sesi yang dilanjutkan kehilangan pekerjaan yang belum di-push**: runner segar mengklon repositori lagi dari branch awalnya, jadi pekerjaan yang belum di-push oleh sesi hilang.696* **Sesi yang dilanjutkan kehilangan pekerjaan yang belum di-push**: runner segar mengklon repositori lagi dari branch awalnya, jadi pekerjaan yang belum di-push oleh sesi hilang.

583 * **Untuk mempertahankan pekerjaan yang sudah di-commit**: atur [`--push-outcome-on-release`](/docs/id/self-hosted-environments-reference#runner-cli-flags). Runner kemudian melakukan push best-effort atas branch hasil sesi sebelum melepaskannya, dan sesi yang dilanjutkan dimulai dari commit tersebut. Perubahan yang belum di-commit tetap hilang.697 * **Untuk mempertahankan pekerjaan yang sudah di-commit**: atur [`--push-outcome-on-release`](/docs/id/self-hosted-environments-reference#runner-cli-flags) pada setiap runner di lingkungan tersebut, karena runner tanpa flag ini melanjutkan sesi dari branch awalnya. Runner dengan flag ini melakukan push best-effort atas branch hasil sesi sebelum melepaskannya, dan sesi yang dilanjutkan dimulai dari commit tersebut. Push tersebut menggunakan kredensial git milik host runner sendiri, termasuk pada runner yang menggunakan [git yang dikelola Anthropic](#use-the-anthropic-git-proxy). Perubahan yang belum di-commit tetap hilang.

698 * **Dengan hook `checkout`**: repositori yang di-checkout melalui [hook siklus hidup `checkout`](/docs/id/self-hosted-environments-configuration#checkout) tidak di-push. Buat snapshot repositori tersebut dari [hook `post-session`](/docs/id/self-hosted-environments-configuration#post-session) sebagai gantinya.

584 * **Sebelum mengaktifkan flag ini**: batasi siapa yang dapat melakukan push ke ref `claude/*` pada remote sumber. Saat dilanjutkan, runner mengambil branch yang sebelumnya di-push tanpa memverifikasi siapa yang melakukan push-nya.699 * **Sebelum mengaktifkan flag ini**: batasi siapa yang dapat melakukan push ke ref `claude/*` pada remote sumber. Saat dilanjutkan, runner mengambil branch yang sebelumnya di-push tanpa memverifikasi siapa yang melakukan push-nya.

585* **Repositori yang ditambahkan di tengah sesi dapat gagal diklon**: Claude mengklonnya dengan `git clone` melalui HTTPS. Pada runner tanpa [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), klon gagal dengan kesalahan autentikasi git jika tidak ada apa pun di host yang dapat membaca repositori tersebut. Jika memungkinkan, pilih setiap repositori yang dibutuhkan sesi ketika Anda membuatnya.700* **Repositori yang ditambahkan di tengah sesi dapat gagal diklon**: Claude mengklonnya dengan `git clone` melalui HTTPS. Pada runner tanpa [`--use-anthropic-git-proxy`](#use-the-anthropic-git-proxy), klon gagal dengan kesalahan autentikasi git jika tidak ada apa pun di host yang dapat membaca repositori tersebut. Jika memungkinkan, pilih setiap repositori yang dibutuhkan sesi ketika Anda membuatnya.

586* **Beberapa konektor tidak muncul dalam sesi yang di-host sendiri**: konektor yang belum Anda hubungkan dalam pengaturan claude.ai tidak terdaftar dalam sesi yang di-host sendiri, dan sesi tidak akan meminta Anda untuk menghubungkannya. Hubungkan dalam Pengaturan terlebih dahulu, kemudian mulai sesi segar. Menambahkan konektor ke sesi yang sudah berjalan juga tidak membuat alat-alatnya tersedia untuk Claude; mulai sesi segar untuk mengambil konektor yang baru ditambahkan.701* **Beberapa konektor tidak muncul dalam sesi yang di-host sendiri**: konektor yang belum Anda hubungkan dalam pengaturan claude.ai tidak terdaftar dalam sesi yang di-host sendiri, dan sesi tidak akan meminta Anda untuk menghubungkannya. Hubungkan dalam Pengaturan terlebih dahulu, kemudian mulai sesi segar. Menambahkan konektor ke sesi yang sudah berjalan juga tidak membuat alat-alatnya tersedia untuk Claude; mulai sesi segar untuk mengambil konektor yang baru ditambahkan.


606* **Runner tidak muncul di lingkungan**: konfirmasi bahwa host dapat menjangkau `api.anthropic.com` melalui HTTPS, rahasia lingkungan saat ini, dan jam host berada dalam lima menit dari waktu nyata; skew yang lebih besar menyebabkan autentikasi gagal. Log runner `[runner:fatal]` dengan alasan penolakan pada kegagalan auth.721* **Runner tidak muncul di lingkungan**: konfirmasi bahwa host dapat menjangkau `api.anthropic.com` melalui HTTPS, rahasia lingkungan saat ini, dan jam host berada dalam lima menit dari waktu nyata; skew yang lebih besar menyebabkan autentikasi gagal. Log runner `[runner:fatal]` dengan alasan penolakan pada kegagalan auth.

607* **Runner keluar saat startup dengan `cannot create or write to base directory`**: runner tidak dapat membuat atau menulis ke `--base-dir`, yang secara default adalah `/workspace`. Perbaiki kepemilikan direktori atau arahkan `--base-dir` ke jalur yang dapat ditulis, seperti dijelaskan dalam [Keep the base directory and capacity identical across runners](#keep-the-base-directory-and-capacity-identical-across-runners). Jika runner malah mencatat `[runner:fatal]` mengatakan pemeriksaan direktori dasar habis waktu, direktori berada pada mount NFS atau CSI yang tergantung. Periksa kesehatan mount daripada izin. Runner mencetak kedua kegagalan startup ini ke stderr sebelum membuka `--log-file`, jadi cari di terminal atau log kontainer platform Anda daripada file log. Sebelum v2.1.225, runner tidak memeriksa direktori dasar saat startup, dan misconfiguration ini gagal sesi setelah pickup sebagai gantinya.722* **Runner keluar saat startup dengan `cannot create or write to base directory`**: runner tidak dapat membuat atau menulis ke `--base-dir`, yang secara default adalah `/workspace`. Perbaiki kepemilikan direktori atau arahkan `--base-dir` ke jalur yang dapat ditulis, seperti dijelaskan dalam [Keep the base directory and capacity identical across runners](#keep-the-base-directory-and-capacity-identical-across-runners). Jika runner malah mencatat `[runner:fatal]` mengatakan pemeriksaan direktori dasar habis waktu, direktori berada pada mount NFS atau CSI yang tergantung. Periksa kesehatan mount daripada izin. Runner mencetak kedua kegagalan startup ini ke stderr sebelum membuka `--log-file`, jadi cari di terminal atau log kontainer platform Anda daripada file log. Sebelum v2.1.225, runner tidak memeriksa direktori dasar saat startup, dan misconfiguration ini gagal sesi setelah pickup sebagai gantinya.

608* **Sesi tetap antri**: setiap runner online dapat dikunci ke pemilik yang berbeda. Periksa `claude_code_self_hosted_runner_locked_account` [metrik](/docs/id/self-hosted-environments-reference#prometheus-metrics) setiap runner atau bidang `locked_account` dari baris log `[runner:health]`-nya untuk melihat siapa yang memegangnya. Keduanya menunjukkan email pemilik hanya setelah runner telah dikeluarkan token sesi yang membawa klaim `act.email`, yang sesi agen Claude Tag tidak pernah lakukan. Tanpa klaim, runner tidak memancarkan seri `locked_account` dan mencatat `locked_account=yes`, yang memberi tahu Anda bahwa runner terkunci tetapi tidak ke pemilik mana. Tambahkan replika, atau tunggu runner yang ada untuk mengalirkan dan memulai ulang. Jika lingkungan menggunakan runner on-demand, periksa orchestrator sebagai gantinya; lihat [On-demand runners](/docs/id/self-hosted-environments-configuration#on-demand-runners).723* **Sesi tetap antri**: setiap runner online dapat dikunci ke pemilik yang berbeda. Periksa `claude_code_self_hosted_runner_locked_account` [metrik](/docs/id/self-hosted-environments-reference#prometheus-metrics) setiap runner atau bidang `locked_account` dari baris log `[runner:health]`-nya untuk melihat siapa yang memegangnya. Keduanya menunjukkan email pemilik hanya setelah runner telah dikeluarkan token sesi yang membawa klaim `act.email`, yang sesi agen Claude Tag tidak pernah lakukan. Tanpa klaim, runner tidak memancarkan seri `locked_account` dan mencatat `locked_account=yes`, yang memberi tahu Anda bahwa runner terkunci tetapi tidak ke pemilik mana. Tambahkan replika, atau tunggu runner yang ada untuk mengalirkan dan memulai ulang. Jika lingkungan menggunakan runner on-demand, periksa orchestrator sebagai gantinya; lihat [On-demand runners](/docs/id/self-hosted-environments-configuration#on-demand-runners).

609* **Sesi gagal segera setelah pickup**: buka sesi di claude.ai/code untuk melihat kesalahan. Penyebab paling umum adalah [kredensial git](#configure-git) yang hilang dalam gambar runner dan alat build yang tidak diinstal. Direktori dasar yang tidak dapat ditulis menghentikan runner saat startup daripada gagal sesi. Lihat entri **Runner keluar saat startup dengan `cannot create or write to base directory`** dalam daftar ini.724* **Sesi gagal segera setelah pickup**: buka sesi di claude.ai/code untuk melihat kesalahan. Penyebab paling umum adalah [kredensial git](#configure-git) yang hilang dalam gambar runner dan alat build yang tidak diinstal. Pada runner yang dimulai dengan `--use-anthropic-git-proxy`, lihat [When sessions fail to start on a runner with the git proxy](#when-anthropic-doesnt-serve-a-session). Direktori dasar yang tidak dapat ditulis menghentikan runner saat startup daripada gagal sesi. Lihat entri **Runner keluar saat startup dengan `cannot create or write to base directory`** dalam daftar ini.

725* **Sesi gagal dimulai pada runner yang mengatur `--use-anthropic-git-proxy`**: cari di log runner `access denied by the git proxy`, atau kesalahan git yang menyebutkan alamat `api.anthropic.com` yang berisi `/git_proxy/`. Untuk mengetahui apakah Anthropic melayani sesi tersebut dan memperbaiki penyebabnya, lihat [When sessions fail to start on a runner with the git proxy](#when-anthropic-doesnt-serve-a-session).

610* **Sesi tidak dapat menjangkau jaringan melalui proxy egress yang mengautentikasi**: ketika sumber yang Anda atur dengan [`--proxy-authorization-command` atau `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) gagal, habis waktu setelah 30 detik, atau menghasilkan nilai kosong, runner menjawab koneksi itu `502 Bad Gateway` dan mencatat alasannya. Runner menyunting stderr perintah dalam log itu dan tidak pernah mencatat nilai header. Dengan `--proxy-authorization-command`, jalankan perintah sendiri pada host untuk mengonfirmasi bahwa itu mencetak seluruh nilai header pada stdout. Jika runner malah keluar saat startup dengan `could not start the proxy-authorization listener`, itu tidak dapat membuka pendengar loopback-nya.726* **Sesi tidak dapat menjangkau jaringan melalui proxy egress yang mengautentikasi**: ketika sumber yang Anda atur dengan [`--proxy-authorization-command` atau `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) gagal, habis waktu setelah 30 detik, atau menghasilkan nilai kosong, runner menjawab koneksi itu `502 Bad Gateway` dan mencatat alasannya. Runner menyunting stderr perintah dalam log itu dan tidak pernah mencatat nilai header. Dengan `--proxy-authorization-command`, jalankan perintah sendiri pada host untuk mengonfirmasi bahwa itu mencetak seluruh nilai header pada stdout. Jika runner malah keluar saat startup dengan `could not start the proxy-authorization listener`, itu tidak dapat membuka pendengar loopback-nya.

611* **Runner mencatat baris `Poll failed` yang berisi `rejecting the malformed poll response`**: runner menerima respons work-poll yang badan-nya bukan JSON yang diharapkan antrian, paling sering karena sesuatu antara runner dan `api.anthropic.com`, seperti proxy intersepsi atau portal captive, menjawab dengan halaman sendiri. Runner menolak respons, menghitung di bawah jenis `transport` dari [metrik](/docs/id/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_poll_errors_total`, dan mencoba ulang pada jadwal poll-gagal yang dijelaskan dalam [Session lifecycle](/docs/id/self-hosted-environments#session-lifecycle). Runner terus melayani sesi live-nya. Konfigurasikan proxy untuk melewatkan respons dari `api.anthropic.com` tanpa perubahan. Sebelum v2.1.246, runner membaca respons seperti itu sebagai antrian kerja kosong, yang dapat mengakhiri sesi live-nya atau membuatnya keluar.727* **Runner mencatat baris `Poll failed` yang berisi `rejecting the malformed poll response`**: runner menerima respons work-poll yang badan-nya bukan JSON yang diharapkan antrian, paling sering karena sesuatu antara runner dan `api.anthropic.com`, seperti proxy intersepsi atau portal captive, menjawab dengan halaman sendiri. Runner menolak respons, menghitung di bawah jenis `transport` dari [metrik](/docs/id/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_poll_errors_total`, dan mencoba ulang pada jadwal poll-gagal yang dijelaskan dalam [Session lifecycle](/docs/id/self-hosted-environments#session-lifecycle). Runner terus melayani sesi live-nya. Konfigurasikan proxy untuk melewatkan respons dari `api.anthropic.com` tanpa perubahan. Sebelum v2.1.246, runner membaca respons seperti itu sebagai antrian kerja kosong, yang dapat mengakhiri sesi live-nya atau membuatnya keluar.

612* **Cabang sesi tidak lagi ada di remote**: untuk sumber git yang hanya dibaca sesi, runner melewati sumber itu dan melanjutkan pada sumber yang tersisa. Untuk sumber yang sesi dorong hasil ke, cabang yang dihapus, biasanya karena digabungkan dan dihapus otomatis, gagal sesi dengan kesalahan yang menamai repositori dan cabang dan meminta Anda untuk mengembalikan cabang dan mencoba ulang. Runner gagal sesi dengan kesalahan yang sama ketika melewati akan meninggalkannya tanpa repositori sama sekali. Sebelum v2.1.228, sesi seperti itu dimulai di direktori kosong.728* **Cabang sesi tidak lagi ada di remote**: untuk sumber git yang hanya dibaca sesi, runner melewati sumber itu dan melanjutkan pada sumber yang tersisa. Untuk sumber yang sesi dorong hasil ke, cabang yang dihapus, biasanya karena digabungkan dan dihapus otomatis, gagal sesi dengan kesalahan yang menamai repositori dan cabang dan meminta Anda untuk mengembalikan cabang dan mencoba ulang. Runner gagal sesi dengan kesalahan yang sama ketika melewati akan meninggalkannya tanpa repositori sama sekali. Sebelum v2.1.228, sesi seperti itu dimulai di direktori kosong.


616 732 

617 Pemeriksaan akses berjalan lagi setiap kali sesi dimulai pada runner, jadi setelah identitas git runner memiliki akses baca, awal berikutnya mengklona repositori. Sebelum v2.1.274, masing-masing penolakan ini gagal memulai sesi.733 Pemeriksaan akses berjalan lagi setiap kali sesi dimulai pada runner, jadi setelah identitas git runner memiliki akses baca, awal berikutnya mengklona repositori. Sebelum v2.1.274, masing-masing penolakan ini gagal memulai sesi.

618* **Sesi membutuhkan waktu berapa menit untuk dimulai**: klon awal biasanya mendominasi. Tonton [metrik](/docs/id/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_session_init_duration_seconds` untuk mengonfirmasi, dan potong klon dengan [pre-warmed checkout](#reuse-a-pre-warmed-checkout) atau `CLAUDE_RUNNER_FETCH_DEPTH` yang lebih kecil.734* **Sesi membutuhkan waktu berapa menit untuk dimulai**: klon awal biasanya mendominasi. Tonton [metrik](/docs/id/self-hosted-environments-reference#prometheus-metrics) `claude_code_self_hosted_runner_session_init_duration_seconds` untuk mengonfirmasi, dan potong klon dengan [pre-warmed checkout](#reuse-a-pre-warmed-checkout) atau `CLAUDE_RUNNER_FETCH_DEPTH` yang lebih kecil.

619* **Turns gagal dengan 401**: setiap sesi mengautentikasi panggilan model dengan [`CLAUDE_CODE_OAUTH_TOKEN`](/docs/id/self-hosted-environments-configuration#wrapper-scripts) jangka pendek yang runner ambil dari Anthropic dan putar di atas stdin sesi. Ketika turn berakhir dengan 401 atau 403 dari API model, runner mengambil token segar dan meneruskannya ke sesi. Turn yang gagal tidak dicoba ulang.735* **Giliran gagal dengan 401**: ketika giliran berakhir dengan 401 atau 403 dari API Anthropic, runner mengambil [`CLAUDE_CODE_OAUTH_TOKEN`](/docs/id/self-hosted-environments-configuration#wrapper-scripts) segar dari Anthropic dan meneruskannya ke sesi. Giliran yang gagal tidak dicoba ulang. Token ini berumur pendek, dan runner merotasinya melalui stdin sesi.

620 736 

621 Ketika pengambilan gagal, runner mencatat baris `inference_token refresh failed` yang mengatakan kapan itu akan mencoba ulang, dan itu terus mencoba ulang selama sesi berjalan.737 Ketika pengambilan gagal, runner mencatat baris `inference_token refresh failed` yang mengatakan kapan itu akan mencoba ulang, dan itu terus mencoba ulang selama sesi berjalan.

622 738 


637 753 

638* **Keluar normal**: runner menyelesaikan sesi-sesinya dan mengalirkan, mencapai waktu pensiun-nya, atau diperintahkan untuk berhenti. Mulai ulang sehingga lingkungan memiliki kapasitas lagi. [Runner lifecycle](/docs/id/self-hosted-environments#runner-lifecycle) menjelaskan keluar ini.754* **Keluar normal**: runner menyelesaikan sesi-sesinya dan mengalirkan, mencapai waktu pensiun-nya, atau diperintahkan untuk berhenti. Mulai ulang sehingga lingkungan memiliki kapasitas lagi. [Runner lifecycle](/docs/id/self-hosted-environments#runner-lifecycle) menjelaskan keluar ini.

639* **Awal yang gagal**: runner tidak dapat dimulai dengan konfigurasi atau host yang diberikan, jadi itu keluar dalam hitungan detik setelah dimulai, dan itu keluar dengan cara yang sama setiap kali Anda memulainya ulang. Memulai ulang lebih cepat tidak membantu. Seseorang perlu membaca output-nya dan memperbaiki penyebabnya.755* **Awal yang gagal**: runner tidak dapat dimulai dengan konfigurasi atau host yang diberikan, jadi itu keluar dalam hitungan detik setelah dimulai, dan itu keluar dengan cara yang sama setiap kali Anda memulainya ulang. Memulai ulang lebih cepat tidak membantu. Seseorang perlu membaca output-nya dan memperbaiki penyebabnya.

756* **Kehilangan kontak**: runner yang tidak dapat menjangkau Anthropic lebih lama dari [lease](/docs/id/self-hosted-environments#session-lifecycle)-nya, misalnya saat host-nya dalam mode sleep, dapat dihapus dari lingkungan. Ketika runner yang dihapus terhubung kembali, runner tersebut keluar. Log-nya dapat menampilkan baris `[runner:fatal]` yang berisi `runner record gone server-side` atau, setelah gangguan yang lebih lama, [`poll auth failed`](/docs/id/self-hosted-environments-quickstart#set-up-an-environment-and-runner). Runner tidak mendaftar ulang dengan sendirinya, jadi mulai ulang runner tersebut.

640 757 

641Konfigurasikan supervisor Anda untuk memulai ulang runner kapan pun itu keluar, untuk menunggu lebih lama antara restart ketika runner terus keluar tepat setelah dimulai, dan untuk memberitahu seseorang ketika itu terus terjadi.758Konfigurasikan supervisor Anda untuk memulai ulang runner kapan pun itu keluar, untuk menunggu lebih lama antara restart ketika runner terus keluar tepat setelah dimulai, dan untuk memberitahu seseorang ketika itu terus terjadi.

642 759 

Details

195 195 

196Wrapper menerima jalur absolut ke binary runner sendiri di `CLAUDE_RUNNER_CLAUDE_BIN`; gunakan jalur itu daripada `claude` yang diselesaikan PATH sehingga decode berjalan pada binary yang sama yang digunakan runner sendiri.196Wrapper menerima jalur absolut ke binary runner sendiri di `CLAUDE_RUNNER_CLAUDE_BIN`; gunakan jalur itu daripada `claude` yang diselesaikan PATH sehingga decode berjalan pada binary yang sama yang digunakan runner sendiri.

197 197 

198Gunakan `jq -re` daripada `jq -r` sehingga klaim yang hilang menyebabkan exit bukan nol. Dengan `-r` saja, klaim yang hilang mencetak string literal `null` dan keluar nol, yang secara diam-diam melewatkan nilai buruk ke hilir. Teruskan `--no-verify` ke `decode-token` hanya untuk inspeksi offline di mana endpoint JWKS tidak dapat dijangkau.198Gunakan `jq -re` daripada `jq -r` sehingga klaim yang hilang menyebabkan exit bukan nol. Dengan `-r` saja, klaim yang hilang mencetak string literal `null` dan keluar nol, yang secara diam-diam melewatkan nilai buruk ke hilir.

199 

200Jika `decode-token` tidak dapat mengambil kunci dari endpoint JWKS atau tidak dapat memverifikasi token, perintah tersebut mencetak alasannya ke stderr, tidak mencetak klaim apa pun, dan keluar dengan kode 1. Teruskan `--no-verify` ke `decode-token` hanya untuk inspeksi offline di mana endpoint JWKS tidak dapat dijangkau.

199 201 

200<h2 id="claims-reference">202<h2 id="claims-reference">

201 Referensi klaim203 Referensi klaim

Details

34Host runner memerlukan:34Host runner memerlukan:

35 35 

36* Host atau kontainer Linux atau macOS dengan HTTPS keluar ke `api.anthropic.com`, ke `claude.ai` dan host unduhan yang dialihkan untuk langkah instalasi di bawah, dan ke host git Anda untuk klon; [tabel persyaratan jaringan](/docs/id/self-hosted-environments-deploy#network-requirements) memiliki daftar lengkap. Windows tidak didukung sebagai host runner; jalankan runner dalam kontainer Linux sebagai gantinya. Workstation pengembang tidak terpengaruh, karena sesi dimulai dari claude.ai di browser.36* Host atau kontainer Linux atau macOS dengan HTTPS keluar ke `api.anthropic.com`, ke `claude.ai` dan host unduhan yang dialihkan untuk langkah instalasi di bawah, dan ke host git Anda untuk klon; [tabel persyaratan jaringan](/docs/id/self-hosted-environments-deploy#network-requirements) memiliki daftar lengkap. Windows tidak didukung sebagai host runner; jalankan runner dalam kontainer Linux sebagai gantinya. Workstation pengembang tidak terpengaruh, karena sesi dimulai dari claude.ai di browser.

37* Sebuah repositori untuk sesi uji: repositori publik, atau repositori yang sudah dapat diklon oleh host ini melalui URL HTTPS-nya tanpa diminta kredensial.

37* Jam yang disinkronkan dengan waktu nyata, misalnya dengan NTP. Autentikasi gagal ketika jam lebih dari lima menit mati; lihat [Troubleshooting](/docs/id/self-hosted-environments-deploy#troubleshooting).38* Jam yang disinkronkan dengan waktu nyata, misalnya dengan NTP. Autentikasi gagal ketika jam lebih dari lima menit mati; lihat [Troubleshooting](/docs/id/self-hosted-environments-deploy#troubleshooting).

38 39 

39<h3 id="software-on-the-runner-host">40<h3 id="software-on-the-runner-host">


57 Siapkan lingkungan dan runner58 Siapkan lingkungan dan runner

58</h2>59</h2>

59 60 

60Claude Code mencakup pengaturan terpandu: sesi Claude Code interaktif yang memandu Anda melalui pembuatan lingkungan di UI admin, memulai runner lokal dengan file rahasia yang Anda simpan, mengonfirmasi bahwa runner terdaftar, dan menulis lembar contekan ke `./runner-setup/CHEAT-SHEET.md`. Jalankan pada mesin di mana Anda telah masuk dengan `claude auth login` menggunakan akun yang memiliki peran Pemilik; tidak tersedia dengan kunci API atau penyedia model pihak ketiga. Pada host di mana sesi interaktif tidak mungkin, gunakan langkah manual di bawah sebagai gantinya. Konfirmasi [pemeriksaan versi](#software-on-the-runner-host) lulus terlebih dahulu: pada versi yang lebih lama dari 2.1.224, perintah ini memulai sesi Claude biasa dengan kata-kata sebagai prompt alih-alih pengaturan terpandu. Untuk memulai pengaturan terpandu, jalankan subperintah setup dan ikuti prompt:61Gunakan [pengaturan terpandu](#run-the-guided-setup) atau [langkah manual](#set-up-manually). Pengaturan terpandu adalah satu perintah yang memulai sesi Claude Code interaktif dan memandu Anda melalui sisanya. Gunakan langkah manual sebagai gantinya pada host di mana sesi interaktif tidak mungkin. Gunakan juga langkah manual ketika seseorang yang memiliki peran Owner telah membuat lingkungan dan menyerahkan rahasianya kepada Anda, karena pengaturan terpandu memerlukan masuk sebagai Owner.

62 

63<h3 id="run-the-guided-setup">

64 Jalankan pengaturan terpandu

65</h3>

66 

67Pengaturan terpandu memandu Anda melalui pembuatan lingkungan di UI admin, memulai runner lokal dengan file rahasia yang Anda simpan, mengonfirmasi bahwa runner terdaftar, dan menulis lembar contekan ke `./runner-setup/CHEAT-SHEET.md`. Sebelum menjalankannya, konfirmasikan status masuk dan versi Anda:

68 

69* **Masuk**: jalankan pada mesin di mana Anda telah masuk dengan `claude auth login` menggunakan akun yang memiliki peran Owner. Dengan hanya kunci API atau penyedia model pihak ketiga, sesi dimulai tetapi pemeriksaan organisasinya gagal.

70* **Versi**: konfirmasikan bahwa [pemeriksaan versi](#software-on-the-runner-host) lulus. Pada versi yang lebih lama dari 2.1.224, perintah setup memulai sesi Claude dengan kata-kata tersebut sebagai prompt alih-alih pengaturan terpandu.

71 

72Untuk memulai pengaturan terpandu, jalankan subperintah setup di shell Anda dan ikuti petunjuknya:

61 73 

62```bash theme={null}74```bash theme={null}

63claude self-hosted-runner setup75claude self-hosted-runner setup

64```76```

65 77 

66Untuk menyiapkan secara manual sebagai gantinya:78Pengaturan tidak memulai sesi uji dengan sendirinya: pengaturan memberi tahu Anda untuk memulainya di claude.ai/code. Langkah terakhir pengaturan menghentikan runner yang dimulainya. Jika Anda meninggalkan pengaturan sebelum langkah tersebut, runner tetap berjalan. Untuk melanjutkan setelah langkah terakhir, mulai runner lagi di shell Anda dengan perintah di `./runner-setup/CHEAT-SHEET.md`, kemudian [arahkan sesi ke lingkungan](#route-a-session).

79 

80<h3 id="set-up-manually">

81 Siapkan secara manual

82</h3>

83 

84Buat lingkungan di claude.ai, mulai runner dari terminal di host, kemudian kembali ke claude.ai untuk mengonfirmasi bahwa runner muncul dan arahkan sesi ke sana. Jika seseorang yang memiliki peran Owner sudah membuat lingkungan dan menyerahkan rahasianya kepada Anda, mulailah dari langkah 2.

67 85 

68<Steps>86<Steps>

69 <Step title="Buat lingkungan">87 <Step title="Buat lingkungan">


73 </Step>91 </Step>

74 92 

75 <Step title="Mulai runner">93 <Step title="Mulai runner">

76 Buat direktori rahasia. Langkah ini dan berikutnya memerlukan root untuk jalur `/etc/claude`; jalur apa pun yang dapat dibaca proses runner berfungsi, jadi sesuaikan kedua perintah dan nilai `--environment-secret-file` bersama-sama jika Anda menggunakan yang berbeda.94 Buat direktori rahasia. Perintah ini dan berikutnya menggunakan `/etc/claude`, yang memerlukan root, dan file rahasia yang dibuatnya hanya dapat dibaca oleh pengguna yang menjalankannya. Jika runner akan berjalan sebagai pengguna lain, runner keluar dengan `error: Failed to read environment secret file <path> (EACCES: permission denied, open '<path>')`. Dalam hal ini, jalankan kedua perintah sebagai pengguna runner dengan direktori yang dapat ditulis oleh pengguna tersebut sebagai pengganti `/etc/claude`, dan berikan jalur yang sama ke `--environment-secret-file`. Jalur apa pun yang dapat dibaca proses runner berfungsi.

77 95 

78 ```bash theme={null}96 ```bash theme={null}

79 mkdir -p /etc/claude97 mkdir -p /etc/claude


89 107 

90 Jika runner tidak dapat membuat atau menulis ke jalur, itu keluar saat startup dengan kesalahan yang menamai direktori alih-alih mendaftar. Lihat [Troubleshooting](/docs/id/self-hosted-environments-deploy#troubleshooting).108 Jika runner tidak dapat membuat atau menulis ke jalur, itu keluar saat startup dengan kesalahan yang menamai direktori alih-alih mendaftar. Lihat [Troubleshooting](/docs/id/self-hosted-environments-deploy#troubleshooting).

91 109 

92 Kemudian mulai runner dengan `--environment-secret-file` dan `--base-dir`. Runner mendaftar dengan lingkungan Anda dan mulai menunggu pekerjaan. Jika runner keluar, mulai ulang dengan tangan. Penerapan produksi menjalankan runner di bawah orkestrator yang memulai ulang runner yang keluar, biasanya dengan filesystem segar per restart; [Gunakan kembali checkout yang sudah hangat](/docs/id/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout) mencakup pengaturan disk persisten yang didukung.110 Kemudian mulai runner dengan `--environment-secret-file` dan `--base-dir`:

93 111 

94 ```bash theme={null}112 ```bash theme={null}

95 claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>'113 claude self-hosted-runner --environment-secret-file '/etc/claude/environment-secret' --base-dir '<writable-dir>'

96 ```114 ```

115 

116 Runner mencatat `Registered: runner_id=<runner-id>` setelah terdaftar dengan lingkungan Anda, kemudian mulai melakukan polling untuk pekerjaan. Jika runner keluar kemudian, mulai ulang sendiri. Lihat [Jika runner keluar](#if-the-runner-exits) untuk mengetahui kapan hal itu terjadi.

97 </Step>117 </Step>

98 118 

99 <Step title="Verifikasi runner muncul">119 <Step title="Verifikasi runner muncul">

100 Kembali ke [halaman **Cloud environments**](https://claude.ai/admin-settings/cloud-environments). Status lingkungan Anda berubah dari **No runners deployed** menjadi **Healthy** dalam beberapa detik setelah runner dimulai; buka lingkungan dan pilih **Activity** untuk melihat runner itu sendiri.120 Kembali ke [halaman **Cloud environments**](https://claude.ai/admin-settings/cloud-environments). Status lingkungan Anda berubah dari **No runners deployed** menjadi **Healthy** dalam beberapa detik setelah runner dimulai; buka lingkungan dan pilih **Activity** untuk melihat runner itu sendiri. Jika Anda tidak memiliki akses ke halaman admin, baris `Registered: runner_id=<runner-id>` di log runner dari langkah sebelumnya memberi Anda sinyal yang sama.

101 </Step>121 </Step>

102 122 

103 <Step title="Arahkan sesi ke lingkungan">123 <Step title="Arahkan sesi ke lingkungan">

104 Mulai sesi di claude.ai/code dan pilih lingkungan Anda dari pemilih lingkungan, di mana lingkungan yang di-host sendiri muncul bersama yang di-host Anthropic. Runner mengklon dengan kredensial git apa pun yang sudah dimiliki host, jadi pilih repositori yang sudah dapat diklon host ini, atau yang publik; opsi kredensial untuk repositori pribadi dalam produksi ada di [Konfigurasi git](/docs/id/self-hosted-environments-deploy#configure-git). Runner yang tersedia berikutnya mengambil sesi yang antri dan mencatat `Picked up session <session-id>` bersama dengan hitungan aktif dan kapasitasnya, sehingga Anda dapat mengonfirmasi dari output runner sendiri host mana yang mengambil sesi. Tonton sesi bekerja dan baca balasan Claude di [claude.ai/code](https://claude.ai/code). Jika sesi duduk antri sebagai gantinya, lihat [Troubleshooting](/docs/id/self-hosted-environments-deploy#troubleshooting).124 <span id="route-a-session" />Mulai sesi di claude.ai/code dan pilih lingkungan Anda dari pemilih lingkungan, di mana lingkungan yang di-host sendiri muncul bersama yang di-host Anthropic. Untuk repositori, pilih repositori dari [prasyarat](#host-and-network): repositori publik, atau repositori yang sudah dapat diklon host ini. Runner mengklon dengan kredensial git apa pun yang sudah dimiliki host.

125 

126 Runner yang tersedia berikutnya mengambil sesi yang antri dan mencatat `Picked up session <session-id>` bersama dengan hitungan aktif dan kapasitasnya, sehingga Anda dapat mengonfirmasi dari output runner sendiri host mana yang mengambil sesi. Tonton sesi bekerja dan baca balasan Claude di [claude.ai/code](https://claude.ai/code).

127 

128 Jika sesi tidak mulai bekerja, cocokkan dengan apa yang Anda lihat:

129 

130 * **Sesi tetap dalam antrean**: lihat [Troubleshooting](/docs/id/self-hosted-environments-deploy#troubleshooting).

131 * **Sesi gagal dimulai dengan kesalahan git**: kesalahan muncul di sesi dan di log runner. Jika kesalahan tersebut menyertakan `could not read Username for` dari git diikuti URL host git Anda, runner tidak memiliki kredensial HTTPS untuk host tersebut. Lihat [Konfigurasi git](/docs/id/self-hosted-environments-deploy#configure-git), yang juga mencakup opsi kredensial untuk repositori pribadi dalam produksi.

105 </Step>132 </Step>

106</Steps>133</Steps>

107 134 

108Runner keluar dengan desain setelah sesi aktifnya selesai; lihat [Runner lifecycle](/docs/id/self-hosted-environments#runner-lifecycle). Untuk produksi, terapkan di bawah orkestrator yang memulai ulang saat keluar dan menunggu lebih lama antara restart ketika runner terus keluar tepat setelah dimulai. Lihat [Terapkan ke produksi](/docs/id/self-hosted-environments-deploy) dan [Ketika runner keluar](/docs/id/self-hosted-environments-deploy#when-the-runner-exits).135<h3 id="if-the-runner-exits">

136 Jika runner keluar

137</h3>

138 

139Jika runner keluar selama mulai cepat ini, mulai lagi dengan perintah yang sama. Runner dapat keluar dengan sendirinya:

140 

141* **Sesi selesai**: log menampilkan `[runner:exit] account workload drained — exiting`. Runner keluar sesuai desain setelah sesi aktifnya selesai. Lihat [Runner lifecycle](/docs/id/self-hosted-environments#runner-lifecycle).

142* **Kehilangan kontak**: log menampilkan baris `[runner:fatal]` dengan `runner record gone server-side` atau dengan `poll auth failed`. Jika runner kehilangan kontak dengan Anthropic untuk sementara waktu, misalnya karena host tertidur, runner dapat keluar saat berikutnya terhubung ke Anthropic.

143 

144Giliran yang selesai tidak mengakhiri sesi uji Anda. Setelah giliran pertama, sesi masih terpasang dan runner masih berjalan, sehingga Anda dapat [mengirim pesan lanjutan ke sesi](#send-a-follow-up-message-to-a-running-session) tanpa memulai ulang runner terlebih dahulu.

145 

146Untuk produksi, terapkan runner di bawah orkestrator yang memulai ulang saat keluar dan menunggu lebih lama antara restart ketika runner terus keluar tepat setelah dimulai. Lihat [Terapkan ke produksi](/docs/id/self-hosted-environments-deploy) dan [Ketika runner keluar](/docs/id/self-hosted-environments-deploy#when-the-runner-exits).

109 147 

110<h2 id="send-a-follow-up-message-to-a-running-session">148<h2 id="send-a-follow-up-message-to-a-running-session">

111 Mengirim pesan lanjutan ke sesi yang sedang berjalan149 Mengirim pesan lanjutan ke sesi yang sedang berjalan

Details

52| `--release-idle-session-min <n>` | `SELF_HOSTED_RUNNER_SESSION_IDLE_MS` | `0` | Lepaskan slot session setelah N menit inaktivitas setelah turn selesai atau session menunggu tindakan pengguna. Session yang masih mid-turn, termasuk yang menahan background task yang tidak pernah selesai atau persetujuan yang diminta dari dalam panggilan tool yang berjalan, tidak dihitung sebagai idle; pasangkan dengan `--kill-session-after-min` sebagai backstop keras. Setelah background task session selesai, runner menganggap session sibuk sampai turn follow-up yang membaca hasil dimulai, untuk paling banyak jendela [`SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS`](#environment-variable-only-settings). Sampai runner menerima sinyal shutdown atau mencapai waktu pensiun, release yang meninggalkan runner tanpa session aktif memulai jalur keluar yang sama seperti drain normal, diatur oleh `--drain-grace-sec`. Setelah sinyal pertama yang Anda tunda dengan [`--defer-shutdown-max-min`](/docs/id/self-hosted-environments-deploy#defer-the-drain-past-the-first-signal), runner keluar segera setelah release meninggalkannya tanpa session. `0` menonaktifkan. |52| `--release-idle-session-min <n>` | `SELF_HOSTED_RUNNER_SESSION_IDLE_MS` | `0` | Lepaskan slot session setelah N menit inaktivitas setelah turn selesai atau session menunggu tindakan pengguna. Session yang masih mid-turn, termasuk yang menahan background task yang tidak pernah selesai atau persetujuan yang diminta dari dalam panggilan tool yang berjalan, tidak dihitung sebagai idle; pasangkan dengan `--kill-session-after-min` sebagai backstop keras. Setelah background task session selesai, runner menganggap session sibuk sampai turn follow-up yang membaca hasil dimulai, untuk paling banyak jendela [`SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS`](#environment-variable-only-settings). Sampai runner menerima sinyal shutdown atau mencapai waktu pensiun, release yang meninggalkan runner tanpa session aktif memulai jalur keluar yang sama seperti drain normal, diatur oleh `--drain-grace-sec`. Setelah sinyal pertama yang Anda tunda dengan [`--defer-shutdown-max-min`](/docs/id/self-hosted-environments-deploy#defer-the-drain-past-the-first-signal), runner keluar segera setelah release meninggalkannya tanpa session. `0` menonaktifkan. |

53| `--remove-session-state [bool]` | `SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE` | off | Hapus direktori per-session session di bawah `<base-dir>/_sessions/` ketika session berakhir di runner ini, apa pun hasilnya. [Reuse a pre-warmed checkout](/docs/id/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout) menjelaskan apa yang mereka pegang dan siapa yang dapat membacanya ketika mereka tetap. Penghapusan adalah best-effort: direktori per-session tetap ada ketika runner dibunuh atau mencapai deadline drain sebelum cleanup berjalan. Dengan flag aktif, debug log session yang gagal atau terputus tidak disimpan di disk. Memerlukan Claude Code v2.1.268 atau lebih baru. |53| `--remove-session-state [bool]` | `SELF_HOSTED_RUNNER_REMOVE_SESSION_STATE` | off | Hapus direktori per-session session di bawah `<base-dir>/_sessions/` ketika session berakhir di runner ini, apa pun hasilnya. [Reuse a pre-warmed checkout](/docs/id/self-hosted-environments-deploy#reuse-a-pre-warmed-checkout) menjelaskan apa yang mereka pegang dan siapa yang dapat membacanya ketika mereka tetap. Penghapusan adalah best-effort: direktori per-session tetap ada ketika runner dibunuh atau mencapai deadline drain sebelum cleanup berjalan. Dengan flag aktif, debug log session yang gagal atau terputus tidak disimpan di disk. Memerlukan Claude Code v2.1.268 atau lebih baru. |

54| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | unset | Pensiun runner pada timestamp Unix absolut dalam detik, untuk infrastruktur yang membunuh runner pada waktu yang diketahui; [Runner lifecycle](/docs/id/self-hosted-environments#runner-lifecycle) menjelaskan urutan release dan cara mengukur margin. Nilai sebelum 2001 atau setelah tahun 5138 ditolak oleh flag dan diabaikan oleh variabel lingkungan. |54| `--retire-at <epoch-seconds>` | `SELF_HOSTED_RUNNER_RETIRE_AT` | unset | Pensiun runner pada timestamp Unix absolut dalam detik, untuk infrastruktur yang membunuh runner pada waktu yang diketahui; [Runner lifecycle](/docs/id/self-hosted-environments#runner-lifecycle) menjelaskan urutan release dan cara mengukur margin. Nilai sebelum 2001 atau setelah tahun 5138 ditolak oleh flag dan diabaikan oleh variabel lingkungan. |

55| `--server-auto-mode-lists <mode>` | `SELF_HOSTED_RUNNER_SERVER_AUTO_MODE_LISTS` | `no-allow` | Daftar aturan pengklasifikasi [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) mana yang dikirim control plane bersama sebuah sesi yang boleh mencapai sesi tersebut: `all`, `no-allow`, atau `none`. Lihat [Daftar aturan auto mode](#auto-mode-rule-lists) untuk apa yang diterapkan setiap nilai. Nilai yang tidak valid menghentikan runner saat startup. Memerlukan Claude Code v2.1.295 atau lebih baru. |

55| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | Berapa lama menunggu proses Claude keluar dengan bersih setelah session berakhir, sebelum force-killing. Naikkan nilai jika hook `SessionEnd` child sendiri memerlukan lebih banyak waktu. |56| `--session-stop-grace-sec <n>` | `SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS` | `5` | Berapa lama menunggu proses Claude keluar dengan bersih setelah session berakhir, sebelum force-killing. Naikkan nilai jika hook `SessionEnd` child sendiri memerlukan lebih banyak waktu. |

56| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | Lepaskan slot session jika child belum menandakan bahwa itu diinisialisasi dalam N menit spawn. Dihapus oleh sinyal init child di [activity channel](/docs/id/self-hosted-environments-configuration#keep-stdin-and-file-descriptor-3-attached), bukan oleh output biasa, setelah itu `--release-idle-session-min` mengambil alih. `0` menonaktifkan. |57| `--startup-timeout-min <n>` | `SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS` | `15` | Lepaskan slot sesi jika child belum memberi sinyal bahwa ia telah diinisialisasi dalam N menit sejak dijalankan. Cloning terjadi sebelum child dijalankan, sehingga waktu clone tidak dihitung. Dihapus oleh sinyal init child di [activity channel](/docs/id/self-hosted-environments-configuration#keep-stdin-and-file-descriptor-3-attached), bukan oleh output biasa, setelah itu `--release-idle-session-min` mengambil peran. `0` menonaktifkan. |

57| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | on | Seed kepercayaan yang bertahan untuk setiap path repositori session sehingga `permissions.allow` dan `additionalDirectories` yang berkomitmen repo dihormati. Atur `false` untuk menghapus hibah izin yang berkomitmen repo dan mengonfigurasi aturan allow dalam `settings.json` konfigurasi host sebagai gantinya; pengaturan `sandbox.*` yang berkomitmen repo masih berlaku baik cara, itulah mengapa [repo-settings guard](/docs/id/self-hosted-environments-deploy#harden-your-deployment) memindainya terlepas dari flag ini. |58| `--trust-workspace [bool]` | `SELF_HOSTED_RUNNER_TRUST_WORKSPACE` | on | Seed kepercayaan yang bertahan untuk setiap path repositori session sehingga `permissions.allow` dan `additionalDirectories` yang berkomitmen repo dihormati. Atur `false` untuk menghapus hibah izin yang berkomitmen repo dan mengonfigurasi aturan allow dalam `settings.json` konfigurasi host sebagai gantinya; pengaturan `sandbox.*` yang berkomitmen repo masih berlaku baik cara, itulah mengapa [repo-settings guard](/docs/id/self-hosted-environments-deploy#harden-your-deployment) memindainya terlepas dari flag ini. |

58| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | off | Clone melalui [Anthropic git proxy](/docs/id/self-hosted-environments-deploy#use-the-anthropic-git-proxy) daripada auth git yang dikelola pelanggan. Memerlukan `--capacity 1` dan git 2.32 atau lebih baru; runner menolak untuk memulai sebaliknya. Menggantikan flag rewrite. |59| `--use-anthropic-git-proxy` | `CLAUDE_RUNNER_USE_GIT_PROXY=1` | off | Clone repositori di github.com melalui [Anthropic git proxy](/docs/id/self-hosted-environments-deploy#use-the-anthropic-git-proxy) alih-alih auth git yang dikelola pelanggan. Memerlukan `--capacity 1` dan git 2.32 atau lebih baru; jika tidak, runner menolak untuk dimulai. Menggantikan flag rewrite. |

59 60 

60Sebagian besar flag durasi memiliki maksimum, dipilih untuk menjaga setiap timeout di dalam ceiling timer 32-bit runtime sekitar 24,85 hari. Flag `--*-min` cap pada 10080 menit, 7 hari; `--drain-grace-sec` pada 604800 detik, juga 7 hari; dan `--drain-wait-sec` pada 86400 detik, 24 jam. `--session-stop-grace-sec` dan `--post-session-hook-timeout-sec` tidak terbatas. Melampaui cap berperilaku berbeda per surface:61Sebagian besar flag durasi memiliki maksimum, dipilih untuk menjaga setiap timeout di dalam ceiling timer 32-bit runtime sekitar 24,85 hari. Flag `--*-min` cap pada 10080 menit, 7 hari; `--drain-grace-sec` pada 604800 detik, juga 7 hari; dan `--drain-wait-sec` pada 86400 detik, 24 jam. `--session-stop-grace-sec` dan `--post-session-hook-timeout-sec` tidak terbatas. Melampaui cap berperilaku berbeda per surface:

61 62 

62* **Flag**: startup gagal dengan error.63* **Flag**: startup gagal dengan error.

63* **Variabel lingkungan**: runner menjepit nilai ke ceiling timer daripada menolaknya.64* **Variabel lingkungan**: runner menjepit nilai ke ceiling timer daripada menolaknya.

64 65 

66<h3 id="auto-mode-rule-lists">

67 Daftar aturan auto mode

68</h3>

69 

70`--server-auto-mode-lists` memungkinkan Anda memutuskan aturan pengklasifikasi [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) mana dari luar runner yang mencapai sesi di runner Anda. Control plane Anthropic dapat mengirim daftar aturan bersama sebuah sesi dan meminta runner untuk menerapkannya. Beberapa entri mungkin merupakan aturan yang ditulis oleh admin organisasi Anda. Daftarnya adalah `environment`, `soft_deny`, dan `allow`:

71 

72* **`environment`**: sebuah entri dapat membuat pengklasifikasi mengizinkan lebih banyak maupun lebih sedikit.

73* **`soft_deny`**: sebuah entri memblokir tindakan kecuali pengguna secara eksplisit memintanya atau pengecualian `allow` berlaku.

74* **`allow`**: pengecualian terhadap entri `soft_deny`.

75 

76Nilai flag menentukan daftar mana yang diterapkan runner:

77 

78* **`no-allow`**: default. Menerapkan `environment` dan `soft_deny` serta menahan `allow`. Entri `environment` tetap dapat membuat pengklasifikasi mengizinkan lebih banyak, sehingga default tidak mencegah setiap pelonggaran.

79* **`all`**: menerapkan ketiga daftar.

80* **`none`**: tidak menerapkan satu pun. Pilih `none` untuk mencegah setiap pelonggaran dari daftar-daftar ini. Ini juga menghilangkan pembatasan `soft_deny`.

81 

82Tidak ada pengaturan runner yang membuat control plane meminta runner menerapkan daftar tersebut. Ketika control plane tidak meminta, sesi tidak menerima daftar apa pun, apa pun yang Anda atur. Untuk melihat mana yang terjadi, mulai runner dengan `--log-level debug`. Untuk setiap sesi, runner kemudian mencatat ke log baris yang berisi `the server asked this runner to apply`, atau baris yang berisi `the server did not ask this runner to apply the auto mode lists it sends`.

83 

65<h2 id="orchestrator-cli-flags">84<h2 id="orchestrator-cli-flags">

66 Flag CLI Orchestrator85 Flag CLI Orchestrator

67</h2>86</h2>


72| :- | :- | :- |91| :- | :- | :- |

73| `--hook-concurrency <n>` | `4` | Maksimum hook `spawn-runner` berjalan secara paralel. Juga membatasi berapa banyak permintaan spawn yang diklaim per poll. |92| `--hook-concurrency <n>` | `4` | Maksimum hook `spawn-runner` berjalan secara paralel. Juga membatasi berapa banyak permintaan spawn yang diklaim per poll. |

74| `--hook-timeout <sec>` | `60` | Hentikan pohon proses hook setelah banyak detik ini. Timeout plus grace kill 5-detiknya harus tetap di bawah `--expected-spawn-seconds`; orchestrator memberlakukan ini saat startup. |93| `--hook-timeout <sec>` | `60` | Hentikan pohon proses hook setelah banyak detik ini. Timeout plus grace kill 5-detiknya harus tetap di bawah `--expected-spawn-seconds`; orchestrator memberlakukan ini saat startup. |

75| `--expected-spawn-seconds <sec>` | `120` | Expected p99 boot time untuk runner yang dihasilkan, dalam range yang diberlakukan server 10 hingga 3600. Dikirim pada setiap poll sebagai lease server-side; jika tidak ada runner yang mendaftar sebelum itu berlalu, session ditawarkan kembali dengan ID pesanan segar. Semua replika harus berbagi nilai ini. |94| `--expected-spawn-seconds <sec>` | `120` | Perkiraan waktu p99 sejak orchestrator menerima permintaan spawn hingga runner mendaftar, termasuk waktu menunggu kapasitas di platform Anda. Server memberlakukan rentang 10 hingga 3600. Dikirim pada setiap poll sebagai lease server-side: jika tidak ada runner yang mendaftar sebelum waktu itu berlalu, sesi ditawarkan kembali dengan ID pesanan baru. Semua replika harus berbagi nilai ini. |

76| `--min-idle <n>` | `0` | Pertahankan setidaknya N slot session idle gratis dengan menghasilkan runner standby secara proaktif. `0` menonaktifkan pre-warming. Pasangkan dengan `--exit-if-unused-min` runner sehingga runner standby surplus merebut diri mereka sendiri. |95| `--min-idle <n>` | `0` | Pertahankan setidaknya N slot session idle gratis dengan menghasilkan runner standby secara proaktif. `0` menonaktifkan pre-warming. Pasangkan dengan `--exit-if-unused-min` runner sehingga runner standby surplus merebut diri mereka sendiri. |

77| `--debug-dir <path>` | unset | Tulis work order setiap permintaan spawn dan hook stderr ke disk. Debug saja; jangan pernah atur dalam produksi. |96| `--debug-dir <path>` | unset | Tulis work order setiap permintaan spawn dan hook stderr ke disk. Debug saja; jangan pernah atur dalam produksi. |

78 97 


108| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | Batas pada berapa lama runner menghitung session sebagai sibuk untuk drain `--drain-wait-sec` setelah turn selesai, sementara proses session melaporkan akhir turn ke Anthropic. `0` atau nilai yang tidak dapat digunakan kembali ke default, jadi hold tidak dapat dimatikan. Memerlukan Claude Code v2.1.275 atau lebih baru. |127| `SELF_HOSTED_RUNNER_POST_TURN_SETTLE_MS` | `7000` | Batas pada berapa lama runner menghitung session sebagai sibuk untuk drain `--drain-wait-sec` setelah turn selesai, sementara proses session melaporkan akhir turn ke Anthropic. `0` atau nilai yang tidak dapat digunakan kembali ke default, jadi hold tidak dapat dimatikan. Memerlukan Claude Code v2.1.275 atau lebih baru. |

109| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | Berapa lama runner menunggu OS untuk mengirimkan `SIGKILL` ke child yang macet dalam I/O yang tidak dapat diinterupsi sebelum keluar sendiri. Floored pada `--post-session-hook-timeout-sec` plus 15 detik, dan 30 lebih banyak ketika `--push-outcome-on-release` diatur, jadi minimum efektif adalah 75 detik di default. |128| `SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS` | `30000` | Berapa lama runner menunggu OS untuk mengirimkan `SIGKILL` ke child yang macet dalam I/O yang tidak dapat diinterupsi sebelum keluar sendiri. Floored pada `--post-session-hook-timeout-sec` plus 15 detik, dan 30 lebih banyak ketika `--push-outcome-on-release` diatur, jadi minimum efektif adalah 75 detik di default. |

110| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | Git fetch depth untuk fresh clone. Atur integer positif, atau `full` atau `0` untuk fetch lengkap. Repositori yang sudah ada di workspace menjaga kedalaman yang ada. |129| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | Git fetch depth untuk fresh clone. Atur integer positif, atau `full` atau `0` untuk fetch lengkap. Repositori yang sudah ada di workspace menjaga kedalaman yang ada. |

130| `CLAUDE_RUNNER_FETCH_SERVER_PROGRESS_CAP_MS` | `600000` | Berapa lama dalam milidetik, per percobaan, sebuah git fetch dapat menunggu data pertamanya sementara angka progres milik server git itu sendiri terus naik, seperti ketika server menyiapkan pack untuk repositori besar. `0` atau `off` mematikan penantian tersebut: fetch seperti itu kemudian dihentikan setelah dua menit tanpa data. Bilangan bulat lainnya dibatasi antara `120000` dan `1800000`, yaitu 2 hingga 30 menit. Memerlukan Claude Code v2.1.295 atau lebih baru. |

111| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | unset | Ketika `1`, lewati pemeriksaan kehadiran `.git` setelah hook `checkout` berjalan. Atur ini ketika hook Anda materialize sumber non-git. |131| `CLAUDE_RUNNER_SKIP_GIT_VERIFY` | unset | Ketika `1`, lewati pemeriksaan kehadiran `.git` setelah hook `checkout` berjalan. Atur ini ketika hook Anda materialize sumber non-git. |

112| `FORCE_AUTOUPDATE_PLUGINS` | unset | Ketika `1`, biarkan marketplace plugin auto-update meskipun binary dipasang |132| `FORCE_AUTOUPDATE_PLUGINS` | unset | Ketika `1`, biarkan marketplace plugin auto-update meskipun binary dipasang |

113| `CLAUDE_CODE_DISABLE_ARTIFACT` | unset | Ketika `1`, nonaktifkan tool Artifact dalam session terlepas dari pengaturan admin organisasi, dan lepaskan persyaratan egress `*.frame.claudeusercontent.com` |133| `CLAUDE_CODE_DISABLE_ARTIFACT` | unset | Ketika `1`, nonaktifkan tool Artifact dalam session terlepas dari pengaturan admin organisasi, dan lepaskan persyaratan egress `*.frame.claudeusercontent.com` |


178| `claude_code_self_hosted_orchestrator_poll_errors_total{error_kind}` | Kegagalan PollSpawnHints kumulatif berdasarkan jenis: `transport`, `timeout`, `5xx`, `429`, atau `4xx`. Semua lima seri hadir dari proses start; alert pada `rate(...[5m]) > 0`. |198| `claude_code_self_hosted_orchestrator_poll_errors_total{error_kind}` | Kegagalan PollSpawnHints kumulatif berdasarkan jenis: `transport`, `timeout`, `5xx`, `429`, atau `4xx`. Semua lima seri hadir dari proses start; alert pada `rate(...[5m]) > 0`. |

179| `claude_code_self_hosted_orchestrator_queue_pending_sessions` | Spawn request yang dapat diklaim sekarang |199| `claude_code_self_hosted_orchestrator_queue_pending_sessions` | Spawn request yang dapat diklaim sekarang |

180| `claude_code_self_hosted_orchestrator_queue_backing_off_sessions` | Spawn request dalam retry backoff setelah kegagalan hook yang dapat dicoba ulang |200| `claude_code_self_hosted_orchestrator_queue_backing_off_sessions` | Spawn request dalam retry backoff setelah kegagalan hook yang dapat dicoba ulang |

181| `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions` | Spawn request diblokir sampai Owner mencoba ulang dari tab **Activity** lingkungan; alert jika di atas nol |201| `claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions` | Session yang diblokir dari spawn. Masing-masing tetap diblokir sampai pengguna mengirimkan pesan baru kepadanya atau Owner mencoba ulang dari tab **Activity** lingkungan. Jumlahnya dapat tetap di atas nol setelah Anda memperbaiki penyebabnya. Alert jika di atas nol. |

182| `claude_code_self_hosted_orchestrator_pool_pending_sessions` | Total session menunggu runner untuk lingkungan ini. Agregat environment-wide, identik di setiap instance orchestrator: gunakan `MAX` daripada `SUM` di seluruh instance. |202| `claude_code_self_hosted_orchestrator_pool_pending_sessions` | Total session menunggu runner untuk lingkungan ini. Agregat environment-wide, identik di setiap instance orchestrator: gunakan `MAX` daripada `SUM` di seluruh instance. |

183| `claude_code_self_hosted_orchestrator_pool_active_sessions` | Session yang saat ini ditugaskan ke runner yang hidup dalam lingkungan ini. Agregat environment-wide, identik di setiap instance orchestrator: gunakan `MAX` daripada `SUM` di seluruh instance. |203| `claude_code_self_hosted_orchestrator_pool_active_sessions` | Session yang saat ini ditugaskan ke runner yang hidup dalam lingkungan ini. Agregat environment-wide, identik di setiap instance orchestrator: gunakan `MAX` daripada `SUM` di seluruh instance. |

184| `claude_code_self_hosted_orchestrator_spawn_hooks_total{result}` | Outcome hook `spawn-runner` kumulatif: `ok`, `retryable`, `non_retryable`. Menghitung invokasi hook orchestrator, bukan child session yang dihasilkan runner: tidak dapat dibandingkan dengan `sessions_started_total`, karena kapasitas di atas satu, warm pool, dan runner yang dihasilkan lagi untuk session yang sama semua menyimpang keduanya. |204| `claude_code_self_hosted_orchestrator_spawn_hooks_total{result}` | Outcome hook `spawn-runner` kumulatif: `ok`, `retryable`, `non_retryable`. Menghitung invokasi hook orchestrator, bukan child session yang dihasilkan runner: tidak dapat dibandingkan dengan `sessions_started_total`, karena kapasitas di atas satu, warm pool, dan runner yang dihasilkan lagi untuk session yang sama semua menyimpang keduanya. |


285 for: 1m305 for: 1m

286 labels: {severity: critical}306 labels: {severity: critical}

287 annotations:307 annotations:

288 summary: "{{ $value }} session circuit-broken — spawn-runner hook berulang kali non-retryable; perbaiki infra kemudian coba ulang dari tab Activity"308 summary: "Session yang diblokir dari spawn: {{ $value }}. Baca error masing-masing di tab Activity, perbaiki penyebabnya, lalu pilih Retry"

289 - alert: ClaudeOrchestratorPollErrors309 - alert: ClaudeOrchestratorPollErrors

290 expr: sum by (pod) (rate(claude_code_self_hosted_orchestrator_poll_errors_total[5m])) > 0310 expr: sum by (pod) (rate(claude_code_self_hosted_orchestrator_poll_errors_total[5m])) > 0

291 for: 2m311 for: 2m


320 340 

321Sebelum v2.1.260, runner menghentikan setiap session yang mencapai limit `--kill-session-after-min` dan menghitungnya dalam `sessions_interrupted_total`.341Sebelum v2.1.260, runner menghentikan setiap session yang mencapai limit `--kill-session-after-min` dan menghitungnya dalam `sessions_interrupted_total`.

322 342 

323Hook [`post-session`](/docs/id/self-hosted-environments-configuration#post-session) `CLAUDE_RUNNER_EXIT_REASON` mengklasifikasikan clean handoff secara berbeda. Hook melaporkan release, startup timeout, dan server deassign sebagai `interrupted`, karena runner menghentikan child. Counter ini mencatat event yang sama sebagai `completed`, karena slot diserahkan dengan bersih.343Hook [`post-session`](/docs/id/self-hosted-environments-configuration#post-session) `CLAUDE_RUNNER_EXIT_REASON` mengklasifikasikan clean handoff secara berbeda. Hook melaporkan ini sebagai `interrupted`, karena runner menghentikan child: release, startup timeout, server deassign, serta archive atau delete yang diperhatikan poll terlebih dahulu. Counter ini mencatat event yang sama sebagai `completed`, karena slot diserahkan dengan bersih.

324 344 

325Jika Anda merekonsiliasi penerimaan hook terhadap `sessions_completed_total` secara langsung, Anda kurang menghitung completion. Gunakan hook untuk jaminan per-session dan counter untuk rate agregat.345Jika Anda merekonsiliasi penerimaan hook terhadap `sessions_completed_total` secara langsung, Anda kurang menghitung completion. Gunakan hook untuk jaminan per-session dan counter untuk rate agregat.

326 346 

Details

86 86 

87Flag dispatch `--environment` dan `--ref` memerlukan Claude Code v2.1.224 atau lebih baru pada mesin yang menjalankan skrip, lantai yang sama dengan runner itu sendiri. Dengan hook di tempat dan runner dimulai pada host ini, skrip uji:87Flag dispatch `--environment` dan `--ref` memerlukan Claude Code v2.1.224 atau lebih baru pada mesin yang menjalankan skrip, lantai yang sama dengan runner itu sendiri. Dengan hook di tempat dan runner dimulai pada host ini, skrip uji:

88 88 

891. Membuat sesi pada lingkungan uji dengan `claude -p "<prompt>" --environment <environment-id> --output-format json`, dijalankan dari checkout git sehingga CLI dapat auto-detect repositori dari remote `origin`. `--ref <branch>` opsional mendasarkan checkout sesi pada ref bernama daripada HEAD lokal. Perintah membuat sesi, mencetak satu baris JSON yang berisi `session_id`, dan keluar tanpa menunggu balasan Claude.891. Membuat sesi pada lingkungan uji dengan `claude -p "<prompt>" --environment <environment-id> --output-format json`. Jalankan perintah dari checkout git sehingga CLI dapat mendeteksi repositori secara otomatis dari remote `origin`. `--ref <branch>` opsional mendasarkan checkout sesi pada ref bernama alih-alih HEAD lokal. Perintah keluar tanpa menunggu balasan Claude. Apa yang dicetaknya memberi tahu skrip Anda hasilnya:

90 * **Sesi berhasil dibuat**: satu baris JSON seperti `{"ok":true,"session_id":"session_...","title":"...","url":"...","pool_id":"..."}`

91 * **Pembuatan sesi gagal**: baris `{"ok":false,"error":"..."}`, dan perintah keluar dengan status 1

92 * **Beberapa error yang lebih awal**, seperti sesi cloud yang tidak tersedia untuk organisasi Anda atau prompt yang tidak ada: error di stderr tanpa baris JSON, dan perintah keluar dengan status 1

902. Menunggu balasan muncul di `$E2E_REPLY_DIR/<session_id>.txt`, ditulis oleh hook Stop pada runner setelah giliran selesai.932. Menunggu balasan muncul di `$E2E_REPLY_DIR/<session_id>.txt`, ditulis oleh hook Stop pada runner setelah giliran selesai.

913. Mengirim follow-up dengan `claude -p "<message>" --cloud <session_id> --output-format json` (lihat [Kirim pesan follow-up ke sesi yang berjalan](/docs/id/claude-code-on-the-web#send-follow-ups-from-the-cli)), yang memposting acara pengguna ke sesi yang ada dan keluar.943. Mengirim follow-up dengan `claude -p "<message>" --cloud <session_id> --output-format json` (lihat [Kirim pesan follow-up ke sesi yang berjalan](/docs/id/claude-code-on-the-web#send-follow-ups-from-the-cli)), yang memposting acara pengguna ke sesi yang ada dan keluar.

924. Menunggu balasan follow-up dengan cara yang sama seperti langkah 2.954. Menunggu balasan follow-up dengan cara yang sama seperti langkah 2.


103 Skrip contoh106 Skrip contoh

104</h2>107</h2>

105 108 

106Skrip di bawah menjalankan loop lengkap terhadap `$CLAUDE_TEST_ENVIRONMENT_ID`, ID `ccpool_...` lingkungan uji Anda, ditampilkan dalam dialog detail lingkungan pada halaman admin atau dikembalikan oleh [panggilan create-environment](#create-a-dedicated-test-environment), dan menegaskan pada frasa sentinel di setiap balasan. Jalankan dari checkout git repositori yang ingin dikerjakan sesi, setelah memulai runner pada host ini dengan hook capture terinstal dan `E2E_REPLY_DIR` diekspor. Pertama, masuk dengan akun claude.ai pada mesin yang menjalankan skrip, seperti yang dijelaskan dalam [Autentikasi dari CI](#authenticate-from-ci). Tanpa proses masuk tersebut, dispatch pertama gagal dengan error seperti `Unable to get organization UUID for cloud session creation`.109Skrip contoh berjalan pada mesin yang sama dengan test runner. Sebelum Anda menjalankannya, siapkan mesin tersebut:

110 

111* **Checkout repositori**: jalankan skrip dari checkout git repositori yang ingin dikerjakan sesi.

112* **Runner**: mulai runner pada host ini dengan hook capture terinstal dan `E2E_REPLY_DIR` diekspor.

113* **Masuk**: masuk dengan akun claude.ai pada mesin yang menjalankan skrip, seperti yang dijelaskan dalam [Autentikasi dari CI](#authenticate-from-ci).

114* **ID lingkungan**: atur `CLAUDE_TEST_ENVIRONMENT_ID` ke ID `ccpool_...` lingkungan uji Anda, yang ditampilkan dalam dialog detail lingkungan pada halaman admin atau dikembalikan oleh [panggilan create-environment](#create-a-dedicated-test-environment).

115 

116Skrip di bawah menjalankan loop lengkap terhadap `$CLAUDE_TEST_ENVIRONMENT_ID` dan menegaskan pada frasa sentinel di setiap balasan.

107 117 

108```bash theme={null}118```bash theme={null}

109#!/usr/bin/env bash119#!/usr/bin/env bash


151TURN1="e2e-probe-$(date +%s)-$$: say exactly 'ok: custom tools are reachable' and nothing else"161TURN1="e2e-probe-$(date +%s)-$$: say exactly 'ok: custom tools are reachable' and nothing else"

152EXPECT1="ok: custom tools are reachable"162EXPECT1="ok: custom tools are reachable"

153create_json=$(claude -p "$TURN1" --environment "$CLAUDE_TEST_ENVIRONMENT_ID" \163create_json=$(claude -p "$TURN1" --environment "$CLAUDE_TEST_ENVIRONMENT_ID" \

154 --ref "$TEST_REPO_REF" --output-format json)164 --ref "$TEST_REPO_REF" --output-format json < /dev/null)

155echo "create: $create_json"165echo "create: $create_json"

156SESSION_ID=$(jq -er '.session_id' <<<"$create_json")166SESSION_ID=$(jq -er '.session_id' <<<"$create_json")

157 167 


162# 3. Posting follow-up melalui CLI.172# 3. Posting follow-up melalui CLI.

163TURN2="e2e-probe-followup-$(date +%s): say exactly 'ok: follow-up delivered' and nothing else"173TURN2="e2e-probe-followup-$(date +%s): say exactly 'ok: follow-up delivered' and nothing else"

164EXPECT2="ok: follow-up delivered"174EXPECT2="ok: follow-up delivered"

165followup_json=$(claude -p "$TURN2" --cloud "$SESSION_ID" --output-format json)175followup_json=$(claude -p "$TURN2" --cloud "$SESSION_ID" --output-format json < /dev/null)

166echo "followup: $followup_json"176echo "followup: $followup_json"

167jq -e '.ok == true' <<<"$followup_json" >/dev/null177jq -e '.ok == true' <<<"$followup_json" >/dev/null

168 178 

sessions.md +43 −41

Details

6 6 

7> Beri nama, lanjutkan, cabang, dan beralih antar percakapan Claude Code. Mencakup `--continue`, `--resume`, `--from-pr`, pemilih `/resume`, penamaan sesi, ekspor transkrip, dan tempat penyimpanan transkrip.7> Beri nama, lanjutkan, cabang, dan beralih antar percakapan Claude Code. Mencakup `--continue`, `--resume`, `--from-pr`, pemilih `/resume`, penamaan sesi, ekspor transkrip, dan tempat penyimpanan transkrip.

8 8 

9Sesi adalah percakapan yang disimpan yang terikat pada direktori proyek. Claude Code menyimpannya secara lokal saat Anda bekerja, sehingga Anda dapat melanjutkan dari tempat Anda berhenti, membuat cabang untuk mencoba pendekatan berbeda, atau beralih antar tugas.9[Sesi](/docs/id/glossary#session) adalah percakapan yang disimpan yang terikat pada direktori proyek. Claude Code menyimpannya secara lokal saat Anda bekerja, sehingga Anda dapat melanjutkan dari tempat Anda berhenti, membuat cabang untuk mencoba pendekatan berbeda, atau beralih antar tugas.

10 10 

11[Aplikasi desktop](/docs/id/desktop#work-in-parallel-with-sessions), [claude.ai/code](/docs/id/claude-code-on-the-web), dan [ekstensi VS Code](/docs/id/vs-code#resume-past-conversations) masing-masing mempertahankan daftar sesi mereka sendiri, dan aplikasi desktop juga dapat [melanjutkan sesi CLI](/docs/id/desktop#coming-from-the-cli). Halaman ini mencakup CLI.11[Aplikasi desktop](/docs/id/desktop#work-in-parallel-with-sessions), [claude.ai/code](/docs/id/claude-code-on-the-web), dan [ekstensi VS Code](/docs/id/vs-code#resume-past-conversations) masing-masing mempertahankan daftar sesi mereka sendiri, dan aplikasi desktop juga dapat [melanjutkan sesi CLI](/docs/id/desktop#coming-from-the-cli). Halaman ini mencakup CLI.

12 12 


18 18 

19| Perintah | Apa yang dilakukannya |19| Perintah | Apa yang dilakukannya |

20| :- | :- |20| :- | :- |

21| `claude --continue` | Membuka kembali percakapan terbaru di direktori saat ini |21| `claude --continue` | Membuka kembali sesi terbaru di direktori saat ini |

22| `claude --resume` | Membuka [pemilih sesi](#use-the-session-picker) |22| `claude --resume` | Membuka [pemilih sesi](#use-the-session-picker) |

23| `claude --resume <name>` | Melanjutkan sesi bernama secara langsung |23| `claude --resume <name>` | Melanjutkan sesi bernama secara langsung |

24| `claude --resume <transcript-path>` | Melanjutkan percakapan yang disimpan dalam file [transkrip](#where-transcripts-are-stored) `.jsonl` di jalur absolut tersebut |24| `claude --resume <transcript-path>` | Melanjutkan sesi yang disimpan dalam file [transkrip](#where-transcripts-are-stored) `.jsonl` di jalur absolut tersebut |

25| `claude --from-pr <number>` | Membuka pemilih sesi yang disaring untuk sesi yang ditautkan ke pull request tersebut |25| `claude --from-pr <number>` | Membuka pemilih sesi yang disaring untuk sesi yang ditautkan ke pull request tersebut |

26| `/resume` | Beralih ke percakapan berbeda dari dalam sesi aktif |26| `/resume` | Beralih ke sesi berbeda dari dalam sesi aktif |

27 

28Claude Code meninggalkan sesi yang dibuat dengan [`claude -p`](/docs/id/headless) atau [Agent SDK](/docs/id/agent-sdk/overview) keluar dari pemilih sesi dan keluar dari `claude --continue`. Anda masih dapat melanjutkan satu dengan meneruskan ID sesinya ke `claude --resume <session-id>`. Dengan `claude --continue`, Claude Code juga melewati [sesi yang prompt pertamanya adalah `/loop`](#where-the-session-picker-looks). Ketika Anda menjalankan [`claude -p --continue`](/docs/id/headless#continue-conversations), Claude Code menyertakan sesi `-p`, SDK, dan `/loop`.

29 

30Anda dapat menjalankan `claude --resume <session-id>` dari direktori mana pun, sehingga Anda dapat melanjutkan sesi yang dimulai di tempat lain atau dipindahkan dengan [`/cd`](/docs/id/commands). Claude Code mencari ID dalam urutan ini:

31 

321. Direktori proyek saat ini dan git worktree-nya

332. Setiap proyek lain di mesin ini

34 

35Pencarian lintas proyek menyelesaikan ID hanya ketika tepat satu proyek lain menyimpan transkrip dengan pesan untuknya, sehingga duplikat yang disalin tangan membuat Claude Code melaporkan tidak ditemukan daripada melanjutkan salinan arbitrer. Jika tidak ada sesi yang disimpan cocok dengan ID, Claude Code melaporkan `No conversation found with session ID: <session-id>`.

36 

37Sebelum v2.1.223, pencarian berhenti di direktori proyek saat ini dan git worktree-nya, jadi Anda harus melanjutkan dari direktori tempat sesi terakhir bekerja.

38 

39`claude --continue` membuka [sesi latar belakang](/docs/id/agent-view) yang telah selesai, tetapi bukan yang masih berjalan; membuka sesi latar belakang yang selesai memerlukan Claude Code v2.1.257 atau lebih baru. Jika percakapan terbaru Anda adalah sesi yang [Anda pindahkan ke latar belakang](/docs/id/agent-view#send-the-session-to-the-background) dan masih berjalan di sana, Claude Code keluar dengan `Your most recent conversation is running in the background` dan ID sesi tersebut. Lampirkan ke sesi dari [`claude agents`](/docs/id/agent-view#attach-to-a-session), atau jalankan `claude --resume` untuk memilih yang lain.

40 27 

41<h3 id="resume-a-running-background-session">28<h3 id="resume-a-running-background-session">

42 Lanjutkan sesi latar belakang yang sedang berjalan29 Lanjutkan sesi latar belakang yang sedang berjalan


64 51 

65Ketika Claude Code memuat percakapan dari transkrip-nya, sesi yang dilanjutkan memulihkan percakapan bersama dengan status yang disimpan di dalamnya:52Ketika Claude Code memuat percakapan dari transkrip-nya, sesi yang dilanjutkan memulihkan percakapan bersama dengan status yang disimpan di dalamnya:

66 53 

67* Riwayat percakapan: riwayat lengkap, termasuk panggilan tool dan hasil. Tool yang masih berjalan ketika proses sebelumnya berakhir, misalnya dalam kerusakan, tidak selesai atau berjalan lagi ketika Anda melanjutkan. Claude melihat panggilan yang ditandai sebagai terputus sebelum hasilnya dicatat dan diberitahu untuk memeriksa apakah itu berlaku sebelum menjalankannya lagi, kecuali [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/id/env-vars#variables) diatur. Sebelum v2.1.281, Claude Code menghapus panggilan yang terputus dari percakapan atau menampilkannya kepada Claude sebagai yang Anda interupsi.54* Riwayat percakapan: riwayat lengkap, termasuk panggilan tool dan hasil. Tool yang masih berjalan ketika proses sebelumnya berakhir, misalnya dalam kerusakan, tidak selesai atau berjalan lagi ketika Anda melanjutkan. Claude melihat panggilan yang ditandai sebagai terputus sebelum hasilnya dicatat dan diberitahu untuk memeriksa apakah itu berlaku sebelum menjalankannya lagi, kecuali [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/id/env-vars#variables) diatur.

68* Model: sesi berlanjut pada model yang digunakannya, kecuali dalam kasus di [Mengatur model Anda](/docs/id/model-config#setting-your-model).55* Model: sesi berlanjut pada model yang digunakannya, kecuali dalam kasus di [Mengatur model Anda](/docs/id/model-config#setting-your-model).

69* Agent: sesi yang dimulai dengan [`--agent`](/docs/id/sub-agents#invoke-subagents-explicitly) atau pengaturan `agent` berlanjut sebagai agent tersebut, mempertahankan pembatasan tool dan model-nya. Teruskan `--agent` saat melanjutkan untuk memilih yang berbeda; untuk system prompt dalam kedua kasus, lihat [Flag system prompt dalam percakapan yang dilanjutkan](/docs/id/cli-reference#system-prompt-flags-in-resumed-conversations). Claude Code mencari agent di dua tempat: direktori asli sesi, asalkan Anda telah [mempercayai workspace tersebut](/docs/id/permissions#project-allow-rules-and-workspace-trust), dan kemudian direktori tempat Anda melanjutkan, sehingga agent yang bersifat proyek masih dimuat ketika Anda melanjutkan dari direktori lain. Jika Claude Code tidak menemukan agent di salah satu tempat, sesi dilanjutkan dengan tool default dan menampilkan [peringatan yang menyebutkan agent](/docs/id/errors#session-agent-no-longer-available).56* Agent: sesi yang dimulai dengan [`--agent`](/docs/id/sub-agents#invoke-subagents-explicitly) atau pengaturan `agent` berlanjut sebagai agent tersebut, mempertahankan pembatasan tool dan model-nya. Teruskan `--agent` saat melanjutkan untuk memilih yang berbeda; untuk system prompt dalam kedua kasus, lihat [Flag system prompt dalam percakapan yang dilanjutkan](/docs/id/cli-reference#system-prompt-flags-in-resumed-conversations). Claude Code mencari agent di dua tempat: direktori asli sesi, asalkan Anda telah [mempercayai workspace tersebut](/docs/id/permissions#project-allow-rules-and-workspace-trust), dan kemudian direktori tempat Anda melanjutkan, sehingga agent yang bersifat proyek masih dimuat ketika Anda melanjutkan dari direktori lain. Jika Claude Code tidak menemukan agent di salah satu tempat, sesi dilanjutkan dengan tool default dan menampilkan [peringatan yang menyebutkan agent](/docs/id/errors#session-agent-no-longer-available).

70* Mode izin: jika Anda melanjutkan dari terminal dengan `claude --continue`, `claude --resume <session-id>`, atau `claude --resume <name>` ketika nama cocok dengan satu sesi, tanpa `-p`, Claude Code memulihkan mode izin yang ada di sesi, kecuali dalam kasus di [mode izin saat melanjutkan](#permission-mode-on-resume), yang juga mencakup pemilih sesi, `/resume`, dan melanjutkan dengan `claude -p`. Teruskan `--permission-mode` atau `--dangerously-skip-permissions` untuk menimpa mode yang dipulihkan.57* Mode izin: jika Anda melanjutkan dari terminal dengan `claude --continue`, `claude --resume <session-id>`, atau `claude --resume <name>` ketika nama cocok dengan satu sesi, tanpa `-p`, Claude Code memulihkan mode izin yang ada di sesi, kecuali dalam kasus di [mode izin saat melanjutkan](#permission-mode-on-resume), yang juga mencakup pemilih sesi, `/resume`, dan melanjutkan dengan `claude -p`. Teruskan `--permission-mode` atau `--dangerously-skip-permissions` untuk menimpa mode yang dipulihkan.


83* Terminal: `claude --continue`, `claude --resume <session-id>`, atau `claude --resume <name>` ketika nama cocok dengan satu sesi, tanpa `-p`. Claude Code memulihkan mode izin yang ada di sesi, kecuali dalam kasus di tabel. Teruskan `--permission-mode` atau `--dangerously-skip-permissions` untuk menimpa mode yang dipulihkan.70* Terminal: `claude --continue`, `claude --resume <session-id>`, atau `claude --resume <name>` ketika nama cocok dengan satu sesi, tanpa `-p`. Claude Code memulihkan mode izin yang ada di sesi, kecuali dalam kasus di tabel. Teruskan `--permission-mode` atau `--dangerously-skip-permissions` untuk menimpa mode yang dipulihkan.

84* Non-interaktif: `claude -p --resume` atau `claude -p --continue`. Claude Code memulai proses dalam mode izin yang akan digunakan oleh proses `claude -p` baru, kecuali sesi yang berakhir dalam plan mode dilanjutkan dalam plan mode di bawah [kondisi di bawah](#resume-in-plan-mode-with-p).71* Non-interaktif: `claude -p --resume` atau `claude -p --continue`. Claude Code memulai proses dalam mode izin yang akan digunakan oleh proses `claude -p` baru, kecuali sesi yang berakhir dalam plan mode dilanjutkan dalam plan mode di bawah [kondisi di bawah](#resume-in-plan-mode-with-p).

85* VS Code: panel percakapan ekstensi. Tabel hanya mencakup percakapan yang berakhir dalam plan mode; untuk sisanya, lihat [lanjutkan percakapan masa lalu](/docs/id/vs-code#resume-past-conversations).72* VS Code: panel percakapan ekstensi. Tabel hanya mencakup percakapan yang berakhir dalam plan mode; untuk sisanya, lihat [lanjutkan percakapan masa lalu](/docs/id/vs-code#resume-past-conversations).

86* Pemilih sesi saat peluncuran: sesi yang Anda pilih dari [pemilih sesi](#use-the-session-picker), apakah Anda membukanya dengan `claude --resume` saja, `claude --from-pr`, atau nama yang cocok dengan lebih dari satu sesi. Claude Code memulai sesi dalam mode izin yang akan dimulai oleh sesi baru dari baris perintah yang sama, kecuali sesi yang berakhir dalam plan mode dilanjutkan dalam plan mode kecuali Anda meneruskan `--permission-mode`, `--dangerously-skip-permissions`, atau `--fork-session`. Tidak ada mode izin tersimpan lain yang dipulihkan.73* Pemilih sesi saat peluncuran: sesi yang Anda pilih dari [pemilih sesi](#use-the-session-picker), apakah Anda membukanya dengan `claude --resume` saja, `claude --from-pr`, atau nama yang cocok dengan lebih dari satu sesi. Claude Code memulai sesi dalam mode izin yang akan dimulai oleh sesi baru dari baris perintah yang sama, kecuali sesi yang berakhir dalam plan mode dilanjutkan dalam plan mode. Jika Anda meneruskan `--permission-mode`, `--dangerously-skip-permissions`, atau `--fork-session`, Claude Code tidak memulihkan plan mode. Tidak ada mode izin tersimpan lain yang dipulihkan.

87* `/resume` di dalam sesi, dengan atau tanpa argumen: percakapan yang Anda alihkan berlanjut dalam mode izin yang ada di sesi saat ini, kecuali percakapan yang berakhir dalam plan mode dilanjutkan dalam plan mode, bahkan jika Anda meluncurkan Claude Code dengan `--permission-mode` atau `--dangerously-skip-permissions`. Jika percakapan tersebut sudah dibuka sebelumnya dalam proses Claude Code ini, seperti percakapan tempat Anda memulai atau percakapan yang Anda tinggalkan dengan `/clear` atau `/resume`, percakapan tersebut berlanjut dalam mode izin Anda saat ini sebagai gantinya.74* `/resume` di dalam sesi, dengan atau tanpa argumen: percakapan yang Anda alihkan berlanjut dalam mode izin yang ada di sesi saat ini, kecuali percakapan yang berakhir dalam plan mode dilanjutkan dalam plan mode, bahkan jika Anda meluncurkan Claude Code dengan `--permission-mode` atau `--dangerously-skip-permissions`. Jika percakapan tersebut sudah dibuka sebelumnya dalam proses Claude Code ini, seperti percakapan tempat Anda memulai atau percakapan yang Anda tinggalkan dengan `/clear` atau `/resume`, percakapan tersebut berlanjut dalam mode izin Anda saat ini sebagai gantinya.

88 75 

76Jika [aturan penolakan](/docs/id/permissions#manage-permissions) menghapus tool [`ExitPlanMode`](/docs/id/tools-reference), Claude tidak dapat menyajikan rencana untuk persetujuan, sehingga Claude Code tidak memulihkan plan mode. Sesi dimulai dalam mode izin yang akan dimulai oleh sesi baru dari baris perintah yang sama. Dengan `/resume`, percakapan berlanjut dalam mode izin Anda saat ini.

77 

89Memulihkan plan mode pada jalur non-interaktif dan VS Code memerlukan Claude Code v2.1.246 atau lebih baru. Setiap baris menyebutkan mode izin yang diakhiri sesi, jalur terminal, non-interaktif, dan VS Code mana yang Anda gunakan untuk melanjutkannya, dan mode izin yang digunakan Claude Code untuk memulai sesi yang dilanjutkan.78Memulihkan plan mode pada jalur non-interaktif dan VS Code memerlukan Claude Code v2.1.246 atau lebih baru. Setiap baris menyebutkan mode izin yang diakhiri sesi, jalur terminal, non-interaktif, dan VS Code mana yang Anda gunakan untuk melanjutkannya, dan mode izin yang digunakan Claude Code untuk memulai sesi yang dilanjutkan.

90 79 

91| Sesi berakhir dalam | Cara Anda melanjutkan | Mode izin setelah Anda melanjutkan |80| Sesi berakhir dalam | Cara Anda melanjutkan | Mode izin setelah Anda melanjutkan |

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

93| `bypassPermissions` | Terminal | Mode izin yang akan dimulai oleh sesi baru. Untuk [melewati izin](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) lagi, aktifkan saat peluncuran dengan salah satu flag peluncurannya atau `permissions.defaultMode: "bypassPermissions"` dalam [pengaturan pengguna, `--settings`, atau pengaturan terkelola](/docs/id/settings-reference#permissions-defaultmode) |82| `bypassPermissions` | Terminal | Mode izin yang akan dimulai oleh sesi baru. Untuk [melewati izin](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) lagi, aktifkan saat peluncuran dengan salah satu flag peluncurannya atau `permissions.defaultMode: "bypassPermissions"` dalam [pengaturan pengguna, `--settings`, atau pengaturan terkelola](/docs/id/settings-reference#permissions-defaultmode) |

94| `plan` | Terminal | Plan mode. Dengan `--fork-session`, mode izin yang akan dimulai oleh sesi baru |83| `plan` | Terminal | Plan mode. Dengan `--fork-session`, mode izin yang akan dimulai oleh sesi baru |

84| `plan` | Terminal, ketika aturan penolakan menghapus `ExitPlanMode` | Mode izin yang akan dimulai oleh sesi baru |

95| `auto` | Terminal | `auto`, hanya ketika akun Anda masih memenuhi [persyaratan auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) |85| `auto` | Terminal | `auto`, hanya ketika akun Anda masih memenuhi [persyaratan auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) |

96| Manual | Terminal | Manual ketika sesi baru akan dimulai dalam auto mode dari [default bawaan](/docs/id/permission-modes#which-mode-a-session-starts-in). Ketika `defaultMode` dari file pengaturan [berlaku](/docs/id/permission-modes#which-mode-a-session-starts-in), Claude Code memulai sesi yang dilanjutkan dalam mode tersebut sebagai gantinya |86| Manual | Terminal | Manual ketika sesi baru akan dimulai dalam auto mode dari [default bawaan](/docs/id/permission-modes#which-mode-a-session-starts-in). Ketika `defaultMode` dari file pengaturan [berlaku](/docs/id/permission-modes#which-mode-a-session-starts-in), Claude Code memulai sesi yang dilanjutkan dalam mode tersebut sebagai gantinya |

97| `plan` | Non-interaktif, di bawah [kondisi di bawah](#resume-in-plan-mode-with-p) | Plan mode |87| `plan` | Non-interaktif, di bawah [kondisi di bawah](#resume-in-plan-mode-with-p) | Plan mode |


110* Anda tidak meneruskan `--permission-mode` atau `--dangerously-skip-permissions`100* Anda tidak meneruskan `--permission-mode` atau `--dangerously-skip-permissions`

111* Anda tidak meneruskan `--fork-session`101* Anda tidak meneruskan `--fork-session`

112* 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`

113 104 

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

115 Lanjutkan dari ringkasan106 Lanjutkan dari ringkasan


117 108 

118Pada 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.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.

119 110 

120Dialog menawarkan tiga cara untuk melanjutkan sesi. Mereka berbeda dalam berapa banyak percakapan yang masing-masing bawa ke permintaan nanti, yang merupakan pertukaran antara menyimpan setiap detail dan mengirim lebih sedikit token per permintaan:111Dialog menawarkan tiga cara untuk melanjutkan sesi:

121 112 

122* **Resume from summary**: menjalankan [`/compact`](/docs/id/context-window#what-survives-compaction) segera. Claude Code mengirim satu permintaan peringkasan atas riwayat lengkap, kemudian mengganti riwayat dengan ringkasan, pertukaran terbaru Anda, dan hingga lima file yang baru-baru ini dibaca. Permintaan nanti membawa ringkasan daripada riwayat lengkap.113* **Resume from summary**: menjalankan [`/compact`](/docs/id/context-window#what-survives-compaction) segera. Permintaan nanti membawa ringkasan daripada riwayat lengkap.

123* **Resume full session as-is**: memuat percakapan tanpa perubahan. Setelah Anda mengirim pesan pertama Anda, Claude Code memproses ulang dan meng-cache ulang riwayat lengkap, kemudian membacanya kembali dari cache pada permintaan nanti sementara cache tetap hangat.114* **Resume full session as-is**: memuat percakapan tanpa perubahan.

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

125 116 

126Melanjutkan 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.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.


136 127 

137Gunakan `Ctrl+W` untuk memperluas ke semua worktree repositori atau `Ctrl+A` untuk memperluas ke setiap proyek di mesin ini.128Gunakan `Ctrl+W` untuk memperluas ke semua worktree repositori atau `Ctrl+A` untuk memperluas ke setiap proyek di mesin ini.

138 129 

139Sesi yang prompt pertamanya adalah perintah [`/loop`](/docs/id/scheduled-tasks#run-a-prompt-repeatedly-with-%2Floop) tidak muncul dalam pemilih, dan `claude --continue` juga melewati mereka. Menjalankan `/loop` nanti dalam percakapan tidak menyembunyikan sesi. Sebelum v2.1.211, menjalankan `/loop` di awal percakapan menyembunyikan sesi dari pemilih secara permanen.130<h4 id="/loop-p-agent-sdk-and-background-sessions">

131 `/loop`, `-p`, Agent SDK, dan sesi latar belakang

132</h4>

133 

134Sesi yang prompt pertamanya adalah perintah [`/loop`](/docs/id/scheduled-tasks#run-a-prompt-repeatedly-with-%2Floop) tidak muncul dalam pemilih, dan `claude --continue` juga melewati mereka. Menjalankan `/loop` nanti dalam percakapan tidak menyembunyikan sesi.

135 

136Claude Code meninggalkan sesi yang dibuat dengan [`claude -p`](/docs/id/headless) atau [Agent SDK](/docs/id/agent-sdk/overview) keluar dari pemilih sesi dan keluar dari `claude --continue`. Anda masih dapat melanjutkan satu dengan meneruskan ID sesinya ke `claude --resume <session-id>`. Ketika Anda menjalankan [`claude -p --continue`](/docs/id/headless#continue-conversations), Claude Code menyertakan sesi `-p`, SDK, dan `/loop`.

140 137 

141Memindahkan sesi dengan [`/cd`](/docs/id/commands) memindahkannya ke penyimpanan proyek direktori baru, sehingga muncul dalam pemilih direktori tersebut setelahnya. Sejak v2.1.196, sesi yang dipindahkan tetap keluar dari pemilih direktori lama bahkan setelah kerusakan atau keluar paksa. Pada versi sebelumnya, sesi juga dapat muncul kembali dalam daftar direktori lama setelah keluar yang tidak bersih ketika jalur lama berisi karakter khusus seperti garis bawah.138`claude --continue` membuka [sesi latar belakang](/docs/id/agent-view) yang telah selesai, tetapi bukan yang masih berjalan; membuka sesi latar belakang yang selesai memerlukan Claude Code v2.1.257 atau lebih baru. Jika percakapan terbaru Anda adalah sesi yang [Anda pindahkan ke latar belakang](/docs/id/agent-view#send-the-session-to-the-background) dan masih berjalan di sana, Claude Code keluar dengan `Your most recent conversation is running in the background` dan ID sesi tersebut. Lampirkan ke sesi dari [`claude agents`](/docs/id/agent-view#attach-to-a-session), atau jalankan `claude --resume` untuk memilih yang lain.

139 

140<h4 id="sessions-in-other-worktrees-and-projects">

141 Sesi di worktree dan proyek lain

142</h4>

142 143 

143Ketika Anda memilih sesi dari worktree lain dari repositori yang sama, Claude Code melanjutkannya di tempat; ketika worktree sesi sendiri tidak lagi ada, Claude Code [melanjutkannya dalam direktori saat ini Anda](/docs/id/worktrees#resume-a-worktree-session). Ketika Anda memilih sesi dari proyek yang tidak terkait, Claude Code menyalin perintah `cd` dan resume ke clipboard Anda sebagai gantinya. Jika direktori proyek tersebut tidak lagi ada, Claude Code melanjutkan sesi dalam direktori saat ini Anda daripada menyalin perintah `cd` yang akan gagal.144Ketika Anda memilih sesi dari worktree lain dari repositori yang sama, Claude Code melanjutkannya di tempat; ketika worktree sesi sendiri tidak lagi ada, Claude Code [melanjutkannya dalam direktori saat ini Anda](/docs/id/worktrees#resume-a-worktree-session). Ketika Anda memilih sesi dari proyek yang tidak terkait, Claude Code menyalin perintah `cd` dan resume ke clipboard Anda sebagai gantinya. Jika direktori proyek tersebut tidak lagi ada, Claude Code melanjutkan sesi dalam direktori saat ini Anda daripada menyalin perintah `cd` yang akan gagal.

144 145 

146Memindahkan sesi dengan [`/cd`](/docs/id/commands) memindahkannya ke penyimpanan proyek direktori baru, sehingga muncul dalam pemilih direktori tersebut setelahnya.

147 

148<h4 id="resume-by-session-id-or-name">

149 Lanjutkan berdasarkan ID sesi atau nama

150</h4>

151 

152Anda dapat menjalankan `claude --resume <session-id>` dari direktori mana pun, sehingga Anda dapat melanjutkan sesi yang dimulai di tempat lain atau dipindahkan dengan [`/cd`](/docs/id/commands). Claude Code mencari ID dalam urutan ini:

153 

1541. Direktori proyek saat ini dan git worktree-nya

1552. Setiap proyek lain di mesin ini

156 

157Pencarian lintas proyek menyelesaikan ID hanya ketika tepat satu proyek lain menyimpan transkrip dengan pesan untuknya, sehingga duplikat yang disalin tangan membuat Claude Code melaporkan tidak ditemukan daripada melanjutkan salinan arbitrer. Jika tidak ada sesi yang disimpan cocok dengan ID, Claude Code melaporkan `No conversation found with session ID: <session-id>`.

158 

145Melanjutkan berdasarkan nama diselesaikan di seluruh repositori saat ini dan worktree-nya. Kedua bentuk mencari kecocokan yang tepat dan melanjutkannya secara langsung bahkan jika berada di worktree berbeda:159Melanjutkan berdasarkan nama diselesaikan di seluruh repositori saat ini dan worktree-nya. Kedua bentuk mencari kecocokan yang tepat dan melanjutkannya secara langsung bahkan jika berada di worktree berbeda:

146 160 

147| Perintah | Kecocokan tepat | Nama ambigu |161| Perintah | Kecocokan tepat | Nama ambigu |


166 180 

167Setelah Anda memberi nama sesi melalui rute CLI atau dari claude.ai, kembali ke sesi tersebut dengan `claude --resume <name>` atau `/resume <name>`; sesi aplikasi desktop dilanjutkan di [aplikasi desktop](/docs/id/desktop#work-in-parallel-with-sessions). Lihat [Resume a session](#resume-a-session) untuk mengetahui bagaimana perilaku resolusi nama di seluruh worktrees.181Setelah Anda memberi nama sesi melalui rute CLI atau dari claude.ai, kembali ke sesi tersebut dengan `claude --resume <name>` atau `/resume <name>`; sesi aplikasi desktop dilanjutkan di [aplikasi desktop](/docs/id/desktop#work-in-parallel-with-sessions). Lihat [Resume a session](#resume-a-session) untuk mengetahui bagaimana perilaku resolusi nama di seluruh worktrees.

168 182 

169Ketika Anda memulai atau melanjutkan sesi interaktif dengan nama yang sudah digunakan oleh sesi live lain di mesin ini, atau mengganti nama sesi menjadi nama seperti itu, Claude Code membiarkan nama dengan sesi yang sudah memilikinya, mengganti nama Anda menjadi varian dengan akhiran dua kata, seperti `auth-refactor-graceful-unicorn`, dan memberitahu Anda. Jalankan `/rename` dengan nama baru jika Anda lebih suka memilih sendiri. Sebelum v2.1.232, kedua sesi menyimpan nama tersebut.

170 

171Dalam tiga kasus Claude Code tidak mengganti nama duplikat, sehingga Anda masih dapat melihat dua sesi dengan nama yang sama dalam daftar:

172 

173* Tidak memeriksa judul yang dihasilkan AI atau nama tampilan default.

174* Tidak memeriksa `--name` dari sesi [background](/docs/id/agent-view#from-your-shell) atau `-p` saat startup.

175* Tidak dapat mengganti nama sesi di versi Claude Code yang lebih awal.

176 

177Sesi yang tidak Anda beri nama masih mendapatkan dua label yang ditetapkan Claude Code. Hanya judul yang dihasilkan yang berfungsi sebagai handle resume:183Sesi yang tidak Anda beri nama masih mendapatkan dua label yang ditetapkan Claude Code. Hanya judul yang dihasilkan yang berfungsi sebagai handle resume:

178 184 

179* Nama tampilan default: sesi interaktif yang tidak pernah Anda beri nama masih mendapatkan nama tampilan default saat dimulai. Memerlukan Claude Code v2.1.196 atau lebih baru. Default menggabungkan nama direktori kerja dengan akhiran dua karakter, misalnya `my-app-3f`, dan mengidentifikasi sesi dalam daftar sesi yang berjalan, seperti [agent view](/docs/id/agent-view) dan output `claude agents --json`. Default bukan handle resume. Jika Anda meneruskannya ke `claude --resume` atau `/resume`, Claude Code tidak menemukan sesi. Memberi nama sesi menggantikan default dalam daftar tersebut, begitu juga dengan menerima plan.185* Nama tampilan default: sesi interaktif yang tidak pernah Anda beri nama masih mendapatkan nama tampilan default saat dimulai. Memerlukan Claude Code v2.1.196 atau lebih baru. Default menggabungkan nama direktori kerja dengan akhiran dua karakter, misalnya `my-app-3f`, dan mengidentifikasi sesi dalam daftar sesi yang berjalan, seperti [agent view](/docs/id/agent-view) dan output `claude agents --json`. Default bukan handle resume. Jika Anda meneruskannya ke `claude --resume` atau `/resume`, Claude Code tidak menemukan sesi.

180* Judul yang dihasilkan: jika Anda tidak memberi nama sesi, Claude Code menghasilkan judul sesi untuk itu. Judul adalah ringkasan singkat dari prompt pertama Anda, ditulis oleh permintaan latar belakang ke model kecil/cepat, biasanya model kelas Haiku. Jalankan `claude -p` yang Anda mulai langsung dari shell atau script tidak mendapatkan satu.186* Judul yang dihasilkan: jika Anda tidak memberi nama sesi, Claude Code menghasilkan judul sesi untuk itu. Judul adalah ringkasan singkat dari prompt pertama Anda, ditulis oleh permintaan latar belakang ke model kecil/cepat, biasanya model kelas Haiku. Jalankan `claude -p` yang Anda mulai langsung dari shell atau script tidak mendapatkan satu.

181 187 

182 Menerima plan menggantikan judul prompt pertama dengan judul berdasarkan plan. Memberi nama sesi juga menggantinya.188 Menerima plan menggantikan judul yang dihasilkan dengan judul berdasarkan plan. Anda dapat meneruskan salah satu judul ke `claude --resume` atau `/resume`, dan Claude Code menyelesaikannya dengan cara yang sama seperti nama yang Anda atur.

183 

184 Anda melihat judul prompt pertama di [pemilih sesi](#use-the-session-picker) dan di bidang [`session_name`](/docs/id/statusline) statusline ketika tidak ada nama yang diatur. Judul plan ditampilkan di tempat yang sama dan juga dalam daftar sesi yang berjalan, di mana ia menggantikan nama tampilan default.

185 

186 Anda dapat meneruskan salah satu judul ke `claude --resume` atau `/resume`, dan Claude Code menyelesaikannya dengan cara yang sama seperti nama yang Anda atur.

187 189 

188<h2 id="use-the-session-picker">190<h2 id="use-the-session-picker">

189 Gunakan pemilih sesi191 Gunakan pemilih sesi


205| `Ctrl+B` | Filter ke sesi dari cabang git saat ini. Tekan lagi untuk menampilkan semua cabang |207| `Ctrl+B` | Filter ke sesi dari cabang git saat ini. Tekan lagi untuk menampilkan semua cabang |

206| `Esc` | Keluar dari pemilih sesi atau mode pencarian |208| `Esc` | Keluar dari pemilih sesi atau mode pencarian |

207 209 

208Setiap baris menampilkan nama sesi jika Anda menetapkan satu, jika tidak judul sesi yang dihasilkan AI, ringkasan percakapan, atau prompt pertama, bersama dengan waktu sejak aktivitas terakhir, cabang git, dan ukuran file. Perluas ke semua proyek dengan `Ctrl+A` untuk juga melihat jalur proyek setiap sesi.210Setiap baris menampilkan nama sesi jika Anda menetapkan satu, jika tidak judul sesi yang dihasilkan AI, ringkasan percakapan, atau prompt pertama, bersama dengan waktu sejak aktivitas terakhir, branch git, dan ukuran file.

209 211 

210Sesi yang dibuat dengan `/branch` atau `--fork-session` mendapatkan ID sesi mereka sendiri dan muncul sebagai baris terpisah. Ketika pemilih menemukan lebih dari satu entri untuk sesi yang sama, sesi tersebut dikelompokkan di bawah satu baris. Tekan `→` untuk memperluas grup.212Sesi yang dibuat dengan `/branch` atau `--fork-session` mendapatkan ID sesi mereka sendiri dan muncul sebagai baris terpisah. Ketika pemilih menemukan lebih dari satu entri untuk sesi yang sama, sesi tersebut dikelompokkan di bawah satu baris. Tekan `→` untuk memperluas grup.

211 213 


223/branch try-streaming-approach225/branch try-streaming-approach

224```226```

225 227 

226Jika Anda menghilangkan nama, Claude Code memberi nama cabang baru setelah prompt pertama dalam percakapan. Mulai dari v2.1.198 ini juga berlaku setelah [compaction](/docs/id/how-claude-code-works#when-context-fills-up); versi sebelumnya kembali ke nama literal `Branched conversation` alih-alih melihat melampaui ringkasan compaction ke prompt pertama asli.228Jika Anda menghilangkan nama, Claude Code memberi nama cabang baru setelah prompt pertama dalam percakapan.

227 229 

228Dari baris perintah, gabungkan `--continue` atau `--resume` dengan `--fork-session`:230Dari baris perintah, gabungkan `--continue` atau `--resume` dengan `--fork-session`:

229 231 


250 252 

251Perintah ini mengontrol apa yang ada di jendela konteks tanpa meninggalkan sesi:253Perintah ini mengontrol apa yang ada di jendela konteks tanpa meninggalkan sesi:

252 254 

253* **`/clear`**: mulai segar dengan konteks kosong. Claude Code menyimpan percakapan sebelumnya; lanjutkan dengan `/resume`, atau, dalam proses Claude Code yang sama, dari [entri sesi sebelumnya di menu rewind](/docs/id/checkpointing#rewind-past-a-cleared-conversation). Tanpa argumen, percakapan baru mempertahankan nama yang Anda tetapkan dengan `--name` atau `/rename`, tetapi bukan judul sesi yang dihasilkan AI. Untuk memberi nama percakapan yang Anda tinggalkan, berikan nama, seperti dalam `/clear release-prep`; percakapan baru kemudian dimulai tanpa nama255* **`/clear`**: mulai segar dengan konteks kosong. Claude Code menyimpan sesi sebelumnya; lanjutkan dengan `/resume`, atau, dalam proses Claude Code yang sama, dari [entri sesi sebelumnya di menu rewind](/docs/id/checkpointing#rewind-past-a-cleared-conversation). Tanpa argumen, sesi baru mempertahankan nama yang Anda tetapkan dengan `--name` atau `/rename`, tetapi bukan judul sesi yang dihasilkan AI. Untuk memberi nama sesi yang Anda tinggalkan, berikan nama, seperti dalam `/clear release-prep`; sesi baru kemudian dimulai tanpa nama

254* **`/compact [instructions]`**: ganti riwayat dengan ringkasan, secara opsional berfokus pada apa yang Anda tentukan256* **`/compact [instructions]`**: ganti riwayat dengan ringkasan, secara opsional berfokus pada apa yang Anda tentukan

255* **`/context`**: tampilkan apa yang saat ini mengonsumsi konteks257* **`/context`**: tampilkan apa yang saat ini mengonsumsi konteks

256 258 

settings.md +2 −2

Details

495 495 

496Sebelum v2.1.211, Claude Code menyimpan file di direktori awal. Itu masih membaca file versi sebelumnya yang ditinggalkan di sana di samping file akar; di mana keduanya menetapkan kunci yang sama, nilai akar berlaku, dan aturan izin dari kedua file berlaku. Helper [`resolveSettings()`](/docs/id/agent-sdk/typescript#resolvesettings) SDK Agent selalu membaca file dari direktori awal.496Sebelum v2.1.211, Claude Code menyimpan file di direktori awal. Itu masih membaca file versi sebelumnya yang ditinggalkan di sana di samping file akar; di mana keduanya menetapkan kunci yang sama, nilai akar berlaku, dan aturan izin dari kedua file berlaku. Helper [`resolveSettings()`](/docs/id/agent-sdk/typescript#resolvesettings) SDK Agent selalu membaca file dari direktori awal.

497 497 

498Claude Code membaca `.claude/settings.json` bersama dari [direktori kerja utama](/docs/id/permissions#working-directories) sesi, jadi untuk menggunakan file yang di-commit di akar repositori, mulai Claude Code di sana. Setelah Anda [memindahkan sesi dengan `/cd`](/docs/id/permissions#move-the-session-to-another-directory), Claude Code membaca kedua file proyek dari direktori baru sebagai gantinya, menempatkan file lokal dengan aturan yang sama. Membaca mereka dari direktori yang Anda pindahkan memerlukan Claude Code v2.1.246 atau lebih baru.498Claude Code membaca `.claude/settings.json` bersama dari [direktori kerja utama](/docs/id/permissions#working-directories) sesi, jadi untuk menggunakan file yang di-commit di akar repositori, mulai Claude Code di sana. Setelah Anda [memindahkan sesi dengan `/cd`](/docs/id/permissions#move-the-session-to-another-directory), Claude Code membaca kedua file proyek dari direktori baru sebagai gantinya, menempatkan file lokal dengan aturan yang sama. Membaca mereka dari direktori yang Anda pindahkan memerlukan Claude Code v2.1.246 atau lebih baru. Untuk sesi worktree yang Anda mulai dari aplikasi desktop, lihat [Apa yang dibagikan worktree dengan checkout utama](/docs/id/worktrees#what-worktrees-share-with-the-main-checkout).

499 499 

500<span id="managed-settings-delivery" />500<span id="managed-settings-delivery" />

501 501 


767 767 

768Dua hal mencegah kunci di `.claude/settings.json` diterapkan untuk semua orang yang mengkloningnya:768Dua hal mencegah kunci di `.claude/settings.json` diterapkan untuk semua orang yang mengkloningnya:

769 769 

770* **Claude Code mengabaikan kunci dalam file repositori.** Cari `User, local, or managed`, `User or managed`, `Managed`, atau `Global config` di kolom Scope dari [indeks pengaturan](/docs/id/settings-reference#settings-index). Kunci-kunci itu tidak pernah berlaku dari file bersama, kecuali beberapa yang masih dapat dimatikan oleh file repositori. Setiap entri itu mengatakan demikian pada baris Scope-nya. Kunci `Global config` hanya berlaku dari `~/.claude.json`.770* **Claude Code mengabaikan kunci dalam file repositori.** Cari `User, local, or managed`, `User or managed`, `User`, `Managed`, atau `Global config` di kolom Scope dari [indeks pengaturan](/docs/id/settings-reference#settings-index). Kunci-kunci itu tidak pernah berlaku dari file bersama, kecuali beberapa yang masih dapat dimatikan oleh file repositori. Setiap entri itu mengatakan demikian pada baris Scope-nya. Kunci `Global config` hanya berlaku dari `~/.claude.json`.

771 771 

772 Di dalam kunci `env`, variabel ekspor telemetri juga tidak pernah berlaku dari file bersama, kecuali beberapa nilai off; lihat [Variabel yang diabaikan Claude Code dalam `env`](/docs/id/settings-reference#variables-claude-code-ignores-in-env).772 Di dalam kunci `env`, variabel ekspor telemetri juga tidak pernah berlaku dari file bersama, kecuali beberapa nilai off; lihat [Variabel yang diabaikan Claude Code dalam `env`](/docs/id/settings-reference#variables-claude-code-ignores-in-env).

773* **Kunci menunggu kepercayaan.** Aturan `permissions.allow`, `permissions.additionalDirectories`, `extraKnownMarketplaces`, dan sebagian besar nilai [`env`](/docs/id/settings-reference#env) hanya berlaku setelah setiap rekan kerja [mempercayai folder](/docs/id/permissions#project-allow-rules-and-workspace-trust). Sampai saat itu mereka masih melihat permintaan izin dan tidak mendapatkan plugin dari marketplace yang dideklarasikan file. Aturan `deny` dan `ask` berlaku segera.773* **Kunci menunggu kepercayaan.** Aturan `permissions.allow`, `permissions.additionalDirectories`, `extraKnownMarketplaces`, dan sebagian besar nilai [`env`](/docs/id/settings-reference#env) hanya berlaku setelah setiap rekan kerja [mempercayai folder](/docs/id/permissions#project-allow-rules-and-workspace-trust). Sampai saat itu mereka masih melihat permintaan izin dan tidak mendapatkan plugin dari marketplace yang dideklarasikan file. Aturan `deny` dan `ask` berlaku segera.

Details

582<ReferenceFilter582<ReferenceFilter

583 noun="settings"583 noun="settings"

584 placeholder="Filter settings by key or purpose"584 placeholder="Filter settings by key or purpose"

585 facetOrder={{ scope: ["Any file", "User, local, or managed", "User or managed", "Managed", "Global config"] }}585 facetOrder={{ scope: ["Any file", "User, local, or managed", "User or managed", "User", "Managed", "Global config"] }}

586 columnHelp={{586 columnHelp={{

587topic: "The section of this page that holds the entry. Use Sort by to group the table by topic.",587topic: "The section of this page that holds the entry. Use Sort by to group the table by topic.",

588scope: "Which settings files can set the key: user (~/.claude/settings.json), project (.claude/settings.json), local (.claude/settings.local.json), or managed (deployed by your organization). Global config keys are in ~/.claude.json instead.",588scope: "Which settings files can set the key: user (~/.claude/settings.json), project (.claude/settings.json), local (.claude/settings.local.json), or managed (deployed by your organization). Global config keys are in ~/.claude.json instead.",


638| [`claudeMdExcludes`](#claudemdexcludes) | Lewati file [CLAUDE.md](/docs/id/memory#exclude-specific-claude-md-files) tertentu ketika memori dimuat | Memory and context | Any file |638| [`claudeMdExcludes`](#claudemdexcludes) | Lewati file [CLAUDE.md](/docs/id/memory#exclude-specific-claude-md-files) tertentu ketika memori dimuat | Memory and context | Any file |

639| [`cleanupPeriodDays`](#cleanupperioddays) | Pilih berapa hari Claude Code menyimpan [transkrip](/docs/id/data-usage#data-retention) sebelum menghapusnya | Privacy and telemetry | Any file |639| [`cleanupPeriodDays`](#cleanupperioddays) | Pilih berapa hari Claude Code menyimpan [transkrip](/docs/id/data-usage#data-retention) sebelum menghapusnya | Privacy and telemetry | Any file |

640| [`companyAnnouncements`](#companyannouncements) | Tampilkan pengumuman organisasi Anda saat startup | Interface and terminal | Any file |640| [`companyAnnouncements`](#companyannouncements) | Tampilkan pengumuman organisasi Anda saat startup | Interface and terminal | Any file |

641| [`copyFullResponse`](#copyfullresponse) | Buat [`/copy`](/docs/id/commands) menyalin respons lengkap tanpa menampilkan pemilih blok kode | Global config settings | Global config |641| [`copyFullResponse`](#copyfullresponse) | Buat [`/copy`](/docs/id/commands) menyalin respons lengkap tanpa menampilkan pemilih | Global config settings | Global config |

642| [`copyOnSelect`](#copyonselect) | Matikan penyalinan otomatis teks yang Anda pilih dengan mouse dalam [rendering fullscreen](/docs/id/fullscreen#use-the-mouse) dan tampilan agent | Global config settings | Global config |642| [`copyOnSelect`](#copyonselect) | Matikan penyalinan otomatis teks yang Anda pilih dengan mouse dalam [rendering fullscreen](/docs/id/fullscreen#use-the-mouse) dan tampilan agent | Global config settings | Global config |

643| [`crossSessionInbound`](#crosssessioninbound) | Pilih apakah Claude Code mengirimkan [pesan dari sesi lain Anda](/docs/id/cross-session-messaging#control-inbound-messages), menampilkan pemberitahuan tanpa mengirimkannya, atau menolaknya | Agents, sessions, and worktrees | Any file |643| [`crossSessionInbound`](#crosssessioninbound) | Pilih apakah Claude Code mengirimkan [pesan dari sesi lain Anda](/docs/id/cross-session-messaging#control-inbound-messages), menampilkan pemberitahuan tanpa mengirimkannya, atau menolaknya | Agents, sessions, and worktrees | Any file |

644| [`defaultShell`](#defaultshell) | Pilih apakah Bash atau PowerShell menjalankan perintah shell yang Anda ketik dengan awalan [`!`](/docs/id/interactive-mode#shell-mode-with-prefix) | Interface and terminal | Any file |644| [`defaultShell`](#defaultshell) | Pilih apakah Bash atau PowerShell menjalankan perintah shell yang Anda ketik dengan awalan [`!`](/docs/id/interactive-mode#shell-mode-with-prefix) | Interface and terminal | Any file |


684| [`fileCheckpointingEnabled`](#filecheckpointingenabled) | Matikan atau nyalakan snapshot file yang [`/rewind`](/docs/id/checkpointing) pulihkan | Memory and context | Any file |684| [`fileCheckpointingEnabled`](#filecheckpointingenabled) | Matikan atau nyalakan snapshot file yang [`/rewind`](/docs/id/checkpointing) pulihkan | Memory and context | Any file |

685| [`fileSuggestion`](#filesuggestion) | Sediakan pelengkapan otomatis file [`@`](/docs/id/interactive-mode#quick-commands) dari perintah Anda sendiri | Interface and terminal | Any file |685| [`fileSuggestion`](#filesuggestion) | Sediakan pelengkapan otomatis file [`@`](/docs/id/interactive-mode#quick-commands) dari perintah Anda sendiri | Interface and terminal | Any file |

686| [`footerLinksRegexes`](#footerlinksregexes) | Buat ID masalah atau tinjauan dalam output menjadi [tautan yang dapat diklik](/docs/id/statusline#clickable-links) di bawah kotak input | Interface and terminal | User or managed |686| [`footerLinksRegexes`](#footerlinksregexes) | Buat ID masalah atau tinjauan dalam output menjadi [tautan yang dapat diklik](/docs/id/statusline#clickable-links) di bawah kotak input | Interface and terminal | User or managed |

687| [`forceLoginGatewayUrl`](#forcelogingatewayurl) | Atur [URL gateway](/docs/id/claude-apps-gateway#set-the-gateway-url) yang dihubungi layar login | Authentication and providers | Managed |687| [`forceLoginGatewayUrl`](#forcelogingatewayurl) | Atur [URL gateway](/docs/id/claude-apps-gateway#set-the-gateway-url) yang dihubungi layar login | Authentication and providers | User or managed |

688| [`forceLoginMethod`](#forceloginmethod) | [Batasi login](/docs/id/authentication#restrict-login-to-your-organization) ke claude.ai, Claude Console, atau [gateway cloud](/docs/id/claude-apps-gateway) | Authentication and providers | Any file |688| [`forceLoginMethod`](#forceloginmethod) | [Batasi login](/docs/id/authentication#restrict-login-to-your-organization) ke claude.ai, Claude Console, atau [gateway cloud](/docs/id/claude-apps-gateway) | Authentication and providers | Any file |

689| [`forceLoginOrgUUID`](#forceloginorguuid) | [Pin login claude.ai ke organisasi Anda](/docs/id/authentication#restrict-login-to-your-organization); hanya sumber terkelola yang memberlakukannya | Authentication and providers | Any file |689| [`forceLoginOrgUUID`](#forceloginorguuid) | [Pin login claude.ai ke organisasi Anda](/docs/id/authentication#restrict-login-to-your-organization); hanya sumber terkelola yang memberlakukannya | Authentication and providers | Any file |

690| [`forceRemoteSettingsRefresh`](#forceremotesettingsrefresh) | Blokir startup hingga [pengaturan yang dikelola server](/docs/id/server-managed-settings) selesai diambil ulang | Enterprise and managed settings | Managed |690| [`forceRemoteSettingsRefresh`](#forceremotesettingsrefresh) | Blokir startup hingga [pengaturan yang dikelola server](/docs/id/server-managed-settings) selesai diambil ulang | Enterprise and managed settings | Managed |


831| [`worktree`](#worktree) | Konfigurasikan cara Claude Code membuat git [worktree](/docs/id/worktrees) | Agents, sessions, and worktrees | Any file |831| [`worktree`](#worktree) | Konfigurasikan cara Claude Code membuat git [worktree](/docs/id/worktrees) | Agents, sessions, and worktrees | Any file |

832| [`worktree.baseRef`](#worktree-baseref) | Buat branch [worktree](/docs/id/worktrees) baru dari branch default remote atau HEAD lokal Anda | Agents, sessions, and worktrees | Any file |832| [`worktree.baseRef`](#worktree-baseref) | Buat branch [worktree](/docs/id/worktrees) baru dari branch default remote atau HEAD lokal Anda | Agents, sessions, and worktrees | Any file |

833| [`worktree.bgIsolation`](#worktree-bgisolation) | Biarkan sesi latar belakang mengedit salinan kerja tanpa [worktree](/docs/id/worktrees) | Agents, sessions, and worktrees | Any file |833| [`worktree.bgIsolation`](#worktree-bgisolation) | Biarkan sesi latar belakang mengedit salinan kerja tanpa [worktree](/docs/id/worktrees) | Agents, sessions, and worktrees | Any file |

834| [`worktree.location`](#worktree-location) | Pilih tempat [sesi SSH Desktop](/docs/id/desktop#ssh-sessions) membuat worktree-nya di mesin remote | Agents, sessions, and worktrees | User |

834| [`worktree.sparsePaths`](#worktree-sparsepaths) | Check out hanya direktori yang Anda butuhkan di setiap [worktree](/docs/id/worktrees) | Agents, sessions, and worktrees | Any file |835| [`worktree.sparsePaths`](#worktree-sparsepaths) | Check out hanya direktori yang Anda butuhkan di setiap [worktree](/docs/id/worktrees) | Agents, sessions, and worktrees | Any file |

835| [`worktree.symlinkDirectories`](#worktree-symlinkdirectories) | Buat symlink direktori besar ke setiap [worktree](/docs/id/worktrees) daripada menduplikasinya | Agents, sessions, and worktrees | Any file |836| [`worktree.symlinkDirectories`](#worktree-symlinkdirectories) | Buat symlink direktori besar ke setiap [worktree](/docs/id/worktrees) daripada menduplikasinya | Agents, sessions, and worktrees | Any file |

836| [`wslInheritsWindowsSettings`](#wslinheritswindowssettings) | Biarkan WSL membaca [pengaturan terkelola](/docs/id/managed-settings) dari rantai kebijakan Windows | Enterprise and managed settings | Managed |837| [`wslInheritsWindowsSettings`](#wslinheritswindowssettings) | Biarkan WSL membaca [pengaturan terkelola](/docs/id/managed-settings) dari rantai kebijakan Windows | Enterprise and managed settings | Managed |


1763 * `"acceptEdits"`: Claude Code juga menjalankan pengeditan file dan perintah sistem file umum seperti `mkdir` dan `mv` tanpa bertanya1764 * `"acceptEdits"`: Claude Code juga menjalankan pengeditan file dan perintah sistem file umum seperti `mkdir` dan `mv` tanpa bertanya

1764 * `"plan"`: Claude Code membaca dan merencanakan tetapi memblokir pengeditan sampai Anda menyetujui rencana1765 * `"plan"`: Claude Code membaca dan merencanakan tetapi memblokir pengeditan sampai Anda menyetujui rencana

1765 * `"auto"`: Claude Code berjalan tanpa permintaan izin sehari-hari; sebelum tindakan seperti perintah shell dan permintaan jaringan berjalan, pengklasifikasi latar belakang memeriksa bahwa tindakan tersebut selaras dengan permintaan Anda1766 * `"auto"`: Claude Code berjalan tanpa permintaan izin sehari-hari; sebelum tindakan seperti perintah shell dan permintaan jaringan berjalan, pengklasifikasi latar belakang memeriksa bahwa tindakan tersebut selaras dengan permintaan Anda

1766 * `"dontAsk"`: Claude Code secara otomatis menolak setiap panggilan yang sebaliknya akan meminta konfirmasi; pembacaan, tindakan lain yang tidak memerlukan persetujuan, dan tool yang sudah disetujui sebelumnya masih berjalan1767 * `"dontAsk"`: Claude Code secara otomatis menolak setiap panggilan yang sebaliknya akan meminta konfirmasi; pembacaan file di dalam direktori kerja Anda, tindakan lain yang tidak memerlukan persetujuan, dan tool yang sudah disetujui sebelumnya masih berjalan, kecuali pembacaan dari [jalur jaringan](/docs/id/permissions#network-paths)

1767 * `"bypassPermissions"`: Claude Code menjalankan semuanya tanpa bertanya1768 * `"bypassPermissions"`: Claude Code menjalankan semuanya tanpa bertanya

1768 * `"manual"`: alias untuk `"default"`1769 * `"manual"`: alias untuk `"default"`

1769* **Default**: tidak diatur1770* **Default**: tidak diatur


2398 2399 

2399* Entri di `files` atau `envVars` yang masih memiliki `path` atau `name` yang valid dan `mode` bernilai `mask` atau `deny`, seperti entri yang pola `extract`-nya tidak memiliki grup penangkap, diturunkan menjadi `mode: "deny"` dengan peringatan, sehingga kredensial tetap diblokir, bukan disamarkan, sampai Anda memperbaiki entri tersebut. Entri `files` yang diturunkan mengunci [`filesystem.disabled`](/docs/id/sandboxing#disable-filesystem-isolation) seperti entri `deny` eksplisit, dan peringatannya mencatat bahwa blok bacanya tidak diberlakukan jika pengaturan terkelola mematikan isolasi sistem file.2400* Entri di `files` atau `envVars` yang masih memiliki `path` atau `name` yang valid dan `mode` bernilai `mask` atau `deny`, seperti entri yang pola `extract`-nya tidak memiliki grup penangkap, diturunkan menjadi `mode: "deny"` dengan peringatan, sehingga kredensial tetap diblokir, bukan disamarkan, sampai Anda memperbaiki entri tersebut. Entri `files` yang diturunkan mengunci [`filesystem.disabled`](/docs/id/sandboxing#disable-filesystem-isolation) seperti entri `deny` eksplisit, dan peringatannya mencatat bahwa blok bacanya tidak diberlakukan jika pengaturan terkelola mematikan isolasi sistem file.

2400* Entri dengan `mode` yang tidak dikenal atau `path` atau `name` yang tidak valid dihapus.2401* Entri dengan `mode` yang tidak dikenal atau `path` atau `name` yang tidak valid dihapus.

2401* Setiap kasus memunculkan peringatan; baik entri diturunkan maupun dihapus, entri valid yang tersisa tetap diberlakukan, dan nilai `credentials` yang sepenuhnya tidak valid dibuang sementara sisa `sandbox` tetap berlaku.2402* Setiap kasus memunculkan peringatan; baik entri diturunkan maupun dihapus, entri valid yang tersisa tetap diberlakukan.

2402 2403 

2403Berlaku di v2.1.191 dan lebih baru; sebelum v2.1.221, setiap entri tidak valid dihapus. Untuk kunci terkelola lainnya dengan penanganan per bidang, lihat [Invalid entries in managed settings](/docs/id/managed-settings#invalid-entries-in-managed-settings).2404Berlaku di v2.1.191 dan lebih baru; sebelum v2.1.221, setiap entri tidak valid dihapus. Untuk kunci terkelola lainnya dengan penanganan per bidang, lihat [Invalid entries in managed settings](/docs/id/managed-settings#invalid-entries-in-managed-settings).

2404 2405 


5681 5682 

5682Di luar repositori git, [`WorktreeCreate` hook](/docs/id/worktrees#non-git-version-control) yang gagal melepaskan blok sehingga sesi dapat mengedit direktori kerja di tempat; pelepasan itu memerlukan Claude Code v2.1.203 atau lebih baru.5683Di luar repositori git, [`WorktreeCreate` hook](/docs/id/worktrees#non-git-version-control) yang gagal melepaskan blok sehingga sesi dapat mengedit direktori kerja di tempat; pelepasan itu memerlukan Claude Code v2.1.203 atau lebih baru.

5683 5684 

5685<h3 id="worktree-location">

5686 `worktree.location`

5687</h3>

5688 

5689Pilih folder di mesin remote tempat [sesi SSH Desktop](/docs/id/desktop#choose-where-ssh-session-worktrees-go) membuat worktree mereka, alih-alih `<project-root>/.claude/worktrees/`. Hanya aplikasi desktop yang membaca kunci ini: `--worktree`, tool `EnterWorktree`, subagent terisolasi, dan background sessions mengabaikannya. Memerlukan Claude Desktop v1.44121.0 atau lebih baru.

5690 

5691* **Scope**: [`User`](#scopes), di `~/.claude/settings.json` pada mesin remote

5692* **Type**: string, jalur absolut atau jalur yang diawali dengan `~/`

5693* **Default**: unset, sehingga worktree ditempatkan di dalam proyek

5694 

5695Contoh ini menetapkan folder ke `~/worktrees`:

5696 

5697```json settings.json theme={null}

5698{

5699 "worktree": {

5700 "location": "~/worktrees"

5701 }

5702}

5703```

5704 

5705**Worktree folder** yang ditetapkan pada koneksi SSH di Desktop diutamakan. Jika organisasi Anda membatasi folder yang boleh digunakan sesi, Desktop menyimpan worktree di dalam proyek.

5706 

5684<h2 id="remote-desktop-and-notifications">5707<h2 id="remote-desktop-and-notifications">

5685 Remote, desktop, dan notifikasi5708 Remote, desktop, dan notifikasi

5686</h2>5709</h2>


5813 `enableArtifact`5836 `enableArtifact`

5814</h3>5837</h3>

5815 5838 

5816Matikan alat [Artifact](/docs/id/artifacts), yang menerbitkan output sesi sebagai halaman web pribadi di claude.ai. Ketika Anda mematikan baris **Artifacts** di `/config`, Claude Code menulis kunci ini ke pengaturan pengguna Anda, jadi Anda biasanya tidak mengeditnya dengan tangan. Memerlukan Claude Code v2.1.196 atau lebih baru.5839Matikan tool [Artifact](/docs/id/artifacts), yang menerbitkan output sesi sebagai halaman web pribadi di claude.ai. Ketika Anda mematikan baris **Artifacts** di `/config`, Claude Code menulis kunci ini ke pengaturan pengguna Anda, jadi Anda biasanya tidak mengeditnya dengan tangan.

5817 5840 

5818* **Scope**: [`Any file`](#scopes). Setiap file dapat mematikan alat, dan tidak ada yang dapat menghidupkannya kembali.5841* **Scope**: [`Any file`](#scopes). Setiap file dapat mematikan alat, dan tidak ada yang dapat menghidupkannya kembali.

5819* **Type**: Boolean5842* **Type**: Boolean


5920 `sshConfigs`5943 `sshConfigs`

5921</h3>5944</h3>

5922 5945 

5923Tambahkan koneksi SSH ke dropdown lingkungan [Desktop](/docs/id/desktop#pre-configure-ssh-connections-for-your-team). Administrator menggunakannya untuk mendistribusikan koneksi bersama ke tim. Koneksi yang Anda tentukan dalam pengaturan terkelola ditampilkan sebagai terkelola, jadi pengguna dapat memilihnya tetapi tidak dapat mengedit atau menghapusnya di aplikasi.5946Tambahkan koneksi SSH ke dropdown lingkungan [Desktop](/docs/id/desktop#pre-configure-ssh-connections-for-your-team). Administrator menggunakannya untuk mendistribusikan koneksi bersama ke tim. Koneksi yang Anda tentukan dalam pengaturan terkelola ditampilkan sebagai terkelola. Pengguna dapat memilihnya dan [mengatur **Worktree folder** mereka sendiri](/docs/id/desktop#choose-where-ssh-session-worktrees-go) untuk koneksi tersebut, tetapi tidak dapat mengedit hal lain atau menghapusnya di aplikasi.

5924 5947 

5925* **Scope**: [`User or managed`](#scopes). Aplikasi desktop membaca kunci ini. Secara default, aplikasi membaca koneksi terkelola dari [satu sumber terkelola](/docs/id/managed-settings#how-claude-code-combines-managed-sources).5948* **Scope**: [`User or managed`](#scopes). Aplikasi desktop membaca kunci ini. Secara default, aplikasi membaca koneksi terkelola dari [satu sumber terkelola](/docs/id/managed-settings#how-claude-code-combines-managed-sources).

5926* **Type**: array objek, masing-masing dengan `id`, `name`, dan `sshHost` yang diperlukan dan `sshPort` dan `sshIdentityFile` opsional5949* **Type**: array objek, masing-masing dengan `id`, `name`, dan `sshHost` yang diperlukan dan `sshPort` dan `sshIdentityFile` opsional


6085 6108 

6086Batasi jenis akun apa yang dapat digunakan orang untuk masuk. Atur `"claudeai"` untuk memungkinkan hanya akun claude.ai, `"console"` untuk memungkinkan hanya akun Claude Console, atau `"gateway"` untuk mengirim orang ke [cloud gateway](/docs/id/claude-apps-gateway) alih-alih login pihak pertama. Administrator mengaturnya dalam pengaturan terkelola dan memasangkannya dengan [`forceLoginOrgUUID`](#forceloginorguuid) untuk menjaga login claude.ai pengembang di dalam satu organisasi. Jika Anda mengaturnya ke `"claudeai"` atau `"console"` di file pengaturan apa pun, Claude Code juga berhenti menawarkan [sign-in Console tanpa kunci](/docs/id/authentication#sign-in-without-an-api-key) dalam sesi yang file itu berlaku.6109Batasi jenis akun apa yang dapat digunakan orang untuk masuk. Atur `"claudeai"` untuk memungkinkan hanya akun claude.ai, `"console"` untuk memungkinkan hanya akun Claude Console, atau `"gateway"` untuk mengirim orang ke [cloud gateway](/docs/id/claude-apps-gateway) alih-alih login pihak pertama. Administrator mengaturnya dalam pengaturan terkelola dan memasangkannya dengan [`forceLoginOrgUUID`](#forceloginorguuid) untuk menjaga login claude.ai pengembang di dalam satu organisasi. Jika Anda mengaturnya ke `"claudeai"` atau `"console"` di file pengaturan apa pun, Claude Code juga berhenti menawarkan [sign-in Console tanpa kunci](/docs/id/authentication#sign-in-without-an-api-key) dalam sesi yang file itu berlaku.

6087 6110 

6088* **Scope**: [`Any file`](#scopes). Claude Code menghormati `"gateway"` hanya dari sumber terkelola di mesin: `managed-settings.json`, plist macOS atau registri Windows HKLM, atau pembantu kebijakan. Ini memperlakukan `"gateway"` sebagai tidak diatur dalam pengaturan pengguna, proyek, lokal, HKCU, dan server-terkelola, aturan yang sama seperti [`forceLoginGatewayUrl`](#forcelogingatewayurl).6111* **Scope**: [`Any file`](#scopes). Claude Code menghormati `"gateway"` dari sumber yang sama dengan [`forceLoginGatewayUrl`](#forcelogingatewayurl) dan memperlakukannya sebagai tidak diatur di tempat lain.

6089* **Type**: string, salah satu dari:6112* **Type**: string, salah satu dari:

6090 * `"claudeai"`: hanya akun claude.ai yang dapat masuk6113 * `"claudeai"`: hanya akun claude.ai yang dapat masuk

6091 * `"console"`: hanya akun Claude Console yang dapat masuk6114 * `"console"`: hanya akun Claude Console yang dapat masuk


6108 6131 

6109Atur URL gateway yang layar Cloud gateway `/login` terhubung, sehingga orang mencapai [cloud gateway](/docs/id/claude-apps-gateway) Anda tanpa mengetik alamatnya. Layar tidak memiliki bidang URL: dengan kunci ini diatur, layar menampilkan URL gateway Anda dan terhubung ketika orang menekan Enter; tanpanya, layar memberi tahu mereka untuk menghubungi administrator IT mereka.6132Atur URL gateway yang layar Cloud gateway `/login` terhubung, sehingga orang mencapai [cloud gateway](/docs/id/claude-apps-gateway) Anda tanpa mengetik alamatnya. Layar tidak memiliki bidang URL: dengan kunci ini diatur, layar menampilkan URL gateway Anda dan terhubung ketika orang menekan Enter; tanpanya, layar memberi tahu mereka untuk menghubungi administrator IT mereka.

6110 6133 

6111Baik kunci ini atau `forceLoginMethod: "gateway"` membuat mesin gateway-only, kecuali untuk sesi yang memilih penyedia cloud dengan `CLAUDE_CODE_USE_*`. `/login` kemudian membuka di layar Cloud gateway tanpa pemilih metode login. Lihat [Administrator policy requires a Cloud gateway sign-in](/docs/id/errors#administrator-policy-requires-a-cloud-gateway-sign-in) untuk apa yang terjadi pada login pihak pertama atau kunci API yang tersisa. Atur kedua kunci sehingga layar terhubung alih-alih menampilkan kesalahan.6134Dalam pengaturan terkelola, baik kunci ini atau `forceLoginMethod: "gateway"` membuat mesin gateway-only, kecuali untuk sesi yang memilih penyedia cloud dengan `CLAUDE_CODE_USE_*`. `/login` kemudian membuka di layar Cloud gateway tanpa pemilih metode login. Lihat [Administrator policy requires a Cloud gateway sign-in](/docs/id/errors#administrator-policy-requires-a-cloud-gateway-sign-in) untuk apa yang terjadi pada login pihak pertama atau kunci API yang tersisa. Atur kedua kunci sehingga layar terhubung alih-alih menampilkan kesalahan.

6112 6135 

6113* **Scope**: [`Managed`](#scopes). Baca hanya dari sumber di mesin: `managed-settings.json`, plist macOS atau registri Windows HKLM, atau pembantu kebijakan. Claude Code mengabaikannya dalam pengaturan HKCU dan server-terkelola.6136* **Scope**: [`User or managed`](#scopes). Dibaca dari sumber terkelola di mesin: `managed-settings.json`, plist macOS atau registri Windows HKLM, atau pembantu kebijakan. Pada mesin yang tidak memiliki satu pun dari sumber tersebut, Claude Code v2.1.295 atau lebih baru juga membacanya dari [pengaturan pengguna](/docs/id/claude-apps-gateway#set-the-gateway-url-in-user-settings). Claude Code mengabaikannya dalam pengaturan HKCU dan server-terkelola.

6114* **Type**: string, URL lengkap termasuk skema6137* **Type**: string, URL lengkap termasuk skema

6115* **Default**: tidak diatur, jadi layar Cloud gateway menampilkan kesalahan yang memberi tahu orang untuk menghubungi administrator IT mereka6138* **Default**: tidak diatur, jadi layar Cloud gateway menampilkan kesalahan yang memberi tahu orang untuk menghubungi administrator IT mereka

6116 6139 


6140}6163}

6141```6164```

6142 6165 

6143Jika sumber terkelola mengatur array kosong, atau nilai yang Claude Code tidak dapat mengurai, Claude Code memblokir setiap login dengan pesan salah konfigurasi.6166Jika sumber terkelola mengatur array kosong, atau nilai yang bukan string atau array string, pengguna yang masuk dengan akun Anthropic tidak dapat memulai Claude Code atau menyelesaikan login. Mereka melihat pesan yang menyebutkan `forceLoginOrgUUID` dan meminta mereka untuk menghubungi administrator mereka. [`policyHelper`](#policyhelper) yang menghasilkan nilai dengan tipe yang salah [menggagalkan eksekusinya](#helper-failures) sebagai gantinya.

6144 6167 

6145Lihat [Batasi login ke organisasi Anda](/docs/id/authentication#restrict-login-to-your-organization) untuk cara Claude Code memperlakukan login Claude Console, jalur login lainnya, dan kredensial lingkungan.6168Lihat [Batasi login ke organisasi Anda](/docs/id/authentication#restrict-login-to-your-organization) untuk cara Claude Code memperlakukan login Claude Console, jalur login lainnya, dan kredensial lingkungan.

6146 6169 


6806 `copyFullResponse`6829 `copyFullResponse`

6807</h3>6830</h3>

6808 6831 

6809Buat [`/copy`](/docs/id/commands) menyalin respons penuh setiap kali, tanpa picker yang biasanya ditampilkannya saat respons berisi blok kode. Memilih **Always copy full response** di picker tersebut mengatur kunci ini ke `true`. Muncul di `/config` sebagai **Skip the /copy picker**.6832Buat [`/copy`](/docs/id/commands) menyalin respons penuh setiap kali, tanpa menampilkan picker. Memilih **Always copy full response** di picker tersebut mengatur kunci ini ke `true`. Muncul di `/config` sebagai **Skip the /copy picker**.

6810 6833 

6811* **Scope**: [`Global config`](#scopes)6834* **Scope**: [`Global config`](#scopes)

6812* **Type**: Boolean6835* **Type**: Boolean

6813 * `true`: `/copy` menyalin respons penuh tanpa menampilkan picker6836 * `true`: `/copy` menyalin respons penuh tanpa menampilkan picker

6814 * `false`: saat respons berisi blok kode, `/copy` menampilkan picker di mana Anda memilih satu blok kode atau respons penuh6837 * `false`: saat respons berisi blok kode atau blockquote, `/copy` menampilkan picker di mana Anda memilih satu blok atau respons penuh

6815* **Default**: `false`6838* **Default**: `false`

6816 6839 

6817```json ~/.claude.json theme={null}6840```json ~/.claude.json theme={null}

skills.md +6 −6

Details

192 192 

193Claude Code memuat skill proyek dari `.claude/skills/` di direktori tempat Anda memulainya dan di setiap direktori induk hingga root repositori, sehingga memulai di `packages/frontend/` tetap mengambil skill yang didefinisikan di root. Saat Anda [memindahkan sesi dengan `/cd`](/docs/id/permissions#move-the-session-to-another-directory) pada v2.1.246 atau yang lebih baru, Claude Code menambahkan skill proyek dari direktori baru tersebut.193Claude Code memuat skill proyek dari `.claude/skills/` di direktori tempat Anda memulainya dan di setiap direktori induk hingga root repositori, sehingga memulai di `packages/frontend/` tetap mengambil skill yang didefinisikan di root. Saat Anda [memindahkan sesi dengan `/cd`](/docs/id/permissions#move-the-session-to-another-directory) pada v2.1.246 atau yang lebih baru, Claude Code menambahkan skill proyek dari direktori baru tersebut.

194 194 

195Dalam sesi yang berjalan di [git worktree](/docs/id/worktrees) yang ditautkan, Claude Code mencari direktori induk hanya sampai root worktree. Pada Claude Code v2.1.277 atau yang lebih baru, ketika checkout worktree tidak memiliki direktori `.claude/skills` di root-nya, Claude Code memuat skill proyek dari checkout utama sebagai gantinya. Lihat [Apa yang dibagikan worktree dengan checkout utama](/docs/id/worktrees#what-worktrees-share-with-the-main-checkout).195Dalam sesi yang berjalan di [git worktree](/docs/id/worktrees) yang ditautkan yang Anda buat dengan `--worktree` atau `git worktree add`, Claude Code mencari direktori induk hanya sampai root worktree. Pada Claude Code v2.1.277 atau yang lebih baru, ketika checkout worktree tidak memiliki direktori `.claude/skills` di root-nya, Claude Code memuat skill proyek dari checkout utama sebagai gantinya. Lihat [Apa yang dibagikan worktree dengan checkout utama](/docs/id/worktrees#what-worktrees-share-with-the-main-checkout).

196 196 

197Skill di direktori `.claude/skills/` di bawah tempat Anda memulai tidak dimuat saat startup. Skill tersebut dimuat saat pertama kali Claude membaca atau mengedit file di subdirektori tersebut dan tetap tersedia selama sisa sesi. Sebelum itu, skill tersebut tidak muncul di menu `/` dan Anda tidak dapat memanggilnya berdasarkan nama. Untuk memuatnya lebih awal, jalankan `/add-dir` dengan path subdirektori tersebut, yang memerlukan Claude Code v2.1.257 atau yang lebih baru.197Skill di direktori `.claude/skills/` di bawah tempat Anda memulai tidak dimuat saat startup. Skill tersebut dimuat saat pertama kali Claude membaca atau mengedit file di subdirektori tersebut dan tetap tersedia selama sisa sesi. Sebelum itu, skill tersebut tidak muncul di menu `/` dan Anda tidak dapat memanggilnya berdasarkan nama. Untuk memuatnya lebih awal, jalankan `/add-dir` dengan path subdirektori tersebut, yang memerlukan Claude Code v2.1.257 atau yang lebih baru. Untuk sesi worktree yang Anda mulai dari aplikasi desktop, lihat [Apa yang dibagikan worktree dengan checkout utama](/docs/id/worktrees#what-worktrees-share-with-the-main-checkout).

198 198 

199Ketika nama direktori skill bersarang cocok dengan nama skill lain, keduanya tetap tersedia. Dengan skill `deploy` di root repositori dan satu lagi di `apps/web/.claude/skills/`:199Ketika nama direktori skill bersarang cocok dengan nama skill lain, keduanya tetap tersedia. Dengan skill `deploy` di root repositori dan satu lagi di `apps/web/.claude/skills/`:

200 200 


235 235 

236Jika skill hanya ada di `~/.claude/skills/` di mesin Anda, Claude Code melaporkan bahwa skill tidak ditemukan saat [routine](/docs/id/routines) memanggilnya, karena setiap eksekusi routine dimulai sebagai sesi cloud baru. Untuk membuat skill personal tersedia di sesi-sesi ini:236Jika skill hanya ada di `~/.claude/skills/` di mesin Anda, Claude Code melaporkan bahwa skill tidak ditemukan saat [routine](/docs/id/routines) memanggilnya, karena setiap eksekusi routine dimulai sebagai sesi cloud baru. Untuk membuat skill personal tersedia di sesi-sesi ini:

237 237 

238* Untuk Cowork dan sesi cloud, aktifkan skill tersebut untuk akun claude.ai Anda.238* Untuk Cowork dan sesi cloud, aktifkan skill tersebut untuk akun claude.ai Anda. [Beberapa sesi di lingkungan self-hosted](/docs/id/self-hosted-environments-configuration#how-each-session’s-config-is-assembled) tidak memuat skill akun Anda.

239* Untuk sesi cloud, Anda dapat melakukan commit skill ke `.claude/skills/` milik repositori sebagai gantinya. Plugin yang dideklarasikan di `.claude/settings.json` milik repositori dan plugin yang hanya diaktifkan di pengaturan pengguna Anda [tidak dimuat di sesi cloud](/docs/id/cloud-environments#what-carries-over-from-your-setup).239* Untuk sesi cloud, Anda dapat melakukan commit skill ke `.claude/skills/` milik repositori sebagai gantinya. Plugin yang dideklarasikan di `.claude/settings.json` milik repositori dan plugin yang hanya diaktifkan di pengaturan pengguna Anda [tidak dimuat di sesi cloud](/docs/id/cloud-environments#what-carries-over-from-your-setup).

240 240 

241[Tugas terjadwal Desktop](/docs/id/desktop-scheduled-tasks) berjalan secara lokal di mesin Anda, sehingga tugas tersebut memuat `~/.claude/skills/`.241[Tugas terjadwal Desktop](/docs/id/desktop-scheduled-tasks) berjalan secara lokal di mesin Anda, sehingga tugas tersebut memuat `~/.claude/skills/`.


434| `when_to_use` | Tidak | Konteks tambahan tentang kapan Claude harus memanggil skill, seperti frasa pemicu atau contoh permintaan. Ditambahkan ke `description` dalam daftar skill dan dihitung dalam batas 1.536 karakter. |434| `when_to_use` | Tidak | Konteks tambahan tentang kapan Claude harus memanggil skill, seperti frasa pemicu atau contoh permintaan. Ditambahkan ke `description` dalam daftar skill dan dihitung dalam batas 1.536 karakter. |

435| `argument-hint` | Tidak | Petunjuk yang ditampilkan selama pelengkapan otomatis untuk menunjukkan argumen yang diharapkan. Contoh: `[issue-number]` atau `[filename] [format]`. |435| `argument-hint` | Tidak | Petunjuk yang ditampilkan selama pelengkapan otomatis untuk menunjukkan argumen yang diharapkan. Contoh: `[issue-number]` atau `[filename] [format]`. |

436| `arguments` | Tidak | Argumen posisional bernama untuk [substitusi `$name`](#available-string-substitutions) dalam konten skill. Menerima string yang dipisahkan spasi atau daftar YAML. Nama dipetakan ke posisi argumen secara berurutan. |436| `arguments` | Tidak | Argumen posisional bernama untuk [substitusi `$name`](#available-string-substitutions) dalam konten skill. Menerima string yang dipisahkan spasi atau daftar YAML. Nama dipetakan ke posisi argumen secara berurutan. |

437| `disable-model-invocation` | Tidak | Atur ke `true` untuk mencegah Claude memuat skill ini secara otomatis. Gunakan untuk alur kerja yang ingin Anda picu secara manual dengan `/name`. Juga mencegah skill [dimuat lebih dulu ke dalam subagent](/docs/id/sub-agents#preload-skills-into-subagents). Sejak v2.1.196, juga mencegah skill berjalan ketika [tugas terjadwal](/docs/id/scheduled-tasks) dipicu dengan skill tersebut sebagai prompt-nya. Default: `false`. |437| `disable-model-invocation` | Tidak | Atur ke `true` untuk mencegah Claude memuat skill ini secara otomatis. Gunakan untuk alur kerja yang ingin Anda picu secara manual dengan `/name`. Juga mencegah skill [dimuat lebih dulu ke dalam subagent](/docs/id/sub-agents#preload-skills-into-subagents) dan berjalan ketika [tugas terjadwal](/docs/id/scheduled-tasks) dipicu dengan skill tersebut sebagai prompt-nya. Default: `false`. |

438| `user-invocable` | Tidak | Atur ke `false` jika hanya Claude yang boleh memanggil skill: Claude Code menyembunyikannya dari menu `/` dan tidak menjalankannya ketika Anda mengetik `/name`. Gunakan untuk pengetahuan latar belakang yang tidak seharusnya dipanggil langsung oleh pengguna. Default: `true`. |438| `user-invocable` | Tidak | Atur ke `false` jika hanya Claude yang boleh memanggil skill: Claude Code menyembunyikannya dari menu `/` dan tidak menjalankannya ketika Anda mengetik `/name`. Gunakan untuk pengetahuan latar belakang yang tidak seharusnya dipanggil langsung oleh pengguna. Default: `true`. |

439| `allowed-tools` | Tidak | Tool yang dapat digunakan Claude tanpa meminta izin selama giliran yang memanggil skill ini. Pemberian izin ini dihapus ketika Anda mengirim pesan berikutnya. Menerima string yang dipisahkan spasi atau koma, atau daftar YAML. Lihat [Menyetujui tool terlebih dahulu untuk skill](#pre-approve-tools-for-a-skill). |439| `allowed-tools` | Tidak | Tool yang dapat digunakan Claude tanpa meminta izin selama giliran yang memanggil skill ini. Pemberian izin ini dihapus ketika Anda mengirim pesan berikutnya. Menerima string yang dipisahkan spasi atau koma, atau daftar YAML. Lihat [Menyetujui tool terlebih dahulu untuk skill](#pre-approve-tools-for-a-skill). |

440| `disallowed-tools` | Tidak | Tool yang dihapus dari kumpulan tool yang tersedia bagi Claude selama skill ini aktif. Gunakan untuk skill otonom yang tidak boleh memanggil tool tertentu, seperti `AskUserQuestion` untuk loop latar belakang. Menerima string yang dipisahkan spasi atau koma, atau daftar YAML. Pembatasan ini dihapus ketika Anda mengirim pesan berikutnya. Seperti aturan deny, field ini tidak dapat menghapus [`EndConversation`](/docs/id/tools-reference#endconversation-tool-behavior) selama masih ada tool lain. |440| `disallowed-tools` | Tidak | Tool yang dihapus dari kumpulan tool yang tersedia bagi Claude selama skill ini aktif. Gunakan untuk skill otonom yang tidak boleh memanggil tool tertentu, seperti `AskUserQuestion` untuk loop latar belakang. Menerima string yang dipisahkan spasi atau koma, atau daftar YAML. Pembatasan ini dihapus ketika Anda mengirim pesan berikutnya. Seperti aturan deny, field ini tidak dapat menghapus [`EndConversation`](/docs/id/tools-reference#endconversation-tool-behavior) selama masih ada tool lain. |


528 528 

529Jika skill ini diinstal di `~/.claude/skills/render-chart/`, kedua kemunculan `${CLAUDE_SKILL_DIR}` diperluas ke direktori tersebut. Aturan `allowed-tools` kemudian cocok dengan perintah persis yang diinstruksikan isi skill kepada Claude untuk dijalankan, sehingga skrip berjalan tanpa permintaan izin.529Jika skill ini diinstal di `~/.claude/skills/render-chart/`, kedua kemunculan `${CLAUDE_SKILL_DIR}` diperluas ke direktori tersebut. Aturan `allowed-tools` kemudian cocok dengan perintah persis yang diinstruksikan isi skill kepada Claude untuk dijalankan, sehingga skrip berjalan tanpa permintaan izin.

530 530 

531Substitusi `${CLAUDE_PROJECT_DIR}` memerlukan Claude Code v2.1.196 atau yang lebih baru.

532 

533Argumen berindeks menggunakan kutipan gaya shell, jadi bungkus nilai multi-kata dalam tanda kutip untuk meneruskannya sebagai satu argumen. Misalnya, `/my-skill "hello world" second` membuat `$0` diperluas menjadi `hello world` dan `$1` menjadi `second`. Placeholder `$ARGUMENTS` selalu diperluas menjadi string argumen lengkap sebagaimana diketik.531Argumen berindeks menggunakan kutipan gaya shell, jadi bungkus nilai multi-kata dalam tanda kutip untuk meneruskannya sebagai satu argumen. Misalnya, `/my-skill "hello world" second` membuat `$0` diperluas menjadi `hello world` dan `$1` menjadi `second`. Placeholder `$ARGUMENTS` selalu diperluas menjadi string argumen lengkap sebagaimana diketik.

534 532 

535Placeholder berindeks tanpa argumen yang sesuai, seperti `$2` ketika hanya satu argumen yang diteruskan, tetap berada dalam konten tanpa perubahan. Placeholder bernama dari frontmatter [`arguments`](#frontmatter-reference) tanpa argumen yang cocok diperluas menjadi string kosong.533Placeholder berindeks tanpa argumen yang sesuai, seperti `$2` ketika hanya satu argumen yang diteruskan, tetap berada dalam konten tanpa perubahan. Placeholder bernama dari frontmatter [`arguments`](#frontmatter-reference) tanpa argumen yang cocok diperluas menjadi string kosong.


843* Ketika Anda menginvokasi skill yang di-fork sementara invokasi sebelumnya dari skill yang sama masih berjalan841* Ketika Anda menginvokasi skill yang di-fork sementara invokasi sebelumnya dari skill yang sama masih berjalan

844* Ketika [tugas terjadwal](/docs/id/scheduled-tasks) diaktifkan dengan skill sebagai promptnya842* Ketika [tugas terjadwal](/docs/id/scheduled-tasks) diaktifkan dengan skill sebagai promptnya

845 843 

844Ketika agent dalam [workflow dinamis](/docs/id/workflows) menginvokasi skill yang di-fork, agent tersebut menunggu dan menerima hasilnya, bahkan ketika skill tidak menetapkan `background: false`. Sebelum v2.1.295, Claude Code tidak menunggu dalam kasus ini, dan ketika skill berjalan di latar belakang, hasilnya tiba di percakapan utama Anda alih-alih sampai ke agent tersebut.

845 

846Fork yang di-background juga berjalan dengan [set alat yang lebih sempit yang berlaku untuk subagent latar belakang](/docs/id/sub-agents#run-subagents-in-foreground-or-background): subagent skill adalah tipe agen reguler, jadi pengecualian untuk subagent yang mem-fork percakapan tidak mencakupnya. Jika langkah skill Anda bergantung pada alat di luar set itu, atur `background: false` untuk menjaga set alat penuh.846Fork yang di-background juga berjalan dengan [set alat yang lebih sempit yang berlaku untuk subagent latar belakang](/docs/id/sub-agents#run-subagents-in-foreground-or-background): subagent skill adalah tipe agen reguler, jadi pengecualian untuk subagent yang mem-fork percakapan tidak mencakupnya. Jika langkah skill Anda bergantung pada alat di luar set itu, atur `background: false` untuk menjaga set alat penuh.

847 847 

848Skill yang di-fork yang berjalan di latar belakang menerapkan editnya di luar [checkpoints](/docs/id/checkpointing) sesi Anda, jadi `/rewind` tidak membatalkannya; gunakan git untuk mengembalikannya.848Skill yang di-fork yang berjalan di latar belakang menerapkan editnya di luar [checkpoints](/docs/id/checkpointing) sesi Anda, jadi `/rewind` tidak membatalkannya; gunakan git untuk mengembalikannya.

sub-agents.md +3 −5

Details

386* **Model percakapan utama milik keluarga itu**: subagent berjalan pada model persis percakapan utama, termasuk akhiran `[1m]` apa pun, jadi mendapat [extended context](/docs/id/model-config#extended-context) window yang sama seperti percakapan utama.386* **Model percakapan utama milik keluarga itu**: subagent berjalan pada model persis percakapan utama, termasuk akhiran `[1m]` apa pun, jadi mendapat [extended context](/docs/id/model-config#extended-context) window yang sama seperti percakapan utama.

387* **Claude Code tidak dapat mengetahui keluarga model percakapan utama, pada [provider selain Anthropic API](/docs/id/third-party-integrations)**: ini dapat terjadi dengan [application inference profile ARN](/docs/id/amazon-bedrock#iam-configuration) di Amazon Bedrock yang Claude Code belum diselesaikan ke model pendukung. Kasus ini hanya mencakup alias `opus`, dan tidak berlaku ketika Anda mengatur [`ANTHROPIC_DEFAULT_OPUS_MODEL`](/docs/id/model-config#environment-variables), karena `opus` kemudian diselesaikan ke model yang Anda atur.387* **Claude Code tidak dapat mengetahui keluarga model percakapan utama, pada [provider selain Anthropic API](/docs/id/third-party-integrations)**: ini dapat terjadi dengan [application inference profile ARN](/docs/id/amazon-bedrock#iam-configuration) di Amazon Bedrock yang Claude Code belum diselesaikan ke model pendukung. Kasus ini hanya mencakup alias `opus`, dan tidak berlaku ketika Anda mengatur [`ANTHROPIC_DEFAULT_OPUS_MODEL`](/docs/id/model-config#environment-variables), karena `opus` kemudian diselesaikan ke model yang Anda atur.

388 388 

389Alias dalam `CLAUDE_CODE_SUBAGENT_MODEL` selalu diselesaikan ke versi yang ditunjuk alias, bahkan ketika ia menamai keluarga percakapan utama.389Alias dalam `CLAUDE_CODE_SUBAGENT_MODEL` selalu diselesaikan ke versi yang ditunjuk alias, bahkan ketika ia menamai keluarga percakapan utama. Mengatur variabel ke `inherit` sama dengan membiarkannya tidak diatur.

390 390 

391Mengatur `CLAUDE_CODE_SUBAGENT_MODEL` dengan sendirinya tidak mengubah model yang dijalankan subagent Explore dan Plan bawaan. Untuk mengubahnya, lihat [Run every subagent on one model](#run-every-subagent-on-one-model).391Mengatur `CLAUDE_CODE_SUBAGENT_MODEL` dengan sendirinya tidak mengubah model yang dijalankan subagent Explore dan Plan bawaan. Untuk mengubahnya, lihat [Run every subagent on one model](#run-every-subagent-on-one-model).

392 392 

393Sebelum v2.1.251, `CLAUDE_CODE_SUBAGENT_MODEL` datang pertama dalam urutan ini dan menimpa parameter per-invokasi dan frontmatter, termasuk `model: inherit`.393Sebelum v2.1.251, `CLAUDE_CODE_SUBAGENT_MODEL` datang pertama dalam urutan ini dan menimpa parameter per-invokasi dan frontmatter, termasuk `model: inherit`.

394 394 

395Mengatur variabel ke `inherit` sama dengan membiarkannya tidak diatur. Sebelum v2.1.196, nilai itu memaksa subagent ke model percakapan utama dan mengabaikan sumber lain.

396 

397Claude Code memeriksa parameter per-invokasi, frontmatter, dan nilai environment variable terhadap allowlist [`availableModels`](/docs/id/model-config#restrict-model-selection) organisasi Anda. Untuk nilai yang diblokir, ia mengganti model lain:395Claude Code memeriksa parameter per-invokasi, frontmatter, dan nilai environment variable terhadap allowlist [`availableModels`](/docs/id/model-config#restrict-model-selection) organisasi Anda. Untuk nilai yang diblokir, ia mengganti model lain:

398 396 

399* Ketika nilai yang diblokir adalah alias keluarga seperti `opus`, Claude Code menjalankan subagent pada versi terbaru keluarga itu yang allowlist izinkan, mengikuti [substitution rules dan provider scope](/docs/id/model-config#restrict-model-selection) yang sama seperti `/model`. Sebelum v2.1.222, Claude Code menjalankan subagent pada model yang diwarisi untuk alias keluarga yang diblokir juga.397* Ketika nilai yang diblokir adalah alias keluarga seperti `opus`, Claude Code menjalankan subagent pada versi terbaru keluarga itu yang allowlist izinkan, mengikuti [substitution rules dan provider scope](/docs/id/model-config#restrict-model-selection) yang sama seperti `/model`. Sebelum v2.1.222, Claude Code menjalankan subagent pada model yang diwarisi untuk alias keluarga yang diblokir juga.


620| `default` | Mode manual: meminta izin |618| `default` | Mode manual: meminta izin |

621| `acceptEdits` | Otomatis menerima edit file dan perintah filesystem umum untuk path dalam direktori kerja atau `additionalDirectories` |619| `acceptEdits` | Otomatis menerima edit file dan perintah filesystem umum untuk path dalam direktori kerja atau `additionalDirectories` |

622| `auto` | [Auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode): pengklasifikasi latar belakang meninjau perintah dan penulisan direktori terlindungi |620| `auto` | [Auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode): pengklasifikasi latar belakang meninjau perintah dan penulisan direktori terlindungi |

623| `dontAsk` | Otomatis menolak permintaan izin. Tool yang secara eksplisit diizinkan masih berfungsi; `AskUserQuestion`, tool MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool), dan 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 ditolak bahkan jika Anda telah mengizinkannya |621| `dontAsk` | Otomatis menolak permintaan izin. Tool yang secara eksplisit diizinkan masih berfungsi; `AskUserQuestion`, tool MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool), [pembacaan dari path jaringan](/docs/id/permissions#network-paths), dan 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 ditolak bahkan jika Anda telah mengizinkannya |

624| `bypassPermissions` | [Lewati permintaan izin](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode). Subagent berjalan dalam mode ini hanya ketika percakapan utama melakukannya |622| `bypassPermissions` | [Lewati permintaan izin](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode). Subagent berjalan dalam mode ini hanya ketika percakapan utama melakukannya |

625| `plan` | Plan mode (eksplorasi read-only) |623| `plan` | Plan mode (eksplorasi read-only) |

626 624 


1150* **System prompt**: prompt agent itu sendiri ditambah detail lingkungan yang Claude Code tambahkan, bukan system prompt Claude Code. Subagent khusus mendefinisikan milik mereka dalam [badan markdown](#write-subagent-files) atau bidang `prompt`. Agent bawaan memiliki prompt yang telah ditentukan sebelumnya.1148* **System prompt**: prompt agent itu sendiri ditambah detail lingkungan yang Claude Code tambahkan, bukan system prompt Claude Code. Subagent khusus mendefinisikan milik mereka dalam [badan markdown](#write-subagent-files) atau bidang `prompt`. Agent bawaan memiliki prompt yang telah ditentukan sebelumnya.

1151* **Pesan tugas**: prompt delegasi yang Claude tulis saat menyerahkan pekerjaan.1149* **Pesan tugas**: prompt delegasi yang Claude tulis saat menyerahkan pekerjaan.

1152* **File CLAUDE.md**: setiap level dari [hierarki CLAUDE.md](/docs/id/memory#how-claude-md-files-load) yang dimuat percakapan utama, termasuk `~/.claude/CLAUDE.md`, aturan proyek, `CLAUDE.local.md`, file kebijakan terkelola, dan file [`AGENTS.md`](/docs/id/memory#agents-md) apa pun yang dimuat sebagai instruksi proyek. Agent Explore dan Plan bawaan melewati ini. Subagent yang definisinya menetapkan [`omitClaudeMd`](#supported-frontmatter-fields) hanya memuat file kebijakan terkelola, atau tidak ada sama sekali ketika definisi berasal dari [pengaturan terkelola](#choose-the-subagent-scope).1150* **File CLAUDE.md**: setiap level dari [hierarki CLAUDE.md](/docs/id/memory#how-claude-md-files-load) yang dimuat percakapan utama, termasuk `~/.claude/CLAUDE.md`, aturan proyek, `CLAUDE.local.md`, file kebijakan terkelola, dan file [`AGENTS.md`](/docs/id/memory#agents-md) apa pun yang dimuat sebagai instruksi proyek. Agent Explore dan Plan bawaan melewati ini. Subagent yang definisinya menetapkan [`omitClaudeMd`](#supported-frontmatter-fields) hanya memuat file kebijakan terkelola, atau tidak ada sama sekali ketika definisi berasal dari [pengaturan terkelola](#choose-the-subagent-scope).

1153* **Status Git**: snapshot yang dibaca Claude Code dari repositori Anda saat subagent dimulai. Tidak ada di luar repositori Git atau kapan pun snapshot dimatikan; lihat [`includeGitInstructions`](/docs/id/settings-reference#includegitinstructions). Explore dan Plan tetap melewatinya dalam kondisi apa pun.1151* **Status Git**: snapshot yang dibaca Claude Code dari repositori Anda saat subagent dimulai. Untuk subagent di [worktree-nya sendiri](/docs/id/worktrees#isolate-subagents-with-worktrees) dari repositori tersebut, snapshot menampilkan branch, status, dan commit terbaru worktree tersebut. Tidak ada di luar repositori Git atau kapan pun snapshot dimatikan; lihat [`includeGitInstructions`](/docs/id/settings-reference#includegitinstructions). Explore dan Plan tetap melewatinya dalam kondisi apa pun.

1154* **Skills yang dimuat sebelumnya**: konten lengkap dari skill apa pun yang dinamai dalam bidang [`skills`](#preload-skills-into-subagents) agent. Agent bawaan tidak memuat skills sebelumnya.1152* **Skills yang dimuat sebelumnya**: konten lengkap dari skill apa pun yang dinamai dalam bidang [`skills`](#preload-skills-into-subagents) agent. Agent bawaan tidak memuat skills sebelumnya.

1155* **Daftar saudara**: [system reminder](/docs/id/glossary#system-reminder) yang mencantumkan `main` dan setiap agent bernama lainnya dalam sesi, masing-masing nilai `to` yang valid untuk [`SendMessage`](#resume-subagents). Memerlukan Claude Code v2.1.206 atau lebih baru. Daftar muncul hanya ketika tool subagent mencakup `SendMessage` dan setidaknya satu agent lain memiliki nama, baik Claude menamakannya saat memunculkannya atau berjalan sebagai anggota [tim agent](/docs/id/agent-teams). Ini adalah snapshot yang diambil ketika subagent dimulai, jadi agent yang dinamai nanti tidak muncul.1153* **Daftar saudara**: [system reminder](/docs/id/glossary#system-reminder) yang mencantumkan `main` dan setiap agent bernama lainnya dalam sesi, masing-masing nilai `to` yang valid untuk [`SendMessage`](#resume-subagents). Memerlukan Claude Code v2.1.206 atau lebih baru. Daftar muncul hanya ketika tool subagent mencakup `SendMessage` dan setidaknya satu agent lain memiliki nama, baik Claude menamakannya saat memunculkannya atau berjalan sebagai anggota [tim agent](/docs/id/agent-teams). Ini adalah snapshot yang diambil ketika subagent dimulai, jadi agent yang dinamai nanti tidak muncul.

1156 1154 

Details

122}122}

123```123```

124 124 

125<h2 id="see-session-status-in-your-terminal">

126 Lihat status sesi di terminal Anda

127</h2>

128 

129Jika terminal Anda mengimplementasikan OSC 7501 Program Status Protocol, terminal tersebut dapat menampilkan apakah setiap sesi Claude Code interaktif sedang bekerja, menunggu Anda, atau sudah selesai, yang berguna saat Anda menjalankan tugas yang panjang atau beberapa sesi sekaligus. Tidak ada yang perlu diaktifkan di Claude Code. Untuk mengetahui apakah terminal Anda mengimplementasikan protokol tersebut dan di mana terminal menampilkan statusnya, periksa dokumentasinya.

130 

131Jika terminal Anda mengimplementasikannya dan Anda tidak melihat status untuk suatu sesi, periksa setiap penyebab berikut:

132 

133* **Versi Claude Code**: pelaporan status memerlukan Claude Code v2.1.295 atau yang lebih baru. Jalankan `claude --version` di shell Anda untuk memeriksanya.

134* **tmux**: di dalam tmux, Claude Code memeriksa dukungan pada tmux alih-alih pada terminal Anda, dan [`allow-passthrough`](#configure-tmux) tidak berpengaruh terhadap hal tersebut. Mulai sesi di luar tmux.

135* **Sesi latar belakang**: [sesi latar belakang](/docs/id/agent-view) tidak melaporkan statusnya ke terminal Anda, bahkan saat Anda terhubung ke sesi tersebut. Agent view menampilkan statusnya sebagai gantinya.

136* **[`CLAUDE_CODE_DISABLE_TERMINAL_TITLE`](/docs/id/env-vars#variables)**: jika Anda mengatur variabel ini ke `1`, Claude Code tidak memeriksa dukungan atau melaporkan status. Hapus pengaturan variabel tersebut.

137 

125<h2 id="configure-tmux">138<h2 id="configure-tmux">

126 Konfigurasi tmux139 Konfigurasi tmux

127</h2>140</h2>

tools-reference.md +32 −11

Details

279 279 

280Alat Edit melakukan penggantian string yang tepat. Alat ini mengambil `old_string` dan `new_string` dan mengganti yang pertama dengan yang kedua. Alat ini tidak menggunakan regex atau fuzzy matching.280Alat Edit melakukan penggantian string yang tepat. Alat ini mengambil `old_string` dan `new_string` dan mengganti yang pertama dengan yang kedua. Alat ini tidak menggunakan regex atau fuzzy matching.

281 281 

282Tiga pemeriksaan harus lulus agar edit dapat diterapkan. Sebelum salah satu dari mereka, jalur yang cocok dengan [aturan deny `Read`](/docs/id/permissions#tool-specific-permission-rules) ditolak, termasuk membuat file baru di sana. Penolakan memerlukan Claude Code v2.1.208 atau lebih baru.282Pemeriksaan berikut harus lulus agar edit dapat diterapkan. Sebelum salah satu dari mereka, jalur yang cocok dengan [aturan deny `Read`](/docs/id/permissions#tool-specific-permission-rules) ditolak, termasuk membuat file baru di sana. Penolakan memerlukan Claude Code v2.1.208 atau lebih baru.

283 283 

284* **Read-before-edit**: Claude membaca file dalam percakapan saat ini sebelum mengeditnya, dan pembacaan yang terpotong dengan pemberitahuan [`PARTIAL view`](#read-tool-behavior) tidak dihitung. Claude Opus 4.6, Claude Haiku 4.5, dan model yang lebih lama selalu memerlukan pembacaan. Model yang lebih baru dapat mengedit file yang belum dibaca ketika membacanya tidak memerlukan prompt izin dan alat Read tersedia.284* **Read-before-edit**: Claude membaca file dalam percakapan saat ini sebelum mengeditnya, dan pembacaan yang terpotong dengan pemberitahuan [`PARTIAL view`](#large-files) tidak dihitung. Claude Opus 4.6, Claude Haiku 4.5, dan model yang lebih lama selalu memerlukan pembacaan. Model yang lebih baru dapat mengedit file yang belum dibaca ketika membacanya tidak memerlukan prompt izin dan alat Read tersedia.

285* **Match**: `old_string` harus muncul dalam file persis seperti yang ditulis. Perbedaan spasi atau indentasi satu karakter saja sudah cukup untuk tidak cocok.285* **Match**: `old_string` harus muncul dalam file persis seperti yang ditulis. Perbedaan spasi atau indentasi satu karakter saja sudah cukup untuk tidak cocok.

286* **Uniqueness**: `old_string` harus muncul tepat satu kali. Ketika muncul lebih dari sekali, Claude baik menyediakan string yang lebih panjang dengan konteks sekitar yang cukup untuk menentukan satu kemunculan, atau menetapkan `replace_all: true` untuk mengganti semuanya.286* **Uniqueness**: `old_string` harus muncul tepat satu kali. Ketika muncul lebih dari sekali, Claude baik menyediakan string yang lebih panjang dengan konteks sekitar yang cukup untuk menentukan satu kemunculan, atau menetapkan `replace_all: true` untuk mengganti semuanya.

287 287 

288File yang berubah di disk setelah Claude terakhir membacanya masih dapat diedit ketika `old_string` cocok dengan konten saat ini dengan tepat dan jelas serta Claude Code dapat membaca file tanpa meminta. Pencocokan terhadap konten file saat ini menjaga keamanan ini, dan hasilnya mencatat bahwa file membawa perubahan lain sehingga Claude membacanya kembali sebelum edit yang bergantung pada konten sekitar. Dalam kasus lain, seperti `old_string` yang sudah usang atau yang cocok lebih dari sekali tanpa `replace_all`, Claude membaca file lagi sebelum mengedit. Penanganan yang santai terhadap file yang belum dibaca dan berubah memerlukan Claude Code v2.1.208 atau lebih baru; sebelum itu, Claude Code menolak edit apa pun ke file yang belum dibacanya dalam percakapan atau yang berubah di disk setelah pembacaan.288File yang berubah di disk setelah Claude terakhir membacanya masih dapat diedit ketika `old_string` cocok dengan konten saat ini dengan tepat dan jelas serta Claude Code dapat membaca file tanpa meminta. Pencocokan terhadap konten file saat ini menjaga keamanan ini, dan hasilnya mencatat bahwa file membawa perubahan lain sehingga Claude membacanya kembali sebelum edit yang bergantung pada konten sekitar. Dalam kasus lain, seperti `old_string` yang sudah usang atau yang cocok lebih dari sekali tanpa `replace_all`, Claude membaca file lagi sebelum mengedit. Penanganan yang santai terhadap file yang belum dibaca dan berubah memerlukan Claude Code v2.1.208 atau lebih baru; sebelum itu, Claude Code menolak edit apa pun ke file yang belum dibacanya dalam percakapan atau yang berubah di disk setelah pembacaan.

289 289 

290Melihat file dengan Bash juga memenuhi persyaratan read-before-edit ketika perintahnya adalah `cat`, `nl`, `bat`, `batcat`, `head`, `tail`, `sed -n 'X,Yp'`, `grep`, `egrep`, `fgrep`, atau `rg` pada satu file tanpa pipa atau pengalihan. Output yang dipipa dan perintah Bash lainnya tidak dihitung terhadap pemeriksaan read-before-edit.290Claude juga dapat mengedit file tanpa Read terpisah setelah melihat file tersebut dengan perintah Bash seperti `cat` atau `grep`. Perintah-perintah tersebut adalah `cat`, `nl`, `bat`, `batcat`, `head`, `tail`, `sed -n 'X,Yp'`, `grep`, `egrep`, `fgrep`, dan `rg`, masing-masing dijalankan pada satu file tanpa pipa atau pengalihan. Pencarian yang tidak menampilkan kecocokan apa pun tidak dihitung sebagai pembacaan, begitu pula perintah apa pun di luar daftar ini.

291 291 

292Ketika Claude melihat file dengan cara ini, Claude Code juga memuat [`CLAUDE.md` subdirektori](/docs/id/memory#how-claude-md-files-load) dan [aturan dengan cakupan jalur](/docs/id/memory#path-specific-rules) apa pun yang berlaku untuk file tersebut. Lihat [Aturan izin Read dan Edit](/docs/id/permissions#read-and-edit) untuk perintah Bash mana yang dicakup oleh aturan deny `Read` dan `Edit` Anda.292Ketika Claude melihat file dengan cara ini, Claude Code juga memuat [`CLAUDE.md` subdirektori](/docs/id/memory#how-claude-md-files-load) dan [aturan dengan cakupan jalur](/docs/id/memory#path-specific-rules) apa pun yang berlaku untuk file tersebut. Lihat [Aturan izin Read dan Edit](/docs/id/permissions#read-and-edit) untuk perintah Bash mana yang dicakup oleh aturan deny `Read` dan `Edit` Anda.

293 293 

294<h3 id="non-utf-8-files">

295 File non-UTF-8

296</h3>

297 

298Claude tidak dapat menggunakan [NotebookEdit](#notebookedit-tool-behavior) pada file yang bukan UTF-8 yang valid. Hal yang sama berlaku untuk Edit, kecuali file diawali dengan byte-order mark UTF-16 little-endian. Ketika Claude mencoba, tool tersebut menolak perubahan dan membiarkan file tidak tersentuh. File yang ditolak mencakup teks non-ASCII yang disimpan dalam encoding lama seperti Windows-1252 atau Shift-JIS, file biner, dan UTF-8 dengan urutan byte yang tidak valid.

299 

300Tool tersebut menolak karena mereka menyimpan kembali seluruh file sebagai UTF-8, yang akan mengganti setiap byte yang tidak dapat didekode dengan karakter pengganti `U+FFFD`. Sebagai gantinya, [error yang diterima Claude](/docs/id/errors#file-is-not-valid-utf-8) memintanya untuk melakukan perubahan dengan perintah shell yang mempertahankan encoding file, atau menanyakan kepada Anda tentang mengonversinya ke UTF-8 terlebih dahulu.

301 

302Claude masih dapat mengganti file semacam itu dengan Write, kecuali konten baru mengandung `U+FFFD`, karakter yang ditampilkan Read kepada Claude sebagai pengganti byte yang tidak dapat didekodenya. Pengaman tersebut mencegah Claude menulis kembali teks rusak yang dibacanya. Ketika Write memang mengganti file, Write menyimpan konten baru sebagai UTF-8, sehingga encoding asli file tersebut hilang.

303 

294<h2 id="endconversation-tool-behavior">304<h2 id="endconversation-tool-behavior">

295 Perilaku tool EndConversation305 Perilaku tool EndConversation

296</h2>306</h2>


455* `insert`: tambahkan sel baru setelah target. Tanpa `cell_id`, sel baru masuk di awal notebook. Memerlukan `cell_type` diatur ke `code` atau `markdown`.465* `insert`: tambahkan sel baru setelah target. Tanpa `cell_id`, sel baru masuk di awal notebook. Memerlukan `cell_type` diatur ke `code` atau `markdown`.

456* `delete`: hapus sel target.466* `delete`: hapus sel target.

457 467 

468NotebookEdit menolak file notebook yang tidak dapat didekode sebagai UTF-8, berdasarkan [aturan yang sama dengan Edit](#non-utf-8-files), dan tidak menulis apa pun.

469 

458Aturan izin menggunakan format path `Edit(...)`. Aturan seperti `Edit(notebooks/**)` mencakup panggilan NotebookEdit pada file dalam direktori itu.470Aturan izin menggunakan format path `Edit(...)`. Aturan seperti `Edit(notebooks/**)` mencakup panggilan NotebookEdit pada file dalam direktori itu.

459 471 

460<h2 id="powershell-tool">472<h2 id="powershell-tool">


514* `"shell": "powershell"` pada [command hooks](/docs/id/hooks#command-hook-fields) individual: menjalankan hook tersebut di PowerShell. Hooks menjalankan PowerShell secara langsung, sehingga ini bekerja terlepas dari `CLAUDE_CODE_USE_POWERSHELL_TOOL`.526* `"shell": "powershell"` pada [command hooks](/docs/id/hooks#command-hook-fields) individual: menjalankan hook tersebut di PowerShell. Hooks menjalankan PowerShell secara langsung, sehingga ini bekerja terlepas dari `CLAUDE_CODE_USE_POWERSHELL_TOOL`.

515* `shell: powershell` dalam [skill frontmatter](/docs/id/skills#frontmatter-reference): menjalankan blok `` !`command` `` di PowerShell. Memerlukan alat PowerShell untuk diaktifkan.527* `shell: powershell` dalam [skill frontmatter](/docs/id/skills#frontmatter-reference): menjalankan blok `` !`command` `` di PowerShell. Memerlukan alat PowerShell untuk diaktifkan.

516 528 

517Perilaku reset direktori kerja sesi utama yang sama yang dijelaskan di bagian alat Bash berlaku untuk perintah PowerShell, termasuk variabel lingkungan `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR`.529Perintah PowerShell mengikuti [perilaku reset direktori kerja sesi utama yang sama](#what-persists-between-commands) seperti perintah Bash, termasuk environment variable `CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR`.

530 

531Perintah PowerShell juga menerima variabel yang dipertahankan oleh hook melalui `CLAUDE_ENV_FILE`, dengan ketentuan yang dijelaskan di [Variabel yang dipertahankan dalam perintah PowerShell](/docs/id/hooks#persisted-variables-in-powershell-commands). Memerlukan Claude Code v2.1.296 atau lebih baru.

518 532 

519Kode keluar 1 dari `grep`, `rg`, `egrep`, `fgrep`, `findstr`, dan `git grep` berarti tidak ada kecocokan. Kode keluar 1 dari `git diff` berarti ada perbedaan. Tidak satu pun dari hasil tersebut dilaporkan ke Claude sebagai kegagalan perintah. Untuk `robocopy`, kode keluar 0 hingga 7 adalah hasil informatif, seperti file yang disalin atau file ekstra yang terdeteksi. Kode keluar 8 atau lebih tinggi dihitung sebagai kegagalan.533Kode keluar 1 dari `grep`, `rg`, `egrep`, `fgrep`, `findstr`, dan `git grep` berarti tidak ada kecocokan. Kode keluar 1 dari `git diff` berarti ada perbedaan. Tidak satu pun dari hasil tersebut dilaporkan ke Claude sebagai kegagalan perintah. Untuk `robocopy`, kode keluar 0 hingga 7 adalah hasil informatif, seperti file yang disalin atau file ekstra yang terdeteksi. Kode keluar 8 atau lebih tinggi dihitung sebagai kegagalan.

520 534 


547 561 

548Alat Read mengambil jalur file dan mengembalikan isinya dengan nomor baris. Claude diinstruksikan untuk selalu melewatkan jalur absolut.562Alat Read mengambil jalur file dan mengembalikan isinya dengan nomor baris. Claude diinstruksikan untuk selalu melewatkan jalur absolut.

549 563 

550Secara default, Read mengembalikan file dari awal. Ketika pembacaan seluruh file melebihi batas token, Read mengembalikan halaman pertama dengan pemberitahuan `PARTIAL view` yang memberi tahu Claude berapa banyak file yang diterima dan cara membaca lebih lanjut dengan `offset` dan `limit`. Pembacaan yang melewatkan `offset` atau `limit` eksplisit dan masih melebihi batas token mengembalikan kesalahan.

551 

552Pembacaan dengan `limit` eksplisit berhenti segera setelah baris yang dipilih melebihi apa yang dapat ditampung batas token dan mengembalikan kesalahan tanpa memuat sisa rentang. Kesalahan memberi tahu Claude untuk menggunakan `limit` yang lebih kecil, atau untuk mencari konten spesifik dengan [Grep](#grep-tool-behavior) sebagai gantinya ketika satu baris sangat besar. Sebelum v2.1.208, Claude Code memuat seluruh rentang ke dalam memori sebelum menolaknya, jadi membaca file dengan satu baris yang sangat panjang dapat menghabiskan memorinya.

553 

554Membaca file kosong mengembalikan pemberitahuan bahwa file ada tetapi isinya kosong, dan `offset` melampaui baris terakhir mengembalikan pemberitahuan yang memberikan jumlah baris file. Sebelum v2.1.208, membaca file kosong mengembalikan pemberitahuan past-the-end sebagai gantinya.564Membaca file kosong mengembalikan pemberitahuan bahwa file ada tetapi isinya kosong, dan `offset` melampaui baris terakhir mengembalikan pemberitahuan yang memberikan jumlah baris file. Sebelum v2.1.208, membaca file kosong mengembalikan pemberitahuan past-the-end sebagai gantinya.

555 565 

556Read menangani beberapa jenis file di luar teks biasa:566Read menangani beberapa jenis file di luar teks biasa:

557 567 

558* **Gambar**: PNG, JPG, dan format gambar lainnya dikembalikan sebagai konten visual yang dapat dilihat Claude, bukan sebagai byte mentah. Claude Code mengubah ukuran dan mengompresi ulang gambar besar agar sesuai dengan batas ukuran gambar model sebelum mengirimkannya, jadi Claude mungkin melihat versi yang diperkecil dari tangkapan layar besar. Gambar yang masih lebih besar dari 500KB setelah pengubahan ukuran tersebut dikodekan ulang sebagai JPEG dengan kualitas berkurang dengan dimensi pikselnya tidak berubah. Jika Claude melewatkan detail tingkat piksel halus dalam gambar besar, minta untuk memotong wilayah yang diminati terlebih dahulu, misalnya dengan ImageMagick melalui Bash.568* **Gambar**: PNG, JPG, dan format gambar lainnya dikembalikan sebagai konten visual yang dapat dilihat Claude, bukan sebagai byte mentah. Claude Code mengubah ukuran dan mengompresi ulang gambar besar agar sesuai dengan batas ukuran gambar model sebelum mengirimkannya, jadi Claude mungkin melihat versi yang diperkecil dari tangkapan layar besar. Gambar yang masih lebih besar dari 500KB setelah pengubahan ukuran tersebut dikodekan ulang sebagai JPEG dengan kualitas berkurang dengan dimensi pikselnya tidak berubah. Jika Claude melewatkan detail tingkat piksel halus dalam gambar besar, minta untuk memotong wilayah yang diminati terlebih dahulu, misalnya dengan ImageMagick melalui Bash.

559* **PDFs**: Claude membaca file `.pdf` pendek secara keseluruhan. Untuk PDF yang lebih panjang dari 10 halaman, file tersebut dibaca dalam rentang dengan parameter `pages`, seperti `"1-5"`, hingga 20 halaman sekaligus. Pembacaan rentang halaman merender halaman dengan `pdftoppm` dari poppler-utils, jadi instal dengan `brew install poppler` di macOS atau `apt-get install poppler-utils` di Debian dan Ubuntu. Di Windows dan platform lainnya, instal build poppler yang menempatkan `pdftoppm` di `PATH` Anda. Tanpa itu, pembacaan rentang halaman gagal dengan `pdftoppm is not installed`.569* **PDFs**: Claude membaca file `.pdf` pendek secara keseluruhan. Untuk PDF yang lebih panjang dari 10 halaman, file tersebut dibaca dalam rentang dengan parameter `pages`, seperti `"1-5"`, hingga 20 halaman sekaligus. Pembacaan rentang halaman merender halaman dengan `pdftoppm` dari poppler-utils, jadi instal dengan `brew install poppler` di macOS atau `apt-get install poppler-utils` di Debian dan Ubuntu. Di Windows dan platform lainnya, instal build poppler yang menempatkan `pdftoppm` di `PATH` Anda. Tanpa itu, pembacaan rentang halaman gagal dengan `pdftoppm is not installed`.

560* **Jupyter notebooks**: File `.ipynb` mengembalikan semua sel dengan keluarannya, termasuk kode, markdown, dan visualisasi. Claude Code menolak untuk membaca file notebook di atas 100 MB; kesalahan memberi tahu Claude cara membaca sebagian dari notebook sebagai gantinya, seperti irisan sel, dengan perintah shell.570* **Jupyter notebooks**: File `.ipynb` mengembalikan semua sel dengan keluarannya, termasuk kode, markdown, dan visualisasi. Notebook yang sel-selnya berjumlah lebih dari 256 KB, atau lebih dari [batas token](#large-files), mengembalikan kesalahan sebagai gantinya. Claude Code menolak untuk membaca file notebook di atas 100 MB; kesalahan memberi tahu Claude cara membaca sebagian dari notebook sebagai gantinya, seperti irisan sel, dengan perintah shell.

561 571 

562Read hanya membaca file, bukan direktori. Claude mencantumkan isi direktori dengan perintah shell seperti `ls`.572Read hanya membaca file, bukan direktori. Claude mencantumkan isi direktori dengan perintah shell seperti `ls`.

563 573 

574<h3 id="large-files">

575 File besar

576</h3>

577 

578Claude dapat membaca file teks yang lebih besar dari yang dikembalikan oleh satu panggilan Read. Secara default, satu panggilan mengembalikan paling banyak 25.000 token, atau nilai yang Anda tetapkan di [`CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS`](/docs/id/env-vars), dan menolak seluruh file di atas 256 KB, sehingga Claude membaca file yang lebih besar per halaman dengan `offset` dan `limit`. Di Claude Code v2.1.296 atau lebih baru, Claude dapat membaca seluruh file, atau rentang baris yang panjang, dalam satu panggilan dengan mengatur `allow_large: true` saat diperlukan, misalnya karena Anda meminta seluruh file. Pembacaan tersebut diukur berdasarkan ruang yang tersisa di [context window](/docs/id/context-window) sesi, bukan batas default. Gambar, PDF, dan notebook tetap mempertahankan batasnya.

579 

580Apa yang diterima Claude ketika pembacaan melebihi batas default:

581 

582* **Seluruh file melebihi batas token**: halaman pertama file, dengan pemberitahuan `PARTIAL view` yang menyebutkan berapa banyak file yang diterima dan cara membaca lebih lanjut dengan `offset` dan `limit`

583* **Seluruh file di atas 256 KB, atau pembacaan dengan `offset` atau `limit` yang melebihi batas token**: kesalahan yang memberi tahu Claude untuk membaca sebagian dengan `offset` dan `limit`, atau untuk mencari konten spesifik dengan [Grep](#grep-tool-behavior) sebagai gantinya

584 

564<h2 id="sendfeedback-tool-behavior">585<h2 id="sendfeedback-tool-behavior">

565 Perilaku alat SendFeedback586 Perilaku alat SendFeedback

566</h2>587</h2>


734 Perilaku tool Write755 Perilaku tool Write

735</h2>756</h2>

736 757 

737Tool Write membuat file baru atau menimpa file yang sudah ada dengan konten lengkap yang disediakan. Tool ini tidak menambahkan atau menggabungkan.758Tool Write membuat file baru atau menimpa file yang sudah ada dengan konten lengkap yang disediakan. Tool ini tidak menambahkan atau menggabungkan. Write juga menimpa file yang sudah ada yang byte-nya tidak dapat didekode dan menyimpan konten baru sebagai UTF-8, seperti yang dijelaskan di [file non-UTF-8](#non-utf-8-files).

738 759 

739Apakah Claude harus membaca file yang sudah ada dalam percakapan saat ini sebelum menimpanya tergantung pada model dan file:760Apakah Claude harus membaca file yang sudah ada dalam percakapan saat ini sebelum menimpanya tergantung pada model dan file:

740 761 

741* Claude Opus 4.6, Claude Haiku 4.5, dan model yang lebih lama selalu memerlukan pembacaan, jadi Write ke file yang sudah ada yang belum dibaca gagal dengan kesalahan.762* Claude Opus 4.6, Claude Haiku 4.5, dan model yang lebih lama selalu memerlukan pembacaan, jadi Write ke file yang sudah ada yang belum dibaca gagal dengan kesalahan.

742* Model yang lebih baru dapat menimpa file yang tidak pernah mereka baca dalam sesi ini di bawah kondisi yang sama seperti [read-before-edit](#edit-tool-behavior): membacanya tidak akan memerlukan prompt izin dan tool Read tersedia.763* Model yang lebih baru dapat menimpa file yang tidak pernah mereka baca dalam sesi ini di bawah kondisi yang sama seperti [read-before-edit](#edit-tool-behavior): membacanya tidak akan memerlukan prompt izin dan tool Read tersedia.

743* Jupyter notebooks, dan file yang Claude baca hanya sebagian dengan pemberitahuan [`PARTIAL view`](#read-tool-behavior), memerlukan pembacaan pada setiap model.764* Jupyter notebooks, dan file yang Claude baca hanya sebagian dengan [pemberitahuan `PARTIAL view`](#large-files), memerlukan pembacaan pada setiap model.

744 765 

745Batasan ini tidak berlaku untuk file baru. Sebelum v2.1.228, setiap model memerlukan pembacaan sebelum menimpa file yang sudah ada.766Batasan ini tidak berlaku untuk file baru. Sebelum v2.1.228, setiap model memerlukan pembacaan sebelum menimpa file yang sudah ada.

746 767 

Details

1212Jika Anda melihat `API Error: 403 Request not allowed` setelah login:1212Jika Anda melihat `API Error: 403 Request not allowed` setelah login:

1213 1213 

1214* **Pengguna Claude Pro/Max**: verifikasi langganan Anda aktif di [claude.ai/settings](https://claude.ai/settings)1214* **Pengguna Claude Pro/Max**: verifikasi langganan Anda aktif di [claude.ai/settings](https://claude.ai/settings)

1215* **Pengguna Anthropic Console**: konfirmasi akun Anda memiliki role "Claude Code" atau "Developer". Admin menetapkan ini di Anthropic Console di bawah Settings → Members.1215* **Pengguna Anthropic Console**: konfirmasi akun Anda memiliki role "Claude Code" atau "Developer". Admin menetapkan ini di halaman Members pada Console di [platform.claude.com/settings/members](https://platform.claude.com/settings/members).

1216* **Di belakang proxy**: proxy perusahaan dapat mengganggu permintaan API. Lihat [konfigurasi jaringan](/docs/id/network-config) untuk setup proxy.1216* **Di belakang proxy**: proxy perusahaan dapat mengganggu permintaan API. Lihat [konfigurasi jaringan](/docs/id/network-config) untuk setup proxy.

1217 1217 

1218<h3 id="claude-code-access-has-not-been-granted-for-this-account">1218<h3 id="claude-code-access-has-not-been-granted-for-this-account">

vs-code.md +3 −2

Details

237 237 

238Untuk memulihkan sesi yang diarsipkan, perluas **Archived sessions** dan klik **Unarchive session**. Untuk memulihkan setiap sesi yang diarsipkan sekaligus, arahkan kursor ke header **Archived sessions** dalam daftar sesi di Activity Bar dan klik ikon unarchive-nya, yang memerlukan Claude Code v2.1.277 atau lebih baru. Sebelum v2.1.257, tindakannya adalah **Delete session**, yang menyembunyikan sesi tanpa cara untuk memulihkannya. Sesi yang Anda hapus kemudian muncul di bawah **Archived sessions** setelah Anda upgrade.238Untuk memulihkan sesi yang diarsipkan, perluas **Archived sessions** dan klik **Unarchive session**. Untuk memulihkan setiap sesi yang diarsipkan sekaligus, arahkan kursor ke header **Archived sessions** dalam daftar sesi di Activity Bar dan klik ikon unarchive-nya, yang memerlukan Claude Code v2.1.277 atau lebih baru. Sebelum v2.1.257, tindakannya adalah **Delete session**, yang menyembunyikan sesi tanpa cara untuk memulihkannya. Sesi yang Anda hapus kemudian muncul di bawah **Archived sessions** setelah Anda upgrade.

239 239 

240Ketika percakapan yang Anda lanjutkan berakhir dalam plan mode, Claude Code memulihkan plan mode. Memerlukan Claude Code v2.1.246 atau lebih baru. Claude Code tidak memulihkannya dalam dua kasus:240Ketika percakapan yang Anda lanjutkan berakhir dalam plan mode, Claude Code memulihkan plan mode. Memerlukan Claude Code v2.1.246 atau lebih baru. Claude Code tidak memulihkannya dalam kasus-kasus berikut:

241 241 

242* Ekstensi [memilih mode izin awal](/docs/id/permission-modes#switch-permission-modes) dari `claudeCode.initialPermissionMode` atau pilihan yang dibawa dari percakapan sebelumnya242* Ekstensi [memilih mode izin awal](/docs/id/permission-modes#switch-permission-modes) dari `claudeCode.initialPermissionMode` atau pilihan yang dibawa dari percakapan sebelumnya

243* Anda memiliki `claudeCode.claudeProcessWrapper` yang dikonfigurasi243* Anda memiliki `claudeCode.claudeProcessWrapper` yang dikonfigurasi

244* Sebuah [aturan deny](/docs/id/permissions#manage-permissions) menghapus tool [`ExitPlanMode`](/docs/id/tools-reference)

244 245 

245<h3 id="resume-cloud-sessions-from-claude-ai">246<h3 id="resume-cloud-sessions-from-claude-ai">

246 Lanjutkan sesi cloud dari Claude.ai247 Lanjutkan sesi cloud dari Claude.ai


479 480 

480Claude membuka tab baru untuk tugas browser dan berbagi status login browser Anda, sehingga dapat mengakses situs apa pun yang sudah Anda masuki.481Claude membuka tab baru untuk tugas browser dan berbagi status login browser Anda, sehingga dapat mengakses situs apa pun yang sudah Anda masuki.

481 482 

482Agar setiap sesi terhubung ke browser Anda saat dimulai, tanpa mengetik `@browser`, lihat [Aktifkan Chrome secara default](/docs/id/chrome#enable-chrome-by-default). Untuk situasi ketika Claude Code meminta persetujuan Anda sebelum tindakan browser dalam sesi yang terhubung dengan cara tersebut, lihat [Permintaan izin dalam sesi VS Code](/docs/id/chrome#permission-prompts-in-vs-code-sessions).483Agar setiap sesi terhubung ke browser Anda saat dimulai, tanpa mengetik `@browser`, lihat [Aktifkan Chrome secara default](/docs/id/chrome#enable-chrome-by-default). Untuk situasi ketika Claude Code meminta persetujuan Anda sebelum tindakan browser, lihat [Permintaan izin dalam sesi VS Code](/docs/id/chrome#permission-prompts-in-vs-code-sessions).

483 484 

484Untuk petunjuk penyiapan, daftar lengkap kemampuan, dan pemecahan masalah, lihat [Gunakan Claude Code dengan Chrome](/docs/id/chrome).485Untuk petunjuk penyiapan, daftar lengkap kemampuan, dan pemecahan masalah, lihat [Gunakan Claude Code dengan Chrome](/docs/id/chrome).

485 486 

workflows.md +1 −1

Details

511* Periksa `/model` sebelum run besar jika Anda biasanya beralih ke model yang lebih kecil untuk pekerjaan rutin511* Periksa `/model` sebelum run besar jika Anda biasanya beralih ke model yang lebih kecil untuk pekerjaan rutin

512* Minta Claude untuk menggunakan model yang lebih kecil untuk tahap yang tidak memerlukan yang terkuat saat Anda menjelaskan tugas512* Minta Claude untuk menggunakan model yang lebih kecil untuk tahap yang tidak memerlukan yang terkuat saat Anda menjelaskan tugas

513 513 

514Ketika [`availableModels` allowlist](/docs/id/model-config#restrict-model-selection) organisasi Anda memblokir model yang diminta skrip untuk agen, agen itu berjalan pada model substitusi sebagai gantinya, mengikuti [aturan substitusi yang sama seperti subagen](/docs/id/sub-agents#choose-a-model). Tampilan kemajuan run di [`/workflows`](#watch-the-run) menampilkan peringatan yang menamai model yang diminta dan disubstitusi.514Ketika [`availableModels` allowlist](/docs/id/model-config#restrict-model-selection) organisasi Anda memblokir model yang diminta skrip untuk agent, agent itu berjalan pada model pengganti, mengikuti [aturan substitusi yang sama seperti subagent](/docs/id/sub-agents#choose-a-model).

515 515 

516<h3 id="set-a-size-guideline">516<h3 id="set-a-size-guideline">

517 Tetapkan panduan ukuran517 Tetapkan panduan ukuran

worktrees.md +3 −1

Details

268 268 

269 Pembacaan yang sama mencakup `.claude/agents` dan `.claude/commands`. Untuk skills, pembacaan memerlukan Claude Code v2.1.277 atau lebih baru.269 Pembacaan yang sama mencakup `.claude/agents` dan `.claude/commands`. Untuk skills, pembacaan memerlukan Claude Code v2.1.277 atau lebih baru.

270 270 

271Semua ini berlaku apakah Anda membuat worktree dengan `--worktree`, dengan `git worktree add`, atau melalui [aplikasi desktop](/docs/id/desktop#work-in-parallel-with-sessions).271Semua ini berlaku baik Anda membuat worktree dengan `--worktree` maupun dengan `git worktree add`.

272 

273Dalam sesi worktree yang Anda mulai dari [aplikasi desktop](/docs/id/desktop#work-in-parallel-with-sessions), Claude Code membaca konfigurasi proyek seperti pengaturan, hook, skill, agent, perintah, dan server [`.mcp.json`](/docs/id/mcp#project-scope) dari root checkout utama, bukan dari worktree. Perintah hook dijalankan di root tersebut, dan `${CLAUDE_PROJECT_DIR}` menunjuk ke sana. Untuk menjangkau file yang sedang dikerjakan Claude, baca path worktree dari [kolom input `cwd`](/docs/id/hooks#common-input-fields) milik hook. File `CLAUDE.md` dan `.claude/rules/` tetap dimuat dari worktree.

272 274 

273<h2 id="manage-worktrees-manually">275<h2 id="manage-worktrees-manually">

274 Kelola worktrees secara manual276 Kelola worktrees secara manual