SpyBara
Go Premium

permissions.md 2026-10-01 23:59 UTC to 2026-10-02 20:57 UTC

This page contains 139 additions and 128 deletions.

2026
Thu 1 23:59 Fri 2 22:00

Konfigurasi izin

Kontrol apa yang dapat diakses Claude Code dan lakukan dengan aturan izin terperinci, mode, dan kebijakan terkelola.

Claude Code mendukung izin terperinci sehingga Anda dapat menentukan dengan tepat apa yang diizinkan dilakukan oleh agen dan apa yang tidak. Pengaturan izin dapat diperiksa ke dalam kontrol versi dan didistribusikan ke semua pengembang di organisasi Anda, serta disesuaikan oleh pengembang individual.

Sistem izin

Claude Code menggunakan sistem izin berjenjang untuk menyeimbangkan kekuatan dan keamanan. Tabel menunjukkan, untuk setiap jenis alat, apakah mode Manual meminta persetujuan sebelum tindakan dijalankan. Mode izin lainnya mengubah mana dari ini yang meminta Anda; dalam mode otomatis pengklasifikasi meninjau tindakan alih-alih Anda, dan bagaimana pengklasifikasi mengevaluasi tindakan mencantumkan mana yang dilihatnya.

Jenis alat Contoh Persetujuan diperlukan Perilaku "Ya, dan jangan tanya lagi"
Hanya baca Pembacaan file, Grep Tidak, dalam direktori kerja dan direktori tambahan T/A
Perintah Bash Eksekusi shell Ya, kecuali serangkaian perintah hanya baca yang tertanam Secara permanen per repositori dan perintah
Modifikasi file Edit/tulis file Ya Hingga akhir sesi
Pengambilan web WebFetch Ya, kecuali serangkaian domain dokumentasi yang telah disetujui sebelumnya Secara permanen per repositori dan domain
Pencarian web WebSearch Ya Secara permanen per repositori

Prompt izin menampilkan apa yang akan dilakukan Claude, diikuti oleh opsi-opsi Anda. Contoh ini adalah prompt untuk perintah Bash, dari sesi dalam mode Manual:

Prompt izin Claude Code berjudul Bash command. Di bawah tip tentang auto mode, prompt menampilkan deskripsi 'Run the test suite', perintah npm test, dan baris 'This command requires approval', lalu bertanya 'Do you want to proceed?' dengan empat opsi: Yes; Yes, and don't ask again for: npm test *; Yes, and switch to auto mode; dan No. Footer mencantumkan dua tombol: Esc untuk membatalkan dan Tab untuk mengubah. Prompt izin Claude Code berjudul Bash command. Di bawah tip tentang auto mode, prompt menampilkan deskripsi 'Run the test suite', perintah npm test, dan baris 'This command requires approval', lalu bertanya 'Do you want to proceed?' dengan empat opsi: Yes; Yes, and don't ask again for: npm test *; Yes, and switch to auto mode; dan No. Footer mencantumkan dua tombol: Esc untuk membatalkan dan Tab untuk mengubah.

Opsi ketiga, Ya, dan beralih ke auto mode, tidak muncul di setiap prompt.

Ketika Anda memilih "Ya, dan jangan tanya lagi" dan persetujuan disimpan secara permanen, seperti untuk perintah Bash atau domain WebFetch, Claude Code menyimpan aturan ke .claude/settings.local.json di akar repositori git, diselesaikan melalui worktrees ke checkout utama. Aturan berlaku untuk sesi masa depan di mana pun dalam repositori itu, termasuk sesi yang dimulai di subdirektori dan di worktrees. Persetujuan modifikasi file tidak disimpan ke file: seperti yang ditunjukkan tabel, itu berlangsung hingga sesi berakhir. Dalam beberapa kasus, seperti di luar repositori git atau di Windows, Claude Code tidak menggunakan akar repositori; Tempat Claude Code mencari setiap file mencantumkan kasus-kasus itu dan tempat itu menyimpan aturan sebagai gantinya.

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

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

Tambahkan komentar ketika Anda menjawab prompt izin

Anda dapat melampirkan catatan kepada Claude ketika Anda menyetujui atau menolak satu tindakan. Pada sebagian besar prompt izin, termasuk Bash, PowerShell, file, dan prompt alat MCP, pindah ke Ya atau Tidak dan tekan Tab untuk membuka bidang komentar pada opsi itu. Prompt WebFetch dan browser tidak menawarkan bidang. Opsi yang mengizinkan tindakan untuk sisa sesi atau menyimpan aturan juga tidak mengambil satu.

Dengan bidang terbuka, ketik komentar dan kemudian tekan salah satu kunci ini:

  • Enter: mengirimkan jawaban Anda dengan komentar terlampir. Jika Anda membiarkan bidang kosong, Claude Code mengirimkan jawaban tanpa komentar.
  • Tab: menutup bidang tanpa menjawab. Claude Code menyimpan teks yang Anda ketik dan masih mengirimkannya jika Anda menjawab dengan opsi itu.
  • Shift+Tab: pada prompt file, seperti prompt Edit atau Write, menutup bidang sama seperti Tab. Sebelum v2.1.235, menekan Shift+Tab di dalam bidang malah memilih opsi yang mengizinkan tindakan untuk sisa sesi, jadi Claude Code menyetujui tindakan untuk sisa sesi dan membuang komentar.

Claude Code mengirimkan komentar secara berbeda tergantung pada cara Anda menjawab:

  • Ya: Claude Code menjalankan tindakan, kemudian mengirimkan komentar Anda ke Claude setelah hasilnya.
  • Tidak: Claude Code mengirimkan komentar Anda ke Claude sebagai alasan penolakan, dan Claude terus bekerja. Jika Anda memilih Tidak tanpa komentar pada prompt dari percakapan utama, Claude Code menghentikan giliran.

Kelola izin

Anda dapat melihat dan mengelola izin alat Claude Code dengan /permissions. Dialog ini mencantumkan semua aturan izin dan file settings.json tempat setiap aturan berasal. Anda dapat membuka dialog saat Claude sedang bekerja: ketika Anda menambah atau menghapus aturan, Claude Code menerapkan perubahan mulai dari panggilan alat Claude berikutnya dalam giliran yang sama. Sebelum v2.1.234, Claude Code mengantrikan perintah hingga giliran selesai.

  • Aturan Allow memungkinkan Claude Code menggunakan alat yang ditentukan tanpa persetujuan manual.
  • Aturan Ask meminta konfirmasi setiap kali Claude Code mencoba menggunakan alat yang ditentukan.
  • Aturan Deny mencegah Claude Code menggunakan alat yang ditentukan.

Aturan dievaluasi secara berurutan: deny, kemudian ask, kemudian allow. Kecocokan pertama dalam urutan tersebut menentukan hasilnya, dan spesifisitas aturan tidak mengubah urutan.

Aturan deny yang luas seperti Bash(aws *) memblokir setiap panggilan yang cocok, termasuk panggilan yang juga cocok dengan aturan allow yang lebih sempit seperti Bash(aws s3 ls). Aturan allow tidak dapat membuat pengecualian dari aturan deny. Prioritas yang sama berlaku antara ask dan allow: aturan ask yang cocok meminta konfirmasi bahkan ketika aturan allow yang lebih spesifik juga cocok dengan panggilan yang sama.

Aturan deny berperilaku berbeda tergantung pada apakah mereka menamai alat atau membatasi pola dalam satu alat. Nama alat biasa seperti Bash menghapus alat dari konteks Claude sepenuhnya, sehingga Claude tidak pernah melihatnya. Jika Anda menambahkan aturan seperti itu di tengah sesi, Claude tidak dapat memanggil alat dari panggilan alat berikutnya; Menolak seluruh alat mencakup apa yang terjadi pada definisi yang telah Claude lihat. Aturan yang dibatasi seperti Bash(rm *) membiarkan alat tersedia dan memblokir panggilan yang cocok ketika Claude mencoba menggunakannya.

Penghapusan nama biasa berlaku untuk setiap alat kecuali EndConversation: aturan deny tidak dapat menghapusnya saat alat lain tetap ada, dan aturan ask tidak pernah memintanya.

Ketika mode auto tersedia untuk sesi Anda, dialog juga mencakup aturan pengklasifikasi mode auto. Pilih tab Auto mode untuk melihatnya.

Mode izin

Claude Code mendukung beberapa mode izin yang mengontrol bagaimana alat disetujui. Lihat Permission modes untuk mengetahui kapan menggunakan masing-masing. Untuk mengubah mode yang dimulai sesi, atur defaultMode dalam file pengaturan Anda. Mode mana yang dimulai sesi mencakup default bawaan untuk setiap paket dan apa yang dibaca ekstensi VS Code.

Mode Deskripsi
default Meminta izin pada penggunaan pertama setiap alat. Berlabel Manual di CLI, ekstensi VS Code dan JetBrains, dan aplikasi desktop, dan Claude Code menerima manual sebagai alias. Label dan alias memerlukan Claude Code v2.1.200 atau lebih baru. Label aplikasi desktop tidak bergantung pada versi CLI Anda
acceptEdits Secara otomatis menerima edit file dan perintah sistem file umum seperti mkdir, touch, mv, dan cp untuk jalur di direktori kerja atau additionalDirectories
plan Claude membaca file dan menjalankan perintah shell hanya-baca untuk menjelajahi tetapi tidak mengedit file sumber Anda; dengan mode auto tersedia, perintah yang disetujui classifier juga berjalan. Berlabel Plan di CLI dan ekstensi VS Code
auto Berjalan tanpa prompt rutin; sebelum tindakan seperti perintah shell dan permintaan jaringan berjalan, classifier latar belakang memeriksa bahwa tindakan tersebut selaras dengan permintaan Anda
dontAsk Secara otomatis menolak setiap panggilan yang sebaliknya akan meminta; pembacaan file di direktori kerja Anda dan tindakan lain yang tidak memerlukan persetujuan masih berjalan, begitu juga dengan alat yang telah disetujui sebelumnya melalui /permissions atau aturan permissions.allow. AskUserQuestion, alat MCP yang ditandai requiresUserInteraction, dan alat konektor organisasi Anda atur ke ask dalam sesi di mana pengaturan itu mencapai Claude Code ditolak bahkan jika Anda telah mengizinkannya
bypassPermissions Melewati prompt izin, kecuali untuk tindakan yang tidak ada mode auto-approve

Untuk mencegah mode bypassPermissions atau auto digunakan, atur permissions.disableBypassPermissionsMode atau permissions.disableAutoMode ke "disable" dalam file pengaturan apa pun. Ini paling berguna dalam pengaturan terkelola di mana mereka tidak dapat ditimpa.

Sintaks aturan izin

Aturan izin mengikuti format Tool atau Tool(specifier). Tanda kurung di dalam specifier bersifat literal, jadi perintah atau jalur yang mengandungnya tidak memerlukan escaping.

Cocokkan semua penggunaan alat

Untuk mencocokkan semua penggunaan alat, gunakan hanya nama alat tanpa tanda kurung:

Aturan Efek
Bash Mencocokkan semua perintah Bash
WebFetch Mencocokkan semua permintaan web fetch
Read Mencocokkan semua pembacaan file

Bash(*) setara dengan Bash dan mencocokkan semua perintah Bash. Sebagai aturan deny, kedua bentuk menghapus alat dari konteks Claude.

Gunakan specifier untuk kontrol yang lebih terperinci

Tambahkan specifier dalam tanda kurung untuk mencocokkan penggunaan alat tertentu:

Aturan Efek
Bash(npm run build) Mencocokkan perintah yang tepat npm run build
Read(./.env) Mencocokkan pembacaan file .env di direktori saat ini
WebFetch(domain:example.com) Mencocokkan permintaan fetch ke example.com

Cocokkan berdasarkan parameter input

Aturan deny dan ask dapat mencocokkan parameter input tingkat atas pada alat bawaan apa pun dengan Tool(param:value).

Untuk mencocokkan parameter pada alat MCP, berikan aturan deny dengan --disallowedTools. Ketika Claude Code memuat file pengaturan, ia melewati aturan mcp__ apa pun yang memiliki tanda kurung. Claude Code mencantumkan aturan yang dilewati dalam dialog invalid-settings ketika sesi interaktif dimulai, dan dalam output claude doctor.

Aturan parameter cocok ketika Claude memanggil alat dengan parameter tersebut diatur ke nilai yang tepat. Aturan allow untuk satu nilai parameter tidak akan menetapkan bahwa panggilan aman secara keseluruhan, jadi aturan allow terus menggunakan sintaks specifier masing-masing alat. Ini berfungsi untuk parameter skalar apa pun yang diterima alat:

Aturan Cocok
Agent(model:opus) Panggilan Agent yang meminta tingkat model Opus
Agent(isolation:worktree) Panggilan Agent yang meminta git worktree
Bash(run_in_background:true) Panggilan Bash yang berjalan di latar belakang

Pencocokan parameter mengikuti aturan ini:

  • Nama parameter harus berupa bidang langsung dari input alat, seperti model pada alat Agent. Bidang yang bersarang di dalam objek atau array tidak dapat dicocokkan
  • Setiap aturan menamai satu parameter. Untuk membatasi pada model dan isolation, tulis dua aturan, Agent(model:opus) dan Agent(isolation:worktree), daripada menggabungkannya dalam satu aturan
  • Nilai mendukung * sebagai wildcard yang mencocokkan urutan karakter apa pun, jadi Agent(isolation:*) mencocokkan nilai isolasi eksplisit apa pun. Tanpa * pencocokan bersifat tepat
  • Parameter yang dihilangkan model tidak pernah dicocokkan, jadi Agent(model:*) tidak mencocokkan panggilan yang membiarkan model tidak diatur
  • Nilai dibandingkan dengan input literal yang dikirim Claude, sebelum normalisasi apa pun. Agent(model:opus) mencocokkan alias opus tetapi bukan ID model lengkap
  • Aturan deny Skill(skill:<name>) sebagai gantinya mencocokkan skill di bawah salah satu namanya, seperti alias atau nama tampilannya
  • Jalankan dengan --verbose untuk melihat nama dan nilai parameter yang tepat dalam setiap panggilan alat
  • Spasi di sekitar titik dua diabaikan

Anda tidak dapat mencocokkan bidang konten utama alat dengan cara ini: command untuk Bash dan PowerShell, file_path untuk Read, Edit, dan Write, path untuk Grep dan Glob, notebook_path untuk NotebookEdit, dan url untuk WebFetch. Aturan seperti Bash(command:rm *) akan dapat dilewati oleh perintah gabungan, jadi Claude Code mengabaikannya dan mengeluarkan peringatan startup. Gunakan Bash(rm *), Read(./path), atau WebFetch(domain:host) sebagai gantinya.

Pola wildcard

* dalam aturan Bash mencocokkan teks apa pun, termasuk spasi, jadi satu aturan mencakup keluarga perintah. Aturan tanpa * mencocokkan satu perintah yang tepat.

Tulis perintah yang ingin Anda jalankan Claude tanpa bertanya, dan ganti bagian yang bervariasi dengan *. Dengan konfigurasi ini, Claude Code menjalankan skrip npm dan komit git tanpa bertanya dan menolak perintah yang dimulai dengan git push. Push yang ditulis dengan cara lain, seperti git -C . push, tidak dicocokkan; lihat apa yang tidak dicocokkan aturan Bash.

{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(git commit *)"
    ],
    "deny": [
      "Bash(git push *)"
    ]
  }
}

* dapat berada di mana saja dalam aturan: di awal, di tengah, atau di akhir. Setiap baris menunjukkan aturan, perintah yang dicocokkan, dan perintah terdekat yang tidak dicocokkan:

Anda tulis Cocok Tidak cocok
Bash(npm run build) npm run build npm run build --watch
Bash(npm run *) npm run build, npm run test --watch, npm run npm install
Bash(git log * main) git log --oneline main, git log -5 main, git log --output=<file> main git log main, git push origin main
Bash(git * main) git merge main, git push origin main, git -c core.fsmonitor=<script> diff main git log
Bash(* --version) node --version, bash -c 'echo hi' --version node -v
Bash(ls *) ls -la, ls lsof
Bash(ls*) ls -la, lsof
Bash(* --help *) npm --help x npm --help

Tiga aturan pencocokan menghasilkan baris-baris tersebut:

  • * mewakili teks apa pun yang ada di tempatnya. Dalam Bash(git * main), ia mewakili subperintah, jadi Claude Code mencocokkan setiap subperintah git dan setiap opsi sebelumnya. Itu termasuk -c, yang membuat git menjalankan program yang Anda beri nama. Dalam Bash(* --version), * mewakili program, jadi program apa pun cocok.
  • * di akhir, dengan spasi sebelumnya, juga mencocokkan perintah bare. Bash(ls *) mencocokkan ls, dan Bash(git log *) mencocokkan git log. Itu hanya berlaku ketika trailing * adalah satu-satunya wildcard aturan: Bash(* --help *) mencocokkan npm --help x tetapi bukan npm --help.
  • Spasi sebelum trailing * adalah bagian dari aturan. Bash(ls *) memerlukan spasi setelah ls, jadi lsof tidak cocok. Bash(ls*) tidak memiliki spasi, jadi ia juga mencocokkan lsof.

Sufiks :* adalah cara setara untuk menulis trailing wildcard, jadi Bash(ls:*) mencocokkan perintah yang sama dengan Bash(ls *).

Dialog izin menulis bentuk yang dipisahkan spasi ketika Anda memilih "Yes, and don't ask again" untuk awalan perintah. Bentuk :* hanya dikenali di akhir pola. Dalam pola seperti Bash(git:* push), titik dua diperlakukan sebagai karakter literal dan tidak akan mencocokkan perintah git.

Wildcard nama alat

Aturan deny dan ask juga menerima pola glob dalam posisi nama alat. Pola harus mencocokkan nama alat lengkap: "*" mencocokkan setiap alat, dan "mcp__*" mencocokkan setiap alat MCP di semua server. Alat yang dicocokkan oleh aturan deny nama bare-name glob dihapus dari konteks Claude, sama seperti nama alat bare, termasuk pengecualian EndConversation: glob deny tidak dapat menghapusnya sementara alat lain tetap ada, dan glob ask tidak pernah memintanya. Konfigurasi ini menolak setiap alat MCP:

{
  "permissions": {
    "deny": [
      "mcp__*"
    ]
  }
}

Aturan allow menerima glob nama alat hanya setelah awalan mcp__<server>__ literal. Segmen server harus bebas glob sehingga aturan menamai server spesifik yang Anda konfigurasi. mcp__puppeteer__* mencocokkan setiap alat dari server puppeteer, dan mcp__github__get_* mencocokkan alat get_ miliknya. Glob allow yang tidak berlabuh seperti "*", "B*", atau "mcp__*" dilewati dengan peringatan dan tidak auto-approve apa pun.

Aturan deny atau ask yang nama alatnya tidak cocok dengan alat yang diketahui menghasilkan peringatan startup untuk menangkap typo. Nama alat yang berisi _ atau * dikecualikan dari pemeriksaan, begitu juga nama alat yang telah dihapus Claude Code, seperti TaskOutput.

Label yang ditampilkan untuk alat dalam transkrip dan dialog izin dapat berbeda dari nama kanoniknya. Misalnya, alat berlabel Stop Task dalam transkrip memiliki nama kanonik TaskStop. Aturan izin dan pencocokan hook tidak mencocokkan label, jadi aturan yang ditulis sebagai Stop Task tidak cocok. Untuk aturan deny dan ask, peringatan startup di atas menangkap ketidaksesuaian. Gunakan nama kanonik yang tercantum dalam referensi alat.

Aturan izin khusus tool

Bash

Aturan Bash mencocokkan seluruh teks perintah, dengan * mewakili teks apa pun. Pola wildcard menunjukkan perintah mana yang dicocokkan oleh setiap bentuk aturan dan di mana harus meletakkan *. Bagian selanjutnya dari bagian ini membahas cara Claude Code mencocokkan perintah gabungan dan wrapper, apa yang tidak dicocokkan oleh sebuah aturan, perintah read-only, dan pengalihan.

Perintah gabungan

Aturan deny dan ask berlaku ketika subperintah mana pun cocok dengannya, termasuk perintah yang bersarang di dalam subshell, substitusi perintah, atau badan alur kontrol seperti loop for. Aturan ask seperti Bash(git clean *) tetap meminta persetujuan Anda untuk cd /tmp && git clean -f atau echo "$(git clean -f)", bahkan dalam auto mode.

Ketika && atau || tidak diikuti apa pun, seperti pada npm test &&, Claude Code memperlakukan perintah tersebut sebagai tidak dapat di-parse dan tidak memecahnya menjadi subperintah untuk pencocokan aturan allow, sehingga aturan allow seperti Bash(npm *) tidak menyetujuinya.

Ketika Anda menyetujui perintah gabungan dengan "Yes, and don't ask again", Claude Code menyimpan aturan terpisah untuk setiap subperintah yang memerlukan persetujuan, alih-alih satu aturan untuk seluruh string gabungan. Misalnya, menyetujui git status && npm test menyimpan aturan untuk npm test, sehingga pemanggilan npm test di masa mendatang dikenali terlepas dari apa yang mendahului &&. Subperintah seperti cd ke direktori di luar direktori kerja Anda menghasilkan aturan Read tersendiri untuk path tersebut. Hingga 5 aturan dapat disimpan untuk satu perintah gabungan.

Wrapper

Sebelum mencocokkan aturan Bash, Claude Code menghapus sekumpulan wrapper tetap, sehingga aturan seperti Bash(npm test *) juga cocok dengan timeout 30 npm test. Wrapper yang dihapus adalah timeout, time, nice, nohup, dan stdbuf, ditambah builtin shell command dan builtin, serta noglob milik zsh. Masing-masing menjalankan argumennya sebagai perintah yang sebenarnya. Dua bentuk terkait tidak dihapus: bentuk kueri command -v, yang mencari perintah alih-alih menjalankannya, dan nocorrect milik zsh.

Claude Code juga menghapus penetapan di awal untuk environment variable tertentu yang diketahui aman, sehingga Bash(npm test *) cocok dengan NODE_ENV=test npm test. Aturan allow tidak akan cocok melewati penetapan variabel lain mana pun. Aturan deny atau ask cocok melewati penetapan apa pun di awal, sehingga Bash(rm *) di deny tetap cocok dengan FOO=bar rm -rf tmp/.

xargs tanpa flag juga dihapus, sehingga Bash(grep *) cocok dengan xargs grep pattern. Penghapusan hanya berlaku ketika xargs tidak memiliki flag: pemanggilan seperti xargs -n1 grep pattern dicocokkan sebagai perintah xargs, sehingga aturan yang ditulis untuk perintah di dalamnya tidak mencakupnya.

Daftar wrapper ini bawaan dan tidak dapat dikonfigurasi. Runner lingkungan pengembangan seperti direnv exec, devbox run, mise exec, npx, dan docker exec tidak ada dalam daftar. Karena tool ini mengeksekusi argumennya sebagai perintah, aturan seperti Bash(devbox run *) cocok dengan apa pun yang muncul setelah run, termasuk devbox run rm -rf .. Untuk menyetujui pekerjaan di dalam runner lingkungan, tulis aturan spesifik yang mencakup runner dan perintah di dalamnya, seperti Bash(devbox run npm test). Tambahkan satu aturan per perintah di dalamnya yang ingin Anda izinkan.

Wrapper eksekusi seperti watch, setsid, ionice, dan flock tidak dapat disetujui otomatis oleh aturan prefiks seperti Bash(watch *), sehingga dalam mode Manual selalu muncul permintaan izin. Hal yang sama berlaku untuk find dengan -exec atau -delete: aturan Bash(find *) tidak mencakup bentuk-bentuk ini. Untuk menyetujui pemanggilan tertentu, tulis aturan pencocokan persis untuk string perintah lengkap.

Apa yang tidak dicocokkan oleh aturan Bash

Aturan Bash mencocokkan teks perintah yang ditulis Claude, setelah Claude Code memecah perintah gabungan dan menghapus wrapper. Aturan ini tidak mencocokkan program yang sama yang dipanggil dalam bentuk berbeda, sehingga aturan deny atau ask mencakup pemanggilan yang biasanya dihasilkan Claude dan bukan merupakan batas keamanan di sekitar program tersebut. Aturan-aturan berikut di deny atau ask menghentikan bentuk pertama dan tidak menghentikan yang lain:

Aturan Menghentikan Tidak menghentikan
Bash(curl *) curl https://example.com /usr/bin/curl https://example.com, sh -c 'curl https://example.com'
Bash(rm *) rm -rf build/ /bin/rm -rf build/, bash -c 'rm -rf build/'
Bash(git push *) git push origin main git -C . push origin main, git -c push.default=current push origin main, git 'push' origin main

Aturan Anda yang lain dan mode izin menentukan perintah di kolom terakhir.

Untuk penegakan sistem file dan jaringan yang tidak bergantung pada teks perintah, gunakan sandboxing. Untuk memeriksa teks perintah lengkap dengan logika Anda sendiri sebelum dijalankan, gunakan hook PreToolUse.

Perintah read-only

Claude Code mengenali sekumpulan perintah Bash bawaan sebagai read-only dan menjalankannya tanpa permintaan izin di setiap mode, kecuali sebagaimana diubah oleh permissions.blockReadsOutsideWorkingDirectories untuk path di luar direktori kerja Anda. Kumpulan ini mencakup ls, cat, echo, pwd, head, tail, grep, find, wc, which, diff, stat, du, cd, dan bentuk read-only dari git. Kumpulan ini tidak dapat dikonfigurasi; untuk mewajibkan permintaan izin bagi salah satu perintah ini, tambahkan aturan ask atau deny untuknya. Dalam auto mode, perintah-perintah ini juga dapat menunggu tinjauan pengklasifikasi; lihat cara pengklasifikasi mengevaluasi tindakan.

Pengalihan seperti ls > out.txt menambahkan pemeriksaan pada targetnya. Lihat Pengalihan.

Pola glob tanpa tanda kutip diizinkan untuk perintah yang semua flag-nya read-only, sehingga ls *.ts dan wc -l src/*.py berjalan tanpa permintaan izin.

Dalam mode Manual, perintah dari kumpulan ini tetap memunculkan permintaan izin dalam kasus-kasus berikut:

  • Glob tanpa tanda kutip untuk perintah dengan flag yang dapat menulis: perintah dengan flag yang dapat menulis atau mengeksekusi, seperti find, sort, sed, dan git, memunculkan permintaan izin ketika ada glob tanpa tanda kutip, karena glob tersebut dapat diperluas menjadi flag seperti -delete.
  • docker yang diarahkan ke daemon lain: bentuk read-only dari docker memunculkan permintaan izin ketika perintah membawa flag yang memilih daemon berbeda, seperti -H, --context, atau --url dan --connection milik Podman.
  • file dengan flag yang membuka path: file memunculkan permintaan izin ketika meneruskan -m/--magic-file atau -f/--files-from, karena flag tersebut membuat file membuka path yang disebutkan dalam nilai flag.
  • Path jaringan di Windows: perintah yang argumennya mencakup path jaringan (UNC), seperti \\server\share\file, memunculkan permintaan izin karena mengakses path jaringan dapat mengirimkan kredensial Windows Anda ke host yang disebutkannya. Pemeriksaan yang sama berlaku untuk perintah tool PowerShell.
  • Penulisan ke variabel shell khusus: perintah yang menetapkan, menghapus, atau melakukan loop atas variabel shell khusus tertentu, seperti PATH atau IFS, memunculkan permintaan izin meskipun bagian lain dari perintah bersifat read-only.
  • Perintah yang tidak dapat di-parse oleh analisis: ketika Claude Code tidak dapat sepenuhnya mem-parse sebuah perintah, ia meminta persetujuan alih-alih memperlakukan perintah tersebut sebagai read-only. Perintah yang lebih panjang dari 10.000 karakter selalu memunculkan permintaan izin karena melebihi batas yang di-parse oleh analisis.

cd ke path di dalam direktori kerja Anda atau direktori tambahan juga bersifat read-only, dan perintah gabungan seperti cd packages/api && ls berjalan tanpa permintaan izin ketika setiap bagian memenuhi syarat secara tersendiri. Kombinasi berikut memunculkan permintaan izin meskipun setiap bagian bersifat read-only:

  • cd dengan git: memunculkan permintaan izin ketika cd berpindah ke direktori yang berbeda, karena menjalankan git di direktori baru dapat mengeksekusi hook milik direktori tersebut. cd yang targetnya mengarah ke direktori kerja saat ini tidak melakukan apa-apa dan tidak memicu permintaan izin.
  • cd dengan pengalihan: memunculkan permintaan izin ketika Claude Code tidak dapat menentukan direktori mana yang menjadi acuan target pengalihan setelah cd dijalankan. Perintah yang satu-satunya target pengalihannya adalah /dev/null, seperti cd app; grep -r pattern . 2>/dev/null, tidak memunculkan permintaan izin, karena /dev/null tidak bergantung pada direktori kerja.

Pengalihan

Ketika sebuah perintah mengalihkan output atau input, Claude Code memeriksa target pengalihan terhadap aturan file Anda seolah-olah Claude menulis atau membaca file tersebut secara langsung:

  • Pengalihan output: untuk > file, >> file, atau 2> file, pemeriksaan mencakup aturan allow dan deny Edit Anda, path yang dilindungi, dan direktori kerja. Aturan seperti Bash(git commit *) mengizinkan perintahnya, bukan targetnya. Target yang diawali dengan ~ atau mengandung karakter glob memerlukan persetujuan Anda.
  • Pengalihan input: untuk < file, pemeriksaan mencakup aturan allow dan deny Read Anda serta direktori kerja. Target di luar direktori kerja memerlukan persetujuan Anda kecuali ada aturan allow yang mencakupnya. Target yang mengandung pola glob, atau path relatif yang mengikuti cd dalam perintah yang sama, memerlukan persetujuan Anda meskipun ada aturan allow yang mencakupnya. Claude Code memeriksa target input di v2.1.257 dan yang lebih baru.

Target yang tidak memiliki file di baliknya tidak diperiksa: /dev/null, bentuk file-descriptor seperti 2>&1 dan <&3, serta here-doc dan here-string.

Claude Code juga memeriksa file yang ditulis oleh perintah tee, termasuk dalam pipeline seperti make | tee build.log. Pemeriksaan mencakup aturan allow dan deny Edit Anda, path yang dilindungi, dan direktori kerja. Aturan allow seperti Bash(tee *) tidak mencakup tujuan di luar direktori kerja. Claude Code memeriksa target tee di v2.1.269 dan yang lebih baru.

PowerShell

Aturan izin PowerShell menggunakan bentuk yang sama dengan aturan Bash. Wildcard dengan * cocok di posisi mana pun, sufiks :* setara dengan * di akhir, dan PowerShell atau PowerShell(*) tanpa argumen cocok dengan setiap perintah. Konfigurasi ini mengizinkan perintah Get-ChildItem dan git commit sambil memblokir Remove-Item:

{
  "permissions": {
    "allow": [
      "PowerShell(Get-ChildItem *)",
      "PowerShell(git commit *)"
    ],
    "deny": [
      "PowerShell(Remove-Item *)"
    ]
  }
}

Alias umum dikanonisasi sebelum pencocokan. Aturan yang ditulis untuk nama cmdlet juga cocok dengan alias-aliasnya, sehingga PowerShell(Get-ChildItem *) juga cocok dengan gci, ls, dan dir. Pencocokan tidak peka huruf besar/kecil.

Claude Code mem-parse AST PowerShell dan memeriksa setiap perintah dalam perintah gabungan secara independen. Operator pipeline |, pemisah pernyataan ;, dan pada PowerShell 7+ operator rantai && dan || memecah perintah gabungan menjadi subperintah. Sebuah aturan harus cocok dengan setiap subperintah agar perintah gabungan diizinkan.

Read dan Edit

Untuk memblokir tool file Claude agar tidak membaca file atau direktori, tambahkan aturan deny Read untuk path-nya, seperti Read(./.env) atau Read(./secrets/**); Mengecualikan file sensitif memiliki contoh yang siap ditempel. Jika proyek Anda memiliki file .claudeignore, file tersebut tidak berpengaruh, jadi pindahkan entri-entrinya ke aturan deny Read.

Aturan Edit berlaku untuk semua tool bawaan yang mengedit file. Claude melakukan upaya terbaik untuk menerapkan aturan Read ke semua tool bawaan yang membaca file seperti Grep dan Glob, ke mention @file dalam prompt Anda, dan ke konteks seleksi serta file terbuka yang dibagikan oleh IDE yang terhubung kepada Claude.

Aturan deny Read juga memblokir tool Edit dan Write pada path yang sama, termasuk membuat file baru di sana. NotebookEdit tidak tercakup, jadi tambahkan aturan deny Edit untuk path yang tidak boleh diubah oleh tool apa pun. Pemeriksaan ini memerlukan Claude Code v2.1.208 atau yang lebih baru untuk edit, dan v2.1.228 atau yang lebih baru untuk penulisan.

Claude Code memeriksa izin file hanya terhadap aturan Edit(path) dan Read(path). Jika Anda menulis aturan path untuk Write, NotebookEdit, Glob, atau tool lama MultiEdit, Claude Code menerima aturan tersebut tetapi tidak pernah merujuknya, dan memberi peringatan saat startup, kecuali untuk aturan Glob yang diteruskan dalam --allowedTools. Gunakan Edit(docs/**) sebagai pengganti Write(docs/**), NotebookEdit(docs/**), atau MultiEdit(docs/**), dan Read(docs/**) sebagai pengganti Glob(docs/**). Claude Code tidak memberi peringatan tentang aturan nama tool tanpa path, seperti aturan deny untuk Write; aturan tersebut dicocokkan di tingkat tool di mana saja. Memerlukan Claude Code v2.1.210 atau yang lebih baru.

Aturan Read dan Edit sama-sama menggunakan sintaks pola gitignore dengan empat jenis pola yang berbeda; untuk pola direktori segmen tunggal, kedalaman pencocokan juga bergantung pada jenis aturan, yang dijelaskan nanti di bagian ini:

Pola Arti Contoh Cocok dengan
//path Path absolut dari root sistem file Read(//Users/alice/secrets/**) /Users/alice/secrets/**
~/path Path dari direktori home Read(~/Documents/*.pdf) /Users/alice/Documents/*.pdf
/path Path relatif terhadap sumber pengaturan Edit(/src/**/*.ts) <primary working directory>/src/**/*.ts dalam pengaturan proyek
path atau ./path Path relatif terhadap direktori saat ini Read(*.env) <cwd>/*.env

Pola /path berjangkar pada direktori yang terkait dengan sumber pengaturan yang mendefinisikannya, sehingga aturan yang sama cocok dengan lokasi berbeda tergantung di mana Anda meletakkannya:

Aturan didefinisikan di /path mengarah ke
Pengaturan proyek di .claude/settings.json <primary working directory>/path
Pengaturan lokal di .claude/settings.local.json <primary working directory>/path
Pengaturan pengguna di ~/.claude/settings.json ~/.claude/path
File yang diteruskan dengan --settings <file> <directory of file>/path
Flag CLI atau aturan sesi <primary working directory>/path

Aturan yang Anda tambahkan melalui /permissions mengikuti baris untuk file pengaturan tempat Anda menyimpannya.

Aturan pengaturan lokal berjangkar pada direktori kerja utama sesi, bukan pada root repositori tempat Claude Code menyimpan file tersebut di v2.1.211 dan yang lebih baru. Dalam sesi yang dimulai di root repositori, kedua direktori tersebut sama; dalam sesi worktree, aturan bersama seperti Edit(/src/**) cocok dengan direktori src/ milik worktree tersebut.

Aturan deny seperti Read(/secrets/**) dalam pengaturan pengguna memblokir ~/.claude/secrets/**, bukan direktori secrets di proyek Anda. Untuk menulis aturan dalam pengaturan pengguna yang berlaku di dalam setiap proyek, gunakan path absolut // atau path relatif-home ~/.

Di Windows, path dinormalisasi ke bentuk POSIX sebelum pencocokan. C:\Users\alice menjadi /c/Users/alice, jadi gunakan //c/**/.env untuk mencocokkan file .env di mana pun pada drive tersebut. Untuk mencocokkan di semua drive, gunakan //**/.env.

Contoh:

  • Edit(/docs/**): edit di <primary working directory>/docs/, bukan /docs/ atau <primary working directory>/.claude/docs/
  • Read(~/.zshrc): membaca .zshrc di direktori home Anda
  • Edit(//tmp/scratch.txt): mengedit path absolut /tmp/scratch.txt
  • Read(src/**): sebagai aturan allow, hanya membaca dari <current-directory>/src/; sebagai aturan deny atau ask, cocok dengan direktori src di kedalaman mana pun di bawah direktori saat ini

Sebuah aturan hanya cocok dengan file di bawah jangkarnya; dalam batas tersebut, kedalaman pencocokan bergantung pada bentuk pola dan, untuk pola direktori segmen tunggal, jenis aturan, yang dijelaskan di bawah. Nama file tanpa path mengikuti semantik gitignore dan cocok di kedalaman mana pun, sehingga Read(.env) dan Read(**/.env) setara:

Aturan deny Memblokir Tidak memblokir
Read(.env) atau Read(**/.env) setiap .env di atau di bawah direktori saat ini .env di direktori induk atau proyek lain
Read(//**/.env) setiap .env di mana pun pada sistem file tidak ada; aturan berjangkar pada root sistem file

Pola relatif dengan satu segmen direktori, seperti src/**, cocok di kedalaman berbeda tergantung pada jenis aturan:

  • Aturan allow: Edit(src/**) hanya cocok dengan <cwd>/src dan file di bawahnya. Untuk mengizinkan nama direktori di kedalaman mana pun, tulis Edit(**/src/**).
  • Aturan deny dan ask: Read(secrets/**) cocok dengan direktori bernama secrets di kedalaman mana pun di bawah direktori saat ini, sehingga aturan juga berlaku untuk salinan yang bersarang.

Setiap bentuk pola lainnya cocok di kedalaman yang sama di setiap jenis aturan: Edit(/src/**) dan Edit(src/components/**) hanya cocok di lokasi jangkarnya, sedangkan Edit(**/src/**) cocok di kedalaman mana pun.

Contoh berikut menunjukkan setiap bentuk pola terhadap proyek dengan direktori src/ tingkat atas dan salinan bersarang di bawah vendor/:

<current-directory>/
├── src/
│   └── app.ts
└── vendor/
    └── pkg/
        └── src/
            └── lib.js
Aturan Cocok dengan src/app.ts Cocok dengan vendor/pkg/src/lib.js
Edit(src/**) sebagai aturan allow Ya Tidak
Edit(src/**) sebagai aturan deny atau ask Ya Ya
Edit(/src/**) dalam jenis aturan apa pun Ya Tidak
Edit(**/src/**) dalam jenis aturan apa pun Ya Ya

Ketika Anda menyetujui path file dengan "Yes, and don't ask again", Claude Code meng-escape karakter pola gitignore dalam path tersebut, seperti [, ], dan *, sehingga aturan yang dihasilkan hanya cocok dengan path literal yang Anda setujui. Aturan yang Anda tulis sendiri tidak di-escape. Sebelum v2.1.202, Claude Code menyimpan path tanpa escape, sehingga aturan yang dihasilkan untuk direktori bernama [2024-06] Reports dapat gagal mencocokkan path-nya sendiri atau mencocokkan direktori saudara yang tidak dimaksudkan.

Anda tidak perlu meng-escape tanda kurung dalam path, sehingga Edit(./Finance (2024)/**) cocok dengan folder Finance (2024) sesuai ejaannya.

Aturan deny atau ask yang path-nya tidak dapat digunakan sebagai pola gitignore tetap melindungi path persis tersebut. Aturan allow dengan pola yang tidak dapat digunakan tidak menyetujui apa pun.

Pola deny atau ask yang diawali dengan ! adalah negasi gitignore. Pola ini mengecualikan path yang dicocokkannya dari aturan path atau ./path yang tercantum sebelumnya. Dalam daftar deny satu file pengaturan, Read(*.env) yang diikuti oleh Read(!sample.env) memblokir setiap file yang namanya berakhiran .env di kedalaman mana pun, kecuali file bernama sample.env. Aturan ! yang tercantum pertama tidak mengecualikan apa pun.

Pengecualian hanya menjangkau aturan dari sumber yang sama. Read(!.env) dalam pengaturan proyek atau dalam --disallowedTools tidak membatalkan deny Read(./.env) dari pengaturan terkelola atau file pengaturan lainnya.

Dua batasan mempersempit apa yang dapat dikecualikan oleh pola !:

  • Claude Code membaca pola ! relatif terhadap direktori saat ini bahkan ketika /, ~/, atau // mengikuti !, sehingga pola tersebut tidak dapat menjangkau aturan yang berjangkar dengan salah satu prefiks tersebut. Read(!~/notes/public/**) tidak mengecualikan apa pun dari Read(~/notes/**).
  • Pengecualian tidak dapat membuka kembali file di dalam direktori yang diblokir sebuah aturan secara keseluruhan. Dengan Read(secrets/**) dan Read(!secrets/public/**), Claude Code tetap memblokir secrets/public bersama sisa secrets.

Ketika path file yang diminta Claude melewati symlink, pemeriksaan izin mencakup dua path: path yang diminta Claude dan file yang dituju. Ini berlaku untuk tautan simbolis di macOS, Linux, dan Windows, serta untuk directory junction di Windows.

Cara aturan mencocokkan path yang melalui symlink

Aturan allow dan deny memperlakukan path yang diminta dan file yang dituju secara berbeda:

  • Aturan allow: hanya berlaku ketika path yang diminta dan file yang dituju sama-sama cocok. Pembacaan melalui symlink di dalam direktori yang diizinkan yang mengarah ke luar direktori tersebut tidak cocok dengan aturan.
  • Aturan deny: berlaku ketika path yang diminta atau file yang dituju cocok. Symlink yang mengarah ke file yang ditolak juga ditolak. Misalnya, dengan Read(./project/**) diizinkan dan Read(~/.ssh/**) ditolak, symlink di ./project/key yang mengarah ke ~/.ssh/id_rsa diblokir: targetnya gagal memenuhi aturan allow dan cocok dengan aturan deny.

Di macOS dan Linux, aturan deny atau ask yang ditulis melalui direktori symlink dengan pola //, ~/, atau / juga berlaku di lokasi sebenarnya direktori tersebut. Misalnya, di macOS, di mana /etc mengarah ke /private/etc, Read(//etc/**) juga memblokir /private/etc/hosts. Sebelum v2.1.268, aturan deny atau ask yang ditulis melalui direktori symlink tidak berlaku untuk path yang diberikan berdasarkan lokasi sebenarnya.

Grep dan Glob mencari di direktori yang dituju oleh argumen path. Claude Code menerapkan aturan deny Read ke direktori tersebut.

Jika path yang diminta Claude untuk diedit atau ditulis itu sendiri adalah symlink, tool Edit dan Write menolak penulisan dan mengarahkan Claude ke target tautan tersebut.

Penulisan masih dapat melewati symlink ketika sebuah direktori dalam jalur menuju file adalah symlink, atau ketika perintah Bash atau PowerShell yang melakukan penulisan. Untuk penulisan tersebut, apa yang terjadi bergantung pada posisi file tujuan penulisan relatif terhadap direktori kerja Anda dan path yang dilindungi:

  • Mengarah ke luar direktori kerja: ketika path yang diminta berada di dalam direktori kerja Anda dan file yang dituju tidak, penulisan tidak disetujui otomatis dalam mode acceptEdits. Dalam auto mode, kecuali ada aturan allow yang menyetujui penulisan tersebut, Anda akan dimintai persetujuan alih-alih pengklasifikasi yang memutuskan. Permintaan izin menyebutkan path tujuan penulisan.
  • Mengarah ke path yang dilindungi yang tidak disebutkan oleh path yang diminta: tabel path yang dilindungi memberikan hasil untuk setiap mode izin, kecuali bahwa ketika tabel mengarahkan penulisan ke pengklasifikasi, penulisan ini justru meminta persetujuan Anda.
Path yang tidak dapat di-resolve atau yang berubah

Ketika Claude Code tidak dapat menentukan ke mana sebuah path mengarah di disk, misalnya karena symlink di dalamnya membentuk loop, tool Read, Edit, dan Write menolak operasi tersebut.

Ketika sebuah tool kemudian membuka file yang disetujui, tool tersebut memastikan bahwa path masih mengarah ke lokasi yang disetujui oleh pemeriksaan izin.

WebFetch

Aturan WebFetch menggunakan prefiks domain: dan dicocokkan dengan hostname dari URL yang diminta. Pencocokan tidak peka huruf besar/kecil, mendukung wildcard *, dan menghapus . di akhir dari aturan maupun hostname sehingga example.com. dan example.com diperlakukan sama.

  • WebFetch(domain:example.com) cocok dengan permintaan ke example.com
  • WebFetch(domain:*.example.com) cocok dengan subdomain apa pun di kedalaman mana pun, seperti api.example.com atau a.b.example.com, tetapi tidak dengan example.com itu sendiri
  • WebFetch(domain:*) cocok dengan setiap domain. Ini tidak sama dengan aturan WebFetch tanpa argumen; lihat Mengizinkan atau menolak setiap fetch

Di posisi mana pun selain *. di awal atau * tunggal, wildcard hanya cocok dengan teks di antara dua titik. WebFetch(domain:example.*) cocok dengan example.org, di mana * menjadi org, tetapi tidak dengan example.evil.com, di mana * harus menjadi evil.com dan melintasi titik. Ini mencegah wildcard di akhir mencocokkan domain yang dapat didaftarkan oleh penyerang.

Wildcard dalam aturan WebFetch memerlukan Claude Code v2.1.172 atau yang lebih baru untuk mencocokkan fetch.

Mengizinkan atau menolak setiap fetch

Aturan WebFetch tanpa argumen adalah nama tool tanpa bagian domain:, seperti "deny": ["WebFetch"]. Aturan ini dan WebFetch(domain:*) sama-sama mencakup setiap URL, tetapi Claude Code menerapkannya secara berbeda, dan hanya bentuk domain: yang juga menambahkan domainnya ke daftar domain yang diizinkan atau ditolak milik sandbox. Bagian tersebut mencantumkan bentuk wildcard yang dihormati sandbox dan versi yang menambahkan * tunggal.

Setiap baris menunjukkan apa yang dilakukan sebuah aturan dalam daftar allow dan dalam daftar deny:

Aturan Dalam allow Dalam deny
WebFetch Claude melakukan fetch tanpa meminta persetujuan Anda. Tidak mengubah host mana yang dapat dijangkau oleh perintah yang di-sandbox. Claude Code menghapus tool WebFetch, sehingga Claude sama sekali tidak dapat melakukan fetch. Tidak mengubah host mana yang dapat dijangkau oleh perintah yang di-sandbox.
WebFetch(domain:*) Claude melakukan fetch tanpa meminta persetujuan Anda, dan perintah yang di-sandbox dapat menjangkau host mana pun. Claude Code mempertahankan tool tersebut dan menolak setiap fetch, dan perintah yang di-sandbox tidak dapat menjangkau host mana pun.

Kedua bentuk tersebut juga berbeda dalam hal pembacaan artifact, yaitu halaman yang dipublikasikan oleh tool Artifact di claude.ai. Aturan deny atau ask WebFetch tanpa argumen 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 persetujuan sebelumnya. Aturan Artifact melakukan hal yang sama.

Ketika sebuah aturan memblokir pembacaan, penolakan tersebut menyebutkan aturannya. Sebelum v2.1.268, aturan deny WebFetch tanpa argumen memblokir setiap pembacaan artifact, dan aturan ask tanpa argumen meminta persetujuan sebelum setiap pembacaan.

Untuk membiarkan Claude melakukan fetch dengan bebas sambil mempertahankan allowlist sandbox apa adanya, gunakan bentuk tanpa argumen. settings.json berikut melakukan hal tersebut:

{
  "permissions": {
    "allow": ["WebFetch"]
  }
}

Ketika Anda meminta Claude untuk melakukan fetch sebuah halaman, Claude melakukannya tanpa permintaan izin. Ketika Anda memintanya menjalankan curl yang di-sandbox terhadap host di luar allowlist sandbox, Claude Code tetap meminta persetujuan Anda untuk host tersebut, karena aturan tanpa argumen tidak menambahkan host ke allowlist.

Dalam auto mode, Claude justru menyebutkan host tersebut dalam domain yang diizinkan per perintah milik perintah untuk ditinjau oleh pengklasifikasi.

MCP

Aturan MCP menggunakan nama server sebagaimana dikonfigurasi di Claude Code, secara opsional diikuti oleh nama tool dari server tersebut.

  • mcp__puppeteer cocok dengan tool apa pun yang disediakan oleh server puppeteer
  • mcp__puppeteer__* menggunakan sintaks wildcard dan juga cocok dengan semua tool dari server puppeteer
  • mcp__puppeteer__puppeteer_navigate cocok dengan tool puppeteer_navigate yang disediakan oleh server puppeteer

Jika organisasi Anda telah menetapkan tool konektor claude.ai ke ask dan pengaturan tersebut sampai ke Claude Code dalam sesi Anda, aturan allow untuk tool tersebut tidak berlaku: Claude Code meminta persetujuan pada setiap panggilan, bahkan dalam mode auto dan bypassPermissions. Dalam mode dontAsk, yang tidak pernah meminta persetujuan, Claude Code justru menolak panggilan tersebut. Tool dari konektor yang diambil sendiri oleh Claude Code muncul sebagai mcp__claude_ai_<server>__<tool>.

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

Agent (subagent)

Gunakan aturan Agent(AgentName) untuk mengontrol subagent mana yang dapat digunakan Claude:

  • Agent(Explore) cocok dengan subagent Explore
  • Agent(Plan) cocok dengan subagent Plan
  • Agent(my-custom-agent) cocok dengan subagent kustom bernama my-custom-agent

Tambahkan aturan ini ke array deny dalam pengaturan Anda atau gunakan flag CLI --disallowedTools untuk menonaktifkan agent tertentu. Untuk menonaktifkan agent Explore:

{
  "permissions": {
    "deny": ["Agent(Explore)"]
  }
}

Cd

Aturan Cd mengontrol direktori mana yang dapat menjadi tujuan perpindahan sesi oleh perintah /cd. Cd bukan tool yang dapat dipanggil model: Claude tidak dapat memanggilnya, dan aturan ini hanya berlaku ketika Anda menjalankan /cd sendiri.

Aturan deny Cd tanpa argumen menonaktifkan /cd sepenuhnya. Aturan deny Cd(<path-pattern>) memblokir target yang cocok. Aturan deny memeriksa setiap ejaan target, termasuk setiap lompatan symlink yang dilaluinya, sehingga aturan yang ditulis untuk satu path juga memblokir target yang mengarah ke path tersebut.

Menambahkan aturan allow Cd apa pun mengalihkan /cd ke mode allowlist: direktori target yang telah di-resolve harus cocok dengan salah satu aturan allow Anda, atau /cd menolak. Tanpa aturan Cd yang dikonfigurasi, /cd mempertahankan perilaku default-nya dan meminta Anda untuk memercayai direktori yang belum dikenal.

Pola path menggunakan jangkar //, ~/, dan / yang sama dengan aturan Read dan Edit, tetapi pencocokan berjangkar pada seluruh path direktori, bukan bergaya gitignore. * cocok dengan tepat satu segmen path dan ** cocok lintas segmen. /** di akhir juga cocok dengan root yang disebutkannya.

Aturan Cocok dengan Tidak cocok dengan
Cd(~/code/*) ~/code/app ~/code/app/src, ~/code
Cd(~/code/**) ~/code dan direktori apa pun di bawahnya direktori di luar ~/code
Cd(**/node_modules) direktori node_modules apa pun di kedalaman mana pun di bawah direktori saat ini node_modules/pkg

Perluas izin dengan hook

Hook Claude Code memungkinkan Anda mendaftarkan perintah shell kustom yang mengevaluasi izin saat runtime. Ketika Claude Code membuat panggilan alat, hook PreToolUse berjalan sebelum prompt izin, untuk setiap alat kecuali EndConversation. Output hook dapat menolak panggilan alat, memaksa prompt, atau melewati prompt untuk membiarkan panggilan berlanjut.

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

Prioritas tersebut mencakup hook dalam file pengaturan dan dalam hooks/hooks.json plugin. Sebuah mod yang Anda instal yang menangani tool.check menjawab setelah aturan dan hook PreToolUse telah memutuskan, dan jawabannya dapat menggantikan milik mereka:

  • Aturan Ask: mod dapat menyetujui panggilan yang akan diminta oleh aturan ask
  • Blokir dari hook PreToolUse: mod dapat menyetujui panggilan, kecuali hook berada dalam pengaturan terkelola
  • Pengklasifikasi mode otomatis: dalam mode otomatis, panggilan yang disetujui mod berjalan tanpa pemeriksaan pengklasifikasi
  • Aturan Deny: pada mesin dengan pengaturan terkelola, atau ketika Anda masuk dengan paket Team atau Enterprise, aturan deny menahan mod secara default, dan organisasi Anda dapat mengubahnya. Di tempat lain, mod dapat menyetujui panggilan yang ditolak aturan deny.

Lihat Tentukan apakah akan mempercayai mod, atau Kelola mod untuk organisasi Anda jika Anda menerapkan pengaturan terkelola.

Alat MCP yang ditandai requiresUserInteraction juga masih meminta ketika hook mengembalikan "allow", begitu juga alat connector yang organisasi Anda atur ke ask dalam sesi di mana pengaturan tersebut mencapai Claude Code.

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

Direktori kerja

Secara default, Claude memiliki akses ke file di direktori tempat Anda meluncurkannya. Direktori tersebut adalah direktori kerja utama sesi sampai Anda memindahkan sesi dengan /cd. Anda dapat memperluas akses ini:

  • Saat startup: gunakan argumen CLI --add-dir <path>
  • Selama sesi: gunakan perintah /add-dir
  • Konfigurasi persisten: tambahkan ke additionalDirectories dalam file pengaturan

File di direktori tambahan mengikuti aturan izin yang sama dengan direktori kerja asli: mereka menjadi dapat dibaca tanpa prompt, dan izin edit file mengikuti mode izin saat ini.

Anda tidak dapat menambahkan sebagian besar jalur jaringan, seperti berbagi UNC \\server\share, sebagai direktori kerja, karena pencarian dapat menghubungi host yang dinamainya. Di Windows, petakan berbagi ke huruf drive sebagai gantinya dan teruskan drive dengan --add-dir saat peluncuran.

Atur permissions.blockReadsOutsideWorkingDirectories untuk membuat alat file menolak jalur yang dibatasi dalam setiap mode izin. Dalam mode otomatis, Claude Code menawarkan untuk mengaktifkannya pertama kali Claude membaca di luar direktori kerja.

Dalam sesi latar belakang di macOS, host sesi meminta akses ke folder yang dilindungi seperti ~/Desktop, ~/Documents, dan ~/Downloads secara terpisah dari terminal Anda ketika Claude perlu membaca atau menulis file di sana; jika pembacaan di sana gagal dengan Operation not permitted, lihat cara memberikan akses folder ke sesi latar belakang.

Memindahkan sesi ke direktori lain

Untuk memindahkan sesi ke direktori kerja utama yang berbeda, daripada menambahkan direktori bersama yang saat ini, jalankan /cd <path>. Claude Code menyimpan percakapan, memuat CLAUDE.md direktori baru, dan meminta Anda untuk mempercayai workspace jika Anda belum pernah bekerja di dalamnya sebelumnya. Setelahnya, Claude Code menemukan sesi yang dipindahkan ketika Anda menjalankan --resume dari direktori baru.

Segera setelah Anda memindahkan, Claude Code menerapkan konfigurasi proyek direktori baru:

  • Pengaturan proyeknya, termasuk aturan izin mereka dan hooks
  • Server .mcp.json miliknya, tunduk pada persetujuan server yang sama seperti saat startup, dan server MCP local-scope yang Anda daftarkan di dalamnya
  • plugins yang diaktifkan pengaturannya, skills miliknya, dan subagents miliknya
  • Nilai env miliknya, diterapkan di atas variabel lingkungan dari pengaturan direktori sebelumnya, yang tetap berlaku

Claude Code juga memutuskan sambungan proyek direktori sebelumnya dan server MCP local-scope, dan server dari plugins yang tidak lagi diaktifkan setelah perpindahan. Ini mengambil direktori tambahan dari pengaturan direktori baru alih-alih yang sebelumnya, dan menyimpan direktori yang Anda tambahkan dengan --add-dir atau /add-dir. Hooks yang diaktifkan perpindahan masih menerima ${CLAUDE_PROJECT_DIR} diatur ke akar proyek tempat sesi dimulai.

Ketika direktori baru belum dipercaya, Claude Code mencantumkan dalam prompt kepercayaan aturan izin, direktori tambahan, hooks, dan perintah pembantu yang akan diaktifkan pengaturan direktori, sehingga Anda dapat meninjau sebelum menerima. Jika Anda menolak, sesi tetap berada di tempat asalnya. Sebelum v2.1.246, /cd tidak menerapkan pengaturan direktori baru, hooks, server MCP, atau skills sampai Anda melanjutkan sesi, dan prompt kepercayaannya tidak mencantumkan apa yang akan diaktifkan pengaturan direktori.

Batasi atau nonaktifkan target /cd dengan aturan izin Cd.

Direktori tambahan memberikan akses file, bukan konfigurasi

Menambahkan direktori memperluas tempat Claude dapat membaca dan mengedit file. Ini tidak membuat direktori itu akar konfigurasi penuh: sebagian besar konfigurasi .claude/ tidak ditemukan dari direktori tambahan, meskipun beberapa jenis dimuat sebagai pengecualian.

Pengecualian ini hanya berlaku untuk direktori yang ditambahkan dengan flag --add-dir atau perintah /add-dir, termasuk direktori yang ditambahkan Agent SDK melalui flag. Direktori yang tercantum dalam permissions.additionalDirectories dalam file pengaturan memberikan akses file saja dan tidak memuat konfigurasi apa pun di bawah ini.

additionalDirectories opsi Agent SDK dalam TypeScript dan add_dirs opsi dalam Python menerima pengecualian juga, meskipun opsi TypeScript berbagi namanya dengan kunci pengaturan. SDK melewatkan setiap entri ke Claude Code sebagai --add-dir, sehingga direktori tersebut berperilaku seperti direktori yang ditambahkan flag. Skills, perintah, dan subagents dari direktori yang ditambahkan flag apa pun dimuat melalui sumber pengaturan project, sehingga mereka tidak dimuat ketika Anda mengecualikan sumber itu dengan --setting-sources pada CLI atau settingSources dalam SDK, dan bare mode melewati perintah dan subagents di antara mereka.

Jenis konfigurasi berikut dimuat dari direktori --add-dir:

Konfigurasi Dimuat dari --add-dir
Skills di .claude/skills/ Ya, dengan live reload
File perintah di .claude/commands/ Ya, tanpa live reload. Ketika direktori yang ditambahkan dan proyek Anda keduanya mendefinisikan perintah dengan nama yang sama, Claude Code menjalankan perintah proyek Anda
Subagents di .claude/agents/ Ya, tanpa live reload
Settings di .claude/settings.json dan .claude/settings.local.json Kunci enabledPlugins dan extraKnownMarketplaces saja
File CLAUDE.md, .claude/rules/, dan CLAUDE.local.md Hanya ketika CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 diatur. CLAUDE.local.md juga memerlukan sumber pengaturan local, yang diaktifkan secara default

Untuk memuat skills, perintah, dan subagents dari subdirektori direktori kerja utama Anda di tengah sesi, jalankan /add-dir dengan jalur subdirektori tersebut. Claude Code memuat mereka untuk sisa sesi tanpa meminta Anda atau menambahkan direktori kerja, karena subdirektori sudah dapat dibaca. Ini memerlukan Claude Code v2.1.257 atau lebih baru.

Claude Code menemukan gaya output dari direktori kerja saat ini dan induknya, direktori pengguna Anda di ~/.claude/, dan pengaturan terkelola. Hooks dan kunci .claude/settings.json lainnya dimuat dari folder .claude/ direktori kerja saat ini tanpa fallback direktori induk, bersama dengan ~/.claude/settings.json pengguna Anda dan pengaturan terkelola. .claude/settings.local.json dimuat dari akar repositori git sebagai gantinya, bahkan ketika Anda memulai Claude Code dalam subdirektori, kecuali dalam kasus di mana Claude Code tidak menggunakan akar repositori, seperti di Windows; sebelum v2.1.211, itu juga dimuat hanya dari direktori kerja saat ini. Sesi Agent SDK memuat dari direktori kerja di semua versi.

Untuk berbagi konfigurasi itu di seluruh proyek, gunakan salah satu pendekatan ini:

  • Konfigurasi tingkat pengguna: tempatkan file di ~/.claude/agents/, ~/.claude/output-styles/, atau ~/.claude/settings.json untuk membuatnya tersedia di setiap proyek
  • Plugins: paket dan distribusikan konfigurasi sebagai plugin yang dapat diinstal tim
  • Luncurkan dari direktori konfigurasi: jalankan Claude Code dari direktori yang berisi konfigurasi .claude/ yang ingin Anda gunakan

Bagaimana izin berinteraksi dengan sandboxing

Izin dan sandboxing adalah lapisan keamanan pelengkap:

  • Izin mengontrol alat mana yang dapat digunakan Claude Code dan file atau domain mana yang dapat diaksesnya. Mereka berlaku untuk Bash, Read, Edit, WebFetch, MCP, dan setiap alat lainnya, kecuali bahwa aturan deny atau ask tidak dapat memblokir EndConversation sementara alat lain tetap ada.
  • Sandboxing menyediakan penegakan tingkat OS yang membatasi akses sistem file dan jaringan perintah shell. Ini hanya berlaku untuk perintah Bash, PowerShell, dan Monitor serta proses anak mereka.

Gunakan keduanya untuk pertahanan berlapis, karena pembatasan sandbox masih berlaku bahkan jika injeksi prompt melewati pengambilan keputusan Claude. Jalur dan domain dari pengaturan sandbox dan aturan izin digabungkan ke dalam konfigurasi sandbox akhir.

Ketika Anda mengaktifkan sandboxing dan membiarkan autoAllowBashIfSandboxed pada default true, perintah Bash yang di-sandbox berjalan tanpa meminta bahkan jika izin Anda mencakup aturan ask Bash biasa, atau bentuk setara Bash(*): batas sandbox menggantikan prompt seluruh alat tersebut.

Dalam plan mode, Claude Code melewati substitusi ini. Tanpa aturan ask, perintah baca-saja bawaan masih berjalan tanpa meminta, dan perintah shell lainnya melalui alur izin reguler sementara Anda masih merencanakan; lihat plan mode untuk bagaimana Claude Code membatasi perintah di sana. Dengan aturan ask Bash biasa, setiap perintah Bash meminta, termasuk perintah baca-saja yang di-sandbox, sama seperti di luar sandboxing. Sebelum v2.1.212, substitusi diterapkan dalam plan mode juga.

Pemeriksaan ini masih berlaku:

  • Aturan ask yang dibatasi konten seperti Bash(git push *) masih memaksa prompt
  • Aturan deny eksplisit masih berlaku
  • Perintah rm atau rmdir yang menargetkan jalur kritis masih melalui alur izin reguler

Perintah yang tidak akan berjalan di-sandbox, seperti perintah yang dikecualikan, menghormati aturan ask Bash biasa seperti biasanya. Lihat sandbox modes untuk mengubah perilaku ini.

Pengaturan terkelola

Untuk organisasi yang memerlukan kontrol terpusat, administrator menerapkan pengaturan terkelola yang tidak dapat ditimpa oleh pengaturan pengguna dan proyek, kecuali untuk beberapa kunci yang sensitif terhadap keamanan. Menerapkan pengaturan terkelola mencakup mekanisme pengiriman, prioritas dalam tingkat terkelola, dan kunci yang hanya dapat diatur oleh pengaturan terkelola.

Salah satu kunci tersebut, allowManagedPermissionRulesOnly, membuat pengaturan terkelola menjadi satu-satunya sumber pengaturan untuk aturan izin. Entrinya mencantumkan setiap sumber yang kemudian diabaikan oleh Claude Code.

disableBypassPermissionsMode biasanya ditempatkan dalam pengaturan terkelola untuk memberlakukan kebijakan organisasi, tetapi berfungsi dari cakupan apa pun. Pengguna dapat mengaturnya dalam pengaturan mereka sendiri untuk mengunci diri mereka sendiri dari mode bypass.

Prioritas pengaturan

Aturan izin mengikuti prioritas pengaturan yang sama dengan semua pengaturan Claude Code lainnya, dengan pengaturan terkelola tertinggi: tidak ada tingkat lain, termasuk argumen baris perintah, yang dapat menimpa aturan izin terkelola.

Jika alat ditolak di tingkat mana pun, tidak ada tingkat lain yang dapat mengizinkannya. Misalnya, penolakan pengaturan terkelola tidak dapat ditimpa oleh --allowedTools, dan --disallowedTools dapat menambahkan pembatasan di luar apa yang ditentukan pengaturan terkelola.

Hal yang sama berlaku di seluruh cakupan pengaturan: jika pengaturan pengguna mengizinkan izin dan pengaturan proyek menolaknya, aturan penolakan memblokir izin tersebut. Kebalikannya juga benar: penolakan tingkat pengguna memblokir izin tingkat proyek, karena aturan penolakan dari cakupan apa pun dievaluasi sebelum aturan izin.

Prioritas ini adalah antara file pengaturan dan argumen baris perintah. Untuk apakah aturan penolakan berlaku atas mod yang Anda instal, lihat Perluas izin dengan hooks.

Host penyematan dapat menyediakan kebijakan terkelola tambahan melalui opsi SDK managedSettings, termasuk aturan izin allow kecuali admin menetapkan kunci allowManaged*Only; Deliver policy to Claude Desktop sessions mencakup kapan kebijakan embedder berlaku sepenuhnya.

Aturan izin proyek dan kepercayaan ruang kerja

Aturan permissions.allow dan entri permissions.additionalDirectories dalam .claude/settings.json proyek memberikan kemampuan, jadi Claude Code menerapkannya hanya setelah Anda menerima dialog kepercayaan ruang kerja untuk folder tersebut. Dialog mencantumkan aturan dan direktori yang akan diberikan folder sehingga Anda dapat meninjau terlebih dahulu. Aturan deny dan ask tidak terpengaruh, karena hanya membatasi.

Claude Code menyimpan kepercayaan yang Anda terima sesuai dengan tempat Anda memulainya:

  • Dalam repositori, Claude Code mengunci kepercayaan pada akar repositori git, jadi kepercayaan mencakup seluruh repositori kecuali repositori git apa pun yang bersarang di dalamnya, seperti submodul. Dalam worktree, ia menggunakan akar checkout utama, seperti yang dilakukannya untuk aturan yang disimpan.
  • Di luar repositori, Claude Code mengunci kepercayaan pada direktori tempat Anda memulainya, dan kepercayaan mencakup subdirektori apa pun dari direktori tersebut kecuali repositori git yang bersarang di dalamnya, seperti klon. Setiap subdirektori yang tercakup kemudian dihitung sebagai folder yang induknya Anda percayai.
  • Ketika Anda memulai di direktori home Anda, Claude Code menyimpan kepercayaan hanya untuk sesi saat ini dan tidak menulisnya ke disk; lihat catatan safeguard tambahan.

Claude Code menampilkan dialog kepercayaan hanya dalam sesi interaktif. Jalankan claude -p atau sesi SDK tidak pernah menampilkannya, dan mempercayai folder induk tidak dihitung untuk aturan ini, jadi Apa yang berjalan sebelum Anda mempercayai folder mengatakan konten repositori mana yang masih digunakan Claude Code dalam masing-masing dari dua situasi tersebut.

Sebelum memulai atau memulai ulang sesi latar belakang, Claude Code juga memeriksa kepercayaan ruang kerja untuk direktori tempat sesi berjalan. Jika Anda menjalankan claude --bg dari terminal di direktori yang belum Anda percayai, dialog kepercayaan muncul terlebih dahulu dan sesi dimulai setelah Anda menerimanya. Di mana tidak ada dialog yang dapat muncul, seperti dalam skrip, perintah keluar dengan kesalahan Workspace not trusted sebagai gantinya.

Ketika file pengaturan lokal Anda memerlukan kepercayaan

.claude/settings.local.json biasanya adalah file Anda sendiri, jadi Claude Code menerapkan aturan izin dan direktori tambahannya tanpa langkah kepercayaan. Ketika file dilacak dalam git, atau .claude adalah symlink, Claude Code memperlakukannya sebagai disediakan repositori sebagai gantinya dan menahan aturannya sampai Anda mempercayai folder.

Claude Code menjalankan git untuk membedakan keduanya, dan hanya menjalankan git setelah Anda telah mempercayai folder: Anda menerima dialog kepercayaan untuk itu atau untuk direktori induk yang kepercayaannya meluas ke itu, atau Anda berada dalam sesi -p atau SDK, yang dihitung sebagai diterima. Sampai saat itu, tempat Anda memulai Claude Code menentukan apa yang terjadi pada aturan file:

  • Di home konfigurasi Anda: Claude Code menerapkan .claude/settings.local.json folder tersebut segera tanpa menjalankan git. Home konfigurasi Anda adalah direktori home Anda, atau direktori yang subdirektori .claude Anda telah atur sebagai CLAUDE_CONFIG_DIR. Jika direktori CLAUDE_CONFIG_DIR tersebut berada di dalam repositori git dan Claude Code menyimpan pengaturan lokal Anda di akar repositori sebagai gantinya, ia menahan aturannya seperti di tempat lain.
  • Di tempat lain: Claude Code menahan aturan file seperti pengaturan proyek. Setelah pemeriksaan telah berjalan, Claude Code menerapkan aturan file yang tidak dilacak, atau file dalam direktori di luar repositori git apa pun, meskipun Anda belum mempercayai folder yang tepat itu.

Pada versi 2.1.196 hingga 2.1.199, Claude Code menahan aturan file di home konfigurasi Anda dan di luar repositori git juga, dan mencetak peringatan this workspace has not been trusted di sana. Sebelum v2.1.207, Claude Code menerapkan aturan file yang tidak dilacak sebelum Anda menerima dialog.

Apa yang berjalan sebelum Anda mempercayai folder

Setiap baris adalah satu jenis konten yang dapat disediakan repositori. Kolom adalah dua situasi di mana Anda belum mempercayai folder itu sendiri: Anda hanya mempercayai folder induk, atau Anda menjalankan claude -p atau SDK di sana, yang tidak pernah menampilkan dialog kepercayaan. Kolom folder induk tidak berlaku di dalam repositori bersarang: dalam sesi interaktif Claude Code menampilkan dialog kepercayaan untuk itu, dan jalankan claude -p atau SDK di sana mengikuti kolom claude -p.

Apa yang disediakan repositori Anda hanya mempercayai folder induk claude -p atau SDK, folder tidak pernah dipercaya
Hooks dalam file pengaturan, blok env dan perintah pembantu seperti apiKeyHelper, dan hooks skill proyek dan allowed-tools Digunakan Digunakan. Kepercayaan ruang kerja tidak pernah membatasi allowed-tools skill dalam sesi apa pun
Aturan permissions.allow dan additionalDirectories dalam .claude/settings.json Tidak digunakan sampai Anda menerima dialog kepercayaan, yang muncul lagi mencantumkannya Tidak digunakan. Claude Code mencetak peringatan this workspace has not been trusted ke stderr
Hooks frontmatter dalam subagent proyek, plugin @skills-dir proyek, dan entri extraKnownMarketplaces dari repositori atau direktori --add-dir Tidak digunakan, dan tidak ada dialog yang ditawarkan Tidak digunakan
Inline mcpServers dalam frontmatter subagent dari repositori atau direktori --add-dir Tidak digunakan, dan tidak ada dialog yang ditawarkan Tidak digunakan
Server dalam .mcp.json, termasuk yang disetujui repositori dalam pengaturannya sendiri Claude Code menanyakan Anda sebelum menghubungkannya. Persetujuan repositori itu sendiri tidak dihitung Terhubung tanpa bertanya, disetujui atau tidak. SDK memuat mereka hanya ketika settingSources mencakup pengaturan proyek. claude mcp list di folder yang sama masih melaporkan server seperti itu sebagai tertunda
headersHelper pada server dalam .mcp.json Tidak dijalankan sampai Anda menerima dialog kepercayaan, yang muncul lagi menamai tempat pembantu dideklarasikan. Claude Code menghubungkan server dengan headers statis saja sampai saat itu Tidak dijalankan. Claude Code menghubungkan server dengan headers statis saja dan mencetak baris headersHelper not run per server ke stderr

Untuk baris yang memerlukan folder yang tepat ini dipercaya, percayai dengan tangan: atur projects["<path>"].hasTrustDialogAccepted ke true dalam ~/.claude.json, di mana <path> adalah akar repositori, atau folder itu sendiri di luar repositori. Claude Code mencetak kunci yang tepat dalam baris log debug untuk hook subagent yang dilewati atau server MCP inline, dalam peringatan stderr untuk aturan izin yang dilewati, dan dalam baris headersHelper not run untuk pembantu yang dilewati.

Sebelum Anda menjalankan claude -p dalam repositori yang tidak Anda tulis, putuskan apa yang mungkin dijalankannya di mesin Anda:

  • Berikan --setting-sources user, atau atur settingSources SDK tanpa pengaturan proyek, jadi Claude Code tidak membaca file pengaturan proyek atau .mcp.json nya
  • Mulai dengan --bare jadi Claude Code tidak membaca hooks, skills, perintah khusus, subagents, plugins, atau server .mcp.json dari proyek. Blok env proyek dan pembantu seperti awsAuthRefresh dalam file pengaturannya masih berlaku, dan Claude Code membaca apiKeyHelper hanya dari --settings
  • Berikan --settings '{"disableAllHooks": true}' untuk mematikan hooks untuk jalankan itu. Menetapkannya dalam pengaturan pengguna Anda saja tidak cukup, karena pengaturan proyek repositori mengambil alih milik Anda dan dapat menetapkannya kembali ke false
  • Tambahkan entri disabledMcpjsonServers untuk menolak server .mcp.json berdasarkan nama dalam setiap jenis sesi

Contoh konfigurasi

Repositori ini mencakup konfigurasi pengaturan pemula untuk skenario penerapan umum. Gunakan ini sebagai titik awal dan sesuaikan dengan kebutuhan Anda.

Lihat juga

  • Semua pengaturan: setiap kunci pengaturan, termasuk kunci izin
  • Konfigurasi mode auto: beri tahu pengklasifikasi mode auto infrastruktur mana yang dipercaya organisasi Anda
  • Sandboxing: isolasi sistem file dan jaringan tingkat OS untuk perintah Bash
  • Authentication: atur akses pengguna ke Claude Code
  • Security: perlindungan keamanan dan praktik terbaik
  • Hooks: otomatisasi alur kerja dan perluas evaluasi izin