Sistem izin
Claude Code menggunakan sistem izin berjenjang untuk menyeimbangkan kekuatan dan keamanan:
Pada prompt izin Bash atau PowerShell, tekan
Ctrl+E untuk menampilkan penjelasan perintah: apa yang dilakukannya, mengapa Claude menjalankannya, dan apa yang bisa salah, diberi label Risiko rendah, Risiko sedang, atau Risiko tinggi. Claude Code mengirimkan perintah dan deskripsi Claude sendiri tentang panggilan tersebut ke model untuk menghasilkan penjelasan hanya ketika Anda menekan Ctrl+E, bukan pada setiap prompt. Menampilkan penjelasan tidak menjalankan perintah; tekan Ctrl+E lagi untuk menyembunyikannya.
Untuk mematikan pintasan, atur permissionExplainerEnabled ke false dalam ~/.claude.json.
Kelola izin
Anda dapat melihat dan mengelola izin alat Claude Code dengan/permissions. UI ini mencantumkan semua aturan izin dan file settings.json tempat mereka bersumber.
- 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.
Bash(aws *) memblokir setiap panggilan yang cocok, termasuk panggilan yang juga cocok dengan aturan allow yang lebih sempit seperti Bash(aws s3 ls), jadi aturan deny tidak dapat membawa pengecualian daftar izin. 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, jadi Claude tidak pernah melihatnya. Aturan yang dibatasi seperti Bash(rm *) membiarkan alat tersedia dan memblokir panggilan yang cocok ketika Claude mencoba menggunakannya.
Aturan izin ditegakkan oleh Claude Code, bukan oleh model. Instruksi dalam prompt Anda atau
CLAUDE.md membentuk apa yang Claude coba lakukan, tetapi mereka tidak mengubah apa yang Claude Code izinkan. Untuk memberikan atau mencabut akses, gunakan /permissions, aturan yang dijelaskan di sini, mode izin, atau hook PreToolUse.Mode izin
Claude Code mendukung beberapa mode izin yang mengontrol bagaimana alat disetujui. Lihat Permission modes untuk mengetahui kapan menggunakan masing-masing. AturdefaultMode dalam file pengaturan Anda:
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 formatTool atau Tool(specifier).
Cocokkan semua penggunaan alat
Untuk mencocokkan semua penggunaan alat, gunakan hanya nama alat tanpa tanda kurung:Bash(*) setara dengan Bash dan mencocokkan semua perintah Bash. Sebagai aturan penolakan, kedua bentuk menghapus alat dari konteks Claude.
Gunakan specifier untuk kontrol terperinci
Tambahkan specifier dalam tanda kurung untuk mencocokkan penggunaan alat tertentu:Cocokkan berdasarkan parameter input
Aturan penolakan dan tanya dapat mencocokkan parameter input tingkat atas pada alat apa pun denganTool(param:value). Aturan cocok ketika Claude memanggil alat dengan parameter tersebut diatur ke nilai yang tepat. Aturan izin untuk satu nilai parameter tidak akan menetapkan bahwa panggilan aman secara keseluruhan, jadi aturan izin terus menggunakan sintaks specifier masing-masing alat. Ini berfungsi untuk parameter skalar apa pun yang diterima alat:
Pencocokan parameter mengikuti aturan ini:
- Nama parameter harus berupa bidang langsung dari input alat, seperti
modelpada alat Agent. Bidang yang bersarang di dalam objek atau array tidak dapat dicocokkan - Setiap aturan menamai satu parameter. Untuk membatasi pada
modeldanisolation, tulis dua aturan,Agent(model:opus)danAgent(isolation:worktree), daripada menggabungkannya dalam satu aturan - Nilai mendukung
*sebagai wildcard yang mencocokkan urutan karakter apa pun, jadiAgent(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 membiarkanmodeltidak diatur - Nilai dibandingkan dengan input literal yang dikirim Claude, sebelum normalisasi apa pun.
Agent(model:opus)mencocokkan aliasopustetapi bukan ID model lengkap. Jalankan dengan--verboseuntuk melihat nama dan nilai parameter yang tepat dalam setiap panggilan alat - Spasi di sekitar titik dua diabaikan
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 *) 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
Aturan Bash mendukung pola glob dengan*. Wildcard dapat muncul di posisi mana pun dalam perintah. Konfigurasi ini memungkinkan perintah npm dan git commit sambil memblokir git push:
* penting: Bash(ls *) mencocokkan ls -la tetapi bukan lsof, sementara Bash(ls*) mencocokkan keduanya. Akhiran :* adalah cara setara untuk menulis wildcard trailing, jadi Bash(ls:*) mencocokkan perintah yang sama dengan Bash(ls *).
Dialog izin menulis bentuk yang dipisahkan spasi ketika Anda memilih “Ya, jangan tanya lagi” 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 penolakan dan tanya juga menerima pola glob dalam posisi nama alat. Pola harus cocok dengan nama alat lengkap:"*" cocok dengan setiap alat, dan "mcp__*" cocok dengan setiap alat MCP di semua server. Alat yang cocok dengan aturan penolakan nama telanjang dihapus dari konteks Claude, sama seperti nama alat telanjang. Konfigurasi ini menolak setiap alat MCP:
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.
Aturan 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.
Label 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 hanya cocok dengan nama kanonik, 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.
Aturan izin khusus alat
Bash
Aturan izin Bash mendukung pencocokan wildcard dengan*. Wildcard dapat muncul di posisi mana pun dalam perintah, termasuk di awal, tengah, atau akhir:
Bash(npm run build)mencocokkan perintah Bash yang tepatnpm run buildBash(npm run test *)mencocokkan perintah Bash yang dimulai dengannpm run testBash(npm *)mencocokkan perintah apa pun yang dimulai dengannpmBash(* install)mencocokkan perintah apa pun yang berakhir denganinstallBash(git * main)mencocokkan perintah sepertigit checkout maindangit log --oneline main
* mencocokkan urutan karakter apa pun termasuk spasi, jadi satu wildcard dapat mencakup beberapa argumen. Bash(git *) mencocokkan git log --oneline --all, dan Bash(git * main) mencocokkan git push origin main serta git merge main.
Ketika * muncul di akhir dengan spasi sebelumnya (seperti Bash(ls *)), ini memberlakukan batas kata, memerlukan awalan diikuti oleh spasi atau akhir string. Misalnya, Bash(ls *) mencocokkan ls -la tetapi bukan lsof. Sebaliknya, Bash(ls*) tanpa spasi mencocokkan ls -la dan lsof karena tidak ada batasan batas kata.
Perintah gabungan
Ketika 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, menyetujuigit 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.
Pembungkus proses
Sebelum mencocokkan aturan Bash, Claude Code menghilangkan serangkaian pembungkus proses tetap sehingga aturan sepertiBash(npm test *) juga mencocokkan timeout 30 npm test. Pembungkus yang dikenali adalah timeout, time, nice, nohup, dan stdbuf.
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.
Daftar 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.
Pembungkus exec seperti watch, setsid, ionice, dan flock selalu meminta dan tidak dapat disetujui otomatis oleh aturan awalan seperti Bash(watch *). 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.
Perintah hanya baca
Claude Code mengenali serangkaian perintah Bash bawaan sebagai hanya baca dan menjalankannya tanpa prompt izin di setiap mode. Ini termasukls, 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.
Pola glob yang tidak dikutip diizinkan untuk perintah yang setiap flagnya hanya baca, jadi ls *.ts dan wc -l src/*.py berjalan tanpa prompt. Perintah dengan flag yang mampu menulis atau exec, seperti find, sort, sed, dan git, masih meminta ketika glob yang tidak dikutip ada karena glob dapat berkembang menjadi flag seperti -delete.
cd ke jalur di dalam direktori kerja Anda atau direktori tambahan juga hanya baca. Perintah gabungan seperti cd packages/api && ls berjalan tanpa prompt ketika setiap bagian memenuhi syarat sendiri. Menggabungkan cd dengan git dalam satu perintah gabungan 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 ini.
Menggabungkan cd dengan pengalihan output dalam satu perintah gabungan juga 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 memicu prompt ini, karena /dev/null tidak bergantung pada direktori kerja.
PowerShell
Aturan izin PowerShell menggunakan bentuk yang sama dengan aturan Bash. Wildcard dengan* cocok di posisi mana pun, akhiran :* setara dengan trailing *, dan PowerShell telanjang atau PowerShell(*) cocok dengan setiap perintah. Konfigurasi ini memungkinkan perintah Get-ChildItem dan git commit sambil memblokir Remove-Item:
PowerShell(Get-ChildItem *) cocok dengan gci, ls, dan dir juga. Pencocokan tidak peka huruf besar-kecil.
Claude 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.
Read dan Edit
AturanEdit 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 yang terhubung bagikan dengan Claude.
Aturan deny Read juga memblokir alat Edit pada jalur yang sama, termasuk membuat file baru di sana. Write dan NotebookEdit tidak tercakup, jadi tambahkan aturan deny Edit untuk jalur yang tidak boleh diubah alat apa pun. Memerlukan Claude Code v2.1.208 atau lebih baru.
Aturan Read dan Edit keduanya mengikuti spesifikasi gitignore dengan empat jenis pola yang berbeda:
Pola
/path berlabuh di direktori yang terkait dengan file pengaturan yang mendefinisikannya, jadi aturan yang sama cocok dengan lokasi berbeda tergantung di mana Anda menempatkannya:
Aturan 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.
Di 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.
Contoh:
Edit(/docs/**): edit di<project>/docs/, bukan/docs/atau<project>/.claude/docs/Read(~/.zshrc): membaca.zshrcdirektori home AndaEdit(//tmp/scratch.txt): edit jalur absolut/tmp/scratch.txtRead(src/**): membaca dari<current-directory>/src/
Read(.env) dan Read(**/.env) setara:
Dalam pola gitignore,
* mencocokkan dalam satu segmen jalur dan dapat muncul di posisi mana pun dalam pola, sementara ** mencocokkan di seluruh direktori. Untuk memungkinkan semua akses file, gunakan hanya nama alat tanpa tanda kurung: Read, Edit, atau Write.[, ], dan *, jadi aturan yang dihasilkan hanya cocok dengan jalur literal yang Anda setujui. Aturan yang Anda tulis sendiri tidak dihindari.
Ketika 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.
- Aturan allow: berlaku hanya ketika jalur symlink dan targetnya cocok. Symlink di dalam direktori yang diizinkan yang menunjuk ke luar masih meminta Anda.
- Aturan deny: berlaku ketika jalur symlink atau targetnya cocok. Symlink yang menunjuk ke file yang ditolak itu sendiri ditolak.
Read(./project/**) diizinkan dan Read(~/.ssh/**) ditolak, symlink di ./project/key menunjuk ke ~/.ssh/id_rsa diblokir: target gagal aturan allow dan cocok dengan aturan deny.
WebFetch
Aturan WebFetch menggunakan awalandomain: dan cocok dengan 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.
WebFetch(domain:example.com)mencocokkan permintaan keexample.comWebFetch(domain:*.example.com)mencocokkan subdomain apa pun di kedalaman apa pun, sepertiapi.example.comataua.b.example.com, tetapi bukanexample.comitu sendiriWebFetch(domain:*)mencocokkan setiap domain dan setara dengan aturan WebFetch telanjang
*. 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.
MCP
Aturan MCP menggunakan nama server seperti yang dikonfigurasi di Claude Code, secara opsional diikuti oleh nama alat dari server itu.mcp__puppeteermencocokkan alat apa pun yang disediakan oleh serverpuppeteermcp__puppeteer__*menggunakan sintaks wildcard dan juga mencocokkan semua alat dari serverpuppeteermcp__puppeteer__puppeteer_navigatemencocokkan alatpuppeteer_navigateyang disediakan oleh serverpuppeteer
ask, 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 konektor muncul sebagai mcp__claude_ai_<server>__<tool>.
Agent (subagents)
Gunakan aturanAgent(AgentName) untuk mengontrol subagents mana yang dapat digunakan Claude:
Agent(Explore)mencocokkan subagent ExploreAgent(Plan)mencocokkan subagent PlanAgent(my-custom-agent)mencocokkan subagent kustom bernamamy-custom-agent
deny dalam pengaturan Anda atau gunakan flag CLI --disallowedTools untuk menonaktifkan agen tertentu. Untuk menonaktifkan agen Explore:
Cd
AturanCd mengontrol direktori mana yang dapat dipindahkan oleh perintah /cd ke sesi. Cd bukan alat yang dapat dipanggil model: Claude tidak dapat memanggilnya, dan aturan hanya berlaku ketika Anda menjalankan /cd sendiri.
Aturan deny Cd telanjang menonaktifkan /cd sepenuhnya. Aturan deny Cd(<path-pattern>) memblokir target yang cocok. 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.
Menambahkan aturan allow Cd apa pun beralih /cd ke mode allowlist: direktori target yang diselesaikan harus cocok dengan 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.
Pola jalur berbagi jangkar //, ~/, dan / dari aturan Read dan 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.
Perluas izin dengan hook
Hook Claude Code menyediakan cara untuk mendaftarkan perintah shell kustom guna melakukan evaluasi izin saat runtime. Ketika Claude Code membuat panggilan alat, hook PreToolUse berjalan sebelum prompt izin. Output hook dapat menolak panggilan alat, memaksa prompt, atau melewati prompt untuk membiarkan panggilan berlanjut. Keputusan hook 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.
Alat Connector yang organisasi Anda atur ke ask dan alat MCP yang ditandai requiresUserInteraction juga masih meminta ketika hook mengembalikan "allow".
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 diluncurkan. Anda dapat memperluas akses ini:- Saat startup: gunakan argumen CLI
--add-dir <path> - Selama sesi: gunakan perintah
/add-dir - Konfigurasi persisten: tambahkan ke
additionalDirectoriesdalam file pengaturan
~/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.
Untuk mengubah direktori kerja utama sesi alih-alih menambahkan direktori lain, gunakan /cd. Perintah /cd memerlukan Claude Code v2.1.169 atau lebih baru. Tidak seperti /add-dir, perintah ini memindahkan sesi: CLAUDE.md direktori baru dimuat dan --resume menemukan sesi dari sana.
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. Direktori yang tercantum dalam permissions.additionalDirectories dalam file pengaturan memberikan akses file saja dan tidak memuat konfigurasi apa pun di bawah ini.
Jenis konfigurasi berikut dimuat dari direktori --add-dir:
Perintah dan output styles ditemukan dari direktori kerja saat ini dan induknya, direktori pengguna Anda di
~/.claude/, dan pengaturan terkelola. Hooks dan kunci 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. 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.jsonuntuk 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 semua alat, termasuk Bash, Read, Edit, WebFetch, dan MCP.
- Sandboxing menyediakan penegakan tingkat OS yang membatasi akses sistem file dan jaringan alat Bash. Ini hanya berlaku untuk perintah Bash dan proses anak mereka.
- Aturan deny izin memblokir Claude dari bahkan mencoba mengakses sumber daya terbatas
- Pembatasan sandbox mencegah perintah Bash menjangkau sumber daya di luar batas yang ditentukan, bahkan jika injeksi prompt melewati pengambilan keputusan Claude
- Pembatasan sistem file di sandbox menggabungkan pengaturan
sandbox.filesystemdengan aturan deny Read dan Edit; keduanya digabungkan ke dalam batas sandbox akhir - Pembatasan jaringan menggabungkan aturan izin WebFetch dengan daftar
allowedDomainsdandeniedDomainssandbox
autoAllowBashIfSandboxed: true, yang merupakan default, 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. Aturan ask yang dibatasi konten seperti Bash(git push *) masih memaksa prompt, aturan deny eksplisit masih berlaku, dan perintah rm atau rmdir yang menargetkan /, direktori home Anda, atau jalur sistem kritis lainnya masih memicu prompt. 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 atas konfigurasi Claude Code, administrator dapat menerapkan pengaturan terkelola yang tidak dapat ditimpa oleh pengaturan pengguna atau proyek. Pengaturan kebijakan ini mengikuti format yang sama dengan file pengaturan reguler dan dapat dikirimkan melalui kebijakan MDM/tingkat OS, file pengaturan terkelola, pengaturan yang dikelola server, atau gateway aplikasi Claude yang di-host sendiri. Lihat file pengaturan untuk mekanisme pengiriman dan lokasi file.Pengaturan khusus terkelola
Pengaturan berikut hanya dibaca dari pengaturan terkelola. Menempatkan mereka dalam file pengaturan pengguna atau proyek tidak memiliki efek.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.
Pada paket Team dan Enterprise, Owner mengaktifkan atau menonaktifkan Remote Control dan sesi web di seluruh organisasi dalam pengaturan admin Claude Code. Remote Control dapat secara tambahan dinonaktifkan per perangkat dengan pengaturan
disableRemoteControl. Sesi web tidak memiliki kunci pengaturan terkelola per perangkat.Prioritas pengaturan
Aturan izin mengikuti prioritas pengaturan yang sama dengan semua pengaturan Claude Code lainnya:- Pengaturan terkelola: tidak dapat ditimpa oleh tingkat lain apa pun, termasuk argumen baris perintah
- Argumen baris perintah: penggantian sesi sementara
- Pengaturan proyek lokal (
.claude/settings.local.json) - Pengaturan proyek bersama (
.claude/settings.json) - Pengaturan pengguna (
~/.claude/settings.json)
--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.
Host penyematan dapat menyediakan kebijakan terkelola tambahan melalui opsi SDK managedSettings ketika parentSettingsBehavior diatur ke "merge"; nilai penyemat dapat memperketat kebijakan tetapi tidak dapat melonggarkannya.
Aturan izin proyek dan kepercayaan ruang kerja
Aturanpermissions.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 ruang kerja tersebut. Sampai saat itu, Claude Code membaca aturan tetapi tidak menerapkannya. Dialog kepercayaan mencantumkan aturan izin dan direktori tambahan yang akan diberikan folder sehingga Anda dapat meninjau sebelum menerima. Aturan deny dan ask tidak terpengaruh, karena hanya membatasi.
Claude Code menyimpan kepercayaan per ruang kerja, dikunci pada akar repositori git atau, di luar repositori, direktori tempat Anda memulai Claude Code. Ketika Anda memulai di direktori home Anda, kepercayaan disimpan hanya untuk sesi saat ini dan tidak ditulis ke disk; lihat catatan safeguard tambahan. Mempercayai direktori induk tidak menerapkan aturan izin proyek bersarang.
.claude/settings.local.json adalah file Anda sendiri, jadi pemeriksaan kepercayaan ruang kerja biasanya tidak berlaku untuk itu. Ketika repositori dapat menyediakan file, seperti ketika file tersebut di-commit ke git atau .claude adalah symlink, aturan izin dan direktori tambahannya melalui pemeriksaan kepercayaan seperti pengaturan proyek.
Claude Code menjalankan git untuk memeriksa apakah repositori menyediakan file, dan menjalankan pemeriksaan itu hanya dalam folder yang dicakup oleh dialog kepercayaan yang diterima, untuk folder itu atau untuk salah satu direktori induknya. Dalam sesi interaktif dalam folder yang belum Anda percayai, aturan izin dan direktori tambahan dalam .claude/settings.local.json melalui pemeriksaan kepercayaan seperti pengaturan proyek sampai Anda menerima dialog, kecuali sesi berjalan di home konfigurasi Anda sendiri seperti yang dijelaskan di bawah. Dari dua pengecualian di bawah, hanya pengecualian home konfigurasi yang berlaku sebelum dialog, karena tidak perlu menjalankan git. Menentukan bahwa direktori tidak berada di dalam repositori git menggunakan pemeriksaan git yang sama, jadi pengecualian tidak-di-dalam-repositori berlaku setelah dialog kepercayaan yang mencakup folder diterima. Sebelum v2.1.207, .claude/settings.local.json yang tidak dilacak menerapkan aturan izinnya dalam folder itu sebelum Anda menerima dialog.
Aturan izin dan direktori tambahan dalam .claude/settings.local.json juga berlaku tanpa kepercayaan ruang kerja dalam dua kasus:
- Direktori tempat Anda memulai Claude Code tidak berada di dalam repositori git.
- Sesi berjalan di home konfigurasi Anda sendiri: direktori home Anda atau direktori apa pun yang subdirektori
.claudeAnda telah atur sebagaiCLAUDE_CONFIG_DIR.
.claude/settings.local.json yang di-commit repositori masih memerlukan kepercayaan ruang kerja. Versi 2.1.196 hingga 2.1.199 memperlakukan file sebagai disediakan repositori di ruang kerja tersebut, mengabaikan aturan izinnya, dan mencetak peringatan this workspace has not been trusted ke stderr. Dua pengecualian di atas cocok dengan v2.1.195 dan sebelumnya dan dipulihkan dalam v2.1.200.
Juga mulai dari v2.1.200, ruang kerja yang aturan izin atau direktori tambahannya masih tidak diterapkan, tetapi yang tidak pernah menampilkan dialog kepercayaan karena direktori induk sudah dipercaya, menampilkan dialog saat berikutnya Anda memulai Claude Code di sana secara interaktif. Dialog menawarkan dua pilihan:
- Ya, saya mempercayai folder ini: menyimpan kepercayaan untuk ruang kerja tersebut dan menerapkan aturan dalam sesi yang sama.
- Tidak, lanjutkan tanpa izin ini: terus bekerja dengan aturan tersebut diabaikan. Dialog muncul lagi di sesi berikutnya.
-p, tidak ada dialog yang muncul dan aturan tetap diabaikan.
Contoh konfigurasi
Repositori ini mencakup konfigurasi pengaturan pemula untuk skenario penerapan umum. Gunakan ini sebagai titik awal dan sesuaikan dengan kebutuhan Anda.Lihat juga
- Settings: referensi konfigurasi lengkap termasuk tabel pengaturan izin
- Configure auto mode: 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