SpyBara
Go Premium

Documentation 2026-10-23 22:59 UTC to 2026-10-24 22:59 UTC

31 files changed +678 −101. View all changes and history on the product overview
2026
Fri 30 23:01 Thu 29 23:57 Wed 28 23:57 Tue 27 22:59 Mon 26 22:57 Sun 25 23:58 Sat 24 22:59 Fri 23 22:59 Thu 22 22:58 Wed 21 23:02 Tue 20 23:00 Mon 19 23:58 Sat 17 23:57 Fri 16 22:59 Thu 15 23:58 Wed 14 22:58 Tue 13 23:57 Sun 11 23:57 Sat 10 23:01 Fri 9 23:02 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59

artifacts.md +1 −3

Details

340 340 

341Claude Docs mencapai Claude Code sebagai [konektor](https://code.claude.com/docs/id/mcp.md#use-mcp-servers-from-claude-ai) claude.ai daripada perintah. Ketika terhubung, `/mcp` mencantumnya sebagai `claude.ai Claude Docs`. Permintaan untuk dokumen yang dimaksudkan untuk orang lain kemudian pergi ke Claude Docs alih-alih halaman artefak: spesifikasi, proposal, atau penulisan rencana yang Anda kerjakan melalui sesi. Claude memberikan Anda tautan dokumen ketika sudah dibuat draf.341Claude Docs mencapai Claude Code sebagai [konektor](https://code.claude.com/docs/id/mcp.md#use-mcp-servers-from-claude-ai) claude.ai daripada perintah. Ketika terhubung, `/mcp` mencantumnya sebagai `claude.ai Claude Docs`. Permintaan untuk dokumen yang dimaksudkan untuk orang lain kemudian pergi ke Claude Docs alih-alih halaman artefak: spesifikasi, proposal, atau penulisan rencana yang Anda kerjakan melalui sesi. Claude memberikan Anda tautan dokumen ketika sudah dibuat draf.

342 342 

343Dokumen yang termasuk dalam basis kode, seperti README, tetap menjadi file. Untuk mendapatkan file untuk sesuatu yang Claude akan menempatkan di Claude Docs, namai formatnya, seperti `.docx` atau file Markdown di repositori.343Dokumen yang termasuk dalam codebase, seperti README, tetap menjadi file. Untuk mendapatkan file untuk sesuatu yang Claude akan menempatkan di Claude Docs, namai formatnya, seperti `.docx` atau file Markdown di repositori. Untuk mematikan hanya konektor `claude.ai Claude Docs`, lihat [Nonaktifkan konektor claude.ai](https://code.claude.com/docs/id/mcp.md#disable-claude-ai-connectors).

344 

345Untuk mematikan konektor, tambahkan `claude.ai Claude Docs` ke `deniedMcpServers` atau gunakan toggle `/mcp`, keduanya dijelaskan dalam [Nonaktifkan konektor claude.ai](https://code.claude.com/docs/id/mcp.md#disable-claude-ai-connectors).

346 344 

347## Batasan halaman345## Batasan halaman

348 346 

Details

458 458 

459#### Cara kunci hook dan skill dalam pengaturan induk berlaku459#### Cara kunci hook dan skill dalam pengaturan induk berlaku

460 460 

461Jika Anda meneruskan `disableAllHooks: true` sebagai pengaturan induk melalui opsi `managedSettings` milik Agent SDK, tidak semua hook berhenti. [Callback hook SDK](https://code.claude.com/docs/id/agent-sdk/hooks.md) Anda tetap berjalan, begitu pula hook milik administrator, yang tidak dapat dimatikan oleh aplikasi Anda.461Kunci yang diteruskan aplikasi Anda dalam opsi [`managedSettings`](https://code.claude.com/docs/id/agent-sdk/typescript#options) milik Agent SDK adalah pengaturan induk. Pada mesin tempat administrator men-deploy pengaturan terkelola, Claude Code mengabaikan pengaturan induk kecuali administrator [mengizinkan host penyemat menambahkan kebijakan](https://code.claude.com/docs/id/managed-settings.md#let-an-embedding-host-add-policy).

462 462 

463Pada mesin tempat administrator men-deploy pengaturan terkelola, Claude Code mengabaikan pengaturan induk kecuali administrator [mengizinkan host penyemat menambahkan kebijakan](https://code.claude.com/docs/id/managed-settings.md#let-an-embedding-host-add-policy).463Jika Anda meneruskan [`disableAllHooks: true`](https://code.claude.com/docs/id/settings-reference#disableallhooks) di `managedSettings`:

464 

465* **Berhenti**: hook pengguna, proyek, dan lokal, ditambah hook yang dideklarasikan di frontmatter agent atau di [opsi `settings`](https://code.claude.com/docs/id/agent-sdk/typescript#options) milik SDK.

466* **Tetap berjalan**: [callback hook SDK](https://code.claude.com/docs/id/agent-sdk/hooks.md) milik aplikasi Anda dan hook administrator dari pengaturan terkelola. Aplikasi Anda tidak dapat mematikan hook milik administrator.

464 467 

465| Apa yang Anda teruskan | Apa yang terjadi |468| Apa yang Anda teruskan | Apa yang terjadi |

466| :- | :- |469| :- | :- |

467| `disableAllHooks: true` | Diperlakukan sebagai `allowManagedHooksOnly: true`, sehingga hook yang tercantum sebagai [diblokir di bawah `allowManagedHooksOnly`](https://code.claude.com/docs/id/settings-reference#what-runs-under-allowmanagedhooksonly) berhenti, begitu pula hook di [opsi `settings`](https://code.claude.com/docs/id/agent-sdk/typescript#options) milik SDK. |470| `hooks`, atau `allowedHttpHookUrls` atau `httpHookAllowedEnvVars` dengan entri | Claude Code mengabaikan kunci tersebut. Gunakan opsi `settings` SDK sebagai gantinya. |

468| [`disableSkillShellExecution: true`](https://code.claude.com/docs/id/settings-reference#disableskillshellexecution) | Berlaku. |

469| `allowedHttpHookUrls: []` | Berlaku kecuali administrator mendefinisikan `hooks` atau mengaktifkan plugin. Tidak ada hook HTTP yang berjalan, kecuali untuk URL yang dicantumkan sumber pengaturan lain. |471| `allowedHttpHookUrls: []` | Berlaku kecuali administrator mendefinisikan `hooks` atau mengaktifkan plugin. Tidak ada hook HTTP yang berjalan, kecuali untuk URL yang dicantumkan sumber pengaturan lain. |

470| `httpHookAllowedEnvVars: []` | Berlaku kecuali administrator mendefinisikan `hooks` atau mengaktifkan plugin. Header hook HTTP hanya dapat menyertakan environment variable yang dicantumkan sumber pengaturan lain. |472| `httpHookAllowedEnvVars: []` | Berlaku kecuali administrator mendefinisikan `hooks` atau mengaktifkan plugin. Header hook HTTP hanya dapat menyertakan environment variable yang dicantumkan sumber pengaturan lain. |

471| `allowedHttpHookUrls` atau `httpHookAllowedEnvVars` dengan entri | Claude Code mengabaikannya, karena penggabungan akan memperluas daftar administrator. Gunakan opsi `settings` SDK sebagai gantinya. |473| [`disableSkillShellExecution: true`](https://code.claude.com/docs/id/settings-reference#disableskillshellexecution) | Berlaku. |

472 474 

473Meneruskan kunci-kunci ini di `managedSettings` memerlukan Claude Code v2.1.309 atau yang lebih baru, atau TypeScript Agent SDK v0.3.309 atau yang lebih baru.475Meneruskan kunci-kunci ini di `managedSettings` memerlukan Claude Code v2.1.309 atau yang lebih baru, atau TypeScript Agent SDK v0.3.309 atau yang lebih baru.

474 476 

Details

8 8 

9> [!NOTE]9> [!NOTE]

10>10>

11> Sesi cloud tersedia pada paket Pro, Max, dan Team, serta untuk pengguna Enterprise dengan kursi premium atau kursi Chat + Claude Code. Jika organisasi Enterprise Anda mengelola akses Anda dengan [peran kustom](https://support.claude.com/en/articles/13930452), Anda juga memerlukan peran yang mencakup izin sesi cloud. Minta Owner untuk memeriksa peran Anda dan menambahkannya di [**Organization settings > Roles**](https://claude.ai/admin-settings/roles) jika belum ada.11> Sesi cloud tersedia pada paket Pro, Max, dan Team, serta untuk pengguna Enterprise dengan kursi premium atau kursi Chat + Claude Code. Jika [peran kustom](https://support.claude.com/en/articles/13930452) mengatur akses Anda, Anda juga memerlukan peran dengan izin sesi cloud untuk memulai sesi pada infrastruktur Anthropic dari browser, aplikasi, atau terminal. Minta Owner untuk menambahkannya ke salah satu peran Anda di [**Organization settings > Roles**](https://claude.ai/admin-settings/roles).

12 12 

13Sesi cloud adalah sesi Claude Code yang berjalan pada infrastruktur cloud alih-alih pada mesin Anda. Secara default, sesi berjalan pada infrastruktur yang dikelola Anthropic, atau pada [lingkungan self-hosted](https://code.claude.com/docs/id/self-hosted-environments) organisasi Anda saat dialihkan ke sana. Sesi terus berjalan setelah Anda menutup laptop, dan Anda dapat memeriksanya atau mengarahkannya dari perangkat apa pun. Sesi ini dihitung dalam batas penggunaan paket Anda bersama dengan penggunaan Claude dan Claude Code Anda lainnya, dan tidak ada biaya terpisah untuk VM cloud.13Sesi cloud adalah sesi Claude Code yang berjalan pada infrastruktur cloud alih-alih pada mesin Anda. Secara default, sesi berjalan pada infrastruktur yang dikelola Anthropic, atau pada [lingkungan self-hosted](https://code.claude.com/docs/id/self-hosted-environments) organisasi Anda saat dialihkan ke sana. Sesi terus berjalan setelah Anda menutup laptop, dan Anda dapat memeriksanya atau mengarahkannya dari perangkat apa pun. Sesi ini dihitung dalam batas penggunaan paket Anda bersama dengan penggunaan Claude dan Claude Code Anda lainnya, dan tidak ada biaya terpisah untuk VM cloud.

14 14 

Details

109 109 

110#### Tambahkan rahasia110#### Tambahkan rahasia

111 111 

112Anda menambahkan rahasia satu per satu, dan Anda tidak dapat mengedit rahasia setelah menambahkannya. Untuk mengubah host atau nilai rahasia, hapus dan tambahkan lagi.112Anda menambahkan rahasia satu per satu. Untuk mengubah host atau nilai rahasia, hapus dan tambahkan lagi.

113 113 

114Untuk menambahkan rahasia ke [lingkungan bersama](#organization-shared-environments), buka lingkungan tersebut untuk diedit dari halaman **Cloud environments** di [pengaturan admin](https://claude.ai/admin-settings), lalu lanjutkan dari langkah 2 di bagian **Network secrets**-nya. Jika Anda menggunakan paket Team dan tidak memegang [peran admin organisasi](#requirements), ikuti langkah 1 di lingkungan Anda sendiri, lalu [isi formulir yang lebih singkat](#add-a-secret-without-the-role).114Untuk menambahkan rahasia ke [lingkungan bersama](#organization-shared-environments), buka lingkungan tersebut untuk diedit dari halaman **Cloud environments** di [pengaturan admin](https://claude.ai/admin-settings), lalu lanjutkan dari langkah 2 di bagian **Network secrets**-nya. Jika Anda menggunakan paket Team dan tidak memegang [peran admin organisasi](#requirements), ikuti langkah 1 di lingkungan Anda sendiri, lalu [isi formulir yang lebih singkat](#add-a-secret-without-the-role).

115 115 


119 119 

120**2. Tambahkan rahasia**120**2. Tambahkan rahasia**

121 121 

122Pilih **Add secret** dan isi formulir. Pertahankan **Secret type** default, **Bearer**, untuk kunci API yang berjalan di header permintaan, dan isi bidang ini:122Pilih **Add secret**, yang berlabel **Add** di pengaturan admin, dan isi formulir. Pertahankan **Secret type** default, **Bearer**, untuk kunci API yang berjalan di header permintaan, dan isi bidang ini:

123 123 

124* **Name**: label untuk rahasia, seperti `Internal billing API`124* **Name**: label untuk rahasia, seperti `Internal billing API`

125* **Allowed websites**: host API, seperti `api.example.com`. `*.` di depan cocok dengan setiap subdomain125* **Allowed websites**: host API, seperti `api.example.com`. `*.` di depan cocok dengan setiap subdomain


443 443 

444### Persyaratan skrip444### Persyaratan skrip

445 445 

446Skrip setup memiliki tiga batasan untuk ditulis:446Skrip setup memiliki empat batasan untuk ditulis:

447 447 

448* **Exit zero**: jika skrip keluar non-zero, sesi gagal dimulai. Tambahkan `|| true` ke perintah non-kritis sehingga kegagalan instalasi sesekali tidak memblokir sesi.448* **Exit zero**: jika skrip keluar non-zero, sesi gagal dimulai. Tambahkan `|| true` ke perintah non-kritis sehingga kegagalan instalasi sesekali tidak memblokir sesi.

449* **Selesai dalam lima menit**: jaga runtime total skrip di bawah kira-kira lima menit sehingga [cache lingkungan](#environment-caching) dapat dibangun. Ketika setup memakan waktu lebih lama dari itu, lingkungan tidak di-cache. Jalankan instalasi independen secara paralel dengan `&` dan `wait`, dan pindahkan unduhan tunggal apa pun yang tidak cocok ke [hook SessionStart](#setup-scripts-vs-sessionstart-hooks) yang meluncurkannya di latar belakang. Jika sesi baru macet atau gagal selama setup, lihat [New sessions hang or time out during setup](https://code.claude.com/docs/id/web-quickstart.md#new-sessions-hang-or-time-out-during-setup).449* **Selesai dalam lima menit**: jaga runtime total skrip di bawah kira-kira lima menit sehingga [cache lingkungan](#environment-caching) dapat dibangun. Ketika setup memakan waktu lebih lama dari itu, lingkungan tidak di-cache. Jalankan instalasi independen secara paralel dengan `&` dan `wait`, dan pindahkan unduhan tunggal apa pun yang tidak cocok ke [hook SessionStart](#setup-scripts-vs-sessionstart-hooks) yang meluncurkannya di latar belakang. Jika sesi baru macet atau gagal selama setup, lihat [New sessions hang or time out during setup](https://code.claude.com/docs/id/web-quickstart.md#new-sessions-hang-or-time-out-during-setup).

450* **Akses jaringan untuk instalasi**: instalasi paket perlu menjangkau registri. Tingkat **Trusted** default mencakup [registri paket umum](#default-allowed-domains) termasuk npm, PyPI, RubyGems, dan crates.io; dengan akses jaringan **None**, instalasi gagal.450* **Akses jaringan untuk instalasi**: instalasi paket perlu menjangkau registri. Tingkat **Trusted** default mencakup [registri paket umum](#default-allowed-domains) termasuk npm, PyPI, RubyGems, dan crates.io; dengan akses jaringan **None**, instalasi gagal.

451* **Variabel lingkungan belum diatur**: skrip berjalan sebelum sesi mengatur [environment variable](#set-environment-variables) lingkungan. Atur nilai apa pun yang dibutuhkan skrip di dalam skrip itu sendiri.

451 452 

452### Caching lingkungan453### Caching lingkungan

453 454 

Details

123 123 

124Ketika review tidak menerapkan file yang disertakan, periksa masing-masing hal berikut:124Ketika review tidak menerapkan file yang disertakan, periksa masing-masing hal berikut:

125 125 

126* **Lokasi**: pindahkan file ke root repositori. Path ke subdirektori seperti `@docs/review-rules.md` tidak disertakan.126* **Lokasi**: pindahkan file ke root repositori. Kecuali untuk [file skill](#include-a-skill-file), path ke subdirektori seperti `@docs/review-rules.md` tidak disertakan.

127* **Nama**: cocokkan nama file secara persis, termasuk huruf besar-kecil, dan gunakan nama tanpa spasi. Baris yang namanya tidak cocok dengan file apa pun di samping `REVIEW.md` tetap berada di `REVIEW.md` sebagai teks biasa, dan check run tidak melaporkannya sebagai penyertaan yang dilewati.127* **Nama**: cocokkan nama file secara persis, termasuk huruf besar-kecil, dan gunakan nama tanpa spasi. Baris yang namanya tidak cocok dengan file apa pun di samping `REVIEW.md` tetap berada di `REVIEW.md` sebagai teks biasa, dan check run tidak melaporkannya sebagai penyertaan yang dilewati.

128* **Satu tingkat**: cantumkan setiap file di `REVIEW.md` root. Baris `@` di file yang disertakan atau di `REVIEW.md` subdirektori tetap sebagai teks biasa, dan tautan Markdown ke file lain bukan merupakan penyertaan.128* **Satu tingkat**: cantumkan setiap file di `REVIEW.md` root. Baris `@` di file yang disertakan atau di `REVIEW.md` subdirektori tetap sebagai teks biasa ([file skill berbeda](#include-a-skill-file)), dan tautan Markdown ke file lain bukan merupakan penyertaan.

129* **Batas**: sertakan paling banyak delapan file berbeda, dan jaga agar `REVIEW.md` beserta file yang disertakannya di bawah 150.000 byte secara keseluruhan. File yang akan mencapai batas byte dilewati seluruhnya, bukan dipotong. Check run melaporkan berapa banyak baris penyertaan yang dilewati karena salah satu batas tersebut.129* **Batas**: sertakan paling banyak delapan file berbeda, dan jaga agar `REVIEW.md` beserta file yang disertakannya di bawah 150.000 byte secara keseluruhan. File yang akan mencapai batas byte dilewati seluruhnya, bukan dipotong. Check run melaporkan berapa banyak baris penyertaan yang dilewati karena salah satu batas tersebut.

130* **Tautan**: jaga agar tautan Markdown berjumlah 64 atau kurang di seluruh `REVIEW.md` dan file yang disertakannya. Tautan ke alamat `http`, `https`, atau `mailto` dan ke anchor `#` tidak dihitung. Melewati batas tersebut, review melewati seluruh `REVIEW.md` root Anda, bukan hanya file yang disertakan. Check run kemudian [menyatakan bahwa instruksi tidak diterapkan](https://code.claude.com/docs/id/code-review-troubleshooting.md#the-check-run-mentions-review-md).130* **Tautan**: jaga agar tautan Markdown berjumlah 64 atau kurang di seluruh `REVIEW.md` dan file yang disertakannya. Tautan ke alamat `http`, `https`, atau `mailto` dan ke anchor `#` tidak dihitung, begitu pula tautan di [file skill](#include-a-skill-file). Melewati batas tersebut, review melewati seluruh `REVIEW.md` root Anda, bukan hanya file yang disertakan. Check run kemudian [menyatakan bahwa instruksi tidak diterapkan](https://code.claude.com/docs/id/code-review-troubleshooting.md#the-check-run-mentions-review-md).

131* **Salinan yang di-merge**: merge file yang disertakan ke [branch tempat `REVIEW.md` dibaca](#which-branch-review-md-is-read-from). Review membaca keduanya dari commit yang sama, tidak pernah dari perubahan pull request itu sendiri.131* **Salinan yang di-merge**: merge file yang disertakan ke [branch tempat `REVIEW.md` dibaca](#which-branch-review-md-is-read-from). Review membaca keduanya dari commit yang sama, tidak pernah dari perubahan pull request itu sendiri.

132 132 

133### Sertakan file skill

134 

135Agar review mengikuti panduan yang Anda simpan di sebuah [skill](https://code.claude.com/docs/id/skills.md), sertakan `SKILL.md` milik skill tersebut di `REVIEW.md` root Anda. Code Review tidak menjalankan skill.

136 

137Tambahkan `@` dan path ke `SKILL.md`, dalam bentuk `.claude/skills/<folder>/SKILL.md`, pada barisnya sendiri:

138 

139```markdown theme={null}

140# Review instructions

141 

142Report at most five Nits per review.

143 

144@.claude/skills/api-review/SKILL.md

145 

146Treat any change under `migrations/` as Important.

147```

148 

149Lindungi [branch tempat `REVIEW.md` dibaca](#which-branch-review-md-is-read-from), karena Code Review menyertakan file skill hanya ketika membaca `REVIEW.md` dari branch yang dilindungi. File skill dihitung terhadap batas delapan file dan 150.000 byte, serta memiliki batasnya sendiri sebesar 30.000 byte.

150 

151#### Tulis baris skill yang disertakan oleh Code Review

152 

153Gunakan nama folder tanpa spasi. Baris dengan spasi di path-nya tetap berada di `REVIEW.md` sebagai teks biasa, dan check run tidak melaporkannya sebagai penyertaan yang dilewati.

154 

155Jika baris `@` untuk sebuah skill melanggar salah satu aturan di bawah, Code Review tidak menyertakan skill dari baris tersebut:

156 

157* **Path**: tulis path sebagai `.claude/skills/<folder>/SKILL.md` dari root repositori, dengan folder skill langsung di bawah `skills/`. Tidak seperti nama file di root, path dengan bentuk ini yang tidak cocok dengan file apa pun akan dilewati dan dihitung.

158* **Sumber**: salin panduan dari file lain di bawah `.claude/`, atau dari [skill bawaan, pribadi, atau plugin](https://code.claude.com/docs/id/skills.md#where-skills-live), ke dalam file di samping `REVIEW.md`. Anda tidak dapat menyertakannya secara langsung.

159* **File**: lakukan commit `SKILL.md` sebagai file teks biasa. Code Review tidak mengikuti tautan simbolik, baik tautan itu berupa file maupun folder di path-nya.

160* **Ukuran**: jaga `SKILL.md` pada 30.000 byte atau kurang, termasuk frontmatter

161* **Jumlah**: tulis paling banyak delapan baris skill. Baris yang berulang dihitung lagi terhadap delapan tersebut.

162* **Blok di `REVIEW.md`**: jaga baris `@` di luar code fence. Tutup setiap komentar HTML dan setiap blok `<pre>`, `<script>`, `<style>`, atau `<textarea>` di atasnya.

163 

164Ketika Code Review melewati baris skill karena melanggar aturan File, Ukuran, Jumlah, atau Blok, [pesan check run tentang baris penyertaan yang dilewati](https://code.claude.com/docs/id/code-review-troubleshooting.md#the-check-run-mentions-review-md) menghitungnya. Pesan tersebut hanya muncul ketika review menerapkan `REVIEW.md` dari branch yang dilindungi.

165 

166#### Periksa apa yang didapat review dari skill

167 

168Ketika skill disertakan, review mendapatkan isi `SKILL.md` dan tidak ada hal lain dari skill tersebut, jadi periksa skill terhadap daftar di bawah.

169 

170* **Frontmatter**: ulangi di bagian isi apa pun yang dibutuhkan review dari [frontmatter](https://code.claude.com/docs/id/skills.md#frontmatter-reference), misalnya kondisi yang diberikan `description` untuk menggunakan skill

171* **Perintah yang disisipkan**: tuliskan apa yang akan diberikan oleh [perintah `!`](https://code.claude.com/docs/id/skills#inject-dynamic-context). Code Review tidak menjalankan perintah tersebut, dan mengganti seluruh baris atau blok yang memuatnya dengan placeholder.

172* **Substitusi**: ganti `$ARGUMENTS` dan [substitusi](https://code.claude.com/docs/id/skills.md#available-string-substitutions) lainnya dengan teks tetap, karena review tidak meneruskan argumen dan membiarkannya sebagaimana tertulis

173* **File pendukung**: salin apa yang dibutuhkan review ke dalam `SKILL.md`, karena Code Review tidak memuat skrip, file yang ditautkan, atau referensi `@file`

174* **Pengecualian dan batas Nit**: tulis instruksi yang mengecualikan temuan atau membatasi Nit di `REVIEW.md` atau file di sampingnya, bukan di skill. Code Review tidak menerima teks skill sebagai alasan untuk keduanya.

175* **Tautan ke file repositori**: nyatakan dengan kata-kata apa yang dirujuk oleh tautan atau referensi `@file`. Review melihat path sebagai teks biasa atau sebagai placeholder.

176 

177Jika Anda mengedit perintah `!`, `$ARGUMENTS`, atau tautan di skill, Anda juga mengubah cara kerjanya di Claude Code. Jika tim Anda mengandalkan hal-hal tersebut, salin panduan ke dalam file di samping `REVIEW.md` dan sertakan file itu sebagai pengganti skill.

178 

179#### Karakter yang diubah Code Review dalam teks skill

180 

181Code Review mengubah beberapa karakter dalam teks skill, sehingga contoh kode Anda sampai ke review dalam bentuk di bawah.

182 

183```text theme={null}

184In SKILL.md: Use `items[0]`, never `List<String>`.

185The review reads: Use ˋitems(0)ˋ, never ˋList< String>ˋ.

186 

187In SKILL.md: Run `ps | grep api` and ask @alice.

188The review reads: Run ˋps ¦ grep apiˋ and ask @ alice.

189```

190 

191Jika suatu aturan bergantung pada salah satu karakter tersebut, nyatakan juga dengan kata-kata.

192 

133### Dari branch mana REVIEW\.md dibaca193### Dari branch mana REVIEW\.md dibaca

134 194 

135Code Review membaca `REVIEW.md` dari base branch pull request atau dari default branch, tidak pernah dari perubahan pull request itu sendiri. Untuk mengubah perilaku review, merge perubahan `REVIEW.md` terlebih dahulu.195Code Review membaca `REVIEW.md` dari base branch pull request atau dari default branch, tidak pernah dari perubahan pull request itu sendiri. Untuk mengubah perilaku review, merge perubahan `REVIEW.md` terlebih dahulu.


140* Mengecualikan path, file, atau kelas masalah200* Mengecualikan path, file, atau kelas masalah

141* Membatasi komentar nit201* Membatasi komentar nit

142 202 

203Tulis pengecualian dan batas Nit di `REVIEW.md` atau file di sampingnya, bukan di [skill yang disertakan](#include-a-skill-file).

204 

143#### Apa yang dihitung sebagai perlindungan branch205#### Apa yang dihitung sebagai perlindungan branch

144 206 

145Code Review menghitung pengaturan berikut sebagai perlindungan:207Code Review menghitung pengaturan berikut sebagai perlindungan:

Details

67 67 

68## Check run menyebutkan REVIEW\.md68## Check run menyebutkan REVIEW\.md

69 69 

70Berikut adalah tiga dari pesan yang dapat dimuat check run tentang `REVIEW.md`:70Berikut adalah empat dari pesan yang dapat dimuat check run tentang `REVIEW.md`:

71 71 

72* **"This review applied the repository's review instructions (REVIEW\.md) from its default branch, which is not protected against direct pushes."**: review hanya membaca file root. Lihat [Dari branch mana REVIEW.md dibaca](https://code.claude.com/docs/id/code-review-customize.md#which-branch-review-md-is-read-from) untuk mengetahui apa yang berubah dengan memproteksi branch tersebut.72* **"This review applied the repository's review instructions (REVIEW\.md) from its default branch, which is not protected against direct pushes."**: review hanya membaca file root. Lihat [Dari branch mana REVIEW.md dibaca](https://code.claude.com/docs/id/code-review-customize.md#which-branch-review-md-is-read-from) untuk mengetahui apa yang berubah dengan memproteksi branch tersebut.

73* **"were not applied to this review: branch protection could not be confirmed"**: review tidak membaca `REVIEW.md` apa pun.73* **"were not applied to this review: branch protection could not be confirmed"**: review tidak membaca `REVIEW.md` apa pun.


75 * **Terlalu banyak tautan**: file memuat lebih dari 64 tautan Markdown. Kurangi tautan menjadi [64 atau kurang](https://code.claude.com/docs/id/code-review-customize.md#include-other-files-in-review-md).75 * **Terlalu banyak tautan**: file memuat lebih dari 64 tautan Markdown. Kurangi tautan menjadi [64 atau kurang](https://code.claude.com/docs/id/code-review-customize.md#include-other-files-in-review-md).

76 * **Tautan yang tidak dapat diurai oleh review**: file memiliki tautan Markdown yang formatnya salah. Perbaiki atau hapus tautan tersebut.76 * **Tautan yang tidak dapat diurai oleh review**: file memiliki tautan Markdown yang formatnya salah. Perbaiki atau hapus tautan tersebut.

77 * **Tautan ke file yang diubah**: file menautkan ke file atau folder yang diubah oleh pull request ini, dan review tidak dapat mengecualikan hanya baris yang berisi tautan tersebut. Tulis aturan tersebut langsung di `REVIEW.md`.77 * **Tautan ke file yang diubah**: file menautkan ke file atau folder yang diubah oleh pull request ini, dan review tidak dapat mengecualikan hanya baris yang berisi tautan tersebut. Tulis aturan tersebut langsung di `REVIEW.md`.

78* **"include line(s) in the root REVIEW\.md were skipped on this review"**: `REVIEW.md` root Anda diterapkan, tetapi file yang disebutkan oleh baris-baris tersebut tidak diterapkan. Periksa daftar di bawah [Menyertakan file lain di REVIEW.md](https://code.claude.com/docs/id/code-review-customize.md#include-other-files-in-review-md) dan, untuk skill, di bawah [Menyertakan file skill](https://code.claude.com/docs/id/code-review-customize.md#include-a-skill-file).

78 79 

79## Masalah penyiapan80## Masalah penyiapan

80 81 

desktop.md +4 −4

Details

844| [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/id/env-vars#variables) atau [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/id/env-vars#variables) | Tetapkan di [salah satu tempat Anda menetapkan variabel untuk dev server](#set-environment-variables-for-dev-servers), lalu keluar dan buka kembali Desktop |844| [`CLAUDE_CONFIG_DIR`](https://code.claude.com/docs/id/env-vars#variables) atau [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/id/env-vars#variables) | Tetapkan di [salah satu tempat Anda menetapkan variabel untuk dev server](#set-environment-variables-for-dev-servers), lalu keluar dan buka kembali Desktop |

845| `API_TIMEOUT_MS`, `ANTHROPIC_BASE_URL`, atau variabel lain yang ditetapkan Desktop sendiri | Lihat [Environment variable yang ditetapkan Desktop sendiri](#environment-variables-desktop-sets-itself) |845| `API_TIMEOUT_MS`, `ANTHROPIC_BASE_URL`, atau variabel lain yang ditetapkan Desktop sendiri | Lihat [Environment variable yang ditetapkan Desktop sendiri](#environment-variables-desktop-sets-itself) |

846 846 

847Di macOS atau Linux, jika Anda sudah menetapkan variabel dengan `export` di `~/.zshrc` atau `~/.bashrc`, lihat [Variabel yang diekspor hilang atau salah dalam perintah yang dijalankan Claude](#exported-variable-missing-or-wrong-in-commands-claude-runs).847Di macOS atau Linux, jika variabel yang Anda tetapkan dengan `export` hilang atau salah dalam perintah yang dijalankan Claude, lihat [Variabel yang diekspor hilang atau salah dalam perintah yang dijalankan Claude](#exported-variable-missing-or-wrong-in-commands-claude-runs).

848 848 

849#### Mengatur environment variable untuk sesi lokal849#### Mengatur environment variable untuk sesi lokal

850 850 


904 904 

905**3. Periksa variabel tersimpan Anda**905**3. Periksa variabel tersimpan Anda**

906 906 

907Jika perintah mendapatkan nilai yang salah, periksa apakah Anda juga menetapkan variabel tersebut di [environment tersimpan](#use-edit-or-remove-a-saved-environment) atau [editor environment lokal](#use-the-local-environment-editor). Jika ya, ubah nilainya di sana dan mulai sesi baru.907Jika sebuah perintah mendapatkan nilai yang salah, periksa apakah Anda juga menetapkan variabel tersebut di [lingkungan tersimpan](#use-edit-or-remove-a-saved-environment) atau di [editor lingkungan lokal](#use-the-local-environment-editor). Jika ya, ubah nilainya di sana dan mulai sesi baru.

908 908 

909**4. Gunakan environment tersimpan**909**4. Gunakan lingkungan tersimpan**

910 910 

911Tambahkan variabel ke [environment lokal tersimpan](#set-environment-variables-for-local-sessions), lalu mulai sesi baru dari environment tersebut. Untuk variabel seperti `PATH` atau `CLAUDE_CONFIG_DIR`, ikuti [instruksinya sendiri](#environment-variables-in-local-sessions) sebagai gantinya.911Tambahkan variabel ke [lingkungan lokal tersimpan](#set-environment-variables-for-local-sessions), lalu mulai sesi baru dari lingkungan tersebut. Untuk variabel seperti `PATH`, `CLAUDE_CONFIG_DIR`, atau `API_TIMEOUT_MS`, ikuti [instruksinya sendiri](#environment-variables-in-local-sessions) sebagai gantinya.

912 912 

913Sebelum v2.1.304, Claude Code tidak meneruskan variabel yang diekspor ke perintah, jadi [periksa versi mana yang dijalankan sesi](#claude-code-version-in-the-code-tab).913Sebelum v2.1.304, Claude Code tidak meneruskan variabel yang diekspor ke perintah, jadi [periksa versi mana yang dijalankan sesi](#claude-code-version-in-the-code-tab).

914 914 

Details

15 15 

16Halaman ini mencakup tugas terjadwal lokal; untuk tugas terjadwal cloud dan opsi pemicunya, lihat [Otomatiskan pekerjaan dengan tugas terjadwal](https://code.claude.com/docs/id/routines.md).16Halaman ini mencakup tugas terjadwal lokal; untuk tugas terjadwal cloud dan opsi pemicunya, lihat [Otomatiskan pekerjaan dengan tugas terjadwal](https://code.claude.com/docs/id/routines.md).

17 17 

18> [!NOTE]

19>

20> Jika aplikasi Anda menampilkan fitur ini dengan [nama sebelumnya](https://code.claude.com/docs/id/routines.md#where-the-name-routines-still-appears), klik **Routines** di mana pun halaman ini menyebutkan **Scheduled** dan **New routine** di mana halaman ini menyebutkan **New task**.

21 

18## Bandingkan opsi penjadwalan22## Bandingkan opsi penjadwalan

19 23 

20Claude Code menawarkan tiga cara untuk menjadwalkan pekerjaan berulang atau sekali jalan:24Claude Code menawarkan tiga cara untuk menjadwalkan pekerjaan berulang atau sekali jalan:


45 49 

46**1. Buka halaman Scheduled tasks**50**1. Buka halaman Scheduled tasks**

47 51 

48Di [**tab Code**](https://code.claude.com/docs/id/desktop.md), klik **Scheduled** di sidebar atau di menu **More** sidebar.52Di [**tab Code**](https://code.claude.com/docs/id/desktop.md), klik **Scheduled** di sidebar atau di menu **More** sidebar. Jika sidebar menampilkan **Routines** alih-alih **Scheduled**, klik **Routines**, lalu klik **New routine**, dan lanjutkan dengan [Formulir satu halaman penuh](#full-page-form).

49 53 

50**2. Mulai tugas baru**54**2. Mulai tugas baru**

51 55 

52Klik **New task**. Jika menu terbuka dengan **Create with Claude** dan **Set up manually**, pilih **Set up manually**. Dialog **New scheduled task** terbuka. Jika **Only on this computer** berada di bagian atas dialog, buka [Dialog dengan Only on this computer di bagian atas](#dialog-with-only-on-this-computer-at-the-top) sebelum Anda memasukkan apa pun.56Klik **New task** untuk membuka dialog **New scheduled task**. Periksa layar-layar berikut sebelum Anda melanjutkan:

57 

58* Jika menu terbuka dengan **Create with Claude** dan **Set up manually**, pilih **Set up manually** untuk membuka dialog.

59* Jika **Only on this computer** berada di bagian atas dialog, buka [Dialog dengan Only on this computer di bagian atas](#dialog-with-only-on-this-computer-at-the-top) sebelum Anda memasukkan apa pun.

60* Jika menu dengan **Local** dan **Cloud** terbuka, atau halaman penuh terbuka sebagai pengganti dialog, buka [Formulir satu halaman penuh](#full-page-form).

53 61 

54**3. Beri nama tugas**62**3. Beri nama tugas**

55 63 


99 107 

100Klik **Create**. Halaman detail tugas terbuka.108Klik **Create**. Halaman detail tugas terbuka.

101 109 

110### Formulir satu halaman penuh

111 

112Jika menu dengan **Local** dan **Cloud** terbuka, pilih **Local**. Halaman berjudul **New local routine** atau **New local scheduled task** terbuka. Isi bidang-bidangnya:

113 

114* **Name**: masukkan nama yang unik di seluruh tugas Anda.

115* **Description**: masukkan deskripsi.

116* **Instructions**: masukkan apa yang harus dilakukan Claude saat tugas berjalan. Di kotak yang sama, pilih mode izin, model, dan folder tempat tugas berjalan.

117* **Schedule**: pilih salah satu [opsi jadwal](#schedule-options).

118 

119Jika **Create** tidak tersedia, arahkan kursor ke atasnya untuk melihat apa yang masih diperlukan formulir. Klik **Create**, dan halaman detail tugas terbuka.

120 

102## Opsi jadwal121## Opsi jadwal

103 122 

104Saat Anda mengaktifkan **Only on this computer** di bawah **Advanced settings**, kartu **Trigger** menawarkan Hourly, Daily, Weekdays, dan Weekly. Untuk mendapatkan **Manual** atau **Custom** bagi tugas seperti itu, buka [formulir **Edit**](#manage-scheduled-tasks) tugas tersebut setelah Anda membuatnya. Formulir tersebut dan [dialog dengan **Only on this computer** di bagian atas](#dialog-with-only-on-this-computer-at-the-top) menawarkan enam opsi berikut:123Saat Anda mengaktifkan **Only on this computer** di bawah **Advanced settings**, kartu **Trigger** menawarkan Hourly, Daily, Weekdays, dan Weekly. Untuk mendapatkan **Manual** atau **Custom** bagi tugas seperti itu, buka [formulir **Edit**](#manage-scheduled-tasks) tugas tersebut setelah Anda membuatnya. Formulir tersebut, [dialog dengan **Only on this computer** di bagian atas](#dialog-with-only-on-this-computer-at-the-top), dan [formulir halaman penuh](#full-page-form) menawarkan enam opsi berikut:

105 124 

106* **Hourly**: berjalan setiap jam125* **Hourly**: berjalan setiap jam

107* **Daily**: berjalan setiap hari pada waktu lokal yang Anda pilih126* **Daily**: berjalan setiap hari pada waktu lokal yang Anda pilih

env-vars.md +1 −1

Details

298| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | Atur ke `1` untuk memaksa persistensi transkrip, riwayat prompt, dan pendaftaran `claude agents` bahkan saat `claude` ini diluncurkan dari dalam sesi Claude Code lain. Gunakan saat nilai `CLAUDE_CODE_CHILD_SESSION` yang diwarisi, misalnya dari sesi `screen` atau launcher 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 pada v2.1.169 dan sebelumnya; tidak berpengaruh pada v2.1.170 dan v2.1.171, di mana deteksi sesi bersarang yang ditimpanya telah dihapus |298| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | Atur ke `1` untuk memaksa persistensi transkrip, riwayat prompt, dan pendaftaran `claude agents` bahkan saat `claude` ini diluncurkan dari dalam sesi Claude Code lain. Gunakan saat nilai `CLAUDE_CODE_CHILD_SESSION` yang diwarisi, misalnya dari sesi `screen` atau launcher 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 pada v2.1.169 dan sebelumnya; tidak berpengaruh pada v2.1.170 dan v2.1.171, di mana deteksi sesi bersarang yang ditimpanya telah dihapus |

299| `CLAUDE_CODE_FORCE_STRIKETHROUGH` | Atur 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 yang lebih baru |299| `CLAUDE_CODE_FORCE_STRIKETHROUGH` | Atur 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 yang lebih baru |

300| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | Atur ke `1` untuk memaksa mengaktifkan DEC private mode 2026 [synchronized output](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036) 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](https://code.claude.com/docs/id/fullscreen.md), ini tidak mengubah renderer |300| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | Atur ke `1` untuk memaksa mengaktifkan DEC private mode 2026 [synchronized output](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036) 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](https://code.claude.com/docs/id/fullscreen.md), ini tidak mengubah renderer |

301| `CLAUDE_CODE_FORCE_TERMINAL_IMAGES` | Atur ke `1` untuk menggambar [elemen `Image` mod](https://code.claude.com/docs/id/plugins/mods/reference#elements) sebagai gambar saat terminal Anda menggambar gambar protokol grafis kitty dengan placeholder Unicode tetapi Anda masih melihat teks `alt` yang diredupkan dari `Image`. Lihat [terminal mana yang menggambar `Image`](https://code.claude.com/docs/id/plugins/mods/gallery#image-and-client) dan mengapa variabel ini tidak membantu di dalam tmux atau screen |301| `CLAUDE_CODE_FORCE_TERMINAL_IMAGES` | Atur ke `1` untuk menggambar [elemen `Image` mod](https://code.claude.com/docs/id/plugins/mods/reference#elements) sebagai gambar saat terminal Anda menggambar gambar protokol grafis kitty dengan placeholder Unicode dan Anda masih melihat teks `alt` redup dari `Image`. Lihat [terminal mana yang menggambar `Image` dan di mana tidak boleh mengatur variabel ini](https://code.claude.com/docs/id/plugins/mods/gallery#image-and-client) |

302| `CLAUDE_CODE_FORK_SUBAGENT` | Mengontrol fork mode, yang aktif secara default dan memungkinkan Claude memulai [fork](https://code.claude.com/docs/id/sub-agents.md#fork-the-current-conversation) sendiri. Selama fork mode aktif, Claude juga tidak dapat [menunggu subagent](https://code.claude.com/docs/id/sub-agents.md#run-subagents-in-foreground-or-background) dalam sesi terminal interaktif, VS Code, atau desktop di mesin Anda. Atur ke `0` untuk mematikan fork mode. Untuk versi, lihat [Mematikan fork mode](https://code.claude.com/docs/id/sub-agents.md#turn-fork-mode-on-or-off) |302| `CLAUDE_CODE_FORK_SUBAGENT` | Mengontrol fork mode, yang aktif secara default dan memungkinkan Claude memulai [fork](https://code.claude.com/docs/id/sub-agents.md#fork-the-current-conversation) sendiri. Selama fork mode aktif, Claude juga tidak dapat [menunggu subagent](https://code.claude.com/docs/id/sub-agents.md#run-subagents-in-foreground-or-background) dalam sesi terminal interaktif, VS Code, atau desktop di mesin Anda. Atur ke `0` untuk mematikan fork mode. Untuk versi, lihat [Mematikan fork mode](https://code.claude.com/docs/id/sub-agents.md#turn-fork-mode-on-or-off) |

303| `CLAUDE_CODE_FORWARD_SUBAGENT_TEXT` | Atur ke `1` untuk mengeluarkan teks [subagent](https://code.claude.com/docs/id/sub-agents.md) dan thinking block dalam output `claude -p --output-format stream-json`, perilaku yang sama dengan flag [`--forward-subagent-text`](https://code.claude.com/docs/id/cli-reference#cli-flags). Gunakan variabel ini saat harness memanggil `claude` dan tidak dapat meneruskan flag itu sendiri. Tidak seperti flag, yang keluar dengan error di luar mode non-interaktif dengan output stream-json, variabel ini diabaikan di sana sehingga pemanggilan bersarang tetap berfungsi saat variabel diatur untuk seluruh proses. Memerlukan Claude Code v2.1.211 atau yang lebih baru |303| `CLAUDE_CODE_FORWARD_SUBAGENT_TEXT` | Atur ke `1` untuk mengeluarkan teks [subagent](https://code.claude.com/docs/id/sub-agents.md) dan thinking block dalam output `claude -p --output-format stream-json`, perilaku yang sama dengan flag [`--forward-subagent-text`](https://code.claude.com/docs/id/cli-reference#cli-flags). Gunakan variabel ini saat harness memanggil `claude` dan tidak dapat meneruskan flag itu sendiri. Tidak seperti flag, yang keluar dengan error di luar mode non-interaktif dengan output stream-json, variabel ini diabaikan di sana sehingga pemanggilan bersarang tetap berfungsi saat variabel diatur untuk seluruh proses. Memerlukan Claude Code v2.1.211 atau yang lebih baru |

304| `CLAUDE_CODE_GATEWAY_HINT_HEADERS` | Atur ke `1` untuk mengirim [header petunjuk gateway](https://code.claude.com/docs/id/llm-gateway-protocol.md#gateway-hint-headers), seperti `x-claude-code-request-class` dan `x-claude-code-compaction`, pada proxy kustom atau penyedia pihak ketiga seperti Amazon Bedrock atau Claude Platform on AWS. Atur ke `0` untuk berhenti mengirimnya di setiap koneksi, termasuk koneksi langsung ke Anthropic API, tempat Claude Code mengirimnya secara default. Memerlukan Claude Code v2.1.273 atau yang lebih baru |304| `CLAUDE_CODE_GATEWAY_HINT_HEADERS` | Atur ke `1` untuk mengirim [header petunjuk gateway](https://code.claude.com/docs/id/llm-gateway-protocol.md#gateway-hint-headers), seperti `x-claude-code-request-class` dan `x-claude-code-compaction`, pada proxy kustom atau penyedia pihak ketiga seperti Amazon Bedrock atau Claude Platform on AWS. Atur ke `0` untuk berhenti mengirimnya di setiap koneksi, termasuk koneksi langsung ke Anthropic API, tempat Claude Code mengirimnya secara default. Memerlukan Claude Code v2.1.273 atau yang lebih baru |

errors.md +65 −8

Details

317| `Skipping connection (recent failure cached; retries automatically in 15 min, or edit the plugin config to retry now)` | [Plugin errors](#skipping-connection-recent-failure-cached) |317| `Skipping connection (recent failure cached; retries automatically in 15 min, or edit the plugin config to retry now)` | [Plugin errors](#skipping-connection-recent-failure-cached) |

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

319| `MCP server "<name>" connection closed before the tool call was answered` | [Tool errors](#connection-closed-before-the-tool-call-was-answered) |319| `MCP server "<name>" connection closed before the tool call was answered` | [Tool errors](#connection-closed-before-the-tool-call-was-answered) |

320| `MCP server "<name>" is disabled — re-enable it via /mcp to use its tools` | [Error tool](#mcp-server-is-disabled) |

321| `MCP server "<name>" tool "<tool>" timed out after <N>s. The server asked the user a question, and no answer came before the time limit.` | [Tool errors](#mcp-tool-call-timed-out-with-the-servers-question-unanswered) |

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

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

322| `cannot contain null bytes (\0)` | [Tool errors](#path-cannot-contain-null-bytes) |324| `cannot contain null bytes (\0)` | [Tool errors](#path-cannot-contain-null-bytes) |


348| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` / `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) |350| `Your disk quota is full on the filesystem with Claude Code's temp directory <dir> (EDQUOT)` / `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) |

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

350| `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) |352| `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) |

353| `git is not installed on this Mac. To install it, run xcode-select --install, then try again.` | [Error tool](#git-is-not-installed-on-this-mac) |

351| `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) |354| `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) |

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

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


487 490 

488Saat Claude berkonsultasi dengan [advisor](https://code.claude.com/docs/id/advisor.md), banner muncul setelah 90 detik tanpa data bukan 20, karena review advisor yang panjang dapat mengirim tidak ada selama lebih dari 20 detik. Sebelum v2.1.214, threshold 20-detik diterapkan selama advisor calls juga, jadi banner muncul selama advisor reviews bahkan ketika tidak ada yang salah.491Saat Claude berkonsultasi dengan [advisor](https://code.claude.com/docs/id/advisor.md), banner muncul setelah 90 detik tanpa data bukan 20, karena review advisor yang panjang dapat mengirim tidak ada selama lebih dari 20 detik. Sebelum v2.1.214, threshold 20-detik diterapkan selama advisor calls juga, jadi banner muncul selama advisor reviews bahkan ketika tidak ada yang salah.

489 492 

493#### Banner menunggu muncul dan hilang di balik gateway

494 

495Jika banner `Waiting for API response` muncul dan hilang saat Claude berpikir dan Anda terhubung melalui gateway, [perbarui Claude Code](https://code.claude.com/docs/id/setup.md#update-claude-code) ke v2.1.309 atau lebih baru. Banner muncul setelah 45 detik tanpa data pada koneksi berikut:

496 

497* [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/id/env-vars) ditetapkan ke host selain Anthropic API, seperti [LLM gateway](https://code.claude.com/docs/id/llm-gateway)

498* Sesi [Claude apps gateway](https://code.claude.com/docs/id/claude-apps-gateway)

499* [Claude Platform on AWS](https://code.claude.com/docs/id/claude-platform-on-aws.md) dengan `ANTHROPIC_AWS_BASE_URL` ditetapkan

500 

501Sebelum v2.1.309, banner muncul setelah 20 detik pada koneksi ini.

502 

490### Sesuaikan perilaku retry503### Sesuaikan perilaku retry

491 504 

492Anda dapat menyesuaikan perilaku retry dengan environment variable ini:505Anda dapat menyesuaikan perilaku retry dengan environment variable ini:


3256 3269 

3257**Yang harus dilakukan:**3270**Yang harus dilakukan:**

3258 3271 

3259* Dalam skrip atau CI job, tambahkan `--trust-workspace` untuk memercayai checkout hanya untuk run tersebut: `claude ultrareview --trust-workspace`. Tambahkan hanya untuk kode yang Anda percayai, karena konfigurasi git checkout dan pengaturan proyek Claude Code kemudian dapat menjalankan program. Untuk me-review pull request yang kodenya tidak Anda percayai, lihat [cara me-review-nya dari checkout yang Anda percayai](https://code.claude.com/docs/id/ultrareview.md#trust-the-folder-before-the-review-runs).3272* Dalam skrip atau job CI, tambahkan `--trust-workspace` untuk memercayai folder tersebut untuk eksekusi itu: `claude ultrareview --trust-workspace`. Tambahkan hanya untuk kode yang Anda percayai, karena git dan Claude Code kemudian dapat menjalankan program yang disebutkan dalam konfigurasi git dan pengaturan proyek di folder tersebut. Untuk pull request yang kodenya tidak Anda percayai, [jalankan review dari branch yang Anda percayai](https://code.claude.com/docs/id/ultrareview.md#trust-the-folder-before-the-review-runs).

3260* Di mesin Anda sendiri, jalankan `claude` di folder tersebut dan terima [dialog kepercayaan workspace](https://code.claude.com/docs/id/permissions.md#project-allow-rules-and-workspace-trust), lalu jalankan perintah asli Anda lagi3273* Di mesin Anda sendiri, jalankan `claude` di folder tersebut dan terima [dialog kepercayaan workspace](https://code.claude.com/docs/id/permissions.md#project-allow-rules-and-workspace-trust), lalu jalankan perintah asli Anda lagi

3261 3274 

3262Setiap pesan berikut dari `claude ultrareview` berarti tidak ada review yang dimulai dan exit code-nya adalah 1:3275Setiap pesan berikut dari `claude ultrareview` berarti tidak ada review yang dimulai dan exit code-nya adalah 1:


3265* **`Error: Workspace not trusted. <folder> is your home directory`**: karena kepercayaan untuk direktori home Anda tidak pernah disimpan, menjalankan `claude` di sana terlebih dahulu tidak dapat membantu. Jalankan `claude ultrareview` dari direktori proyek sebagai gantinya, setelah menjalankan `claude` di sana sekali untuk menerima dialog kepercayaan, atau tambahkan `--trust-workspace`.3278* **`Error: Workspace not trusted. <folder> is your home directory`**: karena kepercayaan untuk direktori home Anda tidak pernah disimpan, menjalankan `claude` di sana terlebih dahulu tidak dapat membantu. Jalankan `claude ultrareview` dari direktori proyek sebagai gantinya, setelah menjalankan `claude` di sana sekali untuk menerima dialog kepercayaan, atau tambahkan `--trust-workspace`.

3266* **`No answer in time.` diikuti `Error: Workspace not trusted`**: pertanyaan `Trust <folder>? [y/N]` tidak dijawab selama 5 menit. Jalankan `claude ultrareview` lagi dan jawab pertanyaan tersebut.3279* **`No answer in time.` diikuti `Error: Workspace not trusted`**: pertanyaan `Trust <folder>? [y/N]` tidak dijawab selama 5 menit. Jalankan `claude ultrareview` lagi dan jawab pertanyaan tersebut.

3267* **`Ultrareview did not start: <folder> is not trusted`**: Anda menolak pada pertanyaan `Trust <folder>? [y/N]`, misalnya dengan menjawab `n` atau menekan Enter. Untuk memulai review, jalankan `claude ultrareview` lagi dan jawab `y`.3280* **`Ultrareview did not start: <folder> is not trusted`**: Anda menolak pada pertanyaan `Trust <folder>? [y/N]`, misalnya dengan menjawab `n` atau menekan Enter. Untuk memulai review, jalankan `claude ultrareview` lagi dan jawab `y`.

3268* **``Ultrareview did not start: `--trust-workspace` takes no value``**: sesuatu selain flag mengikuti `--trust-workspace`, seperti nomor PR atau `false`. Jika Anda tidak memercayai folder tersebut, jangan sertakan flag tersebut. Untuk memercayainya untuk run ini, letakkan nomor PR atau base branch sebelum flag: `claude ultrareview 1234 --trust-workspace`.3281* **``Ultrareview did not start: `--trust-workspace` takes no value``**: sesuatu selain flag mengikuti `--trust-workspace`, seperti nomor PR atau `false`. Jika Anda tidak memercayai folder tersebut, jangan sertakan flag tersebut. Untuk memercayainya untuk eksekusi ini, letakkan nomor PR atau base branch sebelum flag: `claude ultrareview 1234 --trust-workspace`.

3269 3282 

3270Sebelum v2.1.309, `claude ultrareview` tidak menerima `--trust-workspace`.3283Sebelum v2.1.309, `claude ultrareview` tidak menerima `--trust-workspace`.

3271 3284 


3526 3539 

3527String serupa muncul sebelum perintah dijalankan sama sekali:3540String serupa muncul sebelum perintah dijalankan sama sekali:

3528 3541 

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

3530* ``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](https://code.claude.com/docs/id/skills.md#how-injected-commands-run)3543* ``Skill <name> requires bash (`shell: bash` in frontmatter) but Git Bash was not found``: frontmatter skill mengharuskan bash di mesin yang tidak memilikinya. Instal Git for Windows atau ubah frontmatter menjadi `shell: powershell`. Lihat [Cara perintah sisipan dijalankan](https://code.claude.com/docs/id/skills.md#how-injected-commands-run)

3531* `No shell command in <name> was run`: salah satu perintah `!` di file mengandung karakter kontrol mentah selain tab atau baris baru, sehingga tidak ada satu pun yang dijalankan. Lihat [cara menemukan dan menghapus karakter tersebut](#no-shell-command-was-run)3544* `No shell command in <name> was run`: salah satu perintah `!` di file mengandung karakter kontrol mentah selain tab atau baris baru, sehingga tidak ada satu pun yang dijalankan. Lihat [cara menemukan dan menghapus karakter tersebut](#no-shell-command-was-run)

3532 3545 

3533**Yang perlu dilakukan:**3546**Yang perlu dilakukan:**


3678 3691 

3679* **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 atas3692* **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

3680* **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>`)``3693* **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>`)``

3681* **Anda memberikan branch dasar yang tidak ada di clone Anda**: Claude Code mengambilnya 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 (shallow), Claude Code menyarankan `git fetch --unshallow origin` sebagai gantinya. Sebelum v2.1.221, petunjuk tersebut menyarankan `git fetch --unshallow origin` untuk setiap branch dasar yang diambil, dan pada clone yang lengkap perintah tersebut gagal dengan `fatal: --unshallow on a complete repository does not make sense`.3694* **Anda meneruskan branch dasar yang tidak ada di clone Anda**: Claude Code mengambilnya 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 memastikan apakah clone Anda dangkal (shallow), Claude Code menyarankan `git fetch --unshallow origin` sebagai gantinya. Sebelum v2.1.221, petunjuk tersebut menyarankan `git fetch --unshallow origin` untuk setiap branch dasar yang diambil, dan pada clone yang lengkap perintah itu gagal dengan `fatal: --unshallow on a complete repository does not make sense`.

3682 3695 

3683**Yang perlu dilakukan:**3696**Yang perlu dilakukan:**

3684 3697 


4419* Jika tindakan tersebut tidak terjadi, minta Claude menjalankan tool lagi. Anda tidak perlu menyambungkan kembali server terlebih dahulu, karena Claude Code terhubung kembali ke server tersebut untuk panggilan berikutnya ke salah satu tool-nya. Jika koneksi itu juga gagal, lihat [Mid-session drops of a remote server](https://code.claude.com/docs/id/mcp.md#mid-session-drops-of-a-remote-server).4432* Jika tindakan tersebut tidak terjadi, minta Claude menjalankan tool lagi. Anda tidak perlu menyambungkan kembali server terlebih dahulu, karena Claude Code terhubung kembali ke server tersebut untuk panggilan berikutnya ke salah satu tool-nya. Jika koneksi itu juga gagal, lihat [Mid-session drops of a remote server](https://code.claude.com/docs/id/mcp.md#mid-session-drops-of-a-remote-server).

4420* Jika Anda membangun server tersebut dan tool-nya aman untuk dipanggil dua kali, [tandai sebagai aman untuk diulang](https://code.claude.com/docs/id/mcp.md#tool-calls-pending-when-a-connection-closes) agar Claude Code dapat mengulangi panggilan yang hilang4433* Jika Anda membangun server tersebut dan tool-nya aman untuk dipanggil dua kali, [tandai sebagai aman untuk diulang](https://code.claude.com/docs/id/mcp.md#tool-calls-pending-when-a-connection-closes) agar Claude Code dapat mengulangi panggilan yang hilang

4421 4434 

4435### MCP server is disabled

4436 

4437Pesan ini dalam hasil tool berarti Claude memanggil tool pada [server MCP](https://code.claude.com/docs/id/mcp.md) yang [dimatikan](https://code.claude.com/docs/id/mcp.md#disable-a-server-without-removing-it). Claude Code tidak terhubung ke server tersebut, jadi tool tidak berjalan, dan Claude menerima teks ini sebagai pengganti hasil:

4438 

4439```text wrap theme={null}

4440MCP server "<name>" is disabled — re-enable it via /mcp to use its tools

4441```

4442 

4443**What to do:**

4444 

4445* Jika Anda memang bermaksud mematikan server tersebut, Anda tidak perlu melakukan apa pun

4446* Jika Claude membutuhkan tool dari server tersebut, aktifkan kembali server dari `/mcp` di prompt Claude Code

4447* Dalam aplikasi [Agent SDK](https://code.claude.com/docs/id/agent-sdk/overview.md), aktifkan kembali server dengan memanggil [`toggleMcpServer()`](https://code.claude.com/docs/id/agent-sdk/typescript#togglemcpserver) di TypeScript dengan `enabled` diatur ke `true`, atau [`toggle_mcp_server()`](https://code.claude.com/docs/id/agent-sdk/python#claudesdkclient) di Python dengan `enabled` diatur ke `True`

4448 

4449### MCP tool call timed out with the server's question unanswered

4450 

4451Dalam [mode non-interaktif](https://code.claude.com/docs/id/headless.md), sebuah [server MCP](https://code.claude.com/docs/id/mcp.md) meminta input melalui [elicitation](https://code.claude.com/docs/id/mcp.md#respond-to-mcp-elicitation-requests) selama panggilan tool, dan batas waktu panggilan tersebut habis sebelum jawaban datang:

4452 

4453```text theme={null}

4454MCP server "<name>" tool "<tool>" timed out after <N>s. The server asked the user a question, and no answer came before the time limit. Do not call this tool again in this turn. Tell the user that the server's question got no answer, and wait for their reply.

4455```

4456 

4457Sebelum v2.1.310, hasilnya berakhir pada `timed out after <N>s` dan tidak menyebutkan apa pun tentang pertanyaan tersebut.

4458 

4459**What to do:**

4460 

4461* Siapkan [hook `Elicitation`](https://code.claude.com/docs/id/hooks#elicitation) yang menjawab permintaan server

4462* Dalam aplikasi Agent SDK TypeScript, buat callback [`onElicitation`](https://code.claude.com/docs/id/agent-sdk/typescript#options) Anda mengembalikan jawabannya sebelum batas waktu habis

4463* Untuk memberi lebih banyak waktu bagi jawaban, atur [`timeout`](https://code.claude.com/docs/id/mcp#time-limits-on-mcp-tool-calls) yang lebih lama dalam milidetik di entri konfigurasi server, seperti `"timeout": 600000` untuk 10 menit

4464* Jalankan tugas dalam sesi interaktif sebagai gantinya dan jawab sendiri [dialog](https://code.claude.com/docs/id/mcp.md#respond-to-mcp-elicitation-requests) server

4465 

4422### Agent would be spawned with zero tools4466### Agent would be spawned with zero tools

4423 4467 

4424Setiap entri dalam [`tools` list](https://code.claude.com/docs/id/sub-agents#supported-frontmatter-fields) subagent gagal cocok dengan tool yang dapat digunakan, jadi Claude Code menolak untuk meluncurkan subagent: tanpa tool, subagent tidak bisa bertindak. Pesan mengelompokkan entri Anda berdasarkan apa yang salah:4468Setiap entri dalam [`tools` list](https://code.claude.com/docs/id/sub-agents#supported-frontmatter-fields) subagent gagal cocok dengan tool yang dapat digunakan, jadi Claude Code menolak untuk meluncurkan subagent: tanpa tool, subagent tidak bisa bertindak. Pesan mengelompokkan entri Anda berdasarkan apa yang salah:


4741The command was not started: this computer's disk is full (ENOSPC) on the volume holding /tmp/claude-501 (Claude Code's temporary directory), so the file that captures command output could not be created there and nothing ran. Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.4785The command was not started: this computer's disk is full (ENOSPC) on the volume holding /tmp/claude-501 (Claude Code's temporary directory), so the file that captures command output could not be created there and nothing ran. Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.

4742```4786```

4743 4787 

4744Tiga pesan lainnya muncul setelah perintah yang berjalan dan keluar dengan kode bukan nol. Contoh ini adalah bentuk `Disk full:`:4788Pesan `Disk full:`, `Disk quota used up:`, dan `Nearly out of inodes:` muncul setelah perintah yang berjalan dan keluar dengan kode bukan nol. Misalnya:

4745 4789 

4746```text wrap theme={null}4790```text wrap theme={null}

4747Disk full: this computer's volume holding /tmp/claude-501 (Claude Code's temporary directory) has 3 MB free, so whatever this command printed was lost and its own writes may have failed with "No space left on device". Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.4791Disk full: this computer's volume holding /tmp/claude-501 (Claude Code's temporary directory) has 3 MB free, so whatever this command printed was lost and its own writes may have failed with "No space left on device". Free space on that volume, or restart Claude Code with CLAUDE_CODE_TMPDIR set to a directory on another one, then retry. If this is the user's own computer, tell them before deleting anything to make room.


4751 4795 

4752* Di macOS dan Linux, jalankan `df -h <dir>` di shell Anda untuk melihat volume mana yang menyimpan direktori tersebut dan seberapa penuh volume itu. `df -i <dir>` menampilkan berapa banyak inode yang tersedia. `<dir>` adalah direktori yang disebutkan pesan Anda, seperti dalam `df -i /tmp/claude-501`4796* Di macOS dan Linux, jalankan `df -h <dir>` di shell Anda untuk melihat volume mana yang menyimpan direktori tersebut dan seberapa penuh volume itu. `df -i <dir>` menampilkan berapa banyak inode yang tersedia. `<dir>` adalah direktori yang disebutkan pesan Anda, seperti dalam `df -i /tmp/claude-501`

4753* **`Disk full: this computer's volume` atau `disk is full (ENOSPC)`**: di mana pun pada volume tersebut, hapus file yang tidak Anda butuhkan4797* **`Disk full: this computer's volume` atau `disk is full (ENOSPC)`**: di mana pun pada volume tersebut, hapus file yang tidak Anda butuhkan

4754* **`Disk quota used up:` atau `Disk full: a test write`**: hapus file milik Anda sendiri pada volume tersebut, meskipun volume itu masih menunjukkan ruang kosong4798* **`Disk quota used up:`, `disk quota is used up (EDQUOT)`, atau `Disk full: a test write`**: hapus file milik Anda sendiri pada volume tersebut, meskipun volume itu masih menunjukkan ruang kosong

4755* **`disk quota is used up (EDQUOT)`**: hapus file milik Anda sendiri pada volume tersebut

4756* **`Nearly out of inodes:`**: hapus banyak file pada volume tersebut. Setiap file menggunakan satu inode berapa pun ukurannya, jadi yang penting adalah jumlahnya, bukan ukurannya4799* **`Nearly out of inodes:`**: hapus banyak file pada volume tersebut. Setiap file menggunakan satu inode berapa pun ukurannya, jadi yang penting adalah jumlahnya, bukan ukurannya

4757* Atau mulai ulang Claude Code dengan [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/id/env-vars) diatur ke direktori pada volume yang memiliki ruang4800* Atau mulai ulang Claude Code dengan [`CLAUDE_CODE_TMPDIR`](https://code.claude.com/docs/id/env-vars) diatur ke direktori pada volume yang memiliki ruang

4758* Kemudian minta Claude menjalankan perintah lagi4801* Kemudian minta Claude menjalankan perintah lagi


4766 4809 

4767Sebelum v2.1.305, perintah yang tidak dapat dimulai Claude Code karena disk penuh hanya mengembalikan teks kesalahan sistem operasi. Teks tersebut berbunyi, misalnya, `ENOSPC: no space left on device, open <path>.output`.4810Sebelum v2.1.305, perintah yang tidak dapat dimulai Claude Code karena disk penuh hanya mengembalikan teks kesalahan sistem operasi. Teks tersebut berbunyi, misalnya, `ENOSPC: no space left on device, open <path>.output`.

4768 4811 

4812### git is not installed on this Mac

4813 

4814Pesan ini berarti sebuah langkah dalam Claude Code membutuhkan git, dan git yang ditemukannya adalah pengganti dari Apple di `/usr/bin/git`. Alat pengembang yang menyediakan git belum terinstal.

4815 

4816Claude Code tidak menjalankan pengganti tersebut dan menampilkan teks ini sebagai gantinya, misalnya di dalam pesan yang lebih panjang:

4817 

4818```text wrap theme={null}

4819git is not installed on this Mac. To install it, run xcode-select --install, then try again.

4820```

4821 

4822**What to do:**

4823 

4824* Di Terminal, jalankan `xcode-select --install`, selesaikan instalasi yang dimulainya, lalu coba lagi apa yang sedang Anda lakukan di Claude Code

4825 

4769### File is not valid UTF-84826### File is not valid UTF-8

4770 4827 

4771Claude 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:4828Claude 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:

fast-mode.md +21 −11

Details

155 155 

156Sebelum menawarkan mode cepat, Claude Code memeriksa ketersediaan mode cepat organisasi Anda dengan permintaan langsung ke `api.anthropic.com`. Pemeriksaan tidak mengikuti [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/id/llm-gateway-connect#set-the-base-url-and-credential), jadi pada jaringan yang merutekan lalu lintas Claude melalui [gateway LLM](https://code.claude.com/docs/id/llm-gateway) dan memblokir egress langsung ke `api.anthropic.com`, pemeriksaan gagal meskipun permintaan inferensi berfungsi. Pemeriksaan menggunakan [proxy HTTP](https://code.claude.com/docs/id/network-config.md#proxy-configuration) yang dikonfigurasi, jadi blokir jaringan hanya gagal pemeriksaan di mana `api.anthropic.com` tidak dapat dijangkau bahkan melalui proxy.156Sebelum menawarkan mode cepat, Claude Code memeriksa ketersediaan mode cepat organisasi Anda dengan permintaan langsung ke `api.anthropic.com`. Pemeriksaan tidak mengikuti [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/id/llm-gateway-connect#set-the-base-url-and-credential), jadi pada jaringan yang merutekan lalu lintas Claude melalui [gateway LLM](https://code.claude.com/docs/id/llm-gateway) dan memblokir egress langsung ke `api.anthropic.com`, pemeriksaan gagal meskipun permintaan inferensi berfungsi. Pemeriksaan menggunakan [proxy HTTP](https://code.claude.com/docs/id/network-config.md#proxy-configuration) yang dikonfigurasi, jadi blokir jaringan hanya gagal pemeriksaan di mana `api.anthropic.com` tidak dapat dijangkau bahkan melalui proxy.

157 157 

158Ketika pemeriksaan gagal, `/fast` melaporkan "Fast mode unavailable due to network connectivity issues", dan permintaan berjalan dengan kecepatan standar, bahkan ketika organisasi Anda memiliki mode cepat diaktifkan. Pemeriksaan yang berhasil di masa lalu terus bekerja dari hasil cache-nya, jadi pemeriksaan yang diblokir sebagian besar mempengaruhi instalasi baru.158Jika organisasi Anda telah mengaktifkan fast mode tetapi `/fast` menyatakan sebaliknya, temukan pesan yang ditampilkannya di antara kasus-kasus berikut.

159 159 

160Pesan konektivitas yang sama muncul pada jaringan terbuka ketika pemeriksaan mencapai `api.anthropic.com` tetapi menyajikan kredensial yang Anthropic tolak. Sesi yang kunci yang diselesaikan adalah kredensial yang dikeluarkan gateway, disimpan dalam [`ANTHROPIC_API_KEY`](https://code.claude.com/docs/id/llm-gateway-connect#set-the-base-url-and-credential) atau diproduksi oleh [`apiKeyHelper`](https://code.claude.com/docs/id/settings-reference#apikeyhelper), mengirim pemeriksaan dengan kunci itu, dan permintaan yang ditolak dilaporkan sebagai kegagalan konektivitas.160#### Fast mode unavailable due to network connectivity issues

161 161 

162Untuk mengembalikan mode cepat, allowlist egress langsung ke `api.anthropic.com` di mana blokir jaringan adalah penyebabnya, atau atur variabel mana pun yang cocok dengan cara pemeriksaan gagal:162Pemeriksaan ketersediaan gagal, misalnya karena jaringan Anda memblokir `api.anthropic.com`, dan permintaan berjalan dengan kecepatan standar. Pemeriksaan yang berhasil di masa lalu terus bekerja dari hasil cache-nya, jadi pemeriksaan yang diblokir sebagian besar memengaruhi instalasi baru.

163 163 

164* `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1` memperlakukan pemeriksaan yang gagal sebagai tersedia dan masih menghormati respons "disabled by your organization". Gunakan ketika jaringan Anda menolak koneksi, atau ketika Anthropic menolak kredensial gateway; allowlisting tidak membantu kasus kredensial, karena tidak ada yang diblokir.164Untuk mengembalikan fast mode, allowlist egress langsung ke `api.anthropic.com`, atau atur `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`, yang memperlakukan pemeriksaan yang gagal sebagai tersedia dan tetap menghormati respons "disabled by your organization".

165* `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1` melewati pemeriksaan sepenuhnya. Gunakan ketika jaringan Anda mencegat permintaan daripada menolaknya.

166 165 

167Dua konfigurasi gateway melaporkan "Fast mode has been disabled by your organization" daripada pesan konektivitas, bahkan ketika organisasi Anda memiliki mode cepat diaktifkan:166#### Fast mode is currently unavailable

168 167 

169* Sesi yang mengautentikasi dengan [`ANTHROPIC_AUTH_TOKEN`](https://code.claude.com/docs/id/llm-gateway-connect#set-the-base-url-and-credential) saja melewati pemeriksaan: tanpa login claude.ai atau kunci API Anthropic, dan tanpa pemeriksaan yang berhasil di-cache, Claude Code memperlakukan mode cepat sebagai dinonaktifkan oleh organisasi Anda tanpa mengirim permintaan.168Di balik gateway, periksa konfigurasi berikut, di mana Claude Code tidak mengirim pemeriksaan ketersediaan dan tidak memiliki pemeriksaan berhasil sebelumnya yang di-cache:

170* Proxy yang mencegat pemeriksaan dan menjawab dengan halaman miliknya sendiri, misalnya proxy yang menginspeksi TLS mengembalikan halaman blokir HTTP 200, dibaca sebagai respons yang mengatakan organisasi Anda memiliki mode cepat dinonaktifkan.

171 169 

172Dalam kedua kasus, atur `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1` untuk mengembalikan mode cepat. `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS` tidak berlaku untuk kedua kasus, karena hanya melewati pemeriksaan yang gagal dan keduanya menghasilkan respons yang dinonaktifkan. Allowlisting egress langsung tidak membantu kasus token pembawa, yang tidak pernah mengirim permintaan.170* Anda mengarahkan `ANTHROPIC_BASE_URL` ke gateway Anda dan menetapkan [`ANTHROPIC_API_KEY`](https://code.claude.com/docs/id/llm-gateway-connect#set-the-base-url-and-credential) ke kunci yang dikeluarkan gateway yang tidak berformat kunci API Anthropic. Claude Code tidak mengirimkan kunci seperti itu ke `api.anthropic.com`.

171* Anda menetapkan [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/id/env-vars), sehingga Claude Code melewati pemeriksaan.

173 172 

174Variabel hanya mempengaruhi pemeriksaan sisi klien. Ketika organisasi Anda memiliki mode cepat dinonaktifkan, API menolak permintaan mode cepat terlepas dari apakah variabel diatur atau tidak. Penolakan dari API tetap berlaku bahkan dengan variabel lewati yang diatur. Claude Code mencoba kembali permintaan yang ditolak dengan kecepatan standar, mematikan mode cepat, dan `/fast` melaporkan bahwa organisasi Anda telah menonaktifkan mode cepat.173Untuk mengembalikan fast mode dalam kedua konfigurasi tersebut, atur `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`.

175 174 

176Menetapkan `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` juga menekan pemeriksaan ketersediaan. Tanpa pemeriksaan yang berhasil di-cache sebelumnya, `/fast` melaporkan "Fast mode is currently unavailable"; kedua variabel lewati mengembalikan mode cepat dalam konfigurasi itu juga.175#### Fast mode has been disabled by your organization

176 

177Di balik gateway, Anda dapat melihat pesan ini bahkan ketika organisasi Anda telah mengaktifkan fast mode, dalam salah satu konfigurasi berikut:

178 

179* Anda mengautentikasi dengan [`ANTHROPIC_AUTH_TOKEN`](https://code.claude.com/docs/id/llm-gateway-connect#set-the-base-url-and-credential) saja, tanpa login claude.ai, tanpa kunci API, dan tanpa pemeriksaan berhasil yang di-cache. Claude Code kemudian memperlakukan fast mode sebagai dinonaktifkan oleh organisasi Anda tanpa mengirim permintaan.

180* Proxy mencegat pemeriksaan dan menjawab dengan halaman miliknya sendiri, misalnya proxy yang menginspeksi TLS mengembalikan halaman blokir HTTP 200. Claude Code membaca halaman tersebut sebagai respons yang menyatakan organisasi Anda telah menonaktifkan fast mode.

181 

182Dalam kedua kasus, atur `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`, yang melewati pemeriksaan sepenuhnya, alih-alih `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS`, yang tidak berlaku untuk keduanya.

183 

184> [!NOTE]

185>

186> Variabel lewati hanya mengubah pemeriksaan sisi klien. Ketika organisasi Anda telah menonaktifkan fast mode, API menolak permintaan fast mode terlepas dari apakah variabel tersebut diatur atau tidak. Claude Code kemudian mencoba ulang permintaan dengan kecepatan standar, mematikan fast mode, dan `/fast` melaporkan bahwa organisasi Anda telah menonaktifkan fast mode.

177 187 

178### Require per-session opt-in188### Require per-session opt-in

179 189 

hooks.md +17 −6

Details

961blocking because Git Bash wasn't found, so only exit code 0 or 2 counts as this hook's verdict.961blocking because Git Bash wasn't found, so only exit code 0 or 2 counts as this hook's verdict.

962```962```

963 963 

964Untuk mengetahui mengapa hook gagal, periksa [log debug](#debug-hooks). Pilih perbaikan yang sesuai dengan hook Anda:964Jika error juga menyatakan `PowerShell started no program`, mulailah dengan [perbaikan untuk `command` yang hanya berisi string bertanda kutip](#powershell-started-no-program), yang dicetak PowerShell alih-alih dijalankan.

965 965 

966* **Tindakan sebaiknya dilanjutkan ketika hook gagal**: tambahkan [`"onFailure": "continue"`](#block-the-action-when-a-hook-fails) ke hook966Tanpa Git Bash, exit code apa pun selain 0 atau 2 dari hook tersebut dihitung sebagai [kegagalan](#block-the-action-when-a-hook-fails), bahkan ketika hook mencetak JSON yang tidak menolak panggilan. Untuk mengetahui mengapa hook gagal, periksa [log debug](#debug-hooks). Lalu pilih perbaikan yang sesuai dengan hook Anda:

967* **Hook ditulis untuk Bash**: hook [berbentuk shell](#exec-form-and-shell-form) tanpa `shell` yang diatur berjalan di PowerShell ketika Git Bash tidak terinstal, dan skrip yang ditulis untuk Bash mungkin tidak berjalan sebagaimana ditulis di sana. Instal [Git for Windows](https://git-scm.com/downloads/win), atau atur [`CLAUDE_CODE_GIT_BASH_PATH`](https://code.claude.com/docs/id/env-vars) jika Git Bash terinstal di lokasi yang tidak ditemukan Claude Code, lalu mulai sesi baru967 

968* **Panggilan sebaiknya dilanjutkan ketika hook gagal**: tambahkan [`"onFailure": "continue"`](#block-the-action-when-a-hook-fails) ke hook

969* **Hook keluar dengan 1 untuk memberi peringatan tetapi harus memblokir ketika crash**: dengan `"onFailure": "continue"`, panggilan dilanjutkan pada exit code 1, baik itu peringatan maupun crash. Tambahkan `"onFailure": "block"` sebagai gantinya, dan akhiri skrip dengan exit code 0 di bagian yang memberi peringatan, sehingga panggilan tersebut dilanjutkan. Untuk tetap menampilkan peringatan pada `PreToolUse`, cetak peringatan ke stdout sebagai field [`systemMessage`](#json-output) dari satu objek JSON.

970* **Hook ditulis untuk Bash**: tanpa Git Bash, hook [berbentuk shell](#exec-form-and-shell-form) tanpa `shell` yang diatur berjalan di PowerShell, tempat hook tersebut dapat gagal. Instal [Git for Windows](https://git-scm.com/downloads/win), atau atur [`CLAUDE_CODE_GIT_BASH_PATH`](https://code.claude.com/docs/id/env-vars) jika Git Bash terinstal di lokasi yang tidak ditemukan Claude Code. Lalu mulai sesi baru.

968* **Hook menjalankan satu `.exe`, bukan file `.cmd` atau `.bat`**: letakkan program di `command` dan argumennya di `args` untuk menggunakan bentuk exec, lalu tambahkan `"onFailure": "block"`. Claude Code kemudian memulai program tanpa shell. Tanpa `"onFailure": "block"`, panggilan dapat dilanjutkan ketika program gagal, tidak ada, atau mengalami timeout971* **Hook menjalankan satu `.exe`, bukan file `.cmd` atau `.bat`**: letakkan program di `command` dan argumennya di `args` untuk menggunakan bentuk exec, lalu tambahkan `"onFailure": "block"`. Claude Code kemudian memulai program tanpa shell. Tanpa `"onFailure": "block"`, panggilan dapat dilanjutkan ketika program gagal, tidak ada, atau mengalami timeout

969* **Hook keluar dengan 1 untuk memberi peringatan tetapi harus memblokir ketika crash**: dengan `"onFailure": "continue"`, panggilan dilanjutkan pada exit code 1, baik itu peringatan maupun crash. Tambahkan `"onFailure": "block"` sebagai gantinya, dan akhiri skrip dengan exit code 0 di bagian yang memberi peringatan, sehingga panggilan tersebut dilanjutkan. Untuk menampilkan peringatan pada `PreToolUse` setelah exit code 0, cetak peringatan ke stdout di field [`systemMessage`](#json-output) dari satu objek JSON

970* **Hook penjaga PowerShell yang harus memblokir saat gagal**: dengan `onFailure` tidak diatur, hook ini berhenti memblokir setelah Git for Windows terinstal dan Claude Code menemukan Git Bash. Tambahkan `"onFailure": "block"` sehingga kegagalan atau timeout memblokir panggilan dengan atau tanpa Git Bash. Atur juga `"shell": "powershell"` sehingga hook tetap berjalan di PowerShell sejak saat itu alih-alih di Git Bash972* **Hook penjaga PowerShell yang harus memblokir saat gagal**: dengan `onFailure` tidak diatur, hook ini berhenti memblokir setelah Git for Windows terinstal dan Claude Code menemukan Git Bash. Tambahkan `"onFailure": "block"` sehingga kegagalan atau timeout memblokir panggilan dengan atau tanpa Git Bash. Atur juga `"shell": "powershell"` sehingga hook tetap berjalan di PowerShell sejak saat itu alih-alih di Git Bash

971 973 

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

973 

974Sebelum v2.1.309, pesannya berbunyi `blocking because Git Bash wasn't found and this hook doesn't set "shell" to "powershell", so only exit code 0 or 2 counts as its verdict.`974Sebelum v2.1.309, pesannya berbunyi `blocking because Git Bash wasn't found and this hook doesn't set "shell" to "powershell", so only exit code 0 or 2 counts as its verdict.`

975 975 

976#### PowerShell started no program

977 

978Hook dengan error ini berjalan di PowerShell, yang mencetak `command` yang hanya berisi string bertanda kutip, seperti `"command": "\"C:\\Tools\\guard.exe\""`, alih-alih menjalankannya.

979 

980* **Untuk mencetak teks, seperti JSON**: atur `"shell": "powershell"`, dan hook keluar dengan 0

981* **Untuk menjalankan file `.ps1`, `.cmd`, atau `.bat`, atau `.exe` yang path-nya memiliki variabel**: atur `"shell": "powershell"` dan letakkan `&` sebelum path yang diberi tanda kutip. Biarkan `$HOME` seperti yang tertulis, dan tuliskan environment variable seperti [contoh `check.ps1`](#reference-scripts-by-path-in-powershell-hooks) menuliskan `$env:CLAUDE_PROJECT_DIR`

982* **Untuk menjalankan satu `.exe` pada path tanpa `$`**: hapus tanda kutip bagian dalam dari `command`, lalu terapkan [perbaikan untuk hook yang menjalankan satu `.exe`](#failed-hooks-on-windows-without-git-bash), dengan menulis `"args": []` jika program tidak menerima argumen

983* **Untuk menjalankan skrip yang ditulis untuk Bash**: terapkan [perbaikan untuk hook yang ditulis untuk Bash](#failed-hooks-on-windows-without-git-bash)

984 

976#### Perilaku exit code 2 per event985#### Perilaku exit code 2 per event

977 986 

978Exit code 2 adalah cara hook memberi sinyal "berhenti, jangan lakukan ini." Efeknya bergantung pada event, karena beberapa event mewakili tindakan yang dapat diblokir (seperti panggilan tool yang belum terjadi) dan yang lain mewakili hal-hal yang sudah terjadi atau tidak dapat dicegah.987Exit code 2 adalah cara hook memberi sinyal "berhenti, jangan lakukan ini." Efeknya bergantung pada event, karena beberapa event mewakili tindakan yang dapat diblokir (seperti panggilan tool yang belum terjadi) dan yang lain mewakili hal-hal yang sudah terjadi atau tidak dapat dicegah.


4187}4196}

4188```4197```

4189 4198 

4199### Mereferensikan skrip berdasarkan jalur dalam hook PowerShell

4200 

4190Untuk mereferensikan root proyek dari perintah bentuk shell PowerShell, tulis `${CLAUDE_PROJECT_DIR}` atau `$env:CLAUDE_PROJECT_DIR`. Claude Code menulis ulang placeholder `${CLAUDE_PROJECT_DIR}`, `${CLAUDE_PLUGIN_ROOT}`, dan `${CLAUDE_PLUGIN_DATA}` dalam perintah bentuk shell PowerShell ke bentuk `${env:NAME}` PowerShell, baik hook didefinisikan dalam `settings.json`, plugin, atau skill. PowerShell kemudian menyelesaikan nilai dari lingkungan yang diekspor setelah parsing, jadi placeholder bekerja di dalam string dengan tanda kutip ganda tetapi tidak di dalam string dengan tanda kutip tunggal, di mana PowerShell tidak pernah memperluas variabel.4201Untuk mereferensikan root proyek dari perintah bentuk shell PowerShell, tulis `${CLAUDE_PROJECT_DIR}` atau `$env:CLAUDE_PROJECT_DIR`. Claude Code menulis ulang placeholder `${CLAUDE_PROJECT_DIR}`, `${CLAUDE_PLUGIN_ROOT}`, dan `${CLAUDE_PLUGIN_DATA}` dalam perintah bentuk shell PowerShell ke bentuk `${env:NAME}` PowerShell, baik hook didefinisikan dalam `settings.json`, plugin, atau skill. PowerShell kemudian menyelesaikan nilai dari lingkungan yang diekspor setelah parsing, jadi placeholder bekerja di dalam string dengan tanda kutip ganda tetapi tidak di dalam string dengan tanda kutip tunggal, di mana PowerShell tidak pernah memperluas variabel.

4191 4202 

4192Jangan tulis ejaan bare `$CLAUDE_PROJECT_DIR` dalam hook PowerShell. PowerShell menguraikannya sebagai variabel lokal yang tidak terdefinisi dan menyelesaikannya ke `$null`, yang meninggalkan jalur skrip tanpa awalan root proyeknya. Claude Code tidak menulis ulang bentuk itu; sebaliknya, ia mencatat peringatan dalam [debug log](#debug-hooks).4203Jangan tulis ejaan bare `$CLAUDE_PROJECT_DIR` dalam hook PowerShell. PowerShell menguraikannya sebagai variabel lokal yang tidak terdefinisi dan menyelesaikannya ke `$null`, yang meninggalkan jalur skrip tanpa awalan root proyeknya. Claude Code tidak menulis ulang bentuk itu; sebaliknya, ia mencatat peringatan dalam [debug log](#debug-hooks).

jetbrains.md +1 −1

Details

61/ide61/ide

62```62```

63 63 

64Ketika koneksi berhasil, Claude Code mengonfirmasi dengan pesan seperti `Connected to IntelliJ IDEA.` Jika Claude Code mendeteksi IDE yang sedang berjalan yang tidak memiliki plugin, `/ide` menginstal plugin untuk Anda dan meminta Anda untuk memulai ulang IDE.64Ketika koneksi berhasil, Claude Code mengonfirmasi dengan pesan seperti `Connected to IntelliJ IDEA.`

65 65 

66Jika Anda ingin Claude memiliki akses ke file yang sama dengan IDE Anda, mulai Claude Code dari direktori yang sama dengan root proyek IDE Anda.66Jika Anda ingin Claude memiliki akses ke file yang sama dengan IDE Anda, mulai Claude Code dari direktori yang sama dengan root proyek IDE Anda.

67 67 

Details

519| Kesalahan `400` pada setiap permintaan, dalam kata-kata gateway sendiri menolak skema input alat atau `pattern`-nya, pada Claude Code v2.1.265 hingga v2.1.267 | Dalam peluncuran bertahap pada versi tersebut, skema [alat Artifact](https://code.claude.com/docs/id/artifacts.md#availability) membawa ekspresi reguler dengan kelas karakter Unicode `\p{...}`. API Anthropic menerimanya, tetapi gateway atau upstream yang memeriksa `pattern` skema setiap alat dengan mesin regex-nya sendiri menolak seluruh permintaan | Perbarui ke v2.1.268 atau lebih baru, yang tidak mengirim ekspresi reguler. Pada versi yang terpengaruh, [matikan artifacts](https://code.claude.com/docs/id/artifacts.md#disable-artifacts), yang menghapus alat dan skemanya dari permintaan |519| Kesalahan `400` pada setiap permintaan, dalam kata-kata gateway sendiri menolak skema input alat atau `pattern`-nya, pada Claude Code v2.1.265 hingga v2.1.267 | Dalam peluncuran bertahap pada versi tersebut, skema [alat Artifact](https://code.claude.com/docs/id/artifacts.md#availability) membawa ekspresi reguler dengan kelas karakter Unicode `\p{...}`. API Anthropic menerimanya, tetapi gateway atau upstream yang memeriksa `pattern` skema setiap alat dengan mesin regex-nya sendiri menolak seluruh permintaan | Perbarui ke v2.1.268 atau lebih baru, yang tidak mengirim ekspresi reguler. Pada versi yang terpengaruh, [matikan artifacts](https://code.claude.com/docs/id/artifacts.md#disable-artifacts), yang menghapus alat dan skemanya dari permintaan |

520| Kesalahan `400` pada setiap permintaan, dalam kata-kata gateway sendiri menolak jenis alat yang tidak dikenali, seperti `Input tag 'advisor_20260301'`, pada Claude Code v2.1.275 | Dalam peluncuran bertahap pada versi itu, permintaan membawa entri [alat advisor](https://code.claude.com/docs/id/advisor.md) bahkan dengan advisor dimatikan. API Anthropic menerimanya, tetapi gateway atau upstream yang memvalidasi jenis alat menolak seluruh permintaan; satu yang [meneruskan bidang badan permintaan tanpa perubahan](https://code.claude.com/docs/id/llm-gateway-protocol.md#forward-as-open-lists) meneruskannya tanpa terpengaruh. Entri adalah deklarasi yang tidak membawa konten percakapan | Perbarui ke v2.1.276 atau lebih baru, yang tidak mengirim entri di belakang gateway `ANTHROPIC_BASE_URL` kecuali Anda menghidupkan advisor. Pada v2.1.275, atur [`CLAUDE_CODE_DISABLE_ADVISOR_TOOL=1`](https://code.claude.com/docs/id/env-vars), yang menghapus entri dari permintaan |520| Kesalahan `400` pada setiap permintaan, dalam kata-kata gateway sendiri menolak jenis alat yang tidak dikenali, seperti `Input tag 'advisor_20260301'`, pada Claude Code v2.1.275 | Dalam peluncuran bertahap pada versi itu, permintaan membawa entri [alat advisor](https://code.claude.com/docs/id/advisor.md) bahkan dengan advisor dimatikan. API Anthropic menerimanya, tetapi gateway atau upstream yang memvalidasi jenis alat menolak seluruh permintaan; satu yang [meneruskan bidang badan permintaan tanpa perubahan](https://code.claude.com/docs/id/llm-gateway-protocol.md#forward-as-open-lists) meneruskannya tanpa terpengaruh. Entri adalah deklarasi yang tidak membawa konten percakapan | Perbarui ke v2.1.276 atau lebih baru, yang tidak mengirim entri di belakang gateway `ANTHROPIC_BASE_URL` kecuali Anda menghidupkan advisor. Pada v2.1.275, atur [`CLAUDE_CODE_DISABLE_ADVISOR_TOOL=1`](https://code.claude.com/docs/id/env-vars), yang menghapus entri dari permintaan |

521| Model hilang dari pemilih `/model` | Nama model gateway tidak ada dalam daftar bawaan Claude Code, atau Claude Code menampilkan lineup [`modelPicker`](https://code.claude.com/docs/id/settings-reference#modelpicker) yang menggantikan opsi bawaan | Aktifkan [penemuan model gateway](#add-gateway-models-to-the-model-picker) atau tambahkan nama dengan variabel [konfigurasi model](https://code.claude.com/docs/id/model-config.md). Jika Claude Code menampilkan lineup `modelPicker` yang menggantikan, tambahkan model gateway ke dalamnya, atau minta administrator Anda untuk menambahkannya ketika pengaturan terkelola menyediakannya |521| Model hilang dari pemilih `/model` | Nama model gateway tidak ada dalam daftar bawaan Claude Code, atau Claude Code menampilkan lineup [`modelPicker`](https://code.claude.com/docs/id/settings-reference#modelpicker) yang menggantikan opsi bawaan | Aktifkan [penemuan model gateway](#add-gateway-models-to-the-model-picker) atau tambahkan nama dengan variabel [konfigurasi model](https://code.claude.com/docs/id/model-config.md). Jika Claude Code menampilkan lineup `modelPicker` yang menggantikan, tambahkan model gateway ke dalamnya, atau minta administrator Anda untuk menambahkannya ketika pengaturan terkelola menyediakannya |

522| `/fast` melaporkan `Fast mode unavailable due to network connectivity issues` sementara permintaan inference bekerja | Pemeriksaan ketersediaan [fast mode](https://code.claude.com/docs/id/fast-mode.md) berjalan langsung ke `api.anthropic.com` dan tidak mengikuti `ANTHROPIC_BASE_URL`, jadi egress langsung yang diblokir gagal pemeriksaan. Pesan yang sama muncul di jaringan terbuka ketika pemeriksaan menyajikan kunci yang dikeluarkan gateway dari `ANTHROPIC_API_KEY` atau `apiKeyHelper` dan Anthropic menolaknya | Daftar putih `api.anthropic.com` jika egress diblokir, atau atur variabel skip; untuk kunci gateway yang ditolak hanya variabel skip yang membantu. Lihat [gunakan fast mode di belakang proxy dan LLM gateway](https://code.claude.com/docs/id/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |522| `/fast` melaporkan `Fast mode unavailable due to network connectivity issues` sementara permintaan inference bekerja | Pemeriksaan ketersediaan [fast mode](https://code.claude.com/docs/id/fast-mode.md) berjalan langsung ke `api.anthropic.com` dan tidak mengikuti `ANTHROPIC_BASE_URL`, jadi egress langsung yang diblokir gagal pemeriksaan | Tambahkan `api.anthropic.com` ke allowlist jika egress diblokir, atau atur variabel skip. Lihat [gunakan fast mode di belakang proxy dan LLM gateway](https://code.claude.com/docs/id/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

523| `/fast` melaporkan `Fast mode has been disabled by your organization` dalam sesi yang diautentikasi dengan `ANTHROPIC_AUTH_TOKEN`, meskipun organisasi memiliki fast mode yang diaktifkan | Pemeriksaan ketersediaan memerlukan login claude.ai atau kunci API Anthropic; dengan hanya token bearer, Claude Code memperlakukan fast mode sebagai dinonaktifkan tanpa mengirim pemeriksaan | Atur `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`; lihat [gunakan fast mode di belakang proxy dan LLM gateway](https://code.claude.com/docs/id/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |523| `/fast` melaporkan `Fast mode is currently unavailable` dalam sesi yang diautentikasi dengan kunci yang dikeluarkan gateway di `ANTHROPIC_API_KEY` | Selama `ANTHROPIC_BASE_URL` mengarah ke gateway Anda, Claude Code menahan dari `api.anthropic.com` kunci yang tidak berformat kunci API Anthropic. Pemeriksaan ketersediaan [fast mode](https://code.claude.com/docs/id/fast-mode.md) kemudian tidak dikirim, dan tanpa pemeriksaan berhasil sebelumnya yang tersimpan di cache, Claude Code memperlakukan fast mode sebagai tidak tersedia | Atur `CLAUDE_CODE_SKIP_FAST_MODE_NETWORK_ERRORS=1`; lihat [gunakan fast mode di belakang proxy dan LLM gateway](https://code.claude.com/docs/id/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

524| `/fast` melaporkan `Fast mode has been disabled by your organization` dalam sesi yang diautentikasi dengan `ANTHROPIC_AUTH_TOKEN`, meskipun organisasi memiliki fast mode yang diaktifkan | Pemeriksaan ketersediaan memerlukan login claude.ai atau kunci API; dengan hanya token bearer, Claude Code memperlakukan fast mode sebagai dinonaktifkan tanpa mengirim pemeriksaan | Atur `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1`; lihat [gunakan fast mode di belakang proxy dan LLM gateway](https://code.claude.com/docs/id/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) |

524| Claude Code meminta Anda untuk masuk meskipun [tes curl](#verify-the-connection) berhasil | CLI tidak memiliki kredensial sendiri: URL dasar yang dapat dijangkau bukan satu, dan dalam sesi interaktif blok `env` di `.claude/settings.json` atau `.claude/settings.local.json` proyek hanya berlaku setelah wizard first-run dan [prompt kepercayaan](https://code.claude.com/docs/id/permissions.md#what-runs-before-you-trust-a-folder) | Atur `ANTHROPIC_AUTH_TOKEN` di mana pun Claude Code membaca sebelum pengaturan first-run: ekspor shell, blok `env` di `~/.claude/settings.json`, atau pengaturan terkelola |525| Claude Code meminta Anda untuk masuk meskipun [tes curl](#verify-the-connection) berhasil | CLI tidak memiliki kredensial sendiri: URL dasar yang dapat dijangkau bukan satu, dan dalam sesi interaktif blok `env` di `.claude/settings.json` atau `.claude/settings.local.json` proyek hanya berlaku setelah wizard first-run dan [prompt kepercayaan](https://code.claude.com/docs/id/permissions.md#what-runs-before-you-trust-a-folder) | Atur `ANTHROPIC_AUTH_TOKEN` di mana pun Claude Code membaca sebelum pengaturan first-run: ekspor shell, blok `env` di `~/.claude/settings.json`, atau pengaturan terkelola |

525| `ANTHROPIC_API_KEY` diatur tetapi diabaikan, tanpa prompt | Kunci memerlukan persetujuan satu kali dalam sesi interaktif, dan kunci yang sebelumnya ditolak diabaikan tanpa bertanya lagi | Aktifkannya di bawah `/config` dengan opsi `Use custom API key` |526| `ANTHROPIC_API_KEY` diatur tetapi diabaikan, tanpa prompt | Kunci memerlukan persetujuan satu kali dalam sesi interaktif, dan kunci yang sebelumnya ditolak diabaikan tanpa bertanya lagi | Aktifkannya di bawah `/config` dengan opsi `Use custom API key` |

526| `This machine's managed settings require a first-party login`, atau [`Administrator policy requires a Cloud gateway sign-in`](https://code.claude.com/docs/id/errors#administrator-policy-requires-a-cloud-gateway-sign-in) ketika pengaturan terkelola menetapkan `forceLoginMethod` ke `"gateway"` atau juga menetapkan `forceLoginGatewayUrl` | Pengaturan terkelola menyertakan `forceLoginMethod` atau `forceLoginOrgUUID`, yang tidak dapat hidup berdampingan dengan `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, atau `apiKeyHelper` | Administrator Anda harus menghapus `forceLoginMethod`, `forceLoginOrgUUID`, dan `forceLoginGatewayUrl` dari pengaturan terkelola untuk menggunakan kredensial gateway, atau menghapus kredensial gateway dan menggunakan sign-in yang diminta pengaturan terkelola. Keduanya tidak dapat digabungkan |527| `This machine's managed settings require a first-party login`, atau [`Administrator policy requires a Cloud gateway sign-in`](https://code.claude.com/docs/id/errors#administrator-policy-requires-a-cloud-gateway-sign-in) ketika pengaturan terkelola menetapkan `forceLoginMethod` ke `"gateway"` atau juga menetapkan `forceLoginGatewayUrl` | Pengaturan terkelola menyertakan `forceLoginMethod` atau `forceLoginOrgUUID`, yang tidak dapat hidup berdampingan dengan `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, atau `apiKeyHelper` | Administrator Anda harus menghapus `forceLoginMethod`, `forceLoginOrgUUID`, dan `forceLoginGatewayUrl` dari pengaturan terkelola untuk menggunakan kredensial gateway, atau menghapus kredensial gateway dan menggunakan sign-in yang diminta pengaturan terkelola. Keduanya tidak dapat digabungkan |

mcp.md +4 −4

Details

250 250 

251Status dalam daftar berikut melaporkan keputusan konfigurasi, bukan upaya koneksi, sehingga Claude Code mencetaknya tanpa terhubung ke server:251Status dalam daftar berikut melaporkan keputusan konfigurasi, bukan upaya koneksi, sehingga Claude Code mencetaknya tanpa terhubung ke server:

252 252 

253* ``⏸ Pending approval (run `claude` to approve)``: server bercakupan proyek dari `.mcp.json` yang belum Anda setujui. Claude Code menampilkannya di `claude mcp list` maupun `claude mcp get <name>`. Jalankan `claude` secara interaktif untuk meninjau dan menyetujuinya.253* ``⏸ Pending approval (run `claude` to approve)``: server dengan cakupan proyek dari `.mcp.json` yang belum Anda setujui. Claude Code menampilkannya di `claude mcp list` maupun `claude mcp get <name>`. Jalankan `claude` secara interaktif untuk meninjau dan menyetujuinya.

254* `✘ Rejected (see disabledMcpjsonServers in settings)`: server `.mcp.json` yang ditolak oleh entri [`disabledMcpjsonServers`](https://code.claude.com/docs/id/settings-reference#disabledmcpjsonservers). Claude Code hanya menampilkannya di `claude mcp get <name>`.254* `✘ Rejected (see disabledMcpjsonServers in settings)`: server `.mcp.json` yang ditolak oleh entri [`disabledMcpjsonServers`](https://code.claude.com/docs/id/settings-reference#disabledmcpjsonservers). Claude Code hanya menampilkannya di `claude mcp get <name>`.

255* `⊘ Disabled for this project (re-enable via /mcp)`: server yang disebutkan dalam daftar [`disabledMcpServers`](#disable-a-server-without-removing-it) proyek. Claude Code menampilkannya di `claude mcp list` maupun `claude mcp get <name>`. Aktifkan kembali server dari panel `/mcp`.255* `⊘ Disabled for this project (re-enable via /mcp)`: server yang disebutkan dalam daftar [`disabledMcpServers`](#disable-a-server-without-removing-it) proyek. Claude Code menampilkannya di `claude mcp list` maupun `claude mcp get <name>`. Aktifkan kembali server dari panel `/mcp`.

256 256 


384Retry tersebut tidak berlaku dalam kasus berikut:384Retry tersebut tidak berlaku dalam kasus berikut:

385 385 

386* Koneksi pertama server stdio. Untuk mencobanya lagi, lihat [Server stdio yang keluar atau gagal dimulai](#stdio-servers-that-exit-or-fail-to-start)386* Koneksi pertama server stdio. Untuk mencobanya lagi, lihat [Server stdio yang keluar atau gagal dimulai](#stdio-servers-that-exit-or-fail-to-start)

387* Koneksi pertama server WebSocket387* Koneksi pertama server WebSocket. Untuk mencobanya lagi dalam sesi terminal interaktif, pilih **Reconnect** dari menu server di `/mcp`

388* Kesalahan autentikasi atau not-found, karena memerlukan perubahan konfigurasi untuk menyelesaikannya. Ketika [`headersHelper`](#use-dynamic-headers-for-custom-authentication) adalah satu-satunya sumber header `Authorization` server, Claude Code tetap mencoba ulang kesalahan autentikasi, karena Claude Code menjalankan ulang helper pada setiap upaya dan dapat memperoleh kredensial baru388* Kesalahan autentikasi atau not-found, karena memerlukan perubahan konfigurasi untuk menyelesaikannya. Ketika [`headersHelper`](#use-dynamic-headers-for-custom-authentication) adalah satu-satunya sumber header `Authorization` server, Claude Code tetap mencoba ulang kesalahan autentikasi, karena Claude Code menjalankan ulang helper pada setiap upaya dan dapat memperoleh kredensial baru

389 389 

390#### Server stdio yang keluar atau gagal dimulai390#### Server stdio yang keluar atau gagal dimulai


403 403 

404#### Mencoba ulang server yang gagal sendiri404#### Mencoba ulang server yang gagal sendiri

405 405 

406Untuk mencoba ulang setiap server yang gagal atau memerlukan autentikasi, jalankan `/mcp reconnect all`. Di terminal interaktif, ini memerlukan Claude Code v2.1.284 atau yang lebih baru, dan versi sebelumnya mencetak `MCP server "all" not found` di sana.406Untuk mencoba ulang setiap server yang gagal atau memerlukan autentikasi, jalankan `/mcp reconnect all` di prompt Claude Code dalam sesi terminal interaktif. Ini memerlukan Claude Code v2.1.284 atau yang lebih baru. Versi yang lebih lama mencetak `MCP server "all" not found`.

407 407 

408#### Cara Claude mengetahui bahwa server gagal408#### Cara Claude mengetahui bahwa server gagal

409 409 


1332 1332 

1333Server dari claude.ai muncul dalam daftar dengan indikator yang menunjukkan bahwa mereka berasal dari claude.ai.1333Server dari claude.ai muncul dalam daftar dengan indikator yang menunjukkan bahwa mereka berasal dari claude.ai.

1334 1334 

1335Anthropic juga menyediakan beberapa connectors itu sendiri, tanpa Anda atau admin menambahkannya. Pada akun tempat [Claude Docs](https://code.claude.com/docs/id/artifacts.md#write-a-document-with-claude-docs) tersedia, `/mcp` mencantumkan `claude.ai Claude Docs` tanpa setup, dan Claude menggunakannya ketika Anda meminta dokumen yang dimaksudkan untuk orang lain. Untuk mematikannya, tambahkan entri `serverName` dari `"claude.ai Claude Docs"` ke `deniedMcpServers` atau gunakan toggle `/mcp`, keduanya dijelaskan dalam [Nonaktifkan connectors claude.ai](#disable-claude-ai-connectors).1335Anthropic juga menyediakan beberapa konektor itu sendiri, tanpa Anda atau admin menambahkannya. Pada akun tempat [Claude Docs](https://code.claude.com/docs/id/artifacts.md#write-a-document-with-claude-docs) tersedia, `/mcp` mencantumkan `claude.ai Claude Docs` tanpa setup, dan Claude menggunakannya ketika Anda meminta dokumen yang dimaksudkan untuk orang lain. Untuk mematikan hanya konektor ini, lihat [Nonaktifkan konektor claude.ai](#disable-claude-ai-connectors).

1336 1336 

1337Claude Code menandai connector sebagai `managed` di `/mcp` dan di manajer [`/plugin`](https://code.claude.com/docs/id/plugins/install) ketika organisasi Anda mengelola autentikasinya di claude.ai. Status managed tidak mengubah cara Claude Code terhubung ke connector atau menerapkan [kontrol alat](#organization-controls-on-connector-tools) organisasi Anda.1337Claude Code menandai connector sebagai `managed` di `/mcp` dan di manajer [`/plugin`](https://code.claude.com/docs/id/plugins/install) ketika organisasi Anda mengelola autentikasinya di claude.ai. Status managed tidak mengubah cara Claude Code terhubung ke connector atau menerapkan [kontrol alat](#organization-controls-on-connector-tools) organisasi Anda.

1338 1338 

model-config.md +7 −2

Details

349 349 

350Ketika pengaturan terkelola yang diterapkan Claude Code mendefinisikan `availableModels`, daftar itu saja yang berlaku, kecuali untuk [platform host yang menyediakan miliknya sendiri](https://code.claude.com/docs/id/settings.md#exceptions-to-managed-settings-precedence): entri dalam pengaturan pengguna, proyek, atau lokal tidak dapat memperpanjangnya, dan Claude Code tidak pernah menggabungkan `availableModels` di seluruh sumber terkelola baik; [bagaimana Claude Code menggabungkan sumber terkelola](https://code.claude.com/docs/id/managed-settings.md#how-claude-code-combines-managed-sources) mengatakan daftar sumber mana yang berlaku. Jika tidak, daftar dari pengaturan pengguna, proyek, dan lokal adalah [digabungkan dan dideduplikasi](https://code.claude.com/docs/id/settings.md#settings-precedence) seperti pengaturan array lainnya. Sebelum Claude Code v2.1.175, entri dari cakupan prioritas lebih rendah digabungkan ke dalam daftar terkelola sebagai gantinya dari diganti olehnya.350Ketika pengaturan terkelola yang diterapkan Claude Code mendefinisikan `availableModels`, daftar itu saja yang berlaku, kecuali untuk [platform host yang menyediakan miliknya sendiri](https://code.claude.com/docs/id/settings.md#exceptions-to-managed-settings-precedence): entri dalam pengaturan pengguna, proyek, atau lokal tidak dapat memperpanjangnya, dan Claude Code tidak pernah menggabungkan `availableModels` di seluruh sumber terkelola baik; [bagaimana Claude Code menggabungkan sumber terkelola](https://code.claude.com/docs/id/managed-settings.md#how-claude-code-combines-managed-sources) mengatakan daftar sumber mana yang berlaku. Jika tidak, daftar dari pengaturan pengguna, proyek, dan lokal adalah [digabungkan dan dideduplikasi](https://code.claude.com/docs/id/settings.md#settings-precedence) seperti pengaturan array lainnya. Sebelum Claude Code v2.1.175, entri dari cakupan prioritas lebih rendah digabungkan ke dalam daftar terkelola sebagai gantinya dari diganti olehnya.

351 351 

352Dalam daftar efektif, entri yang menyebutkan model tertentu dalam keluarga, baik awalan versi atau ID model lengkap, menonaktifkan entri wildcard keluarga itu: `["sonnet", "claude-sonnet-4-5"]` memungkinkan hanya versi Sonnet 4.5, bukan setiap model Sonnet.352Dalam daftar efektif, entri yang menyebutkan model tertentu dalam keluarga, baik awalan versi maupun ID model lengkap, menonaktifkan entri wildcard keluarga itu. Misalnya, dengan `["sonnet", "claude-sonnet-4-5"]`, pengguna hanya dapat memilih ID model yang [cocok](#restrict-model-selection) dengan `claude-sonnet-4-5`, bukan setiap model Sonnet.

353 353 

354### ID model Mantle354### ID model Mantle

355 355 


947>947>

948> Allowlist `availableModels` yang dikirimkan melalui [MDM atau file pengaturan terkelola](https://code.claude.com/docs/id/managed-settings.md#delivery-mechanisms) masih berlaku saat menggunakan penyedia pihak ketiga; [pengaturan yang dikelola server tidak dikirimkan di sana](https://code.claude.com/docs/id/server-managed-settings.md#platform-availability).948> Allowlist `availableModels` yang dikirimkan melalui [MDM atau file pengaturan terkelola](https://code.claude.com/docs/id/managed-settings.md#delivery-mechanisms) masih berlaku saat menggunakan penyedia pihak ketiga; [pengaturan yang dikelola server tidak dikirimkan di sana](https://code.claude.com/docs/id/server-managed-settings.md#platform-availability).

949>949>

950> Penyaringan cocok pada alias model seperti `opus`, awalan versi seperti `claude-opus-4-8`, atau ID model lengkap bentuk penyedia. Awalan spesifik penyedia seperti `us.anthropic.` tidak dilepas, jadi untuk memungkinkan model tertentu, daftarkan ID bentuk penyedia lengkapnya, atau petakan melalui [`modelOverrides`](#override-model-ids-per-version). Untuk model yang ditetapkan, ID itu adalah nilai yang Anda atur dalam variabel `ANTHROPIC_DEFAULT_*_MODEL` miliknya. Akhiran `[1m]` apa pun dilepas dari entri allowlist dan model yang diminta sebelum pencocokan.950> Penyaringan cocok pada alias model seperti `opus`, awalan versi seperti `claude-opus-4-8`, atau ID model lengkap bentuk penyedia. Awalan spesifik penyedia seperti `us.anthropic.` tidak dilepas, jadi untuk memungkinkan model tertentu, petakan melalui [`modelOverrides`](#override-model-ids-per-version) atau daftarkan ID bentuk penyedia lengkapnya:

951>

952> * **Google Cloud's Agent Platform**: ketika ID yang diminta Claude Code membawa tanggal `@`, seperti `claude-sonnet-4-5@20250929`, sertakan tanggal tersebut dalam entri allowlist Anda. Dengan sendirinya, `claude-sonnet-4-5` tidak cocok dengan ID itu di bawah pengaturan [`availableModelsMatch`](https://code.claude.com/docs/id/settings-reference#availablemodelsmatch) mana pun.

953> * **Model yang ditetapkan**: daftarkan nilai yang Anda atur dalam variabel `ANTHROPIC_DEFAULT_*_MODEL` milik model tersebut

954>

955> Akhiran `[1m]` apa pun dilepas dari entri allowlist dan model yang diminta sebelum pencocokan.

951 956 

952### Sesuaikan tampilan dan kemampuan model yang ditetapkan957### Sesuaikan tampilan dan kemampuan model yang ditetapkan

953 958 

Details

605 605 

606* `prompt.id`: UUID yang menghubungkan prompt pengguna dengan semua event berikutnya hingga prompt selanjutnya. Lihat [Atribut korelasi event](#event-correlation-attributes).606* `prompt.id`: UUID yang menghubungkan prompt pengguna dengan semua event berikutnya hingga prompt selanjutnya. Lihat [Atribut korelasi event](#event-correlation-attributes).

607* `workspace.host_paths`: direktori workspace host yang dipilih di aplikasi desktop, sebagai array string607* `workspace.host_paths`: direktori workspace host yang dipilih di aplikasi desktop, sebagai array string

608* `workflow.run_id`: pengidentifikasi run, berawalan `wf_`, pada event API dan tool yang dipancarkan oleh agent yang termasuk dalam run tool [Workflow](https://code.claude.com/docs/id/workflows.md). Memfilter event berdasarkan satu `workflow.run_id` akan merekonstruksi permintaan API dan hasil tool dari run tersebut. Pengidentifikasi ini mencakup agent yang dimunculkan oleh skrip workflow dan agent apa pun yang dimunculkan oleh agent tersebut, seperti pemanggilan skill. Pengidentifikasi ini cocok dengan pengidentifikasi run yang dilaporkan dalam hasil tool Workflow. Tidak ada pada semua event lainnya.608* `workflow.run_id`: pengidentifikasi run, berawalan `wf_`, pada event API dan tool yang dipancarkan oleh agent yang termasuk dalam run tool [Workflow](https://code.claude.com/docs/id/workflows.md). Memfilter event berdasarkan satu `workflow.run_id` akan merekonstruksi permintaan API dan hasil tool dari run tersebut. Pengidentifikasi ini mencakup agent yang dibuat oleh skrip workflow dan agent apa pun yang pada gilirannya dibuat oleh agent tersebut, seperti pemanggilan skill. Nilainya cocok dengan pengidentifikasi run yang dilaporkan dalam hasil tool Workflow.

609* `workflow.name`: nama workflow, yaitu `meta.name` dari skripnya, dipancarkan bersama `workflow.run_id`. Nama workflow bawaan muncul apa adanya ketika run menjalankan skrip bawaan yang tidak dimodifikasi. Nama yang dibuat pengguna, termasuk salinan skrip bawaan yang telah diedit, diganti dengan `custom` kecuali `OTEL_LOG_TOOL_DETAILS=1` ditetapkan.609* `workflow.name`: nama workflow, yaitu `meta.name` dari skripnya, dipancarkan bersama `workflow.run_id`. Nama workflow bawaan muncul apa adanya ketika run menjalankan skrip bawaan yang tidak dimodifikasi. Nama yang dibuat pengguna, termasuk salinan skrip bawaan yang telah diedit, diganti dengan `custom` kecuali `OTEL_LOG_TOOL_DETAILS=1` ditetapkan.

610* `agent_id`: pengidentifikasi [subagent](https://code.claude.com/docs/id/sub-agents.md) yang memunculkan event, seperti `a3f2c1b4d5e6f7a80`. Event yang membawanya mencakup event API dan tool milik subagent, event [`assistant_response`](#assistant-response-event) miliknya, dan [`subagent_completed`](#subagent-completed-event) untuk subagent yang telah selesai. Tidak ada pada event sesi utama dan event [rekan tim dalam proses](https://code.claude.com/docs/id/agent-teams.md#choose-a-display-mode). [`agent_id` span](#span-attributes) milik subagent memiliki nilai yang sama, atau menambahkan label setelah `a` di awal seperti pada `acompact-3f2c1b4d5e6f7a80`. Memerlukan Claude Code v2.1.310 atau yang lebih baru

611* `parent_agent_id`: `agent_id` dari agent yang membuat atau terakhir melanjutkan subagent yang memunculkan event. Tidak ada ketika agent tersebut adalah sesi utama. Memerlukan Claude Code v2.1.310 atau yang lebih baru

610 612 

611#### Atribut repositori613#### Atribut repositori

612 614 


755| `prompt.id` | Pengidentifikasi UUID v4 yang menautkan semua event yang dihasilkan saat memproses satu prompt pengguna |757| `prompt.id` | Pengidentifikasi UUID v4 yang menautkan semua event yang dihasilkan saat memproses satu prompt pengguna |

756| `event.sequence` | Penghitung berbasis 0 untuk mengurutkan event, dihitung per proses Claude Code, bukan per sesi |758| `event.sequence` | Penghitung berbasis 0 untuk mengurutkan event, dihitung per proses Claude Code, bukan per sesi |

757| `message.uuid` | UUID pesan sebagaimana disimpan dalam transkrip sesi, yaitu file `~/.claude/projects/*/*.jsonl`. Ada pada `assistant_response`, pada `api_response_body`, dan pada `user_prompt` kecuali untuk dispatch perintah, yang dapat menghasilkan nol atau banyak pesan. Pada `assistant_response` dan `api_response_body`, ini adalah entri transkrip terakhir dari respons, yang menjadi rantai `parentUuid` giliran berikutnya. Memerlukan Claude Code v2.1.274 atau lebih baru pada `api_response_body` |759| `message.uuid` | UUID pesan sebagaimana disimpan dalam transkrip sesi, yaitu file `~/.claude/projects/*/*.jsonl`. Ada pada `assistant_response`, pada `api_response_body`, dan pada `user_prompt` kecuali untuk dispatch perintah, yang dapat menghasilkan nol atau banyak pesan. Pada `assistant_response` dan `api_response_body`, ini adalah entri transkrip terakhir dari respons, yang menjadi rantai `parentUuid` giliran berikutnya. Memerlukan Claude Code v2.1.274 atau lebih baru pada `api_response_body` |

758| `request_id` | ID permintaan API yang ditetapkan server, dibaca dari header respons `request-id`, seperti `req_011...`. Pada respons tanpa header `request-id`, seperti pada [Amazon Bedrock](https://code.claude.com/docs/id/amazon-bedrock.md), nilainya berasal dari header `x-amzn-requestid`. Ada pada `api_request`, `api_error`, `api_refusal`, `assistant_response`, dan `api_response_body` ketika respons membawa salah satu header tersebut. Cocok dengan atribut yang sama pada span trace `llm_request`. Sumber `x-amzn-requestid` memerlukan Claude Code v2.1.282 atau lebih baru |760| `request_id` | ID permintaan API yang ditetapkan server, dibaca dari header respons `request-id`, seperti `req_011...`. Pada respons tanpa header `request-id`, seperti pada [Amazon Bedrock](https://code.claude.com/docs/id/amazon-bedrock.md), nilainya berasal dari header `x-amzn-requestid`. Ada pada `api_request`, `api_error`, `api_refusal`, `assistant_response`, `api_response_body`, [`tool_result`](#tool-result-event), dan [`tool_decision`](#tool-decision-event) ketika respons membawa salah satu header tersebut. Cocok dengan atribut yang sama pada span trace `llm_request`. Sumber `x-amzn-requestid` memerlukan Claude Code v2.1.282 atau yang lebih baru |

759| `client_request_id` | UUID yang dibuat klien dan dikirim sebagai header permintaan `x-client-request-id`. Ada pada `api_request` dan `api_error` pada koneksi API pihak pertama; tidak ada pada backend penyedia pihak ketiga dan ketika permintaan dicoba ulang melalui fallback non-streaming. Memasangkan permintaan dengan responsnya dan tetap tersedia untuk kegagalan seperti timeout yang tidak pernah menghasilkan `request_id` server. Cocok dengan atribut yang sama pada span trace `llm_request` |761| `client_request_id` | UUID yang dibuat klien dan dikirim sebagai header permintaan `x-client-request-id`. Ada pada `api_request` dan `api_error` pada koneksi API pihak pertama; tidak ada pada backend penyedia pihak ketiga dan ketika permintaan dicoba ulang melalui fallback non-streaming. Memasangkan permintaan dengan responsnya dan tetap tersedia untuk kegagalan seperti timeout yang tidak pernah menghasilkan `request_id` server. Cocok dengan atribut yang sama pada span trace `llm_request` |

760 762 

761Untuk melacak semua aktivitas yang dipicu oleh satu prompt, filter event Anda berdasarkan nilai `prompt.id` tertentu. Ini akan mengembalikan event user\_prompt, event api\_request apa pun, dan event tool\_result apa pun yang terjadi saat memproses prompt tersebut.763Untuk melacak semua aktivitas yang dipicu oleh satu prompt, filter event Anda berdasarkan nilai `prompt.id` tertentu. Ini akan mengembalikan event user\_prompt, event api\_request apa pun, dan event tool\_result apa pun yang terjadi saat memproses prompt tersebut.


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

821* `tool_name`: Nama tool823* `tool_name`: Nama tool

822* `tool_use_id`: Pengidentifikasi unik untuk pemanggilan tool ini. Cocok dengan `tool_use_id` yang diteruskan ke hook, memungkinkan korelasi antara event OTel dan data yang ditangkap hook.824* `tool_use_id`: Pengidentifikasi unik untuk pemanggilan tool ini. Cocok dengan `tool_use_id` yang diteruskan ke hook, memungkinkan korelasi antara event OTel dan data yang ditangkap hook.

825* `request_id`: [`request_id`](#event-correlation-attributes) dari respons API yang memuat panggilan tool ini, sehingga Anda dapat melakukan join panggilan tersebut dengan event API dari respons itu. Tidak ada ketika respons tersebut tidak memiliki ID permintaan, atau ketika tidak ada respons API yang memuat panggilan tersebut. Memerlukan Claude Code v2.1.310 atau yang lebih baru

823* `success`: `"true"` atau `"false"`826* `success`: `"true"` atau `"false"`

824* `duration_ms`: Waktu eksekusi dalam milidetik827* `duration_ms`: Waktu eksekusi dalam milidetik

825* `error_type`: String kategori error ketika tool gagal, seperti `"Error:ENOENT"` atau `"ShellError"`828* `error_type`: String kategori error ketika tool gagal, seperti `"Error:ENOENT"` atau `"ShellError"`


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

973* `tool_name`: Nama tool (misalnya, "Read", "Edit", "Write", "NotebookEdit")976* `tool_name`: Nama tool (misalnya, "Read", "Edit", "Write", "NotebookEdit")

974* `tool_use_id`: Pengidentifikasi unik untuk pemanggilan tool ini. Cocok dengan `tool_use_id` yang diteruskan ke hook, memungkinkan korelasi antara event OTel dan data yang ditangkap hook.977* `tool_use_id`: Pengidentifikasi unik untuk pemanggilan tool ini. Cocok dengan `tool_use_id` yang diteruskan ke hook, memungkinkan korelasi antara event OTel dan data yang ditangkap hook.

978* `request_id`: [`request_id`](#event-correlation-attributes) dari respons API yang memuat panggilan tool ini, sehingga Anda dapat melakukan join panggilan tersebut dengan event API dari respons itu. Tidak ada ketika respons tersebut tidak memiliki ID permintaan, atau ketika tidak ada respons API yang memuat panggilan tersebut. Memerlukan Claude Code v2.1.310 atau yang lebih baru

975* `decision`: Either `"accept"` atau `"reject"`979* `decision`: Either `"accept"` atau `"reject"`

976* `tool_source`: Selalu ada. Asal-usul tool, sebagai kumpulan tertutup nilai yang ditulis CLI:980* `tool_source`: Selalu ada. Asal-usul tool, sebagai kumpulan tertutup nilai yang ditulis CLI:

977 * `"builtin"`: tool milik CLI sendiri981 * `"builtin"`: tool milik CLI sendiri


1024 * Untuk tool Skill: mencakup `skill_name`1028 * Untuk tool Skill: mencakup `skill_name`

1025 * Untuk tool Agent atau tool Task lama: mencakup `subagent_type`1029 * Untuk tool Agent atau tool Task lama: mencakup `subagent_type`

1026 1030 

1027Jika Anda menurunkan `OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT` dari SDK OpenTelemetry di bawah jumlah atribut pada event `tool_decision`, SDK akan membuang atribut yang ditetapkan terakhir oleh Claude Code. SDK membuang `permission_mode` terlebih dahulu, `classifier_category` kedua, dan `classifier_verdict` ketiga, dan baru membuang atribut lain dari event setelah ketiganya. Urutan ini memerlukan Claude Code v2.1.302 atau lebih baru.1031Jika Anda menurunkan `OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT` milik SDK OpenTelemetry di bawah jumlah atribut pada event `tool_decision`, SDK membuang atribut yang ditetapkan terakhir oleh Claude Code. SDK membuang atribut ini sebelum atribut lain, dalam urutan berikut, melewati atribut yang tidak dibawa event:

1032 

10331. `parent_agent_id`

10342. `agent_id`

10353. `request_id`

10364. `permission_mode`

10375. `classifier_category`

10386. `classifier_verdict`

1039 

1040`permission_mode`, `classifier_category`, dan `classifier_verdict` dibuang dalam urutan ini pada Claude Code v2.1.302 atau yang lebih baru. `parent_agent_id`, `agent_id`, dan `request_id` memerlukan v2.1.310 atau yang lebih baru.

1028 1041 

1029#### Event safety1042#### Event safety

1030 1043 

Details

240 240 

241Dua host intake Datadog hanya membawa telemetri operasional opsional, dan pengaturan [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/id/env-vars) menonaktifkan keduanya. Sesi pada penyedia pihak ketiga tidak pernah mengirim ke host ini, bahkan ketika platform menetapkan [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/id/env-vars) dan metrik telemetri default aktif. Lihat [Telemetry services](https://code.claude.com/docs/id/data-usage.md#telemetry-services) untuk semua yang Claude Code kirim dan cara menonaktifkannya sebelum menyelesaikan daftar putih Anda.241Dua host intake Datadog hanya membawa telemetri operasional opsional, dan pengaturan [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](https://code.claude.com/docs/id/env-vars) menonaktifkan keduanya. Sesi pada penyedia pihak ketiga tidak pernah mengirim ke host ini, bahkan ketika platform menetapkan [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](https://code.claude.com/docs/id/env-vars) dan metrik telemetri default aktif. Lihat [Telemetry services](https://code.claude.com/docs/id/data-usage.md#telemetry-services) untuk semua yang Claude Code kirim dan cara menonaktifkannya sebelum menyelesaikan daftar putih Anda.

242 242 

243### Perutean penyedia cloud dan LLM gateway

244 

243Saat menggunakan [Amazon Bedrock](https://code.claude.com/docs/id/amazon-bedrock.md), [Agent Platform Google Cloud](https://code.claude.com/docs/id/google-vertex-ai.md), [Microsoft Foundry](https://code.claude.com/docs/id/microsoft-foundry.md), atau sesi [Claude apps gateway](https://code.claude.com/docs/id/claude-apps-gateway) yang masuk, lalu lintas model dan autentikasi menuju penyedia atau gateway Anda alih-alih `api.anthropic.com`, `claude.ai`, atau `platform.claude.com`. Alat WebFetch masih memanggil `api.anthropic.com` untuk [domain safety check](https://code.claude.com/docs/id/data-usage.md#webfetch-domain-safety-check) kecuali Anda menetapkan `skipWebFetchPreflight: true` dalam [settings](https://code.claude.com/docs/id/settings.md).245Saat menggunakan [Amazon Bedrock](https://code.claude.com/docs/id/amazon-bedrock.md), [Agent Platform Google Cloud](https://code.claude.com/docs/id/google-vertex-ai.md), [Microsoft Foundry](https://code.claude.com/docs/id/microsoft-foundry.md), atau sesi [Claude apps gateway](https://code.claude.com/docs/id/claude-apps-gateway) yang masuk, lalu lintas model dan autentikasi menuju penyedia atau gateway Anda alih-alih `api.anthropic.com`, `claude.ai`, atau `platform.claude.com`. Alat WebFetch masih memanggil `api.anthropic.com` untuk [domain safety check](https://code.claude.com/docs/id/data-usage.md#webfetch-domain-safety-check) kecuali Anda menetapkan `skipWebFetchPreflight: true` dalam [settings](https://code.claude.com/docs/id/settings.md).

244 246 

245Saat merutekan melalui [LLM gateway](https://code.claude.com/docs/id/llm-gateway) dengan [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/id/llm-gateway-connect#set-the-base-url-and-credential), pemeriksaan ketersediaan [fast mode](https://code.claude.com/docs/id/fast-mode.md) masih memanggil `api.anthropic.com` daripada URL dasar gateway. Pemeriksaan menghormati proxy HTTP yang dikonfigurasi, jadi di mana blokir jaringan adalah penyebabnya, entri daftar putih untuk `api.anthropic.com` dalam proxy adalah perbaikannya. Blokir jaringan hanya gagal pemeriksaan di mana host tidak dapat dijangkau bahkan melalui proxy, dan fast mode kemudian melaporkan kesalahan konektivitas. Kesalahan konektivitas yang sama muncul ketika pemeriksaan menyajikan kredensial yang dikeluarkan gateway yang ditolak Anthropic; daftar putih tidak membantu di sana, karena tidak ada yang diblokir. Lihat [use fast mode behind proxies and LLM gateways](https://code.claude.com/docs/id/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways) untuk variabel yang memulihkannya.247Jika developer Anda menggunakan [fast mode](https://code.claude.com/docs/id/fast-mode.md) di balik [LLM gateway](https://code.claude.com/docs/id/llm-gateway) yang diatur dengan [`ANTHROPIC_BASE_URL`](https://code.claude.com/docs/id/llm-gateway-connect#set-the-base-url-and-credential), pastikan `api.anthropic.com` tetap dapat dijangkau melalui proxy Anda. Saat Claude Code mengirim pemeriksaan ketersediaan fast mode, pemeriksaan tersebut menuju host itu melalui proxy HTTP apa pun yang dikonfigurasi, tidak pernah ke gateway. Untuk kondisi ketika pemeriksaan tidak dikirim, serta variabel yang memulihkan fast mode dalam setiap kasus, lihat [Use fast mode behind proxies and LLM gateways](https://code.claude.com/docs/id/fast-mode.md#use-fast-mode-behind-proxies-and-llm-gateways).

246 248 

247### Daftar putih IP organisasi dan egress proxy249### Daftar putih IP organisasi dan egress proxy

248 250 

Details

106 106 

107Kode dalam modul hook bersarang terlalu dalam, atau rantai import-nya terlalu panjang, sehingga Claude Code tidak dapat memuatnya. Baris dimulai dengan nama mod dan `hooks module did not load:`, kemudian memberikan nama file dan alasan ini.107Kode dalam modul hook bersarang terlalu dalam, atau rantai import-nya terlalu panjang, sehingga Claude Code tidak dapat memuatnya. Baris dimulai dengan nama mod dan `hooks module did not load:`, kemudian memberikan nama file dan alasan ini.

108 108 

109Periksa file tersebut dan file yang dijangkau melalui import-nya untuk menemukan bagian yang paling dalam bersarang, lalu tulis ulang agar tidak bersarang terlalu dalam, atau perpendek rantai import. Jika Anda menginstal mod dan tidak menulisnya, minta penulisnya untuk melakukannya.109Periksa file tersebut dan file yang dijangkau melalui import-nya untuk menemukan bagian yang paling dalam bersarang, lalu tulis ulang agar tidak bersarang terlalu dalam, atau perpendek rantai import. Jika Anda tidak menulis mod tersebut, minta penulisnya untuk memperbaikinya.

110 110 

111### `the parser stopped` atau `the engine ran out of stack loading the file`111### `the parser stopped` atau `the engine ran out of stack loading the file`

112 112 

routines.md +20 −2

Details

25* Tugas yang hanya memiliki pemicu API berjalan ketika Anda memanggil endpoint-nya.25* Tugas yang hanya memiliki pemicu API berjalan ketika Anda memanggil endpoint-nya.

26* Tugas yang hanya memiliki pemicu GitHub berjalan ketika peristiwa repositori yang cocok terjadi.26* Tugas yang hanya memiliki pemicu GitHub berjalan ketika peristiwa repositori yang cocok terjadi.

27 27 

28Tugas terjadwal tersedia pada paket Pro, Max, Team, dan Enterprise. Buat dan kelola di [claude.ai/code/routines](https://claude.ai/code/routines), atau dari CLI dengan `/schedule`. Nama sebelumnya, routines, [masih muncul](#where-the-name-routines-still-appears) di alamat web, CLI, dan API.28Tugas terjadwal tersedia pada paket Pro, Max, Team, dan Enterprise. Buat dan kelola di [claude.ai/code/routines](https://claude.ai/code/routines), atau dari CLI dengan `/schedule`. Nama sebelumnya, routines, [masih muncul](#where-the-name-routines-still-appears).

29 29 

30> [!NOTE]30> [!NOTE]

31>31>


66 66 

67**1. Buka dialog pembuatan**67**1. Buka dialog pembuatan**

68 68 

69Buka [claude.ai/code/routines](https://claude.ai/code/routines) dan klik **New task**. Jika sebuah menu terbuka terlebih dahulu, pilih **Set up manually**. Dialog **New scheduled task** akan terbuka. Opsi lain pada menu, **Create with Claude**, memungkinkan Anda mendeskripsikan tugas dalam obrolan dan meminta Claude membuatnya.69Buka [claude.ai/code/routines](https://claude.ai/code/routines) dan klik **New task** untuk membuka dialog **New scheduled task**. Periksa layar-layar berikut sebelum Anda melanjutkan:

70 

71* Jika tombol bertuliskan **New routine** alih-alih **New task**, klik **New routine** dan lanjutkan dengan [Formulir halaman penuh](#full-page-form).

72* Di aplikasi Desktop, jika menu dengan **Local** dan **Cloud** terbuka, buka [Formulir halaman penuh](#full-page-form).

73* Jika menu terbuka dengan **Create with Claude** dan **Set up manually**, pilih **Set up manually** untuk membuka dialog. **Create with Claude** memungkinkan Anda mendeskripsikan tugas dalam obrolan dan meminta Claude membuatnya sebagai gantinya.

74* Jika halaman penuh terbuka sebagai pengganti dialog, buka [Formulir halaman penuh](#full-page-form).

70 75 

71Jika **Repositories** dan **Environment** sudah ditampilkan saat dialog terbuka, lihat [perbedaan dialog tersebut](#dialog-with-repositories-and-environment-in-the-main-view). Jika tidak, dialog ini juga membuat tugas terjadwal untuk obrolan claude.ai. Untuk menjadikan tugas Anda sebagai apa yang disebut dialog sebagai tugas Claude Code, pilih repositori atau tambahkan pemicu peristiwa GitHub atau API pada langkah-langkah berikutnya. Jenis tugas tersebut menjalankan Claude Code dalam sesi cloud.76Jika **Repositories** dan **Environment** sudah ditampilkan saat dialog terbuka, lihat [perbedaan dialog tersebut](#dialog-with-repositories-and-environment-in-the-main-view). Jika tidak, dialog ini juga membuat tugas terjadwal untuk obrolan claude.ai. Untuk menjadikan tugas Anda sebagai apa yang disebut dialog sebagai tugas Claude Code, pilih repositori atau tambahkan pemicu peristiwa GitHub atau API pada langkah-langkah berikutnya. Jenis tugas tersebut menjalankan Claude Code dalam sesi cloud.

72 77 


126 131 

127Pilih repositori sebelum Anda menambahkan pemicu peristiwa GitHub, karena pemicu tersebut tidak tersedia sampai repositori dipilih.132Pilih repositori sebelum Anda menambahkan pemicu peristiwa GitHub, karena pemicu tersebut tidak tersedia sampai repositori dipilih.

128 133 

134#### Formulir halaman penuh

135 

136Di aplikasi Desktop, jika menu dengan **Local** dan **Cloud** terbuka, pilih **Cloud**. Halaman berjudul **New routine** atau **New scheduled task** akan terbuka. Isi kolom-kolomnya:

137 

138* **Name**: masukkan nama.

139* **Instructions**: masukkan prompt. Di kotak yang sama, pilih model, repositori, dan lingkungan. Untuk mengetahui apa yang dikontrol masing-masing, lihat langkah-langkah di bawah [Buat dari web](#create-from-the-web).

140* **Select a trigger**: pilih **Schedule**, **GitHub event**, atau **API**. Untuk jadwal, lihat [Tambahkan pemicu jadwal](#add-a-schedule-trigger). Untuk [peristiwa GitHub](#add-a-github-trigger), pilih repositori. Untuk [pemicu API](#add-an-api-trigger), salin token dari dialog **API token** yang terbuka setelah Anda mengklik **Create**, karena token hanya ditampilkan sekali. Untuk menggabungkan beberapa pemicu, klik **Add another trigger**.

141* **Connectors**: semua konektor Anda yang terhubung disertakan secara default, jadi hapus yang tidak dibutuhkan tugas.

142 

143Jika **Create** tidak tersedia, arahkan kursor ke tombol tersebut untuk melihat apa yang masih dibutuhkan formulir. Klik **Create**, dan halaman detail tugas akan terbuka.

144 

129### Buat dari CLI145### Buat dari CLI

130 146 

131Jalankan `/schedule` di sesi mana pun untuk membuat tugas terjadwal secara percakapan. Anda juga dapat meneruskan deskripsi secara langsung, untuk tugas berulang seperti `/schedule daily PR review at 9am` atau tugas satu kali seperti `/schedule clean up feature flag in one week`. Claude memandu melalui informasi yang sama yang dikumpulkan dialog web, lalu menyimpan tugas ke akun Anda. Perintah ini juga tersedia dengan alias `/routines`.147Jalankan `/schedule` di sesi mana pun untuk membuat tugas terjadwal secara percakapan. Anda juga dapat meneruskan deskripsi secara langsung, untuk tugas berulang seperti `/schedule daily PR review at 9am` atau tugas satu kali seperti `/schedule clean up feature flag in one week`. Claude memandu melalui informasi yang sama yang dikumpulkan dialog web, lalu menyimpan tugas ke akun Anda. Perintah ini juga tersedia dengan alias `/routines`.


152* **Eksekusi tepat pada jam**: jika Anda menjadwalkan eksekusi tepat pada jam, seperti 9:00, eksekusi dapat dimulai beberapa menit terlambat. Untuk memulai mendekati waktu terjadwal, pilih beberapa menit setelah jam, misalnya 9:07.168* **Eksekusi tepat pada jam**: jika Anda menjadwalkan eksekusi tepat pada jam, seperti 9:00, eksekusi dapat dimulai beberapa menit terlambat. Untuk memulai mendekati waktu terjadwal, pilih beberapa menit setelah jam, misalnya 9:07.

153* **Interval khusus**: untuk frekuensi yang tidak tersedia di preset, buat tugas lalu pilih **Custom** di [dialog edit](#edit-and-control-scheduled-tasks) tugas tersebut. Kemudian masukkan ekspresi cron, seperti `0 */2 * * *` untuk setiap dua jam. Untuk menetapkannya dari CLI, jalankan [`/schedule update`](#manage-scheduled-tasks-from-the-cli). Ekspresi yang berjalan lebih sering dari sekali per jam akan ditolak.169* **Interval khusus**: untuk frekuensi yang tidak tersedia di preset, buat tugas lalu pilih **Custom** di [dialog edit](#edit-and-control-scheduled-tasks) tugas tersebut. Kemudian masukkan ekspresi cron, seperti `0 */2 * * *` untuk setiap dua jam. Untuk menetapkannya dari CLI, jalankan [`/schedule update`](#manage-scheduled-tasks-from-the-cli). Ekspresi yang berjalan lebih sering dari sekali per jam akan ditolak.

154* **Zona waktu**: saat Anda memilih frekuensi preset, masukkan waktu dalam zona waktu lokal Anda.170* **Zona waktu**: saat Anda memilih frekuensi preset, masukkan waktu dalam zona waktu lokal Anda.

171* **Zona waktu ekspresi cron**: jika ekspresi hanya terdiri dari lima kolom, tulis jam dalam UTC, sehingga `0 9 * * 1-5` berjalan pada pukul 9:00 AM UTC di hari kerja. Jika kolom diawali dengan prefiks `CRON_TZ=`, pertahankan prefiks tersebut dan tulis jam dalam zonanya, atau hapus prefiks tersebut dan tulis jam dalam UTC.

155 172 

156#### Jadwalkan eksekusi satu kali173#### Jadwalkan eksekusi satu kali

157 174 


455 472 

456Tugas terjadwal sebelumnya bernama routines, dan tempat-tempat berikut masih menggunakan nama lama tersebut. Masing-masing merujuk pada fitur yang sama:473Tugas terjadwal sebelumnya bernama routines, dan tempat-tempat berikut masih menggunakan nama lama tersebut. Masing-masing merujuk pada fitur yang sama:

457 474 

475* **Aplikasi**: pada beberapa akun, entri sidebar dan judul halaman bertuliskan **Routines**, tombolnya bertuliskan **New routine**, dan label lainnya menyebut routine. Untuk membuat tugas di sana, lihat [Formulir halaman penuh](#full-page-form).

458* **Alamat web**: `claude.ai/code/routines`476* **Alamat web**: `claude.ai/code/routines`

459* **CLI**: alias `/routines` untuk `/schedule`, deskripsi perintah, dan balasan Claude saat menyiapkan tugas477* **CLI**: alias `/routines` untuk `/schedule`, deskripsi perintah, dan balasan Claude saat menyiapkan tugas

460* **API**: path endpoint `/fire`, header beta-nya, `type` responsnya, tag `<routine-fire-payload>`, dan halaman referensi [Trigger a routine through the API](https://platform.claude.com/docs/en/api/claude-code/routines-fire)478* **API**: path endpoint `/fire`, header beta-nya, `type` responsnya, tag `<routine-fire-payload>`, dan halaman referensi [Trigger a routine through the API](https://platform.claude.com/docs/en/api/claude-code/routines-fire)

sandboxing.md +13 −1

Details

537 537 

538* **Di direktori kerja Anda dan direktori di atasnya**: file pengaturan `.claude`, direktori `.claude/skills`, `.claude/agents`, `.claude/commands`, dan `.claude/hooks`, `.mcp.json`, serta file yang dijalankan Claude Code dengan sendirinya, seperti `.claude/workflows` dan `.claude/scheduled_tasks.json`538* **Di direktori kerja Anda dan direktori di atasnya**: file pengaturan `.claude`, direktori `.claude/skills`, `.claude/agents`, `.claude/commands`, dan `.claude/hooks`, `.mcp.json`, serta file yang dijalankan Claude Code dengan sendirinya, seperti `.claude/workflows` dan `.claude/scheduled_tasks.json`

539* **Hanya di direktori kerja Anda**: file startup shell seperti `.bashrc` dan `.zshrc`, `.gitconfig`, direktori `.vscode` dan `.idea`, serta `hooks` dan `config` di dalam `.git`539* **Hanya di direktori kerja Anda**: file startup shell seperti `.bashrc` dan `.zshrc`, `.gitconfig`, direktori `.vscode` dan `.idea`, serta `hooks` dan `config` di dalam `.git`

540* **File yang akan mengubah direktori kerja Anda menjadi repositori git bare**: `HEAD`, `objects`, dan `refs` di tingkat teratas, ditambah entri `config` dan `hooks` yang sudah ada di sana ketika terdapat `HEAD` di sampingnya. File bernama `config` ditolak bahkan tanpa `HEAD`. Di Linux dan WSL2, sandbox menghapus file `HEAD` atau direktori `objects` atau `refs` di tingkat teratas yang muncul saat perintah yang di-sandbox sedang berjalan540* **File yang akan mengubah direktori kerja Anda menjadi repositori git bare**: `HEAD`, `objects`, dan `refs` di tingkat teratas, ditambah entri `config` dan `hooks` yang sudah ada di sana ketika terdapat file atau symlink `HEAD` di sampingnya. File bernama `config` ditolak bahkan tanpa `HEAD`. [`HEAD`, `objects`, atau `refs` yang muncul kemudian dapat dihapus](#when-the-sandbox-deletes-head-objects-or-refs). Di Linux dan WSL2, perintah yang di-sandbox dapat membuatnya jika belum ada.

541* **Di `~/.claude`, atau direktori yang ditunjuk oleh `CLAUDE_CONFIG_DIR`**: sebagian besar isinya, ditambah `~/.claude.json` dan penyimpanan kredensial `.credentials.json`541* **Di `~/.claude`, atau direktori yang ditunjuk oleh `CLAUDE_CONFIG_DIR`**: sebagian besar isinya, ditambah `~/.claude.json` dan penyimpanan kredensial `.credentials.json`

542 542 

543Jika sebuah symlink muncul di jalur file pengaturan yang dilindungi selama sesi, sandbox juga menolak penulisan ke file yang ditunjuknya, dimulai dari perintah berikutnya.543Jika sebuah symlink muncul di jalur file pengaturan yang dilindungi selama sesi, sandbox juga menolak penulisan ke file yang ditunjuknya, dimulai dari perintah berikutnya.


552 552 

553Jika `git merge` atau `git checkout` gagal dengan `unable to unlink old` pada salah satu jalur ini, lihat [Perintah git gagal dengan `unable to unlink old`](#a-git-command-fails-with-unable-to-unlink-old).553Jika `git merge` atau `git checkout` gagal dengan `unable to unlink old` pada salah satu jalur ini, lihat [Perintah git gagal dengan `unable to unlink old`](#a-git-command-fails-with-unable-to-unlink-old).

554 554 

555#### Kapan sandbox menghapus `HEAD`, `objects`, atau `refs`

556 

557Setelah perintah yang di-sandbox selesai, entri `HEAD`, `objects`, atau `refs` tingkat teratas yang lebih baru di direktori kerja Anda dihapus kecuali entri tersebut adalah folder yang berisi konten. Lebih baru berarti entri tersebut belum ada saat sandbox terakhir kali membangun konfigurasinya: saat sesi dimulai, atau setelah perubahan seperti [`/cd`](https://code.claude.com/docs/id/commands).

558 

559Folder `objects` atau `refs` yang lebih baru dengan konten juga dihapus, beserta isinya, ketika file atau symlink `HEAD` ada di sana saat terakhir kali sandbox membangun konfigurasinya. Untuk mempertahankan folder, lihat [Folder bernama `objects` atau `refs` menghilang setelah sebuah perintah](#a-folder-named-objects-or-refs-disappears-after-a-command).

560 

555#### Jalur yang ditolak yang melewati symlink561#### Jalur yang ditolak yang melewati symlink

556 562 

557Di macOS, ketika jalur yang ditolak melewati sebuah symlink, seperti `~/.claude` yang merupakan tautan ke repositori dotfiles, sandbox juga menolak lokasi sebenarnya dari jalur tersebut. Ini mencakup penolakan milik sandbox sendiri serta entri `denyWrite` dan `denyRead` literal milik Anda.563Di macOS, ketika jalur yang ditolak melewati sebuah symlink, seperti `~/.claude` yang merupakan tautan ke repositori dotfiles, sandbox juga menolak lokasi sebenarnya dari jalur tersebut. Ini mencakup penolakan milik sandbox sendiri serta entri `denyWrite` dan `denyRead` literal milik Anda.


881 887 

882Setelah kegagalan, Claude mungkin [menawarkan untuk menjalankan kembali perintah di luar sandbox](#the-unsandboxed-retry-escape-hatch). Setujui retry itu, atau jalankan perintah git sendiri di terminal lain. Jika Anda telah menetapkan `allowUnsandboxedCommands` ke `false`, Claude tidak dapat menawarkan retry, jadi jalankan perintah sendiri.888Setelah kegagalan, Claude mungkin [menawarkan untuk menjalankan kembali perintah di luar sandbox](#the-unsandboxed-retry-escape-hatch). Setujui retry itu, atau jalankan perintah git sendiri di terminal lain. Jika Anda telah menetapkan `allowUnsandboxedCommands` ke `false`, Claude tidak dapat menawarkan retry, jadi jalankan perintah sendiri.

883 889 

890### Folder bernama `objects` atau `refs` menghilang setelah sebuah perintah

891 

892Folder `objects` atau `refs` tingkat atas yang muncul selama sesi dapat [dihapus setelah perintah sandboxed selesai](#when-the-sandbox-deletes-head-objects-or-refs). Tidak menjadi soal apakah folder itu dibuat oleh perintah, Claude, atau Anda. Untuk mempertahankan folder, tinggalkan sesuatu di dalamnya. Jika file atau symlink `HEAD` pernah berada di tingkat atas selama sesi, pindahkan file tersebut, lalu mulai ulang setiap sesi Claude Code yang terbuka di sana.

893 

894Sebelum v2.1.307, folder tersebut dihapus bahkan jika ada sesuatu di dalamnya dan tidak ada `HEAD`. Pada versi yang lebih lama, [perbarui Claude Code](https://code.claude.com/docs/id/setup.md#update-claude-code).

895 

884### Bubblewrap gagal memulai di dalam container896### Bubblewrap gagal memulai di dalam container

885 897 

886Dalam container tanpa privilege, [bubblewrap](#os-level-enforcement) tidak dapat memasang filesystem `/proc` baru, sehingga perintah sandboxed gagal dengan kesalahan `bwrap` seperti `Can't mount proc on /newroot/proc: Operation not permitted`. Atur [`enableWeakerNestedSandbox`](https://code.claude.com/docs/id/settings-reference#sandbox-enableweakernestedsandbox) ke `true` sehingga sandbox melakukan bind-mount terhadap `/proc` yang sudah ada milik container sebagai gantinya. Hanya gunakan pengaturan ini ketika container luar sudah menyediakan batas isolasi yang Anda butuhkan, karena pengaturan ini mengekspos informasi proses ke perintah sandboxed yang akan disembunyikan oleh mount `/proc` baru.898Dalam container tanpa privilege, [bubblewrap](#os-level-enforcement) tidak dapat memasang filesystem `/proc` baru, sehingga perintah sandboxed gagal dengan kesalahan `bwrap` seperti `Can't mount proc on /newroot/proc: Operation not permitted`. Atur [`enableWeakerNestedSandbox`](https://code.claude.com/docs/id/settings-reference#sandbox-enableweakernestedsandbox) ke `true` sehingga sandbox melakukan bind-mount terhadap `/proc` yang sudah ada milik container sebagai gantinya. Hanya gunakan pengaturan ini ketika container luar sudah menyediakan batas isolasi yang Anda butuhkan, karena pengaturan ini mengekspos informasi proses ke perintah sandboxed yang akan disembunyikan oleh mount `/proc` baru.

Details

30 30 

31Dua kotak Claude Code dalam diagram adalah proses sesi: satu runner menjalankan dua sesi sekaligus, hingga kapasitas yang dikonfigurasi. Runner melayani satu [owner](#key-concepts) pada satu waktu dan terkunci ke owner itu ketika mengklaim sesi pertamanya, jadi kode yang diperiksa tidak pernah bercampur antara owner; [Runner lifecycle](#runner-lifecycle) mencakup aturannya.31Dua kotak Claude Code dalam diagram adalah proses sesi: satu runner menjalankan dua sesi sekaligus, hingga kapasitas yang dikonfigurasi. Runner melayani satu [owner](#key-concepts) pada satu waktu dan terkunci ke owner itu ketika mengklaim sesi pertamanya, jadi kode yang diperiksa tidak pernah bercampur antara owner; [Runner lifecycle](#runner-lifecycle) mencakup aturannya.

32 32 

33Anda dapat memulai runner sendiri dan membiarkannya berjalan, atau menjalankan [orchestrator autoscaling](https://code.claude.com/docs/id/self-hosted-environments-configuration.md#on-demand-runners), proses kedua yang Anda host, yang memulai runner saat sesi antri; setiap runner keluar dengan sendirinya ketika pekerjaannya selesai. Bagaimanapun, Anda menyiapkan environment sekali, dan itu muncul di pemilih pada setiap permukaan yang didukung.33Anda dapat memulai runner sendiri dan membiarkannya berjalan, atau menjalankan [orchestrator autoscaling](https://code.claude.com/docs/id/self-hosted-environments-configuration.md#on-demand-runners), proses kedua yang Anda host, yang memulai runner saat sesi antri. Bagaimanapun, Anda menyiapkan environment sekali, dan itu muncul di pemilih pada setiap surface yang didukung.

34 34 

35## Ketersediaan dan batasan35## Ketersediaan dan batasan

36 36 


122 122 

123Proxy egress korporat didukung. Runner dan [orchestrator autoscaling](https://code.claude.com/docs/id/self-hosted-environments-configuration.md#on-demand-runners) opsional menghormati proxy dan variabel mTLS yang dijelaskan dalam [Konfigurasi jaringan](https://code.claude.com/docs/id/network-config.md), seperti `HTTPS_PROXY` dan `NO_PROXY`; atur mereka di lingkungan setiap proses. Variabel mencakup panggilan control-plane, [SCM connector](https://code.claude.com/docs/id/self-hosted-environments-reference.md#scm-connector-flags) WebSocket orchestrator, dan klon bawaan untuk remote HTTPS, dan sesi mewarisinya dari runner. Streaming sesi menggunakan server-sent events melalui HTTPS, jadi proxy dalam jalur tidak boleh membuffer respons.123Proxy egress korporat didukung. Runner dan [orchestrator autoscaling](https://code.claude.com/docs/id/self-hosted-environments-configuration.md#on-demand-runners) opsional menghormati proxy dan variabel mTLS yang dijelaskan dalam [Konfigurasi jaringan](https://code.claude.com/docs/id/network-config.md), seperti `HTTPS_PROXY` dan `NO_PROXY`; atur mereka di lingkungan setiap proses. Variabel mencakup panggilan control-plane, [SCM connector](https://code.claude.com/docs/id/self-hosted-environments-reference.md#scm-connector-flags) WebSocket orchestrator, dan klon bawaan untuk remote HTTPS, dan sesi mewarisinya dari runner. Streaming sesi menggunakan server-sent events melalui HTTPS, jadi proxy dalam jalur tidak boleh membuffer respons.

124 124 

125Jika proxy Anda juga memerlukan header `Proxy-Authorization`, runner dapat menambahkannya ke setiap koneksi yang dibukanya ke proxy; lihat [Autentikasi ke proxy egress](https://code.claude.com/docs/id/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy).125* **Autentikasi proxy**: jika proxy Anda juga memerlukan header `Proxy-Authorization`, runner dapat menambahkannya ke setiap koneksi yang dibukanya ke proxy; lihat [Autentikasi ke proxy egress](https://code.claude.com/docs/id/self-hosted-environments-deploy.md#authenticate-to-an-egress-proxy).

126* **Respons berumur panjang**: jika runner mengambil sesi tetapi Claude tidak pernah menjawab pesan pertamanya, proxy Anda mungkin penyebabnya. Lihat [Sesi diambil, tetapi Claude tidak pernah menjawab pesan pertamanya](https://code.claude.com/docs/id/self-hosted-environments-deploy.md#when-a-sessions-first-message-is-never-answered).

126 127 

127## Apa yang tetap pada infrastruktur Anda128## Apa yang tetap pada infrastruktur Anda

128 129 

Details

36| `CLAUDE_CODE_REMOTE_SESSION_UUID` | ID sesi yang sama dalam bentuk UUID kanonik, untuk sistem yang menggunakan UUID sebagai kunci. |36| `CLAUDE_CODE_REMOTE_SESSION_UUID` | ID sesi yang sama dalam bentuk UUID kanonik, untuk sistem yang menggunakan UUID sebagai kunci. |

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

38| `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. |38| `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_CODE_REMOTE_SLACK_CHANNEL_ID` | Untuk sesi Claude Tag, ID channel Slack atau pesan langsung yang dilayani sesi tersebut atau tempat thread-nya berada, seperti `C0123ABCDE`. Timestamp Slack mengidentifikasi pesan di dalam satu channel, jadi catat ID ini bersama dengan `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS`. Tidak diatur untuk sesi lain, dan dapat juga tidak diatur untuk sesi Claude Tag. |

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. |40| `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`](https://code.claude.com/docs/id/self-hosted-environments-reference#runner-cli-flags); lihat [Reuse a pre-warmed checkout](https://code.claude.com/docs/id/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout). |41| `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`](https://code.claude.com/docs/id/self-hosted-environments-reference#runner-cli-flags); lihat [Reuse a pre-warmed checkout](https://code.claude.com/docs/id/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout). |

41| `CLAUDE_CODE_REMOTE_MCP_CONFIG` | Jalur ke file di `CLAUDE_CONFIG_DIR` yang menyimpan definisi server MCP yang dikirimkan bidang kontrol Anthropic untuk sesi ini. Jika wrapper Anda membangun kembali lingkungan anak, bawa variabel ini. Tanpanya, ketika bidang kontrol memperbarui server yang dikirimkan, anak mematikan setiap server stdio, HTTP, atau SSE yang ditambahkan wrapper Anda dengan [`--mcp-config`](https://code.claude.com/docs/id/cli-reference#cli-flags) yang tidak ada dalam pembaruan tersebut. Memerlukan Claude Code v2.1.299 atau lebih baru. |42| `CLAUDE_CODE_REMOTE_MCP_CONFIG` | Jalur ke file di `CLAUDE_CONFIG_DIR` yang menyimpan definisi server MCP yang dikirimkan bidang kontrol Anthropic untuk sesi ini. Jika wrapper Anda membangun kembali lingkungan anak, bawa variabel ini. Tanpanya, ketika bidang kontrol memperbarui server yang dikirimkan, anak mematikan setiap server stdio, HTTP, atau SSE yang ditambahkan wrapper Anda dengan [`--mcp-config`](https://code.claude.com/docs/id/cli-reference#cli-flags) yang tidak ada dalam pembaruan tersebut. Memerlukan Claude Code v2.1.299 atau lebih baru. |


44 45 

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

46 47 

47`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.48Anda dapat membaca variabel `CLAUDE_CODE_REMOTE_SLACK_*` di wrapper Anda atau [hook `command`](#command), serta di apa yang dijalankan sesi, seperti perintah shell, hook git, dan hook Claude Code. Hook `checkout`, `post-session`, dan `spawn-runner` tidak menerimanya.

48 49 

49### Berikan nilai default untuk variabel yang dapat tidak diatur50### Berikan nilai default untuk variabel yang dapat tidak diatur

50 51 

51`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:-}"`.52Jika skrip Anda menggunakan `set -u`, ekspansikan `CCR_SESSION_ACCOUNT_EMAIL`, `CLAUDE_RUNNER_CLIENT_PLATFORM`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_URL`, `CLAUDE_CODE_REMOTE_SLACK_THREAD_TS`, dan `CLAUDE_CODE_REMOTE_SLACK_CHANNEL_ID` dengan nilai default, seperti `"${CCR_SESSION_ACCOUNT_EMAIL:-}"`. Masing-masing dapat tidak diatur, dan di bawah `set -u` Bash berhenti dengan `unbound variable` ketika mengekspansi variabel yang tidak diatur.

52 53 

53### Beri tanda kutip pada argumen dan variabel yang diekspansi skrip Anda54### Beri tanda kutip pada argumen dan variabel yang diekspansi skrip Anda

54 55 


89* **Teruskan flag tersebut**: akhiri wrapper dengan `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"`, yang meneruskan flag file bersama setiap argumen lainnya. Jangan hapus atau tulis ulang flag tersebut. Jika sebuah sesi kehilangan flag file prompt, sesi berjalan tanpa instruksi yang dikirim bidang kontrol untuknya.90* **Teruskan flag tersebut**: akhiri wrapper dengan `exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@"`, yang meneruskan flag file bersama setiap argumen lainnya. Jangan hapus atau tulis ulang flag tersebut. Jika sebuah sesi kehilangan flag file prompt, sesi berjalan tanpa instruksi yang dikirim bidang kontrol untuknya.

90* **Pada runner v2.1.281 atau lebih baru, flag file yang Anda tambahkan menggantikan milik server, tidak pernah menambahinya**: setiap flag file prompt hanya menerima satu nilai dan Claude Code mempertahankan kemunculan terakhir, jadi jika Anda menambahkan `--append-system-prompt-file <path>` setelah `"$@"`, isi file Anda menggantikan instruksi tambahan dari server. Untuk menambahkan instruksi di atas instruksi server, letakkan di `CLAUDE.md` pada image runner, yang [disemai runner ke konfigurasi tingkat pengguna setiap sesi](#how-each-session’s-config-is-assembled).91* **Pada runner v2.1.281 atau lebih baru, flag file yang Anda tambahkan menggantikan milik server, tidak pernah menambahinya**: setiap flag file prompt hanya menerima satu nilai dan Claude Code mempertahankan kemunculan terakhir, jadi jika Anda menambahkan `--append-system-prompt-file <path>` setelah `"$@"`, isi file Anda menggantikan instruksi tambahan dari server. Untuk menambahkan instruksi di atas instruksi server, letakkan di `CLAUDE.md` pada image runner, yang [disemai runner ke konfigurasi tingkat pengguna setiap sesi](#how-each-session’s-config-is-assembled).

91 92 

93#### Perbaiki `Argument list too long` saat awal sesi

94 

95Di Linux, jika Anda menggabungkan prompt bidang kontrol dan teks Anda sendiri ke dalam satu argumen `--append-system-prompt`, runner menulis baris seperti ini ke log setelah argumen tersebut mencapai 128 KB:

96 

97```text theme={null}

98Session <id> finished: failed — reason: child exited 126: /opt/wrapper.sh: line 9: /usr/local/bin/claude: Argument list too long

99```

100 

101Linux membatasi setiap argumen tunggal hingga 32 halaman memori, atau 128 KB dengan ukuran halaman umum 4 KB. Angka dari `getconf ARG_MAX`, sering kali 2 MB, adalah batas terpisah untuk semua argumen dan lingkungan secara bersamaan.

102 

103Pada Claude Code v2.1.283 atau lebih baru, biarkan flag file tetap di `"$@"` dan teruskan hanya teks Anda sendiri sebagai `--append-system-prompt`. Claude Code [menggunakan keduanya](https://code.claude.com/docs/id/cli-reference.md#system-prompt-flags), prompt bidang kontrol terlebih dahulu, lalu teks Anda sendiri:

104 

105```bash theme={null}

106exec "$CLAUDE_RUNNER_CLAUDE_BIN" "$@" --append-system-prompt "$(cat /opt/team-instructions.md)"

107```

108 

109Di Linux, jika teks Anda sendiri mencapai 128 KB, pindahkan ke `CLAUDE.md` pada image runner, karena teks tersebut tetap merupakan satu argumen.

110 

111Pada v2.1.281 atau v2.1.282, perintah tersebut keluar dengan `Cannot use both --append-system-prompt and --append-system-prompt-file`. Pada versi sebelumnya, teks Anda menggantikan prompt bidang kontrol tanpa error. Pada versi mana pun di antaranya, perbarui terlebih dahulu, atau pindahkan teks Anda sendiri ke `CLAUDE.md`.

112 

92### Sediakan kredensial yang dibatasi untuk pembuat sesi113### Sediakan kredensial yang dibatasi untuk pembuat sesi

93 114 

94Gunakan subperintah `decode-token` untuk membaca klaim dari JWT sesi. Ini membaca token dari argumen, dari `CLAUDE_CODE_SESSION_ACCESS_TOKEN`, atau dari stdin, dalam urutan itu; lihat [Verify the token inside the session](https://code.claude.com/docs/id/self-hosted-environments-identity.md#verify-the-token-inside-the-session) untuk apa yang diperiksa. Contoh di bawah ini mendekode identitas pembuat, menukarnya dengan kredensial AWS jangka pendek, dan exec ke Claude Code:115Gunakan subperintah `decode-token` untuk membaca klaim dari JWT sesi. Ini membaca token dari argumen, dari `CLAUDE_CODE_SESSION_ACCESS_TOKEN`, atau dari stdin, dalam urutan itu; lihat [Verify the token inside the session](https://code.claude.com/docs/id/self-hosted-environments-identity.md#verify-the-token-inside-the-session) untuk apa yang diperiksa. Contoh di bawah ini mendekode identitas pembuat, menukarnya dengan kredensial AWS jangka pendek, dan exec ke Claude Code:


122| Variabel | Deskripsi |143| Variabel | Deskripsi |

123| :- | :- |144| :- | :- |

124| `CLAUDE_RUNNER_REPO_URL` | URL repositori untuk mengkloning, setelah `--git-host-rewrite` dan `--git-ssh-rewrite` apa pun telah diterapkan |145| `CLAUDE_RUNNER_REPO_URL` | URL repositori untuk mengkloning, setelah `--git-host-rewrite` dan `--git-ssh-rewrite` apa pun telah diterapkan |

125| `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. |146| `CLAUDE_RUNNER_REPO_REF` | Revisi untuk di-checkout, sebagaimana diminta oleh sesi: branch, tag, commit SHA, atau nama referensi lengkap seperti `refs/heads/<branch>` atau `refs/pull/<number>/head`. Kosong berarti branch default repositori. |

126| `CLAUDE_RUNNER_CHECKOUT_PATH` | Jalur absolut di mana pohon kerja harus ditinggalkan |147| `CLAUDE_RUNNER_CHECKOUT_PATH` | Jalur absolut di mana pohon kerja harus ditinggalkan |

127| `CLAUDE_RUNNER_SESSION_ID` | ID sesi dalam bentuk `session_...` yang ditandai, untuk logging dan korelasi |148| `CLAUDE_RUNNER_SESSION_ID` | ID sesi dalam bentuk `session_...` yang ditandai, untuk logging dan korelasi |

128| `CLAUDE_RUNNER_SESSION_UUID` | ID sesi yang sama dalam bentuk UUID kanonik |149| `CLAUDE_RUNNER_SESSION_UUID` | ID sesi yang sama dalam bentuk UUID kanonik |


303 324 

304Kontrak memiliki empat aturan, di platform mana pun hook Anda melakukan provisioning:325Kontrak memiliki empat aturan, di platform mana pun hook Anda melakukan provisioning:

305 326 

3061. **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. Beban kerja yang dinamai atau dideduplikasi oleh ID sesi tidak dibuat lagi selama beban kerja pertama masih ada.

3072. **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`.

3083. **Gunakan kontrak exit code.** Keluar dengan status yang sesuai dengan hasilnya:3293. **Gunakan kontrak exit code.** Keluar dengan status yang sesuai dengan hasilnya:

309 330 

310 * **Keluar 0**: dikirimkan.331 * **Keluar 0**: dikirimkan.

311 * **Keluar 1, atau masih berjalan saat `--hook-timeout` berakhir**: kegagalan yang dapat dicoba ulang. Sesi mundur dan ditawarkan kembali.332 * **Keluar 1, atau masih berjalan saat `--hook-timeout` berakhir**: kegagalan yang dapat dicoba ulang. Sesi mundur dan ditawarkan kembali. Setelah 10 permintaan gagal berturut-turut, sesi diblokir seperti setelah keluar 2 atau lebih tinggi.

312 * **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](https://code.claude.com/docs/id/cloud-environments.md#organization-shared-environments) memilih **Retry** di atasnya di tab **Activity** lingkungan.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](https://code.claude.com/docs/id/cloud-environments.md#organization-shared-environments) memilih **Retry** di atasnya di tab **Activity** lingkungan.

313 334 

314 Selama sesi mundur, sesi tersebut menampilkan **Queued** di tab **Activity** tanpa kesalahan pemijahan, jadi baca output hook di log orchestrator. Setelah diblokir, sesi menampilkan **Failed**. Perluas sesi tersebut untuk membaca kesalahan pemijahan, yang diambil dari 512 karakter terakhir stderr hook. Tulis kesalahan yang dapat ditindaklanjuti ke stderr, dan jangan sertakan rahasia. Dalam hook shell, [pertahankan kegagalan sementara agar dapat dicoba ulang](#keep-transient-failures-retryable-in-a-shell-hook).335 Selama sesi mundur, sesi tersebut menampilkan **Queued** di tab **Activity** tanpa kesalahan pemijahan, jadi baca output hook di log orchestrator. Setelah diblokir, sesi menampilkan **Failed**. Perluas sesi tersebut untuk membaca kesalahan pemijahan, yang diambil dari 512 karakter terakhir stderr hook. Tulis kesalahan yang dapat ditindaklanjuti ke stderr, dan jangan sertakan rahasia. Dalam hook shell, [pertahankan kegagalan sementara agar dapat dicoba ulang](#keep-transient-failures-retryable-in-a-shell-hook).


318 339 

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

320 341 

321Sesi 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.342#### Perbaiki sesi yang dibuka kembali yang tetap Queued atau menampilkan Failed

343 

344Jika sesi yang dibuka kembali tetap **Queued** atau menampilkan **Failed**, atau hook Anda mengalami timeout pada sesi tersebut, salah satu penyebabnya adalah hook yang menamai atau mendeduplikasi beban kerja berdasarkan ID sesi. Sesi dibuka kembali ketika penggunanya mengirim pesan ke sesi tersebut setelah runner-nya keluar. Sebagai contoh, ambil hook yang membangun nama setiap beban kerja seperti ini:

345 

346```bash theme={null}

347name="runner-${CLAUDE_RUNNER_SESSION_ID}"

348```

349 

3501. Pada permintaan pemijahan pertama sesi, hook membuat beban kerja dengan nama tersebut, dan sebuah runner dimulai

3512. Runner keluar, misalnya setelah [`--release-idle-session-min`](#make-on-demand-runners-exit-when-idle), dan pengguna kemudian membuka kembali sesi tersebut

3523. Permintaan pemijahan berikutnya untuk sesi tersebut membawa ID sesi yang sama dan order ID baru, sehingga hook membangun nama yang sama

3534. Jika platform Anda masih memiliki beban kerja dari permintaan pertama, karena tidak ada yang [menghapusnya](#make-on-demand-runners-exit-when-idle) ketika runner-nya keluar, hook tidak membuat beban kerja baru dan tidak ada runner yang dimulai

3545. Setiap permintaan pemijahan berikutnya untuk sesi tersebut berakhir dengan cara yang sama

355 

356Buka hook Anda sendiri dan baca apa yang dilakukannya ketika beban kerja sudah ada, misalnya ketika platform Anda menolak nama duplikat. Temukan perilaku tersebut di kolom pertama untuk melihat apa yang ditampilkan sesi yang dibuka kembali di tab **Activity**:

357 

358| Ketika beban kerja sudah ada, hook Anda | **Queued** berubah menjadi **Failed** | Kesalahan pemijahan |

359| :- | :- | :- |

360| Keluar dengan 0 tanpa membuat apa pun | Setelah 10 permintaan semacam itu berturut-turut | `runner did not register within ETA after max attempts` |

361| Keluar dengan 1 | Setelah 10 permintaan semacam itu berturut-turut | Bagian akhir stderr hook Anda, atau `exit 1` jika hook tidak menulis apa pun ke stderr |

362| Keluar dengan 2 atau lebih tinggi | Segera | Bagian akhir stderr hook Anda, atau `exit` beserta kodenya, seperti `exit 2`, jika hook tidak menulis apa pun ke stderr |

363| Menunggu sampai `--hook-timeout` berakhir | Setelah 10 permintaan semacam itu berturut-turut | Bagian akhir stderr hook Anda, atau `spawn-runner hook timed out after 60000ms` jika hook tidak menulis apa pun ke stderr |

364 

365Dalam kesalahan pemijahan di baris terakhir, `60000` adalah `--hook-timeout` Anda dalam milidetik. Ketika hook menunggu sampai `--hook-timeout` berakhir, log orchestrator juga mendapatkan baris `timed out after`.

366 

367Untuk memperbaiki hook, bangun setiap nama atau kunci dari `CLAUDE_RUNNER_ORDER_ID`, seperti yang diwajibkan [aturan 1 kontrak hook](#the-spawn-runner-hook). Dalam contoh tersebut, namanya menjadi:

368 

369```bash theme={null}

370name="runner-${CLAUDE_RUNNER_ORDER_ID}"

371```

372 

373Jika hook Anda menunggu, buat juga hook tersebut keluar setelah mengirimkan beban kerja, karena hook yang menunggu [menunda hook berikutnya dari orchestrator-nya](https://code.claude.com/docs/id/self-hosted-environments-reference.md#orchestrator-cli-flags). Setelah Anda mengubah hook, periksa status setiap sesi yang macet di tab **Activity**:

374 

375* **Queued**: sesi mendapatkan permintaan pemijahan berikutnya dengan sendirinya

376* **Failed**: pilih **Retry** pada sesi tersebut sebagai Owner, atau minta penggunanya mengirim pesan baru

322 377 

323#### Buat runner on-demand keluar saat idle378#### Buat runner on-demand keluar saat idle

324 379 


744 799 

745Snapshot 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.800Snapshot 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.

746 801 

802### Hentikan sesi yang gagal mengambil pengaturan terkelola server

803 

804Untuk mencegah sesi yang mengambil [pengaturan terkelola server](https://code.claude.com/docs/id/server-managed-settings.md) dimulai ketika pengambilan tersebut gagal, atur [`forceRemoteSettingsRefresh`](https://code.claude.com/docs/id/settings-reference#forceremotesettingsrefresh) ke `true` dalam [`managed-settings.json`](https://code.claude.com/docs/id/settings#where-settings-live) di image runner Anda. Balasan dari API Anthropic bahwa organisasi Anda tidak memiliki pengaturan terkelola server dihitung sebagai pengambilan yang berhasil.

805 

806Sebelum Anda menambahkan kunci tersebut, periksa apakah lingkungan menjalankan sesi channel Claude Tag atau mengirimkan permintaan model ke Bedrock atau Agent Platform:

807 

808* **Sesi channel Claude Tag**: jangan sertakan kunci tersebut pada runner di lingkungan yang [dijadikan tujuan channel Claude Tag](https://code.claude.com/docs/id/cloud-environments.md#set-the-environment-a-claude-tag-channel-uses) oleh Owner. API Anthropic menolak permintaan pengaturan terkelola server dari sesi ini, sehingga jika kunci tersebut diatur, sesi tersebut gagal dimulai. Letakkan aturan untuk sesi tersebut di `managed-settings.json` image runner, yang [tetap dibacanya](https://code.claude.com/docs/id/managed-settings.md#where-and-when-a-policy-applies). Untuk menggunakan kunci tersebut bagi sesi Anda yang lain, jalankan sesi tersebut di lingkungan terpisah.

809* **Bedrock atau Agent Platform**: sesi pada penyedia ini [tidak mengambil pengaturan terkelola server](#what-differs-from-sessions-on-the-anthropic-api), sehingga sesi tersebut tetap dimulai terlepas dari apakah Anda mengatur kunci tersebut. Terapkan aturan Anda dari `managed-settings.json` yang sama sebagai gantinya.

810 

811`managed-settings.json` berikut mengatur kunci tersebut:

812 

813```json managed-settings.json theme={null}

814{

815 "forceRemoteSettingsRefresh": true

816}

817```

818 

819Atur kunci tersebut di file itu meskipun Anda juga mengaturnya di konsol admin claude.ai. Sesi baru tidak memiliki [salinan cache](https://code.claude.com/docs/id/server-managed-settings.md#fetch-and-caching-behavior) dari pengaturan terkelola server Anda, jadi jika Anda mengatur kunci tersebut hanya di konsol, sesi belum memilikinya. Jika pengambilannya kemudian gagal, sesi berjalan tanpa pengaturan tersebut hingga pengambilan berikutnya berhasil.

820 

821Untuk memastikan bahwa pengambilan pengaturan yang gagal adalah penyebab sesi tidak dimulai, lihat [output terakhir Claude Code](#keep-stdin-and-file-descriptor-3-attached) di sesi atau di log runner. Output tersebut menyertakan `Your organization requires remote managed settings to load, but they could not be loaded.`

822 

747### Pengaturan repositori dalam sesi dengan beberapa repositori823### Pengaturan repositori dalam sesi dengan beberapa repositori

748 824 

749Dalam thread di sebuah [proyek](https://code.claude.com/docs/id/claude-projects.md#what-threads-pick-up-from-your-repositories), tidak ada `.claude/settings.json` repositori mana pun yang berlaku sebagai pengaturan proyek dan tidak ada `.mcp.json` atau skills repositori mana pun yang dimuat, di mana pun thread dimulai. Untuk memberikan skill kepada thread tersebut, tambahkan skill tersebut ke image runner Anda.825Dalam thread di sebuah [proyek](https://code.claude.com/docs/id/claude-projects.md#what-threads-pick-up-from-your-repositories), tidak ada `.claude/settings.json` repositori mana pun yang berlaku sebagai pengaturan proyek dan tidak ada `.mcp.json` atau skills repositori mana pun yang dimuat, di mana pun thread dimulai. Untuk memberikan skill kepada thread tersebut, tambahkan skill tersebut ke image runner Anda.

Details

313 313 

314Untuk setiap sesi yang menggunakan git yang dikelola Anthropic, runner juga mencatat baris `[runner:warn]` yang dimulai dengan `governed git: GIT_SSL_CAINFO is set` atau `governed git: GIT_SSL_NO_VERIFY is set`. Baris mengatakan apa yang dilakukan runner dengan variabel itu untuk git-nya sendiri, untuk git di dalam sesi, dan untuk hook lifecycle Anda. Itu berakhir dengan apakah Anda perlu mengubah apa pun.314Untuk setiap sesi yang menggunakan git yang dikelola Anthropic, runner juga mencatat baris `[runner:warn]` yang dimulai dengan `governed git: GIT_SSL_CAINFO is set` atau `governed git: GIT_SSL_NO_VERIFY is set`. Baris mengatakan apa yang dilakukan runner dengan variabel itu untuk git-nya sendiri, untuk git di dalam sesi, dan untuk hook lifecycle Anda. Itu berakhir dengan apakah Anda perlu mengubah apa pun.

315 315 

316### Tambahkan repositori github.com ke sesi channel Claude Tag

317 

318Jika Claude tidak dapat menambahkan repositori github.com ke sesi channel Claude Tag, pastikan channel tersebut memiliki akses ke repositori itu, bahkan ketika runner Anda dapat meng-clone-nya. Akses tersebut berasal dari pengaturan di GitHub dan di organisasi Claude Anda, bukan dari kredensial git runner Anda.

319 

320**1. Instal Claude GitHub App**

321 

322Instal [Claude GitHub App](https://github.com/apps/claude) pada organisasi atau akun GitHub yang memiliki repositori tersebut, dan sertakan repositori itu dalam instalasi.

323 

324**2. Tautkan organisasi atau akun GitHub**

325 

326Di [**Organization settings > Git providers**](https://claude.ai/admin-settings/source-control), tautkan organisasi atau akun tersebut ke organisasi Claude Anda. Owner organisasi Claude Anda yang juga memiliki organisasi GitHub dapat menautkannya. Lihat [Link your GitHub organization](https://claude.com/docs/claude-tag/admins/configure-github#link-your-github-organization).

327 

328**3. Berikan akses repositori**

329 

330Di [pengaturan admin Claude Tag](https://claude.ai/admin-settings/claude-tag), berikan akses repositori ke channel atau ke cakupan yang lebih luas yang mencakup channel tersebut: workspace Slack-nya atau seluruh Slack. Seseorang dengan peran Owner atau izin Claude Tag Admin dapat memberikannya. Pengelola channel juga dapat menambahkannya ke channel mereka sendiri jika akun GitHub mereka adalah admin repositori tersebut. Lihat [Grant repository access](https://claude.com/docs/claude-tag/admins/configure-github#grant-repository-access).

331 

332Kemudian mulai thread baru di channel dan [sebutkan nama repositori](https://claude.com/docs/claude-tag/admins/configure-github#how-granted-repositories-reach-a-session) dalam pesan pertama Anda.

333 

334Jika Claude masih tidak dapat menambahkan repositori, lihat [If Claude can't reach a repository](https://claude.com/docs/claude-tag/admins/configure-github#if-claude-can%E2%80%99t-reach-a-repository) untuk mengetahui di mana memeriksa tautan GitHub dan pemberian akses repositori.

335 

316### Tulis ulang URL git untuk jaringan pribadi336### Tulis ulang URL git untuk jaringan pribadi

317 337 

318URL repositori tiba dari bidang kontrol sebagai HTTPS, dengan nama host dari host git Anda; untuk GitHub Enterprise, itu adalah nama host yang Anda konfigurasi untuk [integrasi GitHub Enterprise](https://code.claude.com/docs/id/github-enterprise-server.md) di claude.ai. Dua flag yang dapat diulang menulis ulang URL tersebut sebelum klon:338URL repositori tiba dari bidang kontrol sebagai HTTPS, dengan nama host dari host git Anda; untuk GitHub Enterprise, itu adalah nama host yang Anda konfigurasi untuk [integrasi GitHub Enterprise](https://code.claude.com/docs/id/github-enterprise-server.md) di claude.ai. Dua flag yang dapat diulang menulis ulang URL tersebut sebelum klon:


376 396 

377Build dan test biasanya merupakan bagian terbesar dan paling variabel dari beban sesi, jadi jalankan build representatif repositori Anda, ukur puncak CPU dan memorinya, dan naikkan nilai awal apa pun yang tidak meninggalkan ruang untuk proses Claude Code di atas puncak itu.397Build dan test biasanya merupakan bagian terbesar dan paling variabel dari beban sesi, jadi jalankan build representatif repositori Anda, ukur puncak CPU dan memorinya, dan naikkan nilai awal apa pun yang tidak meninggalkan ruang untuk proses Claude Code di atas puncak itu.

378 398 

379Runner menggunakan `--capacity` untuk membatasi berapa banyak sesi yang dijalankannya sekaligus. Itu tidak membagi CPU atau memori di antara mereka, jadi sesi pada runner berbagi CPU dan memori kontainer. Untuk membatasi bagian satu sesi, terapkan batas dari [script wrapper](https://code.claude.com/docs/id/self-hosted-environments-configuration.md#wrapper-scripts) Anda. Apa yang harus diberikan satu kontainer oleh karena itu tergantung pada berapa banyak sesi yang dilayaninya sekaligus:399Runner menggunakan `--capacity` untuk membatasi berapa banyak sesi yang dijalankannya sekaligus. Itu tidak membagi CPU atau memori di antara mereka, jadi sesi pada runner berbagi CPU dan memori kontainer. Agar penggunaan memori satu sesi tidak mengakhiri sesi lainnya, jalankan satu sesi per runner dengan [batas memorinya sendiri](#give-each-session-its-own-memory-limit).

380 400 

381* **Satu sesi per runner**: berikan setiap kontainer nilai satu sesi. Gunakan ukuran ini pada `--capacity 1`, yang [bagian pengerasan](#harden-your-deployment) rekomendasikan, dan untuk [runner on-demand](https://code.claude.com/docs/id/self-hosted-environments-configuration.md#on-demand-runners), di mana Anda menetapkan nilai pada workload yang [`spawn-runner` hook](https://code.claude.com/docs/id/self-hosted-environments-configuration#the-spawn-runner-hook) Anda kirimkan, seperti template pod Job Kubernetes.401* **Satu sesi per runner**: berikan setiap kontainer nilai satu sesi. Gunakan ukuran ini pada `--capacity 1`, yang [bagian pengerasan](#harden-your-deployment) rekomendasikan, dan untuk [runner on-demand](https://code.claude.com/docs/id/self-hosted-environments-configuration.md#on-demand-runners), di mana Anda menetapkan nilai pada workload yang [`spawn-runner` hook](https://code.claude.com/docs/id/self-hosted-environments-configuration#the-spawn-runner-hook) Anda kirimkan, seperti template pod Job Kubernetes.

382* **Beberapa sesi per runner**: pada `--capacity` di atas satu, kalikan nilai satu sesi dengan kapasitas, karena hingga banyak sesi dapat berjalan dalam kontainer sekaligus. Resep [Kubernetes](#kubernetes) dan [Docker Compose](#docker-compose) menjalankan `--capacity 4` tanpa batas CPU atau memori, jadi tambahkan batas yang diukur untuk kapasitas yang Anda jalankan.402* **Beberapa sesi per runner**: pada `--capacity` di atas satu, kalikan nilai satu sesi dengan kapasitas, karena hingga banyak sesi dapat berjalan dalam kontainer sekaligus. Resep [Kubernetes](#kubernetes) dan [Docker Compose](#docker-compose) menjalankan `--capacity 4` tanpa batas CPU atau memori, jadi tambahkan batas yang diukur untuk kapasitas yang Anda jalankan.

403* **Beberapa kontainer runner pada satu host**: ukur host untuk jumlah kapasitas semua runner, karena setiap runner hanya menghitung sesinya sendiri terhadap `--capacity`:

404 

405 * **Memori**: kalikan memori satu sesi dengan jumlah tersebut, lalu tambahkan apa yang digunakan oleh proses host itu sendiri

406 * **CPU**: kalikan permintaan CPU satu sesi dengan jumlah tersebut. Agar setiap sesi dapat meledak sekaligus, kalikan batas CPU-nya sebagai gantinya.

407 

408 Berikan setiap runner kontainernya sendiri. Gunakan [path `--base-dir` yang sama](#keep-the-base-directory-and-capacity-identical-across-runners) di masing-masing, pada penyimpanan yang tidak di-mount oleh kontainer runner lain, sehingga setiap runner memiliki [direktori kerjanya sendiri](#harden-your-deployment).

409 

410### Berikan setiap sesi batas memorinya sendiri

411 

412Untuk mencegah satu sesi mengakhiri sesi lainnya ketika memori habis, jalankan setiap runner pada `--capacity 1` di bawah batas memorinya sendiri, yang diatur ke memori satu sesi:

413 

414* **Di dalam kontainer**: jalankan satu runner per kontainer, dan atur batas memori kontainer, seperti `limits.memory` di Kubernetes, `--memory` di Docker, atau `mem_limit` dalam file Compose. Jaga agar jumlah batas semua kontainer tetap di bawah memori host, karena ketika host itu sendiri kehabisan memori, kernel dapat membunuh proses di mana saja pada host.

415* **Di bawah systemd tanpa kontainer**: atur `MemoryMax` pada unit runner, dan jalankan satu runner per host, karena runner yang [menggunakan `--base-dir` yang sama](#keep-the-base-directory-and-capacity-identical-across-runners) pada satu sistem file berbagi repositori yang di-clone di sana. Misalnya, pada `--capacity 1` tanpa hook `checkout`, sesi mereka pada satu repositori dapat bekerja di checkout yang sama sekaligus. Untuk menjalankan beberapa runner pada satu host, berikan masing-masing sebuah kontainer.

416 

417Ketika kontainer atau unit mencapai batas memorinya, kernel hanya membunuh proses di dalamnya. Jika Anda mengatur `--capacity` di atas satu, sesi-sesi tersebut berbagi satu batas. Ketika mereka mencapainya, kernel tidak memilih berdasarkan sesi proses mana yang akan dibunuh, sehingga penggunaan memori satu sesi dapat mengakhiri sesi lainnya.

418 

419Di Kubernetes, Anda tidak dapat memisahkan sesi dengan nilai mana pun dari pengaturan `singleProcessOOMKill` milik kubelet. Anda juga tidak dapat membatasi total memori sesi dengan `ulimit` memori dalam [script wrapper](https://code.claude.com/docs/id/self-hosted-environments-configuration.md#wrapper-scripts) Anda. Kernel menerapkan nilai seperti `ulimit -v` ke setiap proses secara terpisah.

420 

421### Sisakan ruang di bawah batas proses dan thread

422 

423Untuk menentukan ukuran batas proses dan thread, ukur apa yang dibutuhkan satu sesi dan kalikan dengan jumlah sesi yang berbagi batas tersebut. Ketika sesi-sesi tersebut mencapai batas, kernel menolak proses dan thread baru, sehingga perintah, build, dan test di salah satu sesi dapat gagal. Panggilan yang ditolak mengembalikan `EAGAIN`, yang pesan standarnya adalah `Resource temporarily unavailable`.

424 

425Misalkan satu sesi mencapai puncak 300 proses dan thread, dan empat sesi berbagi batas tersebut. Bersama-sama mereka membutuhkan 1.200, dan dengan batas 2.400, Anda menyisakan ruang untuk build yang membutuhkan dua kali lipat.

426 

427#### Tempat mengatur setiap batas

428 

429Setiap batas dalam tabel ini menghitung thread maupun proses, dan `pids.max` adalah file yang menyimpan batas cgroup:

430 

431| Batas | Tempat Anda mengaturnya | Apa yang berbagi batas tersebut |

432| :- | :- | :- |

433| `pids.max` di Kubernetes | `podPidsLimit` dalam konfigurasi kubelet dari node yang menjalankan runner. Anda tidak dapat mengaturnya dalam spec Pod. | Kontainer-kontainer dari satu Pod |

434| `pids.max` di Docker | `--pids-limit`, atau `pids_limit` dalam file Compose | Satu kontainer |

435| `pids.max` di bawah systemd | `TasksMax` pada unit runner | Satu unit |

436| `ulimit -u` | Shell atau layanan yang memulai runner | Semua hal pada host yang berjalan sebagai user ID runner. Tidak diberlakukan untuk root. |

437 

438Ketika Anda tidak mengatur `TasksMax`, systemd menerapkan `DefaultTasksMax`, yang secara default bernilai 15% dari nilai terendah di antara `kernel.pid_max`, `kernel.threads-max`, dan `pids.max` milik cgroup root.

439 

440#### Ukur puncak satu sesi

441 

442Untuk mendapatkan angka bagi runner Anda sendiri, ukur satu sesi pada host-nya, yang di Kubernetes adalah node:

443 

444**1. Mulai satu runner sendirian**

445 

446Mulai satu runner pada `--capacity 1` tanpa hal lain di kontainer atau unit systemd-nya, sendirian pada host-nya dan di environment-nya:

447 

448* **Host-nya**: gunakan host yang tidak menjalankan runner lain. Anda kemudian dapat mengenali prosesnya pada langkah berikutnya.

449* **Environment-nya**: jadikan runner tersebut satu-satunya runner di sana, misalnya di environment yang Anda [buat untuk pengujian](https://code.claude.com/docs/id/self-hosted-environments-quickstart.md#set-up-manually). Sesi dirutekan ke environment dan bukan ke runner.

450 

451Jangan mulai sesi dulu, karena Anda memerlukan direktori dari langkah berikutnya sebelum build dimulai.

452 

453**2. Temukan direktori cgroup runner**

454 

455Pada host, bukan di dalam kontainer, temukan ID proses runner, misalnya dengan `ps`. Baca `/proc/<pid>/cgroup` untuk ID tersebut:

456 

457* **Sebuah baris berisi `:pids:`**: host menggunakan cgroup v1, dan direktorinya adalah `/sys/fs/cgroup/pids` diikuti teks setelah `:pids:`

458* **Satu-satunya baris dimulai dengan `0::`**: host menggunakan cgroup v2, dan direktorinya adalah `/sys/fs/cgroup` diikuti teks setelah `0::`

459 

460**3. Jalankan build representatif dan catat puncaknya**

461 

462Jalankan satu sesi melalui build representatif, dan ambil puncaknya dari direktori cgroup runner:

463 

464* **Direktori memiliki `pids.peak`**: baca file tersebut setelah build selesai

465* **Direktori tidak memiliki `pids.peak`**: baca `pids.current` sekali setiap detik selama build berjalan, dan simpan nilai tertinggi. Puncak di antara dua pembacaan tidak akan terlihat, jadi perlakukan nilai tersebut sebagai perkiraan rendah.

466 

467**4. Kalikan dengan sesi yang berbagi batas**

468 

469* **Pod, kontainer, atau unit satu runner**: kalikan puncak dengan `--capacity` runner

470* **Batas yang dibagi oleh beberapa runner**: kalikan puncak dengan jumlah kapasitas mereka

471 

472Kemudian tambahkan puncak dari hal lain yang berbagi batas tersebut, seperti kontainer lain di Pod.

473 

474**5. Atur batas di atas hasilnya**

475 

476Dengan batas yang lebih tinggi, Anda menyisakan ruang untuk build yang lebih berat, dan dengan batas yang lebih rendah, Anda menghentikan fork bomb lebih cepat.

477 

478#### Periksa batas `pids.max`

479 

480* **Periksa apakah `pids.max` telah tercapai**: cari di log kernel host, misalnya dengan `dmesg`, baris yang berisi `cgroup: fork rejected by pids controller in` dan path sebuah cgroup. Kernel hanya mencatatnya pertama kali ia menolak proses atau thread dalam cgroup tersebut, jadi cari di seluruh log.

481* **Lihat batas yang berlaku**: baca `pids.max` di direktori cgroup runner dan di setiap direktori di atasnya. Nilai terendah adalah batas yang berlaku, dan `max` berarti tidak ada batas pada tingkat tersebut.

383 482 

384## Kubernetes483## Kubernetes

385 484 


577 676 

578Apa jalur penggunaan kembali lakukan dan tidak jamin:677Apa jalur penggunaan kembali lakukan dan tidak jamin:

579 678 

580* **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.679* **Kedalaman klon**: lakukan build klon tanpa `--depth`, dengan atau tanpa `--single-branch`. Runner tidak pernah meneruskan `--depth` saat mengambil ke dalam klon yang memiliki remote `origin`, bahkan jika Anda menetapkan [`CLAUDE_RUNNER_FETCH_DEPTH`](https://code.claude.com/docs/id/self-hosted-environments-reference#environment-variable-only-settings). Dengan klon penuh, setiap sesi hanya mengunduh commit yang belum dimiliki klon. Dengan klon shallow, sesi pada branch yang bercabang sebelum commit tertua klon akan mengunduh seluruh riwayat branch tersebut.

581* **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.680* **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.

582* **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.681* **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.

583 682 


587* **Dengan proxy git, pre-warm `reftable` kehilangan ref-nya**: saat runner membersihkan `.git/` sebelum setiap sesi, runner menyimpan `.git/refs/` dan menghapus direktori `.git/reftable/`. Klon yang dipanaskan sebelumnya dalam format ref `reftable` milik git kehilangan ref-nya dengan cara itu, jadi lakukan pre-warm klon dalam format ref `files` milik git sebagai gantinya.686* **Dengan proxy git, pre-warm `reftable` kehilangan ref-nya**: saat runner membersihkan `.git/` sebelum setiap sesi, runner menyimpan `.git/refs/` dan menghapus direktori `.git/reftable/`. Klon yang dipanaskan sebelumnya dalam format ref `reftable` milik git kehilangan ref-nya dengan cara itu, jadi lakukan pre-warm klon dalam format ref `files` milik git sebagai gantinya.

588* **Klon panjang tidak memerlukan workaround**: runner membatasi setiap operasi git dengan watchdog no-progress 120 detik dan hard cap 30 menit, bukan timeout flat, jadi klon dingin lambat yang terus melaporkan kemajuan selesai.687* **Klon panjang tidak memerlukan workaround**: runner membatasi setiap operasi git dengan watchdog no-progress 120 detik dan hard cap 30 menit, bukan timeout flat, jadi klon dingin lambat yang terus melaporkan kemajuan selesai.

589 688 

689### Pastikan bahwa runner menggunakan klon Anda

690 

691Untuk memastikan bahwa runner menggunakan klon Anda, mulai runner dengan [`--log-level debug`](https://code.claude.com/docs/id/self-hosted-environments-reference#runner-cli-flags) dan mulai sesi pada repositori tersebut. Runner menulis `Prefetched repo found at` beserta jalur klon ke log. Jika runner justru menulis `No prefetched repo, fresh init at` ke log, runner tidak menemukan klon yang dapat digunakan di jalur pada baris tersebut. Periksa bahwa klon Anda berada di jalur tersebut, dimiliki oleh pengguna runner, dan memiliki remote bernama `origin`.

692 

693Jika runner menemukan klon Anda tetapi sesi masih dimulai dengan lambat, periksa apakah klon tersebut shallow.

694 

590## Sematkan versi695## Sematkan versi

591 696 

592Secara default, proses anak setiap sesi menjalankan biner runner itu sendiri, dan runner mematikan auto-update di dalam sesi yang dihasilkannya. Dengan default tersebut, setiap sesi menjalankan versi yang Anda instal di host atau yang di-build ke dalam gambar. Update tingkat host berlaku waktu berikutnya runner dimulai.697Secara default, proses anak setiap sesi menjalankan biner runner itu sendiri, dan runner mematikan auto-update di dalam sesi yang dihasilkannya. Dengan default tersebut, setiap sesi menjalankan versi yang Anda instal di host atau yang di-build ke dalam gambar. Update tingkat host berlaku waktu berikutnya runner dimulai.


609* **Armada tetap**: jalankan set replika runner statis dan skala pada [metrik Prometheus](https://code.claude.com/docs/id/self-hosted-environments-reference.md#prometheus-metrics) yang dilayani setiap runner714* **Armada tetap**: jalankan set replika runner statis dan skala pada [metrik Prometheus](https://code.claude.com/docs/id/self-hosted-environments-reference.md#prometheus-metrics) yang dilayani setiap runner

610* **Runner on-demand**: jalankan subperintah `claude self-hosted-runner orchestrator`, yang menanyakan Anthropic untuk sesi yang antri tanpa runner tersedia dan memanggil hook `spawn-runner` Anda untuk boot satu per sesi. Lihat [On-demand runners](https://code.claude.com/docs/id/self-hosted-environments-configuration.md#on-demand-runners).715* **Runner on-demand**: jalankan subperintah `claude self-hosted-runner orchestrator`, yang menanyakan Anthropic untuk sesi yang antri tanpa runner tersedia dan memanggil hook `spawn-runner` Anda untuk boot satu per sesi. Lihat [On-demand runners](https://code.claude.com/docs/id/self-hosted-environments-configuration.md#on-demand-runners).

611 716 

717### Lepaskan sesi idle pada armada tetap

718 

719Jika sesi tetap mengantri pada armada tetap sementara setiap runner online, sesi idle mungkin penyebabnya. Secara default, sebuah sesi mempertahankan slotnya setelah gilirannya selesai, dan runner-nya tetap terkunci pada [pemilik](https://code.claude.com/docs/id/self-hosted-environments#key-concepts) sesi tersebut. Jika [tugas terjadwal cloud](https://code.claude.com/docs/id/routines.md) tim Anda memulai sesi baru pada setiap eksekusi, sesi idle-nya dapat memenuhi setiap slot.

720 

721Untuk memeriksanya, baca `claude_code_self_hosted_runner_session_idle_seconds` di [metrik Prometheus](https://code.claude.com/docs/id/self-hosted-environments-reference.md#prometheus-metrics) setiap runner. Setiap sesi yang dipegang runner memiliki seri tersendiri: `0` selama sesi sibuk, jika tidak, jumlah detik sejak sesi tersebut menjadi idle. Pilih waktu idle yang Anda izinkan: lebih lama dari jeda yang diambil orang di tengah tugas, dan cukup singkat sehingga setiap eksekusi dilepaskan sebelum eksekusi berikutnya dari tugas terjadwal dimulai. Bandingkan seri tersebut dengan waktu itu.

722 

723* **Seri di atas waktu tersebut, seperti `1800` untuk 30 menit**: sesi idle memegang slot tersebut, jadi atur `--release-idle-session-min`

724* **Setiap seri di bawahnya**: tidak ada sesi yang idle selama itu. Tambahkan runner, atau atur [`--kill-session-after-min`](https://code.claude.com/docs/id/self-hosted-environments-reference#runner-cli-flags) untuk [sesi yang tidak pernah menjadi idle](#some-sessions-don’t-count-as-idle).

725* **Runner tanpa seri**: tidak ada sesi yang memegangnya. Lihat **Sessions stay queued** di bawah [Pemecahan masalah](#troubleshooting).

726* **Runner yang metriknya tidak merespons**: prosesnya mungkin telah keluar. Lihat **An environment that looks healthy** di bawah [When the runner exits](#when-the-runner-exits).

727 

728Untuk melepaskan sesi idle, mulai setiap runner dengan [`--release-idle-session-min`](https://code.claude.com/docs/id/self-hosted-environments-reference#runner-cli-flags) dan waktu tersebut dalam menit, seperti `--release-idle-session-min 30`. Runner kemudian melepaskan setiap sesi yang tetap idle selama itu, baik yang dimulai oleh tugas terjadwal maupun oleh seseorang.

729 

730* **Pekerjaan yang belum di-push**: sesi yang dilepaskan dilanjutkan pada pesan berikutnya, tanpa pekerjaan yang belum di-push. Untuk mempertahankan commit-nya, lihat [Resumed sessions lose unpushed work](#additional-limitations).

731* **Runner keluar**: runner yang melepaskan sesi terakhirnya memulai [keluar normal](#when-the-runner-exits). Minta supervisor Anda memulai ulang runner tersebut pada filesystem baru, seperti yang dijelaskan di [Harden your deployment](#harden-your-deployment).

732* **Sesi yang tidak pernah menjadi idle**: atur juga [`--kill-session-after-min`](https://code.claude.com/docs/id/self-hosted-environments-reference#runner-cli-flags), karena [beberapa sesi tidak dihitung sebagai idle](#some-sessions-don’t-count-as-idle)

733 

612## Masalah dan batasan yang diketahui734## Masalah dan batasan yang diketahui

613 735 

614Berikut adalah batasan dalam rilis ini, dengan workaround di mana ada.736Berikut adalah batasan dalam rilis ini, dengan workaround di mana ada.


642### Batasan tambahan764### Batasan tambahan

643 765 

644* **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.766* **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.

645 * **Untuk mempertahankan pekerjaan yang sudah di-commit**: atur [`--push-outcome-on-release`](https://code.claude.com/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.767 * **Untuk mempertahankan pekerjaan yang sudah di-commit**: atur [`--push-outcome-on-release`](https://code.claude.com/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).

646 * **Dengan hook `checkout`**: repositori yang di-checkout melalui [hook siklus hidup `checkout`](https://code.claude.com/docs/id/self-hosted-environments-configuration#checkout) tidak di-push. Buat snapshot repositori tersebut dari [hook `post-session`](https://code.claude.com/docs/id/self-hosted-environments-configuration#post-session) sebagai gantinya.768 * **Dengan hook `checkout`**: repositori yang di-checkout melalui [hook siklus hidup `checkout`](https://code.claude.com/docs/id/self-hosted-environments-configuration#checkout) tidak di-push. Buat snapshot repositori tersebut dari [hook `post-session`](https://code.claude.com/docs/id/self-hosted-environments-configuration#post-session) sebagai gantinya.

647 * **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.769 * **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.

770 * **Perubahan yang belum di-commit tetap hilang**: untuk meminta Claude melakukan commit dan push ketika selesai merespons, lihat [Prompt sessions to push their work](https://code.claude.com/docs/id/self-hosted-environments-configuration.md#prompt-sessions-to-push-their-work)

648* **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.771* **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.

649* **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.772* **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.

650* **Ketika seseorang mengarsipkan atau menghapus sesi, atau melepaskan runner-nya dari menu sesi**: jangan mengandalkan push [`--push-outcome-on-release`](https://code.claude.com/docs/id/self-hosted-environments-reference#runner-cli-flags). Untuk menyimpan commit dalam kasus tersebut, push `HEAD` ke branch penyelamat dari [hook `post-session`](https://code.claude.com/docs/id/self-hosted-environments-configuration#post-session). Jika Anda memulai dari contoh di sana, ubah agar contoh tersebut melakukan push bahkan ketika tidak ada perubahan yang belum di-commit, karena contoh tersebut hanya melakukan push setelah commit snapshot.773* **Ketika seseorang mengarsipkan atau menghapus sesi, atau melepaskan runner-nya dari menu sesi**: jangan mengandalkan push [`--push-outcome-on-release`](https://code.claude.com/docs/id/self-hosted-environments-reference#runner-cli-flags). Untuk menyimpan commit dalam kasus tersebut, push `HEAD` ke branch penyelamat dari [hook `post-session`](https://code.claude.com/docs/id/self-hosted-environments-configuration#post-session). Jika Anda memulai dari contoh di sana, ubah agar contoh tersebut melakukan push bahkan ketika tidak ada perubahan yang belum di-commit, karena contoh tersebut hanya melakukan push setelah commit snapshot.


684* **Sesi gagal segera setelah diambil**: buka sesi di claude.ai/code untuk melihat kesalahannya. Jika kesalahan menunjukkan bahwa git tidak dapat melakukan autentikasi, periksa [kredensial git](#configure-git) runner. Pada runner yang dimulai dengan `--use-anthropic-git-proxy`, lihat [Ketika sesi gagal dimulai pada runner dengan git proxy](#when-anthropic-doesnt-serve-a-session).807* **Sesi gagal segera setelah diambil**: buka sesi di claude.ai/code untuk melihat kesalahannya. Jika kesalahan menunjukkan bahwa git tidak dapat melakukan autentikasi, periksa [kredensial git](#configure-git) runner. Pada runner yang dimulai dengan `--use-anthropic-git-proxy`, lihat [Ketika sesi gagal dimulai pada runner dengan git proxy](#when-anthropic-doesnt-serve-a-session).

685 808 

686 Direktori dasar yang tidak dapat ditulisi menghentikan runner saat startup alih-alih menggagalkan sesi. Lihat entri **Runner keluar saat startup dengan `cannot create or write to base directory`** dalam daftar ini.809 Direktori dasar yang tidak dapat ditulisi menghentikan runner saat startup alih-alih menggagalkan sesi. Lihat entri **Runner keluar saat startup dengan `cannot create or write to base directory`** dalam daftar ini.

810* **Sesi diambil, tetapi Claude tidak pernah menjawab pesan pertamanya**: jika runner Anda menjangkau `api.anthropic.com` melalui proxy, konfigurasikan proxy tersebut agar meneruskan respons `/worker/events/stream` sesi saat respons tersebut tiba. Menaikkan timeout runner tidak membantu. Untuk memastikan penyebabnya di log runner, lihat [Sesi diambil, tetapi Claude tidak pernah menjawab pesan pertamanya](#when-a-sessions-first-message-is-never-answered).

687* **Sesi gagal dimulai pada runner yang mengatur `--use-anthropic-git-proxy`**: cari `access denied by the git proxy` di log runner, atau kesalahan git yang menyebutkan alamat `api.anthropic.com` yang berisi `/git_proxy/`. Untuk mengetahui apakah Anthropic melayani sesi tersebut dan memperbaiki penyebabnya, lihat [Ketika sesi gagal dimulai pada runner dengan git proxy](#when-anthropic-doesnt-serve-a-session).811* **Sesi gagal dimulai pada runner yang mengatur `--use-anthropic-git-proxy`**: cari `access denied by the git proxy` di log runner, atau kesalahan git yang menyebutkan alamat `api.anthropic.com` yang berisi `/git_proxy/`. Untuk mengetahui apakah Anthropic melayani sesi tersebut dan memperbaiki penyebabnya, lihat [Ketika sesi gagal dimulai pada runner dengan git proxy](#when-anthropic-doesnt-serve-a-session).

688* **Sesi tidak dapat menjangkau jaringan melalui proxy egress yang melakukan autentikasi**: ketika sumber yang Anda atur dengan [`--proxy-authorization-command` atau `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) gagal, mengalami timeout setelah 30 detik, atau menghasilkan nilai kosong, runner menjawab koneksi tersebut dengan `502 Bad Gateway` dan mencatat alasannya ke log. Runner menyamarkan stderr perintah tersebut di log itu dan tidak pernah mencatat nilai header ke log. Dengan `--proxy-authorization-command`, jalankan sendiri perintah tersebut di host untuk memastikan perintah itu mencetak seluruh nilai header ke stdout. Jika runner justru keluar saat startup dengan `could not start the proxy-authorization listener`, runner tidak dapat membuka listener loopback-nya.812* **Sesi tidak dapat menjangkau jaringan melalui proxy egress yang melakukan autentikasi**: ketika sumber yang Anda atur dengan [`--proxy-authorization-command` atau `--proxy-authorization-file`](#authenticate-to-an-egress-proxy) gagal, mengalami timeout setelah 30 detik, atau menghasilkan nilai kosong, runner menjawab koneksi tersebut dengan `502 Bad Gateway` dan mencatat alasannya ke log. Runner menyamarkan stderr perintah tersebut di log itu dan tidak pernah mencatat nilai header ke log. Dengan `--proxy-authorization-command`, jalankan sendiri perintah tersebut di host untuk memastikan perintah itu mencetak seluruh nilai header ke stdout. Jika runner justru keluar saat startup dengan `could not start the proxy-authorization listener`, runner tidak dapat membuka listener loopback-nya.

689* **Runner mencatat baris `Poll failed` yang berisi `rejecting the malformed poll response`**: runner menerima respons work-poll yang body-nya bukan JSON yang diharapkan oleh antrean. Salah satu penyebabnya adalah proxy yang mencegat atau captive portal yang menjawab dengan halamannya sendiri. Jika runner terhubung melalui proxy, konfigurasikan proxy agar meneruskan respons dari `api.anthropic.com` tanpa diubah.813* **Runner mencatat baris `Poll failed` yang berisi `rejecting the malformed poll response`**: runner menerima respons work-poll yang body-nya bukan JSON yang diharapkan oleh antrean. Salah satu penyebabnya adalah proxy yang mencegat atau captive portal yang menjawab dengan halamannya sendiri. Jika runner terhubung melalui proxy, konfigurasikan proxy agar meneruskan respons dari `api.anthropic.com` tanpa diubah.


708* **Sesi gagal dimulai dengan `This runner couldn't read`**: runner meminta repositori dari host git dengan [kredensial git](#configure-git)-nya dan mendapat jawaban tidak ditemukan. Repositori tersebut tidak ada, atau kredensial tersebut tidak dapat menjangkau repositori itu.832* **Sesi gagal dimulai dengan `This runner couldn't read`**: runner meminta repositori dari host git dengan [kredensial git](#configure-git)-nya dan mendapat jawaban tidak ditemukan. Repositori tersebut tidak ada, atau kredensial tersebut tidak dapat menjangkau repositori itu.

709 * **Jika Anda mengelola runner**: berikan akses baca ke repositori tersebut kepada kredensial git runner, lalu mulai sesi baru.833 * **Jika Anda mengelola runner**: berikan akses baca ke repositori tersebut kepada kredensial git runner, lalu mulai sesi baru.

710 * **Jika Anda yang memulai sesi**: jika repositori tidak ada, mulai sesi baru dengan repositori yang benar. Jika runner tidak dapat menjangkau repositori tersebut, minta administrator runner untuk memberikan akses, lalu mulai sesi baru.834 * **Jika Anda yang memulai sesi**: jika repositori tidak ada, mulai sesi baru dengan repositori yang benar. Jika runner tidak dapat menjangkau repositori tersebut, minta administrator runner untuk memberikan akses, lalu mulai sesi baru.

711* **Sesi membutuhkan waktu beberapa menit untuk dimulai**: clone awal biasanya mendominasi. Pantau [metrik](https://code.claude.com/docs/id/self-hosted-environments-reference.md#prometheus-metrics) `claude_code_self_hosted_runner_session_init_duration_seconds` untuk memastikannya, dan kurangi waktu clone dengan [checkout yang sudah dipanaskan sebelumnya](#reuse-a-pre-warmed-checkout) atau `CLAUDE_RUNNER_FETCH_DEPTH` yang lebih kecil.835* **Sesi membutuhkan waktu beberapa menit untuk dimulai atau dilanjutkan**: salah satu penyebabnya adalah clone baru. Pada fleet yang memulai setiap runner pada disk kosong, tanpa [hook `checkout`](https://code.claude.com/docs/id/self-hosted-environments-configuration#checkout), runner meng-clone ulang repositori sesi dari awal sebelum memulai Claude Code. Sesi yang dilanjutkan pada disk kosong menunggu clone yang sama lagi.

836 

837 Untuk melewati clone baru, sediakan [checkout yang sudah dipanaskan sebelumnya](#reuse-a-pre-warmed-checkout). Jika Anda sudah menyediakannya, [pastikan runner menggunakannya](#confirm-that-the-runner-uses-your-clone). Ketika runner membuat clone sendiri dan keluar setelah satu sesi, turunkan [`CLAUDE_RUNNER_FETCH_DEPTH`](https://code.claude.com/docs/id/self-hosted-environments-reference#environment-variable-only-settings) dari default-nya sebanyak 50 commit untuk mengambil lebih sedikit riwayat.

838 

839 Jika Anda menggunakan hook, hook tersebut berjalan sebagai pengganti clone runner, jadi periksa apa yang dilakukan hook Anda. Pantau [metrik](https://code.claude.com/docs/id/self-hosted-environments-reference.md#prometheus-metrics) `claude_code_self_hosted_runner_session_init_duration_seconds` untuk melihat berapa lama proses mulai berlangsung.

712* **Giliran gagal dengan 401**: ketika sebuah giliran berakhir dengan 401 atau 403 dari Anthropic API, runner mengambil [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/id/self-hosted-environments-configuration#wrapper-scripts) baru dari Anthropic dan meneruskannya ke sesi. Giliran yang gagal tidak dicoba ulang. Token ini berumur pendek, dan runner merotasinya melalui stdin sesi.840* **Giliran gagal dengan 401**: ketika sebuah giliran berakhir dengan 401 atau 403 dari Anthropic API, runner mengambil [`CLAUDE_CODE_OAUTH_TOKEN`](https://code.claude.com/docs/id/self-hosted-environments-configuration#wrapper-scripts) baru dari Anthropic dan meneruskannya ke sesi. Giliran yang gagal tidak dicoba ulang. Token ini berumur pendek, dan runner merotasinya melalui stdin sesi.

713 841 

714 Ketika pengambilan gagal, runner mencatat baris `inference_token refresh failed` yang menyebutkan kapan runner akan mencoba ulang, dan runner terus mencoba ulang selama sesi berjalan.842 Ketika pengambilan gagal, runner mencatat baris `inference_token refresh failed` yang menyebutkan kapan runner akan mencoba ulang, dan runner terus mencoba ulang selama sesi berjalan.


788 916 

789Untuk diagnosis terpandu pada host runner, jalankan [subperintah doctor](#troubleshooting).917Untuk diagnosis terpandu pada host runner, jalankan [subperintah doctor](#troubleshooting).

790 918 

919### Sesi diambil, tetapi Claude tidak pernah menjawab pesan pertamanya

920 

921Jika runner mengambil sesi tetapi Claude tidak pernah menjawab pesan pertama, dan runner Anda menjangkau `api.anthropic.com` melalui proxy, proxy tersebut mungkin penyebabnya. Anthropic mengirimkan pesan-pesan ke sesi melalui satu respons streaming yang tetap terbuka. Jika proxy Anda melakukan buffering terhadapnya, atau mengakhirinya sebelum meneruskan apa pun, pesan pertama tidak pernah tiba. Permintaan lain dari sesi tetap berhasil.

922 

923Untuk memperbaikinya, ubah cara proxy menangani permintaan ini:

924 

925```text theme={null}

926GET https://api.anthropic.com/v1/code/sessions/<session-id>/worker/events/stream

927```

928 

929* **Jangan lakukan buffering terhadap respons**: teruskan respons saat tiba. Content type-nya adalah `text/event-stream`.

930* **Biarkan respons tetap terbuka**: respons dapat tetap terbuka hingga satu jam. Jika proxy memiliki idle timeout, atur jauh di atas 15 detik, karena Anthropic secara default mengirimkan keep-alive setidaknya sesering itu.

931 

932Kemudian mulai sesi baru dan periksa apakah Claude menjawab. Menaikkan timeout runner tidak membantu: Anda hanya menunggu lebih lama sebelum runner menghentikan sesi.

933 

934#### Memastikan penyebabnya di log runner

935 

936Langkah-langkah ini ditujukan untuk runner pada Claude Code v2.1.287 atau yang lebih baru, dengan `--log-level info` default. Runner yang lebih lama mencatat baris-baris ini lebih lambat, atau tidak sama sekali.

937 

9381. Tunggu hingga [`--startup-timeout-min`](https://code.claude.com/docs/id/self-hosted-environments-reference#runner-cli-flags) berlalu, 15 menit secara default. Runner kemudian menghentikan sesi dan mencatat baris yang berisi `no child output for` dan diakhiri dengan `— releasing`.

9392. Cari `SDKStartup: SSE` di log runner. Baris-baris ini mengikuti baris `finished: interrupted`, beberapa baris setelah baris pada langkah 1. Sebagian besar tidak memiliki timestamp, sehingga pengumpul log dapat menampilkannya di tempat lain.

9403. Temukan baris tersebut dalam tabel ini:

941 

942| Baris log berisi | Yang harus dilakukan |

943| :- | :- |

944| `SSE connect failed (no response in 30s)` atau `SSE liveness timeout` | Periksa apakah proxy meneruskan permintaan, meneruskan header dan data respons saat tiba, dan tidak memutus koneksi |

945| `SSE connect failed (HTTP` dan sebuah kode status | Periksa log proxy itu sendiri. Jika proxy menjawab permintaan tersebut sendiri, izinkan permintaan melewatinya. |

946| `SSE connect failed (` dan teks lainnya | Teks di dalam tanda kurung adalah kesalahannya. Cari koneksi yang sama di log proxy itu sendiri. |

947| `SSE stream ended by server`, berulang kali | Periksa batas waktu proxy untuk respons yang berumur panjang. Satu baris seperti itu adalah hal yang normal. |

948| `SSE reconnected after` | Cari salah satu baris lain setelahnya. Baris ini tidak berarti ada sesuatu yang telah mencapai sesi. |

949 

950Jika log tidak memiliki satu pun dari baris-baris ini, atau log proxy tidak menunjukkan masalah apa pun, [laporkan masalah](#report-an-issue).

951 

952#### Menghentikan sesi agar tidak mencoba lagi

953 

954Sesi tetap menahan pesan tersebut dalam status tertunda, dan runner yang dapat melayani pemilik sesi akan mengambil sesi tersebut lagi. Hingga Anda mengubah proxy, sesi menunggu dengan cara yang sama setiap kali. Untuk menghentikannya, arsipkan sesi tersebut di claude.ai/code.

955 

791## Apa selanjutnya956## Apa selanjutnya

792 957 

793* [Sesuaikan sesi](https://code.claude.com/docs/id/self-hosted-environments-configuration.md): script wrapper, lifecycle hook, runner on-demand, server MCP, dan izin958* [Sesuaikan sesi](https://code.claude.com/docs/id/self-hosted-environments-configuration.md): script wrapper, lifecycle hook, runner on-demand, server MCP, dan izin

Details

121* **Sesi gagal dimulai dengan kesalahan git**: jika kesalahan tersebut menyertakan `could not read Username for` dari git diikuti URL host git Anda, runner tidak memiliki kredensial HTTPS untuk host tersebut.121* **Sesi gagal dimulai dengan kesalahan git**: jika kesalahan tersebut menyertakan `could not read Username for` dari git diikuti URL host git Anda, runner tidak memiliki kredensial HTTPS untuk host tersebut.

122 * **Sediakan kredensial HTTPS**: lihat [Konfigurasi git](https://code.claude.com/docs/id/self-hosted-environments-deploy.md#configure-git)122 * **Sediakan kredensial HTTPS**: lihat [Konfigurasi git](https://code.claude.com/docs/id/self-hosted-environments-deploy.md#configure-git)

123 * **Klon melalui SSH sebagai gantinya**: jika host runner sudah memiliki kunci SSH, lihat [Tulis ulang URL git untuk jaringan pribadi](https://code.claude.com/docs/id/self-hosted-environments-deploy.md#rewrite-git-urls-for-private-networks)123 * **Klon melalui SSH sebagai gantinya**: jika host runner sudah memiliki kunci SSH, lihat [Tulis ulang URL git untuk jaringan pribadi](https://code.claude.com/docs/id/self-hosted-environments-deploy.md#rewrite-git-urls-for-private-networks)

124 * **Setelah salah satu perbaikan**: mulai runner lagi dan pantau sesi yang gagal alih-alih memulai sesi baru. Jika sesi tersebut telah gagal beberapa kali, tunggu beberapa menit hingga runner mencatat `Picked up session`.

125 * **Untuk menggunakan repositori lain sebagai gantinya**: [arsipkan](https://code.claude.com/docs/id/claude-code-on-the-web.md#archive-sessions) atau [hapus](https://code.claude.com/docs/id/claude-code-on-the-web.md#delete-sessions) sesi yang gagal, kemudian mulai runner lagi dan mulai sesi baru. Jika tidak, runner dapat mengambil sesi yang gagal alih-alih sesi yang baru.

124 126 

125### Jika runner keluar127### Jika runner keluar

126 128 

Details

83 83 

84| Flag | Default | Description |84| Flag | Default | Description |

85| :- | :- | :- |85| :- | :- | :- |

86| `--hook-concurrency <n>` | `4` | Maksimum hook `spawn-runner` berjalan secara paralel. Juga membatasi berapa banyak permintaan spawn yang diklaim per poll. |86| `--hook-concurrency <n>` | `4` | Maksimum hook `spawn-runner` berjalan secara paralel. Juga membatasi berapa banyak permintaan spawn yang diklaim per poll. Orchestrator memeriksa permintaan spawn baru hanya setelah setiap hook yang dimulainya selesai, sehingga satu hook yang lambat menunda hook berikutnya dari orchestrator tersebut. |

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

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

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


116| `SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS` | `900000` | Berapa lama runner menunggu setelah session mencapai batas `--kill-session-after-min`, untuk turn yang sedang berjalan selesai atau release selesai, sebelum itu menghentikan session |116| `SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS` | `900000` | Berapa lama runner menunggu setelah session mencapai batas `--kill-session-after-min`, untuk turn yang sedang berjalan selesai atau release selesai, sebelum itu menghentikan session |

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

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

119| `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. |119| `CLAUDE_RUNNER_FETCH_DEPTH` | `50` | Git fetch depth untuk fresh clone. Atur integer positif, atau `full` atau `0` untuk fetch lengkap. Untuk clone yang sudah ada di workspace, lihat [Menggunakan kembali checkout yang telah disiapkan sebelumnya](https://code.claude.com/docs/id/self-hosted-environments-deploy.md#reuse-a-pre-warmed-checkout). |

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

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

122| `FORCE_AUTOUPDATE_PLUGINS` | unset | Ketika `1`, biarkan marketplace plugin auto-update meskipun binary dipasang |122| `FORCE_AUTOUPDATE_PLUGINS` | unset | Ketika `1`, biarkan marketplace plugin auto-update meskipun binary dipasang |


231 interval: 30s231 interval: 30s

232```232```

233 233 

234### Contoh aturan peringatan

235 

234Contoh aturan peringatan ini adalah titik awal; sesuaikan ambang batasnya untuk ukuran armada Anda:236Contoh aturan peringatan ini adalah titik awal; sesuaikan ambang batasnya untuk ukuran armada Anda:

235 237 

236```yaml theme={null}238```yaml theme={null}


252 annotations:254 annotations:

253 summary: "Runners are running mixed versions"255 summary: "Runners are running mixed versions"

254 - alert: ClaudeRunnerInitErrorsHigh256 - alert: ClaudeRunnerInitErrorsHigh

255 expr: increase(claude_code_self_hosted_runner_session_init_errors_total[10m]) > 3257 expr: sum by (namespace) (increase(claude_code_self_hosted_runner_session_init_errors_total[10m])) > 3

256 for: 5m258 for: 5m

257 labels: {severity: warning}259 labels: {severity: warning}

258 annotations:260 annotations:

259 summary: "Runner {{ $labels.pod }}: >3 session init failures in 10m (checkout hook / git / token / pre-init crash)"261 summary: "Sessions are failing before init (checkout hook / git / token / pre-init crash)"

260 - alert: ClaudeRunnerPollErrors262 - alert: ClaudeRunnerPollErrors

261 expr: sum by (pod) (rate(claude_code_self_hosted_runner_poll_errors_total[5m])) > 0263 expr: sum by (pod) (rate(claude_code_self_hosted_runner_poll_errors_total[5m])) > 0

262 for: 2m264 for: 2m


264 annotations:266 annotations:

265 summary: "Runner {{ $labels.pod }}: PollWork failing ({{ $value | humanize }}/s over 5m)"267 summary: "Runner {{ $labels.pod }}: PollWork failing ({{ $value | humanize }}/s over 5m)"

266 - alert: ClaudeRunnerSessionStartHookErrors268 - alert: ClaudeRunnerSessionStartHookErrors

267 expr: increase(claude_code_self_hosted_runner_session_start_hook_errors_total[10m]) > 3269 expr: sum by (namespace) (increase(claude_code_self_hosted_runner_session_start_hook_errors_total[10m])) > 3

268 for: 5m270 for: 5m

269 labels: {severity: warning}271 labels: {severity: warning}

270 annotations:272 annotations:

271 summary: "Runner {{ $labels.pod }}: >3 SessionStart hook failures in 10m"273 summary: "SessionStart hooks are failing"

272 274 

273 - name: claude-code-self-hosted-orchestrator275 - name: claude-code-self-hosted-orchestrator

274 rules:276 rules:


285 annotations:287 annotations:

286 summary: "Orchestrator {{ $labels.pod }} has not polled in >90s (poll loop waits on hook execution)"288 summary: "Orchestrator {{ $labels.pod }} has not polled in >90s (poll loop waits on hook execution)"

287 - alert: ClaudeOrchestratorCircuitBroken289 - alert: ClaudeOrchestratorCircuitBroken

288 expr: claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions > 0290 expr: max by (namespace) (claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions and on (instance) max_over_time(claude_code_self_hosted_orchestrator_connected[2m]) == 1) > 0

289 for: 1m291 for: 1m

290 labels: {severity: critical}292 labels: {severity: critical}

291 annotations:293 annotations:


304 summary: "Orchestrator {{ $labels.pod }}: >3 spawn-runner hook failures in 5m"306 summary: "Orchestrator {{ $labels.pod }}: >3 spawn-runner hook failures in 5m"

305```307```

306 308 

309### Peringatan untuk runner yang hilang dan sesi yang menunggu

310 

311Pada [armada tetap](https://code.claude.com/docs/id/self-hosted-environments-deploy.md#scale-the-fleet), muat `ClaudeRunnersBelowFloor`. Dengan [runner on-demand](https://code.claude.com/docs/id/self-hosted-environments-configuration.md#on-demand-runners), muat `ClaudeOrchestratorSessionsWaiting` dan `ClaudeOrchestratorQueueWaitHigh` sebagai gantinya.

312 

313#### Peringatan ketika armada tetap kehilangan runner

314 

315`ClaudeRunnersBelowFloor` dipicu ketika jumlah runner yang terdaftar dan di-scrape yang tersisa lebih sedikit dari batas bawah selama 10 menit:

316 

317```yaml theme={null}

318groups:

319 # Fixed fleets only. With on-demand runners the count follows demand,

320 # so ClaudeRunnersBelowFloor would fire whenever demand is low.

321 - name: claude-code-self-hosted-fixed-fleet-capacity

322 rules:

323 - alert: ClaudeRunnersBelowFloor

324 expr: (count(claude_code_self_hosted_runner_info{namespace="claude-runners"}) or vector(0)) < 2

325 for: 10m

326 labels: {severity: critical, namespace: claude-runners}

327 annotations:

328 summary: "Runners registered and scraped: {{ $value }}, below the floor. Check the runner workloads first, then the scrape targets if all are running."

329```

330 

331* **Batas bawah**: atur `2` dalam `expr` ke sekitar setengah jumlah replika Anda, dibulatkan ke atas. Dengan tiga replika, pertahankan `2`, dan peringatan dipicu ketika tersisa satu runner atau tidak ada sama sekali.

332* **Namespace**: ganti `claude-runners` di matcher dan di `labels`, lalu salin peringatan tersebut untuk setiap namespace tambahan. Jika target Anda tidak memiliki label `namespace`, hapus matcher dan label tersebut, jika tidak peringatan akan membaca 0 dan dipicu.

333* **`ClaudeRunnerPollStale` dan `ClaudeRunnerPollErrors`**: tetap muat keduanya dari [contoh aturan peringatan](#sample-alert-rules), karena `ClaudeRunnersBelowFloor` tetap menghitung runner yang tidak dapat melakukan poll

334 

335#### Peringatan ketika sesi menunggu runner on-demand

336 

337`ClaudeOrchestratorSessionsWaiting` dipicu ketika jumlah sesi yang menunggu runner tetap di atas 0 selama 10 menit. `ClaudeOrchestratorQueueWaitHigh` dipicu ketika lebih dari 1% waktu tunggu antrean dalam 10 menit terakhir melebihi 160 detik, dan kondisi itu bertahan selama 5 menit:

338 

339```yaml theme={null}

340groups:

341 # On-demand runners only. Needs no edit for the namespace.

342 - name: claude-code-self-hosted-on-demand-capacity

343 rules:

344 - alert: ClaudeOrchestratorSessionsWaiting

345 expr: |

346 max by (namespace) (

347 claude_code_self_hosted_orchestrator_pool_pending_sessions

348 and on (instance)

349 max_over_time(claude_code_self_hosted_orchestrator_connected[2m]) == 1

350 ) > 0

351 for: 10m

352 labels: {severity: warning}

353 annotations:

354 summary: "Sessions waiting for a runner: {{ $value }}, above the threshold for 10 minutes. Check claude_code_self_hosted_orchestrator_spawn_hooks_total by result, then runner workloads that don't start."

355 - alert: ClaudeOrchestratorQueueWaitHigh

356 expr: |

357 histogram_quantile(0.99, sum by (namespace, le) (

358 rate(claude_code_self_hosted_orchestrator_session_queue_wait_seconds_bucket[10m])

359 )) > 160

360 for: 5m

361 labels: {severity: warning}

362 annotations:

363 summary: "Over 1% of queue waits in the last 10 minutes exceeded 160 seconds. Check whether ClaudeOrchestratorDisconnected is firing, then claude_code_self_hosted_orchestrator_spawn_hooks_total by result and claude_code_self_hosted_orchestrator_spawn_hook_duration_seconds."

364```

365 

366* **Ambang batas**: jika selalu ada sesi yang menunggu, naikkan `> 0` dalam `ClaudeOrchestratorSessionsWaiting` di atas jumlah yang biasanya Anda lihat

367* **`ClaudeOrchestratorDisconnected`**: tetap muat dari [contoh aturan peringatan](#sample-alert-rules), karena `ClaudeOrchestratorSessionsWaiting` berhenti dipicu sekitar 2 menit setelah orchestrator terakhir di namespace tersebut terputus

368 

307### Meneruskan metrik proses anak sesi369### Meneruskan metrik proses anak sesi

308 370 

309Setiap sesi berjalan dalam proses anaknya sendiri dengan metrik OpenTelemetry-nya sendiri; pada `--capacity` di atas satu, runner menulis ulang cara metrik proses anak tersebut diekspos. Mengatur `OTEL_METRICS_EXPORTER=prometheus` pada host runner dan `CLAUDE_CODE_ENABLE_TELEMETRY=1` di environment sesi, misalnya dari [skrip wrapper](https://code.claude.com/docs/id/self-hosted-environments-configuration.md#wrapper-scripts) Anda atau environment runner itu sendiri, yang diwarisi oleh sesi, akan mengekspos ulang instrumen counter dan gauge setiap proses anak pada endpoint `/metrics` milik runner sendiri, bersama seri runner. Runner menulis ulang exporter proses anak agar mengirim melalui OTLP ke receiver khusus loopback pada port health, menandai setiap seri dengan label `session_id` dan `client_platform`, dan menghapus seri sebuah sesi ketika sesi tersebut berakhir. Histogram tidak diteruskan, dan metrik proses anak yang namanya akan bertabrakan dengan prefiks milik runner sendiri akan dibuang.371Setiap sesi berjalan dalam proses anaknya sendiri dengan metrik OpenTelemetry-nya sendiri; pada `--capacity` di atas satu, runner menulis ulang cara metrik proses anak tersebut diekspos. Mengatur `OTEL_METRICS_EXPORTER=prometheus` pada host runner dan `CLAUDE_CODE_ENABLE_TELEMETRY=1` di environment sesi, misalnya dari [skrip wrapper](https://code.claude.com/docs/id/self-hosted-environments-configuration.md#wrapper-scripts) Anda atau environment runner itu sendiri, yang diwarisi oleh sesi, akan mengekspos ulang instrumen counter dan gauge setiap proses anak pada endpoint `/metrics` milik runner sendiri, bersama seri runner. Runner menulis ulang exporter proses anak agar mengirim melalui OTLP ke receiver khusus loopback pada port health, menandai setiap seri dengan label `session_id` dan `client_platform`, dan menghapus seri sebuah sesi ketika sesi tersebut berakhir. Histogram tidak diteruskan, dan metrik proses anak yang namanya akan bertabrakan dengan prefiks milik runner sendiri akan dibuang.

Details

324}324}

325```325```

326 326 

327Entri ID model seperti `"claude-opus-5"` juga memungkinkan versi yang lebih baru yang memperpanjangnya, seperti Opus 5.5. Untuk memblokir salah satu versi itu, gunakan [`deniedModels`](#deniedmodels). Untuk membuat setiap entri ID model hanya memungkinkan versi yang dinamainya, gunakan [`availableModelsMatch`](#availablemodelsmatch). Lihat [Batasi pemilihan model](https://code.claude.com/docs/id/model-config.md#restrict-model-selection).327Entri ID model seperti `"claude-opus-5"` juga memungkinkan versi yang lebih baru yang memperpanjangnya, seperti Opus 5.5. Untuk memblokir salah satu versi itu, gunakan [`deniedModels`](#deniedmodels). Untuk membuat setiap entri ID model hanya memungkinkan versi yang dinamainya, gunakan [`availableModelsMatch`](#availablemodelsmatch). Lihat [Batasi pemilihan model](https://code.claude.com/docs/id/model-config.md#restrict-model-selection). Untuk ID penyedia pihak ketiga, lihat [Sematkan model untuk deployment pihak ketiga](https://code.claude.com/docs/id/model-config.md#pin-models-for-third-party-deployments).

328 328 

329### `availableModelsMatch`329### `availableModelsMatch`

330 330 


333* **Scope**: [`Managed`](#scopes). Claude Code mengabaikan kunci dalam pengaturan pengguna, proyek, dan lokal serta dalam `--settings`, dengan peringatan333* **Scope**: [`Managed`](#scopes). Claude Code mengabaikan kunci dalam pengaturan pengguna, proyek, dan lokal serta dalam `--settings`, dengan peringatan

334* **Type**: string, salah satu dari:334* **Type**: string, salah satu dari:

335 * `"prefix"`: entri ID model memungkinkan versinya dan ID model apa pun yang memperpanjangnya dengan segmen lain335 * `"prefix"`: entri ID model memungkinkan versinya dan ID model apa pun yang memperpanjangnya dengan segmen lain

336 * `"exact"`: entri ID model hanya memungkinkan versi yang dinamainya, termasuk ID tanggal versi itu, jadi `"claude-opus-5"` memungkinkan Opus 5 tetapi bukan `claude-opus-5-5`. Alias keluarga seperti `"opus"` masih memungkinkan seluruh keluarga, dan entri `best`, `opusplan`, dan `default` diabaikan336 * `"exact"`: entri ID model hanya memungkinkan versi yang dinamainya, jadi `"claude-opus-5"` memungkinkan Opus 5 tetapi bukan `claude-opus-5-5`. Entri seperti `"claude-opus-4-5"` juga memungkinkan ID model Anthropic bertanggalnya, `claude-opus-4-5-20251101`. Alias keluarga seperti `"opus"` masih memungkinkan seluruh keluarga, dan entri `best`, `opusplan`, dan `default` diabaikan

337* **Default**: `"prefix"`337* **Default**: `"prefix"`

338 338 

339Contoh ini memungkinkan Opus 5 dan Sonnet 5 dan tidak ada rilis yang lebih baru dari keduanya:339Contoh ini memungkinkan Opus 5 dan Sonnet 5 dan tidak ada rilis yang lebih baru dari keduanya:


1371 1371 

1372Claude Code menghapus garis miring di akhir jalur direktori, jadi `~/.aws` dan `~/.aws/` cocok dengan direktori yang sama. Sebelum v2.1.224, Claude Code meneruskan garis miring di akhir tersebut ke sandbox, dan Claude masih dapat membaca atau menulis jalur di bawah entri `denyRead` atau `denyWrite` yang ditulis dengan garis miring di akhir.1372Claude Code menghapus garis miring di akhir jalur direktori, jadi `~/.aws` dan `~/.aws/` cocok dengan direktori yang sama. Sebelum v2.1.224, Claude Code meneruskan garis miring di akhir tersebut ke sandbox, dan Claude masih dapat membaca atau menulis jalur di bawah entri `denyRead` atau `denyWrite` yang ditulis dengan garis miring di akhir.

1373 1373 

1374Claude Code juga menghapus `/**` di akhir, jadi `~/build/**` dan `~/build` mencakup direktori yang sama. Apakah wildcard seperti `*` berfungsi bergantung pada daftar tempat entri berada dan pada platform:1374##### Di mana wildcard berfungsi dalam path sandbox

1375 1375 

1376* **`allowWrite` dan `denyWrite`**: di macOS, wildcard berfungsi. Di Linux dan WSL2, sandbox memasang jalur konkret, jadi Claude Code melewati entri yang berisi `*`, `?`, atau `[` setelah `/**` di akhir dihapus, dan entri itu tidak berpengaruh. Claude Code menambahkan jalur dari aturan izin `Edit` Anda ke daftar ini, jadi batas yang sama berlaku untuknya, dan tab **Config** `/sandbox` memperingatkan tentang aturan izin `Edit` dan `Read` yang berisi wildcard.1376Wildcard `*`, `?`, dan `**` berfungsi di keempat daftar path `sandbox.filesystem` di macOS dan di lebih sedikit tempat di Linux dan WSL2:

1377* **`denyRead` dan `allowRead`**: wildcard berfungsi di setiap platform. Di Linux dan WSL2, Claude Code memperluas entri baca ke jalur konkret yang cocok, yang tidak dilakukannya untuk daftar tulis.

1378 1377 

1379Kurung kurawal dicocokkan sebagai karakter biasa dalam nama, jadi `~/data/{keys,tokens}` mencakup direktori yang secara harfiah bernama `{keys,tokens}`, bukan dua alternatif. Untuk mencakup `~/data/keys` dan `~/data/tokens`, tambahkan masing-masing sebagai entri tersendiri.1378| Daftar `sandbox.filesystem` | Yang berfungsi di Linux dan WSL2 | Contoh yang tidak berfungsi di Linux dan WSL2 | Yang sebaiknya ditulis |

1379| :- | :- | :- | :- |

1380| `denyRead`, `allowRead` | `/**` di akhir berfungsi, sehingga `~/build/**` mencakup direktori yang sama dengan `~/build`. Wildcard lain hanya berfungsi setelah nama direktori pertama dari [path lengkap](#sandbox-path-prefixes) entri. | `/**/*.pem` di `denyRead` tidak mencakup apa pun, sehingga tidak memblokir pembacaan apa pun | `/srv/**/*.pem`, dengan satu entri untuk setiap direktori tingkat atas |

1381| `allowWrite`, `denyWrite` | Hanya `/**` di akhir yang berfungsi, sehingga `~/build/**` mencakup direktori yang sama dengan `~/build` | `./src/*` hanya mencakup file atau direktori di `src` yang benar-benar bernama `*`, dan tidak mencakup apa pun jika tidak ada | `./src`, yang mencakup semua yang ada di bawah `src`, atau satu entri untuk setiap path |

1382 

1383Dalam `~/keys/*.pem`, wildcard muncul setelah nama direktori pertama, yaitu `home` untuk direktori home `/home/alice`:

1384 

1385```text theme={null}

1386~/keys/*.pem the entry

1387/home/alice/keys/*.pem its full path

1388 ^^^^ the first directory name, home

1389```

1390 

1391Di Linux dan WSL2, tab **Config** di `/sandbox` dalam sebuah sesi memberikan peringatan tentang aturan izin `Edit` yang berisi wildcard selain `/**` di akhir. Wildcard tersebut tidak berfungsi untuk perintah yang di-sandbox. Tambahkan setiap path yang seharusnya dicakup aturan, atau direktori yang menampungnya, ke `allowWrite` untuk aturan allow atau `denyWrite` untuk aturan deny.

1392 

1393##### Nama direktori dengan kurung siku, kurung kurawal, atau tanda kurung

1394 

1395Untuk mengizinkan atau memblokir direktori yang namanya berisi kurung siku, tulis nama tersebut apa adanya, seperti `./app/[slug]`. Dalam entri itu, `[slug]` adalah nama asli direktori, termasuk kurung sikunya:

1396 

1397```text theme={null}

1398app/

1399└── [slug]/

1400 └── page.tsx

1401```

1402 

1403Entri tersebut mencakup semua yang ada di bawah direktori, jadi jangan tambahkan `/**` di akhir. Di macOS serta di Linux dan WSL2, direktori `app/[slug]` harus sudah ada ketika perintah yang di-sandbox dimulai.

1404 

1405* **Kurung siku seperti `[slug]`**: di setiap daftar di macOS, serta di `denyRead` dan `allowRead` di Linux dan WSL2, kurung siku dalam `./app/[slug]` juga merupakan pola. Entri tersebut kemudian juga cocok dengan path apa pun di bawah `app` yang bernama satu karakter dari `slug`, seperti `app/s` atau `app/g`. Dengan entri tersebut di `allowRead`, atau di `allowWrite` di macOS, perintah yang di-sandbox juga dapat menjangkau path tersebut. Ganti nama path mana pun yang seharusnya tidak dijangkau.

1406* **Kurung siku seperti `[user-id]` atau `[post-id]`, di mana karakter di kiri tanda hubung diurutkan setelah karakter di kanannya**: `./app/[user-id]` hanya mencakup direktori dengan nama persis itu, di setiap daftar di setiap platform. Sebelum v2.1.304, perintah yang di-sandbox di Linux dan WSL2 gagal dimulai selama `denyRead` atau `allowRead` berisi entri semacam itu.

1407* **Kurung kurawal dan tanda kurung**: ini adalah karakter biasa, sehingga `~/data/{keys,tokens}` mencakup satu direktori bernama `{keys,tokens}`, bukan dua alternatif. Untuk mencakup `~/data/keys` dan `~/data/tokens`, tambahkan masing-masing sebagai entri tersendiri.

1380 1408 

1381### `sandbox.filesystem.allowWrite`1409### `sandbox.filesystem.allowWrite`

1382 1410 


3470 3498 

3471Pencocokan nama host tidak peka huruf besar-kecil dan memperlakukan `hooks.example.com.`, dengan titik trailing yang menandai nama domain yang sepenuhnya memenuhi syarat, sama seperti `hooks.example.com`, yang merupakan cara DNS memperlakukannya. Allowlist berlaku untuk hooks dari setiap sumber, termasuk pengaturan terkelola.3499Pencocokan nama host tidak peka huruf besar-kecil dan memperlakukan `hooks.example.com.`, dengan titik trailing yang menandai nama domain yang sepenuhnya memenuhi syarat, sama seperti `hooks.example.com`, yang merupakan cara DNS memperlakukannya. Allowlist berlaku untuk hooks dari setiap sumber, termasuk pengaturan terkelola.

3472 3500 

3473Dalam opsi `managedSettings` Agent SDK, Claude Code mengabaikan kunci ini ketika daftarnya berisi entri, jadi teruskan daftar tersebut dalam opsi `settings` SDK sebagai gantinya. Lihat [apa yang dilakukan setiap nilai dalam pengaturan induk](https://code.claude.com/docs/id/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).3501Dalam opsi `managedSettings` Agent SDK, Claude Code mengabaikan daftar yang berisi entri, jadi teruskan daftar tersebut dalam [opsi `settings`](https://code.claude.com/docs/id/agent-sdk/typescript#options) SDK sebagai gantinya. Lihat [apa yang dilakukan daftar kosong dalam pengaturan induk](https://code.claude.com/docs/id/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).

3474 3502 

3475### `allowManagedHooksOnly`3503### `allowManagedHooksOnly`

3476 3504 


3520Jangkauan tergantung pada file mana yang membawa kunci:3548Jangkauan tergantung pada file mana yang membawa kunci:

3521 3549 

3522* **Dalam pengaturan terkelola**: Claude Code menonaktifkan setiap hook yang dikonfigurasi, termasuk yang terkelola, dan terus menjalankan hooks yang didaftarkan [Agent SDK](https://code.claude.com/docs/id/agent-sdk/overview.md) dalam proses3550* **Dalam pengaturan terkelola**: Claude Code menonaktifkan setiap hook yang dikonfigurasi, termasuk yang terkelola, dan terus menjalankan hooks yang didaftarkan [Agent SDK](https://code.claude.com/docs/id/agent-sdk/overview.md) dalam proses

3523* **Dalam opsi `managedSettings` Agent SDK**: Claude Code memperlakukan kunci ini sebagai `allowManagedHooksOnly: true`, jadi lihat [apa yang berjalan di bawah `allowManagedHooksOnly`](#what-runs-under-allowmanagedhooksonly) untuk mengetahui hook mana yang berhenti. Pada mesin tempat administrator men-deploy pengaturan terkelola, Claude Code mengabaikan kunci ini kecuali administrator [mengizinkan host penyemat menambahkan kebijakan](https://code.claude.com/docs/id/managed-settings.md#let-an-embedding-host-add-policy). Memerlukan Claude Code v2.1.309 atau lebih baru.3551* **Dalam opsi `managedSettings` Agent SDK**: pada mesin tempat administrator men-deploy pengaturan terkelola, Claude Code mengabaikan kunci ini kecuali administrator [mengizinkan host penyemat menambahkan kebijakan](https://code.claude.com/docs/id/managed-settings.md#let-an-embedding-host-add-policy). Di tempat kunci ini berlaku, hook user, project, local, dan plugin berhenti, begitu pula hook apa pun dalam opsi `settings` SDK. Hook terkelola milik administrator, hook dari plugin yang [dipaksa diaktifkan](#enabledplugins), dan [callback hook SDK](https://code.claude.com/docs/id/agent-sdk/hooks.md) Anda terus berjalan. Memerlukan Claude Code v2.1.309 atau lebih baru.

3524* **Dalam file pengaturan lainnya**: Claude Code menonaktifkan user, project, local, dan plugin hooks; hook terkelola, hook Agent SDK, dan hooks dari plugin yang dipaksa diaktifkan dalam [`enabledPlugins`](#enabledplugins) terkelola terus berjalan3552* **Dalam file pengaturan lainnya**: Claude Code menonaktifkan user, project, local, dan plugin hooks; hook terkelola, hook Agent SDK, dan hooks dari plugin yang dipaksa diaktifkan dalam [`enabledPlugins`](#enabledplugins) terkelola terus berjalan

3525 3553 

3526Kunci ini juga menghentikan [mods](https://code.claude.com/docs/id/plugins/mods/overview.md), yaitu plugin yang kodenya mendaftarkan hook:3554Kunci ini juga menghentikan [mods](https://code.claude.com/docs/id/plugins/mods/overview.md), yaitu plugin yang kodenya mendaftarkan hook:


3624 3652 

3625Allowlist berlaku untuk hooks dari setiap sumber, termasuk pengaturan terkelola.3653Allowlist berlaku untuk hooks dari setiap sumber, termasuk pengaturan terkelola.

3626 3654 

3627Dalam opsi `managedSettings` Agent SDK, Claude Code mengabaikan kunci ini ketika daftarnya berisi entri, jadi teruskan daftar tersebut dalam opsi `settings` SDK sebagai gantinya. Lihat [apa yang dilakukan setiap nilai dalam pengaturan induk](https://code.claude.com/docs/id/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).3655Dalam opsi `managedSettings` Agent SDK, Claude Code mengabaikan daftar yang berisi entri, jadi teruskan daftar tersebut dalam [opsi `settings`](https://code.claude.com/docs/id/agent-sdk/typescript#options) SDK sebagai gantinya. Lihat [apa yang dilakukan daftar kosong dalam pengaturan induk](https://code.claude.com/docs/id/claude-apps-gateway#how-hook-and-skill-keys-in-parent-settings-take-effect).

3628 3656 

3629### `workflowKeywordTriggerEnabled`3657### `workflowKeywordTriggerEnabled`

3630 3658 


3841* **Type**: Boolean3869* **Type**: Boolean

3842 * `true`: Claude Code tidak pernah menjalankan perintah yang dideklarasikan marketplace, tidak menginstal atau memperbarui plugins yang bersumber perintah, dan berhenti memuat yang sudah diinstal3870 * `true`: Claude Code tidak pernah menjalankan perintah yang dideklarasikan marketplace, tidak menginstal atau memperbarui plugins yang bersumber perintah, dan berhenti memuat yang sudah diinstal

3843 * `false`: Claude Code mengizinkan plugins yang bersumber perintah secara eksplisit3871 * `false`: Claude Code mengizinkan plugins yang bersumber perintah secara eksplisit

3844* **Default**: unset, jadi Claude Code mengikuti [`allowManagedHooksOnly`](#allowmanagedhooksonly): organisasi yang membatasi eksekusi hook ke managed settings juga mendapatkan sumber perintah dinonaktifkan3872* **Default**: unset, jadi Claude Code mengikuti [`allowManagedHooksOnly`](#allowmanagedhooksonly): organisasi yang membatasi eksekusi hook ke managed settings juga mendapatkan sumber perintah dinonaktifkan. Aplikasi yang meneruskan [`disableAllHooks: true`](#disableallhooks) dalam opsi `managedSettings` milik Agent SDK tidak dengan sendirinya menonaktifkan sumber perintah.

3845 3873 

3846```json managed-settings.json theme={null}3874```json managed-settings.json theme={null}

3847{3875{

Details

127 127 

128```bash ~/.tmux.conf theme={null}128```bash ~/.tmux.conf theme={null}

129set -g allow-passthrough on129set -g allow-passthrough on

130set -g focus-events on

130set -s extended-keys on131set -s extended-keys on

131set -as terminal-features 'xterm*:extkeys'132set -as terminal-features 'xterm*:extkeys'

132```133```

133 134 

134Baris `allow-passthrough` memungkinkan notifikasi dan pembaruan progress mencapai terminal luar alih-alih ditelan oleh tmux. Baris `extended-keys` memungkinkan tmux membedakan Shift+Enter dari Enter biasa sehingga pintasan baris baru berfungsi.135Baris `allow-passthrough` memungkinkan notifikasi dan pembaruan progress mencapai terminal luar alih-alih ditelan oleh tmux. Baris `extended-keys` memungkinkan tmux membedakan Shift+Enter dari Enter biasa sehingga pintasan baris baru berfungsi.

135 136 

137[`Image` milik mod](https://code.claude.com/docs/id/plugins/mods/reference#elements) memerlukan baris `allow-passthrough` dan `focus-events`, beserta [persyaratan untuk menggambar di dalam tmux](https://code.claude.com/docs/id/plugins/mods/gallery.md#draw-an-image-inside-tmux) lainnya. Setelah Anda menambahkan baris-baris tersebut, lepaskan juga (detach) dari tmux, sambungkan kembali (attach), dan mulai ulang Claude Code.

138 

136## Perbaiki Backspace menghapus seluruh kata di Windows139## Perbaiki Backspace menghapus seluruh kata di Windows

137 140 

138Di Windows, Claude Code membaca Backspace yang tiba sebagai `^H` sebagai Ctrl+Backspace, yang [menghapus kata sebelumnya](https://code.claude.com/docs/id/interactive-mode.md#text-editing), kecuali ketika `TERM_PROGRAM` adalah `mintty` atau `TERM` adalah `cygwin`. Di macOS dan Linux, Claude Code membacanya sebagai Backspace biasa.141Di Windows, Claude Code membaca Backspace yang tiba sebagai `^H` sebagai Ctrl+Backspace, yang [menghapus kata sebelumnya](https://code.claude.com/docs/id/interactive-mode.md#text-editing), kecuali ketika `TERM_PROGRAM` adalah `mintty` atau `TERM` adalah `cygwin`. Di macOS dan Linux, Claude Code membacanya sebagai Backspace biasa.

ultrareview.md +2 −2

Details

176Subperintah keluar dengan salah satu dari tiga kode:176Subperintah keluar dengan salah satu dari tiga kode:

177 177 

178* **0**: tinjauan selesai, dengan atau tanpa temuan178* **0**: tinjauan selesai, dengan atau tanpa temuan

179* **1**: tinjauan gagal diluncurkan atau dihentikan sebelum selesai, sesi cloud mengalami kesalahan, atau timeout berlalu. Kode juga 1 ketika [folder tidak dipercaya](#trust-the-folder-before-the-review-runs), termasuk ketika Anda menjawab `n` atau menekan Ctrl-C pada pertanyaan kepercayaan.179* **1**: tinjauan gagal diluncurkan atau dihentikan sebelum selesai, sesi cloud mengalami kesalahan, atau timeout berlalu. Kode juga 1 ketika [folder tidak dipercaya](#trust-the-folder-before-the-review-runs), termasuk ketika Anda menjawab `n`, menekan Enter, atau menekan Ctrl-C pada pertanyaan kepercayaan.

180* **130**: Anda menekan Ctrl-C saat subperintah sedang meluncurkan tinjauan, menunggu temuan, atau mengirim komentar `--post`, bukan pada pertanyaan kepercayaan180* **130**: Anda menekan Ctrl-C saat subperintah sedang meluncurkan tinjauan, menunggu temuan, atau mengirim komentar `--post`, bukan pada pertanyaan kepercayaan

181 181 

182Jika subperintah keluar sebelum temuan tiba, temuan tersebut tidak pernah mencapai terminal Anda. Tinjauan mungkin masih berjalan di cloud. Menjalankan subperintah lagi akan memulai tinjauan baru alih-alih melanjutkan tinjauan tersebut, dan tinjauan baru [menggunakan jalankan gratis atau ditagih sebagai kredit penggunaan](#pricing-and-free-runs).182Jika subperintah keluar sebelum temuan tiba, temuan tersebut tidak pernah mencapai terminal Anda. Tinjauan mungkin masih berjalan di cloud. Menjalankan subperintah lagi akan memulai tinjauan baru alih-alih melanjutkan tinjauan tersebut, dan tinjauan baru [menggunakan jalankan gratis atau ditagih sebagai kredit penggunaan](#pricing-and-free-runs).


198claude ultrareview 1234 --trust-workspace198claude ultrareview 1234 --trust-workspace

199```199```

200 200 

201Untuk meninjau pull request yang tidak dipercaya, jalankan `claude ultrareview <PR number> --trust-workspace` dari branch yang Anda percayai. Tidak seperti `y`, flag ini tidak menyimpan apa pun. PR [dikloning di cloud](#review-a-pull-request), sehingga Anda tidak memerlukan branch-nya secara lokal.201Untuk meninjau pull request yang tidak dipercaya, jalankan `claude ultrareview <PR number> --trust-workspace` dari branch yang Anda percayai. PR [dikloning di cloud](#review-a-pull-request), sehingga Anda tidak memerlukan branch-nya secara lokal.

202 202 

203## Bagaimana ultrareview dibandingkan dengan /code-review203## Bagaimana ultrareview dibandingkan dengan /code-review

204 204 

vs-code.md +6 −1

Details

1001 1001 

1002### Dikte atau tab Web gagal di balik proxy yang melakukan inspeksi TLS1002### Dikte atau tab Web gagal di balik proxy yang melakukan inspeksi TLS

1003 1003 

1004Saat dikte atau tab Web gagal dengan kesalahan sertifikat seperti `unable to get local issuer certificate`, atur [`NODE_EXTRA_CA_CERTS`](https://code.claude.com/docs/id/network-config#custom-ca-certificates) di blok `env` pada `~/.claude/settings.json`. Atur nilainya ke path file PEM yang berisi sertifikat root CA proxy Anda, yang dapat diberikan oleh tim IT Anda. Teks kesalahan tersebut terdapat pada tombol mikrofon atau di log ekstensi:1004Saat dikte atau tab Web gagal dengan kesalahan sertifikat seperti `unable to get local issuer certificate`, atur [`NODE_EXTRA_CA_CERTS`](https://code.claude.com/docs/id/network-config#custom-ca-certificates) di blok `env` pada `~/.claude/settings.json`. Atur nilainya ke path file PEM yang berisi sertifikat root CA proxy Anda, yang dapat diberikan oleh tim IT Anda. Kegagalan tersebut muncul pada tombol mikrofon atau tab Web, atau di log:

1005 1005 

1006* **Dikte**: tombol mikrofon menampilkan teks kesalahan setelah `Dictation error: WebSocket error:`.1006* **Dikte**: tombol mikrofon menampilkan teks kesalahan setelah `Dictation error: WebSocket error:`.

1007* **Tab Web**: tab yang mencantumkan [sesi cloud](#resume-cloud-sessions-from-claude-ai) menampilkan `Remote server is not connected` tanpa teks kesalahan. Untuk membacanya di log:1007* **Tab Web**: tab yang mencantumkan [sesi cloud](#resume-cloud-sessions-from-claude-ai) menampilkan `Remote server is not connected` tanpa teks kesalahan. Untuk membacanya di log:

1008 1. Jalankan **Claude Code: Show Logs** dari [Command Palette](#vs-code-commands-and-shortcuts) untuk membuka output channel `Claude VSCode`.1008 1. Jalankan **Claude Code: Show Logs** dari [Command Palette](#vs-code-commands-and-shortcuts) untuk membuka output channel `Claude VSCode`.

1009 2. Klik **Reconnect** pada tab tersebut dan tunggu hingga tab berhenti menampilkan `Connecting…`.1009 2. Klik **Reconnect** pada tab tersebut dan tunggu hingga tab berhenti menampilkan `Connecting…`.

1010 3. Cari `Error fetching remote sessions:` atau `Failed to fetch organization UUID:` di output channel tersebut, lalu baca teks kesalahan setelah awalan itu pada baris cocok yang terbaru.1010 3. Cari `Error fetching remote sessions:` atau `Failed to fetch organization UUID:` di output channel tersebut, lalu baca teks kesalahan setelah awalan itu pada baris cocok yang terbaru.

1011* **Peringatan log**: peringatan yang menyebutkan `an authority that Claude Code does not trust` melaporkan kesalahan sertifikat. Di balik proxy yang melakukan inspeksi TLS, atur `NODE_EXTRA_CA_CERTS` di `env` pada `~/.claude/settings.json`. Versi sebelum v2.1.309 tidak menulis peringatan ini ke log.

1011 1012 

1012Perbaikan ini memerlukan ekstensi versi 2.1.307 atau lebih baru, jadi perbarui ekstensi terlebih dahulu. Kemudian atur `NODE_EXTRA_CA_CERTS` ke path lengkap file sertifikat, ditulis tanpa `~`. Untuk path Windows, tulis setiap backslash dua kali di `settings.json`, seperti pada `C:\\certs\\example-ca.pem`.1013Perbaikan ini memerlukan ekstensi versi 2.1.307 atau lebih baru, jadi perbarui ekstensi terlebih dahulu. Kemudian atur `NODE_EXTRA_CA_CERTS` ke path lengkap file sertifikat, ditulis tanpa `~`. Untuk path Windows, tulis setiap backslash dua kali di `settings.json`, seperti pada `C:\\certs\\example-ca.pem`.

1013 1014 

1015> [!NOTE]

1016>

1017> Di jendela yang terhubung ke WSL, host SSH, dev container, atau sistem lain, simpan file sertifikat dan edit `~/.claude/settings.json` di sistem tersebut, bukan di komputer lokal Anda.

1018 

1014Contoh ini menunjuk file sertifikat di path Linux atau macOS `/etc/ssl/certs/example-ca.pem`:1019Contoh ini menunjuk file sertifikat di path Linux atau macOS `/etc/ssl/certs/example-ca.pem`:

1015 1020 

1016```json ~/.claude/settings.json theme={null}1021```json ~/.claude/settings.json theme={null}