SpyBara
Go Premium

Documentation 2026-07-20 23:01 UTC to 2026-07-21 23:00 UTC

7 files changed +302 −228. View all changes and history on the product overview
2026
Sat 25 01:57 Fri 24 23:01 Thu 23 23:57 Wed 22 23:59 Tue 21 23:00 Mon 20 23:01 Sat 18 16:02 Fri 17 22:57 Thu 16 22:59 Wed 15 22:00 Tue 14 23:01 Mon 13 23:57 Sat 11 19:03 Fri 10 17:00 Thu 9 23:58 Wed 8 16:02 Tue 7 16:02 Mon 6 23:57 Sat 4 03:01 Fri 3 23:00 Thu 2 23:59 Wed 1 21:01

agent-view.md +54 −12

Details

70 70 

71Anda dapat menggunakan `claude agents` sebagai titik masuk utama Anda alih-alih `claude`: kirim setiap tugas dari tampilan agen, lampirkan ketika Anda menginginkan percakapan lengkap, dan tekan `←` untuk kembali ke tabel.71Anda dapat menggunakan `claude agents` sebagai titik masuk utama Anda alih-alih `claude`: kirim setiap tugas dari tampilan agen, lampirkan ketika Anda menginginkan percakapan lengkap, dan tekan `←` untuk kembali ke tabel.

72 72 

73{/* min-version: 2.1.205 */}Di dalam sesi `claude` biasa, petunjuk `←` footer prompt menghitung agen latar belakang yang menunggu Anda, seperti `← 2 agents`, dan kembali ke `← for agents` ketika tidak ada yang memerlukan input. Hitungan di atas 99 ditampilkan sebagai `99+`. Hitungan menyegarkan sekitar setiap sepuluh detik saat terminal difokuskan dan segera ketika fokus kembali. Warna berubah sebentar ketika bergerak dan ketika agen selesai, kecuali pengaturan [`prefersReducedMotion`](/id/settings#available-settings) aktif, dan tersembunyi dalam [mode pembaca layar](/id/accessibility). Di [Amazon Bedrock, Google Cloud's Agent Platform, dan Microsoft Foundry](/id/third-party-integrations), petunjuk tetap dalam bentuk `← for agents` biasa tanpa hitungan. Memerlukan Claude Code v2.1.205 atau lebih baru.

74 

73<h2 id="monitor-sessions-with-agent-view">75<h2 id="monitor-sessions-with-agent-view">

74 Pantau sesi dengan tampilan agen76 Pantau sesi dengan tampilan agen

75</h2>77</h2>

76 78 

77Jalankan `claude agents` untuk membuka tampilan agen. Ini mengambil alih terminal penuh dan mencantumkan setiap sesi yang dikelompokkan berdasarkan status, dengan sesi yang disematkan dan yang membutuhkan Anda di bagian atas. Setiap baris menunjukkan nama sesi, aktivitas saat ini, dan berapa lama yang lalu sesi terakhir berubah.79Jalankan `claude agents` untuk membuka tampilan agen. Ini mengambil alih terminal penuh dan mencantumkan setiap sesi yang dikelompokkan berdasarkan status, dengan sesi yang disematkan dan yang membutuhkan Anda di bagian atas. Setiap baris menunjukkan nama sesi, aktivitas saat ini, dan usianya, dihitung dari saat sesi dibuat; usia sesi yang selesai membeku pada berapa lama waktu yang dibutuhkan untuk menjalankannya.

78 80 

79Nama tersebut berwarna dengan warna yang ditetapkan oleh [`/color`](/id/commands) dalam sesi itu. {/* min-version: 2.1.199 */}Mulai dari v2.1.199, warna terbawa ketika Anda [mengirim sesi ke latar belakang](#from-inside-a-session) dengan `←` atau `/background`.81Nama tersebut berwarna dengan warna yang ditetapkan oleh [`/color`](/id/commands) dalam sesi itu. {/* min-version: 2.1.199 */}Mulai dari v2.1.199, warna terbawa ketika Anda [mengirim sesi ke latar belakang](#from-inside-a-session) dengan `←` atau `/background`.

80 82 


149 151 

150Ringkasan satu baris di setiap baris dihasilkan oleh [model kelas Haiku](/id/model-config) sehingga baris dapat memberi tahu Anda apa yang dilakukan sesi, apa yang dibutuhkannya, atau apa yang dihasilkannya tanpa membuka transkrip. Saat sesi secara aktif bekerja, ringkasan menyegarkan paling banyak sekali setiap 15 detik dari output terbaru sesi itu sendiri tanpa mengirim permintaan model, dan model menulis ringkasan segar ketika setiap giliran berakhir.152Ringkasan satu baris di setiap baris dihasilkan oleh [model kelas Haiku](/id/model-config) sehingga baris dapat memberi tahu Anda apa yang dilakukan sesi, apa yang dibutuhkannya, atau apa yang dihasilkannya tanpa membuka transkrip. Saat sesi secara aktif bekerja, ringkasan menyegarkan paling banyak sekali setiap 15 detik dari output terbaru sesi itu sendiri tanpa mengirim permintaan model, dan model menulis ringkasan segar ketika setiap giliran berakhir.

151 153 

152Baris yang bekerja menunjukkan apa yang dikatakan sesi sedang dilakukan, dan baris yang diblokir menunjukkan pertanyaan yang diajukannya. Selama giliran yang panjang, model juga menulis ulang ringkasan sekitar sekali semenit, menunggu dua kali lebih lama setelah setiap penulisan ulang hingga empat menit, sehingga baris yang sibuk tidak terus menampilkan ringkasan yang sudah ketinggalan zaman. Teks dipotong pada 64 kolom; buka [panel intip](#peek-and-reply) untuk membaca seluruh kalimat. Sebelum v2.1.205, baris yang bekerja dapat menampilkan pemanggilan alat mentah alih-alih laporan, dan sesi yang menjalankan item kerja paralel menampilkan hitungan `done/total` seperti `2/5` sebelum teks.154Baris yang bekerja menunjukkan apa yang dikatakan sesi sedang dilakukan, dan baris yang diblokir menunjukkan pertanyaan yang diajukannya. Selama giliran yang panjang, model juga menulis ulang ringkasan sekitar sekali semenit, menunggu dua kali lebih lama setelah setiap penulisan ulang hingga empat menit, sehingga baris yang sibuk tidak terus menampilkan ringkasan yang sudah ketinggalan zaman. Teks ringkasan mengisi lebar sisa baris dan hanya terpotong di tepi kanan terminal; buka [panel intip](#peek-and-reply) untuk membaca kalimat yang dipotong tepi. Sebelum v2.1.206, teks dipotong pada 64 kolom terlepas dari lebar terminal.

153 155 

154Ketika daftar [dikelompokkan berdasarkan direktori](#organize-the-list), ringkasan dibuka dengan status sesi sebagai kata berwarna, seperti `Needs input · double jump or wall climb?`. Dalam pengelompokan status default, header grup sudah menamai status, jadi baris hanya menampilkan ringkasan. Sebelum v2.1.205, baris yang dikelompokkan direktori tidak membawa kata status.156Ketika daftar [dikelompokkan berdasarkan direktori](#organize-the-list), ringkasan dibuka dengan status sesi sebagai kata berwarna, seperti `Needs input · double jump or wall climb?`. Dalam pengelompokan status default, header grup sudah menamai status, jadi baris hanya menampilkan ringkasan. Sebelum v2.1.205, baris yang dikelompokkan direktori tidak membawa kata status.

155 157 


184 Intip dan balas186 Intip dan balas

185</h3>187</h3>

186 188 

187Tekan `Space` pada baris yang dipilih untuk membuka panel intip. Ini membuka dengan kalimat status lengkap sesi, yang baris potong, dan berapa lama yang lalu berubah, diikuti oleh permintaan tarik apa pun yang tertaut ke sesi. Untuk sesi yang menunggu Anda, pertanyaan pasti yang diajukannya juga muncul di atas input balasan. Sebagian besar waktu panel intip cukup dan Anda tidak perlu membuka transkrip lengkap.189Tekan `Space` pada baris yang dipilih untuk membuka panel intip. Ini membuka dengan kalimat yang baris potong di tepi terminal, dan kalimat mana itu tergantung pada status sesi:

190 

191* Sesi yang menunggu Anda: pertanyaan pasti yang diajukannya, di atas input balasan

192* Sesi yang selesai: hasilnya

193* Sesi yang bekerja: kalimat status lengkapnya

194 

195Permintaan tarik apa pun yang tertaut ke sesi tercantum selanjutnya. Untuk sesi yang menunggu Anda, baris seperti `waiting 3m` di bawahnya menunjukkan berapa lama ia telah menunggu, dan itu adalah satu-satunya waktu yang ditampilkan di panel. Usia di tepi kanan baris adalah angka yang berbeda: itu dihitung dari saat sesi dimulai.

188 196 

189Sebelum v2.1.205, panel mengulangi kalimat status hanya ketika tidak memiliki apa pun untuk ditampilkan dan menamai item kerja paralel yang paling lama berjalan.197Sebagian besar waktu panel intip cukup dan Anda tidak perlu membuka transkrip lengkap.

198 

199Sebelum v2.1.207, setiap intip dibuka dengan kalimat status dan stempel waktu telanjang, dan sesi yang diblokir pertanyaannya muncul di bawahnya dengan awalan stempel waktu yang sama untuk kedua kalinya.

190 200 

191Ketik balasan di panel intip dan tekan `Enter` untuk mengirimnya ke sesi itu. Ketika sesi mengajukan pertanyaan pilihan ganda, panel intip menunjukkan opsi dan Anda dapat menekan tombol angka untuk memilih satu. Untuk sesi terhalang lainnya, tekan `Tab` untuk mengisi input dengan balasan yang disarankan yang dapat Anda edit sebelum mengirim. Awali balasan dengan `!` untuk mengirim perintah Bash sebagai gantinya.201Ketik balasan di panel intip dan tekan `Enter` untuk mengirimnya ke sesi itu. Ketika sesi mengajukan pertanyaan pilihan ganda, panel intip menunjukkan opsi dan Anda dapat menekan tombol angka untuk memilih satu. Untuk sesi terhalang lainnya, tekan `Tab` untuk mengisi input dengan balasan yang disarankan yang dapat Anda edit sebelum mengirim. Awali balasan dengan `!` untuk mengirim perintah Bash sebagai gantinya.

192 202 

203Balasan yang tidak dapat dikirim, karena layanan latar belakang tidak dapat dijangkau atau pengiriman gagal, disimpan dan dikirim ke sesi sebagai prompt berikutnya ketika prosesnya dimulai lagi, dan pesan kesalahan mengatakan balasan disimpan. Balasan dengan awalan `!` tidak disimpan, karena teks yang disimpan akan mencapai sesi sebagai prompt biasa daripada menjalankan sebagai perintah Bash.

204 

193Dengan [dikte suara](/id/voice-dictation) diaktifkan, tahan atau ketuk tombol push-to-talk Anda saat input balasan difokuskan untuk mendikte balasan alih-alih mengetiknya. Hal yang sama berlaku dalam input pengiriman di bagian bawah tampilan agen.205Dengan [dikte suara](/id/voice-dictation) diaktifkan, tahan atau ketuk tombol push-to-talk Anda saat input balasan difokuskan untuk mendikte balasan alih-alih mengetiknya. Hal yang sama berlaku dalam input pengiriman di bagian bawah tampilan agen.

194 206 

195Gunakan `↑` dan `↓` untuk mengintip sesi yang berdekatan tanpa menutup panel, atau `→` untuk melampirkan.207Gunakan `↑` dan `↓` untuk mengintip sesi yang berdekatan tanpa menutup panel, atau `→` untuk melampirkan.


200 212 

201Tekan `Enter` atau `→` pada baris yang dipilih untuk melampirkan. Tampilan agen diganti oleh sesi interaktif lengkap. Ketika Anda melampirkan, Claude memposting ringkasan singkat tentang apa yang terjadi saat Anda pergi.213Tekan `Enter` atau `→` pada baris yang dipilih untuk melampirkan. Tampilan agen diganti oleh sesi interaktif lengkap. Ketika Anda melampirkan, Claude memposting ringkasan singkat tentang apa yang terjadi saat Anda pergi.

202 214 

203Saat dilampirkan, sesi berperilaku seperti sesi Claude Code lainnya: setiap [perintah](/id/commands), pintasan keyboard, dan fitur berfungsi.215Saat dilampirkan, sesi berperilaku seperti sesi Claude Code lainnya: [perintah](/id/commands), pintasan keyboard, dan fitur semuanya berfungsi, dengan pengecualian di bawah.

216 

217Sesi latar belakang menolak `/install-github-app` dan daftar pengaturan [`/mcp`](/id/mcp), termasuk tindakan autentikasinya, apakah Anda dilampirkan atau membalas dari panel intip. Pesan mengarahkan Anda ke sesi `claude` biasa, dan `/mcp reconnect <server>`, `/mcp enable`, dan `/mcp disable` masih berfungsi.

204 218 

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

206 220 


241 255 

242Menghapus menghapus sesi dari tampilan agen. Jika Claude [membuat worktree](#how-file-edits-are-isolated) untuk sesi, menghapus menghapus worktree itu juga, termasuk perubahan yang tidak dikomitkan di dalamnya, jadi dorong atau komitkan pekerjaan yang ingin Anda simpan terlebih dahulu. Worktree yang Anda buat sendiri dan mulai sesi di dalamnya dibiarkan di tempat. Transkrip percakapan tetap berada di mesin lokal Anda dan tetap tersedia melalui `claude --resume`.256Menghapus menghapus sesi dari tampilan agen. Jika Claude [membuat worktree](#how-file-edits-are-isolated) untuk sesi, menghapus menghapus worktree itu juga, termasuk perubahan yang tidak dikomitkan di dalamnya, jadi dorong atau komitkan pekerjaan yang ingin Anda simpan terlebih dahulu. Worktree yang Anda buat sendiri dan mulai sesi di dalamnya dibiarkan di tempat. Transkrip percakapan tetap berada di mesin lokal Anda dan tetap tersedia melalui `claude --resume`.

243 257 

258Menghapus tidak pernah menghapus worktree dengan komit yang tidak didorong ke mana pun, atau yang sesi lain yang sedang berjalan klaim atau kunci. Claude Code menyimpan worktree dan sesi, dan footer menamai jalur yang disimpan dan alasannya. Dorong komit, atau tutup sesi lain, lalu hapus lagi.

259 

260Menghapus juga menghapus sesi dari [daftar sesi supervisor](#the-supervisor-process), apakah Anda menghapus dengan `Ctrl+X` atau dengan [`claude rm`](#manage-sessions-from-the-shell) dari shell, sehingga penghapusan bertahan di seluruh restart supervisor. Sebelum v2.1.206, menghapus sesi saat supervisor memulai ulang atau tidak dapat dijangkau meninggalkannya dalam daftar itu, dan supervisor berikutnya memulai ulang prosesnya dan menampilkan baris lagi.

261 

244Sesi yang selesai yang tidak muat di layar dilipat menjadi baris `… N more`. Kegagalan dan sesi dengan permintaan tarik terbuka selalu tetap terlihat. Grup `Completed` mengisi ruang vertikal yang tersisa setelah grup langsung, dan di terminal pendek header dikompakkan menjadi baris ringkasan tunggal sehingga sesi yang bekerja atau membutuhkan masukan tetap terlihat.262Sesi yang selesai yang tidak muat di layar dilipat menjadi baris `… N more`. Kegagalan dan sesi dengan permintaan tarik terbuka selalu tetap terlihat. Grup `Completed` mengisi ruang vertikal yang tersisa setelah grup langsung, dan di terminal pendek header dikompakkan menjadi baris ringkasan tunggal sehingga sesi yang bekerja atau membutuhkan masukan tetap terlihat.

245 263 

246<h3 id="filter-sessions">264<h3 id="filter-sessions">


293 311 

294Ketik prompt dalam input di bagian bawah tampilan agen dan tekan `Enter` untuk memulai sesi latar belakang baru. Sesi diberi nama secara otomatis dari prompt; ubah namanya nanti dengan `Ctrl+R`.312Ketik prompt dalam input di bagian bawah tampilan agen dan tekan `Enter` untuk memulai sesi latar belakang baru. Sesi diberi nama secara otomatis dari prompt; ubah namanya nanti dengan `Ctrl+R`.

295 313 

314Nama yang diterima sesi nanti juga muncul di barisnya, termasuk nama yang Claude turunkan ketika Anda [menerima rencana](/id/permission-modes#review-and-approve-a-plan) dalam sesi itu. Sebelum v2.1.207, sesi latar belakang yang diberi nama dengan menerima rencana menampilkan nama itu dalam `/status` tetapi bukan di baris tampilan agen-nya sampai Anda mengganti namanya sendiri.

315 

296Tempel gambar ke dalam prompt untuk menyertakan tangkapan layar atau diagram dengan tugas.316Tempel gambar ke dalam prompt untuk menyertakan tangkapan layar atau diagram dengan tugas.

297 317 

318Teks yang ditempel lebih panjang dari 800 karakter atau lebih dari dua baris runtuh menjadi placeholder `[Pasted text #N]` sehingga input tetap pada satu baris; teks lengkap dikirim ketika Anda mengirim. {/* min-version: 2.1.207 */}Untuk meninjau atau mengedit teks yang runtuh sebelum mengirim, tempel teks yang sama lagi dan placeholder berkembang kembali ke dalam input. Pengingat `paste again to expand` muncul di bawah input selama beberapa detik setelah tempel pada terminal setidaknya 90 kolom lebar. Sebelum v2.1.207, menempel teks yang sama lagi menambahkan placeholder kedua alih-alih memperluas yang pertama.

319 

298Awali atau sebutkan bagian dari prompt untuk mengontrol bagaimana sesi dimulai:320Awali atau sebutkan bagian dari prompt untuk mengontrol bagaimana sesi dimulai:

299 321 

300| Input | Efek |322| Input | Efek |


445 467 

446Ketika hook gagal di direktori yang bukan repositori git, sesi melewati isolasi untuk direktori itu dan mengedit direktori kerja di tempat. Di dalam repositori git, penulisan tetap diblokir sampai sesi mengisolasi. Sebelum v2.1.203, sesi latar belakang dalam keadaan itu tidak dapat mengedit file apa pun: setiap penulisan ditolak sampai mengisolasi, dan hook tidak pernah dapat mengisolasi direktori itu.468Ketika hook gagal di direktori yang bukan repositori git, sesi melewati isolasi untuk direktori itu dan mengedit direktori kerja di tempat. Di dalam repositori git, penulisan tetap diblokir sampai sesi mengisolasi. Sebelum v2.1.203, sesi latar belakang dalam keadaan itu tidak dapat mengedit file apa pun: setiap penulisan ditolak sampai mengisolasi, dan hook tidak pernah dapat mengisolasi direktori itu.

447 469 

448Menghapus sesi dalam tampilan agen dengan `Ctrl+X` dua kali menghapus worktree yang Claude buat untuk sesi itu, termasuk perubahan yang belum dikomit, jadi gabungkan atau dorong perubahan yang ingin Anda simpan terlebih dahulu. Menghapus dari shell dengan [`claude rm`](#manage-sessions-from-the-shell) menyimpan worktree yang memiliki perubahan yang belum dikomit dan mencetak jalurnya sehingga Anda dapat membersihkannya sendiri. Worktree yang Anda buat sendiri dan mulai sesi di dalamnya dibiarkan di tempat baik cara apa pun.470Menghapus sesi menghapus atau menyimpan worktree yang Claude buat untuk sesi itu, tergantung pada cara Anda menghapusnya dan apa yang dipegang worktree:

471 

472* Menghapus dalam tampilan agen dengan `Ctrl+X` dua kali menghapus worktree, termasuk perubahan yang belum dikomit, jadi komit perubahan yang ingin Anda simpan terlebih dahulu.

473* Menghapus dari shell dengan [`claude rm`](#manage-sessions-from-the-shell) menyimpan worktree yang memiliki perubahan yang belum dikomit, bersama dengan baris sesinya.

474* Tidak ada jalur yang menghapus worktree dengan komit yang tidak didorong ke mana pun: worktree [disimpan bersama dengan sesinya](#organize-the-list) dan output menyebutkan jalur yang disimpan dan alasannya.

475* Worktree yang Anda buat sendiri dan mulai sesi di dalamnya dibiarkan di tempat baik cara apa pun.

449 476 

450Untuk menemukan jalur worktree sesi, intip sesi atau lampirkan dan periksa direktori kerjanya.477Untuk menemukan jalur worktree sesi, intip sesi atau lampirkan dan periksa direktori kerjanya.

451 478 


475Setiap sesi latar belakang dapat berjalan pada model berbeda. Untuk menimpanya untuk satu sesi:502Setiap sesi latar belakang dapat berjalan pada model berbeda. Untuk menimpanya untuk satu sesi:

476 503 

477* Dari shell, berikan `--model` dengan `claude --bg`.504* Dari shell, berikan `--model` dengan `claude --bg`.

478* Lampirkan ke sesi yang berjalan, buka `/model`, dan tekan `s` pada model untuk beralih hanya untuk sesi itu. Perubahan bertahan jika sesi direspawn.505* Lampirkan ke sesi yang berjalan dan jalankan `/model` untuk beralih: pilihan dari pemilih, atau `/model <name>` yang diketik, disimpan sebagai default Anda untuk sesi baru kecuali Anda menekan `s` dalam pemilih untuk beralih hanya sesi. Beralih hanya sesi bertahan jika sesi direspawn.

479* Kirim [subagent](/id/sub-agents) yang frontmatter-nya menetapkan bidang `model`.506* Kirim [subagent](/id/sub-agents) yang frontmatter-nya menetapkan bidang `model`.

480 507 

481<h3 id="permission-mode-model-and-effort">508<h3 id="permission-mode-model-and-effort">


484 511 

485Sesi latar belakang membaca [pengaturan](/id/settings) dari direktori tempat sesi berjalan, sama seperti jika Anda telah memulai `claude` di sana. Ini mencakup nilai [`env`](/id/settings#available-settings) dalam pengaturan proyek, jadi `ANTHROPIC_MODEL` atau variabel penyedia yang ditetapkan di sana berlaku untuk sesi latar belakang di direktori itu.512Sesi latar belakang membaca [pengaturan](/id/settings) dari direktori tempat sesi berjalan, sama seperti jika Anda telah memulai `claude` di sana. Ini mencakup nilai [`env`](/id/settings#available-settings) dalam pengaturan proyek, jadi `ANTHROPIC_MODEL` atau variabel penyedia yang ditetapkan di sana berlaku untuk sesi latar belakang di direktori itu.

486 513 

487Pemilihan penyedia cloud, seperti `CLAUDE_CODE_USE_BEDROCK` atau `CLAUDE_CODE_USE_VERTEX`, dan alias `ANTHROPIC_DEFAULT_*_MODEL` mengikuti shell yang mengirim sesi. Gateway `ANTHROPIC_BASE_URL` yang diekspor dalam shell itu mengikutinya juga, bersama dengan `ANTHROPIC_CUSTOM_HEADERS`, ketika supervisor berjalan dengan lingkungan gateway yang sama dan sesi berjalan di direktori tempat Anda mengirim atau adalah sesi Anda sendiri yang dilepaskan ke latar belakang dengan `←` atau `/background`. Itu adalah kasus normal ketika shell pertama yang membuka tampilan agen atau mengirim sesi latar belakang adalah shell gateway. Pengiriman ke direktori berbeda dengan `@repo` atau `--cwd` tidak membawa gateway shell; pengaturan [settings](/id/settings) proyek itu menyediakan endpoint. Lihat [proses supervisor](#the-supervisor-process) untuk cara sesi latar belakang bersumber pengaturan penyedia dan kredensial.514Pemilihan penyedia cloud, seperti `CLAUDE_CODE_USE_BEDROCK` atau `CLAUDE_CODE_USE_VERTEX`, dan alias `ANTHROPIC_DEFAULT_*_MODEL` mengikuti shell yang mengirim sesi. {/* min-version: 2.1.206 */}Jika Anda mengekspor penimpaan badan permintaan [`CLAUDE_CODE_EXTRA_BODY`](/id/env-vars) dalam shell itu, itu mencapai sesi dengan cara yang sama. Sebelum v2.1.206, pekerja latar belakang mengabaikan `CLAUDE_CODE_EXTRA_BODY` yang diekspor shell.

515 

516Jika Anda mengekspor gateway `ANTHROPIC_BASE_URL` dalam shell pengiriman, itu mencapai sesi juga, bersama dengan `ANTHROPIC_CUSTOM_HEADERS`, ketika supervisor berjalan dengan lingkungan gateway yang sama dan sesi berjalan di direktori tempat Anda mengirim atau adalah sesi Anda sendiri yang dilepaskan ke latar belakang dengan `←` atau `/background`. Itu adalah kasus normal ketika shell pertama yang membuka tampilan agen atau mengirim sesi latar belakang adalah shell gateway. Pengiriman ke direktori berbeda dengan `@repo` atau `--cwd` tidak membawa gateway shell; pengaturan [settings](/id/settings) proyek itu menyediakan endpoint. Lihat [proses supervisor](#the-supervisor-process) untuk cara sesi latar belakang bersumber pengaturan penyedia dan kredensial.

488 517 

489[Mode izin](/id/permissions) tergantung pada cara Anda memulai sesi. Melepaskan sesi yang ada dengan `/bg` atau `←` mempertahankan mode izin saat ini, jadi sesi yang Anda alihkan ke `acceptEdits` atau `auto` tetap dalam mode itu setelah detach. Mengirim dari input tampilan agen atau menjalankan `claude --bg` dari shell Anda menggunakan `defaultMode` dari pengaturan direktori itu, atau `permissionMode` dari [frontmatter subagent](/id/sub-agents#supported-frontmatter-fields) yang dikirim.518[Mode izin](/id/permissions) tergantung pada cara Anda memulai sesi. Melepaskan sesi yang ada dengan `/bg` atau `←` mempertahankan mode izin saat ini, jadi sesi yang Anda alihkan ke `acceptEdits` atau `auto` tetap dalam mode itu setelah detach. Mengirim dari input tampilan agen atau menjalankan `claude --bg` dari shell Anda menggunakan `defaultMode` dari pengaturan direktori itu, atau `permissionMode` dari [frontmatter subagent](/id/sub-agents#supported-frontmatter-fields) yang dikirim.

490 519 


548| `claude stop <id>` | Hentikan sesi. Juga menerima `claude kill` |577| `claude stop <id>` | Hentikan sesi. Juga menerima `claude kill` |

549| `claude respawn <id>` | Mulai ulang sesi, baik yang sedang berjalan maupun yang dihentikan, dengan percakapannya tetap utuh, misalnya untuk mengambil biner Claude Code yang telah diperbarui |578| `claude respawn <id>` | Mulai ulang sesi, baik yang sedang berjalan maupun yang dihentikan, dengan percakapannya tetap utuh, misalnya untuk mengambil biner Claude Code yang telah diperbarui |

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

551| `claude rm <id>` | Hapus sesi dari daftar. Menghapus worktree yang dibuat Claude untuk sesi jika tidak ada perubahan yang belum di-commit; jika tidak, mencetak jalur worktree sehingga Anda dapat membersihkannya. Membiarkan worktree yang Anda buat sendiri tetap ada. Transkrip percakapan tetap berada di mesin lokal Anda dan tetap tersedia melalui `claude --resume` |580| `claude rm <id>` | Hapus sesi dari daftar. Menghapus worktree yang dibuat Claude untuk sesi jika tidak ada perubahan yang belum di-commit dan tidak ada commit yang tidak didorong ke mana pun; jika tidak, sesi tetap disimpan, dan perintah mencetak jalur worktree dan alasannya sehingga Anda dapat menyelesaikannya dan menjalankan `claude rm` lagi. Membiarkan worktree yang Anda buat sendiri tetap ada. Transkrip percakapan tetap berada di mesin lokal Anda dan tetap tersedia melalui `claude --resume` |

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

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

554 583 


564 593 

565Sesi latar belakang dihosting oleh proses supervisor per-pengguna, terpisah dari terminal Anda dan dari tampilan agen. Supervisor dimulai secara otomatis pertama kali Anda mengirim sesi ke latar belakang atau membuka tampilan agen, dan Anda tidak mengelolanya secara langsung.594Sesi latar belakang dihosting oleh proses supervisor per-pengguna, terpisah dari terminal Anda dan dari tampilan agen. Supervisor dimulai secara otomatis pertama kali Anda mengirim sesi ke latar belakang atau membuka tampilan agen, dan Anda tidak mengelolanya secara langsung.

566 595 

596Ketika pembaruan telah mengganti atau menghapus biner dari mana proses Claude Code yang sedang berjalan diluncurkan, proses itu memulai supervisor dari salinan terinstal lainnya, seperti peluncur `claude` yang terinstal atau versi terbaru di disk.

597 

567Supervisor menjaga satu proses worker yang sudah dipanaskan sebelumnya siap sehingga pengiriman dari tampilan agen atau `claude --bg` dimulai tanpa penundaan peluncuran dingin. Ketika Anda mengirim, supervisor menugaskan worker yang sudah dipanaskan sebelumnya ke sesi Anda, menerapkan direktori, pengaturan, dan kredensial sesi itu ke dalamnya, dan kemudian memulai pengganti untuk pengiriman berikutnya. Jika tidak ada worker yang sudah dipanaskan sebelumnya yang sehat tersedia, supervisor meluncurkan proses segar sebagai gantinya.598Supervisor menjaga satu proses worker yang sudah dipanaskan sebelumnya siap sehingga pengiriman dari tampilan agen atau `claude --bg` dimulai tanpa penundaan peluncuran dingin. Ketika Anda mengirim, supervisor menugaskan worker yang sudah dipanaskan sebelumnya ke sesi Anda, menerapkan direktori, pengaturan, dan kredensial sesi itu ke dalamnya, dan kemudian memulai pengganti untuk pengiriman berikutnya. Jika tidak ada worker yang sudah dipanaskan sebelumnya yang sehat tersedia, supervisor meluncurkan proses segar sebagai gantinya.

568 599 

569Supervisor dan sesinya mengautentikasi dengan kredensial yang sama dengan sesi interaktif Anda dan tidak membuat koneksi jaringan tambahan di luar API model. Variabel pemilihan penyedia seperti `CLAUDE_CODE_USE_BEDROCK` dan alias `ANTHROPIC_DEFAULT_*_MODEL` dibaca dari shell yang mengirim setiap sesi dan diterapkan ke workernya.600Supervisor dan sesinya mengautentikasi dengan kredensial yang sama dengan sesi interaktif Anda dan tidak membuat koneksi jaringan tambahan di luar API model. Variabel pemilihan penyedia seperti `CLAUDE_CODE_USE_BEDROCK` dan alias `ANTHROPIC_DEFAULT_*_MODEL` dibaca dari shell yang mengirim setiap sesi dan diterapkan ke workernya.


592 623 

593Menghapus sesi menghentikan semua yang diserahkannya. Untuk menghentikan semua pekerjaan latar belakang sesi dengan proses alih-alih menyerahkannya, atur variabel lingkungan [`CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF`](/id/env-vars#variables) ke `1`.624Menghapus sesi menghentikan semua yang diserahkannya. Untuk menghentikan semua pekerjaan latar belakang sesi dengan proses alih-alih menyerahkannya, atur variabel lingkungan [`CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF`](/id/env-vars#variables) ke `1`.

594 625 

626Proses yang dimulai ulang menemukan percakapan sesi yang [pindah ke worktree](#how-file-edits-are-isolated) di tengah tugas: ketika transkrip tidak berada di tempat sesi dimulai, Claude Code juga mencari di bawah worktree terdaftar repositori. Sebelum v2.1.207, membuka kembali sesi itu dari tampilan agen setelah prosesnya berhenti dapat menampilkan percakapan kosong dengan hanya prompt aslinya, dengan transkrip masih utuh di disk; membuka sesi lagi pada v2.1.207 atau lebih baru memulihkannya.

627 

595Jika sesi yang dimulai ulang kembali menampilkan hanya prompt aslinya karena Claude Code salah membaca transkrip sebagai kosong, transkrip percakapan diganti nama dengan akhiran `.orphaned-` alih-alih dihapus, jadi tetap berada di mesin Anda.628Jika sesi yang dimulai ulang kembali menampilkan hanya prompt aslinya karena Claude Code salah membaca transkrip sebagai kosong, transkrip percakapan diganti nama dengan akhiran `.orphaned-` alih-alih dihapus, jadi tetap berada di mesin Anda.

596 629 

597Baris kosong yang tersisa dari menekan `←` yang tidak pernah diberi prompt dihapus sepenuhnya setelah sekitar lima menit sehingga daftar membersihkan dirinya sendiri. Sesi yang dimulai dengan `claude --bg` dan sesi yang menunggu prompt pengaturan seperti dialog kepercayaan tidak dihapus dengan cara ini.630Baris kosong yang tersisa dari menekan `←` yang tidak pernah diberi prompt dihapus sepenuhnya setelah sekitar lima menit sehingga daftar membersihkan dirinya sendiri. Sesi yang dimulai dengan `claude --bg` dan sesi yang menunggu prompt pengaturan seperti dialog kepercayaan tidak dihapus dengan cara ini.


600 633 

601Supervisor memantau biner Claude Code yang diinstal di disk dan memulai ulang ke versi baru setelah [auto-updater](/id/setup#auto-updates) reguler menggantinya. Ini adalah pengawasan file lokal, bukan pemeriksaan jaringan. Sesi latar belakang adalah proses terlepas, jadi mereka terus berjalan melalui restart dan supervisor baru terhubung kembali ke mereka. Sesi pin idle juga dimulai ulang di tempat ke versi baru sehingga mengambil pembaruan tanpa Anda melampirkan kembali.634Supervisor memantau biner Claude Code yang diinstal di disk dan memulai ulang ke versi baru setelah [auto-updater](/id/setup#auto-updates) reguler menggantinya. Ini adalah pengawasan file lokal, bukan pemeriksaan jaringan. Sesi latar belakang adalah proses terlepas, jadi mereka terus berjalan melalui restart dan supervisor baru terhubung kembali ke mereka. Sesi pin idle juga dimulai ulang di tempat ke versi baru sehingga mengambil pembaruan tanpa Anda melampirkan kembali.

602 635 

636Setelah supervisor baru mengambil alih, itu juga memulai ulang sesi idle yang tersisa ke versi baru, beberapa sekaligus di latar belakang, setelah penundaan singkat yang memungkinkan terminal yang terpasang di seluruh restart untuk terhubung kembali terlebih dahulu. Sesi yang bekerja, menunggu masukan Anda, atau memiliki terminal yang terpasang tidak terganggu; itu berpindah ke versi baru lain kali prosesnya dimulai ulang. Sebelum v2.1.206, supervisor memindahkan hanya beberapa sesi idle per menit ke versi baru, jadi sesi dapat terus menjalankan yang lama selama beberapa waktu setelah pembaruan.

637 

638Restart ini hanya pernah memindahkan sesi ke versi yang lebih baru. Supervisor yang menjalankan versi Claude Code yang lebih lama daripada yang dimulai proses sesi dengan meninggalkan proses itu sendiri; sesi terus menjalankan versi yang lebih baru sampai supervisor yang lebih baru mengambil alih.

639 

603Menjalankan `claude attach` sementara supervisor memulai ulang sesi, baik untuk pembaruan, kemacetan, atau migrasi, menunggu proses pengganti alih-alih gagal. Baris status seperti `Agent is updating to the new Claude Code…` menamai apa yang ditunggu dan menghitung detik yang telah berlalu, dan perintah terhubung segera setelah sesi siap. Setelah sekitar 60 detik itu berhenti menunggu dan melaporkan kesalahan. Sebelum v2.1.205, `claude attach` berhenti mencoba ulang setelah beberapa detik dan mencetak kesalahan sementara sesi masih dimulai ulang.640Menjalankan `claude attach` sementara supervisor memulai ulang sesi, baik untuk pembaruan, kemacetan, atau migrasi, menunggu proses pengganti alih-alih gagal. Baris status seperti `Agent is updating to the new Claude Code…` menamai apa yang ditunggu dan menghitung detik yang telah berlalu, dan perintah terhubung segera setelah sesi siap. Setelah sekitar 60 detik itu berhenti menunggu dan melaporkan kesalahan. Sebelum v2.1.205, `claude attach` berhenti mencoba ulang setelah beberapa detik dan mencetak kesalahan sementara sesi masih dimulai ulang.

604 641 

605<h3 id="where-state-is-stored">642<h3 id="where-state-is-stored">


737 774 

738Setelah sesi selesai dan duduk tanpa lampiran selama sekitar satu jam, supervisor menghentikan prosesnya untuk membebaskan sumber daya. Melampirkan memulai proses segar dari tempat ia berhenti dan beralih ke sesi segera sementara proses dimulai ulang. Sesi yang bekerja, menunggu Anda, atau [disematkan](#organize-the-list) tidak dihentikan dengan cara ini, jadi semat sesi dengan `Ctrl+T` untuk menjaganya tetap responsif.775Setelah sesi selesai dan duduk tanpa lampiran selama sekitar satu jam, supervisor menghentikan prosesnya untuk membebaskan sumber daya. Melampirkan memulai proses segar dari tempat ia berhenti dan beralih ke sesi segera sementara proses dimulai ulang. Sesi yang bekerja, menunggu Anda, atau [disematkan](#organize-the-list) tidak dihentikan dengan cara ini, jadi semat sesi dengan `Ctrl+T` untuk menjaganya tetap responsif.

739 776 

777Saat proses dimulai, layar terakhir dari transkrip sesi ditampilkan dengan catatan `Session is starting` di bawahnya, dan sesi langsung menggantikannya segera setelah siap.

778 

740<h3 id="claude/worktrees/-is-filling-up">779<h3 id="claude/worktrees/-is-filling-up">

741 `.claude/worktrees/` penuh780 `.claude/worktrees/` penuh

742</h3>781</h3>

743 782 

744Menghapus sesi dalam tampilan agen menghapus worktree yang dibuat Claude untuk sesi tersebut. `claude rm` menyimpan worktree yang memiliki perubahan yang belum dikomit dan mencetak jalurnya. Daftar entri sisa dengan `git worktree list` di direktori proyek dan hapus masing-masing dengan `git worktree remove <path>`. Lihat [Bersihkan worktrees](/id/worktrees#clean-up-worktrees).783Menghapus sesi dalam tampilan agen menghapus worktree yang dibuat Claude untuk sesi tersebut, dan worktree yang tidak dapat dihapus dengan aman [menyimpan baris sesinya](#organize-the-list) sehingga tidak menjadi yatim piatu. `claude rm` menyimpan worktree yang memiliki perubahan yang belum dikomit, dan baris sesinya, dan mencetak jalur yang disimpan. Daftar entri sisa dengan `git worktree list` di direktori proyek dan hapus masing-masing dengan `git worktree remove <path>`. Lihat [Bersihkan worktrees](/id/worktrees#clean-up-worktrees).

745 784 

746<h2 id="limitations">785<h2 id="limitations">

747 Keterbatasan786 Keterbatasan


751 790 

752* **Batas laju berlaku**: sesi latar belakang menggunakan kuota langganan Anda sama seperti sesi interaktif, jadi menjalankan sepuluh agen secara paralel menggunakan kuota kira-kira sepuluh kali lebih cepat daripada menjalankan satu.791* **Batas laju berlaku**: sesi latar belakang menggunakan kuota langganan Anda sama seperti sesi interaktif, jadi menjalankan sepuluh agen secara paralel menggunakan kuota kira-kira sepuluh kali lebih cepat daripada menjalankan satu.

753* **Sesi bersifat lokal**: sesi latar belakang berjalan di mesin Anda. Sesi ini dipertahankan di seluruh tidur tetapi berhenti jika mesin dimatikan.792* **Sesi bersifat lokal**: sesi latar belakang berjalan di mesin Anda. Sesi ini dipertahankan di seluruh tidur tetapi berhenti jika mesin dimatikan.

754* **Worktrees yang dibuat Claude dihapus dengan sesi di tampilan agen**: gabungkan atau dorong perubahan sebelum menghapus sesi yang mengedit file di worktree-nya sendiri. `claude rm` menyimpan worktree yang memiliki perubahan yang belum dilakukan; worktree yang Anda buat sendiri dibiarkan di tempat.793* **Worktrees yang dibuat Claude dihapus dengan sesi di tampilan agen**: gabungkan perubahan sebelum menghapus sesi yang mengedit file di worktree-nya sendiri. Worktree dengan commit yang tidak didorong ke mana pun disimpan bersama sesi. `claude rm` juga menyimpan worktree yang memiliki perubahan yang belum dilakukan bersama sesinya, dan worktree yang Anda buat sendiri dibiarkan di tempat.

755 794 

756<h2 id="related-resources">795<h2 id="related-resources">

757 Sumber daya terkait796 Sumber daya terkait


770Tampilan agen telah berkembang dengan cepat selama pratinjau penelitian. Jika Anda berada di versi Claude Code yang lebih lama, beberapa perilaku di halaman ini mungkin berbeda; khususnya, `claude agents` menolak bendera yang belum didukungnya dengan kesalahan `unknown option`. Tabel di bawah mencantumkan kapan setiap bendera dan perilaku ditambahkan.809Tampilan agen telah berkembang dengan cepat selama pratinjau penelitian. Jika Anda berada di versi Claude Code yang lebih lama, beberapa perilaku di halaman ini mungkin berbeda; khususnya, `claude agents` menolak bendera yang belum didukungnya dengan kesalahan `unknown option`. Tabel di bawah mencantumkan kapan setiap bendera dan perilaku ditambahkan.

771 810 

772| Versi | Perubahan |811| Versi | Perubahan |

773| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |812| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

813| v2.1.208 | {/* min-version: 2.1.208 */}Melampirkan ke sesi yang prosesnya telah berhenti menampilkan layar terakhir transkripsnya sementara proses dimulai, alih-alih hanya catatan `Session is starting`. Balasan yang tidak dapat dikirimkan karena layanan latar belakang tidak dapat dijangkau atau pengiriman gagal disimpan dan dikirim sebagai prompt berikutnya dari sesi ketika prosesnya dimulai lagi; sebelum rilis ini, balasan yang hilang saat layanan latar belakang tidak dapat dijangkau dibuang. Proses yang binernya sendiri diganti oleh pembaruan masih dapat memulai supervisor, dari peluncur `claude` yang terinstal atau versi terbaru di disk, alih-alih gagal sampai Claude Code dimulai ulang. Supervisor yang menjalankan versi yang lebih lama tidak pernah memulai ulang sesi idle yang dimulai oleh versi yang lebih baru ke binernya sendiri yang lebih lama. Menghapus sesi menghapus worktree-nya bahkan setelah sesi memindahkan worktree ke cabang yang berbeda, dan menjaga worktree tetap bersama dengan baris sesi ketika worktree memiliki commit yang tidak didorong ke mana pun atau sesi lain mengklaimnya, alih-alih menghancurkan commit atau meninggalkan worktree. `/install-github-app` dan daftar pengaturan `/mcp` serta tindakan autentikasinya ditolak dalam sesi latar belakang dengan pesan yang menyebutkan alternatifnya; hanya dalam v2.1.208, pemilih `/model` ditolak dengan cara yang sama dan `/model <name>` yang diketik beralih hanya sesi itu alih-alih juga menyimpan model default Anda. |

814| v2.1.207 | {/* min-version: 2.1.207 */}Panel intip terbuka dengan kalimat yang dipotong baris, seperti pertanyaan pastinya untuk sesi yang menunggu Anda, dan menampilkan berapa lama sesi yang diblokir telah menunggu sebagai baris `waiting 3m` tunggal alih-alih menambahkan awalan stempel waktu yang sama ke kalimat status dan pertanyaan. Menempel teks yang sama lagi dalam input pengiriman memperluas placeholder `[Pasted text #N]` yang runtuh alih-alih menambahkan yang kedua. Sesi latar belakang yang dinamai dengan menerima rencana menampilkan nama itu pada barisnya. Sesi latar belakang yang pindah ke worktree menyimpan percakapannya ketika prosesnya dimulai ulang dari tampilan agen. |

815| v2.1.206 | {/* min-version: 2.1.206 */}Ringkasan baris mengisi lebar sisa baris dan dipotong hanya di tepi kanan terminal alih-alih pada 64 kolom. Setelah supervisor dimulai ulang ke versi Claude Code baru, ia memulai ulang sesi latar belakang idle yang tersisa ke versi itu di latar belakang alih-alih beberapa per menit. Menghapus sesi dengan `Ctrl+X` atau `claude rm` juga menghapusnya dari daftar sesi supervisor, sehingga baris tidak lagi muncul kembali setelah restart supervisor. |

774| v2.1.205 | {/* min-version: 2.1.205 */}Ringkasan baris menampilkan laporan satu baris sesi itu sendiri, dipotong pada 64 kolom, alih-alih invokasi alat mentah atau hitungan `done/total`; baris yang dikelompokkan direktori terbuka dengan kata status berwarna. Panel intip terbuka dengan kalimat status lengkap dan, untuk sesi yang menunggu Anda, pertanyaan pastinya di atas input balasan. Sesi yang mengedit, mengomentari, menutup, atau menandai permintaan tarik siap dengan `gh` ditautkan ke sana, bukan hanya yang membuat atau checkout permintaan tarik, push menautkan permintaan tarik bahkan ketika nama cabang lokal tidak cocok, dan permintaan tarik yang output perintah pembuatannya melebihi batas inline juga ditautkan. Giliran tanpa teks yang dapat dibaca menyimpan status sesi sebelumnya alih-alih membaliknya kembali ke `Working`. `claude attach` menunggu hingga sekitar 60 detik untuk sesi yang sedang dimulai ulang, dengan baris status yang menyebutkan alasannya, alih-alih gagal. |816| v2.1.205 | {/* min-version: 2.1.205 */}Ringkasan baris menampilkan laporan satu baris sesi itu sendiri, dipotong pada 64 kolom, alih-alih invokasi alat mentah atau hitungan `done/total`; baris yang dikelompokkan direktori terbuka dengan kata status berwarna. Panel intip terbuka dengan kalimat status lengkap dan, untuk sesi yang menunggu Anda, pertanyaan pastinya di atas input balasan. Sesi yang mengedit, mengomentari, menutup, atau menandai permintaan tarik siap dengan `gh` ditautkan ke sana, bukan hanya yang membuat atau checkout permintaan tarik, push menautkan permintaan tarik bahkan ketika nama cabang lokal tidak cocok, dan permintaan tarik yang output perintah pembuatannya melebihi batas inline juga ditautkan. Giliran tanpa teks yang dapat dibaca menyimpan status sesi sebelumnya alih-alih membaliknya kembali ke `Working`. `claude attach` menunggu hingga sekitar 60 detik untuk sesi yang sedang dimulai ulang, dengan baris status yang menyebutkan alasannya, alih-alih gagal. |

775| v2.1.203 | {/* min-version: 2.1.203 */}Gateway `ANTHROPIC_BASE_URL` yang diekspor dalam shell pengiriman mencapai sesi yang dikirim darinya ke direktori yang sama ketika supervisor membagikan gateway environment tersebut, alih-alih dijatuhkan sementara kunci API yang diekspor bersama dengannya tetap disimpan. `PATH` shell pengiriman diterapkan ke setiap worker sesi. Menekan `←` saat subagen sedang berjalan menunggu mereka alih-alih memulai ulang mereka setelah sepuluh detik. Daftar kosong selalu menampilkan header bagian dengan deskripsi di bawah masing-masing. Mengetik `@` dalam input pengiriman juga mencantumkan git worktrees terdaftar dari repositori peluncuran yang berada di dalam pohon direktorinya. Upaya yang diwarisi dari pengaturan `effortLevel` mengikuti pengeditan kemudian ke pengaturan tersebut alih-alih diperbaiki pada pengiriman. Membuka sesi yang dihentikan yang percakapannya sudah terbuka di sesi yang sedang berjalan lainnya ditolak dengan pesan alih-alih gagal pada baris. Perintah yang tidak tersedia dalam tampilan agen meninggalkan teks yang diketik dalam input. Hook `WorktreeCreate` yang gagal di luar repositori git tidak lagi memblokir sesi dari pengeditan file. |817| v2.1.203 | {/* min-version: 2.1.203 */}Gateway `ANTHROPIC_BASE_URL` yang diekspor dalam shell pengiriman mencapai sesi yang dikirim darinya ke direktori yang sama ketika supervisor membagikan gateway environment tersebut, alih-alih dijatuhkan sementara kunci API yang diekspor bersama dengannya tetap disimpan. `PATH` shell pengiriman diterapkan ke setiap worker sesi. Menekan `←` saat subagen sedang berjalan menunggu mereka alih-alih memulai ulang mereka setelah sepuluh detik. Daftar kosong selalu menampilkan header bagian dengan deskripsi di bawah masing-masing. Mengetik `@` dalam input pengiriman juga mencantumkan git worktrees terdaftar dari repositori peluncuran yang berada di dalam pohon direktorinya. Upaya yang diwarisi dari pengaturan `effortLevel` mengikuti pengeditan kemudian ke pengaturan tersebut alih-alih diperbaiki pada pengiriman. Membuka sesi yang dihentikan yang percakapannya sudah terbuka di sesi yang sedang berjalan lainnya ditolak dengan pesan alih-alih gagal pada baris. Perintah yang tidak tersedia dalam tampilan agen meninggalkan teks yang diketik dalam input. Hook `WorktreeCreate` yang gagal di luar repositori git tidak lagi memblokir sesi dari pengeditan file. |

776| v2.1.202 | {/* min-version: 2.1.202 */}Nama yang ditetapkan dengan `/rename` atau `Ctrl+R` pada sesi latar belakang tetap ada ketika supervisor menghentikan dan memulai ulang prosesnya, alih-alih kembali ke nama yang dikirim sesi dengan. |818| v2.1.202 | {/* min-version: 2.1.202 */}Nama yang ditetapkan dengan `/rename` atau `Ctrl+R` pada sesi latar belakang tetap ada ketika supervisor menghentikan dan memulai ulang prosesnya, alih-alih kembali ke nama yang dikirim sesi dengan. |

Details

6 6 

7> Daftarkan gateway dengan IdP Anda, bangun kontainer, sebarkan di Kubernetes atau Cloud Run, dan operasikan: pemeriksaan kesehatan, rotasi rahasia, peningkatan, dan keamanan.7> Daftarkan gateway dengan IdP Anda, bangun kontainer, sebarkan di Kubernetes atau Cloud Run, dan operasikan: pemeriksaan kesehatan, rotasi rahasia, peningkatan, dan keamanan.

8 8 

9Halaman ini mencakup sisi operasional menjalankan [gateway aplikasi Claude](/id/claude-apps-gateway): mendaftarkan klien OAuth di penyedia identitas (IdP) Anda, menyebarkan gateway sebagai kontainer, dan menjalankannya sehari-hari. Untuk setiap opsi dalam file `gateway.yaml` yang dibaca gateway saat boot, lihat [Referensi Konfigurasi](/id/claude-apps-gateway-config).9Halaman ini mencakup sisi operasional menjalankan [gateway aplikasi Claude](/docs/id/claude-apps-gateway): mendaftarkan klien OAuth di penyedia identitas (IdP) Anda, menyebarkan gateway sebagai kontainer, dan menjalankannya sehari-hari. Untuk setiap opsi dalam file `gateway.yaml` yang dibaca gateway saat boot, lihat [Referensi Konfigurasi](/docs/id/claude-apps-gateway-config).

10 10 

11Penyebaran produksi mengikuti empat langkah secara berurutan, dan bagian di bawah cocok dengan mereka. Dua yang pertama adalah tempat Anda membuat pilihan; dua yang kedua adalah materi referensi untuk dikonsultasikan setelah berjalan.11Penyebaran produksi mengikuti empat langkah secara berurutan, dan bagian di bawah cocok dengan mereka. Dua yang pertama adalah tempat Anda membuat pilihan; dua yang kedua adalah materi referensi untuk dikonsultasikan setelah berjalan.

12 12 


31 31 

32IdP apa pun yang sesuai dengan OIDC berfungsi: Okta, Microsoft Entra ID, Google Workspace, Keycloak, Dex, PingFederate, dan lainnya. IdP harus memenuhi tiga persyaratan:32IdP apa pun yang sesuai dengan OIDC berfungsi: Okta, Microsoft Entra ID, Google Workspace, Keycloak, Dex, PingFederate, dan lainnya. IdP harus memenuhi tiga persyaratan:

33 33 

34* Melayani `/.well-known/openid-configuration`, melalui HTTPS dalam produksi; gateway menerima [`http://` issuer](/id/claude-apps-gateway-config#oidc), dan issuer loopback juga memerlukan `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1`34* Melayani `/.well-known/openid-configuration`, melalui HTTPS dalam produksi; gateway menerima [`http://` issuer](/docs/id/claude-apps-gateway-config#oidc), dan issuer loopback juga memerlukan `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1`

35* Mendukung aliran kode otorisasi. PKCE (Proof Key for Code Exchange) aktif secara default; nonaktifkan dengan `oidc.use_pkce: false` untuk IdP yang tidak mendukungnya35* Mendukung aliran kode otorisasi. PKCE (Proof Key for Code Exchange) aktif secara default; nonaktifkan dengan `oidc.use_pkce: false` untuk IdP yang tidak mendukungnya

36* Mengembalikan `email` dan secara opsional `groups` dalam id\_token, atau melayaninya dari endpoint userinfo dengan `oidc.userinfo_fallback: true`36* Mengembalikan `email` dan secara opsional `groups` dalam id\_token, atau melayaninya dari endpoint userinfo dengan `oidc.userinfo_fallback: true`

37 37 


41 41 

42* **Okta**: server otorisasi org di `https://example.okta.com` mengembalikan id\_token tipis yang menghilangkan `email` dan `groups`, jadi atur `oidc.userinfo_fallback: true` kapan pun Anda menggunakannya sebagai `issuer`. Server otorisasi khusus seperti `https://example.okta.com/oauth2/default` yang menyertakan `email` dan secara opsional `groups` dalam id\_token memancarkannya secara langsung dan tidak memerlukan fallback. Okta memancarkan `groups` hanya ketika scope `groups` diminta dalam `oidc.scopes` dan filter klaim grup aplikasi memungkinkannya; `userinfo_fallback` tidak dapat mengisi klaim yang IdP tidak diminta.42* **Okta**: server otorisasi org di `https://example.okta.com` mengembalikan id\_token tipis yang menghilangkan `email` dan `groups`, jadi atur `oidc.userinfo_fallback: true` kapan pun Anda menggunakannya sebagai `issuer`. Server otorisasi khusus seperti `https://example.okta.com/oauth2/default` yang menyertakan `email` dan secara opsional `groups` dalam id\_token memancarkannya secara langsung dan tidak memerlukan fallback. Okta memancarkan `groups` hanya ketika scope `groups` diminta dalam `oidc.scopes` dan filter klaim grup aplikasi memungkinkannya; `userinfo_fallback` tidak dapat mengisi klaim yang IdP tidak diminta.

43* **Microsoft Entra ID**: `issuer` = `https://login.microsoftonline.com/<tenant-id>/v2.0`. Entra memancarkan Object ID grup daripada nama, jadi gunakan GUID dalam `managed.policies.match.groups`, atau gunakan App Roles untuk nama yang dapat dibaca manusia. Jika penyewa Anda memancarkan peran di bawah `roles` bukan `groups`, atur `oidc.groups_claim: roles`.43* **Microsoft Entra ID**: `issuer` = `https://login.microsoftonline.com/<tenant-id>/v2.0`. Entra memancarkan Object ID grup daripada nama, jadi gunakan GUID dalam `managed.policies.match.groups`, atau gunakan App Roles untuk nama yang dapat dibaca manusia. Jika penyewa Anda memancarkan peran di bawah `roles` bukan `groups`, atur `oidc.groups_claim: roles`.

44* **Google Workspace**: `issuer` = `https://accounts.google.com`. id\_token Google tidak membawa grup. Untuk menggunakan `allowed_groups` berbasis grup atau `managed.policies` dengan Google sebagai IdP, konfigurasikan [`oidc.google_groups`](/id/claude-apps-gateway-config#oidc), yang mencari grup setiap pengguna melalui Admin SDK Directory API menggunakan akun layanan dengan delegasi di seluruh domain. Tanpa itu, gunakan `oidc.allowed_email_domains` untuk gating keanggotaan dan `managed.policies.match.email_domain` untuk penugasan kebijakan. Google juga mengabaikan scope `offline_access` standar. Untuk token refresh, atur `oidc.scopes: [openid, profile, email]` dan `oidc.extra_auth_params: { access_type: offline, prompt: consent }`.44* **Google Workspace**: `issuer` = `https://accounts.google.com`. id\_token Google tidak membawa grup. Untuk menggunakan `allowed_groups` berbasis grup atau `managed.policies` dengan Google sebagai IdP, konfigurasikan [`oidc.google_groups`](/docs/id/claude-apps-gateway-config#oidc), yang mencari grup setiap pengguna melalui Admin SDK Directory API menggunakan akun layanan dengan delegasi di seluruh domain. Tanpa itu, gunakan `oidc.allowed_email_domains` untuk gating keanggotaan dan `managed.policies.match.email_domain` untuk penugasan kebijakan. Google juga mengabaikan scope `offline_access` standar. Untuk token refresh, atur `oidc.scopes: [openid, profile, email]` dan `oidc.extra_auth_params: { access_type: offline, prompt: consent }`.

45 45 

46Untuk dukungan dengan penyedia identitas yang tidak tercakup di atas, lihat [Troubleshooting](#troubleshooting).46Untuk dukungan dengan penyedia identitas yang tidak tercakup di atas, lihat [Troubleshooting](#troubleshooting).

47 47 

48<Warning>48<Warning>

49 Token refresh memungkinkan gateway untuk memperbarui sesi pengembang secara diam-diam, tanpa mengirim pengembang kembali ke browser. Mereka juga mendorong deprovisioning, karena ketika IdP menonaktifkan pengguna, refresh berikutnya gagal dan sesi berakhir dalam `ttl_hours`. Gateway meminta `offline_access` secara default untuk mendapatkan token refresh. Jika IdP Anda memerlukan persetujuan eksplisit untuk akses offline, konfigurasikan klien OAuth untuk memungkinkannya.49 Token refresh memungkinkan gateway untuk memperbarui sesi pengembang secara diam-diam, tanpa mengirim pengembang kembali ke browser. Mereka juga mendorong deprovisioning, karena ketika IdP menonaktifkan pengguna, refresh berikutnya gagal dan sesi berakhir dalam `ttl_hours`. Gateway meminta `offline_access` secara default untuk mendapatkan token refresh. Jika IdP Anda memerlukan persetujuan eksplisit untuk akses offline, konfigurasikan klien OAuth untuk memungkinkannya.

50 50 

51 Jika IdP Anda tidak dapat mengeluarkan token refresh sama sekali, gateway masih berfungsi, tetapi tidak ada pembaruan diam-diam, jadi pengembang menjalankan kembali login browser ketika sesi mereka berakhir. Untuk mencegah itu terjadi setiap jam, naikkan [`session.ttl_hours`](/id/claude-apps-gateway-config#session) ke `8` atau `12`. Tradeoff adalah latensi deprovisioning, karena tanpa token refresh pengguna yang dinonaktifkan tetap memiliki akses sampai TTL yang lebih lama berlalu.51 Jika IdP Anda tidak dapat mengeluarkan token refresh sama sekali, gateway masih berfungsi, tetapi tidak ada pembaruan diam-diam, jadi pengembang menjalankan kembali login browser ketika sesi mereka berakhir. Untuk mencegah itu terjadi setiap jam, naikkan [`session.ttl_hours`](/docs/id/claude-apps-gateway-config#session) ke `8` atau `12`. Tradeoff adalah latensi deprovisioning, karena tanpa token refresh pengguna yang dinonaktifkan tetap memiliki akses sampai TTL yang lebih lama berlalu.

52</Warning>52</Warning>

53 53 

54<h2 id="deployment">54<h2 id="deployment">


62Beberapa keputusan membentuk penyebaran di luar tempat berjalan:62Beberapa keputusan membentuk penyebaran di luar tempat berjalan:

63 63 

64* **Biaya**: tidak ada lisensi terpisah atau biaya per-kursi untuk gateway; itu adalah bagian dari biner `claude`. Anda membayar untuk inferensi melalui komitmen cloud atau Anthropic yang ada, ditambah komputasi untuk kontainer dan kolektor telemetri Anda.64* **Biaya**: tidak ada lisensi terpisah atau biaya per-kursi untuk gateway; itu adalah bagian dari biner `claude`. Anda membayar untuk inferensi melalui komitmen cloud atau Anthropic yang ada, ditambah komputasi untuk kontainer dan kolektor telemetri Anda.

65* **Bypass**: gateway tidak memberlakukan bahwa satu-satunya rute ke model melaluinya. Pengembang dengan kredensial mereka sendiri masih dapat memanggil penyedia secara langsung, jadi menutup jalur itu adalah keputusan kebijakan jaringan, misalnya memblokir egress ke `api.anthropic.com` kecuali dari gateway. Memblokir egress itu juga merusak [pemeriksaan keamanan domain WebFetch](/id/data-usage#webfetch-domain-safety-check), yang memanggil `api.anthropic.com` dari mesin setiap pengembang; atur `skipWebFetchPreflight: true` dalam kebijakan terkelola untuk menonaktifkannya.65* **Bypass**: gateway tidak memberlakukan bahwa satu-satunya rute ke model melaluinya. Pengembang dengan kredensial mereka sendiri masih dapat memanggil penyedia secara langsung, jadi menutup jalur itu adalah keputusan kebijakan jaringan, misalnya memblokir egress ke `api.anthropic.com` kecuali dari gateway. Memblokir egress itu juga merusak [pemeriksaan keamanan domain WebFetch](/docs/id/data-usage#webfetch-domain-safety-check), yang memanggil `api.anthropic.com` dari mesin setiap pengembang; atur `skipWebFetchPreflight: true` dalam kebijakan terkelola untuk menonaktifkannya.

66* **Multiple gateways**: setiap gateway adalah penyebaran terpisah dengan konfigurasinya sendiri. CLI menyimpan sidik jari kepercayaan dan kredensialnya per nama host gateway, jadi tim yang berbeda dapat terhubung ke gateway yang berbeda tanpa konflik. Untuk melayani beberapa issuer OIDC, jalankan instance terpisah.66* **Multiple gateways**: setiap gateway adalah penyebaran terpisah dengan konfigurasinya sendiri. CLI menyimpan sidik jari kepercayaan dan kredensialnya per nama host gateway, jadi tim yang berbeda dapat terhubung ke gateway yang berbeda tanpa konflik. Untuk melayani beberapa issuer OIDC, jalankan instance terpisah.

67* **Serverless**: Cloud Run berfungsi; atur `min-instances: 1` untuk menghindari penemuan OIDC dingin. Lambda dan Cloud Functions tidak, karena gateway adalah server HTTP yang berjalan lama.67* **Serverless**: Cloud Run berfungsi; atur `min-instances: 1` untuk menghindari penemuan OIDC dingin. Lambda dan Cloud Functions tidak, karena gateway adalah server HTTP yang berjalan lama.

68 68 

69Setiap topologi produksi di sini menempatkan proxy L7, seperti Ingress, frontend Cloud Run, atau ALB, di depan replika HTTP biasa. Atur [`listen.trusted_proxies`](/id/claude-apps-gateway-config#listen) ke rentang sumber proxy sehingga gateway membaca IP klien dari `X-Forwarded-For`. Gateway menghormati header hanya ketika peer TCP dipercaya; [contoh yang dikerjakan Google Cloud](/id/claude-apps-gateway-on-gcp) memiliki nilai konkret per topologi. Tanpa proxy terpercaya, setiap permintaan tampak berasal dari IP proxy, yang meruntuhkan batas laju per-IP menjadi satu bucket bersama dan mencatat IP proxy dalam acara audit.69Setiap topologi produksi di sini menempatkan proxy L7, seperti Ingress, frontend Cloud Run, atau ALB, di depan replika HTTP biasa. Atur [`listen.trusted_proxies`](/docs/id/claude-apps-gateway-config#listen) ke rentang sumber proxy sehingga gateway membaca IP klien dari `X-Forwarded-For`. Gateway menghormati header hanya ketika peer TCP dipercaya; [contoh yang dikerjakan Google Cloud](/docs/id/claude-apps-gateway-on-gcp) memiliki nilai konkret per topologi. Tanpa proxy terpercaya, setiap permintaan tampak berasal dari IP proxy, yang meruntuhkan batas laju per-IP menjadi satu bucket bersama dan mencatat IP proxy dalam acara audit.

70 70 

71<h3 id="container-image">71<h3 id="container-image">

72 Gambar kontainer72 Gambar kontainer


74 74 

75Bangun gambar Anda sendiri di sekitar biner `claude` asli dari rilis Claude Code standar:75Bangun gambar Anda sendiri di sekitar biner `claude` asli dari rilis Claude Code standar:

76 76 

771. Unduh build Linux untuk arsitektur gambar Anda dari rilis yang disematkan; lihat [Instal versi spesifik](/id/setup#install-a-specific-version) untuk URL unduhan.771. Unduh build Linux untuk arsitektur gambar Anda dari rilis yang disematkan; lihat [Instal versi spesifik](/docs/id/setup#install-a-specific-version) untuk URL unduhan.

782. Verifikasi terhadap `manifest.json` yang ditandatangani GPG rilis seperti yang dijelaskan dalam [Integritas biner dan penandatanganan kode](/id/setup#binary-integrity-and-code-signing).782. Verifikasi terhadap `manifest.json` yang ditandatangani GPG rilis seperti yang dijelaskan dalam [Integritas biner dan penandatanganan kode](/docs/id/setup#binary-integrity-and-code-signing).

793. Salin ke konteks build.793. Salin ke konteks build.

80 80 

81Cerminkan rilis ke registri internal Anda jika build Anda tidak dapat menjangkau host rilis, dan sematkan versi yang dijalankan armada Anda.81Cerminkan rilis ke registri internal Anda jika build Anda tidak dapat menjangkau host rilis, dan sematkan versi yang dijalankan armada Anda.

82 82 

83Di luar biner, gambar membutuhkan:83Di luar biner, gambar membutuhkan:

84 84 

85* **Gambar berbasis glibc**: build glibc hanya memiliki dependensi dinamis perpustakaan glibc. Gambar berbasis Musl memerlukan build `linux-x64-musl` atau `linux-arm64-musl` ditambah paket tambahan; lihat [Penyiapan Alpine Linux](/id/setup#alpine-linux-and-musl-based-distributions).85* **Gambar berbasis glibc**: build glibc hanya memiliki dependensi dinamis perpustakaan glibc. Gambar berbasis Musl memerlukan build `linux-x64-musl` atau `linux-arm64-musl` ditambah paket tambahan; lihat [Penyiapan Alpine Linux](/docs/id/setup#alpine-linux-and-musl-based-distributions).

86* **Direktori status yang dapat ditulis**: gateway berjalan sebagai pengguna apa pun, tetapi gambar minimal tidak memiliki rumah yang dapat ditulis. Atur `CLAUDE_CONFIG_DIR` ke jalur yang dapat ditulis seperti `/tmp/.claude`.86* **Direktori status yang dapat ditulis**: gateway berjalan sebagai pengguna apa pun, tetapi gambar minimal tidak memiliki rumah yang dapat ditulis. Atur `CLAUDE_CONFIG_DIR` ke jalur yang dapat ditulis seperti `/tmp/.claude`.

87* **Perintah kontainer**: `claude gateway --config /etc/claude/gateway.yaml`, dengan file konfigurasi dipasang hanya-baca dan rahasia disuplai sebagai variabel lingkungan; gateway mendengarkan di `listen.port`, default `8080`.87* **Perintah kontainer**: `claude gateway --config /etc/claude/gateway.yaml`, dengan file konfigurasi dipasang hanya-baca dan rahasia disuplai sebagai variabel lingkungan; gateway mendengarkan di `listen.port`, default `8080`.

88 88 


99<Note>99<Note>

100 **Identitas beban kerja**100 **Identitas beban kerja**

101 101 

102 Lebih suka identitas beban kerja platform daripada kunci statis: IRSA di EKS untuk Bedrock dan untuk Claude Platform di AWS, Workload Identity di GKE untuk Agent Platform, dan identitas beban kerja di AKS untuk Foundry. Atur `auth: {}` dalam blok upstream, atau `use_azure_ad: true` untuk Foundry, dan gateway mengambil identitas pod melalui rantai kredensial default penyedia itu. Untuk pasangan lintas cloud, seperti upstream Bedrock di GKE, atur kredensial eksplisit dalam blok `auth` upstream sebagai gantinya. Referensi [`upstreams`](/id/claude-apps-gateway-config#upstreams) memiliki detail penyiapan per-platform.102 Lebih suka identitas beban kerja platform daripada kunci statis: IRSA di EKS untuk Bedrock dan untuk Claude Platform di AWS, Workload Identity di GKE untuk Agent Platform, dan identitas beban kerja di AKS untuk Foundry. Atur `auth: {}` dalam blok upstream, atau `use_azure_ad: true` untuk Foundry, dan gateway mengambil identitas pod melalui rantai kredensial default penyedia itu. Untuk pasangan lintas cloud, seperti upstream Bedrock di GKE, atur kredensial eksplisit dalam blok `auth` upstream sebagai gantinya. Referensi [`upstreams`](/docs/id/claude-apps-gateway-config#upstreams) memiliki detail penyiapan per-platform.

103</Note>103</Note>

104 104 

105<h3 id="cloud-run">105<h3 id="cloud-run">


109Konfigurasikan layanan sebagai berikut:109Konfigurasikan layanan sebagai berikut:

110 110 

111* Biarkan `listen.port` pada default `8080`, yang cocok dengan `PORT` default Cloud Run, atau atur `port: ${PORT}`111* Biarkan `listen.port` pada default `8080`, yang cocok dengan `PORT` default Cloud Run, atau atur `port: ${PORT}`

112* Atur `public_url` ke asal yang dapat dijangkau secara eksternal. Untuk produksi ini biasanya nama host penyeimbang beban internal, karena `/login` [menolak alamat publik](/id/claude-apps-gateway#prerequisites) dan URL `*.run.app` diselesaikan ke satu, jadi URL Cloud Run saja hanya berfungsi untuk uji coba `curl` atau browser. Pengecualiannya adalah jaringan di mana `*.run.app` diselesaikan secara pribadi melalui Private Service Connect dan zona pribadi Cloud DNS; dalam topologi itu URL Cloud Run adalah `public_url` yang valid. [Contoh yang dikerjakan Google Cloud](/id/claude-apps-gateway-on-gcp#deploy-the-gateway) mencakup keduanya.112* Atur `public_url` ke asal yang dapat dijangkau secara eksternal. Untuk produksi ini biasanya nama host penyeimbang beban internal, karena `/login` [menolak alamat publik](/docs/id/claude-apps-gateway#prerequisites) dan URL `*.run.app` diselesaikan ke satu, jadi URL Cloud Run saja hanya berfungsi untuk uji coba `curl` atau browser. Pengecualiannya adalah jaringan di mana `*.run.app` diselesaikan secara pribadi melalui Private Service Connect dan zona pribadi Cloud DNS; dalam topologi itu URL Cloud Run adalah `public_url` yang valid. [Contoh yang dikerjakan Google Cloud](/docs/id/claude-apps-gateway-on-gcp#deploy-the-gateway) mencakup keduanya.

113* Pasang konfigurasi sebagai volume rahasia113* Pasang konfigurasi sebagai volume rahasia

114* Atur `min-instances: 1` untuk menghindari penemuan OIDC dingin pada permintaan pertama114* Atur `min-instances: 1` untuk menghindari penemuan OIDC dingin pada permintaan pertama

115 115 

116<Note>116<Note>

117 Untuk contoh lengkap yang dikerjakan di Google Cloud, mencakup Cloud Run atau GKE, Cloud SQL, dan Secret Manager, lihat [Sebarkan di Google Cloud](/id/claude-apps-gateway-on-gcp).117 Untuk contoh lengkap yang dikerjakan di Google Cloud, mencakup Cloud Run atau GKE, Cloud SQL, dan Secret Manager, lihat [Sebarkan di Google Cloud](/docs/id/claude-apps-gateway-on-gcp).

118</Note>118</Note>

119 119 

120<h3 id="push-the-gateway-url-to-developer-machines">120<h3 id="push-the-gateway-url-to-developer-machines">

121 Dorong URL gateway ke mesin pengembang121 Dorong URL gateway ke mesin pengembang

122</h3>122</h3>

123 123 

124Setelah gateway melayani, dorong `forceLoginMethod` dan `forceLoginGatewayUrl` ke mesin setiap pengembang melalui pengaturan terkelola, melalui MDM atau dengan menulis `managed-settings.json` per-OS secara langsung. Tanpa ini, `/login` menampilkan pemilih akun standar tanpa opsi gateway. Lihat [Pengaturan terkelola sisi klien](/id/claude-apps-gateway-config#client-side-managed-settings) untuk jalur file.124Setelah gateway melayani, dorong `forceLoginMethod` dan `forceLoginGatewayUrl` ke mesin setiap pengembang melalui pengaturan terkelola, melalui MDM atau dengan menulis `managed-settings.json` per-OS secara langsung. Tanpa ini, `/login` menampilkan pemilih akun standar tanpa opsi gateway. Lihat [Pengaturan terkelola sisi klien](/docs/id/claude-apps-gateway-config#client-side-managed-settings) untuk jalur file.

125 125 

126<h2 id="operations">126<h2 id="operations">

127 Operasi127 Operasi


160 160 

161* **Sesi yang ada**: token pembawa memvalidasi secara lokal dengan rahasia JWT, penyegaran sesi tidak menyentuh toko, dan proses gateway masih dapat melayani inferensi161* **Sesi yang ada**: token pembawa memvalidasi secara lokal dengan rahasia JWT, penyegaran sesi tidak menyentuh toko, dan proses gateway masih dapat melayani inferensi

162* **Masuk baru**: gagal sampai Postgres pulih, karena aliran perangkat dan penghitung batas lajunya tinggal di Postgres162* **Masuk baru**: gagal sampai Postgres pulih, karena aliran perangkat dan penghitung batas lajunya tinggal di Postgres

163* **[Penegakan batas pengeluaran](/id/claude-apps-gateway-spend-limits#postgres-availability)**: gagal terbuka secara default selama pemadaman, jadi inferensi masih mengalir; balikkan ke gagal tertutup jika Anda lebih suka memblokir daripada menjalankan tanpa meter163* **[Penegakan batas pengeluaran](/docs/id/claude-apps-gateway-spend-limits#postgres-availability)**: gagal terbuka secara default selama pemadaman, jadi inferensi masih mengalir; balikkan ke gagal tertutup jika Anda lebih suka memblokir daripada menjalankan tanpa meter

164* **Kesiapan**: `/readyz` melaporkan tidak siap selama pemadaman, jadi orchestrator yang gating lalu lintas pada kesiapan menghapus setiap replika dari rotasi sekaligus. Dalam topologi itu semua lalu lintas, termasuk inferensi yang dapat masih dilayani gateway, gagal di penyeimbang beban sampai Postgres pulih. Probe liveness di `/healthz` terus lulus, jadi replika tidak dimulai ulang. Arahkan probe kesiapan ke `/healthz` sebagai gantinya jika Anda lebih suka pengembang yang masuk terus bekerja melalui pemadaman toko; biayanya adalah masuk baru gagal terhadap replika yang masih melaporkan siap.164* **Kesiapan**: `/readyz` melaporkan tidak siap selama pemadaman, jadi orchestrator yang gating lalu lintas pada kesiapan menghapus setiap replika dari rotasi sekaligus. Dalam topologi itu semua lalu lintas, termasuk inferensi yang dapat masih dilayani gateway, gagal di penyeimbang beban sampai Postgres pulih. Probe liveness di `/healthz` terus lulus, jadi replika tidak dimulai ulang. Arahkan probe kesiapan ke `/healthz` sebagai gantinya jika Anda lebih suka pengembang yang masuk terus bekerja melalui pemadaman toko; biayanya adalah masuk baru gagal terhadap replika yang masih melaporkan siap.

165 165 

166Jika IdP Anda turun, sesi yang ada bekerja sampai `ttl_hours`, dan login dan penyegaran baru gagal. Atur `ttl_hours` yang lebih lama jika IdP Anda memiliki jendela pemeliharaan yang sering.166Jika IdP Anda turun, sesi yang ada bekerja sampai `ttl_hours`, dan login dan penyegaran baru gagal. Atur `ttl_hours` yang lebih lama jika IdP Anda memiliki jendela pemeliharaan yang sering.


191| `admin_audit` | Jejak mutasi Admin API | `admin.audit_retention_days`, default 365 |191| `admin_audit` | Jejak mutasi Admin API | `admin.audit_retention_days`, default 365 |

192| `principal_emails` | Email terakhir dilihat setiap principal, nama tampilan, dan grup IdP. Berisi PII. | `admin.identity_retention_days` sejak aktivitas terakhir, default 90 |192| `principal_emails` | Email terakhir dilihat setiap principal, nama tampilan, dan grup IdP. Berisi PII. | `admin.identity_retention_days` sejak aktivitas terakhir, default 90 |

193 193 

194Loop 30 detik mengakhiri baris `kv` melewati TTL mereka, dan sapuan per jam memberlakukan jendela retensi pada tabel pengeluaran, jadi tidak ada yang tumbuh tanpa batas. Tanpa [batas pengeluaran](/id/claude-apps-gateway-spend-limits) yang dikonfigurasi, hanya `kv` yang ditulis. Jika kebijakan keamanan Anda melarang DDL dari peran aplikasi, buat tabel ini sebelumnya dan `_migrations` dengan peran admin dan berikan peran aplikasi `SELECT, INSERT, UPDATE, DELETE` pada masing-masing.194Loop 30 detik mengakhiri baris `kv` melewati TTL mereka, dan sapuan per jam memberlakukan jendela retensi pada tabel pengeluaran, jadi tidak ada yang tumbuh tanpa batas. Tanpa [batas pengeluaran](/docs/id/claude-apps-gateway-spend-limits) yang dikonfigurasi, hanya `kv` yang ditulis. Jika kebijakan keamanan Anda melarang DDL dari peran aplikasi, buat tabel ini sebelumnya dan `_migrations` dengan peran admin dan berikan peran aplikasi `SELECT, INSERT, UPDATE, DELETE` pada masing-masing.

195 195 

196Dengan batas pengeluaran digunakan, database yang hilang berarti pelacakan pengeluaran dan batas yang hilang, bukan hanya login ulang pengembang, jadi jalankan backup reguler. Untuk menghapus satu pengembang yang pergi segera daripada menunggu retensi, jalankan `DELETE FROM principal_emails WHERE principal = '<sub>'` secara langsung; itu menghapus satu-satunya tabel yang menyimpan email, nama, dan grup mereka. Baris `spend` dan `admin_audit` mereferensikan hanya `sub` OIDC pseudonim.196Dengan batas pengeluaran digunakan, database yang hilang berarti pelacakan pengeluaran dan batas yang hilang, bukan hanya login ulang pengembang, jadi jalankan backup reguler. Untuk menghapus satu pengembang yang pergi segera daripada menunggu retensi, jalankan `DELETE FROM principal_emails WHERE principal = '<sub>'` secara langsung; itu menghapus satu-satunya tabel yang menyimpan email, nama, dan grup mereka. Baris `spend` dan `admin_audit` mereferensikan hanya `sub` OIDC pseudonim.

197 197 


218| Data | Jalur | Dikirim ke Anthropic oleh gateway |218| Data | Jalur | Dikirim ke Anthropic oleh gateway |

219| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------------------------------------------------- |219| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------------------------------------------------- |

220| Inferensi (prompt, penyelesaian) | CLI → gateway → upstream Anda | Hanya jika API Anthropic adalah upstream yang dikonfigurasi |220| Inferensi (prompt, penyelesaian) | CLI → gateway → upstream Anda | Hanya jika API Anthropic adalah upstream yang dikonfigurasi |

221| Telemetri (metrik OTLP, ditambah [log dan jejak opt-in](/id/claude-apps-gateway-config#telemetry)) | CLI → gateway → kolektor Anda | Tidak pernah |221| Telemetri (metrik OTLP, ditambah [log dan jejak opt-in](/docs/id/claude-apps-gateway-config#telemetry)) | CLI → gateway → kolektor Anda | Tidak pernah |

222| Identitas (email, grup, sub) | IdP → gateway → JWT → CLI; CLI memberi stempel pada ekspor OTLP | Tidak pernah |222| Identitas (email, grup, sub) | IdP → gateway → JWT → CLI; CLI memberi stempel pada ekspor OTLP | Tidak pernah |

223| Pengaturan terkelola | YAML gateway Anda → CLI | Tidak pernah |223| Pengaturan terkelola | YAML gateway Anda → CLI | Tidak pernah |

224| Log audit | Stderr gateway → agregator Anda | Tidak pernah |224| Log audit | Stderr gateway → agregator Anda | Tidak pernah |


237 237 

238Dua ancaman berada di luar cakupan karena mereka adalah infrastruktur Anda untuk diamankan:238Dua ancaman berada di luar cakupan karena mereka adalah infrastruktur Anda untuk diamankan:

239 239 

240* **Host gateway yang dikompromikan**: host menyimpan kredensial upstream dan mendistribusikan [pengaturan terkelola](/id/claude-apps-gateway-config#managed) ke setiap pengembang yang terhubung, jadi kontrol atas konfigurasi gateway sebanding dengan kontrol atas MDM Anda. Dialog persetujuan satu kali CLI untuk pengaturan yang mampu shell membatasi perubahan diam-diam tetapi tidak menggantikan keamanan host.240* **Host gateway yang dikompromikan**: host menyimpan kredensial upstream dan mendistribusikan [pengaturan terkelola](/docs/id/claude-apps-gateway-config#managed) ke setiap pengembang yang terhubung, jadi kontrol atas konfigurasi gateway sebanding dengan kontrol atas MDM Anda. Dialog persetujuan satu kali CLI untuk pengaturan yang mampu shell membatasi perubahan diam-diam tetapi tidak menggantikan keamanan host.

241* **Penyedia OIDC yang berbahaya**: penyedia menandatangani id\_token yang dipercaya gateway, jadi dapat menegaskan identitas apa pun. Penyaringan dan pengamanan IdP Anda adalah tanggung jawab Anda.241* **Penyedia OIDC yang berbahaya**: penyedia menandatangani id\_token yang dipercaya gateway, jadi dapat menegaskan identitas apa pun. Penyaringan dan pengamanan IdP Anda adalah tanggung jawab Anda.

242 242 

243<h3 id="user-code-brute-force-resistance">243<h3 id="user-code-brute-force-resistance">


246 246 

247`user_code` yang diketik pengembang ke halaman verifikasi `/device` adalah 8 karakter yang diambil dari alfabet 20 karakter, yang menghasilkan 20⁸ atau sekitar 2,56×10¹⁰ kombinasi, dan berakhir setelah 10 menit.247`user_code` yang diketik pengembang ke halaman verifikasi `/device` adalah 8 karakter yang diambil dari alfabet 20 karakter, yang menghasilkan 20⁸ atau sekitar 2,56×10¹⁰ kombinasi, dan berakhir setelah 10 menit.

248 248 

249Gateway menerapkan batas laju per-IP pada endpoint hibah perangkat, dapat dikonfigurasi melalui [`rate_limits`](/id/claude-apps-gateway-config#http-tuning). Naikkan batas jika banyak pengembang masuk dari alamat NAT korporat bersama tunggal. Batas hanya berlaku pada aliran masuk, bukan pada inferensi.249Gateway menerapkan batas laju per-IP pada endpoint hibah perangkat, dapat dikonfigurasi melalui [`rate_limits`](/docs/id/claude-apps-gateway-config#http-tuning). Naikkan batas jika banyak pengembang masuk dari alamat NAT korporat bersama tunggal. Batas hanya berlaku pada aliran masuk, bukan pada inferensi.

250 250 

251<h3 id="compliance-posture">251<h3 id="compliance-posture">

252 Postur kepatuhan252 Postur kepatuhan


255* **Residensi data**: bidang data sendiri gateway mengirim tidak ada ke Anthropic kecuali API Anthropic adalah upstream yang dikonfigurasi; ketika itu, perjanjian penanganan data yang ada berlaku untuk jalur inferensi. Telemetri, audit, identitas, dan pengaturan hanya pergi ke tujuan yang Anda konfigurasikan.255* **Residensi data**: bidang data sendiri gateway mengirim tidak ada ke Anthropic kecuali API Anthropic adalah upstream yang dikonfigurasi; ketika itu, perjanjian penanganan data yang ada berlaku untuk jalur inferensi. Telemetri, audit, identitas, dan pengaturan hanya pergi ke tujuan yang Anda konfigurasikan.

256* **Lalu lintas proses host**: proses host adalah CLI Claude Code, yang dapat mengirim analitik startup dan pemeriksaan pembaruan ke Anthropic. Untuk penyebaran egress ketat, atur `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` dalam lingkungan kontainer gateway.256* **Lalu lintas proses host**: proses host adalah CLI Claude Code, yang dapat mengirim analitik startup dan pemeriksaan pembaruan ke Anthropic. Untuk penyebaran egress ketat, atur `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` dalam lingkungan kontainer gateway.

257* **Analitik klien**: CLI menonaktifkan analitik penggunaan sendiri saat masuk ke gateway, dan pelaporan kesalahan dimatikan secara default pada permukaan API pihak ketiga.257* **Analitik klien**: CLI menonaktifkan analitik penggunaan sendiri saat masuk ke gateway, dan pelaporan kesalahan dimatikan secara default pada permukaan API pihak ketiga.

258* **Mesin klien**: CLI pengembang masih mengirim pemeriksaan nama host WebFetch dan pemeriksaan versi ke Anthropic kecuali `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` dan `skipWebFetchPreflight: true` diatur. Lihat [penggunaan data](/id/data-usage).258* **Mesin klien**: CLI pengembang masih mengirim pemeriksaan nama host WebFetch dan pemeriksaan versi ke Anthropic kecuali `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` dan `skipWebFetchPreflight: true` diatur. Lihat [penggunaan data](/docs/id/data-usage).

259* **Peringkat survei**: kredensial gateway menonaktifkan sink peringkat terikat Anthropic, jadi peringkat tidak dikirim ke Anthropic.259* **Peringkat survei**: kredensial gateway menonaktifkan sink peringkat terikat Anthropic, jadi peringkat tidak dikirim ke Anthropic.

260* **Berbagi transkrip**: memilih Ya pada prompt berbagi transkrip survei menulis file lokal di bawah `~/.claude/feedback-bundles/` bukan mengunggah ke Anthropic.260* **Berbagi transkrip**: memilih Ya pada prompt berbagi transkrip survei menulis file lokal di bawah `~/.claude/feedback-bundles/` bukan mengunggah ke Anthropic.

261* **Pembaruan klien**: pemeriksaan pembaruan terpisah dari lalu lintas gateway. Sematkan versi melalui distribusi Anda sendiri dan atur `DISABLE_UPDATES` jika laptop tidak boleh mengambil rilis. `DISABLE_AUTOUPDATER` menghentikan hanya pembaruan latar belakang sementara `claude update` masih berfungsi.261* **Pembaruan klien**: pemeriksaan pembaruan terpisah dari lalu lintas gateway. Sematkan versi melalui distribusi Anda sendiri dan atur `DISABLE_UPDATES` jika laptop tidak boleh mengambil rilis. `DISABLE_AUTOUPDATER` menghentikan hanya pembaruan latar belakang sementara `claude update` masih berfungsi.

262* **TLS**: layani `public_url` melalui HTTPS dalam produksi, baik dari pendengar gateway sendiri melalui `listen.tls` atau dari ingress yang menghentikan TLS di depan replika HTTP biasa dengan `listen.public_url` diatur. Gateway tidak menolak HTTP biasa. IdP harus melayani HTTPS dalam produksi, dan Postgres mendukung `?sslmode=require`. Atur `Strict-Transport-Security` di ingress Anda.262* **TLS**: layani `public_url` melalui HTTPS dalam produksi, baik dari pendengar gateway sendiri melalui `listen.tls` atau dari ingress yang menghentikan TLS di depan replika HTTP biasa dengan `listen.public_url` diatur. Gateway tidak menolak HTTP biasa. IdP harus melayani HTTPS dalam produksi, dan Postgres mendukung `?sslmode=require`. Atur `Strict-Transport-Security` di ingress Anda.

263* **Pengungkapan kerentanan**: ikuti [Melaporkan masalah keamanan](/id/security#reporting-security-issues)263* **Pengungkapan kerentanan**: ikuti [Melaporkan masalah keamanan](/docs/id/security#reporting-security-issues)

264 264 

265<h2 id="troubleshooting">265<h2 id="troubleshooting">

266 Troubleshooting266 Troubleshooting


272* **Masalah login**: pengembang menjalankan `claude --debug-file ./claude-debug.txt`, mereproduksi, dan mengirim file itu ditambah log audit gateway untuk jendela yang sama272* **Masalah login**: pengembang menjalankan `claude --debug-file ./claude-debug.txt`, mereproduksi, dan mengirim file itu ditambah log audit gateway untuk jendela yang sama

273* **Masalah inferensi**: model yang diminta, upstream yang dikonfigurasi, dan log audit gateway untuk permintaan, yang mencatat upstream mana yang melayaninya dan status respons273* **Masalah inferensi**: model yang diminta, upstream yang dikonfigurasi, dan log audit gateway untuk permintaan, yang mencatat upstream mana yang melayaninya dan status respons

274 274 

275Stderr gateway mencakup aliran acara audit, log audit mencatat identitas pengembang, dan file debug mencatat output hook dan server MCP dari mesin pengembang. Tinjau dan redaksi ini sebelum memposting ke issue publik.

276 

275| Gejala | Penyebab | Perbaikan |277| Gejala | Penyebab | Perbaikan |

276| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |278| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

277| `/login` pengembang menampilkan pemilih akun standar bukan layar **Cloud gateway** | `forceLoginMethod` atau `forceLoginGatewayUrl` tidak diatur dalam pengaturan terkelola pada mesin itu | Sebarkan [file pengaturan terkelola](/id/claude-apps-gateway#set-the-gateway-url) ke perangkat; `/login` membaca URL gateway dari sana |279| `/login` pengembang menampilkan pemilih akun standar bukan layar **Cloud gateway** | `forceLoginMethod` atau `forceLoginGatewayUrl` tidak diatur dalam pengaturan terkelola pada mesin itu | Sebarkan [file pengaturan terkelola](/docs/id/claude-apps-gateway#set-the-gateway-url) ke perangkat; `/login` membaca URL gateway dari sana |

278| Startup menampilkan `Gateway login is configured in managed settings, but this Claude Code build does not include Cloud gateway support.` | Build Claude Code yang diinstal mendahului dukungan gateway | Minta pengembang memperbarui Claude Code ke rilis yang mencakup dukungan Cloud gateway |280| Startup menampilkan `Gateway login is configured in managed settings, but this Claude Code build does not include Cloud gateway support.` | Build Claude Code yang diinstal mendahului dukungan gateway | Minta pengembang memperbarui Claude Code ke rilis yang mencakup dukungan Cloud gateway |

279| CLI `/login`: `Gateway hosts must be on your organization's private network; <host> resolves to the public (or unrecognized) address <ip>` | Nama host gateway diselesaikan ke setidaknya satu alamat IP publik. Claude Code memeriksa setiap alamat yang diselesaikan dan memerlukan setiap satu menjadi pribadi. Penyebab umum adalah nama dual-stack di mana satu keluarga diselesaikan ke alamat publik, termasuk penyeimbang beban dual-stack internal AWS, yang mengembalikan alamat AAAA rentang publik. Titik akhir gateway publik yang dioperasikan Anthropic dikecualikan dari pemeriksaan, dan `/login` menerimanya melalui `https://`. Sebelum v2.1.206, `/login` menolaknya seperti alamat publik lainnya | Minta nama gateway hanya diselesaikan ke alamat pribadi pada mesin pengembang. Untuk nama dual-stack, lepaskan catatan rentang publik atau layani nama DNS internal saja. Lihat [prasyarat jaringan pribadi](/id/claude-apps-gateway#prerequisites). |281| CLI `/login`: `Gateway hosts must be on your organization's private network; <host> resolves to the public (or unrecognized) address <ip>` | Nama host gateway diselesaikan ke setidaknya satu alamat IP publik. Claude Code memeriksa setiap alamat yang diselesaikan dan memerlukan setiap satu menjadi pribadi. Penyebab umum adalah nama dual-stack di mana satu keluarga diselesaikan ke alamat publik, termasuk penyeimbang beban dual-stack internal AWS, yang mengembalikan alamat AAAA rentang publik. Titik akhir gateway publik yang dioperasikan Anthropic dikecualikan dari pemeriksaan, dan `/login` menerimanya melalui `https://`. Sebelum v2.1.206, `/login` menolaknya seperti alamat publik lainnya | Minta nama gateway hanya diselesaikan ke alamat pribadi pada mesin pengembang. Untuk nama dual-stack, lepaskan catatan rentang publik atau layani nama DNS internal saja. Lihat [prasyarat jaringan pribadi](/docs/id/claude-apps-gateway#prerequisites). |

280| CLI `/login`: `Gateway login requires a direct connection and does not support connecting through an HTTP proxy` | `HTTPS_PROXY` atau `HTTP_PROXY` berlaku untuk host gateway dan nama host proxy diselesaikan ke alamat publik. Proxy yang nama hostnya hanya diselesaikan ke alamat pribadi diizinkan dan tidak memicu kesalahan ini | Tambahkan host gateway ke `NO_PROXY` pada mesin pengembang sehingga koneksi langsung, atau gunakan proxy yang nama hostnya diselesaikan ke alamat pribadi |282| CLI `/login`: `Gateway login requires a direct connection and does not support connecting through an HTTP proxy` | `HTTPS_PROXY` atau `HTTP_PROXY` berlaku untuk host gateway dan nama host proxy diselesaikan ke alamat publik. Proxy yang nama hostnya hanya diselesaikan ke alamat pribadi diizinkan dan tidak memicu kesalahan ini | Tambahkan host gateway ke `NO_PROXY` pada mesin pengembang sehingga koneksi langsung, atau gunakan proxy yang nama hostnya diselesaikan ke alamat pribadi |

281| CLI `/login`: `Could not resolve gateway host <host>` | Mesin tidak dapat menyelesaikan nama DNS internal gateway, biasanya karena tidak berada di jaringan korporat | Minta pengembang terhubung ke jaringan atau VPN Anda, lalu coba ulang `/login` |283| CLI `/login`: `Could not resolve gateway host <host>` | Mesin tidak dapat menyelesaikan nama DNS internal gateway, biasanya karena tidak berada di jaringan korporat | Minta pengembang terhubung ke jaringan atau VPN Anda, lalu coba ulang `/login` |

282| Boot keluar dengan kesalahan validasi konfigurasi yang menamai `store.postgres_url` | Tidak ada Postgres yang dikonfigurasi; gateway memerlukan Postgres | Atur `store.postgres_url`. Untuk pengembangan lokal, gunakan kontainer sekali pakai: `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`. |284| Boot keluar dengan kesalahan validasi konfigurasi yang menamai `store.postgres_url` | Tidak ada Postgres yang dikonfigurasi; gateway memerlukan Postgres | Atur `store.postgres_url`. Untuk pengembangan lokal, gunakan kontainer sekali pakai: `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`. |

283| Boot keluar: `requires the native binary` | Berjalan di bawah Node bukan biner asli | Instal Claude Code dengan salah satu [metode instalasi mandiri](/id/setup) |285| Boot keluar: `requires the native binary` | Berjalan di bawah Node bukan biner asli | Instal Claude Code dengan salah satu [metode instalasi mandiri](/docs/id/setup) |

284| Boot keluar dengan kesalahan penemuan OIDC setelah `config.load` | `oidc.issuer` tidak dapat dijangkau, atau rantai TLS tidak dipercaya | Periksa issuer dapat dijangkau dari pod dan melayani `/.well-known/openid-configuration`. Atur `ca_cert_pem` untuk PKI pribadi. |286| Boot keluar dengan kesalahan penemuan OIDC setelah `config.load` | `oidc.issuer` tidak dapat dijangkau, atau rantai TLS tidak dipercaya | Periksa issuer dapat dijangkau dari pod dan melayani `/.well-known/openid-configuration`. Atur `ca_cert_pem` untuk PKI pribadi. |

285| Boot keluar dengan kesalahan izin Postgres | Peran aplikasi kekurangan `CREATE TABLE` | Buat skema sebelumnya dengan peran admin dan berikan DML ke peran aplikasi, atau berikan DDL sementara untuk boot yang menerapkan migrasi baru |287| Boot keluar dengan kesalahan izin Postgres | Peran aplikasi kekurangan `CREATE TABLE` | Buat skema sebelumnya dengan peran admin dan berikan DML ke peran aplikasi, atau berikan DDL sementara untuk boot yang menerapkan migrasi baru |

286| `/oauth/callback` menampilkan "Sign-in could not be completed" | Domain email ditolak, validasi id\_token gagal, atau `email_verified` secara eksplisit `false`, yang gateway selalu tolak tanpa override | Periksa `allowed_email_domains` dan bahwa IdP mengembalikan klaim `email` yang diverifikasi. Untuk `email_verified: false`, perbaiki verifikasi sisi IdP. Jika IdP Anda memancarkan email di bawah nama klaim berbeda, atur `oidc.email_claim`. |288| `/oauth/callback` menampilkan "Sign-in could not be completed" | Domain email ditolak, validasi id\_token gagal, atau `email_verified` secara eksplisit `false`, yang gateway selalu tolak tanpa override | Periksa `allowed_email_domains` dan bahwa IdP mengembalikan klaim `email` yang diverifikasi. Untuk `email_verified: false`, perbaiki verifikasi sisi IdP. Jika IdP Anda memancarkan email di bawah nama klaim berbeda, atur `oidc.email_claim`. |


293| Masuk selesai di IdP tetapi callback gagal, dengan kesalahan CSP di Chrome atau "this sign-in link has expired" di Safari | IdP mengembalikan kode melalui `response_mode=form_post`, yang secara otomatis mengirimkannya lintas asal melalui POST ke `/oauth/callback`. Chrome memblokir itu di bawah CSP ketat; Safari memungkinkan pengiriman tetapi callback hanya membaca string kueri. | Pastikan IdP Anda menghormati `response_mode=query`, yang gateway minta secara eksplisit sehingga callback adalah pengalihan biasa |295| Masuk selesai di IdP tetapi callback gagal, dengan kesalahan CSP di Chrome atau "this sign-in link has expired" di Safari | IdP mengembalikan kode melalui `response_mode=form_post`, yang secara otomatis mengirimkannya lintas asal melalui POST ke `/oauth/callback`. Chrome memblokir itu di bawah CSP ketat; Safari memungkinkan pengiriman tetapi callback hanya membaca string kueri. | Pastikan IdP Anda menghormati `response_mode=query`, yang gateway minta secara eksplisit sehingga callback adalah pengalihan biasa |

294| Login bekerja secara lokal tetapi gagal di belakang ALB | `public_url` tidak diatur, jadi IdP mendapat asal `http://` dalam sebagai `redirect_uri` | Atur `listen.public_url` ke asal `https://` eksternal |296| Login bekerja secara lokal tetapi gagal di belakang ALB | `public_url` tidak diatur, jadi IdP mendapat asal `http://` dalam sebagai `redirect_uri` | Atur `listen.public_url` ke asal `https://` eksternal |

295| Pengembang melihat prompt kepercayaan berulang kali | Sertifikat TLS berputar per replika atau per permintaan | Gunakan sertifikat stabil di ingress, atau hentikan TLS sekali dan jalankan replika melalui HTTP biasa secara internal |297| Pengembang melihat prompt kepercayaan berulang kali | Sertifikat TLS berputar per replika atau per permintaan | Gunakan sertifikat stabil di ingress, atau hentikan TLS sekali dan jalankan replika melalui HTTP biasa secara internal |

296| CLI `/login`: "Could not verify the gateway's TLS certificate" atau `SELF_SIGNED_CERT_IN_CHAIN` | Rantai TLS gateway ditandatangani oleh CA pribadi bukan dalam toko kepercayaan host CLI | Claude Code membaca toko kepercayaan OS secara default pada biner asli dan pada Node 22.15 atau lebih baru; [`CLAUDE_CODE_CERT_STORE`](/id/network-config#ca-certificate-store) mengontrol perilaku ini. Jika CA diinstal dalam toko kepercayaan OS, pastikan pengembang berada di runtime saat ini. Jika tidak atur `NODE_EXTRA_CA_CERTS` ke PEM sertifikat CA sebelum meluncurkan. Prompt sidik jari koneksi pertama masih berlaku. |298| CLI `/login`: "Could not verify the gateway's TLS certificate" atau `SELF_SIGNED_CERT_IN_CHAIN` | Rantai TLS gateway ditandatangani oleh CA pribadi bukan dalam toko kepercayaan host CLI | Claude Code membaca toko kepercayaan OS secara default pada biner asli dan pada Node 22.15 atau lebih baru; [`CLAUDE_CODE_CERT_STORE`](/docs/id/network-config#ca-certificate-store) mengontrol perilaku ini. Jika CA diinstal dalam toko kepercayaan OS, pastikan pengembang berada di runtime saat ini. Jika tidak atur `NODE_EXTRA_CA_CERTS` ke PEM sertifikat CA sebelum meluncurkan. Prompt sidik jari koneksi pertama masih berlaku. |

297 299 

298<h2 id="related">300<h2 id="related">

299 Terkait301 Terkait

300</h2>302</h2>

301 303 

302* [Gambaran umum gateway aplikasi Claude](/id/claude-apps-gateway): quickstart dan koneksi pengembang304* [Gambaran umum gateway aplikasi Claude](/docs/id/claude-apps-gateway): quickstart dan koneksi pengembang

303* [Referensi konfigurasi](/id/claude-apps-gateway-config): setiap opsi `gateway.yaml`305* [Referensi konfigurasi](/docs/id/claude-apps-gateway-config): setiap opsi `gateway.yaml`

hooks.md +63 −63

Details

7> Referensi untuk event hook Claude Code, skema konfigurasi, format JSON input/output, kode keluar, hooks asinkron, hooks HTTP, prompt hooks, dan MCP tool hooks.7> Referensi untuk event hook Claude Code, skema konfigurasi, format JSON input/output, kode keluar, hooks asinkron, hooks HTTP, prompt hooks, dan MCP tool hooks.

8 8 

9<Tip>9<Tip>

10 Untuk panduan quickstart dengan contoh, lihat [Otomatisasi alur kerja dengan hooks](/id/hooks-guide).10 Untuk panduan quickstart dengan contoh, lihat [Otomatisasi alur kerja dengan hooks](/docs/id/hooks-guide).

11</Tip>11</Tip>

12 12 

13Hooks adalah perintah shell yang ditentukan pengguna, endpoint HTTP, atau prompt LLM yang dijalankan secara otomatis pada titik-titik tertentu dalam siklus hidup Claude Code. Gunakan referensi ini untuk mencari skema event, opsi konfigurasi, format JSON input/output, dan fitur lanjutan seperti async hooks, HTTP hooks, dan MCP tool hooks. Jika Anda menyiapkan hooks untuk pertama kalinya, mulai dengan [panduan](/id/hooks-guide) sebagai gantinya.13Hooks adalah perintah shell yang ditentukan pengguna, endpoint HTTP, atau prompt LLM yang dijalankan secara otomatis pada titik-titik tertentu dalam siklus hidup Claude Code. Gunakan referensi ini untuk mencari skema event, opsi konfigurasi, format JSON input/output, dan fitur lanjutan seperti async hooks, HTTP hooks, dan MCP tool hooks. Jika Anda menyiapkan hooks untuk pertama kalinya, mulai dengan [panduan](/docs/id/hooks-guide) sebagai gantinya.

14 14 

15<h2 id="hook-lifecycle">15<h2 id="hook-lifecycle">

16 Siklus hidup hook16 Siklus hidup hook


52| `TaskCompleted` | When a task is being marked as completed |52| `TaskCompleted` | When a task is being marked as completed |

53| `Stop` | When Claude finishes responding |53| `Stop` | When Claude finishes responding |

54| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |54| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |

55| `TeammateIdle` | When an [agent team](/en/agent-teams) teammate is about to go idle |55| `TeammateIdle` | When an [agent team](/docs/en/agent-teams) teammate is about to go idle |

56| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |56| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |

57| `ConfigChange` | When a configuration file changes during a session |57| `ConfigChange` | When a configuration file changes during a session |

58| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |58| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |

59| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |59| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |

60| `WorktreeCreate` | When a worktree is being created via `--worktree` or `isolation: "worktree"`. Replaces default git behavior |60| `WorktreeCreate` | When a worktree is being created via `--worktree`, `isolation: "worktree"`, or for a background session. Replaces default git behavior |

61| `WorktreeRemove` | When a worktree is being removed, either at session exit or when a subagent finishes |61| `WorktreeRemove` | When a worktree is being removed at session exit, when a subagent finishes, or when you delete a background session |

62| `PreCompact` | Before context compaction |62| `PreCompact` | Before context compaction |

63| `PostCompact` | After context compaction completes |63| `PostCompact` | After context compaction completes |

64| `Elicitation` | When an MCP server requests user input during a tool call |64| `Elicitation` | When an MCP server requests user input during a tool call |


147 }147 }

148 ```148 ```

149 149 

150 Jika perintah telah menjadi varian `rm` yang lebih aman seperti `rm file.txt`, skrip akan mencapai `exit 0` sebagai gantinya. Kode keluar 0 tanpa output berarti hook tidak memiliki keputusan untuk dilaporkan, jadi pemanggilan tool berlanjut melalui [alur izin](/id/permissions) normal. Hook dapat menolak pemanggilan, tetapi tetap diam tidak menyetujuinya.150 Jika perintah telah menjadi varian `rm` yang lebih aman seperti `rm file.txt`, skrip akan mencapai `exit 0` sebagai gantinya. Kode keluar 0 tanpa output berarti hook tidak memiliki keputusan untuk dilaporkan, jadi pemanggilan tool berlanjut melalui [alur izin](/docs/id/permissions) normal. Hook dapat menolak pemanggilan, tetapi tetap diam tidak menyetujuinya.

151 </Step>151 </Step>

152 152 

153 <Step title="Claude Code bertindak atas hasil">153 <Step title="Claude Code bertindak atas hasil">


185| `.claude/settings.json` | Proyek tunggal | Ya, dapat dikomit ke repo |185| `.claude/settings.json` | Proyek tunggal | Ya, dapat dikomit ke repo |

186| `.claude/settings.local.json` | Proyek tunggal | Tidak, gitignored saat Claude Code membuatnya |186| `.claude/settings.local.json` | Proyek tunggal | Tidak, gitignored saat Claude Code membuatnya |

187| Pengaturan kebijakan terkelola | Seluruh organisasi | Ya, dikendalikan admin |187| Pengaturan kebijakan terkelola | Seluruh organisasi | Ya, dikendalikan admin |

188| [Plugin](/id/plugins) `hooks/hooks.json` | Ketika plugin diaktifkan | Ya, dibundel dengan plugin |188| [Plugin](/docs/id/plugins) `hooks/hooks.json` | Ketika plugin diaktifkan | Ya, dibundel dengan plugin |

189| [Skill](/id/skills) atau [agent](/id/sub-agents) frontmatter | Saat komponen aktif | Ya, didefinisikan dalam file komponen |189| [Skill](/docs/id/skills) atau [agent](/docs/id/sub-agents) frontmatter | Saat komponen aktif | Ya, didefinisikan dalam file komponen |

190 190 

191Untuk detail tentang resolusi file pengaturan, lihat [settings](/id/settings). Administrator enterprise dapat menggunakan `allowManagedHooksOnly` untuk memblokir hooks pengguna, proyek, dan plugin. Hooks dari plugins yang dipaksa-aktifkan dalam pengaturan terkelola `enabledPlugins` dikecualikan, jadi administrator dapat mendistribusikan hooks yang telah diverifikasi melalui marketplace organisasi. Lihat [Hook configuration](/id/settings#hook-configuration).191Untuk detail tentang resolusi file pengaturan, lihat [settings](/docs/id/settings). Administrator enterprise dapat menggunakan `allowManagedHooksOnly` untuk memblokir hooks pengguna, proyek, dan plugin. Hooks dari plugins yang dipaksa-aktifkan dalam pengaturan terkelola `enabledPlugins` dikecualikan, jadi administrator dapat mendistribusikan hooks yang telah diverifikasi melalui marketplace organisasi. Lihat [Hook configuration](/docs/id/settings#hook-configuration).

192 192 

193<h3 id="matcher-patterns">193<h3 id="matcher-patterns">

194 Pola matcher194 Pola matcher


258 258 

259`UserPromptSubmit`, `PostToolBatch`, `Stop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`, `WorktreeCreate`, `WorktreeRemove`, `MessageDisplay`, dan `CwdChanged` tidak mendukung matchers dan selalu dijalankan pada setiap kemunculan. Jika Anda menambahkan bidang `matcher` ke event ini, itu akan diabaikan secara diam-diam.259`UserPromptSubmit`, `PostToolBatch`, `Stop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`, `WorktreeCreate`, `WorktreeRemove`, `MessageDisplay`, dan `CwdChanged` tidak mendukung matchers dan selalu dijalankan pada setiap kemunculan. Jika Anda menambahkan bidang `matcher` ke event ini, itu akan diabaikan secara diam-diam.

260 260 

261Untuk tool events, Anda dapat memfilter lebih sempit dengan menetapkan bidang [`if`](#common-fields) pada handler hook individual. `if` menggunakan [sintaks aturan izin](/id/permissions) untuk mencocokkan terhadap nama tool dan argumen bersama-sama, jadi `"Bash(git *)"` dijalankan ketika subperintah apa pun dari input Bash cocok dengan `git *` dan `"Edit(*.ts)"` dijalankan hanya untuk file TypeScript.261Untuk tool events, Anda dapat memfilter lebih sempit dengan menetapkan bidang [`if`](#common-fields) pada handler hook individual. `if` menggunakan [sintaks aturan izin](/docs/id/permissions) untuk mencocokkan terhadap nama tool dan argumen bersama-sama, jadi `"Bash(git *)"` dijalankan ketika subperintah apa pun dari input Bash cocok dengan `git *` dan `"Edit(*.ts)"` dijalankan hanya untuk file TypeScript.

262 262 

263<h4 id="match-mcp-tools">263<h4 id="match-mcp-tools">

264 Cocokkan MCP tools264 Cocokkan MCP tools

265</h4>265</h4>

266 266 

267Tool server [MCP](/id/mcp) muncul sebagai tool reguler dalam tool events (`PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied`), jadi Anda dapat mencocokkannya dengan cara yang sama seperti Anda mencocokkan nama tool lainnya.267Tool server [MCP](/docs/id/mcp) muncul sebagai tool reguler dalam tool events (`PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied`), jadi Anda dapat mencocokkannya dengan cara yang sama seperti Anda mencocokkan nama tool lainnya.

268 268 

269MCP tools mengikuti pola penamaan `mcp__<server>__<tool>`, misalnya:269MCP tools mengikuti pola penamaan `mcp__<server>__<tool>`, misalnya:

270 270 


280 280 

281Tanda hubung dalam set exact-match memerlukan Claude Code v2.1.195 atau lebih baru. Pada versi sebelumnya, awalan bare dengan tanda hubung seperti `mcp__brave-search` dievaluasi sebagai ekspresi reguler yang tidak berlabuh dan cocok dengan setiap tool dari server itu. Bentuk `mcp__brave-search__.*` bekerja pada setiap versi.281Tanda hubung dalam set exact-match memerlukan Claude Code v2.1.195 atau lebih baru. Pada versi sebelumnya, awalan bare dengan tanda hubung seperti `mcp__brave-search` dievaluasi sebagai ekspresi reguler yang tidak berlabuh dan cocok dengan setiap tool dari server itu. Bentuk `mcp__brave-search__.*` bekerja pada setiap versi.

282 282 

283Tools dari [plugin-bundled MCP server](/id/mcp#plugin-provided-mcp-servers) menggunakan segmen server yang dibatasi yang mencakup nama plugin: `mcp__plugin_<plugin-name>_<server-name>__<tool>`. Matcher yang ditulis terhadap kunci server bare tidak pernah dijalankan untuk tools ini. Untuk plugin bernama `my-plugin` yang membundel server di bawah kunci `db`, tool `query` muncul sebagai `mcp__plugin_my-plugin_db__query`, jadi matcher untuk setiap tool dari server itu adalah `mcp__plugin_my-plugin_db__.*`. Gunakan nama tool yang dibatasi yang sama dalam bidang [`if`](#common-fields) handler. Lihat [Plugin-provided MCP servers](/id/mcp#plugin-provided-mcp-servers) untuk bagaimana nama yang dibatasi dibangun.283Tools dari [plugin-bundled MCP server](/docs/id/mcp#plugin-provided-mcp-servers) menggunakan segmen server yang dibatasi yang mencakup nama plugin: `mcp__plugin_<plugin-name>_<server-name>__<tool>`. Matcher yang ditulis terhadap kunci server bare tidak pernah dijalankan untuk tools ini. Untuk plugin bernama `my-plugin` yang membundel server di bawah kunci `db`, tool `query` muncul sebagai `mcp__plugin_my-plugin_db__query`, jadi matcher untuk setiap tool dari server itu adalah `mcp__plugin_my-plugin_db__.*`. Gunakan nama tool yang dibatasi yang sama dalam bidang [`if`](#common-fields) handler. Lihat [Plugin-provided MCP servers](/docs/id/mcp#plugin-provided-mcp-servers) untuk bagaimana nama yang dibatasi dibangun.

284 284 

285Contoh ini mencatat semua operasi memory server dan memvalidasi operasi write dari server MCP apa pun:285Contoh ini mencatat semua operasi memory server dan memvalidasi operasi write dari server MCP apa pun:

286 286 


319 319 

320* **[Command hooks](#command-hook-fields)** (`type: "command"`): jalankan perintah shell. Skrip Anda menerima [JSON input](#hook-input-and-output) event di stdin dan mengkomunikasikan hasil kembali melalui kode keluar dan stdout.320* **[Command hooks](#command-hook-fields)** (`type: "command"`): jalankan perintah shell. Skrip Anda menerima [JSON input](#hook-input-and-output) event di stdin dan mengkomunikasikan hasil kembali melalui kode keluar dan stdout.

321* **[HTTP hooks](#http-hook-fields)** (`type: "http"`): kirimkan JSON input event sebagai permintaan HTTP POST ke URL. Endpoint mengkomunikasikan hasil kembali melalui badan respons menggunakan [format JSON output](#json-output) yang sama seperti command hooks.321* **[HTTP hooks](#http-hook-fields)** (`type: "http"`): kirimkan JSON input event sebagai permintaan HTTP POST ke URL. Endpoint mengkomunikasikan hasil kembali melalui badan respons menggunakan [format JSON output](#json-output) yang sama seperti command hooks.

322* **[MCP tool hooks](#mcp-tool-hook-fields)** (`type: "mcp_tool"`): panggil tool pada [MCP server](/id/mcp) yang sudah terhubung. Output teks tool diperlakukan seperti command-hook stdout.322* **[MCP tool hooks](#mcp-tool-hook-fields)** (`type: "mcp_tool"`): panggil tool pada [MCP server](/docs/id/mcp) yang sudah terhubung. Output teks tool diperlakukan seperti command-hook stdout.

323* **[Prompt hooks](#prompt-and-agent-hook-fields)** (`type: "prompt"`): kirimkan prompt ke model Claude untuk evaluasi single-turn. Model mengembalikan keputusan yes/no sebagai JSON. Lihat [Prompt-based hooks](#prompt-based-hooks).323* **[Prompt hooks](#prompt-and-agent-hook-fields)** (`type: "prompt"`): kirimkan prompt ke model Claude untuk evaluasi single-turn. Model mengembalikan keputusan yes/no sebagai JSON. Lihat [Prompt-based hooks](#prompt-based-hooks).

324* **[Agent hooks](#prompt-and-agent-hook-fields)** (`type: "agent"`): spawn subagent yang dapat menggunakan tools seperti Read, Grep, dan Glob untuk memverifikasi kondisi sebelum mengembalikan keputusan. Agent hooks adalah eksperimental dan mungkin berubah. Lihat [Agent-based hooks](#agent-based-hooks).324* **[Agent hooks](#prompt-and-agent-hook-fields)** (`type: "agent"`): spawn subagent yang dapat menggunakan tools seperti Read, Grep, dan Glob untuk memverifikasi kondisi sebelum mengembalikan keputusan. Agent hooks adalah eksperimental dan mungkin berubah. Lihat [Agent-based hooks](#agent-based-hooks).

325 325 

326Semua matching hooks dijalankan secara paralel, dan handler identik dideduplikasi secara otomatis. Command hooks dideduplikasi berdasarkan string perintah dan `args`, dan HTTP hooks dideduplikasi berdasarkan URL.326Semua matching hooks dijalankan secara paralel, dan handler identik dideduplikasi secara otomatis. Command hooks dideduplikasi berdasarkan string perintah dan `args`, dan HTTP hooks dideduplikasi berdasarkan URL.

327 327 

328Handlers dijalankan di direktori saat ini dengan lingkungan Claude Code. Variabel lingkungan `$CLAUDE_CODE_REMOTE` diatur ke `"true"` di lingkungan web jarak jauh dan tidak diatur di CLI lokal. {/* min-version: 2.1.199 */}Mulai dari v2.1.199, [`$CLAUDE_CODE_BRIDGE_SESSION_ID`](/id/env-vars) diatur ke [Remote Control](/id/remote-control) session ID saat sesi lokal memiliki koneksi Remote Control yang aktif.328Handlers dijalankan di direktori saat ini dengan lingkungan Claude Code. Variabel lingkungan `$CLAUDE_CODE_REMOTE` diatur ke `"true"` di lingkungan web jarak jauh dan tidak diatur di CLI lokal. {/* min-version: 2.1.199 */}Mulai dari v2.1.199, [`$CLAUDE_CODE_BRIDGE_SESSION_ID`](/docs/id/env-vars) diatur ke [Remote Control](/docs/id/remote-control) session ID saat sesi lokal memiliki koneksi Remote Control yang aktif.

329 329 

330<h4 id="common-fields">330<h4 id="common-fields">

331 Bidang umum331 Bidang umum


336| Bidang | Diperlukan | Deskripsi |336| Bidang | Diperlukan | Deskripsi |

337| :-------------- | :--------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |337| :-------------- | :--------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

338| `type` | ya | `"command"`, `"http"`, `"mcp_tool"`, `"prompt"`, atau `"agent"` |338| `type` | ya | `"command"`, `"http"`, `"mcp_tool"`, `"prompt"`, atau `"agent"` |

339| `if` | tidak | Sintaks aturan izin untuk memfilter kapan hook ini dijalankan, seperti `"Bash(git *)"` atau `"Edit(*.ts)"`. Hook command hanya dijalankan jika pemanggilan tool cocok dengan pola. Lihat tabel [Bash matching](#bash-if-matching) di bawah untuk bagaimana pola Bash dievaluasi terhadap subperintah, `$()`, dan backticks. Hanya dievaluasi pada tool events: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, dan `PermissionDenied`. Pada event lain, hook dengan `if` yang ditetapkan tidak akan pernah dijalankan. Menggunakan sintaks yang sama seperti [aturan izin](/id/permissions) |339| `if` | tidak | Sintaks aturan izin untuk memfilter kapan hook ini dijalankan, seperti `"Bash(git *)"` atau `"Edit(*.ts)"`. Hook command hanya dijalankan jika pemanggilan tool cocok dengan pola. Lihat tabel [Bash matching](#bash-if-matching) di bawah untuk bagaimana pola Bash dievaluasi terhadap subperintah, `$()`, dan backticks. Hanya dievaluasi pada tool events: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, dan `PermissionDenied`. Pada event lain, hook dengan `if` yang ditetapkan tidak akan pernah dijalankan. Menggunakan sintaks yang sama seperti [aturan izin](/docs/id/permissions) |

340| `timeout` | tidak | Detik sebelum membatalkan. Default: 600 untuk `command`, `http`, dan `mcp_tool`; 30 untuk `prompt`; 60 untuk `agent`. [`UserPromptSubmit`](#userpromptsubmit) menurunkan default `command`, `http`, dan `mcp_tool` menjadi 30, dan [`MessageDisplay`](#messagedisplay) menurunkannya menjadi 10 |340| `timeout` | tidak | Detik sebelum membatalkan. Default: 600 untuk `command`, `http`, dan `mcp_tool`; 30 untuk `prompt`; 60 untuk `agent`. [`UserPromptSubmit`](#userpromptsubmit) menurunkan default `command`, `http`, dan `mcp_tool` menjadi 30, dan [`MessageDisplay`](#messagedisplay) menurunkannya menjadi 10 |

341| `statusMessage` | tidak | Pesan spinner kustom ditampilkan saat hook dijalankan |341| `statusMessage` | tidak | Pesan spinner kustom ditampilkan saat hook dijalankan |

342| `once` | tidak | Jika `true`, dijalankan hanya sekali per sesi kemudian dihapus. Hanya dihormati untuk hooks yang dideklarasikan dalam [skill frontmatter](#hooks-in-skills-and-agents); diabaikan dalam file pengaturan dan agent frontmatter |342| `once` | tidak | Jika `true`, dijalankan hanya sekali per sesi kemudian dihapus. Hanya dihormati untuk hooks yang dideklarasikan dalam [skill frontmatter](#hooks-in-skills-and-agents); diabaikan dalam file pengaturan dan agent frontmatter |


353| `Bash(rm *)` | `echo $(date)` | tidak | tidak ada subperintah yang cocok dengan `rm *` |353| `Bash(rm *)` | `echo $(date)` | tidak | tidak ada subperintah yang cocok dengan `rm *` |

354| `Bash(git push *)` | `echo $(date)` | ya | pola yang menentukan lebih dari nama perintah menjalankan hook bagaimanapun pada `$()`, backticks, atau `$VAR` |354| `Bash(git push *)` | `echo $(date)` | ya | pola yang menentukan lebih dari nama perintah menjalankan hook bagaimanapun pada `$()`, backticks, atau `$VAR` |

355 355 

356Filter juga gagal terbuka, menjalankan hook Anda terlepas dari pola, ketika perintah Bash tidak dapat diurai. Karena filter `if` adalah best-effort, gunakan [sistem izin](/id/permissions) daripada hook untuk memberlakukan allow atau deny yang keras.356Filter juga gagal terbuka, menjalankan hook Anda terlepas dari pola, ketika perintah Bash tidak dapat diurai. Karena filter `if` adalah best-effort, gunakan [sistem izin](/docs/id/permissions) daripada hook untuk memberlakukan allow atau deny yang keras.

357 357 

358<h4 id="command-hook-fields">358<h4 id="command-hook-fields">

359 Bidang command hook359 Bidang command hook


406 406 

407Kedua form mendukung [path placeholders](#reference-scripts-by-path) yang sama, dan keduanya mengekspornya sebagai variabel lingkungan `CLAUDE_PROJECT_DIR`, `CLAUDE_PLUGIN_ROOT`, dan `CLAUDE_PLUGIN_DATA` pada proses yang di-spawn, jadi skrip dapat membaca `process.env.CLAUDE_PLUGIN_ROOT` terlepas dari bagaimana itu diluncurkan.407Kedua form mendukung [path placeholders](#reference-scripts-by-path) yang sama, dan keduanya mengekspornya sebagai variabel lingkungan `CLAUDE_PROJECT_DIR`, `CLAUDE_PLUGIN_ROOT`, dan `CLAUDE_PLUGIN_DATA` pada proses yang di-spawn, jadi skrip dapat membaca `process.env.CLAUDE_PLUGIN_ROOT` terlepas dari bagaimana itu diluncurkan.

408 408 

409Plugin hooks juga mensubstitusi nilai [`${user_config.*}`](/id/plugins-reference#user-configuration), dalam exec form saja: nilai disubstitusi ke dalam `command` dan ke dalam setiap elemen `args` sebagai string biasa, jadi tidak ada shell yang mem-parse ulangnya.409Plugin hooks juga mensubstitusi nilai [`${user_config.*}`](/docs/id/plugins-reference#user-configuration), dalam exec form saja: nilai disubstitusi ke dalam `command` dan ke dalam setiap elemen `args` sebagai string biasa, jadi tidak ada shell yang mem-parse ulangnya.

410 410 

411Hook plugin bentuk shell yang `command`-nya mereferensikan `${user_config.*}` gagal dengan [error](/id/errors#plugin-command-references-user-config) daripada menjalankan. Untuk menggunakan nilai opsi dari hook bentuk shell, baca variabel lingkungan `$CLAUDE_PLUGIN_OPTION_<KEY>`, seperti `$CLAUDE_PLUGIN_OPTION_WEBHOOK_URL` untuk opsi `webhook_url`, atau atur `args` untuk beralih hook ke exec form. Sebelum v2.1.207, hook plugin bentuk shell juga mensubstitusi `${user_config.*}`.411Hook plugin bentuk shell yang `command`-nya mereferensikan `${user_config.*}` gagal dengan [error](/docs/id/errors#plugin-command-references-user-config) daripada menjalankan. Untuk menggunakan nilai opsi dari hook bentuk shell, baca variabel lingkungan `$CLAUDE_PLUGIN_OPTION_<KEY>`, seperti `$CLAUDE_PLUGIN_OPTION_WEBHOOK_URL` untuk opsi `webhook_url`, atau atur `args` untuk beralih hook ke exec form. Sebelum v2.1.207, hook plugin bentuk shell juga mensubstitusi `${user_config.*}`.

412 412 

413<Note>413<Note>

414 Dalam exec form, `command` adalah nama executable atau path saja. Jika `command` adalah nama bare tanpa path separator dan berisi whitespace bersama `args`, Claude Code mencatat warning karena spawn akan gagal: tidak ada executable bernama `node script.js`. Pindahkan token ekstra ke dalam `args`. Path absolut dengan spasi, seperti `C:\Program Files\nodejs\node.exe`, adalah executable tunggal yang valid dan tidak memicu warning.414 Dalam exec form, `command` adalah nama executable atau path saja. Jika `command` adalah nama bare tanpa path separator dan berisi whitespace bersama `args`, Claude Code mencatat warning karena spawn akan gagal: tidak ada executable bernama `node script.js`. Pindahkan token ekstra ke dalam `args`. Path absolut dengan spasi, seperti `C:\Program Files\nodejs\node.exe`, adalah executable tunggal yang valid dan tidak memicu warning.


463 463 

464| Bidang | Diperlukan | Deskripsi |464| Bidang | Diperlukan | Deskripsi |

465| :------- | :--------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |465| :------- | :--------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

466| `server` | ya | Nama server MCP yang dikonfigurasi. Untuk [plugin-bundled server](/id/mcp#plugin-provided-mcp-servers), ini adalah nama yang dibatasi `plugin:<plugin-name>:<server-name>`, seperti `plugin:my-plugin:db`, bukan kunci server bare. Server harus sudah terhubung; hook tidak pernah memicu alur OAuth atau koneksi |466| `server` | ya | Nama server MCP yang dikonfigurasi. Untuk [plugin-bundled server](/docs/id/mcp#plugin-provided-mcp-servers), ini adalah nama yang dibatasi `plugin:<plugin-name>:<server-name>`, seperti `plugin:my-plugin:db`, bukan kunci server bare. Server harus sudah terhubung; hook tidak pernah memicu alur OAuth atau koneksi |

467| `tool` | ya | Nama tool untuk dipanggil di server itu |467| `tool` | ya | Nama tool untuk dipanggil di server itu |

468| `input` | tidak | Argumen yang dilewatkan ke tool. Nilai string mendukung substitusi `${path}` dari [JSON input](#hook-input-and-output) hook, seperti `"${tool_input.file_path}"` |468| `input` | tidak | Argumen yang dilewatkan ke tool. Nilai string mendukung substitusi `${path}` dari [JSON input](#hook-input-and-output) hook, seperti `"${tool_input.file_path}"` |

469 469 


510 510 

511Gunakan placeholders ini untuk mereferensikan skrip hook relatif terhadap akar proyek atau plugin, terlepas dari direktori kerja saat hook dijalankan:511Gunakan placeholders ini untuk mereferensikan skrip hook relatif terhadap akar proyek atau plugin, terlepas dari direktori kerja saat hook dijalankan:

512 512 

513* `${CLAUDE_PROJECT_DIR}`: akar proyek. Claude Code juga menetapkan variabel ini dalam lingkungan [stdio MCP servers](/id/mcp#option-3-add-a-local-stdio-server) dan plugin LSP servers.513* `${CLAUDE_PROJECT_DIR}`: akar proyek. Claude Code juga menetapkan variabel ini dalam lingkungan [stdio MCP servers](/docs/id/mcp#option-3-add-a-local-stdio-server) dan plugin LSP servers.

514* `${CLAUDE_PLUGIN_ROOT}`: direktori instalasi plugin, untuk skrip yang dibundel dengan [plugin](/id/plugins). Berubah pada setiap pembaruan plugin.514* `${CLAUDE_PLUGIN_ROOT}`: direktori instalasi plugin, untuk skrip yang dibundel dengan [plugin](/docs/id/plugins). Berubah pada setiap pembaruan plugin.

515* `${CLAUDE_PLUGIN_DATA}`: [direktori data persisten](/id/plugins-reference#persistent-data-directory) plugin, untuk dependensi dan status yang harus bertahan pembaruan plugin.515* `${CLAUDE_PLUGIN_DATA}`: [direktori data persisten](/docs/id/plugins-reference#persistent-data-directory) plugin, untuk dependensi dan status yang harus bertahan pembaruan plugin.

516 516 

517Lebih suka [exec form](#exec-form-and-shell-form) untuk hook apa pun yang mereferensikan path placeholder. Exec form melewatkan setiap elemen `args` sebagai satu argumen tanpa tokenisasi shell, jadi paths dengan spasi atau karakter khusus tidak memerlukan quoting. Dalam shell form, bungkus setiap placeholder dalam tanda kutip ganda.517Lebih suka [exec form](#exec-form-and-shell-form) untuk hook apa pun yang mereferensikan path placeholder. Exec form melewatkan setiap elemen `args` sebagai satu argumen tanpa tokenisasi shell, jadi paths dengan spasi atau karakter khusus tidak memerlukan quoting. Dalam shell form, bungkus setiap placeholder dalam tanda kutip ganda.

518 518 


566 }566 }

567 ```567 ```

568 568 

569 Lihat [plugin components reference](/id/plugins-reference#hooks) untuk detail tentang membuat plugin hooks.569 Lihat [plugin components reference](/docs/id/plugins-reference#hooks) untuk detail tentang membuat plugin hooks.

570 </Tab>570 </Tab>

571</Tabs>571</Tabs>

572 572 


574 Hooks dalam skills dan agents574 Hooks dalam skills dan agents

575</h3>575</h3>

576 576 

577Selain file pengaturan dan plugin, hooks dapat didefinisikan langsung dalam [skills](/id/skills) dan [subagents](/id/sub-agents) menggunakan frontmatter. Hooks ini dibatasi pada siklus hidup komponen dan hanya dijalankan ketika komponen itu aktif.577Selain file pengaturan dan plugin, hooks dapat didefinisikan langsung dalam [skills](/docs/id/skills) dan [subagents](/docs/id/sub-agents) menggunakan frontmatter. Hooks ini dibatasi pada siklus hidup komponen dan hanya dijalankan ketika komponen itu aktif.

578 578 

579Semua hook events didukung. Untuk subagents, `Stop` hooks secara otomatis dikonversi ke `SubagentStop` karena itu adalah event yang dijalankan ketika subagent selesai.579Semua hook events didukung. Untuk subagents, `Stop` hooks secara otomatis dikonversi ke `SubagentStop` karena itu adalah event yang dijalankan ketika subagent selesai.

580 580 


643| Bidang | Deskripsi |643| Bidang | Deskripsi |

644| :---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |644| :---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

645| `session_id` | Pengenal sesi saat ini |645| `session_id` | Pengenal sesi saat ini |

646| `prompt_id` | UUID yang mengidentifikasi prompt pengguna yang sedang diproses. Cocok dengan atribut [`prompt.id` pada events OpenTelemetry](/id/monitoring-usage#event-correlation-attributes), sehingga Anda dapat menghubungkan output hook dengan telemetri untuk satu prompt. Tidak ada sampai input pengguna pertama. {/* min-version: 2.1.196 */}Memerlukan Claude Code v2.1.196 atau lebih baru |646| `prompt_id` | UUID yang mengidentifikasi prompt pengguna yang sedang diproses. Cocok dengan atribut [`prompt.id` pada events OpenTelemetry](/docs/id/monitoring-usage#event-correlation-attributes), sehingga Anda dapat menghubungkan output hook dengan telemetri untuk satu prompt. Tidak ada sampai input pengguna pertama. {/* min-version: 2.1.196 */}Memerlukan Claude Code v2.1.196 atau lebih baru |

647| `transcript_path` | Path ke JSON percakapan. File transkrip ditulis secara asinkron dan mungkin tertinggal dari percakapan dalam memori, jadi mungkin belum menyertakan pesan terbaru giliran saat ini ketika hook dijalankan. Hooks yang memerlukan teks asisten akhir dari giliran saat ini harus menggunakan `last_assistant_message` pada [Stop](#stop) dan [SubagentStop](#subagentstop) alih-alih membaca transkrip |647| `transcript_path` | Path ke JSON percakapan. File transkrip ditulis secara asinkron dan mungkin tertinggal dari percakapan dalam memori, jadi mungkin belum menyertakan pesan terbaru giliran saat ini ketika hook dijalankan. Hooks yang memerlukan teks asisten akhir dari giliran saat ini harus menggunakan `last_assistant_message` pada [Stop](#stop) dan [SubagentStop](#subagentstop) alih-alih membaca transkrip |

648| `cwd` | Direktori kerja saat hook dipanggil |648| `cwd` | Direktori kerja saat hook dipanggil |

649| `permission_mode` | [Mode izin](/id/permissions#permission-modes) saat ini: `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, `"dontAsk"`, atau `"bypassPermissions"`. Mode yang diberi label **Manual** tiba sebagai `"default"`, tidak pernah sebagai `"manual"`, jadi skrip yang cocok dengan `"default"` terus bekerja. Tidak semua events menerima bidang ini. Periksa contoh JSON di setiap bagian [hook event](#hook-events) |649| `permission_mode` | [Mode izin](/docs/id/permissions#permission-modes) saat ini: `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, `"dontAsk"`, atau `"bypassPermissions"`. Mode yang diberi label **Manual** tiba sebagai `"default"`, tidak pernah sebagai `"manual"`, jadi skrip yang cocok dengan `"default"` terus bekerja. Tidak semua events menerima bidang ini. Periksa contoh JSON di setiap bagian [hook event](#hook-events) |

650| `effort` | Objek dengan bidang `level` yang menyimpan [tingkat effort](/id/model-config#adjust-effort-level) aktif untuk giliran: `"low"`, `"medium"`, `"high"`, `"xhigh"`, atau `"max"`. Jika effort yang diminta melebihi apa yang didukung model saat ini, ini adalah tingkat yang diturunkan yang sebenarnya digunakan model. Ultracode bukan tingkat yang berbeda dan dilaporkan sebagai `"xhigh"`. Objek cocok dengan bidang `effort` [status line](/id/statusline#available-data). Hadir untuk events yang dijalankan dalam konteks penggunaan tool, seperti `PreToolUse`, `PostToolUse`, `Stop`, dan `SubagentStop`, ketika model saat ini mendukung parameter effort. Tingkat juga tersedia untuk perintah hook dan tool Bash sebagai variabel lingkungan `$CLAUDE_EFFORT`. |650| `effort` | Objek dengan bidang `level` yang menyimpan [tingkat effort](/docs/id/model-config#adjust-effort-level) aktif untuk giliran: `"low"`, `"medium"`, `"high"`, `"xhigh"`, atau `"max"`. Jika effort yang diminta melebihi apa yang didukung model saat ini, ini adalah tingkat yang diturunkan yang sebenarnya digunakan model. Ultracode bukan tingkat yang berbeda dan dilaporkan sebagai `"xhigh"`. Objek cocok dengan bidang `effort` [status line](/docs/id/statusline#available-data). Hadir untuk events yang dijalankan dalam konteks penggunaan tool, seperti `PreToolUse`, `PostToolUse`, `Stop`, dan `SubagentStop`, ketika model saat ini mendukung parameter effort. Tingkat juga tersedia untuk perintah hook dan tool Bash sebagai variabel lingkungan `$CLAUDE_EFFORT`. |

651| `hook_event_name` | Nama event yang dijalankan |651| `hook_event_name` | Nama event yang dijalankan |

652 652 

653Saat berjalan dengan `--agent` atau di dalam subagent, dua bidang tambahan disertakan:653Saat berjalan dengan `--agent` atau di dalam subagent, dua bidang tambahan disertakan:


655| Bidang | Deskripsi |655| Bidang | Deskripsi |

656| :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |656| :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

657| `agent_id` | Pengenal unik untuk subagent. Hadir hanya ketika hook dijalankan di dalam pemanggilan subagent. Gunakan ini untuk membedakan pemanggilan hook subagent dari pemanggilan thread utama. |657| `agent_id` | Pengenal unik untuk subagent. Hadir hanya ketika hook dijalankan di dalam pemanggilan subagent. Gunakan ini untuk membedakan pemanggilan hook subagent dari pemanggilan thread utama. |

658| `agent_type` | Nama agent (misalnya, `"Explore"` atau `"security-reviewer"`). Hadir ketika sesi menggunakan `--agent` atau hook dijalankan di dalam subagent. Untuk subagents, tipe subagent mengambil alih nilai `--agent` sesi. Untuk [custom subagents](/id/sub-agents), ini adalah bidang `name` dari frontmatter agent, bukan nama file. Untuk subagents yang dikirim oleh [plugin](/id/plugins), ini adalah pengenal yang dibatasi plugin seperti `my-plugin:reviewer`, bukan nama frontmatter telanjang. Lihat [SubagentStart](#subagentstart) untuk cara menulis matcher terhadap nama yang dibatasi plugin. |658| `agent_type` | Nama agent (misalnya, `"Explore"` atau `"security-reviewer"`). Hadir ketika sesi menggunakan `--agent` atau hook dijalankan di dalam subagent. Untuk subagents, tipe subagent mengambil alih nilai `--agent` sesi. Untuk [custom subagents](/docs/id/sub-agents), ini adalah bidang `name` dari frontmatter agent, bukan nama file. Untuk subagents yang dikirim oleh [plugin](/docs/id/plugins), ini adalah pengenal yang dibatasi plugin seperti `my-plugin:reviewer`, bukan nama frontmatter telanjang. Lihat [SubagentStart](#subagentstart) untuk cara menulis matcher terhadap nama yang dibatasi plugin. |

659 659 

660Hanya hooks [`SessionStart`](#sessionstart) yang dapat menerima bidang `model`, dan tidak dijamin ada. Tidak ada variabel lingkungan `$CLAUDE_MODEL`. Proses hook mewarisi lingkungan induk, jadi dapat membaca `$ANTHROPIC_MODEL` jika Anda menetapkannya di shell Anda, tetapi nilai itu tidak berubah ketika Anda beralih model dengan `/model` selama sesi. Satu set variabel tidak diwariskan: Claude Code [menghapus variabel exporter `OTEL_*` dari setiap subprocess yang dijalankannya](/id/monitoring-usage#administrator-configuration), termasuk hooks.660Hanya hooks [`SessionStart`](#sessionstart) yang dapat menerima bidang `model`, dan tidak dijamin ada. Tidak ada variabel lingkungan `$CLAUDE_MODEL`. Proses hook mewarisi lingkungan induk, jadi dapat membaca `$ANTHROPIC_MODEL` jika Anda menetapkannya di shell Anda, tetapi nilai itu tidak berubah ketika Anda beralih model dengan `/model` selama sesi. Satu set variabel tidak diwariskan: Claude Code [menghapus variabel exporter `OTEL_*` dari setiap subprocess yang dijalankannya](/docs/id/monitoring-usage#administrator-configuration), termasuk hooks.

661 661 

662Misalnya, hook `PreToolUse` untuk perintah Bash menerima ini di stdin:662Misalnya, hook `PreToolUse` untuk perintah Bash menerima ini di stdin:

663 663 


776 Anda harus memilih satu pendekatan per hook, bukan keduanya: gunakan kode keluar saja untuk signaling, atau keluar 0 dan cetak JSON untuk kontrol terstruktur. Claude Code hanya memproses JSON pada exit 0. Jika Anda keluar 2, JSON apa pun diabaikan.776 Anda harus memilih satu pendekatan per hook, bukan keduanya: gunakan kode keluar saja untuk signaling, atau keluar 0 dan cetak JSON untuk kontrol terstruktur. Claude Code hanya memproses JSON pada exit 0. Jika Anda keluar 2, JSON apa pun diabaikan.

777</Note>777</Note>

778 778 

779Stdout hook Anda harus berisi hanya objek JSON. Jika profil shell Anda mencetak teks saat startup, itu dapat mengganggu parsing JSON. Lihat [JSON validation failed](/id/hooks-guide#json-validation-failed) dalam panduan troubleshooting.779Stdout hook Anda harus berisi hanya objek JSON. Jika profil shell Anda mencetak teks saat startup, itu dapat mengganggu parsing JSON. Lihat [JSON validation failed](/docs/id/hooks-guide#json-validation-failed) dalam panduan troubleshooting.

780 780 

781String output hook, termasuk `additionalContext`, `systemMessage`, dan plain stdout, dibatasi pada 10.000 karakter. Output yang melebihi batas ini disimpan ke file dan diganti dengan pratinjau dan path file, dengan cara yang sama seperti hasil tool besar ditangani.781String output hook, termasuk `additionalContext`, `systemMessage`, dan plain stdout, dibatasi pada 10.000 karakter. Output yang melebihi batas ini disimpan ke file dan diganti dengan pratinjau dan path file, dengan cara yang sama seperti hasil tool besar ditangani.

782 782 


868* **Aturan proyek bersyarat**: perintah test mana yang berlaku untuk file yang baru diedit, direktori mana yang read-only di worktree ini868* **Aturan proyek bersyarat**: perintah test mana yang berlaku untuk file yang baru diedit, direktori mana yang read-only di worktree ini

869* **Data eksternal**: masalah terbuka yang ditugaskan kepada Anda, hasil CI terbaru, konten yang diambil dari layanan internal869* **Data eksternal**: masalah terbuka yang ditugaskan kepada Anda, hasil CI terbaru, konten yang diambil dari layanan internal

870 870 

871Untuk instruksi yang tidak pernah berubah, lebih suka [CLAUDE.md](/id/memory). Itu dimuat tanpa menjalankan skrip dan merupakan tempat standar untuk konvensi proyek statis.871Untuk instruksi yang tidak pernah berubah, lebih suka [CLAUDE.md](/docs/id/memory). Itu dimuat tanpa menjalankan skrip dan merupakan tempat standar untuk konvensi proyek statis.

872 872 

873Tulis teks sebagai pernyataan faktual daripada instruksi sistem imperatif. Frasa seperti "Target deployment adalah production" atau "Repo ini menggunakan `bun test`" dibaca sebagai informasi proyek. Teks yang dibingkai sebagai perintah sistem out-of-band dapat memicu pertahanan injeksi prompt Claude, yang menyebabkan Claude menampilkan teks kepada Anda alih-alih memperlakukannya sebagai konteks.873Tulis teks sebagai pernyataan faktual daripada instruksi sistem imperatif. Frasa seperti "Target deployment adalah production" atau "Repo ini menggunakan `bun test`" dibaca sebagai informasi proyek. Teks yang dibingkai sebagai perintah sistem out-of-band dapat memicu pertahanan injeksi prompt Claude, yang menyebabkan Claude menampilkan teks kepada Anda alih-alih memperlakukannya sebagai konteks.

874 874 


950 </Tab>950 </Tab>

951</Tabs>951</Tabs>

952 952 

953Untuk contoh yang diperluas termasuk validasi perintah Bash, pemfilteran prompt, dan skrip persetujuan otomatis, lihat [What you can automate](/id/hooks-guide#what-you-can-automate) dalam panduan dan [Bash command validator reference implementation](https://github.com/anthropics/claude-code/blob/main/examples/hooks/bash_command_validator_example.py).953Untuk contoh yang diperluas termasuk validasi perintah Bash, pemfilteran prompt, dan skrip persetujuan otomatis, lihat [What you can automate](/docs/id/hooks-guide#what-you-can-automate) dalam panduan dan [Bash command validator reference implementation](https://github.com/anthropics/claude-code/blob/main/examples/hooks/bash_command_validator_example.py).

954 954 

955<h2 id="hook-events">955<h2 id="hook-events">

956 Hook events956 Hook events


962 SessionStart962 SessionStart

963</h3>963</h3>

964 964 

965Dijalankan ketika Claude Code memulai sesi baru atau melanjutkan sesi yang ada. Berguna untuk memuat konteks pengembangan seperti masalah yang ada atau perubahan terbaru pada codebase Anda, atau menyiapkan variabel lingkungan. Untuk konteks statis yang tidak memerlukan skrip, gunakan [CLAUDE.md](/id/memory) sebagai gantinya.965Dijalankan ketika Claude Code memulai sesi baru atau melanjutkan sesi yang ada. Berguna untuk memuat konteks pengembangan seperti masalah yang ada atau perubahan terbaru pada codebase Anda, atau menyiapkan variabel lingkungan. Untuk konteks statis yang tidak memerlukan skrip, gunakan [CLAUDE.md](/docs/id/memory) sebagai gantinya.

966 966 

967SessionStart dijalankan pada setiap sesi, jadi jaga hooks ini tetap cepat. Hanya hooks `type: "command"` dan `type: "mcp_tool"` yang didukung.967SessionStart dijalankan pada setiap sesi, jadi jaga hooks ini tetap cepat. Hanya hooks `type: "command"` dan `type: "mcp_tool"` yang didukung.

968 968 


1008| Bidang | Deskripsi |1008| Bidang | Deskripsi |

1009| :------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |1009| :------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

1010| `additionalContext` | String ditambahkan ke konteks Claude pada awal percakapan, sebelum prompt pertama. Lihat [Tambahkan konteks untuk Claude](#add-context-for-claude) untuk cara teks disampaikan dan apa yang harus dimasukkan |1010| `additionalContext` | String ditambahkan ke konteks Claude pada awal percakapan, sebelum prompt pertama. Lihat [Tambahkan konteks untuk Claude](#add-context-for-claude) untuk cara teks disampaikan dan apa yang harus dimasukkan |

1011| `initialUserMessage` | String digunakan sebagai pesan pengguna pertama sesi. Berlaku dalam [mode non-interaktif](/id/headless) dengan flag `-p`, di mana itu menjadi giliran pertama bahkan jika tidak ada prompt yang disediakan. Jika prompt disediakan, itu mengikuti sebagai giliran berikutnya. Tidak seperti `additionalContext`, yang menempel pada giliran yang ada, ini membuat giliran |1011| `initialUserMessage` | String digunakan sebagai pesan pengguna pertama sesi. Berlaku dalam [mode non-interaktif](/docs/id/headless) dengan flag `-p`, di mana itu menjadi giliran pertama bahkan jika tidak ada prompt yang disediakan. Jika prompt disediakan, itu mengikuti sebagai giliran berikutnya. Tidak seperti `additionalContext`, yang menempel pada giliran yang ada, ini membuat giliran |

1012| `sessionTitle` | Menetapkan judul sesi, dengan efek yang sama seperti `/rename`. Gunakan untuk memberi nama sesi secara otomatis dari folder peluncuran, cabang git, atau nama worktree. Berlaku hanya ketika `source` adalah `"startup"` atau `"resume"`; diabaikan pada `"clear"` dan `"compact"` |1012| `sessionTitle` | Menetapkan judul sesi, dengan efek yang sama seperti `/rename`. Gunakan untuk memberi nama sesi secara otomatis dari folder peluncuran, cabang git, atau nama worktree. Berlaku hanya ketika `source` adalah `"startup"` atau `"resume"`; diabaikan pada `"clear"` dan `"compact"` |

1013| `watchPaths` | Array path absolut untuk menonton untuk event [FileChanged](#filechanged) selama sesi ini |1013| `watchPaths` | Array path absolut untuk menonton untuk event [FileChanged](#filechanged) selama sesi ini |

1014| `reloadSkills` | Boolean. Ketika `true`, Claude Code memindai ulang direktori [skill](/id/skills) dan command setelah SessionStart hooks selesai, jadi skills yang diinstal hook tersedia dalam sesi yang sama, dimulai dengan prompt pertama |1014| `reloadSkills` | Boolean. Ketika `true`, Claude Code memindai ulang direktori [skill](/docs/id/skills) dan command setelah SessionStart hooks selesai, jadi skills yang diinstal hook tersedia dalam sesi yang sama, dimulai dengan prompt pertama |

1015 1015 

1016```json theme={null}1016```json theme={null}

1017{1017{


1085 Setup1085 Setup

1086</h3>1086</h3>

1087 1087 

1088Dijalankan hanya ketika Anda meluncurkan Claude Code dengan `--init-only`, atau dengan `--init` atau `--maintenance` dalam [mode non-interaktif](/id/headless) dengan flag `-p`. Itu tidak dijalankan pada startup normal. Gunakan untuk instalasi dependensi satu kali atau pembersihan terjadwal yang Anda picu secara eksplisit dari CI atau skrip, terpisah dari startup sesi normal. Untuk inisialisasi per-sesi, gunakan [SessionStart](#sessionstart) sebagai gantinya.1088Dijalankan hanya ketika Anda meluncurkan Claude Code dengan `--init-only`, atau dengan `--init` atau `--maintenance` dalam [mode non-interaktif](/docs/id/headless) dengan flag `-p`. Itu tidak dijalankan pada startup normal. Gunakan untuk instalasi dependensi satu kali atau pembersihan terjadwal yang Anda picu secara eksplisit dari CI atau skrip, terpisah dari startup sesi normal. Untuk inisialisasi per-sesi, gunakan [SessionStart](#sessionstart) sebagai gantinya.

1089 1089 

1090Nilai matcher sesuai dengan flag CLI yang memicu hook:1090Nilai matcher sesuai dengan flag CLI yang memicu hook:

1091 1091 


1096 1096 

1097`--init-only` menjalankan Setup hooks dan SessionStart hooks dengan matcher `startup`, kemudian keluar tanpa memulai percakapan. `--init` dan `--maintenance` menjalankan Setup hooks hanya ketika digabungkan dengan `-p`; dalam sesi interaktif dua flag itu saat ini tidak menjalankan Setup hooks.1097`--init-only` menjalankan Setup hooks dan SessionStart hooks dengan matcher `startup`, kemudian keluar tanpa memulai percakapan. `--init` dan `--maintenance` menjalankan Setup hooks hanya ketika digabungkan dengan `-p`; dalam sesi interaktif dua flag itu saat ini tidak menjalankan Setup hooks.

1098 1098 

1099Karena Setup tidak dijalankan pada setiap peluncuran, plugin yang memerlukan dependensi yang diinstal tidak dapat mengandalkan Setup saja. Pola praktis adalah memeriksa dependensi pada penggunaan pertama dan menginstal jika tidak ada, misalnya hook atau skill yang menguji `${CLAUDE_PLUGIN_DATA}/node_modules` dan menjalankan `npm install` jika tidak ada. Lihat [direktori data persisten](/id/plugins-reference#persistent-data-directory) untuk tempat menyimpan dependensi yang diinstal.1099Karena Setup tidak dijalankan pada setiap peluncuran, plugin yang memerlukan dependensi yang diinstal tidak dapat mengandalkan Setup saja. Pola praktis adalah memeriksa dependensi pada penggunaan pertama dan menginstal jika tidak ada, misalnya hook atau skill yang menguji `${CLAUDE_PLUGIN_DATA}/node_modules` dan menjalankan `npm install` jika tidak ada. Lihat [direktori data persisten](/docs/id/plugins-reference#persistent-data-directory) untuk tempat menyimpan dependensi yang diinstal.

1100 1100 

1101<h4 id="setup-input">1101<h4 id="setup-input">

1102 Setup input1102 Setup input


1118 Setup decision control1118 Setup decision control

1119</h4>1119</h4>

1120 1120 

1121Setup hooks tidak dapat memblokir. Kode keluar non-nol apa pun, termasuk 2, menampilkan stderr ke pengguna sebagai pemberitahuan `<hook name> hook error`, dan eksekusi berlanjut. Dalam [mode non-interaktif](/id/headless), output hook muncul hanya ketika Anda meluncurkan dengan `--verbose`.1121Setup hooks tidak dapat memblokir. Kode keluar non-nol apa pun, termasuk 2, menampilkan stderr ke pengguna sebagai pemberitahuan `<hook name> hook error`, dan eksekusi berlanjut. Dalam [mode non-interaktif](/docs/id/headless), output hook muncul hanya ketika Anda meluncurkan dengan `--verbose`.

1122 1122 

1123Untuk meneruskan informasi ke konteks Claude, kembalikan `additionalContext` dalam output JSON; plain stdout ditulis ke debug log saja. Selain [bidang output JSON](#json-output) yang tersedia untuk semua hooks, Anda dapat mengembalikan bidang spesifik event ini:1123Untuk meneruskan informasi ke konteks Claude, kembalikan `additionalContext` dalam output JSON; plain stdout ditulis ke debug log saja. Selain [bidang output JSON](#json-output) yang tersedia untuk semua hooks, Anda dapat mengembalikan bidang spesifik event ini:

1124 1124 


1188 1188 

1189Hook `UserPromptSubmit` command, HTTP, atau MCP tool yang mencapai timeout-nya dibatalkan dan output-nya, termasuk `additionalContext` apa pun, dibuang. Prompt masih mencapai Claude tanpa konteks itu. Mulai dari v2.1.196, transkrip menampilkan pemberitahuan yang menamai hook, timeout yang dijalankan, dan bahwa output dibuang. Versi sebelumnya membatalkan hook tanpa pemberitahuan.1189Hook `UserPromptSubmit` command, HTTP, atau MCP tool yang mencapai timeout-nya dibatalkan dan output-nya, termasuk `additionalContext` apa pun, dibuang. Prompt masih mencapai Claude tanpa konteks itu. Mulai dari v2.1.196, transkrip menampilkan pemberitahuan yang menamai hook, timeout yang dijalankan, dan bahwa output dibuang. Versi sebelumnya membatalkan hook tanpa pemberitahuan.

1190 1190 

1191Hook callback [Agent SDK](/id/agent-sdk/hooks) pada `UserPromptSubmit` yang mencapai timeout-nya memblokir prompt dengan pesan yang menamai hook dan timeout, karena callback di sana dapat bertindak sebagai policy gate yang tidak boleh gagal terbuka. Sesi berlanjut. Sebelum v2.1.208, timeout callback pada event itu mengakhiri giliran dengan kesalahan eksekusi.1191Hook callback [Agent SDK](/docs/id/agent-sdk/hooks) pada `UserPromptSubmit` yang mencapai timeout-nya memblokir prompt dengan pesan yang menamai hook dan timeout, karena callback di sana dapat bertindak sebagai policy gate yang tidak boleh gagal terbuka. Sesi berlanjut. Sebelum v2.1.208, timeout callback pada event itu mengakhiri giliran dengan kesalahan eksekusi.

1192 1192 

1193<h4 id="userpromptsubmit-input">1193<h4 id="userpromptsubmit-input">

1194 UserPromptSubmit input1194 UserPromptSubmit input


1443Dijalankan setelah Claude membuat parameter tool dan sebelum memproses pemanggilan tool. Cocok pada nama tool: `Bash`, `Edit`, `Write`, `Read`, `Glob`, `Grep`, `Agent`, `WebFetch`, `WebSearch`, `AskUserQuestion`, `ExitPlanMode`, dan nama [MCP tool](#match-mcp-tools) apa pun.1443Dijalankan setelah Claude membuat parameter tool dan sebelum memproses pemanggilan tool. Cocok pada nama tool: `Bash`, `Edit`, `Write`, `Read`, `Glob`, `Grep`, `Agent`, `WebFetch`, `WebSearch`, `AskUserQuestion`, `ExitPlanMode`, dan nama [MCP tool](#match-mcp-tools) apa pun.

1444 1444 

1445<Warning>1445<Warning>

1446 PreToolUse hanya dijalankan ketika Claude memanggil tool. File yang Anda [referensikan dengan `@` dalam prompt Anda](/id/common-workflows#reference-files-and-directories) ditambahkan tanpa pemanggilan tool apa pun: Claude Code menyisipkan konten mereka saat membangun prompt, jadi tidak ada hook PreToolUse yang dijalankan untuk mereka, termasuk hooks yang cocok dengan `Read`. Untuk memblokir path tertentu dari referensi `@`, gunakan [aturan deny `Read`](/id/permissions#read-and-edit) sebagai gantinya.1446 PreToolUse hanya dijalankan ketika Claude memanggil tool. File yang Anda [referensikan dengan `@` dalam prompt Anda](/docs/id/common-workflows#reference-files-and-directories) ditambahkan tanpa pemanggilan tool apa pun: Claude Code menyisipkan konten mereka saat membangun prompt, jadi tidak ada hook PreToolUse yang dijalankan untuk mereka, termasuk hooks yang cocok dengan `Read`. Untuk memblokir path tertentu dari referensi `@`, gunakan [aturan deny `Read`](/docs/id/permissions#read-and-edit) sebagai gantinya.

1447</Warning>1447</Warning>

1448 1448 

1449Gunakan [PreToolUse decision control](#pretooluse-decision-control) untuk mengizinkan, menolak, menanyakan, atau menunda pemanggilan tool.1449Gunakan [PreToolUse decision control](#pretooluse-decision-control) untuk mengizinkan, menolak, menanyakan, atau menunda pemanggilan tool.


1464| :------------------ | :------ | :----------------- | :---------------------------------------------------------------------------------------------------------------------------------------- |1464| :------------------ | :------ | :----------------- | :---------------------------------------------------------------------------------------------------------------------------------------- |

1465| `command` | string | `"npm test"` | Perintah shell untuk dijalankan |1465| `command` | string | `"npm test"` | Perintah shell untuk dijalankan |

1466| `description` | string | `"Run test suite"` | Deskripsi opsional tentang apa yang dilakukan perintah |1466| `description` | string | `"Run test suite"` | Deskripsi opsional tentang apa yang dilakukan perintah |

1467| `timeout` | number | `120000` | Timeout opsional dalam milidetik. Nilai di atas [maksimum](/id/tools-reference#bash-tool-behavior) dikurangi ke maksimum daripada ditolak |1467| `timeout` | number | `120000` | Timeout opsional dalam milidetik. Nilai di atas [maksimum](/docs/id/tools-reference#bash-tool-behavior) dikurangi ke maksimum daripada ditolak |

1468| `run_in_background` | boolean | `false` | Apakah menjalankan perintah di latar belakang |1468| `run_in_background` | boolean | `false` | Apakah menjalankan perintah di latar belakang |

1469 1469 

1470<h5 id="write">1470<h5 id="write">


1556 Agent1556 Agent

1557</h5>1557</h5>

1558 1558 

1559Spawn [subagent](/id/sub-agents).1559Spawn [subagent](/docs/id/sub-agents).

1560 1560 

1561| Bidang | Tipe | Contoh | Deskripsi |1561| Bidang | Tipe | Contoh | Deskripsi |

1562| :-------------- | :----- | :------------------------- | :----------------------------------------- |1562| :-------------- | :----- | :------------------------- | :----------------------------------------- |


1599 ExitPlanMode1599 ExitPlanMode

1600</h5>1600</h5>

1601 1601 

1602Menyajikan rencana dan meminta pengguna untuk menyetujuinya sebelum Claude meninggalkan [plan mode](/id/permission-modes#analyze-before-you-edit-with-plan-mode). Claude menulis rencana ke file di disk sebelum memanggil tool, jadi `tool_input` literal dari model hanya membawa `allowedPrompts`. Claude Code menyuntikkan konten rencana dan path file sebelum meneruskan input ke hooks.1602Menyajikan rencana dan meminta pengguna untuk menyetujuinya sebelum Claude meninggalkan [plan mode](/docs/id/permission-modes#analyze-before-you-edit-with-plan-mode). Claude menulis rencana ke file di disk sebelum memanggil tool, jadi `tool_input` literal dari model hanya membawa `allowedPrompts`. Claude Code menyuntikkan konten rencana dan path file sebelum meneruskan input ke hooks.

1603 1603 

1604| Bidang | Tipe | Contoh | Deskripsi |1604| Bidang | Tipe | Contoh | Deskripsi |

1605| :--------------- | :----- | :------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1605| :--------------- | :----- | :------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |


1617 1617 

1618| Bidang | Deskripsi |1618| Bidang | Deskripsi |

1619| :------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |1619| :------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

1620| `permissionDecision` | `"allow"` melewati prompt izin, kecuali untuk [tools yang memerlukan interaksi pengguna](#pretooluse-decision-control) dan connector tools [organisasi Anda atur ke `ask`](/id/mcp#organization-controls-on-connector-tools). `"deny"` mencegah pemanggilan tool. `"ask"` meminta pengguna untuk mengkonfirmasi. `"defer"` keluar dengan baik sehingga tool dapat dilanjutkan nanti. [Deny and ask rules](/id/permissions#manage-permissions) masih dievaluasi terlepas dari apa yang dikembalikan hook |1620| `permissionDecision` | `"allow"` melewati prompt izin, kecuali untuk [tools yang memerlukan interaksi pengguna](#pretooluse-decision-control) dan connector tools [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools). `"deny"` mencegah pemanggilan tool. `"ask"` meminta pengguna untuk mengkonfirmasi. `"defer"` keluar dengan baik sehingga tool dapat dilanjutkan nanti. [Deny and ask rules](/docs/id/permissions#manage-permissions) masih dievaluasi terlepas dari apa yang dikembalikan hook |

1621| `permissionDecisionReason` | Untuk `"allow"` dan `"ask"`, ditampilkan ke pengguna tetapi bukan Claude. Untuk `"deny"`, ditampilkan ke Claude. Untuk `"defer"`, diabaikan |1621| `permissionDecisionReason` | Untuk `"allow"` dan `"ask"`, ditampilkan ke pengguna tetapi bukan Claude. Untuk `"deny"`, ditampilkan ke Claude. Untuk `"defer"`, diabaikan |

1622| `updatedInput` | Memodifikasi parameter input tool sebelum eksekusi. Menggantikan seluruh objek input, jadi sertakan bidang yang tidak berubah bersama yang dimodifikasi. Gabungkan dengan `"allow"` untuk persetujuan otomatis, atau `"ask"` untuk menampilkan input yang dimodifikasi ke pengguna. Untuk `"defer"`, diabaikan |1622| `updatedInput` | Memodifikasi parameter input tool sebelum eksekusi. Menggantikan seluruh objek input, jadi sertakan bidang yang tidak berubah bersama yang dimodifikasi. Gabungkan dengan `"allow"` untuk persetujuan otomatis, atau `"ask"` untuk menampilkan input yang dimodifikasi ke pengguna. Untuk `"defer"`, diabaikan |

1623| `additionalContext` | String ditambahkan ke konteks Claude bersama hasil tool. Diabaikan ketika `permissionDecision` adalah `"defer"`. Lihat [Tambahkan konteks untuk Claude](#add-context-for-claude) |1623| `additionalContext` | String ditambahkan ke konteks Claude bersama hasil tool. Diabaikan ketika `permissionDecision` adalah `"defer"`. Lihat [Tambahkan konteks untuk Claude](#add-context-for-claude) |


1640}1640}

1641```1641```

1642 1642 

1643`AskUserQuestion` dan `ExitPlanMode` memerlukan interaksi pengguna dan biasanya memblokir dalam [mode non-interaktif](/id/headless) dengan flag `-p`. Mengembalikan `permissionDecision: "allow"` bersama dengan `updatedInput` memenuhi persyaratan itu: hook membaca input tool dari stdin, mengumpulkan jawaban melalui UI Anda sendiri, dan mengembalikannya dalam `updatedInput` sehingga tool dijalankan tanpa meminta. Mengembalikan `"allow"` saja tidak cukup untuk tools ini. Untuk `AskUserQuestion`, kembalikan array `questions` asli dan tambahkan objek [`answers`](#askuserquestion) yang memetakan teks setiap pertanyaan ke jawaban yang dipilih.1643`AskUserQuestion` dan `ExitPlanMode` memerlukan interaksi pengguna dan biasanya memblokir dalam [mode non-interaktif](/docs/id/headless) dengan flag `-p`. Mengembalikan `permissionDecision: "allow"` bersama dengan `updatedInput` memenuhi persyaratan itu: hook membaca input tool dari stdin, mengumpulkan jawaban melalui UI Anda sendiri, dan mengembalikannya dalam `updatedInput` sehingga tool dijalankan tanpa meminta. Mengembalikan `"allow"` saja tidak cukup untuk tools ini. Untuk `AskUserQuestion`, kembalikan array `questions` asli dan tambahkan objek [`answers`](#askuserquestion) yang memetakan teks setiap pertanyaan ke jawaban yang dipilih.

1644 1644 

1645Connector tools [organisasi Anda atur ke `ask`](/id/mcp#organization-controls-on-connector-tools) meminta bahkan ketika hook mengembalikan `"allow"`.1645Connector tools [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) meminta bahkan ketika hook mengembalikan `"allow"`.

1646 1646 

1647Mulai dari v2.1.199, tool MCP yang server-nya menandainya dengan [`_meta["anthropic/requiresUserInteraction"]`](/id/mcp#require-approval-for-a-specific-tool) lebih ketat: hook tidak dapat melewati prompt persetujuannya dengan `"allow"`, dengan atau tanpa `updatedInput`, karena Claude Code tidak dapat mengkonfirmasi hook mengumpulkan interaksi yang dibutuhkan tool.1647Mulai dari v2.1.199, tool MCP yang server-nya menandainya dengan [`_meta["anthropic/requiresUserInteraction"]`](/docs/id/mcp#require-approval-for-a-specific-tool) lebih ketat: hook tidak dapat melewati prompt persetujuannya dengan `"allow"`, dengan atau tanpa `updatedInput`, karena Claude Code tidak dapat mengkonfirmasi hook mengumpulkan interaksi yang dibutuhkan tool.

1648 1648 

1649<Note>1649<Note>

1650 PreToolUse sebelumnya menggunakan bidang `decision` dan `reason` tingkat atas, tetapi ini sudah usang untuk event ini. Gunakan `hookSpecificOutput.permissionDecision` dan `hookSpecificOutput.permissionDecisionReason` sebagai gantinya. Nilai usang `"approve"` dan `"block"` memetakan ke `"allow"` dan `"deny"` masing-masing. Events lain seperti PostToolUse dan Stop terus menggunakan `decision` dan `reason` tingkat atas sebagai format saat ini mereka.1650 PreToolUse sebelumnya menggunakan bidang `decision` dan `reason` tingkat atas, tetapi ini sudah usang untuk event ini. Gunakan `hookSpecificOutput.permissionDecision` dan `hookSpecificOutput.permissionDecisionReason` sebagai gantinya. Nilai usang `"approve"` dan `"block"` memetakan ke `"allow"` dan `"deny"` masing-masing. Events lain seperti PostToolUse dan Stop terus menggunakan `decision` dan `reason` tingkat atas sebagai format saat ini mereka.


1654 Defer a tool call for later1654 Defer a tool call for later

1655</h4>1655</h4>

1656 1656 

1657`"defer"` adalah untuk integrasi yang menjalankan `claude -p` sebagai subprocess dan membaca output JSON-nya, seperti aplikasi Agent SDK atau UI kustom yang dibangun di atas Claude Code. Ini memungkinkan proses pemanggil itu menjeda Claude pada pemanggilan tool, mengumpulkan input melalui antarmuka miliknya sendiri, dan melanjutkan di mana ia berhenti. Claude Code menghormati nilai ini hanya dalam [mode non-interaktif](/id/headless) dengan flag `-p`. Dalam sesi interaktif itu mencatat peringatan dan mengabaikan hasil hook.1657`"defer"` adalah untuk integrasi yang menjalankan `claude -p` sebagai subprocess dan membaca output JSON-nya, seperti aplikasi Agent SDK atau UI kustom yang dibangun di atas Claude Code. Ini memungkinkan proses pemanggil itu menjeda Claude pada pemanggilan tool, mengumpulkan input melalui antarmuka miliknya sendiri, dan melanjutkan di mana ia berhenti. Claude Code menghormati nilai ini hanya dalam [mode non-interaktif](/docs/id/headless) dengan flag `-p`. Dalam sesi interaktif itu mencatat peringatan dan mengabaikan hasil hook.

1658 1658 

1659Tool `AskUserQuestion` adalah kasus tipikal: Claude ingin menanyakan sesuatu kepada pengguna, tetapi tidak ada terminal untuk menjawab. Perjalanan bolak-balik bekerja seperti ini:1659Tool `AskUserQuestion` adalah kasus tipikal: Claude ingin menanyakan sesuatu kepada pengguna, tetapi tidak ada terminal untuk menjawab. Perjalanan bolak-balik bekerja seperti ini:

1660 1660 


1680}1680}

1681```1681```

1682 1682 

1683Tidak ada timeout atau batas retry. Sesi tetap di disk sampai Anda melanjutkannya, tunduk pada penyapuan retensi [`cleanupPeriodDays`](/id/settings#available-settings) yang menghapus file sesi setelah 30 hari secara default. Jika jawaban tidak siap saat Anda melanjutkan, hook dapat mengembalikan `"defer"` lagi dan proses keluar dengan cara yang sama. Proses pemanggil mengontrol kapan harus memecah loop dengan akhirnya mengembalikan `"allow"` atau `"deny"` dari hook.1683Tidak ada timeout atau batas retry. Sesi tetap di disk sampai Anda melanjutkannya, tunduk pada penyapuan retensi [`cleanupPeriodDays`](/docs/id/settings#available-settings) yang menghapus file sesi setelah 30 hari secara default. Jika jawaban tidak siap saat Anda melanjutkan, hook dapat mengembalikan `"defer"` lagi dan proses keluar dengan cara yang sama. Proses pemanggil mengontrol kapan harus memecah loop dengan akhirnya mengembalikan `"allow"` atau `"deny"` dari hook.

1684 1684 

1685`"defer"` hanya bekerja ketika Claude membuat satu pemanggilan tool dalam giliran. Jika Claude membuat beberapa pemanggilan tool sekaligus, `"defer"` diabaikan dengan peringatan dan tool melanjutkan melalui alur izin normal. Batasan ada karena resume hanya dapat menjalankan kembali satu tool: tidak ada cara untuk menunda satu pemanggilan dari batch tanpa meninggalkan yang lain tidak terselesaikan.1685`"defer"` hanya bekerja ketika Claude membuat satu pemanggilan tool dalam giliran. Jika Claude membuat beberapa pemanggilan tool sekaligus, `"defer"` diabaikan dengan peringatan dan tool melanjutkan melalui alur izin normal. Batasan ada karena resume hanya dapat menjalankan kembali satu tool: tidak ada cara untuk menunda satu pemanggilan dari batch tanpa meninggalkan yang lain tidak terselesaikan.

1686 1686 


1736 1736 

1737| Bidang | Deskripsi |1737| Bidang | Deskripsi |

1738| :------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1738| :------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1739| `behavior` | `"allow"` memberikan izin, `"deny"` menolaknya. [Deny and ask rules](/id/permissions#manage-permissions) masih dievaluasi, jadi hook yang mengembalikan `"allow"` tidak menimpa aturan deny yang cocok |1739| `behavior` | `"allow"` memberikan izin, `"deny"` menolaknya. [Deny and ask rules](/docs/id/permissions#manage-permissions) masih dievaluasi, jadi hook yang mengembalikan `"allow"` tidak menimpa aturan deny yang cocok |

1740| `updatedInput` | Untuk `"allow"` saja: memodifikasi parameter input tool sebelum eksekusi. Menggantikan seluruh objek input, jadi sertakan bidang yang tidak berubah bersama yang dimodifikasi. Input yang dimodifikasi dievaluasi ulang terhadap aturan deny dan ask |1740| `updatedInput` | Untuk `"allow"` saja: memodifikasi parameter input tool sebelum eksekusi. Menggantikan seluruh objek input, jadi sertakan bidang yang tidak berubah bersama yang dimodifikasi. Input yang dimodifikasi dievaluasi ulang terhadap aturan deny dan ask |

1741| `updatedPermissions` | Untuk `"allow"` saja: array dari [permission update entries](#permission-update-entries) untuk diterapkan, seperti menambahkan aturan allow atau mengubah mode izin sesi |1741| `updatedPermissions` | Untuk `"allow"` saja: array dari [permission update entries](#permission-update-entries) untuk diterapkan, seperti menambahkan aturan allow atau mengubah mode izin sesi |

1742| `message` | Untuk `"deny"` saja: memberitahu Claude mengapa izin ditolak |1742| `message` | Untuk `"deny"` saja: memberitahu Claude mengapa izin ditolak |


1772| `removeDirectories` | `directories`, `destination` | Menghapus direktori kerja |1772| `removeDirectories` | `directories`, `destination` | Menghapus direktori kerja |

1773 1773 

1774<Note>1774<Note>

1775 `setMode` dengan `bypassPermissions` hanya berlaku jika sesi diluncurkan dengan mode bypass sudah tersedia: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions`, atau `permissions.defaultMode: "bypassPermissions"` dalam pengaturan, dan mode tidak dinonaktifkan oleh [`permissions.disableBypassPermissionsMode`](/id/permissions#managed-settings). Jika tidak, update adalah no-op. `bypassPermissions` tidak pernah dipertahankan sebagai `defaultMode` terlepas dari `destination`.1775 `setMode` dengan `bypassPermissions` hanya berlaku jika sesi diluncurkan dengan mode bypass sudah tersedia: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions`, atau `permissions.defaultMode: "bypassPermissions"` dalam pengaturan, dan mode tidak dinonaktifkan oleh [`permissions.disableBypassPermissionsMode`](/docs/id/permissions#managed-settings). Jika tidak, update adalah no-op. `bypassPermissions` tidak pernah dipertahankan sebagai `defaultMode` terlepas dari `destination`.

1776</Note>1776</Note>

1777 1777 

1778Bidang `destination` pada setiap entry menentukan apakah perubahan tetap dalam memori atau persisten ke file pengaturan.1778Bidang `destination` pada setiap entry menentukan apakah perubahan tetap dalam memori atau persisten ke file pengaturan.


1991 PermissionDenied1991 PermissionDenied

1992</h3>1992</h3>

1993 1993 

1994Dijalankan ketika pengklasifikasi [mode otomatis](/id/permission-modes#eliminate-prompts-with-auto-mode) menolak pemanggilan tool. Hook ini hanya dijalankan dalam mode otomatis: itu tidak dijalankan ketika Anda secara manual menolak dialog izin, ketika hook `PreToolUse` memblokir pemanggilan, atau ketika aturan `deny` cocok. Gunakan untuk mencatat penolakan pengklasifikasi, menyesuaikan konfigurasi, atau memberitahu model itu dapat mencoba lagi pemanggilan tool.1994Dijalankan ketika pengklasifikasi [mode otomatis](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) menolak pemanggilan tool. Hook ini hanya dijalankan dalam mode otomatis: itu tidak dijalankan ketika Anda secara manual menolak dialog izin, ketika hook `PreToolUse` memblokir pemanggilan, atau ketika aturan `deny` cocok. Gunakan untuk mencatat penolakan pengklasifikasi, menyesuaikan konfigurasi, atau memberitahu model itu dapat mencoba lagi pemanggilan tool.

1995 1995 

1996Cocok pada nama tool, nilai yang sama seperti PreToolUse.1996Cocok pada nama tool, nilai yang sama seperti PreToolUse.

1997 1997 


2053| `elicitation_dialog` | Server MCP membuka formulir elicitation |2053| `elicitation_dialog` | Server MCP membuka formulir elicitation |

2054| `elicitation_complete` | Formulir elicitation MCP dikirimkan atau ditutup |2054| `elicitation_complete` | Formulir elicitation MCP dikirimkan atau ditutup |

2055| `elicitation_response` | Respons elicitation MCP dikirim kembali ke server |2055| `elicitation_response` | Respons elicitation MCP dikirim kembali ke server |

2056| `agent_needs_input` | Sesi latar belakang mulai menunggu input Anda. Dijalankan hanya saat [agent view](/id/agent-view) terbuka di terminal |2056| `agent_needs_input` | Sesi latar belakang mulai menunggu input Anda. Dijalankan hanya saat [agent view](/docs/id/agent-view) terbuka di terminal |

2057| `agent_completed` | Sesi latar belakang selesai atau gagal. Dijalankan hanya saat [agent view](/id/agent-view) terbuka di terminal |2057| `agent_completed` | Sesi latar belakang selesai atau gagal. Dijalankan hanya saat [agent view](/docs/id/agent-view) terbuka di terminal |

2058 2058 

2059Tipe `agent_needs_input` dan `agent_completed` memerlukan Claude Code v2.1.198 atau lebih baru.2059Tipe `agent_needs_input` dan `agent_completed` memerlukan Claude Code v2.1.198 atau lebih baru.

2060 2060 


2111 SubagentStart2111 SubagentStart

2112</h3>2112</h3>

2113 2113 

2114Dijalankan ketika subagent Claude Code dispawn melalui tool Agent. Mendukung matchers untuk memfilter berdasarkan nama tipe agent. Untuk agent bawaan, ini adalah nama agent seperti `general-purpose`, `Explore`, atau `Plan`. Untuk [custom subagents](/id/sub-agents), ini adalah bidang `name` dari frontmatter agent, bukan nama file.2114Dijalankan ketika subagent Claude Code dispawn melalui tool Agent. Mendukung matchers untuk memfilter berdasarkan nama tipe agent. Untuk agent bawaan, ini adalah nama agent seperti `general-purpose`, `Explore`, atau `Plan`. Untuk [custom subagents](/docs/id/sub-agents), ini adalah bidang `name` dari frontmatter agent, bukan nama file.

2115 2115 

2116Untuk subagents yang dikirim oleh [plugin](/id/plugins), tipe agent adalah pengenal bersifat plugin seperti `my-plugin:reviewer`, bukan nama frontmatter biasa. Titik dua menempatkan nama bersifat plugin pada jalur ekspresi reguler, jadi jangkar matcher dengan `^` dan `$` untuk kecocokan yang tepat: `^my-plugin:reviewer$`.2116Untuk subagents yang dikirim oleh [plugin](/docs/id/plugins), tipe agent adalah pengenal bersifat plugin seperti `my-plugin:reviewer`, bukan nama frontmatter biasa. Titik dua menempatkan nama bersifat plugin pada jalur ekspresi reguler, jadi jangkar matcher dengan `^` dan `$` untuk kecocokan yang tepat: `^my-plugin:reviewer$`.

2117 2117 

2118<h4 id="subagentstart-input">2118<h4 id="subagentstart-input">

2119 SubagentStart input2119 SubagentStart input


2245 TaskCompleted2245 TaskCompleted

2246</h3>2246</h3>

2247 2247 

2248Dijalankan ketika tugas sedang ditandai sebagai selesai. Ini dijalankan dalam dua situasi: ketika agent apa pun secara eksplisit menandai tugas sebagai selesai melalui tool TaskUpdate, atau ketika [agent team](/id/agent-teams) teammate menyelesaikan giliran dengan tugas yang sedang berlangsung. Gunakan ini untuk menegakkan kriteria penyelesaian seperti passing tests atau lint checks sebelum tugas dapat ditutup.2248Dijalankan ketika tugas sedang ditandai sebagai selesai. Ini dijalankan dalam dua situasi: ketika agent apa pun secara eksplisit menandai tugas sebagai selesai melalui tool TaskUpdate, atau ketika [agent team](/docs/id/agent-teams) teammate menyelesaikan giliran dengan tugas yang sedang berlangsung. Gunakan ini untuk menegakkan kriteria penyelesaian seperti passing tests atau lint checks sebelum tugas dapat ditutup.

2249 2249 

2250Ketika hook `TaskCompleted` keluar dengan kode 2, tugas tidak ditandai sebagai selesai dan pesan stderr diumpankan kembali ke model sebagai umpan balik. Untuk menghentikan teammate sepenuhnya alih-alih menjalankannya kembali, kembalikan JSON dengan `{"continue": false, "stopReason": "..."}`. TaskCompleted hooks tidak mendukung matchers dan dijalankan pada setiap kemunculan.2250Ketika hook `TaskCompleted` keluar dengan kode 2, tugas tidak ditandai sebagai selesai dan pesan stderr diumpankan kembali ke model sebagai umpan balik. Untuk menghentikan teammate sepenuhnya alih-alih menjalankannya kembali, kembalikan JSON dengan `{"continue": false, "stopReason": "..."}`. TaskCompleted hooks tidak mendukung matchers dan dijalankan pada setiap kemunculan.

2251 2251 


2310Dijalankan ketika agent Claude Code utama telah selesai merespons. Tidak dijalankan jika penghentian terjadi karena interupsi pengguna. Kesalahan API menjalankan [StopFailure](#stopfailure) sebagai gantinya.2310Dijalankan ketika agent Claude Code utama telah selesai merespons. Tidak dijalankan jika penghentian terjadi karena interupsi pengguna. Kesalahan API menjalankan [StopFailure](#stopfailure) sebagai gantinya.

2311 2311 

2312<Tip>2312<Tip>

2313 Perintah [`/goal`](/id/goal) adalah pintasan bawaan untuk hook Stop berbasis prompt yang bersifat sesi. Gunakan ketika Anda ingin Claude terus bekerja sampai kondisi terpenuhi tanpa menulis konfigurasi hook.2313 Perintah [`/goal`](/docs/id/goal) adalah pintasan bawaan untuk hook Stop berbasis prompt yang bersifat sesi. Gunakan ketika Anda ingin Claude terus bekerja sampai kondisi terpenuhi tanpa menulis konfigurasi hook.

2314</Tip>2314</Tip>

2315 2315 

2316<h4 id="stop-input">2316<h4 id="stop-input">


2443 TeammateIdle2443 TeammateIdle

2444</h3>2444</h3>

2445 2445 

2446Dijalankan ketika [agent team](/id/agent-teams) teammate akan menjadi idle setelah menyelesaikan giliran. Gunakan ini untuk menegakkan quality gates sebelum teammate berhenti bekerja, seperti memerlukan passing lint checks atau memverifikasi bahwa file output ada.2446Dijalankan ketika [agent team](/docs/id/agent-teams) teammate akan menjadi idle setelah menyelesaikan giliran. Gunakan ini untuk menegakkan quality gates sebelum teammate berhenti bekerja, seperti memerlukan passing lint checks atau memverifikasi bahwa file output ada.

2447 2447 

2448Ketika hook `TeammateIdle` keluar dengan kode 2, teammate menerima pesan stderr sebagai umpan balik dan terus bekerja alih-alih menjadi idle. Untuk menghentikan teammate sepenuhnya alih-alih menjalankannya kembali, kembalikan JSON dengan `{"continue": false, "stopReason": "..."}`. TeammateIdle hooks tidak mendukung matchers dan dijalankan pada setiap kemunculan.2448Ketika hook `TeammateIdle` keluar dengan kode 2, teammate menerima pesan stderr sebagai umpan balik dan terus bekerja alih-alih menjadi idle. Untuk menghentikan teammate sepenuhnya alih-alih menjalankannya kembali, kembalikan JSON dengan `{"continue": false, "stopReason": "..."}`. TeammateIdle hooks tidak mendukung matchers dan dijalankan pada setiap kemunculan.

2449 2449 


2657 WorktreeCreate2657 WorktreeCreate

2658</h3>2658</h3>

2659 2659 

2660Dijalankan ketika worktree sedang dibuat, baik dari `claude --worktree` atau dari [subagent menggunakan `isolation: "worktree"`](/id/sub-agents#choose-the-subagent-scope). Secara default Claude Code membuat salinan kerja terisolasi dengan `git worktree`. Mengonfigurasi hook WorktreeCreate menggantikan perilaku git default itu, memungkinkan Anda menggunakan sistem kontrol versi berbeda seperti SVN, Perforce, atau Mercurial.2660Dijalankan ketika worktree sedang dibuat, baik dari `claude --worktree` atau dari [subagent menggunakan `isolation: "worktree"`](/docs/id/sub-agents#choose-the-subagent-scope). Secara default Claude Code membuat salinan kerja terisolasi dengan `git worktree`. Mengonfigurasi hook WorktreeCreate menggantikan perilaku git default itu, memungkinkan Anda menggunakan sistem kontrol versi berbeda seperti SVN, Perforce, atau Mercurial.

2661 2661 

2662Karena hook menggantikan perilaku default sepenuhnya, [`.worktreeinclude`](/id/worktrees#copy-gitignored-files-into-worktrees) tidak diproses. Jika Anda perlu menyalin file konfigurasi lokal seperti `.env` ke worktree baru, lakukan di dalam skrip hook Anda.2662Karena hook menggantikan perilaku default sepenuhnya, [`.worktreeinclude`](/docs/id/worktrees#copy-gitignored-files-into-worktrees) tidak diproses. Jika Anda perlu menyalin file konfigurasi lokal seperti `.env` ke worktree baru, lakukan di dalam skrip hook Anda.

2663 2663 

2664Hook harus mengembalikan path ke direktori worktree yang dibuat. Claude Code menggunakan path ini sebagai direktori kerja untuk sesi terisolasi. Lihat [WorktreeCreate output](#worktreecreate-output) untuk cara setiap tipe hook mengembalikan path.2664Hook harus mengembalikan path ke direktori worktree yang dibuat. Claude Code menggunakan path ini sebagai direktori kerja untuk sesi terisolasi. Lihat [WorktreeCreate output](#worktreecreate-output) untuk cara setiap tipe hook mengembalikan path.

2665 2665 


3112 Periksa beberapa kondisi sebelum berhenti3112 Periksa beberapa kondisi sebelum berhenti

3113</h3>3113</h3>

3114 3114 

3115Hook `Stop` ini menggunakan prompt detail untuk memeriksa tiga kondisi sebelum mengizinkan Claude berhenti. Hooks `SubagentStop` menggunakan format yang sama untuk mengevaluasi apakah [subagent](/id/sub-agents) harus berhenti. Jika `"ok"` adalah `false`, Claude terus bekerja dengan alasan yang disediakan sebagai instruksi berikutnya:3115Hook `Stop` ini menggunakan prompt detail untuk memeriksa tiga kondisi sebelum mengizinkan Claude berhenti. Hooks `SubagentStop` menggunakan format yang sama untuk mengevaluasi apakah [subagent](/docs/id/sub-agents) harus berhenti. Jika `"ok"` adalah `false`, Claude terus bekerja dengan alasan yang disediakan sebagai instruksi berikutnya:

3116 3116 

3117```json theme={null}3117```json theme={null}

3118{3118{


3385 3385 

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

3387 3387 

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

hooks-guide.md +50 −50

Details

10 10 

11Untuk keputusan yang memerlukan penilaian daripada aturan deterministik, Anda juga dapat menggunakan [prompt-based hooks](#prompt-based-hooks) atau [agent-based hooks](#agent-based-hooks) yang menggunakan model Claude untuk mengevaluasi kondisi.11Untuk keputusan yang memerlukan penilaian daripada aturan deterministik, Anda juga dapat menggunakan [prompt-based hooks](#prompt-based-hooks) atau [agent-based hooks](#agent-based-hooks) yang menggunakan model Claude untuk mengevaluasi kondisi.

12 12 

13Untuk cara lain memperluas Claude Code, lihat [skills](/id/skills) untuk memberikan Claude instruksi tambahan dan perintah yang dapat dieksekusi, [subagents](/id/sub-agents) untuk menjalankan tugas dalam konteks terisolasi, dan [plugins](/id/plugins) untuk mengemas ekstensi untuk dibagikan di seluruh proyek.13Untuk cara lain memperluas Claude Code, lihat [skills](/docs/id/skills) untuk memberikan Claude instruksi tambahan dan perintah yang dapat dieksekusi, [subagents](/docs/id/sub-agents) untuk menjalankan tugas dalam konteks terisolasi, dan [plugins](/docs/id/plugins) untuk mengemas ekstensi untuk dibagikan di seluruh proyek.

14 14 

15<Tip>15<Tip>

16 Panduan ini mencakup kasus penggunaan umum dan cara memulai. Untuk skema acara lengkap, format input/output JSON, dan fitur lanjutan seperti async hooks dan MCP tool hooks, lihat [Hooks reference](/id/hooks).16 Panduan ini mencakup kasus penggunaan umum dan cara memulai. Untuk skema acara lengkap, format input/output JSON, dan fitur lanjutan seperti async hooks dan MCP tool hooks, lihat [Hooks reference](/docs/id/hooks).

17</Tip>17</Tip>

18 18 

19<h2 id="set-up-your-first-hook">19<h2 id="set-up-your-first-hook">


85 Apa yang dapat Anda otomatisasi85 Apa yang dapat Anda otomatisasi

86</h2>86</h2>

87 87 

88Hooks memungkinkan Anda menjalankan kode pada titik-titik kunci dalam siklus hidup Claude Code: format file setelah edit, blokir perintah sebelum dijalankan, kirim notifikasi ketika Claude memerlukan input, injeksi konteks saat awal sesi, dan banyak lagi. Untuk daftar lengkap acara hook, lihat [Hooks reference](/id/hooks#hook-lifecycle).88Hooks memungkinkan Anda menjalankan kode pada titik-titik kunci dalam siklus hidup Claude Code: format file setelah edit, blokir perintah sebelum dijalankan, kirim notifikasi ketika Claude memerlukan input, injeksi konteks saat awal sesi, dan banyak lagi. Untuk daftar lengkap acara hook, lihat [Hooks reference](/docs/id/hooks#hook-lifecycle).

89 89 

90Setiap contoh mencakup blok konfigurasi siap pakai yang Anda tambahkan ke [file pengaturan](#configure-hook-location).90Setiap contoh mencakup blok konfigurasi siap pakai yang Anda tambahkan ke [file pengaturan](#configure-hook-location).

91 91 

92Untuk contoh produksi hooks yang menjalankan review model terpisah dan mengirimkan temuan kembali ke sesi, lihat [bagaimana plugin `security-guidance` terintegrasi dengan Claude Code](/id/security-guidance#how-the-plugin-integrates-with-claude-code).92Untuk contoh produksi hooks yang menjalankan review model terpisah dan mengirimkan temuan kembali ke sesi, lihat [bagaimana plugin `security-guidance` terintegrasi dengan Claude Code](/docs/id/security-guidance#how-the-plugin-integrates-with-claude-code).

93 93 

94<h3 id="get-notified-when-claude-needs-input">94<h3 id="get-notified-when-claude-needs-input">

95 Dapatkan notifikasi ketika Claude memerlukan input95 Dapatkan notifikasi ketika Claude memerlukan input


181| `elicitation_dialog` | Server MCP membuka formulir elicitation |181| `elicitation_dialog` | Server MCP membuka formulir elicitation |

182| `elicitation_complete` | Formulir elicitation MCP dikirimkan atau ditutup |182| `elicitation_complete` | Formulir elicitation MCP dikirimkan atau ditutup |

183| `elicitation_response` | Respons elicitation MCP dikirim kembali ke server |183| `elicitation_response` | Respons elicitation MCP dikirim kembali ke server |

184| `agent_needs_input` | Sesi latar belakang mulai menunggu input Anda. Hanya aktif saat [agent view](/id/agent-view) terbuka |184| `agent_needs_input` | Sesi latar belakang mulai menunggu input Anda. Hanya aktif saat [agent view](/docs/id/agent-view) terbuka |

185| `agent_completed` | Sesi latar belakang selesai atau gagal. Hanya aktif saat [agent view](/id/agent-view) terbuka |185| `agent_completed` | Sesi latar belakang selesai atau gagal. Hanya aktif saat [agent view](/docs/id/agent-view) terbuka |

186 186 

187Matcher `agent_needs_input` dan `agent_completed` memerlukan Claude Code v2.1.198 atau lebih baru.187Matcher `agent_needs_input` dan `agent_completed` memerlukan Claude Code v2.1.198 atau lebih baru.

188 188 

189Ketik `/hooks` dan pilih `Notification` untuk mengonfirmasi hook terdaftar. Untuk skema acara lengkap, lihat [Notification reference](/id/hooks#notification).189Ketik `/hooks` dan pilih `Notification` untuk mengonfirmasi hook terdaftar. Untuk skema acara lengkap, lihat [Notification reference](/docs/id/hooks#notification).

190 190 

191<h3 id="auto-format-code-after-edits">191<h3 id="auto-format-code-after-edits">

192 Auto-format kode setelah edit192 Auto-format kode setelah edit


309}309}

310```310```

311 311 

312Anda dapat mengganti `echo` dengan perintah apa pun yang menghasilkan output dinamis, seperti `git log --oneline -5` untuk menampilkan commit terbaru. Untuk injeksi konteks pada setiap awal sesi, pertimbangkan menggunakan [CLAUDE.md](/id/memory) sebagai gantinya. Untuk variabel lingkungan, lihat [`CLAUDE_ENV_FILE`](/id/hooks#persist-environment-variables) dalam referensi.312Anda dapat mengganti `echo` dengan perintah apa pun yang menghasilkan output dinamis, seperti `git log --oneline -5` untuk menampilkan commit terbaru. Untuk injeksi konteks pada setiap awal sesi, pertimbangkan menggunakan [CLAUDE.md](/docs/id/memory) sebagai gantinya. Untuk variabel lingkungan, lihat [`CLAUDE_ENV_FILE`](/docs/id/hooks#persist-environment-variables) dalam referensi.

313 313 

314<h3 id="audit-configuration-changes">314<h3 id="audit-configuration-changes">

315 Audit perubahan konfigurasi315 Audit perubahan konfigurasi


337}337}

338```338```

339 339 

340Matcher memfilter berdasarkan jenis konfigurasi: `user_settings`, `project_settings`, `local_settings`, `policy_settings`, atau `skills`. Untuk memblokir perubahan agar tidak berlaku, keluar dengan kode 2 atau kembalikan `{"decision": "block"}`. Lihat [ConfigChange reference](/id/hooks#configchange) untuk skema input lengkap.340Matcher memfilter berdasarkan jenis konfigurasi: `user_settings`, `project_settings`, `local_settings`, `policy_settings`, atau `skills`. Untuk memblokir perubahan agar tidak berlaku, keluar dengan kode 2 atau kembalikan `{"decision": "block"}`. Lihat [ConfigChange reference](/docs/id/hooks#configchange) untuk skema input lengkap.

341 341 

342<h3 id="reload-environment-when-directory-or-files-change">342<h3 id="reload-environment-when-directory-or-files-change">

343 Muat ulang lingkungan ketika direktori atau file berubah343 Muat ulang lingkungan ketika direktori atau file berubah


376 376 

377Jalankan `direnv allow` sekali di setiap direktori yang memiliki `.envrc` sehingga direnv diizinkan untuk memuatnya. Jika Anda menggunakan devbox atau nix sebagai gantinya direnv, pola yang sama berfungsi dengan `devbox shellenv` atau `devbox global shellenv` sebagai pengganti `direnv export bash`.377Jalankan `direnv allow` sekali di setiap direktori yang memiliki `.envrc` sehingga direnv diizinkan untuk memuatnya. Jika Anda menggunakan devbox atau nix sebagai gantinya direnv, pola yang sama berfungsi dengan `devbox shellenv` atau `devbox global shellenv` sebagai pengganti `direnv export bash`.

378 378 

379Untuk bereaksi terhadap file spesifik daripada setiap perubahan direktori, gunakan `FileChanged` dengan `matcher` yang mencantumkan nama file yang akan dipantau, dipisahkan dengan `|`. Ketika membangun daftar pantau, Claude Code membagi nilai ini menjadi nama file literal daripada mengevaluasinya sebagai regex. Lihat [FileChanged](/id/hooks#filechanged) untuk cara nilai yang sama juga memfilter hook mana yang berjalan ketika file berubah. Contoh ini memantau `.envrc` dan `.env` di direktori kerja:379Untuk bereaksi terhadap file spesifik daripada setiap perubahan direktori, gunakan `FileChanged` dengan `matcher` yang mencantumkan nama file yang akan dipantau, dipisahkan dengan `|`. Ketika membangun daftar pantau, Claude Code membagi nilai ini menjadi nama file literal daripada mengevaluasinya sebagai regex. Lihat [FileChanged](/docs/id/hooks#filechanged) untuk cara nilai yang sama juga memfilter hook mana yang berjalan ketika file berubah. Contoh ini memantau `.envrc` dan `.env` di direktori kerja:

380 380 

381```json theme={null}381```json theme={null}

382{382{


396}396}

397```397```

398 398 

399Lihat entri referensi [CwdChanged](/id/hooks#cwdchanged) dan [FileChanged](/id/hooks#filechanged) untuk skema input, output `watchPaths`, dan detail `CLAUDE_ENV_FILE`.399Lihat entri referensi [CwdChanged](/docs/id/hooks#cwdchanged) dan [FileChanged](/docs/id/hooks#filechanged) untuk skema input, output `watchPaths`, dan detail `CLAUDE_ENV_FILE`.

400 400 

401<h3 id="auto-approve-specific-permission-prompts">401<h3 id="auto-approve-specific-permission-prompts">

402 Auto-approve prompt izin tertentu402 Auto-approve prompt izin tertentu


431Untuk menetapkan mode izin tertentu sebagai gantinya, output hook Anda dapat menyertakan array `updatedPermissions` dengan entri `setMode`. Nilai `mode` adalah mode izin apa pun seperti `default`, `acceptEdits`, atau `bypassPermissions`, dan `destination: "session"` menerapkannya hanya untuk sesi saat ini.431Untuk menetapkan mode izin tertentu sebagai gantinya, output hook Anda dapat menyertakan array `updatedPermissions` dengan entri `setMode`. Nilai `mode` adalah mode izin apa pun seperti `default`, `acceptEdits`, atau `bypassPermissions`, dan `destination: "session"` menerapkannya hanya untuk sesi saat ini.

432 432 

433<Note>433<Note>

434 `bypassPermissions` hanya berlaku jika sesi diluncurkan dengan mode bypass sudah tersedia: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions`, atau `permissions.defaultMode: "bypassPermissions"` dalam pengaturan, dan tidak dinonaktifkan oleh [`permissions.disableBypassPermissionsMode`](/id/permissions#managed-settings). Ini tidak pernah disimpan sebagai `defaultMode`.434 `bypassPermissions` hanya berlaku jika sesi diluncurkan dengan mode bypass sudah tersedia: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions`, atau `permissions.defaultMode: "bypassPermissions"` dalam pengaturan, dan tidak dinonaktifkan oleh [`permissions.disableBypassPermissionsMode`](/docs/id/permissions#managed-settings). Ini tidak pernah disimpan sebagai `defaultMode`.

435</Note>435</Note>

436 436 

437Untuk beralih sesi ke `acceptEdits`, hook Anda menulis JSON ini ke stdout:437Untuk beralih sesi ke `acceptEdits`, hook Anda menulis JSON ini ke stdout:


450}450}

451```451```

452 452 

453Jaga matcher sesempit mungkin. Mencocokkan pada `.*` atau membiarkan matcher kosong akan auto-approve setiap prompt izin, termasuk penulisan file dan perintah shell. Lihat [PermissionRequest reference](/id/hooks#permissionrequest-decision-control) untuk set lengkap bidang keputusan.453Jaga matcher sesempit mungkin. Mencocokkan pada `.*` atau membiarkan matcher kosong akan auto-approve setiap prompt izin, termasuk penulisan file dan perintah shell. Lihat [PermissionRequest reference](/docs/id/hooks#permissionrequest-decision-control) untuk set lengkap bidang keputusan.

454 454 

455<h2 id="how-hooks-work">455<h2 id="how-hooks-work">

456 Cara kerja hooks456 Cara kerja hooks


478| `TaskCompleted` | When a task is being marked as completed |478| `TaskCompleted` | When a task is being marked as completed |

479| `Stop` | When Claude finishes responding |479| `Stop` | When Claude finishes responding |

480| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |480| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |

481| `TeammateIdle` | When an [agent team](/en/agent-teams) teammate is about to go idle |481| `TeammateIdle` | When an [agent team](/docs/en/agent-teams) teammate is about to go idle |

482| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |482| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |

483| `ConfigChange` | When a configuration file changes during a session |483| `ConfigChange` | When a configuration file changes during a session |

484| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |484| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |

485| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |485| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |

486| `WorktreeCreate` | When a worktree is being created via `--worktree` or `isolation: "worktree"`. Replaces default git behavior |486| `WorktreeCreate` | When a worktree is being created via `--worktree`, `isolation: "worktree"`, or for a background session. Replaces default git behavior |

487| `WorktreeRemove` | When a worktree is being removed, either at session exit or when a subagent finishes |487| `WorktreeRemove` | When a worktree is being removed at session exit, when a subagent finishes, or when you delete a background session |

488| `PreCompact` | Before context compaction |488| `PreCompact` | Before context compaction |

489| `PostCompact` | After context compaction completes |489| `PostCompact` | After context compaction completes |

490| `Elicitation` | When an MCP server requests user input during a tool call |490| `Elicitation` | When an MCP server requests user input during a tool call |


494Setiap hook memiliki `type` yang menentukan cara menjalankannya. Sebagian besar hooks menggunakan `"type": "command"`, yang menjalankan perintah shell. Empat jenis lain tersedia:494Setiap hook memiliki `type` yang menentukan cara menjalankannya. Sebagian besar hooks menggunakan `"type": "command"`, yang menjalankan perintah shell. Empat jenis lain tersedia:

495 495 

496* `"type": "http"`: POST data acara ke URL. Lihat [HTTP hooks](#http-hooks).496* `"type": "http"`: POST data acara ke URL. Lihat [HTTP hooks](#http-hooks).

497* `"type": "mcp_tool"`: panggil alat pada server MCP yang sudah terhubung. Lihat [MCP tool hooks](/id/hooks#mcp-tool-hook-fields).497* `"type": "mcp_tool"`: panggil alat pada server MCP yang sudah terhubung. Lihat [MCP tool hooks](/docs/id/hooks#mcp-tool-hook-fields).

498* `"type": "prompt"`: evaluasi LLM single-turn. Lihat [Prompt-based hooks](#prompt-based-hooks).498* `"type": "prompt"`: evaluasi LLM single-turn. Lihat [Prompt-based hooks](#prompt-based-hooks).

499* `"type": "agent"`: verifikasi multi-turn dengan akses alat. Agent hooks bersifat eksperimental dan mungkin berubah. Lihat [Agent-based hooks](#agent-based-hooks).499* `"type": "agent"`: verifikasi multi-turn dengan akses alat. Agent hooks bersifat eksperimental dan mungkin berubah. Lihat [Agent-based hooks](#agent-based-hooks).

500 500 


556}556}

557```557```

558 558 

559Skrip Anda dapat mengurai JSON itu dan bertindak atas bidang apa pun. Hook `UserPromptSubmit` mendapatkan teks `prompt` sebagai gantinya, hook `SessionStart` mendapatkan `source` dari `startup`, `resume`, `clear`, atau `compact`, dan seterusnya. Lihat [Common input fields](/id/hooks#common-input-fields) dalam referensi untuk bidang bersama, dan bagian setiap acara untuk skema spesifik acara.559Skrip Anda dapat mengurai JSON itu dan bertindak atas bidang apa pun. Hook `UserPromptSubmit` mendapatkan teks `prompt` sebagai gantinya, hook `SessionStart` mendapatkan `source` dari `startup`, `resume`, `clear`, atau `compact`, dan seterusnya. Lihat [Common input fields](/docs/id/hooks#common-input-fields) dalam referensi untuk bidang bersama, dan bagian setiap acara untuk skema spesifik acara.

560 560 

561<h4 id="hook-output">561<h4 id="hook-output">

562 Hook output562 Hook output


579 579 

580Kode keluar menentukan apa yang terjadi selanjutnya:580Kode keluar menentukan apa yang terjadi selanjutnya:

581 581 

582* **Exit 0**: hook melaporkan tidak ada keberatan dan tindakan berlanjut secara normal. Untuk hook `PreToolUse` ini tidak menyetujui panggilan alat: [alur izin](/id/permissions) normal masih berlaku. Untuk hook `UserPromptSubmit`, `UserPromptExpansion`, dan `SessionStart`, apa pun yang Anda tulis ke stdout ditambahkan ke konteks Claude.582* **Exit 0**: hook melaporkan tidak ada keberatan dan tindakan berlanjut secara normal. Untuk hook `PreToolUse` ini tidak menyetujui panggilan alat: [alur izin](/docs/id/permissions) normal masih berlaku. Untuk hook `UserPromptSubmit`, `UserPromptExpansion`, dan `SessionStart`, apa pun yang Anda tulis ke stdout ditambahkan ke konteks Claude.

583* **Exit 2**: tindakan diblokir. Tulis alasan ke stderr, dan Claude menerimanya sebagai umpan balik sehingga dapat menyesuaikan. Beberapa acara tidak dapat diblokir: untuk `SessionStart`, `Setup`, `Notification`, dan lainnya, exit 2 menampilkan stderr kepada pengguna dan eksekusi berlanjut. Lihat [exit code 2 behavior per event](/id/hooks#exit-code-2-behavior-per-event) untuk daftar lengkap.583* **Exit 2**: tindakan diblokir. Tulis alasan ke stderr, dan Claude menerimanya sebagai umpan balik sehingga dapat menyesuaikan. Beberapa acara tidak dapat diblokir: untuk `SessionStart`, `Setup`, `Notification`, dan lainnya, exit 2 menampilkan stderr kepada pengguna dan eksekusi berlanjut. Lihat [exit code 2 behavior per event](/docs/id/hooks#exit-code-2-behavior-per-event) untuk daftar lengkap.

584* **Kode keluar lainnya**: tindakan berlanjut. Transkrip menunjukkan pemberitahuan `<hook name> hook error` diikuti oleh baris pertama stderr; stderr lengkap masuk ke [debug log](/id/hooks#debug-hooks).584* **Kode keluar lainnya**: tindakan berlanjut. Transkrip menunjukkan pemberitahuan `<hook name> hook error` diikuti oleh baris pertama stderr; stderr lengkap masuk ke [debug log](/docs/id/hooks#debug-hooks).

585 585 

586<h4 id="structured-json-output">586<h4 id="structured-json-output">

587 Structured JSON output587 Structured JSON output


607 607 

608Dengan `"deny"`, Claude Code membatalkan panggilan alat dan memberi makan `permissionDecisionReason` kembali ke Claude. Nilai `permissionDecision` ini spesifik untuk `PreToolUse`:608Dengan `"deny"`, Claude Code membatalkan panggilan alat dan memberi makan `permissionDecisionReason` kembali ke Claude. Nilai `permissionDecision` ini spesifik untuk `PreToolUse`:

609 609 

610* `"allow"`: lewati prompt izin interaktif. Aturan deny dan ask, termasuk daftar deny yang dikelola perusahaan, masih berlaku, seperti juga prompt untuk connector tools yang [organisasi Anda atur ke `ask`](/id/mcp#organization-controls-on-connector-tools) dan MCP tools yang ditandai [`requiresUserInteraction`](/id/mcp#require-approval-for-a-specific-tool)610* `"allow"`: lewati prompt izin interaktif. Aturan deny dan ask, termasuk daftar deny yang dikelola perusahaan, masih berlaku, seperti juga prompt untuk connector tools yang [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dan MCP tools yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool)

611* `"deny"`: batalkan panggilan alat dan kirim alasan ke Claude611* `"deny"`: batalkan panggilan alat dan kirim alasan ke Claude

612* `"ask"`: tampilkan prompt izin kepada pengguna seperti biasa612* `"ask"`: tampilkan prompt izin kepada pengguna seperti biasa

613 613 

614Nilai keempat, `"defer"`, tersedia dalam [non-interactive mode](/id/headless) dengan flag `-p`. Ini keluar dari proses dengan panggilan alat yang dipertahankan sehingga pembungkus Agent SDK dapat mengumpulkan input dan melanjutkan. Lihat [Defer a tool call for later](/id/hooks#defer-a-tool-call-for-later) dalam referensi.614Nilai keempat, `"defer"`, tersedia dalam [non-interactive mode](/docs/id/headless) dengan flag `-p`. Ini keluar dari proses dengan panggilan alat yang dipertahankan sehingga pembungkus Agent SDK dapat mengumpulkan input dan melanjutkan. Lihat [Defer a tool call for later](/docs/id/hooks#defer-a-tool-call-for-later) dalam referensi.

615 615 

616Mengembalikan `"allow"` melewati prompt interaktif tetapi tidak mengesampingkan [aturan izin](/id/permissions#manage-permissions). Jika aturan deny cocok dengan panggilan alat, panggilan diblokir bahkan ketika hook Anda mengembalikan `"allow"`. Jika aturan ask cocok, pengguna masih diminta, dan juga connector tools yang [organisasi Anda atur ke `ask`](/id/mcp#organization-controls-on-connector-tools) dan MCP tools yang ditandai [`requiresUserInteraction`](/id/mcp#require-approval-for-a-specific-tool). Ini berarti aturan deny dari cakupan pengaturan apa pun, termasuk [pengaturan terkelola](/id/settings#settings-files), selalu mengambil alih persetujuan hook.616Mengembalikan `"allow"` melewati prompt interaktif tetapi tidak mengesampingkan [aturan izin](/docs/id/permissions#manage-permissions). Jika aturan deny cocok dengan panggilan alat, panggilan diblokir bahkan ketika hook Anda mengembalikan `"allow"`. Jika aturan ask cocok, pengguna masih diminta, dan juga connector tools yang [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dan MCP tools yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool). Ini berarti aturan deny dari cakupan pengaturan apa pun, termasuk [pengaturan terkelola](/docs/id/settings#settings-files), selalu mengambil alih persetujuan hook.

617 617 

618Acara lain menggunakan pola keputusan berbeda. Misalnya, hook `PostToolUse` dan `Stop` menggunakan bidang `decision: "block"` tingkat atas, sementara `PermissionRequest` menggunakan `hookSpecificOutput.decision.behavior`. Lihat [summary table](/id/hooks#decision-control) dalam referensi untuk rincian lengkap berdasarkan acara.618Acara lain menggunakan pola keputusan berbeda. Misalnya, hook `PostToolUse` dan `Stop` menggunakan bidang `decision: "block"` tingkat atas, sementara `PermissionRequest` menggunakan `hookSpecificOutput.decision.behavior`. Lihat [summary table](/docs/id/hooks#decision-control) dalam referensi untuk rincian lengkap berdasarkan acara.

619 619 

620Untuk hook `UserPromptSubmit`, gunakan `hookSpecificOutput.additionalContext` sebagai gantinya untuk menyuntikkan teks ke dalam konteks Claude. Sarangkan `additionalContext` di dalam `hookSpecificOutput`; jika Anda menempatkannya di tingkat atas JSON, Claude Code diam-diam mengabaikannya. Misalnya, output ini menambahkan status cabang saat ini ke setiap prompt:620Untuk hook `UserPromptSubmit`, gunakan `hookSpecificOutput.additionalContext` sebagai gantinya untuk menyuntikkan teks ke dalam konteks Claude. Sarangkan `additionalContext` di dalam `hookSpecificOutput`; jika Anda menempatkannya di tingkat atas JSON, Claude Code diam-diam mengabaikannya. Misalnya, output ini menambahkan status cabang saat ini ke setiap prompt:

621 621 


628}628}

629```629```

630 630 

631Lihat [UserPromptSubmit decision control](/id/hooks#userpromptsubmit-decision-control) untuk bentuk output lengkap, termasuk memblokir prompt dan menetapkan judul sesi.631Lihat [UserPromptSubmit decision control](/docs/id/hooks#userpromptsubmit-decision-control) untuk bentuk output lengkap, termasuk memblokir prompt dan menetapkan judul sesi.

632 632 

633Hooks dengan `type: "prompt"` menangani output secara berbeda: lihat [Prompt-based hooks](#prompt-based-hooks).633Hooks dengan `type: "prompt"` menangani output secara berbeda: lihat [Prompt-based hooks](#prompt-based-hooks).

634 634 


653}653}

654```654```

655 655 

656Matcher `"Edit|Write"` aktif hanya ketika Claude menggunakan alat `Edit` atau `Write`, bukan ketika menggunakan `Bash`, `Read`, atau alat lainnya. Pada Claude Code v2.1.191 atau lebih baru, koma memisahkan alternatif dengan cara yang sama, jadi `"Edit, Write"` setara. Lihat [Matcher patterns](/id/hooks#matcher-patterns) untuk cara nama biasa dan ekspresi reguler dievaluasi.656Matcher `"Edit|Write"` aktif hanya ketika Claude menggunakan alat `Edit` atau `Write`, bukan ketika menggunakan `Bash`, `Read`, atau alat lainnya. Pada Claude Code v2.1.191 atau lebih baru, koma memisahkan alternatif dengan cara yang sama, jadi `"Edit, Write"` setara. Lihat [Matcher patterns](/docs/id/hooks#matcher-patterns) untuk cara nama biasa dan ekspresi reguler dievaluasi.

657 657 

658<Note>658<Note>

659 Claude juga dapat membuat atau memodifikasi file dengan menjalankan perintah shell melalui alat `Bash`. Jika hook Anda harus melihat setiap perubahan file, seperti untuk pemindaian kepatuhan atau pencatatan audit, tambahkan hook [`Stop`](/id/hooks#stop) yang memindai pohon kerja sekali per giliran. Untuk cakupan per-panggilan sebagai gantinya, juga cocokkan `Bash` dan buat skrip Anda mencantumkan file yang dimodifikasi dan tidak dilacak dengan `git status --porcelain`.659 Claude juga dapat membuat atau memodifikasi file dengan menjalankan perintah shell melalui alat `Bash`. Jika hook Anda harus melihat setiap perubahan file, seperti untuk pemindaian kepatuhan atau pencatatan audit, tambahkan hook [`Stop`](/docs/id/hooks#stop) yang memindai pohon kerja sekali per giliran. Untuk cakupan per-panggilan sebagai gantinya, juga cocokkan `Bash` dan buat skrip Anda mencantumkan file yang dimodifikasi dan tidak dilacak dengan `git status --porcelain`.

660</Note>660</Note>

661 661 

662Setiap jenis acara cocok pada bidang spesifik:662Setiap jenis acara cocok pada bidang spesifik:


676| `InstructionsLoaded` | alasan pemuatan | `session_start`, `nested_traversal`, `path_glob_match`, `include`, `compact` |676| `InstructionsLoaded` | alasan pemuatan | `session_start`, `nested_traversal`, `path_glob_match`, `include`, `compact` |

677| `Elicitation` | nama server MCP | nama server MCP yang dikonfigurasi Anda |677| `Elicitation` | nama server MCP | nama server MCP yang dikonfigurasi Anda |

678| `ElicitationResult` | nama server MCP | nilai yang sama seperti `Elicitation` |678| `ElicitationResult` | nama server MCP | nilai yang sama seperti `Elicitation` |

679| `FileChanged` | nama file literal yang dipantau (lihat [FileChanged](/id/hooks#filechanged)) | `.envrc\|.env` |679| `FileChanged` | nama file literal yang dipantau (lihat [FileChanged](/docs/id/hooks#filechanged)) | `.envrc\|.env` |

680| `UserPromptExpansion` | nama perintah | nama skill atau perintah Anda |680| `UserPromptExpansion` | nama perintah | nama skill atau perintah Anda |

681| `UserPromptSubmit`, `PostToolBatch`, `Stop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`, `WorktreeCreate`, `WorktreeRemove`, `CwdChanged`, `MessageDisplay` | tidak ada dukungan matcher | selalu aktif pada setiap kemunculan |681| `UserPromptSubmit`, `PostToolBatch`, `Stop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`, `WorktreeCreate`, `WorktreeRemove`, `CwdChanged`, `MessageDisplay` | tidak ada dukungan matcher | selalu aktif pada setiap kemunculan |

682 682 


706 </Tab>706 </Tab>

707 707 

708 <Tab title="Cocokkan alat MCP">708 <Tab title="Cocokkan alat MCP">

709 Alat MCP menggunakan konvensi penamaan berbeda dari alat bawaan: `mcp__<server>__<tool>`, di mana `<server>` adalah nama server MCP dan `<tool>` adalah alat yang disediakannya. Misalnya, `mcp__github__search_repositories` atau `mcp__filesystem__read_file`. Alat dari [server MCP yang disediakan plugin](/id/mcp#plugin-provided-mcp-servers) menggunakan segmen server yang diberi cakupan sebagai gantinya, seperti `mcp__plugin_my-plugin_db__query`. Gunakan matcher regex untuk menargetkan semua alat dari server spesifik, atau cocokkan di seluruh server dengan pola seperti `mcp__.*__write.*`. Lihat [Match MCP tools](/id/hooks#match-mcp-tools) dalam referensi untuk daftar lengkap contoh.709 Alat MCP menggunakan konvensi penamaan berbeda dari alat bawaan: `mcp__<server>__<tool>`, di mana `<server>` adalah nama server MCP dan `<tool>` adalah alat yang disediakannya. Misalnya, `mcp__github__search_repositories` atau `mcp__filesystem__read_file`. Alat dari [server MCP yang disediakan plugin](/docs/id/mcp#plugin-provided-mcp-servers) menggunakan segmen server yang diberi cakupan sebagai gantinya, seperti `mcp__plugin_my-plugin_db__query`. Gunakan matcher regex untuk menargetkan semua alat dari server spesifik, atau cocokkan di seluruh server dengan pola seperti `mcp__.*__write.*`. Lihat [Match MCP tools](/docs/id/hooks#match-mcp-tools) dalam referensi untuk daftar lengkap contoh.

710 710 

711 Perintah di bawah mengekstrak nama alat dari input JSON hook dengan `jq` dan menulisnya ke stderr. Menulis ke stderr menjaga stdout bersih untuk output JSON dan mengirim pesan ke [debug log](/id/hooks#debug-hooks):711 Perintah di bawah mengekstrak nama alat dari input JSON hook dengan `jq` dan menulisnya ke stderr. Menulis ke stderr menjaga stdout bersih untuk output JSON dan mengirim pesan ke [debug log](/docs/id/hooks#debug-hooks):

712 712 

713 ```json theme={null}713 ```json theme={null}

714 {714 {


752 </Tab>752 </Tab>

753</Tabs>753</Tabs>

754 754 

755Untuk sintaks matcher lengkap, lihat [Hooks reference](/id/hooks#configuration).755Untuk sintaks matcher lengkap, lihat [Hooks reference](/docs/id/hooks#configuration).

756 756 

757<h4 id="filter-by-tool-name-and-arguments-with-the-if-field">757<h4 id="filter-by-tool-name-and-arguments-with-the-if-field">

758 Filter berdasarkan nama alat dan argumen dengan bidang `if`758 Filter berdasarkan nama alat dan argumen dengan bidang `if`

759</h4>759</h4>

760 760 

761Bidang `if` menggunakan [sintaks aturan izin](/id/permissions) untuk memfilter hooks berdasarkan nama alat dan argumen bersama-sama, sehingga proses hook hanya muncul ketika panggilan alat cocok. Ini melampaui `matcher`, yang memfilter pada tingkat grup berdasarkan nama alat saja.761Bidang `if` menggunakan [sintaks aturan izin](/docs/id/permissions) untuk memfilter hooks berdasarkan nama alat dan argumen bersama-sama, sehingga proses hook hanya muncul ketika panggilan alat cocok. Ini melampaui `matcher`, yang memfilter pada tingkat grup berdasarkan nama alat saja.

762 762 

763Misalnya, konfigurasi ini menjalankan hook hanya ketika Claude menggunakan perintah `git` daripada semua perintah Bash:763Misalnya, konfigurasi ini menjalankan hook hanya ketika Claude menggunakan perintah `git` daripada semua perintah Bash:

764 764 


791| `Bash(git *)` | `echo $(date)` | tidak | tidak ada subperintah yang cocok dengan `git *` |791| `Bash(git *)` | `echo $(date)` | tidak | tidak ada subperintah yang cocok dengan `git *` |

792| `Bash(git push *)` | `echo $(date)` | ya | pola yang menentukan lebih dari nama perintah menjalankan hook bagaimanapun pada `$()`, backticks, atau `$VAR` |792| `Bash(git push *)` | `echo $(date)` | ya | pola yang menentukan lebih dari nama perintah menjalankan hook bagaimanapun pada `$()`, backticks, atau `$VAR` |

793 793 

794Filter juga gagal terbuka, menjalankan hook Anda terlepas dari pola, ketika perintah Bash tidak dapat diurai. Karena filter adalah best-effort, gunakan [sistem izin](/id/permissions) daripada hook untuk memberlakukan allow atau deny yang keras.794Filter juga gagal terbuka, menjalankan hook Anda terlepas dari pola, ketika perintah Bash tidak dapat diurai. Karena filter adalah best-effort, gunakan [sistem izin](/docs/id/permissions) daripada hook untuk memberlakukan allow atau deny yang keras.

795 795 

796Bidang `if` menerima pola yang sama seperti aturan izin: `"Bash(git *)"`, `"Edit(*.ts)"`, dan seterusnya. Untuk mencocokkan beberapa nama alat, gunakan handler terpisah masing-masing dengan nilai `if` sendiri, atau cocokkan pada tingkat `matcher` di mana alternasi pipa didukung.796Bidang `if` menerima pola yang sama seperti aturan izin: `"Bash(git *)"`, `"Edit(*.ts)"`, dan seterusnya. Untuk mencocokkan beberapa nama alat, gunakan handler terpisah masing-masing dengan nilai `if` sendiri, atau cocokkan pada tingkat `matcher` di mana alternasi pipa didukung.

797 797 


809| `.claude/settings.json` | Proyek tunggal | Ya, dapat dikomit ke repo |809| `.claude/settings.json` | Proyek tunggal | Ya, dapat dikomit ke repo |

810| `.claude/settings.local.json` | Proyek tunggal | Tidak, gitignored ketika Claude Code membuatnya |810| `.claude/settings.local.json` | Proyek tunggal | Tidak, gitignored ketika Claude Code membuatnya |

811| Pengaturan kebijakan terkelola | Seluruh organisasi | Ya, dikendalikan admin |811| Pengaturan kebijakan terkelola | Seluruh organisasi | Ya, dikendalikan admin |

812| [Plugin](/id/plugins) `hooks/hooks.json` | Ketika plugin diaktifkan | Ya, dikemas dengan plugin |812| [Plugin](/docs/id/plugins) `hooks/hooks.json` | Ketika plugin diaktifkan | Ya, dikemas dengan plugin |

813| [Skill](/id/skills) atau [agent](/id/sub-agents) frontmatter | Saat skill atau agent aktif | Ya, didefinisikan dalam file komponen |813| [Skill](/docs/id/skills) atau [agent](/docs/id/sub-agents) frontmatter | Saat skill atau agent aktif | Ya, didefinisikan dalam file komponen |

814 814 

815Jalankan [`/hooks`](/id/hooks#the-%2Fhooks-menu) di Claude Code untuk menjelajahi semua hooks yang dikonfigurasi dikelompokkan berdasarkan acara.815Jalankan [`/hooks`](/docs/id/hooks#the-%2Fhooks-menu) di Claude Code untuk menjelajahi semua hooks yang dikonfigurasi dikelompokkan berdasarkan acara.

816 816 

817Untuk menonaktifkan hooks, atur `"disableAllHooks": true` dalam file pengaturan Anda. Hooks yang dikonfigurasi dalam pengaturan terkelola masih berjalan kecuali `disableAllHooks` juga diatur di sana.817Untuk menonaktifkan hooks, atur `"disableAllHooks": true` dalam file pengaturan Anda. Hooks yang dikonfigurasi dalam pengaturan terkelola masih berjalan kecuali `disableAllHooks` juga diatur di sana.

818 818 


851}851}

852```852```

853 853 

854Untuk opsi konfigurasi lengkap, lihat [Prompt-based hooks](/id/hooks#prompt-based-hooks) dalam referensi.854Untuk opsi konfigurasi lengkap, lihat [Prompt-based hooks](/docs/id/hooks#prompt-based-hooks) dalam referensi.

855 855 

856<h2 id="agent-based-hooks">856<h2 id="agent-based-hooks">

857 Agent-based hooks857 Agent-based hooks

858</h2>858</h2>

859 859 

860<Warning>860<Warning>

861 Agent hooks bersifat eksperimental. Perilaku dan konfigurasi mungkin berubah dalam rilis mendatang. Untuk alur kerja produksi, lebih suka [command hooks](/id/hooks#command-hook-fields).861 Agent hooks bersifat eksperimental. Perilaku dan konfigurasi mungkin berubah dalam rilis mendatang. Untuk alur kerja produksi, lebih suka [command hooks](/docs/id/hooks#command-hook-fields).

862</Warning>862</Warning>

863 863 

864Ketika verifikasi memerlukan inspeksi file atau menjalankan perintah, gunakan hook `type: "agent"`. Tidak seperti hook prompt yang membuat panggilan LLM tunggal, hook agent menelurkan subagent yang dapat membaca file, mencari kode, dan menggunakan alat lain untuk memverifikasi kondisi sebelum mengembalikan keputusan.864Ketika verifikasi memerlukan inspeksi file atau menjalankan perintah, gunakan hook `type: "agent"`. Tidak seperti hook prompt yang membuat panggilan LLM tunggal, hook agent menelurkan subagent yang dapat membaca file, mencari kode, dan menggunakan alat lain untuk memverifikasi kondisi sebelum mengembalikan keputusan.


887 887 

888Gunakan hook prompt ketika data input hook saja cukup untuk membuat keputusan. Gunakan hook agent ketika Anda perlu memverifikasi sesuatu terhadap keadaan aktual codebase.888Gunakan hook prompt ketika data input hook saja cukup untuk membuat keputusan. Gunakan hook agent ketika Anda perlu memverifikasi sesuatu terhadap keadaan aktual codebase.

889 889 

890Untuk opsi konfigurasi lengkap, lihat [Agent-based hooks](/id/hooks#agent-based-hooks) dalam referensi.890Untuk opsi konfigurasi lengkap, lihat [Agent-based hooks](/docs/id/hooks#agent-based-hooks) dalam referensi.

891 891 

892<h2 id="http-hooks">892<h2 id="http-hooks">

893 HTTP hooks893 HTTP hooks


920}920}

921```921```

922 922 

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

924 924 

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

926 926 

927Untuk opsi konfigurasi lengkap dan penanganan respons, lihat [HTTP hooks](/id/hooks#http-hook-fields) dalam referensi.927Untuk opsi konfigurasi lengkap dan penanganan respons, lihat [HTTP hooks](/docs/id/hooks#http-hook-fields) dalam referensi.

928 928 

929<h2 id="limitations-and-troubleshooting">929<h2 id="limitations-and-troubleshooting">

930 Keterbatasan dan troubleshooting930 Keterbatasan dan troubleshooting


942 * `prompt`: 30 detik.942 * `prompt`: 30 detik.

943 * `agent`: 60 detik.943 * `agent`: 60 detik.

944* Hook `PostToolUse` tidak dapat membatalkan tindakan karena alat sudah dieksekusi.944* Hook `PostToolUse` tidak dapat membatalkan tindakan karena alat sudah dieksekusi.

945* Hook `PermissionRequest` tidak aktif dalam [mode non-interaktif](/id/headless) dengan flag `-p`. Gunakan hook `PreToolUse` untuk keputusan izin otomatis.945* Hook `PermissionRequest` tidak aktif dalam [mode non-interaktif](/docs/id/headless) dengan flag `-p`. Gunakan hook `PreToolUse` untuk keputusan izin otomatis.

946* Hook `Stop` aktif kapan pun Claude selesai merespons, bukan hanya pada penyelesaian tugas. Mereka tidak aktif pada interupsi pengguna. Kesalahan API menjalankan [StopFailure](/id/hooks#stopfailure) sebagai gantinya.946* Hook `Stop` aktif kapan pun Claude selesai merespons, bukan hanya pada penyelesaian tugas. Mereka tidak aktif pada interupsi pengguna. Kesalahan API menjalankan [StopFailure](/docs/id/hooks#stopfailure) sebagai gantinya.

947* Ketika beberapa hook `PreToolUse` mengembalikan [`updatedInput`](/id/hooks#pretooluse) untuk menulis ulang argumen alat, yang terakhir selesai menang. Karena hooks berjalan secara paralel, urutannya tidak deterministik. Hindari memiliki lebih dari satu hook memodifikasi input alat yang sama.947* Ketika beberapa hook `PreToolUse` mengembalikan [`updatedInput`](/docs/id/hooks#pretooluse) untuk menulis ulang argumen alat, yang terakhir selesai menang. Karena hooks berjalan secara paralel, urutannya tidak deterministik. Hindari memiliki lebih dari satu hook memodifikasi input alat yang sama.

948 948 

949<h3 id="hooks-and-permission-modes">949<h3 id="hooks-and-permission-modes">

950 Hooks dan mode izin950 Hooks dan mode izin


952 952 

953Hook `PreToolUse` aktif sebelum pemeriksaan mode izin apa pun. Hook yang mengembalikan `permissionDecision: "deny"` memblokir alat bahkan dalam mode `bypassPermissions` atau dengan `--dangerously-skip-permissions`. Ini memungkinkan Anda menegakkan kebijakan yang pengguna tidak dapat lewati dengan mengubah mode izin mereka.953Hook `PreToolUse` aktif sebelum pemeriksaan mode izin apa pun. Hook yang mengembalikan `permissionDecision: "deny"` memblokir alat bahkan dalam mode `bypassPermissions` atau dengan `--dangerously-skip-permissions`. Ini memungkinkan Anda menegakkan kebijakan yang pengguna tidak dapat lewati dengan mengubah mode izin mereka.

954 954 

955Kebalikannya tidak benar: hook yang mengembalikan `"allow"` tidak melewati aturan deny dari pengaturan, dan tidak dapat menekan prompt untuk alat konektor [organisasi Anda atur ke `ask`](/id/mcp#organization-controls-on-connector-tools) atau alat MCP yang ditandai [`requiresUserInteraction`](/id/mcp#require-approval-for-a-specific-tool). Hooks dapat mengetatkan pembatasan tetapi tidak melonggarkan mereka melampaui apa yang aturan izin izinkan.955Kebalikannya tidak benar: hook yang mengembalikan `"allow"` tidak melewati aturan deny dari pengaturan, dan tidak dapat menekan prompt untuk alat konektor [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) atau alat MCP yang ditandai [`requiresUserInteraction`](/docs/id/mcp#require-approval-for-a-specific-tool). Hooks dapat mengetatkan pembatasan tetapi tidak melonggarkan mereka melampaui apa yang aturan izin izinkan.

956 956 

957<h3 id="hook-not-firing">957<h3 id="hook-not-firing">

958 Hook tidak aktif958 Hook tidak aktif


976 echo '{"tool_name":"Bash","tool_input":{"command":"ls"}}' | ./my-hook.sh976 echo '{"tool_name":"Bash","tool_input":{"command":"ls"}}' | ./my-hook.sh

977 echo $? # Check the exit code977 echo $? # Check the exit code

978 ```978 ```

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

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

981* Jika skrip tidak berjalan sama sekali, buat dapat dieksekusi: `chmod +x ./my-hook.sh`981* Jika skrip tidak berjalan sama sekali, buat dapat dieksekusi: `chmod +x ./my-hook.sh`

982 982 


1007# ... rest of your hook logic1007# ... rest of your hook logic

1008```1008```

1009 1009 

1010Jika hook Anda secara sah memerlukan lebih dari delapan iterasi untuk konvergen, naikkan batas dengan [`CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`](/id/env-vars).1010Jika hook Anda secara sah memerlukan lebih dari delapan iterasi untuk konvergen, naikkan batas dengan [`CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`](/docs/id/env-vars).

1011 1011 

1012<h3 id="json-validation-failed">1012<h3 id="json-validation-failed">

1013 JSON validation failed1013 JSON validation failed


1045 Pelajari lebih lanjut1045 Pelajari lebih lanjut

1046</h2>1046</h2>

1047 1047 

1048* [Hooks reference](/id/hooks): skema acara lengkap, format output JSON, async hooks, dan MCP tool hooks1048* [Hooks reference](/docs/id/hooks): skema acara lengkap, format output JSON, async hooks, dan MCP tool hooks

1049* [Security considerations](/id/hooks#security-considerations): tinjau sebelum menerapkan hooks dalam lingkungan bersama atau produksi1049* [Security considerations](/docs/id/hooks#security-considerations): tinjau sebelum menerapkan hooks dalam lingkungan bersama atau produksi

1050* [Bash command validator example](https://github.com/anthropics/claude-code/blob/main/examples/hooks/bash_command_validator_example.py): implementasi referensi lengkap1050* [Bash command validator example](https://github.com/anthropics/claude-code/blob/main/examples/hooks/bash_command_validator_example.py): implementasi referensi lengkap

Details

7> Referensi teknis lengkap untuk sistem plugin Claude Code, termasuk skema, perintah CLI, dan spesifikasi komponen.7> Referensi teknis lengkap untuk sistem plugin Claude Code, termasuk skema, perintah CLI, dan spesifikasi komponen.

8 8 

9<Tip>9<Tip>

10 Mencari cara memasang plugins? Lihat [Temukan dan pasang plugins](/id/discover-plugins). Untuk membuat plugins, lihat [Plugins](/id/plugins). Untuk mendistribusikan plugins, lihat [Plugin marketplaces](/id/plugin-marketplaces).10 Mencari cara memasang plugins? Lihat [Temukan dan pasang plugins](/docs/id/discover-plugins). Untuk membuat plugins, lihat [Plugins](/docs/id/plugins). Untuk mendistribusikan plugins, lihat [Plugin marketplaces](/docs/id/plugin-marketplaces).

11</Tip>11</Tip>

12 12 

13Referensi ini menyediakan spesifikasi teknis lengkap untuk sistem plugin Claude Code, termasuk skema komponen, perintah CLI, dan alat pengembangan.13Referensi ini menyediakan spesifikasi teknis lengkap untuk sistem plugin Claude Code, termasuk skema komponen, perintah CLI, dan alat pengembangan.


48 48 

49Jika plugin tidak memiliki direktori `skills/` dan tidak memiliki field manifest `skills`, file `SKILL.md` di root plugin dimuat sebagai skill tunggal. Atur field frontmatter `name` untuk mengontrol nama invokasi skill. Tanpanya, Claude Code kembali ke nama direktori instalasi, yang untuk plugins yang dipasang dari marketplace adalah string versi yang berubah pada setiap update. Untuk plugins yang mengirimkan lebih dari satu skill, gunakan tata letak direktori `skills/` yang ditunjukkan di atas.49Jika plugin tidak memiliki direktori `skills/` dan tidak memiliki field manifest `skills`, file `SKILL.md` di root plugin dimuat sebagai skill tunggal. Atur field frontmatter `name` untuk mengontrol nama invokasi skill. Tanpanya, Claude Code kembali ke nama direktori instalasi, yang untuk plugins yang dipasang dari marketplace adalah string versi yang berubah pada setiap update. Untuk plugins yang mengirimkan lebih dari satu skill, gunakan tata letak direktori `skills/` yang ditunjukkan di atas.

50 50 

51Untuk detail lengkap, lihat [Skills](/id/skills).51Untuk detail lengkap, lihat [Skills](/docs/id/skills).

52 52 

53<h3 id="agents">53<h3 id="agents">

54 Agents54 Agents


79 79 

80**Titik integrasi**:80**Titik integrasi**:

81 81 

82* Agents muncul di typeahead [@-mention](/id/sub-agents#invoke-subagents-explicitly) dengan nama yang diberi scope, seperti `my-plugin:code-reviewer`, setelah plugin diaktifkan82* Agents muncul di typeahead [@-mention](/docs/id/sub-agents#invoke-subagents-explicitly) dengan nama yang diberi scope, seperti `my-plugin:code-reviewer`, setelah plugin diaktifkan

83* Claude dapat memanggil agents secara otomatis berdasarkan konteks tugas83* Claude dapat memanggil agents secara otomatis berdasarkan konteks tugas

84* Agents dapat dipanggil secara manual oleh pengguna84* Agents dapat dipanggil secara manual oleh pengguna

85* Plugin agents bekerja bersama agents Claude bawaan85* Plugin agents bekerja bersama agents Claude bawaan

86 86 

87Untuk detail lengkap, lihat [Subagents](/id/sub-agents).87Untuk detail lengkap, lihat [Subagents](/docs/id/sub-agents).

88 88 

89<h3 id="hooks">89<h3 id="hooks">

90 Hooks90 Hooks


116}116}

117```117```

118 118 

119Plugin hooks merespons peristiwa lifecycle yang sama seperti [hooks yang ditentukan pengguna](/id/hooks):119Plugin hooks merespons peristiwa lifecycle yang sama seperti [hooks yang ditentukan pengguna](/docs/id/hooks):

120 120 

121| Event | When it fires |121| Event | When it fires |

122| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |122| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |


138| `TaskCompleted` | When a task is being marked as completed |138| `TaskCompleted` | When a task is being marked as completed |

139| `Stop` | When Claude finishes responding |139| `Stop` | When Claude finishes responding |

140| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |140| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |

141| `TeammateIdle` | When an [agent team](/en/agent-teams) teammate is about to go idle |141| `TeammateIdle` | When an [agent team](/docs/en/agent-teams) teammate is about to go idle |

142| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |142| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |

143| `ConfigChange` | When a configuration file changes during a session |143| `ConfigChange` | When a configuration file changes during a session |

144| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |144| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |

145| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |145| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |

146| `WorktreeCreate` | When a worktree is being created via `--worktree` or `isolation: "worktree"`. Replaces default git behavior |146| `WorktreeCreate` | When a worktree is being created via `--worktree`, `isolation: "worktree"`, or for a background session. Replaces default git behavior |

147| `WorktreeRemove` | When a worktree is being removed, either at session exit or when a subagent finishes |147| `WorktreeRemove` | When a worktree is being removed at session exit, when a subagent finishes, or when you delete a background session |

148| `PreCompact` | Before context compaction |148| `PreCompact` | Before context compaction |

149| `PostCompact` | After context compaction completes |149| `PostCompact` | After context compaction completes |

150| `Elicitation` | When an MCP server requests user input during a tool call |150| `Elicitation` | When an MCP server requests user input during a tool call |


155 155 

156* `command`: jalankan perintah shell atau scripts156* `command`: jalankan perintah shell atau scripts

157* `http`: kirim JSON event sebagai POST request ke URL157* `http`: kirim JSON event sebagai POST request ke URL

158* `mcp_tool`: panggil tool pada [MCP server](/id/mcp) yang dikonfigurasi158* `mcp_tool`: panggil tool pada [MCP server](/docs/id/mcp) yang dikonfigurasi

159* `prompt`: evaluasi prompt dengan LLM (menggunakan placeholder `$ARGUMENTS` untuk konteks)159* `prompt`: evaluasi prompt dengan LLM (menggunakan placeholder `$ARGUMENTS` untuk konteks)

160* `agent`: jalankan verifier agentic dengan tools untuk tugas verifikasi kompleks160* `agent`: jalankan verifier agentic dengan tools untuk tugas verifikasi kompleks

161 161 

162Hooks yang menargetkan [MCP server bundel](/id/mcp#plugin-provided-mcp-servers) plugin itu sendiri harus menggunakan nama yang diberi scope. Tool matchers dan field `if` mengambil nama tool yang diberi scope `mcp__plugin_<plugin-name>_<server-name>__<tool>`, dan field `server` hook `mcp_tool` mengambil `plugin:<plugin-name>:<server-name>`. Matcher yang ditulis terhadap kunci server bare tidak pernah aktif. Lihat [Match MCP tools](/id/hooks#match-mcp-tools) dan [Plugin-provided MCP servers](/id/mcp#plugin-provided-mcp-servers).162Hooks yang menargetkan [MCP server bundel](/docs/id/mcp#plugin-provided-mcp-servers) plugin itu sendiri harus menggunakan nama yang diberi scope. Tool matchers dan field `if` mengambil nama tool yang diberi scope `mcp__plugin_<plugin-name>_<server-name>__<tool>`, dan field `server` hook `mcp_tool` mengambil `plugin:<plugin-name>:<server-name>`. Matcher yang ditulis terhadap kunci server bare tidak pernah aktif. Lihat [Match MCP tools](/docs/id/hooks#match-mcp-tools) dan [Plugin-provided MCP servers](/docs/id/mcp#plugin-provided-mcp-servers).

163 163 

164<h3 id="mcp-servers">164<h3 id="mcp-servers">

165 MCP servers165 MCP servers


300 300 

301Plugins dapat mendeklarasikan monitors latar belakang yang Claude Code mulai secara otomatis saat plugin aktif. Setiap monitor menjalankan perintah shell untuk seumur hidup sesi dan mengirimkan setiap baris stdout ke Claude sebagai notifikasi, sehingga Claude dapat bereaksi terhadap entri log, perubahan status, atau peristiwa yang dipolling tanpa diminta untuk memulai watch itu sendiri.301Plugins dapat mendeklarasikan monitors latar belakang yang Claude Code mulai secara otomatis saat plugin aktif. Setiap monitor menjalankan perintah shell untuk seumur hidup sesi dan mengirimkan setiap baris stdout ke Claude sebagai notifikasi, sehingga Claude dapat bereaksi terhadap entri log, perubahan status, atau peristiwa yang dipolling tanpa diminta untuk memulai watch itu sendiri.

302 302 

303Plugin monitors menggunakan mekanisme yang sama seperti [Monitor tool](/id/tools-reference#monitor-tool) dan berbagi batasan ketersediaannya. Mereka hanya berjalan dalam sesi CLI interaktif, berjalan tanpa sandbox pada tingkat kepercayaan yang sama seperti [hooks](#hooks), dan dilewati pada host di mana Monitor tool tidak tersedia.303Plugin monitors menggunakan mekanisme yang sama seperti [Monitor tool](/docs/id/tools-reference#monitor-tool) dan berbagi batasan ketersediaannya. Mereka hanya berjalan dalam sesi CLI interaktif, berjalan tanpa sandbox pada tingkat kepercayaan yang sama seperti [hooks](#hooks), dan dilewati pada host di mana Monitor tool tidak tersedia.

304 304 

305**Lokasi**: `monitors/monitors.json` di root plugin, atau inline di `plugin.json`305**Lokasi**: `monitors/monitors.json` di root plugin, atau inline di `plugin.json`

306 306 


342 342 

343Nilai `command` mendukung [substitusi variabel](#environment-variables) `${CLAUDE_PLUGIN_ROOT}`, `${CLAUDE_PLUGIN_DATA}`, dan `${CLAUDE_PROJECT_DIR}`, plus `${ENV_VAR}` apa pun dari lingkungan. Awali perintah dengan `cd "${CLAUDE_PLUGIN_ROOT}" && ` jika script perlu berjalan dari direktori plugin itu sendiri.343Nilai `command` mendukung [substitusi variabel](#environment-variables) `${CLAUDE_PLUGIN_ROOT}`, `${CLAUDE_PLUGIN_DATA}`, dan `${CLAUDE_PROJECT_DIR}`, plus `${ENV_VAR}` apa pun dari lingkungan. Awali perintah dengan `cd "${CLAUDE_PLUGIN_ROOT}" && ` jika script perlu berjalan dari direktori plugin itu sendiri.

344 344 

345Perintah `command` monitor tidak dapat mereferensikan nilai [`${user_config.*}`](#user-configuration). Perintah berjalan melalui shell, jadi Claude Code menolak monitor dengan [error](/id/errors#plugin-command-references-user-config) daripada mengganti nilai. Proses monitor tidak menerima variabel lingkungan `CLAUDE_PLUGIN_OPTION_<KEY>`, jadi biarkan script monitor membaca nilai dari file config yang dimilikinya. Sebelum v2.1.207, perintah monitor mengganti nilai `${user_config.*}`.345Perintah `command` monitor tidak dapat mereferensikan nilai [`${user_config.*}`](#user-configuration). Perintah berjalan melalui shell, jadi Claude Code menolak monitor dengan [error](/docs/id/errors#plugin-command-references-user-config) daripada mengganti nilai. Proses monitor tidak menerima variabel lingkungan `CLAUDE_PLUGIN_OPTION_<KEY>`, jadi biarkan script monitor membaca nilai dari file config yang dimilikinya. Sebelum v2.1.207, perintah monitor mengganti nilai `${user_config.*}`.

346 346 

347Menonaktifkan plugin di tengah sesi tidak menghentikan monitors yang sudah berjalan. Mereka berhenti saat sesi berakhir.347Menonaktifkan plugin di tengah sesi tidak menghentikan monitors yang sudah berjalan. Mereka berhenti saat sesi berakhir.

348 348 


379| `user` | `~/.claude/settings.json` | Plugin pribadi tersedia di semua proyek (default) |379| `user` | `~/.claude/settings.json` | Plugin pribadi tersedia di semua proyek (default) |

380| `project` | `.claude/settings.json` | Plugin tim yang dibagikan melalui version control |380| `project` | `.claude/settings.json` | Plugin tim yang dibagikan melalui version control |

381| `local` | `.claude/settings.local.json` | Plugin khusus proyek, gitignored |381| `local` | `.claude/settings.local.json` | Plugin khusus proyek, gitignored |

382| `managed` | [Pengaturan terkelola](/id/settings#settings-files) | Plugin terkelola (read-only, hanya update) |382| `managed` | [Pengaturan terkelola](/docs/id/settings#settings-files) | Plugin terkelola (read-only, hanya update) |

383 383 

384Plugins menggunakan sistem cakupan yang sama dengan konfigurasi Claude Code lainnya. Untuk instruksi instalasi dan flag cakupan, lihat [Pasang plugins](/id/discover-plugins#install-plugins). Untuk penjelasan lengkap tentang cakupan, lihat [Configuration scopes](/id/settings#configuration-scopes).384Plugins menggunakan sistem cakupan yang sama dengan konfigurasi Claude Code lainnya. Untuk instruksi instalasi dan flag cakupan, lihat [Pasang plugins](/docs/id/discover-plugins#install-plugins). Untuk penjelasan lengkap tentang cakupan, lihat [Configuration scopes](/docs/id/settings#configuration-scopes).

385 385 

386***386***

387 387 


395 395 

396| Apa yang Anda miliki | Apa itu |396| Apa yang Anda miliki | Apa itu |

397| :-------------------------------------------- | :---------------------------------------------------------------------------------------------------- |397| :-------------------------------------------- | :---------------------------------------------------------------------------------------------------- |

398| `<skills-dir>/foo/SKILL.md` tanpa manifest | Sebuah [skill](/id/skills) biasa bernama `foo` |398| `<skills-dir>/foo/SKILL.md` tanpa manifest | Sebuah [skill](/docs/id/skills) biasa bernama `foo` |

399| `<skills-dir>/foo/.claude-plugin/plugin.json` | Plugin `foo@skills-dir`, yang dapat menggabungkan skills, agents, hooks, dan lainnya miliknya sendiri |399| `<skills-dir>/foo/.claude-plugin/plugin.json` | Plugin `foo@skills-dir`, yang dapat menggabungkan skills, agents, hooks, dan lainnya miliknya sendiri |

400| `<plugin>/skills/bar/SKILL.md` | Skill `bar` yang dikemas di dalam plugin |400| `<plugin>/skills/bar/SKILL.md` | Skill `bar` yang dikemas di dalam plugin |

401 401 


406| Direktori skills | Cakupan | Dimuat |406| Direktori skills | Cakupan | Dimuat |

407| :---------------------- | :------- | :---------------------------------------------------------------------------------- |407| :---------------------- | :------- | :---------------------------------------------------------------------------------- |

408| `~/.claude/skills/` | personal | Di setiap proyek, karena lokasi hanya milik Anda |408| `~/.claude/skills/` | personal | Di setiap proyek, karena lokasi hanya milik Anda |

409| `<cwd>/.claude/skills/` | project | Hanya setelah Anda menerima dialog [trust](/id/settings) workspace untuk folder itu |409| `<cwd>/.claude/skills/` | project | Hanya setelah Anda menerima dialog [trust](/docs/id/settings) workspace untuk folder itu |

410 410 

411Plugin cakupan proyek diperiksa ke dalam repositori dan mencapai setiap kolaborator yang mengklonnya. Karena konten itu berasal dari repositori daripada dari Anda, itu dimuat hanya setelah gerbang kepercayaan yang sama yang mengatur `.claude/settings.json`, dan komponen yang menjalankan kode dibatasi lebih lanjut:411Plugin cakupan proyek diperiksa ke dalam repositori dan mencapai setiap kolaborator yang mengklonnya. Karena konten itu berasal dari repositori daripada dari Anda, itu dimuat hanya setelah gerbang kepercayaan yang sama yang mengatur `.claude/settings.json`, dan komponen yang menjalankan kode dibatasi lebih lanjut:

412 412 

413* MCP servers yang dideklarasikannya melalui [persetujuan per-server yang sama](/id/mcp) seperti `.mcp.json` proyek413* MCP servers yang dideklarasikannya melalui [persetujuan per-server yang sama](/docs/id/mcp) seperti `.mcp.json` proyek

414* LSP servers dimulai hanya setelah Anda mempercayai workspace414* LSP servers dimulai hanya setelah Anda mempercayai workspace

415* [Background monitors](#monitors) tidak dimuat415* [Background monitors](#monitors) tidak dimuat

416 416 

417Plugin cakupan personal tidak memiliki batasan ini.417Plugin cakupan personal tidak memiliki batasan ini.

418 418 

419<Warning>419<Warning>

420 Plugin `@skills-dir` cakupan proyek dimuat hanya dari `.claude/skills/` direktori tempat Anda memulai Claude Code. Mereka tidak [berjalan ke root repositori](/id/skills#automatic-discovery-from-parent-and-nested-directories) seperti yang dilakukan skills dan commands biasa, jadi meluncurkan dari subdirektori melewatkan plugin yang tinggal di root repo. Luncurkan dari root repositori, atau jalankan `/reload-plugins` setelah mengubah direktori.420 Plugin `@skills-dir` cakupan proyek dimuat hanya dari `.claude/skills/` direktori tempat Anda memulai Claude Code. Mereka tidak [berjalan ke root repositori](/docs/id/skills#automatic-discovery-from-parent-and-nested-directories) seperti yang dilakukan skills dan commands biasa, jadi meluncurkan dari subdirektori melewatkan plugin yang tinggal di root repo. Luncurkan dari root repositori, atau jalankan `/reload-plugins` setelah mengubah direktori.

421</Warning>421</Warning>

422 422 

423<h3 id="edit-reload-and-disable-a-skills-directory-plugin">423<h3 id="edit-reload-and-disable-a-skills-directory-plugin">

424 Edit, reload, dan disable skills-directory plugin424 Edit, reload, dan disable skills-directory plugin

425</h3>425</h3>

426 426 

427Perubahan yang Anda buat pada `SKILL.md` skill berlaku segera dalam sesi saat ini. Perubahan pada komponen plugin lainnya, seperti `hooks/`, `.mcp.json`, `agents/`, dan `output-styles/`, tidak. Jalankan `/reload-plugins` atau restart Claude Code untuk mengambilnya. Lihat [Live change detection](/id/skills#live-change-detection).427Perubahan yang Anda buat pada `SKILL.md` skill berlaku segera dalam sesi saat ini. Perubahan pada komponen plugin lainnya, seperti `hooks/`, `.mcp.json`, `agents/`, dan `output-styles/`, tidak. Jalankan `/reload-plugins` atau restart Claude Code untuk mengambilnya. Lihat [Live change detection](/docs/id/skills#live-change-detection).

428 428 

429Untuk menghentikan loading skills-directory plugin, hapus foldernya atau nonaktifkan berdasarkan nama. Tidak ada langkah `uninstall` karena tidak ada yang dipasang dari marketplace.429Untuk menghentikan loading skills-directory plugin, hapus foldernya atau nonaktifkan berdasarkan nama. Tidak ada langkah `uninstall` karena tidak ada yang dipasang dari marketplace.

430 430 


487 487 

488| Field | Tipe | Deskripsi | Contoh |488| Field | Tipe | Deskripsi | Contoh |

489| :----- | :----- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------- |489| :----- | :----- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------- |

490| `name` | string | Pengenal unik (kebab-case, tanpa spasi). Saat [entri marketplace](/id/plugin-marketplaces#plugin-entries) mencantumkan plugin dengan nama berbeda, nama entri marketplace adalah yang digunakan oleh kunci `enabledPlugins` dan `/plugin` | `"deployment-tools"` |490| `name` | string | Pengenal unik (kebab-case, tanpa spasi). Saat [entri marketplace](/docs/id/plugin-marketplaces#plugin-entries) mencantumkan plugin dengan nama berbeda, nama entri marketplace adalah yang digunakan oleh kunci `enabledPlugins` dan `/plugin` | `"deployment-tools"` |

491 491 

492Nama ini digunakan untuk namespacing komponen. Misalnya, di UI, agent `agent-creator` untuk plugin dengan nama `plugin-dev` akan muncul sebagai `plugin-dev:agent-creator`.492Nama ini digunakan untuk namespacing komponen. Misalnya, di UI, agent `agent-creator` untuk plugin dengan nama `plugin-dev` akan muncul sebagai `plugin-dev:agent-creator`.

493 493 


533`defaultEnabled` adalah fallback saat tidak ada yang lain telah memutuskan status plugin. Dua hal mengambil alih:533`defaultEnabled` adalah fallback saat tidak ada yang lain telah memutuskan status plugin. Dua hal mengambil alih:

534 534 

535* **Pengaturan pengguna**: entri untuk plugin di `enabledPlugins` pada cakupan pengaturan apa pun. Setelah ditulis, itu bertahan di seluruh update dan reinstall plugin, jadi mengubah `defaultEnabled` dalam rilis kemudian tidak membalik pengguna yang ada.535* **Pengaturan pengguna**: entri untuk plugin di `enabledPlugins` pada cakupan pengaturan apa pun. Setelah ditulis, itu bertahan di seluruh update dan reinstall plugin, jadi mengubah `defaultEnabled` dalam rilis kemudian tidak membalik pengguna yang ada.

536* **Persyaratan dependensi**: ketika plugin diperlukan oleh yang lain yang aktif, Claude Code menulis `true` untuk itu saat waktu instalasi atau enable. Itu memberikannya pengaturan eksplisit, jadi defaultnya tidak lagi berlaku. Lihat [Enable or disable a plugin with dependencies](/id/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies).536* **Persyaratan dependensi**: ketika plugin diperlukan oleh yang lain yang aktif, Claude Code menulis `true` untuk itu saat waktu instalasi atau enable. Itu memberikannya pengaturan eksplisit, jadi defaultnya tidak lagi berlaku. Lihat [Enable or disable a plugin with dependencies](/docs/id/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies).

537 537 

538Field yang sama dapat muncul dalam entri marketplace plugin, di mana itu mengambil alih nilai di `plugin.json`. Lihat [Optional plugin fields](/id/plugin-marketplaces#optional-plugin-fields).538Field yang sama dapat muncul dalam entri marketplace plugin, di mana itu mengambil alih nilai di `plugin.json`. Lihat [Optional plugin fields](/docs/id/plugin-marketplaces#optional-plugin-fields).

539 539 

540<h3 id="component-path-fields">540<h3 id="component-path-fields">

541 Field jalur komponen541 Field jalur komponen


551| `outputStyles` | string\|array | File/direktori gaya output khusus (menggantikan default `output-styles/`) | `"./styles/"` |551| `outputStyles` | string\|array | File/direktori gaya output khusus (menggantikan default `output-styles/`) | `"./styles/"` |

552| `lspServers` | string\|array\|object | Konfigurasi [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) untuk intelijen kode (buka definisi, temukan referensi, dll.) | `"./.lsp.json"` |552| `lspServers` | string\|array\|object | Konfigurasi [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) untuk intelijen kode (buka definisi, temukan referensi, dll.) | `"./.lsp.json"` |

553| `experimental.themes` | string\|array | File/direktori tema warna (menggantikan default `themes/`). Lihat [Themes](#themes) | `"./themes/"` |553| `experimental.themes` | string\|array | File/direktori tema warna (menggantikan default `themes/`). Lihat [Themes](#themes) | `"./themes/"` |

554| `experimental.monitors` | string\|array | Konfigurasi [Monitor](/id/tools-reference#monitor-tool) latar belakang yang dimulai secara otomatis saat plugin aktif. Lihat [Monitors](#monitors) | `"./monitors.json"` |554| `experimental.monitors` | string\|array | Konfigurasi [Monitor](/docs/id/tools-reference#monitor-tool) latar belakang yang dimulai secara otomatis saat plugin aktif. Lihat [Monitors](#monitors) | `"./monitors.json"` |

555| `userConfig` | object | Nilai yang dapat dikonfigurasi pengguna yang diminta saat enable. Lihat [User configuration](#user-configuration) | Lihat di bawah |555| `userConfig` | object | Nilai yang dapat dikonfigurasi pengguna yang diminta saat enable. Lihat [User configuration](#user-configuration) | Lihat di bawah |

556| `channels` | array | Deklarasi channel untuk message injection (Telegram, Slack, Discord style). Lihat [Channels](#channels) | Lihat di bawah |556| `channels` | array | Deklarasi channel untuk message injection (Telegram, Slack, Discord style). Lihat [Channels](#channels) | Lihat di bawah |

557| `dependencies` | array | Plugin lain yang diperlukan plugin ini, secara opsional dengan batasan versi semver. Lihat [Constrain plugin dependency versions](/id/plugin-dependencies) | `[{ "name": "secrets-vault", "version": "~2.1.0" }]` |557| `dependencies` | array | Plugin lain yang diperlukan plugin ini, secara opsional dengan batasan versi semver. Lihat [Constrain plugin dependency versions](/docs/id/plugin-dependencies) | `[{ "name": "secrets-vault", "version": "~2.1.0" }]` |

558 558 

559<h3 id="experimental-components">559<h3 id="experimental-components">

560 Komponen eksperimental560 Komponen eksperimental


601 601 

602Setiap nilai tersedia untuk substitusi sebagai `${user_config.KEY}` di konfigurasi MCP dan LSP server dan perintah hook. Nilai non-sensitif juga dapat disubstitusi dalam konten skill dan agent. Semua nilai diekspor ke proses hook sebagai variabel lingkungan `CLAUDE_PLUGIN_OPTION_<KEY>`, di mana `<KEY>` adalah kunci opsi yang dikapitalisasi.602Setiap nilai tersedia untuk substitusi sebagai `${user_config.KEY}` di konfigurasi MCP dan LSP server dan perintah hook. Nilai non-sensitif juga dapat disubstitusi dalam konten skill dan agent. Semua nilai diekspor ke proses hook sebagai variabel lingkungan `CLAUDE_PLUGIN_OPTION_<KEY>`, di mana `<KEY>` adalah kunci opsi yang dikapitalisasi.

603 603 

604Field yang berjalan dalam shell menolak `${user_config.*}`: mensubstitusi nilai yang dikonfigurasi ke dalam perintah shell akan membiarkan shell menjalankan apa pun yang nilai itu berisi, jadi komponen gagal dengan [error](/id/errors#plugin-command-references-user-config) sebagai gantinya. Setiap field yang ditolak memiliki cara alternatif untuk melewatkan nilai:604Field yang berjalan dalam shell menolak `${user_config.*}`: mensubstitusi nilai yang dikonfigurasi ke dalam perintah shell akan membiarkan shell menjalankan apa pun yang nilai itu berisi, jadi komponen gagal dengan [error](/docs/id/errors#plugin-command-references-user-config) sebagai gantinya. Setiap field yang ditolak memiliki cara alternatif untuk melewatkan nilai:

605 605 

606| Field yang ditolak | Cara melewatkan nilai |606| Field yang ditolak | Cara melewatkan nilai |

607| :--------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------- |607| :--------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------- |

608| Perintah hook bentuk shell | Gunakan [exec form](/id/hooks#exec-form-and-shell-form) dengan `args`, atau baca `CLAUDE_PLUGIN_OPTION_<KEY>` dari lingkungan hook |608| Perintah hook bentuk shell | Gunakan [exec form](/docs/id/hooks#exec-form-and-shell-form) dengan `args`, atau baca `CLAUDE_PLUGIN_OPTION_<KEY>` dari lingkungan hook |

609| Perintah [Monitor](#monitors) | Baca nilai dari file konfigurasi dalam script |609| Perintah [Monitor](#monitors) | Baca nilai dari file konfigurasi dalam script |

610| MCP [`headersHelper`](/id/mcp#use-dynamic-headers-for-custom-authentication) | Baca nilai dari file konfigurasi dalam script |610| MCP [`headersHelper`](/docs/id/mcp#use-dynamic-headers-for-custom-authentication) | Baca nilai dari file konfigurasi dalam script |

611 611 

612Sebelum v2.1.207, field ini mensubstitusi nilai `${user_config.KEY}`; perbarui plugins yang mengandalkan ini.612Sebelum v2.1.207, field ini mensubstitusi nilai `${user_config.KEY}`; perbarui plugins yang mengandalkan ini.

613 613 

614Nilai non-sensitif disimpan di bawah kunci [`pluginConfigs`](/id/settings#pluginconfigs) di `settings.json` sebagai `pluginConfigs[<plugin-id>].options`. {/* min-version: 2.1.207 */}Claude Code menulis kunci ke pengaturan pengguna dan membacanya kembali dari pengaturan pengguna, flag `--settings`, dan pengaturan yang dikelola saja; entri di `.claude/settings.json` atau `.claude/settings.local.json` proyek diabaikan. Sebelum v2.1.207, Claude Code juga membaca pengaturan proyek dan lokal.614Nilai non-sensitif disimpan di bawah kunci [`pluginConfigs`](/docs/id/settings#pluginconfigs) di `settings.json` sebagai `pluginConfigs[<plugin-id>].options`. {/* min-version: 2.1.207 */}Claude Code menulis kunci ke pengaturan pengguna dan membacanya kembali dari pengaturan pengguna, flag `--settings`, dan pengaturan yang dikelola saja; entri di `.claude/settings.json` atau `.claude/settings.local.json` proyek diabaikan. Sebelum v2.1.207, Claude Code juga membaca pengaturan proyek dan lokal.

615 615 

616Nilai sensitif masuk ke Keychain macOS, atau ke `~/.claude/.credentials.json` di platform di mana keychain yang didukung tidak tersedia. Penyimpanan keychain dibagikan dengan token OAuth dan memiliki batas total sekitar 2 KB, jadi jaga nilai sensitif tetap kecil.616Nilai sensitif masuk ke Keychain macOS, atau ke `~/.claude/.credentials.json` di platform di mana keychain yang didukung tidak tersedia. Penyimpanan keychain dibagikan dengan token OAuth dan memiliki batas total sekitar 2 KB, jadi jaga nilai sensitif tetap kecil.

617 617 


653Apakah jalur khusus menggantikan atau memperluas direktori default plugin tergantung pada field:653Apakah jalur khusus menggantikan atau memperluas direktori default plugin tergantung pada field:

654 654 

655* **Menggantikan default**: `commands`, `agents`, `outputStyles`, `experimental.themes`, `experimental.monitors`. Misalnya, saat manifest menentukan `commands`, direktori default `commands/` tidak dipindai. Untuk menyimpan default dan menambahkan lebih banyak, sertakan secara eksplisit: `"commands": ["./commands/", "./extras/"]`655* **Menggantikan default**: `commands`, `agents`, `outputStyles`, `experimental.themes`, `experimental.monitors`. Misalnya, saat manifest menentukan `commands`, direktori default `commands/` tidak dipindai. Untuk menyimpan default dan menambahkan lebih banyak, sertakan secara eksplisit: `"commands": ["./commands/", "./extras/"]`

656* **Menambah default**: `skills`. Direktori default `skills/` selalu dipindai, dan direktori yang tercantum di `skills` dimuat bersama dengannya. Pengecualian: untuk [entri marketplace yang `source`-nya diselesaikan ke root marketplace](/id/plugin-marketplaces#advanced-plugin-entries), mendeklarasikan subdirektori khusus menggantikan scan default `skills/`656* **Menambah default**: `skills`. Direktori default `skills/` selalu dipindai, dan direktori yang tercantum di `skills` dimuat bersama dengannya. Pengecualian: untuk [entri marketplace yang `source`-nya diselesaikan ke root marketplace](/docs/id/plugin-marketplaces#advanced-plugin-entries), mendeklarasikan subdirektori khusus menggantikan scan default `skills/`

657* **Aturan penggabungan sendiri**: [hooks](#hooks), [MCP servers](#mcp-servers), dan [LSP servers](#lsp-servers). Lihat setiap bagian untuk cara beberapa sumber digabungkan657* **Aturan penggabungan sendiri**: [hooks](#hooks), [MCP servers](#mcp-servers), dan [LSP servers](#lsp-servers). Lihat setiap bagian untuk cara beberapa sumber digabungkan

658 658 

659Saat plugin memiliki folder default dan kunci manifest yang cocok, Claude Code v2.1.140 dan yang lebih baru menandai folder yang diabaikan di `claude plugin list` dan tampilan detail `/plugin`. Plugin masih dimuat menggunakan jalur manifest. Tidak ada peringatan yang ditampilkan saat kunci manifest menunjuk ke folder default, misalnya `"commands": ["./commands/deploy.md"]`, karena folder ditangani secara eksplisit dalam hal itu.659Saat plugin memiliki folder default dan kunci manifest yang cocok, Claude Code v2.1.140 dan yang lebih baru menandai folder yang diabaikan di `claude plugin list` dan tampilan detail `/plugin`. Plugin masih dimuat menggunakan jalur manifest. Tidak ada peringatan yang ditampilkan saat kunci manifest menunjuk ke folder default, misalnya `"commands": ["./commands/deploy.md"]`, karena folder ditangani secara eksplisit dalam hal itu.


704| Server MCP `http`, `sse`, `ws` | `url`, `headers`, `headersHelper` |704| Server MCP `http`, `sse`, `ws` | `url`, `headers`, `headersHelper` |

705| Server LSP | `command`, `args`, `env`, `workspaceFolder` |705| Server LSP | `command`, `args`, `env`, `workspaceFolder` |

706 706 

707Dalam perintah hook, gunakan [exec form](/id/hooks#exec-form-and-shell-form) dengan `args` sehingga setiap jalur dilewatkan sebagai satu argumen tanpa quoting. Dalam hook bentuk shell dan perintah monitor, bungkus variabel dalam tanda kutip ganda, seperti `"${CLAUDE_PROJECT_DIR}/scripts/server.sh"`. Hook bentuk shell ini menjalankan script yang disertakan dengan plugin:707Dalam perintah hook, gunakan [exec form](/docs/id/hooks#exec-form-and-shell-form) dengan `args` sehingga setiap jalur dilewatkan sebagai satu argumen tanpa quoting. Dalam hook bentuk shell dan perintah monitor, bungkus variabel dalam tanda kutip ganda, seperti `"${CLAUDE_PROJECT_DIR}/scripts/server.sh"`. Hook bentuk shell ini menjalankan script yang disertakan dengan plugin:

708 708 

709```json theme={null}709```json theme={null}

710{710{


727 727 

728Saat plugin diperbarui di tengah sesi, perintah hook, monitor, MCP server, dan LSP server terus menggunakan jalur versi sebelumnya. Jalankan `/reload-plugins` untuk mengalihkan hooks, MCP server, dan LSP server ke jalur baru; monitor memerlukan restart sesi.728Saat plugin diperbarui di tengah sesi, perintah hook, monitor, MCP server, dan LSP server terus menggunakan jalur versi sebelumnya. Jalankan `/reload-plugins` untuk mengalihkan hooks, MCP server, dan LSP server ke jalur baru; monitor memerlukan restart sesi.

729 729 

730MCP server juga dapat memanggil permintaan `roots/list` untuk membaca direktori kerja sesi saat runtime. Lihat [apa yang dikembalikan `roots/list` dan kapan Claude Code memberi tahu server tentang perubahan](/id/mcp#option-3-add-a-local-stdio-server).730MCP server juga dapat memanggil permintaan `roots/list` untuk membaca direktori kerja sesi saat runtime. Lihat [apa yang dikembalikan `roots/list` dan kapan Claude Code memberi tahu server tentang perubahan](/docs/id/mcp#option-3-add-a-local-stdio-server).

731 731 

732<h4 id="persistent-data-directory">732<h4 id="persistent-data-directory">

733 Direktori data persisten733 Direktori data persisten


893| **LSP servers** | `.lsp.json` | Konfigurasi language server |893| **LSP servers** | `.lsp.json` | Konfigurasi language server |

894| **Monitors** | `monitors/monitors.json` | Konfigurasi monitor latar belakang |894| **Monitors** | `monitors/monitors.json` | Konfigurasi monitor latar belakang |

895| **Executables** | `bin/` | Executables ditambahkan ke `PATH` Bash tool. File di sini dapat dipanggil sebagai perintah bare di panggilan Bash tool apa pun saat plugin diaktifkan |895| **Executables** | `bin/` | Executables ditambahkan ke `PATH` Bash tool. File di sini dapat dipanggil sebagai perintah bare di panggilan Bash tool apa pun saat plugin diaktifkan |

896| **Settings** | `settings.json` | Konfigurasi default yang diterapkan saat plugin diaktifkan. Saat ini hanya kunci [`agent`](/id/sub-agents) dan [`subagentStatusLine`](/id/statusline#subagent-status-lines) yang didukung |896| **Settings** | `settings.json` | Konfigurasi default yang diterapkan saat plugin diaktifkan. Saat ini hanya kunci [`agent`](/docs/id/sub-agents) dan [`subagentStatusLine`](/docs/id/statusline#subagent-status-lines) yang didukung |

897 897 

898***898***

899 899 


942| `mcp` | `.mcp.json` dengan contoh server HTTP dan stdio |942| `mcp` | `.mcp.json` dengan contoh server HTTP dan stdio |

943| `lsp` | Contoh `.lsp.json` language-server |943| `lsp` | Contoh `.lsp.json` language-server |

944| `output-style` | `output-styles/<name>.md` yang berlaku otomatis saat plugin diaktifkan |944| `output-style` | `output-styles/<name>.md` yang berlaku otomatis saat plugin diaktifkan |

945| `channel` | [Channel](/id/channels) berbasis MCP: server stdio (`server.ts`), `.mcp.json`-nya, dan `package.json` |945| `channel` | [Channel](/docs/id/channels) berbasis MCP: server stdio (`server.ts`), `.mcp.json`-nya, dan `package.json` |

946 946 

947Plugin yang di-scaffold menggunakan sumber `@skills-dir` daripada marketplace. Admin dapat memblokir sumber ini dengan `strictKnownMarketplaces` atau dengan menambahkan `{"source": "skills-dir"}` ke `blockedMarketplaces` dalam [managed settings](/id/plugin-marketplaces#managed-marketplace-restrictions). Saat diblokir, `plugin init` gagal sebelum menulis.947Plugin yang di-scaffold menggunakan sumber `@skills-dir` daripada marketplace. Admin dapat memblokir sumber ini dengan `strictKnownMarketplaces` atau dengan menambahkan `{"source": "skills-dir"}` ke `blockedMarketplaces` dalam [managed settings](/docs/id/plugin-marketplaces#managed-marketplace-restrictions). Saat diblokir, `plugin init` gagal sebelum menulis.

948 948 

949**Contoh:**949**Contoh:**

950 950 


1027 plugin prune1027 plugin prune

1028</h3>1028</h3>

1029 1029 

1030Hapus dependensi plugin yang dipasang otomatis yang tidak lagi diperlukan oleh plugin yang dipasang. Dependensi yang Claude Code tarik untuk memenuhi bidang [`dependencies`](/id/plugin-dependencies) plugin lain dihapus; plugin yang Anda pasang secara langsung tidak pernah disentuh.1030Hapus dependensi plugin yang dipasang otomatis yang tidak lagi diperlukan oleh plugin yang dipasang. Dependensi yang Claude Code tarik untuk memenuhi bidang [`dependencies`](/docs/id/plugin-dependencies) plugin lain dihapus; plugin yang Anda pasang secara langsung tidak pernah disentuh.

1031 1031 

1032```bash theme={null}1032```bash theme={null}

1033claude plugin prune [options]1033claude plugin prune [options]


1054 plugin enable1054 plugin enable

1055</h3>1055</h3>

1056 1056 

1057Aktifkan plugin yang dinonaktifkan. Jika plugin mendeklarasikan [dependencies](/id/plugin-dependencies), Claude Code mengaktifkannya secara transitif pada cakupan yang sama, dan perintah gagal ketika dependensi tidak dipasang.1057Aktifkan plugin yang dinonaktifkan. Jika plugin mendeklarasikan [dependencies](/docs/id/plugin-dependencies), Claude Code mengaktifkannya secara transitif pada cakupan yang sama, dan perintah gagal ketika dependensi tidak dipasang.

1058 1058 

1059```bash theme={null}1059```bash theme={null}

1060claude plugin enable <plugin> [options]1060claude plugin enable <plugin> [options]


1075 plugin disable1075 plugin disable

1076</h3>1076</h3>

1077 1077 

1078Nonaktifkan plugin tanpa menghapusnya. Gagal ketika plugin yang diaktifkan lain [bergantung pada](/id/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies) target. Pesan kesalahan mencakup perintah berantai yang menonaktifkan setiap dependensi terlebih dahulu.1078Nonaktifkan plugin tanpa menghapusnya. Gagal ketika plugin yang diaktifkan lain [bergantung pada](/docs/id/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies) target. Pesan kesalahan mencakup perintah berantai yang menonaktifkan setiap dependensi terlebih dahulu.

1079 1079 

1080```bash theme={null}1080```bash theme={null}

1081claude plugin disable <plugin> [options]1081claude plugin disable <plugin> [options]


1192 plugin tag1192 plugin tag

1193</h3>1193</h3>

1194 1194 

1195Buat tag rilis git untuk plugin di direktori saat ini. Jalankan dari dalam folder plugin. Lihat [Tag plugin releases](/id/plugin-dependencies#tag-plugin-releases-for-version-resolution).1195Buat tag rilis git untuk plugin di direktori saat ini. Jalankan dari dalam folder plugin. Lihat [Tag plugin releases](/docs/id/plugin-dependencies#tag-plugin-releases-for-version-resolution).

1196 1196 

1197```bash theme={null}1197```bash theme={null}

1198claude plugin tag [options]1198claude plugin tag [options]


1352 Lihat juga1352 Lihat juga

1353</h2>1353</h2>

1354 1354 

1355* [Plugins](/id/plugins) - Tutorial dan penggunaan praktis1355* [Plugins](/docs/id/plugins) - Tutorial dan penggunaan praktis

1356* [Plugin marketplaces](/id/plugin-marketplaces) - Membuat dan mengelola marketplace1356* [Plugin marketplaces](/docs/id/plugin-marketplaces) - Membuat dan mengelola marketplace

1357* [Skills](/id/skills) - Detail pengembangan skill1357* [Skills](/docs/id/skills) - Detail pengembangan skill

1358* [Subagents](/id/sub-agents) - Konfigurasi dan kemampuan agent1358* [Subagents](/docs/id/sub-agents) - Konfigurasi dan kemampuan agent

1359* [Hooks](/id/hooks) - Penanganan event dan otomasi1359* [Hooks](/docs/id/hooks) - Penanganan event dan otomasi

1360* [MCP](/id/mcp) - Integrasi alat eksternal1360* [MCP](/docs/id/mcp) - Integrasi alat eksternal

1361* [Settings](/id/settings) - Opsi konfigurasi untuk plugins1361* [Settings](/docs/id/settings) - Opsi konfigurasi untuk plugins

settings.md +44 −18

Details

180 Entri tidak valid dalam pengaturan yang dikelola180 Entri tidak valid dalam pengaturan yang dikelola

181</h3>181</h3>

182 182 

183Pengaturan yang dikelola diuraikan dengan toleran. Ketika konfigurasi yang dikelola berisi entri yang gagal validasi skema, Claude Code menghapus entri tersebut, mencatat peringatan, dan menegakkan setiap kebijakan yang valid yang tersisa. Satu kesalahan ketik tidak dapat menonaktifkan kebijakan organisasi Anda yang lainnya.183Pengaturan yang dikelola diuraikan dengan toleran. Ketika konfigurasi yang dikelola berisi entri yang gagal validasi skema, Claude Code menghapus entri tersebut, mencatat peringatan, dan menegakkan setiap kebijakan yang valid yang tersisa. Satu kesalahan ketik tidak dapat menonaktifkan kebijakan organisasi Anda yang lainnya. Jalankan [`/doctor`](/id/debug-your-config#check-resolved-settings) untuk membuat daftar entri yang dihapus dengan file sumber dan bidangnya.

184 184 

185Perilaku ini konsisten di ketiga mekanisme pengiriman: [pengaturan yang dikelola server](/id/server-managed-settings), kebijakan plist dan registry yang digunakan melalui MDM, dan file `managed-settings.json`. Memerlukan Claude Code v2.1.169 atau lebih baru.185Perilaku ini konsisten di ketiga mekanisme pengiriman: [pengaturan yang dikelola server](/id/server-managed-settings), kebijakan plist dan registry yang digunakan melalui MDM, dan file `managed-settings.json`. Memerlukan Claude Code v2.1.169 atau lebih baru.

186 186 


215`settings.json` mendukung sejumlah opsi:215`settings.json` mendukung sejumlah opsi:

216 216 

217| Kunci | Deskripsi | Contoh |217| Kunci | Deskripsi | Contoh |

218| :-------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------- |218| :--------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------- |

219| `advisorModel` | Model untuk [advisor tool](/id/advisor) sisi server. Menerima alias model seperti `"opus"`, `"sonnet"`, atau `"fable"` ({/* min-version: 2.1.170 */}v2.1.170+), atau ID model lengkap. Ditulis secara otomatis saat Anda menjalankan `/advisor`. Tidak diatur untuk menonaktifkan advisor | `"opus"` |219| `advisorModel` | Model untuk [advisor tool](/id/advisor) sisi server. Menerima alias model seperti `"opus"`, `"sonnet"`, atau `"fable"` ({/* min-version: 2.1.170 */}v2.1.170+), atau ID model lengkap. Ditulis secara otomatis saat Anda menjalankan `/advisor`. Tidak diatur untuk menonaktifkan advisor | `"opus"` |

220| `agent` | Jalankan thread utama sebagai subagent bernama, dan atur agent default untuk sesi yang dikirimkan dari `claude agents`. Menerapkan prompt sistem subagent, pembatasan tool, dan model. Lihat [Panggil subagents secara eksplisit](/id/sub-agents#invoke-subagents-explicitly) | `"code-reviewer"` |220| `agent` | Jalankan thread utama sebagai subagent bernama, dan atur agent default untuk sesi yang dikirimkan dari `claude agents`. Menerapkan prompt sistem subagent, pembatasan tool, dan model. Lihat [Panggil subagents secara eksplisit](/id/sub-agents#invoke-subagents-explicitly) | `"code-reviewer"` |

221| `agentPushNotifEnabled` | {/* min-version: 2.1.119 */}**Default**: `false`. Ketika [Remote Control](/id/remote-control) terhubung, izinkan Claude mengirim notifikasi push proaktif ke ponsel Anda, misalnya ketika tugas panjang selesai. Muncul di `/config` sebagai **Push when Claude decides**. Lihat [Mobile push notifications](/id/remote-control#mobile-push-notifications). Memerlukan Claude Code v2.1.119 atau lebih baru | `true` |221| `agentPushNotifEnabled` | {/* min-version: 2.1.119 */}**Default**: `false`. Ketika [Remote Control](/id/remote-control) terhubung, izinkan Claude mengirim notifikasi push proaktif ke ponsel Anda, misalnya ketika tugas panjang selesai. Muncul di `/config` sebagai **Push when Claude decides**. Lihat [Mobile push notifications](/id/remote-control#mobile-push-notifications). Memerlukan Claude Code v2.1.119 atau lebih baru | `true` |


233| `autoCompactEnabled` | {/* min-version: 2.1.119 */}**Default**: `true`. Secara otomatis kompak percakapan ketika konteks mendekati batas. Muncul di `/config` sebagai **Auto-compact**. Untuk menonaktifkan melalui variabel lingkungan, atur [`DISABLE_AUTO_COMPACT`](/id/env-vars) dalam `env` | `false` |233| `autoCompactEnabled` | {/* min-version: 2.1.119 */}**Default**: `true`. Secara otomatis kompak percakapan ketika konteks mendekati batas. Muncul di `/config` sebagai **Auto-compact**. Untuk menonaktifkan melalui variabel lingkungan, atur [`DISABLE_AUTO_COMPACT`](/id/env-vars) dalam `env` | `false` |

234| `autoMemoryDirectory` | Direktori khusus untuk penyimpanan [memori otomatis](/id/memory#storage-location). Menerima jalur absolut atau jalur dengan awalan `~/`. Dari pengaturan proyek atau lokal, ini dihormati hanya setelah Anda menerima dialog kepercayaan workspace, karena repositori yang diklon dapat menyediakan file ini | `"~/my-memory-dir"` |234| `autoMemoryDirectory` | Direktori khusus untuk penyimpanan [memori otomatis](/id/memory#storage-location). Menerima jalur absolut atau jalur dengan awalan `~/`. Dari pengaturan proyek atau lokal, ini dihormati hanya setelah Anda menerima dialog kepercayaan workspace, karena repositori yang diklon dapat menyediakan file ini | `"~/my-memory-dir"` |

235| `autoMemoryEnabled` | **Default**: `true`. Aktifkan [memori otomatis](/id/memory#enable-or-disable-auto-memory). Saat `false`, Claude tidak membaca dari atau menulis ke direktori memori otomatis. Anda juga dapat mengalihkan ini dengan `/memory` selama sesi. Untuk menonaktifkan melalui variabel lingkungan, atur [`CLAUDE_CODE_DISABLE_AUTO_MEMORY`](/id/env-vars) dalam `env` | `false` |235| `autoMemoryEnabled` | **Default**: `true`. Aktifkan [memori otomatis](/id/memory#enable-or-disable-auto-memory). Saat `false`, Claude tidak membaca dari atau menulis ke direktori memori otomatis. Anda juga dapat mengalihkan ini dengan `/memory` selama sesi. Untuk menonaktifkan melalui variabel lingkungan, atur [`CLAUDE_CODE_DISABLE_AUTO_MEMORY`](/id/env-vars) dalam `env` | `false` |

236| `autoMode` | Sesuaikan apa yang diblokir dan diizinkan oleh pengklasifikasi [mode otomatis](/id/permission-modes#eliminate-prompts-with-auto-mode). Berisi array aturan prosa `environment`, `allow`, `soft_deny`, dan `hard_deny`. Sertakan string literal `"$defaults"` dalam array untuk mewarisi aturan bawaan pada posisi tersebut. Lihat [Konfigurasikan mode otomatis](/id/auto-mode-config). Tidak dibaca dari pengaturan proyek bersama | `{"soft_deny": ["$defaults", "Never run terraform apply"]}` |236| `autoMode` | Sesuaikan apa yang diblokir dan diizinkan oleh pengklasifikasi [mode otomatis](/id/permission-modes#eliminate-prompts-with-auto-mode). Berisi array aturan prosa `environment`, `allow`, `soft_deny`, dan `hard_deny`. Sertakan string literal `"$defaults"` dalam array untuk mewarisi aturan bawaan pada posisi tersebut. Lihat [Konfigurasikan mode otomatis](/id/auto-mode-config). Dibaca dari pengaturan pengguna, flag `--settings`, dan pengaturan yang dikelola saja. Diabaikan dalam `.claude/settings.json` proyek dan `.claude/settings.local.json` lokal. {/* min-version: 2.1.207 */}Sebelum v2.1.207, `.claude/settings.local.json` juga dibaca | `{"soft_deny": ["$defaults", "Never run terraform apply"]}` |

237| `autoMode.classifyAllShell` | {/* min-version: 2.1.193 */}**Default**: `false`. Saat `true`, menangguhkan setiap aturan allow Bash dan PowerShell saat mode otomatis aktif sehingga semua perintah shell merutekan melalui pengklasifikasi, bukan hanya aturan yang cocok dengan pola eksekusi kode arbitrer. Lihat [Rutekan semua perintah shell melalui pengklasifikasi](/id/auto-mode-config#route-all-shell-commands-through-the-classifier). Memerlukan Claude Code v2.1.193 atau lebih baru | `true` |237| `autoMode.classifyAllShell` | {/* min-version: 2.1.193 */}**Default**: `false`. Saat `true`, menangguhkan setiap aturan allow Bash dan PowerShell saat mode otomatis aktif sehingga semua perintah shell merutekan melalui pengklasifikasi, bukan hanya aturan yang cocok dengan pola eksekusi kode arbitrer. Lihat [Rutekan semua perintah shell melalui pengklasifikasi](/id/auto-mode-config#route-all-shell-commands-through-the-classifier). Memerlukan Claude Code v2.1.193 atau lebih baru | `true` |

238| `autoScrollEnabled` | **Default**: `true`. Dalam [rendering fullscreen](/id/fullscreen), ikuti output baru ke bagian bawah percakapan. Muncul di `/config` sebagai **Auto-scroll**. Prompt izin masih bergulir ke tampilan saat ini dimatikan | `false` |238| `autoScrollEnabled` | **Default**: `true`. Dalam [rendering fullscreen](/id/fullscreen), ikuti output baru ke bagian bawah percakapan. Muncul di `/config` sebagai **Auto-scroll**. Prompt izin masih bergulir ke tampilan saat ini dimatikan | `false` |

239| `autoUpdatesChannel` | **Default**: `"latest"`. Saluran rilis untuk diikuti untuk pembaruan. Gunakan `"stable"` untuk versi yang biasanya sekitar satu minggu lama dan melewati versi dengan regresi besar, atau `"latest"` untuk rilis terbaru. Untuk menonaktifkan auto-updates sepenuhnya, atur [`DISABLE_AUTOUPDATER`](/id/setup#disable-auto-updates) dalam `env` | `"stable"` |239| `autoUpdatesChannel` | **Default**: `"latest"`. Saluran rilis untuk diikuti untuk pembaruan. Gunakan `"stable"` untuk versi yang biasanya sekitar satu minggu lama dan melewati versi dengan regresi besar, atau `"latest"` untuk rilis terbaru. Untuk menonaktifkan auto-updates sepenuhnya, atur [`DISABLE_AUTOUPDATER`](/id/setup#disable-auto-updates) dalam `env` | `"stable"` |


255| `disableAllHooks` | Nonaktifkan semua [hooks](/id/hooks) dan [status line](/id/statusline) khusus apa pun | `true` |255| `disableAllHooks` | Nonaktifkan semua [hooks](/id/hooks) dan [status line](/id/statusline) khusus apa pun | `true` |

256| `disableArtifact` | Atur ke `true` untuk menonaktifkan tool [Artifact](/id/artifacts), yang menerbitkan output sesi sebagai halaman web pribadi di claude.ai. Setara dengan pengaturan `CLAUDE_CODE_DISABLE_ARTIFACT` ke `1` | `true` |256| `disableArtifact` | Atur ke `true` untuk menonaktifkan tool [Artifact](/id/artifacts), yang menerbitkan output sesi sebagai halaman web pribadi di claude.ai. Setara dengan pengaturan `CLAUDE_CODE_DISABLE_ARTIFACT` ke `1` | `true` |

257| `disableAutoMode` | Atur ke `"disable"` untuk mencegah [mode otomatis](/id/permission-modes#eliminate-prompts-with-auto-mode) diaktifkan. Menghapus `auto` dari siklus `Shift+Tab` dan menolak `--permission-mode auto` saat startup. Paling berguna dalam [pengaturan yang dikelola](/id/permissions#managed-settings) di mana pengguna tidak dapat menimpanya | `"disable"` |257| `disableAutoMode` | Atur ke `"disable"` untuk mencegah [mode otomatis](/id/permission-modes#eliminate-prompts-with-auto-mode) diaktifkan. Menghapus `auto` dari siklus `Shift+Tab` dan menolak `--permission-mode auto` saat startup. Paling berguna dalam [pengaturan yang dikelola](/id/permissions#managed-settings) di mana pengguna tidak dapat menimpanya | `"disable"` |

258| `disableBrowserExternalNavigation` | (Pengaturan yang dikelola saja) Atur ke `true` untuk mematikan browsing eksternal di [Browser pane](/id/desktop#browse-external-sites) aplikasi desktop. Baik pengguna maupun Claude tidak dapat menavigasi ke situs eksternal, dan preview server dev localhost tidak terpengaruh. Nilai harus boolean JSON `true`; string `"true"` diabaikan | `true` |

258| `disableBundledSkills` | Atur ke `true` untuk menonaktifkan [skills](/id/skills) dan workflows yang dikirimkan dengan Claude Code: skills bundel dan workflows dihapus sepenuhnya, sementara perintah slash bawaan seperti `/init` tetap dapat diketik tetapi disembunyikan dari model. `/doctor` tetap dapat diketik seperti perintah bawaan; sembunyikan dengan [`DISABLE_DOCTOR_COMMAND`](/id/env-vars) sebagai gantinya. Skills dari plugins, `.claude/skills/`, dan `.claude/commands/` tidak terpengaruh. Setara dengan pengaturan `CLAUDE_CODE_DISABLE_BUNDLED_SKILLS` ke `1` | `true` |259| `disableBundledSkills` | Atur ke `true` untuk menonaktifkan [skills](/id/skills) dan workflows yang dikirimkan dengan Claude Code: skills bundel dan workflows dihapus sepenuhnya, sementara perintah slash bawaan seperti `/init` tetap dapat diketik tetapi disembunyikan dari model. `/doctor` tetap dapat diketik seperti perintah bawaan; sembunyikan dengan [`DISABLE_DOCTOR_COMMAND`](/id/env-vars) sebagai gantinya. Skills dari plugins, `.claude/skills/`, dan `.claude/commands/` tidak terpengaruh. Setara dengan pengaturan `CLAUDE_CODE_DISABLE_BUNDLED_SKILLS` ke `1` | `true` |

259| `disableClaudeAiConnectors` | {/* min-version: 2.1.182 */}Nonaktifkan [claude.ai MCP connectors](/id/mcp#use-mcp-servers-from-claude-ai) sehingga mereka tidak auto-fetched atau terhubung. Atur dalam cakupan pengaturan apa pun. `true` dalam sumber apa pun memiliki prioritas, jadi `.claude/settings.json` proyek yang diperiksa dapat memilih repositori dari konektor cloud, tetapi proyek-level `false` tidak dapat menimpa tingkat pengguna atau kebijakan `true`. Servers yang dilewatkan secara eksplisit melalui `--mcp-config` tidak terpengaruh. Untuk menolak konektor individual daripada semuanya, gunakan [`deniedMcpServers`](/id/managed-mcp). Memerlukan Claude Code v2.1.182 atau lebih baru | `true` |260| `disableClaudeAiConnectors` | {/* min-version: 2.1.182 */}Nonaktifkan [claude.ai MCP connectors](/id/mcp#use-mcp-servers-from-claude-ai) sehingga mereka tidak auto-fetched atau terhubung. Atur dalam cakupan pengaturan apa pun. `true` dalam sumber apa pun memiliki prioritas, jadi `.claude/settings.json` proyek yang diperiksa dapat memilih repositori dari konektor cloud, tetapi proyek-level `false` tidak dapat menimpa tingkat pengguna atau kebijakan `true`. Servers yang dilewatkan secara eksplisit melalui `--mcp-config` tidak terpengaruh. Untuk menolak konektor individual daripada semuanya, gunakan [`deniedMcpServers`](/id/managed-mcp). Memerlukan Claude Code v2.1.182 atau lebih baru | `true` |

260| `disableDeepLinkRegistration` | Atur ke `"disable"` untuk mencegah Claude Code mendaftarkan penanganan protokol `claude-cli://` dengan sistem operasi saat startup. [Deep links](/id/deep-links) memungkinkan tools eksternal membuka sesi Claude Code dengan prompt yang sudah diisi sebelumnya. Berguna di lingkungan di mana pendaftaran penanganan protokol dibatasi atau dikelola secara terpisah | `"disable"` |261| `disableDeepLinkRegistration` | Atur ke `"disable"` untuk mencegah Claude Code mendaftarkan penanganan protokol `claude-cli://` dengan sistem operasi saat startup. [Deep links](/id/deep-links) memungkinkan tools eksternal membuka sesi Claude Code dengan prompt yang sudah diisi sebelumnya. Berguna di lingkungan di mana pendaftaran penanganan protokol dibatasi atau dikelola secara terpisah | `"disable"` |


269| `enableArtifact` | {/* min-version: 2.1.196 */}Aktifkan atau nonaktifkan tool [Artifact](/id/artifacts) untuk pengguna ini. Saat tidak diatur, default mengikuti [ketersediaan](/id/artifacts#availability) fitur untuk akun Anda. Baris **Artifacts** di `/config` menulis kunci ini. `disableArtifact` yang dikelola dan [pengaturan admin](/id/artifacts#manage-artifacts-for-your-organization) organisasi Anda memiliki prioritas, dan kunci diabaikan dalam pengaturan proyek dan lokal (`.claude/settings.json`, `.claude/settings.local.json`), yang repositori dapat diperiksa. Memerlukan Claude Code v2.1.196 atau lebih baru | `true` |270| `enableArtifact` | {/* min-version: 2.1.196 */}Aktifkan atau nonaktifkan tool [Artifact](/id/artifacts) untuk pengguna ini. Saat tidak diatur, default mengikuti [ketersediaan](/id/artifacts#availability) fitur untuk akun Anda. Baris **Artifacts** di `/config` menulis kunci ini. `disableArtifact` yang dikelola dan [pengaturan admin](/id/artifacts#manage-artifacts-for-your-organization) organisasi Anda memiliki prioritas, dan kunci diabaikan dalam pengaturan proyek dan lokal (`.claude/settings.json`, `.claude/settings.local.json`), yang repositori dapat diperiksa. Memerlukan Claude Code v2.1.196 atau lebih baru | `true` |

270| `enabledMcpjsonServers` | Daftar MCP servers spesifik dari file `.mcp.json` untuk menyetujui. {/* min-version: 2.1.196 */}Sejak v2.1.196, `claude mcp list` dan `claude mcp get` menghormati kunci ini dalam folder yang tidak terpercaya hanya dari [file pengaturan yang tidak diperiksa ke dalam repositori](/id/mcp#managing-your-servers) | `["memory", "github"]` |271| `enabledMcpjsonServers` | Daftar MCP servers spesifik dari file `.mcp.json` untuk menyetujui. {/* min-version: 2.1.196 */}Sejak v2.1.196, `claude mcp list` dan `claude mcp get` menghormati kunci ini dalam folder yang tidak terpercaya hanya dari [file pengaturan yang tidak diperiksa ke dalam repositori](/id/mcp#managing-your-servers) | `["memory", "github"]` |

271| `enforceAvailableModels` | {/* min-version: 2.1.175 */}Perluas daftar putih `availableModels` ke model Default. Saat `true` dalam pengaturan yang dikelola dan `availableModels` adalah array non-kosong, opsi Default kembali ke entri yang diizinkan pertama yang tersedia, tetapi hanya ketika model default yang akan diselesaikan oleh Default (default [organisasi](/id/model-config#organization-default-model) saat satu berlaku, sebaliknya default tipe akun) tidak ada dalam daftar putih; default yang diizinkan disimpan sebagainya. Tidak berpengaruh saat `availableModels` tidak diatur atau kosong. Lihat [Paksakan daftar putih untuk model Default](/id/model-config#enforce-the-allowlist-for-the-default-model). Memerlukan Claude Code v2.1.175 atau lebih baru | `true` |272| `enforceAvailableModels` | {/* min-version: 2.1.175 */}Perluas daftar putih `availableModels` ke model Default. Saat `true` dalam pengaturan yang dikelola dan `availableModels` adalah array non-kosong, opsi Default kembali ke entri yang diizinkan pertama yang tersedia, tetapi hanya ketika model default yang akan diselesaikan oleh Default (default [organisasi](/id/model-config#organization-default-model) saat satu berlaku, sebaliknya default tipe akun) tidak ada dalam daftar putih; default yang diizinkan disimpan sebagainya. Tidak berpengaruh saat `availableModels` tidak diatur atau kosong. Lihat [Paksakan daftar putih untuk model Default](/id/model-config#enforce-the-allowlist-for-the-default-model). Memerlukan Claude Code v2.1.175 atau lebih baru | `true` |

272| `env` | Variabel lingkungan yang diterapkan ke setiap sesi dan ke subprocess yang Claude Code luncurkan darinya. {/* min-version: 2.1.143 */}Sejak v2.1.143, `NO_COLOR` dan `FORCE_COLOR` yang diatur di sini dilewatkan ke subprocess tetapi tidak mengubah warna antarmuka Claude Code sendiri. Atur ini di shell Anda sebelum meluncurkan `claude` untuk mengubah warna antarmuka. {/* min-version: 2.1.195 */}Sejak v2.1.195, variabel identitas yang lingkungan hosting Claude Code atur, misalnya `CLAUDE_CODE_REMOTE` dan `CLAUDE_CODE_ACCOUNT_UUID`, diabaikan saat diatur di sini | `{"FOO": "bar"}` |273| `env` | Variabel lingkungan yang diterapkan ke setiap sesi dan ke subprocess yang Claude Code luncurkan darinya. Atur variabel ke `""` untuk menimpa export shell dengan string kosong, yang Claude Code perlakukan sebagai tidak diatur untuk pemilihan penyedia. Subprocess masih mewarisi nilai kosong. `NO_COLOR` dan `FORCE_COLOR` yang diatur di sini mencapai hanya subprocess; untuk mengubah warna antarmuka Claude Code sendiri, atur di shell Anda sebelum meluncurkan `claude`. {/* min-version: 2.1.195 */}Sejak v2.1.195, variabel identitas yang lingkungan hosting Claude Code atur, misalnya `CLAUDE_CODE_REMOTE` dan `CLAUDE_CODE_ACCOUNT_UUID`, diabaikan saat diatur di sini | `{"FOO": "bar"}` |

273| `fallbackModel` | Model fallback untuk dicoba secara berurutan ketika model utama kelebihan beban atau tidak tersedia. Claude Code beralih ke model berikutnya yang tersedia dalam rantai untuk sisa giliran dan menampilkan pemberitahuan. `"default"` berkembang menjadi model default. Rantai dibatasi pada tiga model; entri ekstra diabaikan. Tidak seperti sebagian besar pengaturan array, kunci ini tidak digabungkan di seluruh file pengaturan: file dengan prioritas tertinggi yang mendefinisikannya memasok seluruh rantai. Flag [`--fallback-model`](/id/cli-reference#cli-flags) menimpa ini untuk satu sesi. Lihat [Fallback model chains](/id/model-config#fallback-model-chains) | `["claude-sonnet-5", "claude-haiku-4-5"]` |274| `fallbackModel` | Model fallback untuk dicoba secara berurutan ketika model utama kelebihan beban atau tidak tersedia. Claude Code beralih ke model berikutnya yang tersedia dalam rantai untuk sisa giliran dan menampilkan pemberitahuan. `"default"` berkembang menjadi model default. Rantai dibatasi pada tiga model; entri ekstra diabaikan. Tidak seperti sebagian besar pengaturan array, kunci ini tidak digabungkan di seluruh file pengaturan: file dengan prioritas tertinggi yang mendefinisikannya memasok seluruh rantai. Flag [`--fallback-model`](/id/cli-reference#cli-flags) menimpa ini untuk satu sesi. Lihat [Fallback model chains](/id/model-config#fallback-model-chains) | `["claude-sonnet-5", "claude-haiku-4-5"]` |

274| `fastModePerSessionOptIn` | Saat `true`, mode cepat tidak bertahan di seluruh sesi. Setiap sesi dimulai dengan mode cepat mati, memerlukan pengguna untuk mengaktifkannya dengan `/fast`. Preferensi mode cepat pengguna masih disimpan. Lihat [Memerlukan opt-in per sesi](/id/fast-mode#require-per-session-opt-in) | `true` |275| `fastMode` | Aktifkan [fast mode](/id/fast-mode) untuk sesi di mana tersedia. Mengalihkan dengan `/fast` menulis `true` di sini dalam pengaturan pengguna dan menghapus kunci saat Anda mematikan fast mode | `true` |

276| `fastModePerSessionOptIn` | Saat `true`, fast mode tidak bertahan di seluruh sesi. Setiap sesi dimulai dengan fast mode mati, memerlukan pengguna untuk mengaktifkannya dengan `/fast`. Preferensi fast mode pengguna masih disimpan. Lihat [Memerlukan opt-in per sesi](/id/fast-mode#require-per-session-opt-in) | `true` |

275| `feedbackSurveyRate` | Probabilitas (0–1) bahwa [survei kualitas sesi](/id/data-usage#session-quality-surveys) muncul saat memenuhi syarat. Atur ke `0` untuk menekan sepenuhnya, atau atur [`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY`](/id/env-vars) dalam `env`. Berguna saat menggunakan Amazon Bedrock, Google Cloud's Agent Platform, atau Microsoft Foundry di mana tingkat sampel default tidak berlaku | `0.05` |277| `feedbackSurveyRate` | Probabilitas (0–1) bahwa [survei kualitas sesi](/id/data-usage#session-quality-surveys) muncul saat memenuhi syarat. Atur ke `0` untuk menekan sepenuhnya, atau atur [`CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY`](/id/env-vars) dalam `env`. Berguna saat menggunakan Amazon Bedrock, Google Cloud's Agent Platform, atau Microsoft Foundry di mana tingkat sampel default tidak berlaku | `0.05` |

276| `fileCheckpointingEnabled` | {/* min-version: 2.1.119 */}**Default**: `true`. Snapshot file sebelum setiap edit sehingga [`/rewind`](/id/checkpointing) dapat memulihkannya. Muncul di `/config` sebagai **Rewind code (checkpoints)**. Untuk menonaktifkan melalui variabel lingkungan, atur [`CLAUDE_CODE_DISABLE_FILE_CHECKPOINTING`](/id/env-vars) dalam `env` | `false` |278| `fileCheckpointingEnabled` | {/* min-version: 2.1.119 */}**Default**: `true`. Snapshot file sebelum setiap edit sehingga [`/rewind`](/id/checkpointing) dapat memulihkannya. Muncul di `/config` sebagai **Rewind code (checkpoints)**. Untuk menonaktifkan melalui variabel lingkungan, atur [`CLAUDE_CODE_DISABLE_FILE_CHECKPOINTING`](/id/env-vars) dalam `env` | `false` |

277| `fileSuggestion` | Konfigurasikan skrip khusus untuk pelengkapan otomatis file `@`. Lihat [Pengaturan saran file](#file-suggestion-settings) | `{"type": "command", "command": "~/.claude/file-suggestion.sh"}` |279| `fileSuggestion` | Konfigurasikan skrip khusus untuk pelengkapan otomatis file `@`. Lihat [Pengaturan saran file](#file-suggestion-settings) | `{"type": "command", "command": "~/.claude/file-suggestion.sh"}` |


308| `showClearContextOnPlanAccept` | **Default**: `false`. Tampilkan opsi "clear context" pada layar penerimaan rencana. Atur ke `true` untuk mengembalikan opsi | `true` |310| `showClearContextOnPlanAccept` | **Default**: `false`. Tampilkan opsi "clear context" pada layar penerimaan rencana. Atur ke `true` untuk mengembalikan opsi | `true` |

309| `showThinkingSummaries` | **Default**: `false`. Tampilkan ringkasan [pemikiran yang diperluas](/id/model-config#extended-thinking) dalam sesi interaktif. Saat tidak diatur atau `false`, blok pemikiran diredaksi oleh API dan ditampilkan sebagai stub yang runtuh. Redaksi hanya mengubah apa yang Anda lihat, bukan apa yang dihasilkan model: untuk mengurangi pengeluaran pemikiran, [turunkan anggaran atau nonaktifkan pemikiran](/id/model-config#extended-thinking) sebagai gantinya. Pengaturan ini tidak berpengaruh dalam mode non-interaktif (`-p`), Agent SDK, atau ekstensi IDE seperti VS Code | `true` |311| `showThinkingSummaries` | **Default**: `false`. Tampilkan ringkasan [pemikiran yang diperluas](/id/model-config#extended-thinking) dalam sesi interaktif. Saat tidak diatur atau `false`, blok pemikiran diredaksi oleh API dan ditampilkan sebagai stub yang runtuh. Redaksi hanya mengubah apa yang Anda lihat, bukan apa yang dihasilkan model: untuk mengurangi pengeluaran pemikiran, [turunkan anggaran atau nonaktifkan pemikiran](/id/model-config#extended-thinking) sebagai gantinya. Pengaturan ini tidak berpengaruh dalam mode non-interaktif (`-p`), Agent SDK, atau ekstensi IDE seperti VS Code | `true` |

310| `showTurnDuration` | **Default**: `true`. Tampilkan pesan durasi giliran setelah respons, misalnya "Cooked for 1m 6s". Muncul di `/config` sebagai **Show turn duration** | `false` |312| `showTurnDuration` | **Default**: `true`. Tampilkan pesan durasi giliran setelah respons, misalnya "Cooked for 1m 6s". Muncul di `/config` sebagai **Show turn duration** | `false` |

311| `skillListingBudgetFraction` | {/* min-version: 2.1.105 */}**Default**: `0.01`. Fraksi jendela konteks model yang dicadangkan untuk [skill listing](/id/skills#skill-descriptions-are-cut-short) yang Claude lihat setiap giliran, jadi default mencadangkan 1%. Saat listing melebihi anggaran, deskripsi untuk skills yang paling jarang digunakan dijatuhkan dan hanya nama mereka yang terdaftar, jadi Claude masih dapat menginvokasinya tetapi tidak dapat melihat apa yang mereka lakukan. Naikkan untuk menjaga lebih banyak deskripsi terlihat dengan biaya lebih banyak konteks per giliran. `/doctor` memperkirakan biaya listing terhadap anggaran. Memerlukan Claude Code v2.1.105 atau lebih baru | `0.02` |313| `skillListingBudgetFraction` | **Default**: `0.01`. Fraksi jendela konteks model yang dicadangkan untuk [skill listing](/id/skills#skill-descriptions-are-cut-short) yang Claude lihat setiap giliran, jadi default mencadangkan 1%. Saat listing melebihi anggaran, deskripsi untuk skills yang paling jarang digunakan dijatuhkan dan hanya nama mereka yang terdaftar, jadi Claude masih dapat menginvokasinya tetapi tidak dapat melihat apa yang mereka lakukan. Naikkan untuk menjaga lebih banyak deskripsi terlihat dengan biaya lebih banyak konteks per giliran. `/doctor` memperkirakan biaya listing terhadap anggaran | `0.02` |

312| `skillListingMaxDescChars` | {/* min-version: 2.1.105 */}**Default**: `1536`. Batas karakter per-skill pada teks `description` dan `when_to_use` gabungan dalam [skill listing](/id/skills#skill-descriptions-are-cut-short) yang Claude lihat setiap giliran. Teks yang lebih panjang dari ini dipotong. Naikkan untuk menjaga deskripsi panjang tetap utuh dengan biaya lebih banyak konteks per giliran; turunkan untuk menyesuaikan lebih banyak skills di bawah [`skillListingBudgetFraction`](#available-settings). Memerlukan Claude Code v2.1.105 atau lebih baru | `2048` |314| `skillListingMaxDescChars` | **Default**: `1536`. Batas karakter per-skill pada teks `description` dan `when_to_use` gabungan dalam [skill listing](/id/skills#skill-descriptions-are-cut-short) yang Claude lihat setiap giliran. Teks yang lebih panjang dari ini dipotong. Naikkan untuk menjaga deskripsi panjang tetap utuh dengan biaya lebih banyak konteks per giliran; turunkan untuk menyesuaikan lebih banyak skills di bawah [`skillListingBudgetFraction`](#available-settings) | `2048` |

313| `skillOverrides` | {/* min-version: 2.1.129 */}Penggantian visibilitas per-skill yang dikunci berdasarkan nama skill. Nilai adalah `"on"`, `"name-only"`, `"user-invocable-only"`, atau `"off"`. Memungkinkan Anda menyembunyikan atau menciutkan skill tanpa mengedit SKILL.md-nya. Tidak berlaku untuk plugin skills, yang dikelola melalui `/plugin`. Menu `/skills` menulis ini ke `.claude/settings.local.json`. Lihat [Timpa visibilitas skill dari pengaturan](/id/skills#override-skill-visibility-from-settings). Memerlukan Claude Code v2.1.129 atau lebih baru | `{"legacy-context": "name-only", "deploy": "off"}` |315| `skillOverrides` | {/* min-version: 2.1.129 */}Penggantian visibilitas per-skill yang dikunci berdasarkan nama skill. Nilai adalah `"on"`, `"name-only"`, `"user-invocable-only"`, atau `"off"`. Memungkinkan Anda menyembunyikan atau menciutkan skill tanpa mengedit SKILL.md-nya. Tidak berlaku untuk plugin skills, yang dikelola melalui `/plugin`. Menu `/skills` menulis ini ke `.claude/settings.local.json`. Lihat [Timpa visibilitas skill dari pengaturan](/id/skills#override-skill-visibility-from-settings). Memerlukan Claude Code v2.1.129 atau lebih baru | `{"legacy-context": "name-only", "deploy": "off"}` |

314| `skipWebFetchPreflight` | Lewati [pemeriksaan keamanan domain WebFetch](/id/data-usage#webfetch-domain-safety-check) yang mengirim setiap nama host yang diminta ke `api.anthropic.com` sebelum mengambil. Atur ke `true` di lingkungan yang memblokir lalu lintas ke Anthropic, seperti penyebaran Amazon Bedrock, Google Cloud's Agent Platform, atau Microsoft Foundry dengan egress yang ketat. Saat dilewati, WebFetch mencoba URL apa pun tanpa berkonsultasi dengan daftar blokir | `true` |316| `skipWebFetchPreflight` | Lewati [pemeriksaan keamanan domain WebFetch](/id/data-usage#webfetch-domain-safety-check) yang mengirim setiap nama host yang diminta ke `api.anthropic.com` sebelum mengambil. Atur ke `true` di lingkungan yang memblokir lalu lintas ke Anthropic, seperti penyebaran Amazon Bedrock, Google Cloud's Agent Platform, atau Microsoft Foundry dengan egress yang ketat. Saat dilewati, WebFetch mencoba URL apa pun tanpa berkonsultasi dengan daftar blokir | `true` |

315| `spinnerTipsEnabled` | **Default**: `true`. Tampilkan tips dalam spinner saat Claude bekerja. Atur ke `false` untuk menonaktifkan tips | `false` |317| `spinnerTipsEnabled` | **Default**: `true`. Tampilkan tips dalam spinner saat Claude bekerja. Atur ke `false` untuk menonaktifkan tips | `false` |


328| `useAutoModeDuringPlan` | **Default**: `true`. Apakah plan mode menggunakan semantik mode otomatis saat mode otomatis tersedia. Tidak dibaca dari pengaturan proyek bersama. Muncul di `/config` sebagai "Use auto mode during plan" | `false` |330| `useAutoModeDuringPlan` | **Default**: `true`. Apakah plan mode menggunakan semantik mode otomatis saat mode otomatis tersedia. Tidak dibaca dari pengaturan proyek bersama. Muncul di `/config` sebagai "Use auto mode during plan" | `false` |

329| `verbose` | {/* min-version: 2.1.119 */}**Default**: `false`. Tampilkan output tool lengkap daripada ringkasan yang dipotong. Muncul di `/config` sebagai **Verbose output**. Flag `--verbose` menimpa ini untuk satu sesi | `true` |331| `verbose` | {/* min-version: 2.1.119 */}**Default**: `false`. Tampilkan output tool lengkap daripada ringkasan yang dipotong. Muncul di `/config` sebagai **Verbose output**. Flag `--verbose` menimpa ini untuk satu sesi | `true` |

330| `viewMode` | Mode tampilan transkrip default saat startup: `"default"`, `"verbose"`, atau `"focus"`. Menimpa pemilihan `/focus` yang lengket saat diatur. Flag `--verbose` menimpa ini untuk satu sesi | `"verbose"` |332| `viewMode` | Mode tampilan transkrip default saat startup: `"default"`, `"verbose"`, atau `"focus"`. Menimpa pemilihan `/focus` yang lengket saat diatur. Flag `--verbose` menimpa ini untuk satu sesi | `"verbose"` |

333| `vimInsertModeRemaps` | {/* min-version: 2.1.208 */}Peta dua-kunci INSERT-mode sequences ke Escape dalam [vim editor mode](/id/interactive-mode#vim-editor-mode). Setiap kunci adalah tepat dua karakter yang dapat dicetak yang diketik secara berurutan, dan `"<Esc>"` adalah satu-satunya target yang didukung; entri lainnya diabaikan. Dibaca dari pengaturan pengguna, flag `--settings`, dan pengaturan yang dikelola saja, jadi pengaturan yang diperiksa repositori tidak dapat mengubah keystroke Anda. Tidak berpengaruh kecuali `editorMode` adalah `"vim"`. Lihat [Remap INSERT-mode key sequences](/id/interactive-mode#remap-insert-mode-key-sequences). Memerlukan Claude Code v2.1.208 atau lebih baru | `{"jj": "<Esc>"}` |

331| `voice` | Pengaturan [voice dictation](/id/voice-dictation): `enabled` mengaktifkan dictation, `mode` memilih `"hold"` atau `"tap"`, dan `autoSubmit` mengirim prompt pada pelepasan kunci dalam mode hold. Ditulis secara otomatis saat Anda menjalankan `/voice`. Memerlukan akun Claude.ai | `{ "enabled": true, "mode": "tap" }` |334| `voice` | Pengaturan [voice dictation](/id/voice-dictation): `enabled` mengaktifkan dictation, `mode` memilih `"hold"` atau `"tap"`, dan `autoSubmit` mengirim prompt pada pelepasan kunci dalam mode hold. Ditulis secara otomatis saat Anda menjalankan `/voice`. Memerlukan akun Claude.ai | `{ "enabled": true, "mode": "tap" }` |

332| `voiceEnabled` | Alias warisan untuk `voice.enabled`. Lebih suka objek `voice` | `true` |335| `voiceEnabled` | Alias warisan untuk `voice.enabled`. Lebih suka objek `voice` | `true` |

333| `wheelScrollAccelerationEnabled` | {/* min-version: 2.1.174 */}**Default**: `true`. Dalam [rendering fullscreen](/id/fullscreen#mouse-wheel-scrolling), percepat kecepatan scroll mouse-wheel selama scroll cepat. Atur ke `false` untuk laju scroll konstan per notch wheel. Memerlukan Claude Code v2.1.174 atau lebih baru | `false` |336| `wheelScrollAccelerationEnabled` | {/* min-version: 2.1.174 */}**Default**: `true`. Dalam [rendering fullscreen](/id/fullscreen#mouse-wheel-scrolling), percepat kecepatan scroll mouse-wheel selama scroll cepat. Atur ke `false` untuk laju scroll konstan per notch wheel. Memerlukan Claude Code v2.1.174 atau lebih baru | `false` |


345</Note>348</Note>

346 349 

347| Kunci | Deskripsi | Contoh |350| Kunci | Deskripsi | Contoh |

348| :------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------- |351| :--------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------- |

349| `autoConnectIde` | **Default**: `false`. Secara otomatis terhubung ke IDE yang sedang berjalan saat Claude Code dimulai dari terminal eksternal. Muncul di `/config` sebagai **Auto-connect to IDE (external terminal)** saat berjalan di luar terminal VS Code atau JetBrains. Variabel lingkungan [`CLAUDE_CODE_AUTO_CONNECT_IDE`](/id/env-vars) menimpa ini saat diatur | `true` |352| `autoConnectIde` | **Default**: `false`. Secara otomatis terhubung ke IDE yang sedang berjalan saat Claude Code dimulai dari terminal eksternal. Muncul di `/config` sebagai **Auto-connect to IDE (external terminal)** saat berjalan di luar terminal VS Code atau JetBrains. Variabel lingkungan [`CLAUDE_CODE_AUTO_CONNECT_IDE`](/id/env-vars) menimpa ini saat diatur | `true` |

350| `autoInstallIdeExtension` | **Default**: `true`. Secara otomatis instal ekstensi IDE Claude Code saat berjalan dari terminal VS Code. Muncul di `/config` sebagai **Auto-install IDE extension** saat berjalan di dalam terminal VS Code atau JetBrains. Anda juga dapat menetapkan variabel lingkungan [`CLAUDE_CODE_IDE_SKIP_AUTO_INSTALL`](/id/env-vars) ke `1` | `false` |353| `autoInstallIdeExtension` | **Default**: `true`. Secara otomatis instal ekstensi IDE Claude Code saat berjalan dari terminal VS Code. Muncul di `/config` sebagai **Auto-install IDE extension** saat berjalan di dalam terminal VS Code atau JetBrains. Anda juga dapat menetapkan variabel lingkungan [`CLAUDE_CODE_IDE_SKIP_AUTO_INSTALL`](/id/env-vars) ke `1` | `false` |

351| `externalEditorContext` | **Default**: `false`. Tambahkan respons sebelumnya Claude sebagai konteks berkomentar `#` saat Anda membuka editor eksternal dengan `Ctrl+G`. Muncul di `/config` sebagai **Show last response in external editor** | `true` |354| `externalEditorContext` | **Default**: `false`. Tambahkan respons sebelumnya Claude sebagai konteks berkomentar `#` saat Anda membuka editor eksternal dengan `Ctrl+G`. Muncul di `/config` sebagai **Show last response in external editor** | `true` |

355| `permissionExplainerEnabled` | **Default**: `true`. Tampilkan penjelasan yang dihasilkan model dari [perintah](/id/permissions#permission-system) saat Anda menekan `Ctrl+E` pada prompt izin Bash atau PowerShell. Atur ke `false` untuk mematikan pintasan | `false` |

352| `teammateDefaultModel` | Model default untuk [agent team](/id/agent-teams) teammates saat prompt spawn tidak menentukan satu. Atur ke alias model seperti `"sonnet"`, atau `null` untuk mewarisi pemilihan `/model` saat ini lead. Muncul di `/config` sebagai **Default teammate model** | `"sonnet"` |356| `teammateDefaultModel` | Model default untuk [agent team](/id/agent-teams) teammates saat prompt spawn tidak menentukan satu. Atur ke alias model seperti `"sonnet"`, atau `null` untuk mewarisi pemilihan `/model` saat ini lead. Muncul di `/config` sebagai **Default teammate model** | `"sonnet"` |

353| `workflowSizeGuideline` | {/* min-version: 2.1.202 */}**Default**: `unrestricted`, yang tidak mengirim panduan. Menetapkan [jumlah agent yang Claude targetkan](/id/workflows#set-a-size-guideline) dalam dynamic workflows yang ditulis. Claude Code mengirim nilai ke Claude sebagai saran, bukan batas yang diterapkan. Menerima `unrestricted`, `small`, `medium`, atau `large`. Muncul di `/config` sebagai **Dynamic workflow size**. Anda juga dapat menetapkannya langsung dengan `/config workflowSizeGuideline=small`. Memerlukan Claude Code v2.1.202 atau lebih baru. {/* min-version: 2.1.203 */}Panduan agent count juga menggantikan ambang default untuk [peringatan `Large workflow`](/id/workflows#cost); perilaku itu memerlukan Claude Code v2.1.203 atau lebih baru | `"small"` |357| `workflowSizeGuideline` | {/* min-version: 2.1.202 */}**Default**: `unrestricted`, yang tidak mengirim panduan. Menetapkan [jumlah agent yang Claude targetkan](/id/workflows#set-a-size-guideline) dalam dynamic workflows yang ditulis. Claude Code mengirim nilai ke Claude sebagai saran, bukan batas yang diterapkan. Menerima `unrestricted`, `small`, `medium`, atau `large`. Muncul di `/config` sebagai **Dynamic workflow size**. Anda juga dapat menetapkannya langsung dengan `/config workflowSizeGuideline=small`. Memerlukan Claude Code v2.1.202 atau lebih baru. {/* min-version: 2.1.203 */}Panduan agent count juga menggantikan ambang default untuk [peringatan `Large workflow`](/id/workflows#cost); perilaku itu memerlukan Claude Code v2.1.203 atau lebih baru | `"small"` |

354 358 


360 364 

361| Kunci | Deskripsi | Contoh |365| Kunci | Deskripsi | Contoh |

362| :---------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------ |366| :---------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------ |

363| `worktree.baseRef` | Ref mana yang baru worktrees cabang dari. `"fresh"` (default) cabang dari `origin/<default-branch>` untuk pohon bersih yang cocok dengan remote. `"head"` cabang dari `HEAD` lokal Anda saat ini, jadi komit yang tidak didorong dan status cabang fitur ada di worktree. Berlaku untuk `--worktree`, tool `EnterWorktree`, dan isolasi subagent | `"head"` |367| `worktree.baseRef` | Ref mana yang baru worktrees cabang dari. `"fresh"` (default) cabang dari `origin/<default-branch>` untuk pohon bersih yang cocok dengan remote. `"head"` cabang dari `HEAD` lokal Anda saat ini, jadi komit yang tidak didorong dan status cabang fitur ada di worktree. Di dalam linked worktree, `"head"` diselesaikan ke `HEAD` worktree itu, bukan checkout utama. Berlaku untuk `--worktree`, tool `EnterWorktree`, dan isolasi subagent | `"head"` |

364| `worktree.symlinkDirectories` | Direktori untuk symlink dari repositori utama ke setiap worktree untuk menghindari duplikasi direktori besar di disk. Tidak ada direktori yang disymlink secara default | `["node_modules", ".cache"]` |368| `worktree.symlinkDirectories` | Direktori untuk symlink dari repositori utama ke setiap worktree untuk menghindari duplikasi direktori besar di disk. Tidak ada direktori yang disymlink secara default | `["node_modules", ".cache"]` |

365| `worktree.sparsePaths` | Direktori untuk diperiksa di setiap worktree melalui git sparse-checkout. Hanya jalur yang terdaftar plus file tingkat root yang ditulis ke disk, yang lebih cepat di monorepo besar | `["packages/my-app", "shared/utils"]` |369| `worktree.sparsePaths` | Direktori untuk diperiksa di setiap worktree melalui git sparse-checkout. Hanya jalur yang terdaftar plus file tingkat root yang ditulis ke disk, yang lebih cepat di monorepo besar. Saat sparse worktree ada, git mengaktifkan `extensions.worktreeConfig` dalam `.git/config` bersama repositori; lihat [Check out only the directories you need](/id/large-codebases#check-out-only-the-directories-you-need) | `["packages/my-app", "shared/utils"]` |

366| `worktree.bgIsolation` | {/* min-version: 2.1.143 */}Mode isolasi untuk [background sessions](/id/agent-view#how-file-edits-are-isolated). `"worktree"` (default) memblokir `Edit`/`Write` dalam checkout utama sampai `EnterWorktree` dipanggil. {/* min-version: 2.1.203 */}Di luar repositori git, hook [`WorktreeCreate`](/id/worktrees#non-git-version-control) yang gagal melepaskan blok sehingga sesi dapat mengedit direktori kerja di tempat; memerlukan Claude Code v2.1.203 atau lebih baru. `"none"` memungkinkan pekerjaan latar belakang mengedit salinan kerja secara langsung. Memerlukan Claude Code v2.1.143 atau lebih baru | `"none"` |370| `worktree.bgIsolation` | {/* min-version: 2.1.143 */}Mode isolasi untuk [background sessions](/id/agent-view#how-file-edits-are-isolated). `"worktree"` (default) memblokir `Edit`/`Write` dalam checkout utama sampai `EnterWorktree` dipanggil. {/* min-version: 2.1.203 */}Di luar repositori git, hook [`WorktreeCreate`](/id/worktrees#non-git-version-control) yang gagal melepaskan blok sehingga sesi dapat mengedit direktori kerja di tempat; memerlukan Claude Code v2.1.203 atau lebih baru. `"none"` memungkinkan pekerjaan latar belakang mengedit salinan kerja secara langsung. Memerlukan Claude Code v2.1.143 atau lebih baru | `"none"` |

367 371 

368Untuk menyalin file yang diabaikan git seperti `.env` ke worktrees baru, gunakan file [`.worktreeinclude`](/id/worktrees#copy-gitignored-files-into-worktrees) di akar proyek Anda daripada pengaturan.372Untuk menyalin file yang diabaikan git seperti `.env` ke worktrees baru, gunakan file [`.worktreeinclude`](/id/worktrees#copy-gitignored-files-into-worktrees) di akar proyek Anda daripada pengaturan.


372</h3>376</h3>

373 377 

374| Kunci | Deskripsi | Contoh |378| Kunci | Deskripsi | Contoh |

375| :---------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- |379| :---------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- |

376| `allow` | Array aturan izin untuk memungkinkan penggunaan tool. Glob nama tool didukung hanya dalam posisi tool setelah prefiks `mcp__<server>__` literal, seperti `mcp__github__get_*`; segmen server harus bebas glob. Lihat [Sintaks aturan izin](#permission-rule-syntax) di bawah untuk detail pencocokan pola | `[ "Bash(git diff *)" ]` |380| `allow` | Array aturan izin untuk memungkinkan penggunaan tool. Glob nama tool didukung hanya dalam posisi tool setelah prefiks `mcp__<server>__` literal, seperti `mcp__github__get_*`; segmen server harus bebas glob. Lihat [Sintaks aturan izin](#permission-rule-syntax) di bawah untuk detail pencocokan pola | `[ "Bash(git diff *)" ]` |

377| `ask` | Array aturan izin untuk meminta konfirmasi saat penggunaan tool. Lihat [Sintaks aturan izin](#permission-rule-syntax) di bawah | `[ "Bash(git push *)" ]` |381| `ask` | Array aturan izin untuk meminta konfirmasi saat penggunaan tool. Lihat [Sintaks aturan izin](#permission-rule-syntax) di bawah | `[ "Bash(git push *)" ]` |

378| `deny` | Array aturan izin untuk menolak penggunaan tool. Gunakan ini untuk mengecualikan file sensitif dari akses Claude Code. Nama tool menerima pola glob: `"*"` menolak setiap tool dan `"mcp__*"` menolak semua tools MCP. Lihat [Sintaks aturan izin](#permission-rule-syntax) dan [Batasan izin Bash](/id/permissions#tool-specific-permission-rules) | `[ "WebFetch", "Bash(curl *)", "Read(./.env)", "Read(./secrets/**)" ]` |382| `deny` | Array aturan izin untuk menolak penggunaan tool. Gunakan ini untuk mengecualikan file sensitif dari akses Claude Code. Nama tool menerima pola glob: `"*"` menolak setiap tool dan `"mcp__*"` menolak semua tools MCP. Lihat [Sintaks aturan izin](#permission-rule-syntax) dan [Batasan izin Bash](/id/permissions#tool-specific-permission-rules) | `[ "WebFetch", "Bash(curl *)", "Read(./.env)", "Read(./secrets/**)" ]` |

379| `additionalDirectories` | [Direktori kerja](/id/permissions#working-directories) tambahan untuk akses file. Sebagian besar konfigurasi `.claude/` [tidak ditemukan](/id/permissions#additional-directories-grant-file-access-not-configuration) dari direktori ini | `[ "../docs/" ]` |383| `additionalDirectories` | [Direktori kerja](/id/permissions#working-directories) tambahan untuk akses file. Sebagian besar konfigurasi `.claude/` [tidak ditemukan](/id/permissions#additional-directories-grant-file-access-not-configuration) dari direktori ini | `[ "../docs/" ]` |

380| `defaultMode` | Mode [izin](/id/permission-modes) default saat membuka Claude Code. Nilai yang valid: `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, `bypassPermissions`, dan {/* min-version: 2.1.200 */}}`manual` sebagai alias untuk `default`, mode yang diberi label Manual di CLI dan ekstensi VS Code dan JetBrains. Alias `manual` memerlukan Claude Code v2.1.200 atau lebih baru. {/* min-version: 2.1.142 */}}`auto` diabaikan saat diatur dalam pengaturan proyek atau lokal, jadi repositori tidak dapat memberikan dirinya sendiri mode otomatis; atur di `~/.claude/settings.json` sebagai gantinya. Sebelum v2.1.142, pengaturan proyek dapat menetapkan `auto`. Flag CLI `--permission-mode` menimpa pengaturan ini untuk sesi tunggal | `"acceptEdits"` |384| `defaultMode` | Mode [izin](/id/permission-modes) default saat membuka Claude Code. Nilai yang valid: `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, `bypassPermissions`, dan {{/* min-version: 2.1.200 */}}`manual` sebagai alias untuk `default`, mode yang diberi label Manual di CLI dan ekstensi VS Code dan JetBrains. Alias `manual` memerlukan Claude Code v2.1.200 atau lebih baru. {{/* min-version: 2.1.142 */}}`auto` diabaikan saat diatur dalam pengaturan proyek atau lokal, jadi repositori tidak dapat memberikan dirinya sendiri mode otomatis; atur di `~/.claude/settings.json` sebagai gantinya. Sebelum v2.1.142, pengaturan proyek dapat menetapkan `auto`. Flag CLI `--permission-mode` menimpa pengaturan ini untuk sesi tunggal | `"acceptEdits"` |

381| `disableBypassPermissionsMode` | Atur ke `"disable"` untuk mencegah mode `bypassPermissions` diaktifkan. Ini menonaktifkan flag baris perintah `--dangerously-skip-permissions`. Paling berguna dalam [pengaturan yang dikelola](/id/permissions#managed-settings) untuk menegakkan kebijakan organisasi, tetapi berfungsi dari cakupan apa pun | `"disable"` |385| `disableBypassPermissionsMode` | Atur ke `"disable"` untuk mencegah mode `bypassPermissions` diaktifkan. Ini menonaktifkan flag baris perintah `--dangerously-skip-permissions`. Paling berguna dalam [pengaturan yang dikelola](/id/permissions#managed-settings) untuk menegakkan kebijakan organisasi, tetapi berfungsi dari cakupan apa pun | `"disable"` |

382| `skipDangerousModePermissionPrompt` | Lewati prompt konfirmasi yang ditampilkan sebelum memasuki mode bypass permissions melalui `--dangerously-skip-permissions` atau `defaultMode: "bypassPermissions"`. Diabaikan saat diatur dalam pengaturan proyek (`.claude/settings.json`) untuk mencegah repositori yang tidak terpercaya dari auto-bypass prompt | `true` |386| `skipDangerousModePermissionPrompt` | Lewati prompt konfirmasi yang ditampilkan sebelum memasuki mode bypass permissions melalui `--dangerously-skip-permissions` atau `defaultMode: "bypassPermissions"`. Diabaikan saat diatur dalam pengaturan proyek (`.claude/settings.json`) untuk mencegah repositori yang tidak terpercaya dari auto-bypass prompt | `true` |

383 387 


405Konfigurasikan perilaku sandboxing lanjutan. Sandboxing mengisolasi perintah bash dari sistem file dan jaringan Anda. Lihat [Sandboxing](/id/sandboxing) untuk detail.409Konfigurasikan perilaku sandboxing lanjutan. Sandboxing mengisolasi perintah bash dari sistem file dan jaringan Anda. Lihat [Sandboxing](/id/sandboxing) untuk detail.

406 410 

407| Kunci | Deskripsi | Contoh |411| Kunci | Deskripsi | Contoh |

408| :------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------- |412| :------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------- |

409| `enabled` | Aktifkan bash sandboxing (macOS, Linux, dan WSL2). Default: false | `true` |413| `enabled` | Aktifkan bash sandboxing (macOS, Linux, dan WSL2). Default: false | `true` |

410| `failIfUnavailable` | Keluar dengan kesalahan saat startup jika `sandbox.enabled` adalah true tetapi sandbox tidak dapat dimulai (dependensi yang hilang atau platform yang tidak didukung). Saat false (default), peringatan ditampilkan dan perintah berjalan tanpa sandbox. Dimaksudkan untuk penyebaran pengaturan yang dikelola yang memerlukan sandboxing sebagai gerbang keras | `true` |414| `failIfUnavailable` | Keluar dengan kesalahan saat startup jika `sandbox.enabled` adalah true tetapi sandbox tidak dapat dimulai (dependensi yang hilang atau platform yang tidak didukung). Saat false (default), peringatan ditampilkan dan perintah berjalan tanpa sandbox. Dimaksudkan untuk penyebaran pengaturan yang dikelola yang memerlukan sandboxing sebagai gerbang keras | `true` |

411| `autoAllowBashIfSandboxed` | Secara otomatis menyetujui perintah bash saat sandboxed. Default: true | `true` |415| `autoAllowBashIfSandboxed` | Secara otomatis menyetujui perintah bash saat sandboxed. Default: true | `true` |


414| `filesystem.allowWrite` | Jalur tambahan di mana perintah sandboxed dapat menulis. Array digabungkan di seluruh semua cakupan pengaturan: jalur pengguna, proyek, dan yang dikelola digabungkan, bukan diganti. Juga digabungkan dengan jalur dari aturan izin `Edit(...)` allow. Lihat [prefiks jalur sandbox](#sandbox-path-prefixes) di bawah. | `["/tmp/build", "~/.kube"]` |418| `filesystem.allowWrite` | Jalur tambahan di mana perintah sandboxed dapat menulis. Array digabungkan di seluruh semua cakupan pengaturan: jalur pengguna, proyek, dan yang dikelola digabungkan, bukan diganti. Juga digabungkan dengan jalur dari aturan izin `Edit(...)` allow. Lihat [prefiks jalur sandbox](#sandbox-path-prefixes) di bawah. | `["/tmp/build", "~/.kube"]` |

415| `filesystem.denyWrite` | Jalur di mana perintah sandboxed tidak dapat menulis. Array digabungkan di seluruh semua cakupan pengaturan. Juga digabungkan dengan jalur dari aturan izin `Edit(...)` deny. | `["/etc", "/usr/local/bin"]` |419| `filesystem.denyWrite` | Jalur di mana perintah sandboxed tidak dapat menulis. Array digabungkan di seluruh semua cakupan pengaturan. Juga digabungkan dengan jalur dari aturan izin `Edit(...)` deny. | `["/etc", "/usr/local/bin"]` |

416| `filesystem.denyRead` | Jalur di mana perintah sandboxed tidak dapat membaca. Array digabungkan di seluruh semua cakupan pengaturan. Juga digabungkan dengan jalur dari aturan izin `Read(...)` deny. | `["~/.aws/credentials"]` |420| `filesystem.denyRead` | Jalur di mana perintah sandboxed tidak dapat membaca. Array digabungkan di seluruh semua cakupan pengaturan. Juga digabungkan dengan jalur dari aturan izin `Read(...)` deny. | `["~/.aws/credentials"]` |

417| `filesystem.allowRead` | Jalur untuk mengizinkan kembali pembacaan dalam region `denyRead`. Memiliki prioritas atas `denyRead`. Array digabungkan di seluruh semua cakupan pengaturan. Gunakan ini untuk membuat pola akses baca khusus workspace. | `["."]` |421| `filesystem.allowRead` | Jalur untuk mengizinkan kembali pembacaan dalam region `denyRead`. Entri `allowRead` membuka kembali pembacaan di dalam region `denyRead` yang lebih luas, dan jalur tepat dalam `denyRead` tetap diblokir di dalam `allowRead` yang lebih luas; lihat [tabel overlap](/id/sandboxing#configure-sandboxing) untuk contoh. Array digabungkan di seluruh semua cakupan pengaturan. Gunakan ini untuk membuat pola akses baca khusus workspace. | `["."]` |

418| `filesystem.allowManagedReadPathsOnly` | (Pengaturan yang dikelola saja) Hanya jalur `filesystem.allowRead` dari pengaturan yang dikelola yang dihormati. `denyRead` masih digabungkan dari semua sumber. Default: false | `true` |422| `filesystem.allowManagedReadPathsOnly` | (Pengaturan yang dikelola saja) Hanya jalur `filesystem.allowRead` dari pengaturan yang dikelola yang dihormati. `denyRead` masih digabungkan dari semua sumber. Default: false | `true` |

419| `credentials.files` | {/* min-version: 2.1.187 */}File kredensial atau direktori yang perintah sandboxed tidak dapat membaca. Menerapkan blokir baca yang sama seperti `filesystem.denyRead`; kunci terpisah menjaga jalur kredensial dikelompokkan dengan `credentials.envVars` dan terpisah dari aturan sistem file umum. Setiap entri adalah `{ "path": "...", "mode": "deny" }`, dan `deny` adalah satu-satunya mode yang didukung untuk file. Jalur menggunakan [prefiks](#sandbox-path-prefixes) yang sama seperti pengaturan `filesystem.*`. Array digabungkan di seluruh semua cakupan pengaturan. Memerlukan Claude Code v2.1.187 atau lebih baru. | `[{ "path": "~/.aws/credentials", "mode": "deny" }]` |423| `credentials.files` | {/* min-version: 2.1.187 */}File kredensial atau direktori yang perintah sandboxed tidak dapat membaca. Menerapkan blokir baca yang sama seperti `filesystem.denyRead`; kunci terpisah menjaga jalur kredensial dikelompokkan dengan `credentials.envVars` dan terpisah dari aturan sistem file umum. Setiap entri adalah `{ "path": "...", "mode": "deny" }`, dan `deny` adalah satu-satunya mode yang didukung untuk file. Jalur menggunakan [prefiks](#sandbox-path-prefixes) yang sama seperti pengaturan `filesystem.*`. Array digabungkan di seluruh semua cakupan pengaturan. Memerlukan Claude Code v2.1.187 atau lebih baru. | `[{ "path": "~/.aws/credentials", "mode": "deny" }]` |

420| `credentials.envVars` | {/* min-version: 2.1.187 */}Variabel lingkungan untuk [melindungi dari perintah sandboxed](/id/sandboxing#protect-credentials). Setiap entri memiliki `name` dan `mode`; nama harus dimulai dengan huruf atau garis bawah dan hanya berisi huruf, digit, dan garis bawah. `deny` menghapus variabel dari lingkungan perintah sandboxed. Memerlukan Claude Code v2.1.187 atau lebih baru. {/* min-version: 2.1.199 */}}`mask` mengganti variabel dengan nilai sentinel per-sesi di dalam sandbox sementara proxy sandbox mengganti nilai nyata pada permintaan keluar ke `injectHosts` entri itu; memerlukan `network.tlsTerminate` dan Claude Code v2.1.199 atau lebih baru. Entri `mask` hanya dihormati dari pengaturan pengguna, yang dikelola, atau CLI `--settings`, bukan dari `.claude/settings.json` atau `.claude/settings.local.json`. Array digabungkan di seluruh semua cakupan pengaturan, dan `deny` memiliki prioritas saat variabel yang sama muncul dengan kedua mode. | `[{ "name": "GITHUB_TOKEN", "mode": "deny" }]` |424| `credentials.envVars` | {/* min-version: 2.1.187 */}Variabel lingkungan untuk [melindungi dari perintah sandboxed](/id/sandboxing#protect-credentials). Setiap entri memiliki `name` dan `mode`; nama harus dimulai dengan huruf atau garis bawah dan hanya berisi huruf, digit, dan garis bawah. `deny` menghapus variabel dari lingkungan perintah sandboxed. Memerlukan Claude Code v2.1.187 atau lebih baru. {{/* min-version: 2.1.199 */}}`mask` mengganti variabel dengan nilai sentinel per-sesi di dalam sandbox sementara proxy sandbox mengganti nilai nyata pada permintaan keluar ke `injectHosts` entri itu; memerlukan `network.tlsTerminate` dan Claude Code v2.1.199 atau lebih baru. Entri `mask` hanya dihormati dari pengaturan pengguna, yang dikelola, atau CLI `--settings`, bukan dari `.claude/settings.json` atau `.claude/settings.local.json`. Array digabungkan di seluruh semua cakupan pengaturan, dan `deny` memiliki prioritas saat variabel yang sama muncul dengan kedua mode. | `[{ "name": "GITHUB_TOKEN", "mode": "deny" }]` |

421| `credentials.envVars[].injectHosts` | Host di mana proxy sandbox mengganti nilai nyata dari entri `mask`. Setiap host juga harus dicakup oleh `network.allowedDomains`, baik tepat atau dengan wildcard. Saat tidak diatur, proxy mengganti nilai pada permintaan ke setiap host dalam `network.allowedDomains`. Diterima tetapi diabaikan saat `mode` adalah `deny`. Memerlukan Claude Code v2.1.199 atau lebih baru. {/* min-version: 2.1.199 */} | `["api.github.com"]` |425| `credentials.envVars[].injectHosts` | Host di mana proxy sandbox mengganti nilai nyata dari entri `mask`. Setiap host juga harus dicakup oleh `network.allowedDomains`, baik tepat atau dengan wildcard. Saat tidak diatur, proxy mengganti nilai pada permintaan ke setiap host dalam `network.allowedDomains`. Diterima tetapi diabaikan saat `mode` adalah `deny`. Memerlukan Claude Code v2.1.199 atau lebih baru. {{/* min-version: 2.1.199 */}} | `["api.github.com"]` |

422| `credentials.allowPlaintextInject` | Izinkan substitusi `mask` pada permintaan HTTP biasa serta HTTPS yang dihentikan TLS. Pada HTTP biasa identitas upstream tidak diverifikasi dan kredensial berjalan dalam cleartext, jadi biarkan ini mati di luar jaringan uji terpercaya. Hanya dihormati dari pengaturan pengguna, yang dikelola, atau CLI `--settings`, bukan dari `.claude/settings.json` atau `.claude/settings.local.json`. Default: false. Memerlukan Claude Code v2.1.199 atau lebih baru. {/* min-version: 2.1.199 */} | `true` |426| `credentials.allowPlaintextInject` | Izinkan substitusi `mask` pada permintaan HTTP biasa serta HTTPS yang dihentikan TLS. Pada HTTP biasa identitas upstream tidak diverifikasi dan kredensial berjalan dalam cleartext, jadi biarkan ini mati di luar jaringan uji terpercaya. Hanya dihormati dari pengaturan pengguna, yang dikelola, atau CLI `--settings`, bukan dari `.claude/settings.json` atau `.claude/settings.local.json`. Default: false. Memerlukan Claude Code v2.1.199 atau lebih baru. {{/* min-version: 2.1.199 */}} | `true` |

423| `network.allowUnixSockets` | (macOS saja) Jalur soket Unix yang dapat diakses dalam sandbox. Diabaikan di Linux dan WSL2, di mana filter seccomp tidak dapat memeriksa jalur soket; gunakan `allowAllUnixSockets` sebagai gantinya. | `["~/.ssh/agent-socket"]` |427| `network.allowUnixSockets` | (macOS saja) Jalur soket Unix yang dapat diakses dalam sandbox. Diabaikan di Linux dan WSL2, di mana filter seccomp tidak dapat memeriksa jalur soket; gunakan `allowAllUnixSockets` sebagai gantinya. | `["~/.ssh/agent-socket"]` |

424| `network.allowAllUnixSockets` | Izinkan semua koneksi soket Unix dalam sandbox. Di Linux dan WSL2 ini adalah satu-satunya cara untuk mengizinkan soket Unix, karena melewati filter seccomp yang sebaliknya memblokir panggilan `socket(AF_UNIX, ...)`. Default: false | `true` |428| `network.allowAllUnixSockets` | Izinkan semua koneksi soket Unix dalam sandbox. Di Linux dan WSL2 ini adalah satu-satunya cara untuk mengizinkan soket Unix, karena melewati filter seccomp yang sebaliknya memblokir panggilan `socket(AF_UNIX, ...)`. Default: false | `true` |

425| `network.allowLocalBinding` | Izinkan pengikatan ke port localhost (macOS saja). Default: false | `true` |429| `network.allowLocalBinding` | Izinkan pengikatan ke port localhost (macOS saja). Default: false | `true` |


429| `network.allowManagedDomainsOnly` | (Pengaturan yang dikelola saja) Hanya `allowedDomains` dan aturan allow `WebFetch(domain:...)` dari pengaturan yang dikelola yang dihormati. Domain dari pengaturan pengguna, proyek, dan lokal diabaikan. Domain yang tidak diizinkan diblokir secara otomatis tanpa meminta pengguna. Domain yang ditolak masih dihormati dari semua sumber. Default: false | `true` |433| `network.allowManagedDomainsOnly` | (Pengaturan yang dikelola saja) Hanya `allowedDomains` dan aturan allow `WebFetch(domain:...)` dari pengaturan yang dikelola yang dihormati. Domain dari pengaturan pengguna, proyek, dan lokal diabaikan. Domain yang tidak diizinkan diblokir secara otomatis tanpa meminta pengguna. Domain yang ditolak masih dihormati dari semua sumber. Default: false | `true` |

430| `network.httpProxyPort` | Port proxy HTTP yang digunakan jika Anda ingin membawa proxy Anda sendiri. Jika tidak ditentukan, Claude akan menjalankan proxy-nya sendiri. | `8080` |434| `network.httpProxyPort` | Port proxy HTTP yang digunakan jika Anda ingin membawa proxy Anda sendiri. Jika tidak ditentukan, Claude akan menjalankan proxy-nya sendiri. | `8080` |

431| `network.socksProxyPort` | Port proxy SOCKS5 yang digunakan jika Anda ingin membawa proxy Anda sendiri. Jika tidak ditentukan, Claude akan menjalankan proxy-nya sendiri. | `8081` |435| `network.socksProxyPort` | Port proxy SOCKS5 yang digunakan jika Anda ingin membawa proxy Anda sendiri. Jika tidak ditentukan, Claude akan menjalankan proxy-nya sendiri. | `8081` |

432| `network.tlsTerminate` | Eksperimental. Hentikan TLS di dalam proxy sandbox sehingga dapat membaca konten permintaan HTTPS. Diperlukan untuk substitusi kredensial `mask` [](/id/sandboxing#protect-credentials). Atur `{}` untuk menghasilkan otoritas sertifikat ephemeral untuk sesi, atau atur `caCertPath` dan `caKeyPath` untuk menggunakan milik Anda sendiri. Hanya dihormati dari pengaturan pengguna, yang dikelola, atau CLI `--settings`, bukan dari `.claude/settings.json` atau `.claude/settings.local.json`. Memerlukan Claude Code v2.1.199 atau lebih baru. {/* min-version: 2.1.199 */} | `{}` |436| `network.tlsTerminate` | Eksperimental. Hentikan TLS di dalam proxy sandbox sehingga dapat membaca konten permintaan HTTPS. Diperlukan untuk substitusi kredensial `mask` [](/id/sandboxing#protect-credentials). Atur `{}` untuk menghasilkan otoritas sertifikat ephemeral untuk sesi, atau atur `caCertPath` dan `caKeyPath` untuk menggunakan milik Anda sendiri. Hanya dihormati dari pengaturan pengguna, yang dikelola, atau CLI `--settings`, bukan dari `.claude/settings.json` atau `.claude/settings.local.json`. Memerlukan Claude Code v2.1.199 atau lebih baru. {{/* min-version: 2.1.199 */}} | `{}` |

433| `enableWeakerNestedSandbox` | Aktifkan sandbox yang lebih lemah untuk lingkungan Docker tanpa hak istimewa (Linux dan WSL2 saja). **Mengurangi keamanan.** Default: false | `true` |437| `enableWeakerNestedSandbox` | Aktifkan sandbox yang lebih lemah untuk lingkungan Docker tanpa hak istimewa (Linux dan WSL2 saja). **Mengurangi keamanan.** Default: false | `true` |

434| `enableWeakerNetworkIsolation` | (macOS saja) Izinkan akses ke layanan kepercayaan TLS sistem (`com.apple.trustd.agent`) dalam sandbox. Diperlukan untuk tools berbasis Go seperti `gh`, `gcloud`, dan `terraform` untuk memverifikasi sertifikat TLS saat menggunakan `httpProxyPort` dengan proxy MITM dan CA khusus. **Mengurangi keamanan** dengan membuka jalur eksfiltrasi data potensial. Default: false | `true` |438| `enableWeakerNetworkIsolation` | (macOS saja) Izinkan akses ke layanan kepercayaan TLS sistem (`com.apple.trustd.agent`) dalam sandbox. Diperlukan untuk tools berbasis Go seperti `gh`, `gcloud`, dan `terraform` untuk memverifikasi sertifikat TLS saat menggunakan `httpProxyPort` dengan proxy MITM dan CA khusus. **Mengurangi keamanan** dengan membuka jalur eksfiltrasi data potensial. Default: false | `true` |

435| `allowAppleEvents` | (macOS saja) Izinkan perintah sandboxed mengirim Apple Events. Diperlukan untuk `open`, `osascript`, dan tools yang membuka URL di browser, yang sebaliknya gagal dengan error `-600`. **Menghapus isolasi eksekusi kode.** Perintah sandboxed dapat meluncurkan aplikasi lain tanpa sandbox dengan tidak ada prompt pengguna; mereka juga dapat mengirim perintah AppleScript ke aplikasi yang sedang berjalan seperti Terminal, tunduk pada prompt persetujuan otomasi per-app macOS (TCC). Hanya dihormati dari pengaturan pengguna, yang dikelola, atau CLI, bukan dari pengaturan proyek. Default: false | `true` |439| `allowAppleEvents` | (macOS saja) Izinkan perintah sandboxed mengirim Apple Events. Diperlukan untuk `open`, `osascript`, dan tools yang membuka URL di browser, yang sebaliknya gagal dengan error `-600`. **Menghapus isolasi eksekusi kode.** Perintah sandboxed dapat meluncurkan aplikasi lain tanpa sandbox dengan tidak ada prompt pengguna; mereka juga dapat mengirim perintah AppleScript ke aplikasi yang sedang berjalan seperti Terminal, tunduk pada prompt persetujuan otomasi per-app macOS (TCC). Hanya dihormati dari pengaturan pengguna, yang dikelola, atau CLI, bukan dari pengaturan proyek. Default: false | `true` |


831}836}

832```837```

833 838 

839<h4 id="pluginconfigs">

840 `pluginConfigs`

841</h4>

842 

843Menyimpan nilai opsi non-sensitif yang dikumpulkan oleh prompt [`userConfig`](/id/plugins-reference#user-configuration) plugin, diindeks berdasarkan ID plugin. Claude Code menulis kunci ini ke pengaturan pengguna saat Anda mengisi dialog konfigurasi plugin, sehingga Anda tidak perlu mengeditnya secara manual. Opsi sensitif disimpan di macOS Keychain sebagai gantinya, atau di `~/.claude/.credentials.json` pada platform tanpa keychain yang didukung.

844 

845Contoh ini menyimpan satu opsi untuk plugin yang diinstal dari marketplace `acme-tools`:

846 

847```json theme={null}

848{

849 "pluginConfigs": {

850 "deployer@acme-tools": {

851 "options": {

852 "api_endpoint": "https://api.example.com"

853 }

854 }

855 }

856}

857```

858 

859`pluginConfigs` dibaca dari pengaturan pengguna, flag `--settings`, dan pengaturan yang dikelola saja. Entri dalam `.claude/settings.json` proyek atau `.claude/settings.local.json` diabaikan, karena nilai-nilai ini diganti ke dalam konfigurasi hook, MCP, dan LSP plugin, dan repositori yang dikloning tidak boleh dapat memasoknya. Sebelum v2.1.207, pengaturan proyek dan lokal juga dibaca.

860 

834<h4 id="extraknownmarketplaces">861<h4 id="extraknownmarketplaces">

835 `extraKnownMarketplaces`862 `extraKnownMarketplaces`

836</h4>863</h4>

troubleshooting.md +18 −14

Details

10 10 

11| Gejala | Buka |11| Gejala | Buka |

12| :------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------- |12| :------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------- |

13| `command not found`, instalasi gagal, masalah PATH, `EACCES`, kesalahan TLS | [Troubleshoot installation and login](/id/troubleshoot-install) |13| `command not found`, instalasi gagal, masalah PATH, `EACCES`, kesalahan TLS | [Troubleshoot installation and login](/docs/id/troubleshoot-install) |

14| Pembaruan atau instalasi unduhan gagal dengan `The connection dropped while downloading the update` atau `aborted` | [Error reference](/id/errors#the-connection-dropped-while-downloading-the-update) |14| Pembaruan atau instalasi unduhan gagal dengan `The connection dropped while downloading the update` atau `aborted` | [Error reference](/docs/id/errors#the-connection-dropped-while-downloading-the-update) |

15| Loop login, kesalahan OAuth, `403 Forbidden`, "organization disabled", kredensial Amazon Bedrock, Google Cloud's Agent Platform, atau Microsoft Foundry | [Troubleshoot installation and login](/id/troubleshoot-install#login-and-authentication) |15| Loop login, kesalahan OAuth, `403 Forbidden`, "organization disabled", kredensial Amazon Bedrock, Google Cloud's Agent Platform, atau Microsoft Foundry | [Troubleshoot installation and login](/docs/id/troubleshoot-install#login-and-authentication) |

16| Pengaturan tidak diterapkan, hooks tidak berfungsi, server MCP tidak dimuat | [Debug your configuration](/id/debug-your-config) |16| Pengaturan tidak diterapkan, hooks tidak berfungsi, server MCP tidak dimuat | [Debug your configuration](/docs/id/debug-your-config) |

17| `API Error: 5xx`, `529 Overloaded`, `429`, kesalahan validasi permintaan | [Error reference](/id/errors) |17| `API Error: 5xx`, `529 Overloaded`, `429`, kesalahan validasi permintaan | [Error reference](/docs/id/errors) |

18| `model not found` atau `you may not have access to it` | [Error reference](/id/errors#theres-an-issue-with-the-selected-model) |18| `model not found` atau `you may not have access to it` | [Error reference](/docs/id/errors#theres-an-issue-with-the-selected-model) |

19| Ekstensi VS Code tidak terhubung atau tidak mendeteksi Claude | [VS Code integration](/id/vs-code#fix-common-issues) |19| Ekstensi VS Code tidak terhubung atau tidak mendeteksi Claude | [VS Code integration](/docs/id/vs-code#fix-common-issues) |

20| Plugin JetBrains atau IDE tidak terdeteksi | [JetBrains integration](/id/jetbrains#troubleshooting) |20| Plugin JetBrains atau IDE tidak terdeteksi | [JetBrains integration](/docs/id/jetbrains#troubleshooting) |

21| CPU atau memori tinggi, respons lambat, hang, pencarian tidak menemukan file | [Performance and stability](#performance-and-stability) di bawah |21| CPU atau memori tinggi, respons lambat, hang, pencarian tidak menemukan file | [Performance and stability](#performance-and-stability) di bawah |

22 22 

23Jika Anda tidak yakin mana yang berlaku, jalankan `/doctor` di dalam Claude Code untuk pemeriksaan otomatis instalasi, pengaturan, ekstensi, dan penggunaan konteks Anda; ini mengusulkan perbaikan yang dapat diterapkan setelah Anda mengonfirmasi. Jika `claude` tidak akan memulai sama sekali, jalankan `claude doctor` dari shell Anda sebagai gantinya. Jalankan `/mcp` untuk memeriksa status server MCP.23Jika Anda tidak yakin mana yang berlaku, jalankan `/doctor` di dalam Claude Code untuk pemeriksaan otomatis instalasi, pengaturan, ekstensi, dan penggunaan konteks Anda; ini mengusulkan perbaikan yang dapat diterapkan setelah Anda mengonfirmasi. Jika `claude` tidak akan memulai sama sekali, jalankan `claude doctor` dari shell Anda sebagai gantinya. Jalankan `/mcp` untuk memeriksa status server MCP.


371. Gunakan `/compact` secara teratur untuk mengurangi ukuran konteks371. Gunakan `/compact` secara teratur untuk mengurangi ukuran konteks

382. Tutup dan mulai ulang Claude Code di antara tugas-tugas besar382. Tutup dan mulai ulang Claude Code di antara tugas-tugas besar

393. Pertimbangkan menambahkan direktori build besar ke file `.gitignore` Anda393. Pertimbangkan menambahkan direktori build besar ke file `.gitignore` Anda

404. Mulai ulang dengan [`claude --safe-mode`](/id/cli-reference#cli-flags) untuk memeriksa apakah plugin, server MCP, atau hook adalah sumbernya. Ini menonaktifkan semua kustomisasi untuk sesi; jika penggunaan turun, lihat [Debug your configuration](/id/debug-your-config#test-against-a-clean-configuration) untuk menemukan yang mana404. Mulai ulang dengan [`claude --safe-mode`](/docs/id/cli-reference#cli-flags) untuk memeriksa apakah plugin, server MCP, atau hook adalah sumbernya. Ini menonaktifkan semua kustomisasi untuk sesi; jika penggunaan turun, lihat [Debug your configuration](/docs/id/debug-your-config#test-against-a-clean-configuration) untuk menemukan yang mana

41 41 

42Jika penggunaan memori tetap tinggi setelah langkah-langkah ini, jalankan `/heapdump` untuk menulis snapshot heap JavaScript dan rincian memori ke `~/Desktop`. Di Linux tanpa folder Desktop, file ditulis ke direktori home Anda.42Jika penggunaan memori tetap tinggi setelah langkah-langkah ini, jalankan `/heapdump` untuk menulis snapshot heap JavaScript dan rincian memori ke `~/Desktop`. Di Linux tanpa folder Desktop, file ditulis ke direktori home Anda.

43 43 

44Rincian menunjukkan resident set size, JS heap, array buffers, dan memori native yang tidak terhitung, yang membantu mengidentifikasi apakah pertumbuhan ada di objek JavaScript atau di kode native. Untuk memeriksa retainers, buka file `.heapsnapshot` di Chrome DevTools di bawah Memory → Load. Lampirkan kedua file saat melaporkan masalah memori di [GitHub](https://github.com/anthropics/claude-code/issues).44Rincian menunjukkan resident set size, JS heap, array buffers, dan native memory yang tidak terhitung, yang membantu mengidentifikasi apakah pertumbuhan ada di objek JavaScript atau di kode native. Untuk memeriksa retainers, buka file `.heapsnapshot` di Chrome DevTools di bawah Memory → Load; rinciannya adalah file yang berakhir dengan `-diagnostics.json`.

45 

46<Warning>

47 File `.heapsnapshot` berisi setiap string dalam proses. Jangan lampirkan ke masalah publik atau bagikan. Lampirkan hanya file `-diagnostics.json` saat melaporkan masalah memori di [GitHub](https://github.com/anthropics/claude-code/issues). File tersebut berisi statistik memori dan tidak ada konten percakapan atau kredensial.

48</Warning>

45 49 

46<h3 id="large-tables-are-cut-off-in-the-terminal">50<h3 id="large-tables-are-cut-off-in-the-terminal">

47 Large tables are cut off in the terminal51 Large tables are cut off in the terminal

48</h3>52</h3>

49 53 

50Tabel Markdown dengan lebih dari 200 baris merender 200 baris pertamanya diikuti dengan baris `… N more rows not shown`. Hanya tampilan yang dibatasi: tabel lengkap tetap dalam percakapan, dan [`/copy`](/id/commands) menyalin setiap baris. Untuk tabel yang terlalu besar untuk dibaca di terminal, minta Claude untuk menulisnya ke file sebagai gantinya. Sebelum v2.1.208, Claude Code merender setiap baris, jadi melanjutkan sesi yang berisi tabel yang sangat besar dapat terhenti saat merender ulang.54Tabel Markdown dengan lebih dari 200 baris merender 200 baris pertamanya diikuti dengan baris `… N more rows not shown`. Hanya tampilan yang dibatasi: tabel lengkap tetap dalam percakapan, dan [`/copy`](/docs/id/commands) menyalin setiap baris. Untuk tabel yang terlalu besar untuk dibaca di terminal, minta Claude untuk menulisnya ke file sebagai gantinya. Sebelum v2.1.208, Claude Code merender setiap baris, jadi melanjutkan sesi yang berisi tabel yang sangat besar dapat terhenti saat merender ulang.

51 55 

52<h3 id="auto-compaction-stops-with-a-thrashing-error">56<h3 id="auto-compaction-stops-with-a-thrashing-error">

53 Auto-compaction stops with a thrashing error57 Auto-compaction stops with a thrashing error


59 63 

601. Minta Claude membaca file yang terlalu besar dalam potongan yang lebih kecil, seperti rentang baris tertentu atau fungsi, alih-alih seluruh file641. Minta Claude membaca file yang terlalu besar dalam potongan yang lebih kecil, seperti rentang baris tertentu atau fungsi, alih-alih seluruh file

612. Jalankan `/compact` dengan fokus yang menjatuhkan output besar, misalnya `/compact keep only the plan and the diff`652. Jalankan `/compact` dengan fokus yang menjatuhkan output besar, misalnya `/compact keep only the plan and the diff`

623. Pindahkan pekerjaan file besar ke [subagent](/id/sub-agents) sehingga berjalan di jendela konteks terpisah663. Pindahkan pekerjaan file besar ke [subagent](/docs/id/sub-agents) sehingga berjalan di jendela konteks terpisah

634. Jalankan `/clear` jika percakapan sebelumnya tidak lagi diperlukan674. Jalankan `/clear` jika percakapan sebelumnya tidak lagi diperlukan

64 68 

65<h3 id="command-hangs-or-freezes">69<h3 id="command-hangs-or-freezes">


77 Garbled or corrupted text in an editor's integrated terminal81 Garbled or corrupted text in an editor's integrated terminal

78</h3>82</h3>

79 83 

80Jika karakter ditampilkan sebagai kotak, smear, atau glyph yang salah saat menjalankan Claude Code di terminal terintegrasi VS Code, Cursor, atau Devin Desktop, GPU renderer terminal kemungkinan adalah penyebabnya. Jalankan `/terminal-setup` di dalam Claude Code untuk mengatur `terminal.integrated.gpuAcceleration` ke `"off"`, atau atur secara manual di pengaturan editor Anda dan muat ulang jendela. Lihat [Terminal configuration](/id/terminal-config) untuk pengaturan lain yang ditulis `/terminal-setup`.84Jika karakter ditampilkan sebagai kotak, smear, atau glyph yang salah saat menjalankan Claude Code di terminal terintegrasi VS Code, Cursor, atau Devin Desktop, GPU renderer terminal kemungkinan adalah penyebabnya. Jalankan `/terminal-setup` di dalam Claude Code untuk mengatur `terminal.integrated.gpuAcceleration` ke `"off"`, atau atur secara manual di pengaturan editor Anda dan muat ulang jendela. Lihat [Terminal configuration](/docs/id/terminal-config) untuk pengaturan lain yang ditulis `/terminal-setup`.

81 85 

82<h3 id="search-and-discovery-issues">86<h3 id="search-and-discovery-issues">

83 Search and discovery issues87 Search and discovery issues


117 </Tab>121 </Tab>

118</Tabs>122</Tabs>

119 123 

120Kemudian atur `USE_BUILTIN_RIPGREP=0` di [environment](/id/env-vars) Anda.124Kemudian atur `USE_BUILTIN_RIPGREP=0` di [environment](/docs/id/env-vars) Anda.

121 125 

122<h3 id="slow-or-incomplete-search-results-on-wsl">126<h3 id="slow-or-incomplete-search-results-on-wsl">

123 Slow or incomplete search results on WSL127 Slow or incomplete search results on WSL