26 26
27Sebelum v2.1.211, Claude Code selalu menyimpan aturan di direktori awal, jadi persetujuan yang diberikan di worktree atau subdirektori tidak berlaku untuk sisa repositori. Aturan yang disimpan versi sebelumnya di subdirektori atau worktree masih berlaku untuk sesi yang dimulai di sana.27Sebelum v2.1.211, Claude Code selalu menyimpan aturan di direktori awal, jadi persetujuan yang diberikan di worktree atau subdirektori tidak berlaku untuk sisa repositori. Aturan yang disimpan versi sebelumnya di subdirektori atau worktree masih berlaku untuk sesi yang dimulai di sana.
28 28
29Kadang-kadang prompt izin hanya menawarkan persetujuan satu kali, tanpa opsi "jangan tanya lagi" dan tanpa opsi untuk mengizinkan tindakan untuk sisa sesi. Claude Code menawarkan opsi-opsi itu hanya ketika prompt dapat menunjukkan kepada Anda semua yang akan mereka izinkan, jadi aturan yang Anda simpan dari prompt mencakup hanya apa yang dinamai opsinya.29Kadang-kadang prompt izin hanya menawarkan persetujuan satu kali, tanpa opsi "jangan tanya lagi" dan tanpa opsi untuk mengizinkan tindakan untuk sisa sesi. Claude Code menawarkan opsi-opsi itu hanya ketika prompt dapat menunjukkan kepada Anda semua yang akan mereka izinkan, jadi aturan yang Anda simpan dari prompt mencakup hanya apa yang dinamai opsinya. Ketika prompt hanya menawarkan persetujuan satu kali, setujui tindakan sekali, atau tambahkan aturan sendiri di [`/permissions`](#manage-permissions).
30
31Ketika direktori tempat Anda memulai Claude Code adalah apa yang membuat label opsi terlalu panjang, Claude Code mempersingkatnya dalam label, mengganti direktori home Anda dengan `~` dan kemudian akhir jalur dengan `…`, dan menyimpan opsi. Anda masih menyimpan aturan yang sama. Claude Code menghilangkan opsi dalam tiga kasus:
32
33* **Perintah atau edit:** terlalu besar untuk ditampilkan sepenuhnya.
34* **Perintah atau jalur yang akan dicakup aturan:** label tidak dapat menampung semuanya.
35* **Direktori awal terlalu panjang, tidak dipersingkat:** berisi karakter yang tidak dapat ditampilkan Claude Code dengan aman, atau bahkan awalnya tidak sesuai.
36
37Setujui tindakan sekali, atau tambahkan aturan sendiri di [`/permissions`](#manage-permissions).
38 30
39<h3 id="add-a-comment-when-you-answer-a-permission-prompt">31<h3 id="add-a-comment-when-you-answer-a-permission-prompt">
40 Tambahkan komentar ketika Anda menjawab prompt izin32 Tambahkan komentar ketika Anda menjawab prompt izin
224 216
225Aturan izin menerima glob nama alat hanya setelah awalan literal `mcp__<server>__`. Segmen server harus bebas glob sehingga aturan menamai server spesifik yang Anda konfigurasi. `mcp__puppeteer__*` cocok dengan setiap alat dari server `puppeteer`, dan `mcp__github__get_*` cocok dengan alat `get_` miliknya. Glob izin yang tidak berlabuh seperti `"*"`, `"B*"`, atau `"mcp__*"` dilewati dengan peringatan dan tidak secara otomatis menyetujui apa pun.217Aturan izin menerima glob nama alat hanya setelah awalan literal `mcp__<server>__`. Segmen server harus bebas glob sehingga aturan menamai server spesifik yang Anda konfigurasi. `mcp__puppeteer__*` cocok dengan setiap alat dari server `puppeteer`, dan `mcp__github__get_*` cocok dengan alat `get_` miliknya. Glob izin yang tidak berlabuh seperti `"*"`, `"B*"`, atau `"mcp__*"` dilewati dengan peringatan dan tidak secara otomatis menyetujui apa pun.
226 218
227Aturan penolakan atau tanya yang nama alatnya tidak cocok dengan alat yang dikenal menghasilkan peringatan startup untuk menangkap kesalahan ketik. Nama alat yang berisi `_` atau `*` dikecualikan dari pemeriksaan.219Aturan penolakan atau tanya yang nama alatnya tidak cocok dengan alat yang dikenal menghasilkan peringatan startup untuk menangkap kesalahan ketik. Nama alat yang berisi `_` atau `*` dikecualikan dari pemeriksaan, dan begitu juga nama alat yang telah dihapus Claude Code, seperti `TaskOutput`.
228 220
229Label yang ditampilkan untuk alat dalam transkrip dan dialog izin dapat berbeda dari nama kanoniknya. Misalnya, alat yang diberi label `Stop Task` dalam transkrip memiliki nama kanonik `TaskStop`. Aturan izin dan [pencocokan hook](/docs/id/hooks) tidak cocok dengan label, jadi aturan yang ditulis sebagai `Stop Task` tidak cocok. Untuk aturan penolakan dan tanya, peringatan startup di atas menangkap ketidaksesuaian. Gunakan nama kanonik yang tercantum dalam [referensi alat](/docs/id/tools-reference).221Label yang ditampilkan untuk alat dalam transkrip dan dialog izin dapat berbeda dari nama kanoniknya. Misalnya, alat yang diberi label `Stop Task` dalam transkrip memiliki nama kanonik `TaskStop`. Aturan izin dan [pencocokan hook](/docs/id/hooks) tidak cocok dengan label, jadi aturan yang ditulis sebagai `Stop Task` tidak cocok. Untuk aturan penolakan dan tanya, peringatan startup di atas menangkap ketidaksesuaian. Gunakan nama kanonik yang tercantum dalam [referensi alat](/docs/id/tools-reference).
230 222
236 Bash228 Bash
237</h3>229</h3>
238 230
239Aturan Bash mencocokkan seluruh teks perintah, dengan `*` mewakili teks apa pun. [Pola wildcard](#wildcard-patterns) menunjukkan perintah mana yang cocok dengan setiap bentuk aturan dan di mana menempatkan `*`. Sisa bagian ini mencakup cara Claude Code mencocokkan perintah gabungan dan pembungkus, apa yang tidak dicocokkan aturan, perintah hanya baca, dan pengalihan.231Aturan Bash cocok dengan seluruh teks perintah, dengan `*` mewakili teks apa pun. [Pola wildcard](#wildcard-patterns) menunjukkan perintah mana yang cocok dengan setiap bentuk aturan dan di mana menempatkan `*`. Bagian lainnya mencakup cara Claude Code mencocokkan perintah gabungan dan pembungkus, apa yang tidak cocok dengan aturan, perintah baca-saja, dan pengalihan.
240 232
241<h4 id="compound-commands">233<h4 id="compound-commands">
242 Perintah gabungan234 Perintah gabungan
243</h4>235</h4>
244 236
245<Tip>237<Tip>
246 Claude Code menyadari operator shell, jadi aturan seperti `Bash(safe-cmd *)` tidak akan memberinya izin untuk menjalankan perintah `safe-cmd && other-cmd`. Pemisah perintah yang dikenali adalah `&&`, `||`, `;`, `|`, `|&`, `&`, dan baris baru. Aturan harus mencocokkan setiap subperintah secara independen.238 Claude Code menyadari operator shell, jadi aturan seperti `Bash(safe-cmd *)` tidak akan memberinya izin untuk menjalankan perintah `safe-cmd && other-cmd`. Pemisah perintah yang dikenali adalah `&&`, `||`, `;`, `|`, `|&`, `&`, dan baris baru. Aturan harus cocok dengan setiap subperintah secara independen.
247</Tip>239</Tip>
248 240
249Aturan deny dan ask berlaku ketika subperintah apa pun mencocokkannya, termasuk perintah yang bersarang di dalam subshell, substitusi perintah, atau badan alur kontrol seperti loop `for`. Aturan ask seperti `Bash(git clean *)` masih meminta Anda untuk `cd /tmp && git clean -f` atau `echo "$(git clean -f)"`, bahkan dalam [mode auto](/docs/id/permission-modes#eliminate-prompts-with-auto-mode).241Aturan tolak dan tanya berlaku ketika subperintah apa pun cocok dengan mereka, termasuk perintah yang bersarang di dalam subshell, substitusi perintah, atau badan alur kontrol seperti loop `for`. Aturan tanya seperti `Bash(git clean *)` masih meminta Anda untuk `cd /tmp && git clean -f` atau `echo "$(git clean -f)"`, bahkan dalam [mode otomatis](/docs/id/permission-modes#eliminate-prompts-with-auto-mode).
250 242
251Ketika `&&` atau `||` tidak memiliki apa pun setelahnya, seperti dalam `npm test &&`, Claude Code memperlakukan perintah sebagai tidak dapat diurai dan tidak membaginya menjadi subperintah untuk pencocokan aturan allow, jadi aturan seperti `Bash(npm *)` tidak menyetujuinya.243Ketika `&&` atau `||` tidak memiliki apa pun setelahnya, seperti dalam `npm test &&`, Claude Code memperlakukan perintah sebagai tidak dapat diurai dan tidak membaginya menjadi subperintah untuk pencocokan aturan izin, jadi aturan seperti `Bash(npm *)` tidak menyetujuinya.
252 244
253Ketika Anda menyetujui perintah gabungan dengan "Ya, jangan tanya lagi", Claude Code menyimpan aturan terpisah untuk setiap subperintah yang memerlukan persetujuan, bukan satu aturan untuk string gabungan lengkap. Misalnya, menyetujui `git status && npm test` menyimpan aturan untuk `npm test`, jadi invokasi `npm test` di masa depan dikenali terlepas dari apa yang mendahului `&&`. Subperintah seperti `cd` ke subdirektori menghasilkan aturan Read mereka sendiri untuk jalur itu. Hingga 5 aturan dapat disimpan untuk satu perintah gabungan.245Ketika Anda menyetujui perintah gabungan dengan "Ya, dan jangan tanya lagi", Claude Code menyimpan aturan terpisah untuk setiap subperintah yang memerlukan persetujuan, bukan satu aturan untuk string gabungan lengkap. Misalnya, menyetujui `git status && npm test` menyimpan aturan untuk `npm test`, jadi invokasi `npm test` di masa depan dikenali terlepas dari apa yang mendahului `&&`. Subperintah seperti `cd` ke direktori di luar direktori kerja Anda menghasilkan aturan Read mereka sendiri untuk jalur itu. Hingga 5 aturan dapat disimpan untuk satu perintah gabungan.
254 246
255<h4 id="process-wrappers">247<h4 id="process-wrappers">
256 Pembungkus248 Pembungkus
257</h4>249</h4>
258 250
259Sebelum mencocokkan aturan Bash, Claude Code menghilangkan serangkaian pembungkus tetap, jadi aturan seperti `Bash(npm test *)` juga mencocokkan `timeout 30 npm test`. Pembungkus yang dihilangkan adalah `timeout`, `time`, `nice`, `nohup`, dan `stdbuf`, ditambah shell builtin `command` dan `builtin`, dan `noglob` zsh. Masing-masing menjalankan argumennya sebagai perintah aktual. Dua bentuk terkait tidak dihilangkan: bentuk query `command -v`, yang mencari perintah daripada menjalankannya, dan `nocorrect` zsh.251Sebelum mencocokkan aturan Bash, Claude Code menghilangkan serangkaian pembungkus tetap, jadi aturan seperti `Bash(npm test *)` juga cocok dengan `timeout 30 npm test`. Pembungkus yang dihilangkan adalah `timeout`, `time`, `nice`, `nohup`, dan `stdbuf`, ditambah shell builtin `command` dan `builtin`, dan `noglob` zsh. Masing-masing menjalankan argumennya sebagai perintah aktual. Dua bentuk terkait tidak dihilangkan: bentuk kueri `command -v`, yang mencari perintah daripada menjalankannya, dan `nocorrect` zsh.
260 252
261Claude Code juga menghilangkan penugasan terkemuka variabel lingkungan yang dikenal aman, jadi `Bash(npm test *)` mencocokkan `NODE_ENV=test npm test`. Aturan allow tidak akan mencocokkan melampaui penugasan variabel apa pun yang lain. Aturan deny atau ask mencocokkan melampaui penugasan terkemuka apa pun, jadi `Bash(rm *)` dalam deny masih mencocokkan `FOO=bar rm -rf tmp/`.253Claude Code juga menghilangkan penugasan terdepan dari variabel lingkungan tertentu yang dikenal aman, jadi `Bash(npm test *)` cocok dengan `NODE_ENV=test npm test`. Aturan izin tidak akan cocok melampaui penugasan variabel apa pun yang lain. Aturan tolak atau tanya cocok melampaui penugasan terdepan apa pun, jadi `Bash(rm *)` dalam tolak masih cocok dengan `FOO=bar rm -rf tmp/`.
262 254
263`xargs` telanjang juga dihilangkan, jadi `Bash(grep *)` mencocokkan `xargs grep pattern`. Penghilangan hanya berlaku ketika `xargs` tidak memiliki flag: invokasi seperti `xargs -n1 grep pattern` dicocokkan sebagai perintah `xargs`, jadi aturan yang ditulis untuk perintah inner tidak mencakupnya.255`xargs` telanjang juga dihilangkan, jadi `Bash(grep *)` cocok dengan `xargs grep pattern`. Penghilangan hanya berlaku ketika `xargs` tidak memiliki flag: invokasi seperti `xargs -n1 grep pattern` dicocokkan sebagai perintah `xargs`, jadi aturan yang ditulis untuk perintah dalam tidak mencakupnya.
264 256
265Daftar pembungkus ini bawaan dan tidak dapat dikonfigurasi. Pelari lingkungan pengembangan seperti `direnv exec`, `devbox run`, `mise exec`, `npx`, dan `docker exec` tidak ada dalam daftar. Karena alat ini menjalankan argumen mereka sebagai perintah, aturan seperti `Bash(devbox run *)` mencocokkan apa pun yang datang setelah `run`, termasuk `devbox run rm -rf .`. Untuk menyetujui pekerjaan di dalam pelari lingkungan, tulis aturan spesifik yang mencakup baik pelari maupun perintah inner, seperti `Bash(devbox run npm test)`. Tambahkan satu aturan per perintah inner yang ingin Anda izinkan.257Daftar pembungkus ini bawaan dan tidak dapat dikonfigurasi. Pelari lingkungan pengembangan seperti `direnv exec`, `devbox run`, `mise exec`, `npx`, dan `docker exec` tidak ada dalam daftar. Karena alat-alat ini menjalankan argumen mereka sebagai perintah, aturan seperti `Bash(devbox run *)` cocok dengan apa pun yang datang setelah `run`, termasuk `devbox run rm -rf .`. Untuk menyetujui pekerjaan di dalam pelari lingkungan, tulis aturan spesifik yang mencakup baik pelari maupun perintah dalam, seperti `Bash(devbox run npm test)`. Tambahkan satu aturan per perintah dalam yang ingin Anda izinkan.
266 258
267Pembungkus exec seperti `watch`, `setsid`, `ionice`, dan `flock` tidak dapat disetujui otomatis oleh aturan awalan seperti `Bash(watch *)`, jadi dalam mode Manual mereka selalu meminta. Hal yang sama berlaku untuk `find` dengan `-exec` atau `-delete`: aturan `Bash(find *)` tidak mencakup bentuk ini. Untuk menyetujui invokasi spesifik, tulis aturan pencocokan tepat untuk string perintah lengkap.259Pembungkus Exec seperti `watch`, `setsid`, `ionice`, dan `flock` tidak dapat disetujui otomatis oleh aturan awalan seperti `Bash(watch *)`, jadi dalam mode Manual mereka selalu meminta. Hal yang sama berlaku untuk `find` dengan `-exec` atau `-delete`: aturan `Bash(find *)` tidak mencakup bentuk-bentuk ini. Untuk menyetujui invokasi spesifik, tulis aturan pencocokan tepat untuk string perintah lengkap.
268 260
269<h4 id="bash-rule-limits">261<h4 id="bash-rule-limits">
270 Apa yang tidak dicocokkan aturan Bash262 Apa yang tidak cocok dengan aturan Bash
271</h4>263</h4>
272 264
273Aturan Bash mencocokkan teks perintah yang ditulis Claude, setelah Claude Code membagi [perintah gabungan](#compound-commands) dan menghilangkan [pembungkus](#process-wrappers). Aturan tidak mencocokkan program yang sama yang dipanggil dalam bentuk berbeda, jadi aturan deny atau ask mencakup invokasi yang biasanya dihasilkan Claude dan bukan batas keamanan di sekitar program. Aturan ini dalam `deny` atau `ask` menghentikan bentuk pertama dan bukan yang lain:265Aturan Bash cocok dengan teks perintah yang ditulis Claude, setelah Claude Code membagi [perintah gabungan](#compound-commands) dan menghilangkan [pembungkus](#process-wrappers). Aturan ini tidak cocok dengan program yang sama yang dipanggil dalam bentuk berbeda, jadi aturan tolak atau tanya mencakup invokasi yang biasanya dihasilkan Claude dan bukan batas keamanan di sekitar program. Aturan-aturan ini dalam `deny` atau `ask` menghentikan bentuk pertama dan bukan yang lain:
274 266
275| Aturan | Menghentikan | Tidak menghentikan |267| Aturan | Menghentikan | Tidak menghentikan |
276| :----------------- | :------------------------- | :---------------------------------------------------------------------------------------------------- |268| :----------------- | :------------------------- | :---------------------------------------------------------------------------------------------------- |
283Untuk penegakan sistem file dan jaringan yang tidak bergantung pada teks perintah, gunakan [sandboxing](/docs/id/sandboxing). Untuk memeriksa teks perintah lengkap dengan logika Anda sendiri sebelum dijalankan, gunakan hook [PreToolUse](#extend-permissions-with-hooks).275Untuk penegakan sistem file dan jaringan yang tidak bergantung pada teks perintah, gunakan [sandboxing](/docs/id/sandboxing). Untuk memeriksa teks perintah lengkap dengan logika Anda sendiri sebelum dijalankan, gunakan hook [PreToolUse](#extend-permissions-with-hooks).
284 276
285<h4 id="read-only-commands">277<h4 id="read-only-commands">
286 Perintah hanya baca278 Perintah baca-saja
287</h4>279</h4>
288 280
289Claude Code mengenali serangkaian perintah Bash bawaan sebagai hanya baca dan menjalankannya tanpa prompt izin di setiap mode, kecuali untuk jalur yang dijaga oleh [`permissions.blockReadsOutsideWorkingDirectories`](/docs/id/settings-reference#permissions-blockreadsoutsideworkingdirectories). Serangkaian ini mencakup `ls`, `cat`, `echo`, `pwd`, `head`, `tail`, `grep`, `find`, `wc`, `which`, `diff`, `stat`, `du`, `cd`, dan bentuk hanya baca dari `git`. Serangkaian ini tidak dapat dikonfigurasi; untuk memerlukan prompt untuk salah satu perintah ini, tambahkan aturan `ask` atau `deny` untuk itu.281Claude Code mengenali serangkaian perintah Bash bawaan sebagai baca-saja dan menjalankannya tanpa prompt izin dalam setiap mode, kecuali untuk jalur yang [`permissions.blockReadsOutsideWorkingDirectories`](/docs/id/settings-reference#permissions-blockreadsoutsideworkingdirectories) lindungi. Himpunan ini mencakup `ls`, `cat`, `echo`, `pwd`, `head`, `tail`, `grep`, `find`, `wc`, `which`, `diff`, `stat`, `du`, `cd`, dan bentuk baca-saja dari `git`. Himpunan ini tidak dapat dikonfigurasi; untuk memerlukan prompt untuk salah satu perintah ini, tambahkan aturan `ask` atau `deny` untuk itu.
290 282
291Pengalihan seperti `ls > out.txt` menambahkan pemeriksaan pada target. Lihat [Pengalihan](#redirections).283Pengalihan seperti `ls > out.txt` menambahkan pemeriksaan pada target. Lihat [Pengalihan](#redirections).
292 284
293Pola glob yang tidak dikutip diizinkan untuk perintah yang setiap flagnya hanya baca, jadi `ls *.ts` dan `wc -l src/*.py` berjalan tanpa prompt.285Pola glob yang tidak dikutip diizinkan untuk perintah yang setiap flagnya baca-saja, jadi `ls *.ts` dan `wc -l src/*.py` berjalan tanpa prompt.
294 286
295Dalam mode Manual, perintah dari serangkaian ini masih meminta dalam kasus ini:287Dalam mode Manual, perintah dari himpunan ini masih meminta dalam kasus-kasus ini:
296 288
297* **Glob yang tidak dikutip untuk perintah dengan flag yang mampu menulis**: perintah dengan flag yang mampu menulis atau exec, seperti `find`, `sort`, `sed`, dan `git`, meminta ketika glob yang tidak dikutip ada, karena glob dapat berkembang menjadi flag seperti `-delete`.289* **Glob yang tidak dikutip untuk perintah dengan flag yang mampu menulis**: perintah dengan flag yang mampu menulis atau mampu exec, seperti `find`, `sort`, `sed`, dan `git`, meminta ketika glob yang tidak dikutip ada, karena glob dapat berkembang menjadi flag seperti `-delete`.
298* **`docker` yang menunjuk ke daemon lain**: bentuk hanya baca dari `docker` meminta ketika perintah membawa flag yang memilih daemon berbeda, seperti `-H`, `--context`, atau `--url` dan `--connection` Podman.290* **`docker` yang menunjuk ke daemon lain**: bentuk baca-saja dari `docker` meminta ketika perintah membawa flag yang memilih daemon berbeda, seperti `-H`, `--context`, atau `--url` dan `--connection` Podman.
299* **`file` dengan flag pembuka jalur**: `file` meminta ketika melewatkan `-m`/`--magic-file` atau `-f`/`--files-from`, karena flag tersebut membuat `file` membuka jalur yang dinamai dalam nilai flag.291* **`file` dengan flag pembuka jalur**: `file` meminta ketika melewatkan `-m`/`--magic-file` atau `-f`/`--files-from`, karena flag-flag ini membuat `file` membuka jalur yang dinamai dalam nilai flag.
300* **Jalur jaringan di Windows**: perintah yang argumennya mencakup jalur jaringan (UNC), seperti `\\server\share\file`, meminta karena mengakses jalur jaringan dapat mengirim kredensial Windows Anda ke host yang dinamainya. Pemeriksaan yang sama berlaku untuk perintah [alat PowerShell](/docs/id/tools-reference#powershell-tool).292* **Jalur jaringan di Windows**: perintah yang argumennya mencakup jalur jaringan (UNC), seperti `\\server\share\file`, meminta karena mengakses jalur jaringan dapat mengirim kredensial Windows Anda ke host yang dinamainya. Pemeriksaan yang sama berlaku untuk perintah [alat PowerShell](/docs/id/tools-reference#powershell-tool).
301* **Perintah yang analisisnya tidak dapat diurai**: ketika Claude Code tidak dapat sepenuhnya mengurai perintah, itu meminta persetujuan daripada memperlakukan perintah sebagai hanya baca. Perintah yang lebih panjang dari 10.000 karakter selalu meminta karena melebihi apa yang dianalisis.293* **Perintah yang analisisnya tidak dapat diurai**: ketika Claude Code tidak dapat sepenuhnya mengurai perintah, itu meminta persetujuan daripada memperlakukan perintah sebagai baca-saja. Perintah yang lebih panjang dari 10.000 karakter selalu meminta karena melebihi apa yang dianalisis.
302 294
303`cd` ke jalur di dalam direktori kerja Anda atau [direktori tambahan](#working-directories) juga hanya baca, dan perintah gabungan seperti `cd packages/api && ls` berjalan tanpa prompt ketika setiap bagian memenuhi syarat sendiri. Kombinasi ini meminta bahkan ketika setiap bagian hanya baca:295`cd` ke jalur di dalam direktori kerja Anda atau [direktori tambahan](#working-directories) juga baca-saja, dan perintah gabungan seperti `cd packages/api && ls` berjalan tanpa prompt ketika setiap bagian memenuhi syarat sendiri. Kombinasi-kombinasi ini meminta bahkan ketika setiap bagian baca-saja:
304 296
305* **`cd` dengan `git`**: meminta ketika `cd` berubah ke direktori yang berbeda, karena menjalankan `git` di direktori baru dapat menjalankan hook direktori itu. `cd` yang targetnya diselesaikan ke direktori kerja saat ini adalah no-op dan tidak memicu prompt.297* **`cd` dengan `git`**: meminta ketika `cd` berubah ke direktori berbeda, karena menjalankan `git` di direktori baru dapat menjalankan hook direktori itu. `cd` yang targetnya diselesaikan ke direktori kerja saat ini adalah no-op dan tidak memicu prompt.
306* **`cd` dengan pengalihan**: meminta ketika Claude Code tidak dapat menentukan direktori mana target pengalihan diselesaikan setelah `cd` berjalan. Perintah yang satu-satunya target pengalihan adalah `/dev/null`, seperti `cd app; grep -r pattern . 2>/dev/null`, tidak meminta, karena `/dev/null` tidak bergantung pada direktori kerja.298* **`cd` dengan pengalihan**: meminta ketika Claude Code tidak dapat menentukan direktori mana target pengalihan diselesaikan terhadap setelah `cd` berjalan. Perintah yang satu-satunya target pengalihannya adalah `/dev/null`, seperti `cd app; grep -r pattern . 2>/dev/null`, tidak meminta, karena `/dev/null` tidak bergantung pada direktori kerja.
307 299
308<Warning>300<Warning>
309 Pola izin Bash yang mencoba membatasi argumen perintah rapuh. Misalnya, `Bash(curl http://github.com/ *)` dimaksudkan untuk membatasi curl ke URL GitHub, tetapi tidak akan mencocokkan variasi seperti:301 Pola izin Bash yang mencoba membatasi argumen perintah rapuh. Misalnya, `Bash(curl http://github.com/ *)` dimaksudkan untuk membatasi curl ke URL GitHub, tetapi tidak akan cocok dengan variasi seperti:
310 302
311 * Opsi sebelum URL: `curl -X GET http://github.com/...`303 * Opsi sebelum URL: `curl -X GET http://github.com/...`
312 * Protokol berbeda: `curl https://github.com/...`304 * Protokol berbeda: `curl https://github.com/...`
313 * Pengalihan: `curl -L http://short.example.com/xyz`, yang mengalihkan ke GitHub305 * Pengalihan: `curl -L http://short.example.com/xyz`, yang dialihkan ke GitHub
314 * Variabel: `URL=http://github.com && curl $URL`306 * Variabel: `URL=http://github.com && curl $URL`
315 307
316 Untuk penyaringan URL yang lebih andal, pertimbangkan:308 Untuk penyaringan URL yang lebih andal, pertimbangkan:
317 309
318 * **Batasi alat jaringan Bash**: gunakan aturan deny untuk memblokir `curl`, `wget`, dan alat serupa, kemudian gunakan alat WebFetch dengan izin `WebFetch(domain:github.com)` untuk domain yang diizinkan. Aturan deny tidak mencocokkan program yang sama berdasarkan jalur atau di dalam `sh -c`, jadi pasangkan dengan [allowlist jaringan sandbox](/docs/id/sandboxing#network-isolation) ketika pembatasan harus berlaku; lihat [apa yang tidak dicocokkan aturan Bash](#bash-rule-limits)310 * **Batasi alat jaringan Bash**: gunakan aturan tolak untuk menghentikan `curl`, `wget`, dan perintah serupa, kemudian gunakan alat WebFetch dengan izin `WebFetch(domain:github.com)` untuk domain yang diizinkan. Aturan tolak tidak cocok dengan program yang sama berdasarkan jalur atau di dalam `sh -c`, jadi pasangkan dengan [daftar allowlist jaringan sandbox](/docs/id/sandboxing#network-isolation) ketika pembatasan harus berlaku; lihat [apa yang tidak cocok dengan aturan Bash](#bash-rule-limits)
319 * **Gunakan hook PreToolUse**: implementasikan hook yang memvalidasi URL dalam perintah Bash dan memblokir domain yang tidak diizinkan311 * **Gunakan hook PreToolUse**: implementasikan hook yang memvalidasi URL dalam perintah Bash dan memblokir domain yang tidak diizinkan
320 * **Tambahkan panduan CLAUDE.md**: jelaskan pola curl yang diizinkan Anda di `CLAUDE.md`. Ini membentuk apa yang Claude coba tetapi tidak memberlakukan batas, jadi pasangkan dengan salah satu opsi di atas312 * **Tambahkan panduan CLAUDE.md**: jelaskan pola curl yang diizinkan Anda dalam `CLAUDE.md`. Ini membentuk apa yang Claude coba tetapi tidak memberlakukan batas, jadi pasangkan dengan salah satu opsi di atas
321 313
322 Perhatikan bahwa menggunakan WebFetch saja tidak mencegah akses jaringan. Jika Bash diizinkan, Claude masih dapat menggunakan `curl`, `wget`, atau alat lain untuk menjangkau URL apa pun.314 Perhatikan bahwa menggunakan WebFetch saja tidak mencegah akses jaringan. Jika Bash diizinkan, Claude masih dapat menggunakan `curl`, `wget`, atau alat lain untuk menjangkau URL apa pun.
323</Warning>315</Warning>
328 320
329Ketika perintah mengalihkan output atau input, Claude Code memeriksa target pengalihan terhadap aturan file Anda seolah-olah Claude menulis atau membaca file itu secara langsung:321Ketika perintah mengalihkan output atau input, Claude Code memeriksa target pengalihan terhadap aturan file Anda seolah-olah Claude menulis atau membaca file itu secara langsung:
330 322
331* **Pengalihan output**: untuk `> file`, `>> file`, atau `2> file`, pemeriksaan mencakup aturan allow dan deny `Edit` Anda, [jalur yang dilindungi](/docs/id/permission-modes#protected-paths), dan [direktori kerja](#working-directories). Aturan seperti `Bash(git commit *)` memungkinkan perintah, bukan target. Target yang dimulai dengan `~` atau berisi karakter glob memerlukan persetujuan Anda.323* **Pengalihan output**: untuk `> file`, `>> file`, atau `2> file`, pemeriksaan mencakup aturan izin `Edit` Anda, [jalur terlindungi](/docs/id/permission-modes#protected-paths), dan [direktori kerja](#working-directories). Aturan seperti `Bash(git commit *)` mengizinkan perintah, bukan target. Target yang dimulai dengan `~` atau berisi karakter glob memerlukan persetujuan Anda.
332* **Pengalihan input**: untuk `< file`, pemeriksaan mencakup aturan allow dan deny `Read` Anda dan direktori kerja. Target di luar direktori kerja memerlukan persetujuan Anda kecuali aturan allow mencakupnya. Target yang berisi pola glob, atau jalur relatif yang mengikuti `cd` dalam perintah yang sama, memerlukan persetujuan Anda bahkan ketika aturan allow mencakupnya. Claude Code memeriksa target input dalam v2.1.257 dan lebih baru.324* **Pengalihan input**: untuk `< file`, pemeriksaan mencakup aturan izin `Read` Anda dan direktori kerja. Target di luar direktori kerja memerlukan persetujuan Anda kecuali aturan izin mencakupnya. Target yang berisi pola glob, atau jalur relatif yang mengikuti `cd` dalam perintah yang sama, memerlukan persetujuan Anda bahkan ketika aturan izin mencakupnya. Claude Code memeriksa target input dalam v2.1.257 dan yang lebih baru.
333 325
334Target tanpa file di belakangnya tidak diperiksa: `/dev/null`, bentuk file-descriptor seperti `2>&1` dan `<&3`, dan here-docs dan here-strings.326Target tanpa file di belakangnya tidak diperiksa: `/dev/null`, bentuk file-descriptor seperti `2>&1` dan `<&3`, dan here-docs dan here-strings.
335 327
336Claude Code juga memeriksa file yang ditulis perintah `tee`, termasuk dalam pipeline seperti `make | tee build.log`. Pemeriksaan mencakup aturan allow dan deny `Edit` Anda, [jalur yang dilindungi](/docs/id/permission-modes#protected-paths), dan [direktori kerja](#working-directories). Aturan allow seperti `Bash(tee *)` tidak mencakup tujuan di luar direktori kerja. Claude Code memeriksa target `tee` dalam v2.1.269 dan lebih baru.328Claude Code juga memeriksa file yang ditulis perintah `tee`, termasuk dalam pipeline seperti `make | tee build.log`. Pemeriksaan mencakup aturan izin `Edit` Anda, [jalur terlindungi](/docs/id/permission-modes#protected-paths), dan [direktori kerja](#working-directories). Aturan izin seperti `Bash(tee *)` tidak mencakup tujuan di luar direktori kerja. Claude Code memeriksa target `tee` dalam v2.1.269 dan yang lebih baru.
337 329
338<h3 id="powershell">330<h3 id="powershell">
339 PowerShell331 PowerShell
340</h3>332</h3>
341 333
342Aturan izin PowerShell menggunakan bentuk yang sama dengan aturan Bash. Wildcard dengan `*` mencocokkan di posisi mana pun, akhiran `:*` setara dengan trailing ` *`, dan PowerShell telanjang atau `PowerShell(*)` mencocokkan setiap perintah. Konfigurasi ini memungkinkan perintah `Get-ChildItem` dan `git commit` sambil memblokir `Remove-Item`:334Aturan izin PowerShell menggunakan bentuk yang sama dengan aturan Bash. Wildcard dengan `*` cocok di posisi apa pun, akhiran `:*` setara dengan ` *` di belakang, dan `PowerShell` atau `PowerShell(*)` telanjang cocok dengan setiap perintah. Konfigurasi ini mengizinkan perintah `Get-ChildItem` dan `git commit` sambil memblokir `Remove-Item`:
343 335
344```json theme={null}336```json theme={null}
345{337{
355}347}
356```348```
357 349
358Alias umum dikanonikalisasi sebelum pencocokan. Aturan yang ditulis untuk nama cmdlet juga mencocokkan aliasnya, jadi `PowerShell(Get-ChildItem *)` mencocokkan `gci`, `ls`, dan `dir` juga. Pencocokan tidak peka huruf besar-kecil.350Alias umum dikanonisasi sebelum pencocokan. Aturan yang ditulis untuk nama cmdlet juga cocok dengan aliasnya, jadi `PowerShell(Get-ChildItem *)` cocok dengan `gci`, `ls`, dan `dir` juga. Pencocokan tidak peka huruf besar-kecil.
359 351
360Claude Code mengurai AST PowerShell dan memeriksa setiap perintah dalam perintah gabungan secara independen. Operator pipeline `|`, pemisah pernyataan `;`, dan pada PowerShell 7+ operator rantai `&&` dan `||` membagi perintah gabungan menjadi subperintah. Aturan harus mencocokkan setiap subperintah agar perintah gabungan diizinkan.352Claude Code mengurai AST PowerShell dan memeriksa setiap perintah dalam perintah gabungan secara independen. Operator pipeline `|`, pemisah pernyataan `;`, dan pada PowerShell 7+ operator rantai `&&` dan `||` membagi perintah gabungan menjadi subperintah. Aturan harus cocok dengan setiap subperintah agar perintah gabungan diizinkan.
361 353
362<h3 id="read-and-edit">354<h3 id="read-and-edit">
363 Read dan Edit355 Read dan Edit
364</h3>356</h3>
365 357
366Untuk memblokir alat file Claude dari membaca file atau direktori, tambahkan aturan deny `Read` untuk jalurnya, seperti `Read(./.env)` atau `Read(./secrets/**)`; [Exclude sensitive files](/docs/id/settings-reference#exclude-sensitive-files) memiliki contoh siap tempel.358Untuk memblokir alat file Claude dari membaca file atau direktori, tambahkan aturan tolak `Read` untuk jalurnya, seperti `Read(./.env)` atau `Read(./secrets/**)`; [Exclude sensitive files](/docs/id/settings-reference#exclude-sensitive-files) memiliki contoh siap tempel.
367 359
368Aturan `Edit` berlaku untuk semua alat bawaan yang mengedit file. Claude membuat upaya terbaik untuk menerapkan aturan `Read` ke semua alat bawaan yang membaca file seperti Grep dan Glob, ke penyebutan `@file` dalam prompt Anda, dan ke seleksi dan konteks file terbuka yang [IDE](/docs/id/vs-code#the-built-in-ide-mcp-server) yang terhubung bagikan dengan Claude.360Aturan `Edit` berlaku untuk semua alat bawaan yang mengedit file. Claude membuat upaya terbaik untuk menerapkan aturan `Read` ke semua alat bawaan yang membaca file seperti Grep dan Glob, ke penyebutan `@file` dalam prompt Anda, dan ke konteks file pilihan dan file terbuka yang [IDE](/docs/id/vs-code#the-built-in-ide-mcp-server) yang terhubung bagikan dengan Claude.
369 361
370Aturan deny `Read` juga memblokir [alat Edit dan Write](/docs/id/errors#file-is-covered-by-a-read-deny-rule) pada jalur yang sama, termasuk membuat file baru di sana. NotebookEdit tidak tercakup, jadi tambahkan aturan deny `Edit` untuk jalur yang tidak boleh diubah alat apa pun. Pemeriksaan memerlukan Claude Code v2.1.208 atau lebih baru pada edit, dan v2.1.228 atau lebih baru pada write.362Aturan tolak `Read` juga memblokir alat [Edit dan Write](/docs/id/errors#file-is-covered-by-a-read-deny-rule) pada jalur yang sama, termasuk membuat file baru di sana. NotebookEdit tidak tercakup, jadi tambahkan aturan tolak `Edit` untuk jalur yang tidak boleh diubah alat apa pun. Pemeriksaan memerlukan Claude Code v2.1.208 atau lebih baru pada edit, dan v2.1.228 atau lebih baru pada write.
371 363
372Claude Code memeriksa izin file terhadap aturan `Edit(path)` dan `Read(path)` saja. Jika Anda menulis aturan jalur untuk `Write`, `NotebookEdit`, `Glob`, atau alat `MultiEdit` warisan sebagai gantinya, Claude Code menerima aturan tetapi tidak pernah berkonsultasi dengannya, dan [memperingatkan saat startup](/docs/id/errors#is-not-matched-by-file-permission-checks), kecuali untuk aturan `Glob` yang dilewatkan dalam `--allowedTools`. Gunakan `Edit(docs/**)` sebagai pengganti `Write(docs/**)`, `NotebookEdit(docs/**)`, atau `MultiEdit(docs/**)`, dan `Read(docs/**)` sebagai pengganti `Glob(docs/**)`. Claude Code tidak memperingatkan tentang aturan nama alat tanpa jalur, seperti aturan deny untuk `Write`; itu mencocokkan aturan itu di tingkat alat di mana-mana. Memerlukan Claude Code v2.1.210 atau lebih baru.364Claude Code memeriksa izin file hanya terhadap aturan `Edit(path)` dan `Read(path)`. Jika Anda menulis aturan jalur untuk `Write`, `NotebookEdit`, `Glob`, atau alat `MultiEdit` warisan sebagai gantinya, Claude Code menerima aturan tetapi tidak pernah berkonsultasi dengannya, dan [memperingatkan saat startup](/docs/id/errors#is-not-matched-by-file-permission-checks), kecuali untuk aturan `Glob` yang dilewatkan dalam `--allowedTools`. Gunakan `Edit(docs/**)` sebagai pengganti `Write(docs/**)`, `NotebookEdit(docs/**)`, atau `MultiEdit(docs/**)`, dan `Read(docs/**)` sebagai pengganti `Glob(docs/**)`. Claude Code tidak memperingatkan tentang aturan nama alat tanpa jalur, seperti aturan tolak untuk `Write`; aturan itu cocok di mana-mana di tingkat alat. Memerlukan Claude Code v2.1.210 atau lebih baru.
373 365
374<Warning>366<Warning>
375 Aturan deny Read dan Edit berlaku untuk alat file bawaan Claude, untuk perintah file yang Claude Code kenali di Bash, seperti `cat`, `head`, `tail`, `sed`, dan `tee`, dan untuk target pengalihan Bash [redirections](#redirections) seperti `> file` dan `< file`. Mereka tidak berlaku untuk perintah yang membaca file tanpa menamakannya, seperti `grep -r pattern .` dijalankan dari direktori yang menyimpan file, atau untuk subproses arbitrer yang membaca atau menulis file secara tidak langsung, seperti skrip Python atau Node yang membuka file itu sendiri. Untuk penegakan tingkat OS yang memblokir semua proses dari mengakses jalur, [aktifkan sandbox](/docs/id/sandboxing).367 Aturan tolak Read dan Edit berlaku untuk alat file bawaan Claude, ke perintah file yang Claude Code kenali dalam Bash, seperti `cat`, `head`, `tail`, `sed`, dan `tee`, dan ke target pengalihan Bash [redirections](#redirections) seperti `> file` dan `< file`. Aturan-aturan ini tidak berlaku untuk perintah yang membaca file tanpa menamakannya, seperti `grep -r pattern .` dijalankan dari direktori yang menyimpan file, atau ke subproses arbitrer yang membaca atau menulis file secara tidak langsung, seperti skrip Python atau Node yang membuka file sendiri. Untuk penegakan tingkat OS yang memblokir semua proses dari mengakses jalur, [aktifkan sandbox](/docs/id/sandboxing).
376</Warning>368</Warning>
377 369
378Aturan Read dan Edit keduanya menggunakan sintaks pola [gitignore](https://git-scm.com/docs/gitignore) dengan empat jenis pola yang berbeda; untuk pola direktori segmen tunggal, kedalaman pencocokan juga bergantung pada jenis aturan, dijelaskan nanti di bagian ini:370Aturan Read dan Edit keduanya menggunakan sintaks pola [gitignore](https://git-scm.com/docs/gitignore) dengan empat jenis pola yang berbeda; untuk pola direktori segmen tunggal, kedalaman pencocokan juga bergantung pada jenis aturan, dijelaskan nanti di bagian ini:
380| Pola | Arti | Contoh | Cocok |372| Pola | Arti | Contoh | Cocok |
381| -------------------- | ----------------------------------------- | -------------------------------- | ----------------------------------------------------------------- |373| -------------------- | ----------------------------------------- | -------------------------------- | ----------------------------------------------------------------- |
382| `//path` | Jalur absolut dari akar sistem file | `Read(//Users/alice/secrets/**)` | `/Users/alice/secrets/**` |374| `//path` | Jalur absolut dari akar sistem file | `Read(//Users/alice/secrets/**)` | `/Users/alice/secrets/**` |
383| `~/path` | Jalur dari direktori home | `Read(~/Documents/*.pdf)` | `/Users/alice/Documents/*.pdf` |375| `~/path` | Jalur dari direktori rumah | `Read(~/Documents/*.pdf)` | `/Users/alice/Documents/*.pdf` |
384| `/path` | Jalur relatif terhadap sumber pengaturan | `Edit(/src/**/*.ts)` | `<primary working directory>/src/**/*.ts` dalam pengaturan proyek |376| `/path` | Jalur relatif terhadap sumber pengaturan | `Edit(/src/**/*.ts)` | `<primary working directory>/src/**/*.ts` dalam pengaturan proyek |
385| `path` atau `./path` | Jalur relatif terhadap direktori saat ini | `Read(*.env)` | `<cwd>/*.env` |377| `path` atau `./path` | Jalur relatif terhadap direktori saat ini | `Read(*.env)` | `<cwd>/*.env` |
386 378
387<Warning>379<Warning>
388 Pola seperti `/Users/alice/file` bukan jalur absolut. Garis miring tunggal terkemuka berlabuh di sumber pengaturan, bukan akar sistem file. Gunakan `//Users/alice/file` untuk jalur absolut.380 Pola seperti `/Users/alice/file` bukan jalur absolut. Garis miring tunggal terdepan berlabuh di sumber pengaturan, bukan akar sistem file. Gunakan `//Users/alice/file` untuk jalur absolut.
389</Warning>381</Warning>
390 382
391Pola `/path` berlabuh di direktori yang terkait dengan sumber pengaturan yang mendefinisikannya, jadi aturan yang sama mencocokkan lokasi berbeda tergantung di mana Anda menempatkannya:383Pola `/path` berlabuh di direktori yang terkait dengan sumber pengaturan yang mendefinisikannya, jadi aturan yang sama cocok dengan lokasi berbeda tergantung di mana Anda menempatkannya:
392 384
393| Aturan didefinisikan dalam | `/path` diselesaikan ke |385| Aturan didefinisikan dalam | `/path` diselesaikan ke |
394| :------------------------------------------------ | :--------------------------------- |386| :------------------------------------------------ | :--------------------------------- |
400 392
401Aturan yang Anda tambahkan melalui `/permissions` mengikuti baris untuk file pengaturan yang Anda simpan.393Aturan yang Anda tambahkan melalui `/permissions` mengikuti baris untuk file pengaturan yang Anda simpan.
402 394
403Aturan pengaturan lokal berlabuh di [primary working directory](#working-directories) sesi, bukan di akar repositori tempat Claude Code [menyimpan file](#permission-system) dalam v2.1.211 dan lebih baru. Dalam sesi yang dimulai di akar repositori, dua direktori sama; dalam sesi [worktree](/docs/id/worktrees), aturan bersama seperti `Edit(/src/**)` mencocokkan direktori `src/` worktree itu sendiri.395Aturan pengaturan lokal berlabuh di [direktori kerja utama](#working-directories) sesi, bukan di akar repositori tempat Claude Code [menyimpan file](#permission-system) dalam v2.1.211 dan yang lebih baru. Dalam sesi yang dimulai di akar repositori, dua direktori sama; dalam sesi [worktree](/docs/id/worktrees), aturan bersama seperti `Edit(/src/**)` cocok dengan direktori `src/` worktree itu sendiri.
404 396
405Aturan deny seperti `Read(/secrets/**)` dalam pengaturan pengguna memblokir `~/.claude/secrets/**`, bukan direktori `secrets` dalam proyek Anda. Untuk menulis aturan dalam pengaturan pengguna yang berlaku di dalam setiap proyek, gunakan jalur absolut `//` atau jalur relatif home `~/` sebagai gantinya.397Aturan tolak seperti `Read(/secrets/**)` dalam pengaturan pengguna memblokir `~/.claude/secrets/**`, bukan direktori `secrets` dalam proyek Anda. Untuk menulis aturan dalam pengaturan pengguna yang berlaku di dalam setiap proyek, gunakan jalur absolut `//` atau jalur relatif rumah `~/` sebagai gantinya.
406 398
407Di Windows, jalur dinormalisasi ke bentuk POSIX sebelum pencocokan. `C:\Users\alice` menjadi `/c/Users/alice`, jadi gunakan `//c/**/.env` untuk mencocokkan file `.env` di mana pun di drive itu. Untuk mencocokkan di semua drive, gunakan `//**/.env`.399Di Windows, jalur dinormalisasi ke bentuk POSIX sebelum pencocokan. `C:\Users\alice` menjadi `/c/Users/alice`, jadi gunakan `//c/**/.env` untuk mencocokkan file `.env` di mana pun di drive itu. Untuk mencocokkan di semua drive, gunakan `//**/.env`.
408 400
409Contoh:401Contoh:
410 402
411* `Edit(/docs/**)`: edit di `<primary working directory>/docs/`, bukan `/docs/` atau `<primary working directory>/.claude/docs/`403* `Edit(/docs/**)`: edit dalam `<primary working directory>/docs/`, bukan `/docs/` atau `<primary working directory>/.claude/docs/`
412* `Read(~/.zshrc)`: membaca `.zshrc` direktori home Anda404* `Read(~/.zshrc)`: membaca `.zshrc` direktori rumah Anda
413* `Edit(//tmp/scratch.txt)`: edit jalur absolut `/tmp/scratch.txt`405* `Edit(//tmp/scratch.txt)`: edit jalur absolut `/tmp/scratch.txt`
414* `Read(src/**)`: sebagai aturan allow, membaca dari `<current-directory>/src/` saja; sebagai aturan deny atau ask, mencocokkan direktori `src` di kedalaman apa pun di bawah direktori saat ini406* `Read(src/**)`: sebagai aturan izin, membaca dari `<current-directory>/src/` saja; sebagai aturan tolak atau tanya, cocok dengan direktori `src` di kedalaman apa pun di bawah direktori saat ini
415 407
416Aturan hanya mencocokkan file di bawah jangkarannya; dalam batas itu, kedalaman pencocokan bergantung pada bentuk pola dan, untuk pola direktori segmen tunggal, jenis aturan, dijelaskan di bawah. Nama file telanjang mengikuti semantik gitignore dan mencocokkan di kedalaman apa pun, jadi `Read(.env)` dan `Read(**/.env)` setara:408Aturan hanya cocok dengan file di bawah jangkarnya; dalam batas itu, kedalaman pencocokan bergantung pada bentuk pola dan, untuk pola direktori segmen tunggal, jenis aturan, dijelaskan di bawah. Nama file telanjang mengikuti semantik gitignore dan cocok di kedalaman apa pun, jadi `Read(.env)` dan `Read(**/.env)` setara:
417 409
418| Aturan deny | Memblokir | Tidak memblokir |410| Aturan tolak | Memblokir | Tidak memblokir |
419| --------------------------------- | -------------------------------------------------- | -------------------------------------------------- |411| --------------------------------- | -------------------------------------------------- | ---------------------------------------------- |
420| `Read(.env)` atau `Read(**/.env)` | `.env` apa pun di atau di bawah direktori saat ini | `.env` di direktori induk atau proyek lain |412| `Read(.env)` atau `Read(**/.env)` | `.env` apa pun di atau di bawah direktori saat ini | `.env` dalam direktori induk atau proyek lain |
421| `Read(//**/.env)` | `.env` apa pun di mana pun di sistem file | tidak ada; aturan ini berlabuh di akar sistem file |413| `Read(//**/.env)` | `.env` apa pun di mana pun di sistem file | tidak ada; aturan berlabuh di akar sistem file |
422 414
423Pola relatif dengan segmen direktori tunggal, seperti `src/**`, mencocokkan di kedalaman berbeda tergantung pada jenis aturan:415Pola relatif dengan segmen direktori tunggal, seperti `src/**`, cocok di kedalaman berbeda tergantung pada jenis aturan:
424 416
425* **Aturan allow**: `Edit(src/**)` mencocokkan hanya `<cwd>/src` dan file di bawahnya. Untuk memungkinkan nama direktori di kedalaman apa pun, tulis `Edit(**/src/**)`.417* **Aturan izin**: `Edit(src/**)` cocok hanya dengan `<cwd>/src` dan file di bawahnya. Untuk mengizinkan nama direktori di kedalaman apa pun, tulis `Edit(**/src/**)`.
426* **Aturan deny dan ask**: `Read(secrets/**)` mencocokkan direktori bernama `secrets` di kedalaman apa pun di bawah direktori saat ini, jadi aturan juga berlaku untuk salinan bersarang.418* **Aturan tolak dan tanya**: `Read(secrets/**)` cocok dengan direktori bernama `secrets` di kedalaman apa pun di bawah direktori saat ini, jadi aturan juga berlaku untuk salinan bersarang.
427 419
428Setiap bentuk pola lainnya mencocokkan pada kedalaman yang sama di setiap jenis aturan: `Edit(/src/**)` dan `Edit(src/components/**)` mencocokkan hanya di lokasi berlabuhnya, sementara `Edit(**/src/**)` mencocokkan di kedalaman apa pun.420Setiap bentuk pola lainnya cocok di kedalaman yang sama dalam setiap jenis aturan: `Edit(/src/**)` dan `Edit(src/components/**)` cocok hanya di lokasi berlabuh mereka, sementara `Edit(**/src/**)` cocok di kedalaman apa pun.
429 421
430Contoh berikut menunjukkan setiap bentuk pola terhadap proyek dengan direktori `src/` tingkat atas dan salinan bersarang di bawah `vendor/`:422Contoh berikut menunjukkan setiap bentuk pola terhadap proyek dengan direktori `src/` tingkat atas dan salinan bersarang di bawah `vendor/`:
431 423
439 └── lib.js431 └── lib.js
440```432```
441 433
442| Aturan | Cocok `src/app.ts` | Cocok `vendor/pkg/src/lib.js` |434| Aturan | Cocok dengan `src/app.ts` | Cocok dengan `vendor/pkg/src/lib.js` |
443| :------------------------------------------- | :----------------- | :---------------------------- |435| :--------------------------------------------- | :------------------------ | :----------------------------------- |
444| `Edit(src/**)` sebagai aturan allow | Ya | Tidak |436| `Edit(src/**)` sebagai aturan izin | Ya | Tidak |
445| `Edit(src/**)` sebagai aturan deny atau ask | Ya | Ya |437| `Edit(src/**)` sebagai aturan tolak atau tanya | Ya | Ya |
446| `Edit(/src/**)` dalam jenis aturan apa pun | Ya | Tidak |438| `Edit(/src/**)` dalam jenis aturan apa pun | Ya | Tidak |
447| `Edit(**/src/**)` dalam jenis aturan apa pun | Ya | Ya |439| `Edit(**/src/**)` dalam jenis aturan apa pun | Ya | Ya |
448 440
449<Note>441<Note>
450 Dalam pola gitignore, `*` mencocokkan dalam segmen jalur tunggal dan dapat muncul di posisi mana pun dalam pola, sementara `**` mencocokkan di seluruh direktori.442 Dalam pola gitignore, `*` cocok dalam segmen jalur tunggal dan dapat muncul di posisi apa pun dalam pola, sementara `**` cocok di seluruh direktori.
451</Note>443</Note>
452 444
453Ketika Anda menyetujui jalur file dengan "Ya, jangan tanya lagi", Claude Code menghindari karakter pola gitignore dalam jalur itu, seperti `[`, `]`, dan `*`, jadi aturan yang dihasilkan hanya mencocokkan jalur literal yang Anda setujui. Aturan yang Anda tulis sendiri tidak dihindari. Sebelum v2.1.202, Claude Code menyimpan jalur tanpa dihindari, jadi aturan yang dihasilkan untuk direktori bernama `[2024-06] Reports` dapat gagal mencocokkan jalurnya sendiri atau mencocokkan direktori saudara yang tidak diinginkan.445Ketika Anda menyetujui jalur file dengan "Ya, dan jangan tanya lagi", Claude Code menghindari karakter pola gitignore dalam jalur itu, seperti `[`, `]`, dan `*`, jadi aturan yang dihasilkan cocok hanya dengan jalur literal yang Anda setujui. Aturan yang Anda tulis sendiri tidak dihindari. Sebelum v2.1.202, Claude Code menyimpan jalur tanpa dihindari, jadi aturan yang dihasilkan untuk direktori bernama `[2024-06] Reports` dapat gagal mencocokkan jalurnya sendiri atau mencocokkan direktori saudara yang tidak dimaksudkan.
454 446
455Anda tidak perlu menghindari tanda kurung dalam jalur, jadi `Edit(./Finance (2024)/**)` mencocokkan folder `Finance (2024)` seperti yang dieja.447Anda tidak perlu menghindari tanda kurung dalam jalur, jadi `Edit(./Finance (2024)/**)` cocok dengan folder `Finance (2024)` seperti yang dieja.
456 448
457Aturan deny atau ask yang jalurnya tidak dapat digunakan sebagai pola gitignore masih menjaga jalur yang tepat itu. Aturan allow dengan pola yang tidak dapat digunakan tidak menyetujui apa pun.449Aturan tolak atau tanya yang jalurnya tidak dapat digunakan sebagai pola gitignore masih menjaga jalur itu yang tepat. Aturan izin dengan pola yang tidak dapat digunakan tidak menyetujui apa pun.
458 450
459Aturan deny atau ask pola yang dimulai dengan `!` adalah negasi gitignore. Aturan ini mengukir jalur yang cocok dari aturan `path` atau `./path` yang tercantum sebelumnya. Dalam daftar `deny` satu file pengaturan, `Read(*.env)` diikuti oleh `Read(!sample.env)` memblokir setiap file yang namanya berakhir dengan `.env` di kedalaman apa pun, kecuali file bernama `sample.env`. Aturan `!` yang tercantum pertama tidak mengukir apa pun.451Pola tolak atau tanya yang dimulai dengan `!` adalah negasi gitignore. Aturan ini mengukir jalur yang cocok dari aturan `path` atau `./path` yang tercantum sebelumnya. Dalam daftar `deny` satu file pengaturan, `Read(*.env)` diikuti oleh `Read(!sample.env)` memblokir setiap file yang namanya berakhir dengan `.env` di kedalaman apa pun, kecuali file bernama `sample.env`. Aturan `!` yang tercantum pertama tidak mengukir apa pun.
460 452
461Pengukiran hanya mencapai aturan dari sumber yang sama. `Read(!.env)` dalam pengaturan proyek atau dalam `--disallowedTools` tidak membatalkan `Read(./.env)` deny dari pengaturan yang dikelola atau file pengaturan lainnya.453Pengukiran mencapai hanya aturan dari sumber yang sama. `Read(!.env)` dalam pengaturan proyek atau dalam `--disallowedTools` tidak membatalkan tolak `Read(./.env)` dari pengaturan terkelola atau file pengaturan lain apa pun.
462 454
463Dua batas mempersempit apa yang pola `!` dapat ukir:455Dua batas mempersempit apa yang dapat diukir pola `!`:
464 456
465* Claude Code membaca pola `!` relatif terhadap direktori saat ini bahkan ketika `/`, `~/`, atau `//` mengikuti `!`, jadi pola tidak dapat menjangkau aturan yang berlabuh dengan salah satu awalan itu. `Read(!~/notes/public/**)` tidak mengukir apa pun dari `Read(~/notes/**)`.457* Claude Code membaca pola `!` relatif terhadap direktori saat ini bahkan ketika `/`, `~/`, atau `//` mengikuti `!`, jadi pola tidak dapat menjangkau aturan yang berlabuh dengan salah satu awalan itu. `Read(!~/notes/public/**)` tidak mengukir apa pun dari `Read(~/notes/**)`.
466* Pengukiran tidak dapat membuka kembali file di dalam direktori yang aturan blokir secara keseluruhan. Dengan `Read(secrets/**)` dan `Read(!secrets/public/**)`, Claude Code masih memblokir `secrets/public` bersama dengan sisa `secrets`.458* Pengukiran tidak dapat membuka kembali file di dalam direktori yang aturan blokir secara keseluruhan. Dengan `Read(secrets/**)` dan `Read(!secrets/public/**)`, Claude Code masih memblokir `secrets/public` bersama dengan sisa `secrets`.
467 459
468Ketika Claude mengakses symlink, aturan izin memeriksa dua jalur: symlink itu sendiri dan file yang diselesaikannya. Aturan allow dan deny memperlakukan pasangan itu secara berbeda: aturan allow kembali ke meminta Anda, sementara aturan deny memblokir sepenuhnya.460Ketika Claude mengakses symlink, aturan izin memeriksa dua jalur: symlink itu sendiri dan file yang diselesaikannya. Aturan izin dan tolak memperlakukan pasangan itu berbeda: aturan izin kembali ke meminta Anda, sementara aturan tolak memblokir langsung.
469 461
470* **Aturan allow**: berlaku hanya ketika jalur symlink dan targetnya mencocokkan. Symlink di dalam direktori yang diizinkan yang menunjuk ke luar masih meminta Anda.462* **Aturan izin**: berlaku hanya ketika jalur symlink dan targetnya cocok. Symlink di dalam direktori yang diizinkan yang menunjuk ke luar masih meminta Anda.
471* **Aturan deny**: berlaku ketika jalur symlink atau targetnya mencocokkan. Symlink yang menunjuk ke file yang ditolak itu sendiri ditolak. Misalnya, dengan `Read(./project/**)` diizinkan dan `Read(~/.ssh/**)` ditolak, symlink di `./project/key` menunjuk ke `~/.ssh/id_rsa` diblokir: target gagal aturan allow dan mencocokkan aturan deny.463* **Aturan tolak**: berlaku ketika jalur symlink atau targetnya cocok. Symlink yang menunjuk ke file yang ditolak ditolak sendiri. Misalnya, dengan `Read(./project/**)` diizinkan dan `Read(~/.ssh/**)` ditolak, symlink di `./project/key` yang menunjuk ke `~/.ssh/id_rsa` diblokir: target gagal aturan izin dan cocok dengan aturan tolak.
472 464
473Pada macOS dan Linux, aturan deny atau ask yang ditulis melalui direktori yang disimlink dengan pola `//`, `~/`, atau `/` juga berlaku di lokasi nyata direktori. Misalnya, di macOS, di mana `/etc` diselesaikan ke `/private/etc`, `Read(//etc/**)` juga memblokir `/private/etc/hosts`. Sebelum v2.1.268, aturan deny atau ask yang ditulis melalui direktori yang disimlink tidak berlaku untuk jalur yang diberikan oleh lokasi nyatanya.465Di macOS dan Linux, aturan tolak atau tanya yang ditulis melalui direktori yang disymlink dengan pola `//`, `~/`, atau `/` juga berlaku di lokasi nyata direktori. Misalnya, di macOS, di mana `/etc` diselesaikan ke `/private/etc`, `Read(//etc/**)` juga memblokir `/private/etc/hosts`. Sebelum v2.1.268, aturan tolak atau tanya yang ditulis melalui direktori yang disymlink tidak berlaku pada jalur yang diberikan oleh lokasi nyatanya.
474 466
475Ketika alat membuka file yang disetujui, Claude Code [mengkonfirmasi jalur masih diselesaikan ke lokasi yang pemeriksaan izin setujui](/docs/id/errors#refusing-after-a-symlink-changed).467Ketika alat membuka file yang disetujui, Claude Code [mengkonfirmasi jalur masih diselesaikan ke lokasi yang pemeriksaan izin setujui](/docs/id/errors#refusing-after-a-symlink-changed).
476 468
477Grep dan Glob mencari direktori yang argumen `path` diselesaikan ke. Claude Code menerapkan aturan deny `Read` ke direktori itu.469Grep dan Glob mencari direktori yang argumen `path` diselesaikan. Claude Code menerapkan aturan tolak `Read` ke direktori itu.
478 470
479<h3 id="webfetch">471<h3 id="webfetch">
480 WebFetch472 WebFetch
481</h3>473</h3>
482 474
483Aturan WebFetch menggunakan awalan `domain:` dan mencocokkan terhadap nama host dari URL yang diminta. Pencocokan tidak peka huruf besar-kecil, mendukung wildcard `*`, dan menghilangkan titik trailing dari aturan dan nama host sehingga `example.com.` dan `example.com` diperlakukan sama.475Aturan WebFetch menggunakan awalan `domain:` dan cocok terhadap nama host URL yang diminta. Pencocokan tidak peka huruf besar-kecil, mendukung wildcard `*`, dan menghilangkan titik di belakang dari baik aturan maupun nama host sehingga `example.com.` dan `example.com` diperlakukan sama.
484 476
485* `WebFetch(domain:example.com)` mencocokkan permintaan ke `example.com`477* `WebFetch(domain:example.com)` cocok dengan permintaan ke `example.com`
486* `WebFetch(domain:*.example.com)` mencocokkan subdomain apa pun di kedalaman apa pun, seperti `api.example.com` atau `a.b.example.com`, tetapi bukan `example.com` itu sendiri478* `WebFetch(domain:*.example.com)` cocok dengan subdomain apa pun di kedalaman apa pun, seperti `api.example.com` atau `a.b.example.com`, tetapi bukan `example.com` itu sendiri
487* `WebFetch(domain:*)` mencocokkan setiap domain. Ini bukan sama dengan aturan `WebFetch` telanjang; lihat [Allow or deny every fetch](#allow-or-deny-every-fetch)479* `WebFetch(domain:*)` cocok dengan setiap domain. Aturan ini tidak sama dengan aturan `WebFetch` telanjang; lihat [Allow or deny every fetch](#allow-or-deny-every-fetch)
488 480
489Di posisi mana pun selain `*.` terkemuka atau `*` telanjang, wildcard mencocokkan hanya teks antara dua titik. `WebFetch(domain:example.*)` mencocokkan `example.org`, di mana `*` menjadi `org`, tetapi bukan `example.evil.com`, di mana `*` harus menjadi `evil.com` dan melintasi titik. Ini mencegah wildcard trailing dari mencocokkan domain yang dapat didaftarkan penyerang.481Di posisi apa pun selain `*.` terdepan atau `*` telanjang, wildcard cocok hanya dengan teks antara dua titik. `WebFetch(domain:example.*)` cocok dengan `example.org`, di mana `*` menjadi `org`, tetapi bukan `example.evil.com`, di mana `*` harus menjadi `evil.com` dan menyeberangi titik. Ini menjaga wildcard di belakang dari mencocokkan domain yang dapat didaftarkan penyerang.
490 482
491Wildcard dalam aturan `WebFetch` memerlukan Claude Code v2.1.172 atau lebih baru untuk mencocokkan fetch.483Wildcard dalam aturan `WebFetch` memerlukan Claude Code v2.1.172 atau lebih baru untuk mencocokkan fetch.
492 484
493<h4 id="allow-or-deny-every-fetch">485<h4 id="allow-or-deny-every-fetch">
494 Allow atau deny setiap fetch486 Izinkan atau tolak setiap fetch
495</h4>487</h4>
496 488
497Aturan `WebFetch` telanjang adalah nama alat tanpa bagian `domain:`, seperti `"deny": ["WebFetch"]`. Keduanya dan `WebFetch(domain:*)` mencakup setiap URL, tetapi Claude Code menerapkannya secara berbeda, dan hanya bentuk `domain:` yang juga menambahkan domainnya ke [allowed or denied domain list](/docs/id/sandboxing#network-isolation) sandbox. Bagian itu mencantumkan bentuk wildcard yang sandbox hormati dan versi yang menambahkan `*` telanjang.489Aturan `WebFetch` telanjang adalah nama alat tanpa bagian `domain:`, seperti `"deny": ["WebFetch"]`. Baik itu maupun `WebFetch(domain:*)` mencakup setiap URL, tetapi Claude Code menerapkannya berbeda, dan hanya bentuk `domain:` yang juga menambahkan domainnya ke [daftar domain yang diizinkan atau ditolak](/docs/id/sandboxing#network-isolation) sandbox. Bagian itu mencantumkan bentuk wildcard yang dihormati sandbox dan versi yang menambahkan `*` telanjang.
498 490
499Setiap baris menunjukkan apa yang aturan lakukan dalam daftar `allow` dan dalam daftar `deny`:491Setiap baris menunjukkan apa yang dilakukan aturan dalam daftar `allow` dan dalam daftar `deny`:
500 492
501| Aturan | Dalam `allow` | Dalam `deny` |493| Aturan | Dalam `allow` | Dalam `deny` |
502| :------------------- | :----------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------ |494| :------------------- | :------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------- |
503| `WebFetch` | Claude fetch tanpa meminta Anda. Tidak mengubah host mana yang perintah sandboxed dapat jangkau. | Claude Code menghapus alat `WebFetch`, jadi Claude tidak dapat fetch sama sekali. Tidak mengubah host mana yang perintah sandboxed dapat jangkau. |495| `WebFetch` | Claude fetch tanpa meminta Anda. Tidak mengubah host mana yang dapat dijangkau perintah sandboxed. | Claude Code menghapus alat `WebFetch`, jadi Claude tidak dapat fetch sama sekali. Tidak mengubah host mana yang dapat dijangkau perintah sandboxed. |
504| `WebFetch(domain:*)` | Claude fetch tanpa meminta Anda, dan perintah sandboxed dapat menjangkau host apa pun. | Claude Code menyimpan alat dan menolak setiap fetch, dan perintah sandboxed tidak dapat menjangkau host apa pun. |496| `WebFetch(domain:*)` | Claude fetch tanpa meminta Anda, dan perintah sandboxed dapat menjangkau host apa pun. | Claude Code menyimpan alat dan menolak setiap fetch, dan perintah sandboxed tidak dapat menjangkau host apa pun. |
505 497
506Dua bentuk juga berbeda pada pembacaan [artifacts](/docs/id/artifacts), halaman yang alat Artifact terbitkan di claude.ai. Aturan deny atau ask `WebFetch` telanjang tidak berlaku untuk pembacaan tersebut. Aturan `domain:` yang mencakup `claude.ai` atau host konten `*.claudeusercontent.com`, seperti `WebFetch(domain:claude.ai)` atau `WebFetch(domain:*)`, menolak setiap pembacaan atau meminta sebelumnya. Aturan [`Artifact`](/docs/id/artifacts#disable-artifacts) melakukan hal yang sama.498Dua bentuk juga berbeda pada pembacaan [artifact](/docs/id/artifacts), halaman yang alat Artifact terbitkan di claude.ai. Aturan tolak atau tanya `WebFetch` telanjang tidak berlaku pada pembacaan itu. Aturan `domain:` yang mencakup `claude.ai` atau host konten `*.claudeusercontent.com`, seperti `WebFetch(domain:claude.ai)` atau `WebFetch(domain:*)`, menolak setiap pembacaan atau meminta sebelumnya. Aturan [`Artifact`](/docs/id/artifacts#disable-artifacts) melakukan hal yang sama.
507 499
508Ketika aturan memblokir pembacaan, penolakan menamai aturan. Sebelum v2.1.268, aturan deny `WebFetch` telanjang memblokir setiap pembacaan artifact, dan aturan ask telanjang meminta sebelum setiap pembacaan.500Ketika aturan memblokir pembacaan, penolakan menamai aturan. Sebelum v2.1.268, aturan tolak `WebFetch` telanjang memblokir setiap pembacaan artifact, dan aturan tanya telanjang meminta sebelum setiap pembacaan.
509 501
510Untuk membiarkan Claude fetch dengan bebas sambil menjaga allowlist sandbox seperti apa adanya, gunakan bentuk telanjang. `settings.json` ini melakukan itu:502Untuk membiarkan Claude fetch dengan bebas sambil menjaga daftar allowlist sandbox seperti apa adanya, gunakan bentuk telanjang. `settings.json` ini melakukan itu:
511 503
512```json theme={null}504```json theme={null}
513{505{
517}509}
518```510```
519 511
520Ketika Anda meminta Claude untuk fetch halaman, itu fetch tanpa prompt. Ketika Anda meminta itu menjalankan `curl` [sandboxed](/docs/id/sandboxing) terhadap host di luar allowlist sandbox, Claude Code masih meminta Anda untuk host itu, karena aturan telanjang tidak menambahkan host ke allowlist.512Ketika Anda meminta Claude untuk fetch halaman, itu fetch tanpa prompt. Ketika Anda meminta itu menjalankan `curl` [sandboxed](/docs/id/sandboxing) terhadap host di luar daftar allowlist sandbox, Claude Code masih meminta Anda untuk host itu, karena aturan telanjang tidak menambahkan host ke daftar allowlist.
521 513
522Dalam [mode auto](/docs/id/permission-modes#eliminate-prompts-with-auto-mode), Claude sebagai gantinya menamai host dalam [per-command allowed domains](/docs/id/sandboxing#per-command-allowed-domains-in-auto-mode) perintah untuk classifier ditinjau.514Dalam [mode otomatis](/docs/id/permission-modes#eliminate-prompts-with-auto-mode), Claude sebagai gantinya menamai host dalam [domain yang diizinkan per perintah](/docs/id/sandboxing#per-command-allowed-domains-in-auto-mode) perintah untuk pengklasifikasi ditinjau.
523 515
524<h3 id="mcp">516<h3 id="mcp">
525 MCP517 MCP
526</h3>518</h3>
527 519
528Aturan MCP menggunakan nama server seperti yang dikonfigurasi di Claude Code, secara opsional diikuti oleh nama alat dari server itu.520Aturan MCP menggunakan nama server seperti yang dikonfigurasi dalam Claude Code, secara opsional diikuti oleh nama alat dari server itu.
529 521
530* `mcp__puppeteer` mencocokkan alat apa pun yang disediakan oleh server `puppeteer`522* `mcp__puppeteer` cocok dengan alat apa pun yang disediakan oleh server `puppeteer`
531* `mcp__puppeteer__*` menggunakan sintaks wildcard dan juga mencocokkan semua alat dari server `puppeteer`523* `mcp__puppeteer__*` menggunakan sintaks wildcard dan juga cocok dengan semua alat dari server `puppeteer`
532* `mcp__puppeteer__puppeteer_navigate` mencocokkan alat `puppeteer_navigate` yang disediakan oleh server `puppeteer`524* `mcp__puppeteer__puppeteer_navigate` cocok dengan alat `puppeteer_navigate` yang disediakan oleh server `puppeteer`
533 525
534Jika organisasi Anda telah menetapkan alat [claude.ai connector](/docs/id/mcp#organization-controls-on-connector-tools) ke `ask` dan pengaturan itu mencapai Claude Code dalam sesi Anda, aturan allow untuk alat itu tidak berlaku: Claude Code meminta pada setiap panggilan, bahkan dalam mode `auto` dan `bypassPermissions`. Dalam mode `dontAsk`, yang tidak pernah meminta, Claude Code menolak panggilan sebagai gantinya. Alat dari konektor yang Claude Code ambil sendiri muncul sebagai `mcp__claude_ai_<server>__<tool>`.526Jika organisasi Anda telah menetapkan alat [claude.ai connector](/docs/id/mcp#organization-controls-on-connector-tools) ke `ask` dan pengaturan itu mencapai Claude Code dalam sesi Anda, aturan izin untuk alat itu tidak berlaku: Claude Code meminta pada setiap panggilan, bahkan dalam mode `auto` dan `bypassPermissions`. Dalam mode `dontAsk`, yang tidak pernah meminta, Claude Code menolak panggilan sebagai gantinya. Alat dari konektor yang Claude Code ambil sendiri muncul sebagai `mcp__claude_ai_<server>__<tool>`.
535 527
536Dalam sesi [Cowork](https://claude.com/docs/cowork/overview) di aplikasi Claude Desktop, Claude menjalankan perintah shell melalui alat `mcp__workspace__bash` Cowork daripada alat `Bash` bawaan, dan Cowork juga menyediakan `mcp__workspace__web_fetch` untuk web fetch. Claude Code juga menerapkan aturan deny yang menamai seluruh alat `Bash` atau `WebFetch` ke alat Cowork ini, jadi aturan deny `Bash` yang dikelola menghentikan Claude dari menjalankan perintah shell di Cowork. Ketika Claude Code memblokir panggilan seperti itu, pesan menamai alat Cowork: `Permission to use mcp__workspace__bash has been denied.` Aturan allow tidak terbawa: Claude Code tidak pernah menerapkan aturan `Bash` allow ke `mcp__workspace__bash`.528Dalam sesi [Cowork](https://claude.com/docs/cowork/overview) di aplikasi Claude Desktop, Claude menjalankan perintah shell melalui alat `mcp__workspace__bash` Cowork daripada alat `Bash` bawaan, dan Cowork juga menyediakan `mcp__workspace__web_fetch` untuk web fetch. Claude Code juga menerapkan aturan tolak yang menamai seluruh alat `Bash` atau `WebFetch` ke alat Cowork ini, jadi aturan tolak `Bash` terkelola menghentikan Claude dari menjalankan perintah shell dalam Cowork. Ketika Claude Code memblokir panggilan seperti itu, pesan menamai alat Cowork: `Permission to use mcp__workspace__bash has been denied.` Aturan izin tidak terbawa: Claude Code tidak pernah menerapkan aturan izin `Bash` ke `mcp__workspace__bash`.
537 529
538<h3 id="agent-subagents">530<h3 id="agent-subagents">
539 Agent (subagents)531 Agent (subagents)
540</h3>532</h3>
541 533
542Gunakan aturan `Agent(AgentName)` untuk mengontrol [subagents](/docs/id/sub-agents) mana yang dapat digunakan Claude:534Gunakan aturan `Agent(AgentName)` untuk mengontrol [subagent](/docs/id/sub-agents) mana yang dapat digunakan Claude:
543 535
544* `Agent(Explore)` mencocokkan subagent Explore536* `Agent(Explore)` cocok dengan subagent Explore
545* `Agent(Plan)` mencocokkan subagent Plan537* `Agent(Plan)` cocok dengan subagent Plan
546* `Agent(my-custom-agent)` mencocokkan subagent kustom bernama `my-custom-agent`538* `Agent(my-custom-agent)` cocok dengan subagent kustom bernama `my-custom-agent`
547 539
548Tambahkan aturan ini ke array `deny` dalam pengaturan Anda atau gunakan flag CLI `--disallowedTools` untuk menonaktifkan agen tertentu. Untuk menonaktifkan agen Explore:540Tambahkan aturan-aturan ini ke array `deny` dalam pengaturan Anda atau gunakan flag CLI `--disallowedTools` untuk menonaktifkan agen spesifik. Untuk menonaktifkan agen Explore:
549 541
550```json theme={null}542```json theme={null}
551{543{
559 Cd551 Cd
560</h3>552</h3>
561 553
562Aturan `Cd` mengontrol direktori mana yang dapat dipindahkan oleh perintah [`/cd`](/docs/id/commands) ke sesi. `Cd` bukan alat yang dapat dipanggil model: Claude tidak dapat memanggilnya, dan aturan hanya berlaku ketika Anda menjalankan `/cd` sendiri.554Aturan `Cd` mengontrol direktori mana yang dapat dipindahkan perintah [`/cd`](/docs/id/commands) ke sesi. `Cd` bukan alat yang dapat dipanggil model: Claude tidak dapat memanggilnya, dan aturan berlaku hanya ketika Anda menjalankan `/cd` sendiri.
563 555
564Aturan deny `Cd` telanjang menonaktifkan `/cd` sepenuhnya. Aturan deny `Cd(<path-pattern>)` memblokir target yang mencocokkan. Aturan deny memeriksa setiap ejaan target, termasuk setiap lompatan symlink yang diselesaikannya, jadi aturan yang ditulis untuk satu jalur juga memblokir target yang diselesaikan ke itu.556Aturan tolak `Cd` telanjang menonaktifkan `/cd` sepenuhnya. Aturan tolak `Cd(<path-pattern>)` memblokir target yang cocok. Aturan tolak memeriksa setiap ejaan target, termasuk setiap lompatan symlink yang diselesaikannya, jadi aturan yang ditulis untuk satu jalur juga memblokir target yang diselesaikan ke itu.
565 557
566Menambahkan aturan allow `Cd` apa pun beralih `/cd` ke mode allowlist: direktori target yang diselesaikan harus mencocokkan salah satu aturan allow Anda, atau `/cd` menolak. Tanpa aturan `Cd` yang dikonfigurasi, `/cd` mempertahankan perilaku defaultnya dan meminta Anda untuk mempercayai direktori yang tidak dikenal.558Menambahkan aturan izin `Cd` apa pun beralih `/cd` ke mode daftar allowlist: direktori target yang diselesaikan harus cocok dengan salah satu aturan izin Anda, atau `/cd` menolak. Tanpa aturan `Cd` yang dikonfigurasi, `/cd` menyimpan perilaku defaultnya dan meminta Anda untuk mempercayai direktori yang tidak dikenal.
567 559
568Pola jalur berbagi jangkar `//`, `~/`, dan `/` dari [aturan Read dan Edit](#read-and-edit), tetapi pencocokan berlabuh ke seluruh jalur direktori daripada gaya gitignore. `*` mencocokkan tepat satu segmen jalur dan `**` mencocokkan di seluruh segmen. Trailing `/**` juga mencocokkan akar yang dinamainya.560Pola jalur berbagi jangkar `//`, `~/`, dan `/` dari [aturan Read dan Edit](#read-and-edit), tetapi pencocokan berlabuh pada seluruh jalur direktori daripada gaya gitignore. `*` cocok dengan tepat satu segmen jalur dan `**` cocok di seluruh segmen. `/**` di belakang juga cocok dengan akar yang dinamainya.
569 561
570| Aturan | Cocok | Tidak cocok |562| Aturan | Cocok | Tidak cocok |
571| --------------------- | --------------------------------------------------------------------------------- | -------------------------- |563| --------------------- | --------------------------------------------------------------------------------- | -------------------------- |