Konfigurasi izin
Kontrol bagaimana agen Anda menggunakan alat dengan mode izin, hooks, dan aturan allow/deny deklaratif.
Claude Agent SDK menyediakan kontrol izin untuk mengelola bagaimana Claude menggunakan alat. Gunakan mode izin dan aturan untuk menentukan apa yang diizinkan secara otomatis, dan callback canUseTool untuk menangani segalanya di runtime.
Cara izin dievaluasi
[!NOTE]
Jika Anda memuat plugin yang berisi mod, lihat di mana keputusan mod berada di antara aturan dan hook.
Saat Claude meminta sebuah tool, Claude Code memeriksa panggilan tersebut pada langkah-langkah berikut. Setiap langkah dapat memutuskan panggilan tersebut, mengirimkannya ke callback canUseTool Anda, atau meneruskannya:
1. Hooks
Jalankan hook. Sebuah hook dapat langsung menolak panggilan tersebut atau meneruskannya. Hook yang mengembalikan allow tidak melewati langkah aturan deny dan aturan ask, yang tetap dievaluasi apa pun hasil hook-nya.
Hook PreToolUse yang mengembalikan allow juga tidak dapat menyetujui perintah rm atau rmdir yang targetnya dikenali oleh Claude Code sebagai jalur kritis, seperti rm -rf ~. Untuk apa yang dilakukan allow tersebut dalam plan mode, lihat Persetujuan hook dalam plan mode.
2. Deny rules
Jika aturan deny dari disallowed_tools atau dari file pengaturan yang dimuat SDK cocok, panggilan tersebut ditolak dan canUseTool tidak dipanggil. Panggilan tersebut ditolak dengan cara ini bahkan dalam mode bypassPermissions dan ketika hook mengembalikan allow.
Di TypeScript SDK, jika Anda menetapkan permission_policy dari tool kustom ke always_deny, panggilan ke tool tersebut ditolak pada langkah ini.
3. Ask rules
Periksa aturan ask dari settings.json. Jika aturan ask cocok, panggilan tersebut diteruskan ke callback canUseTool Anda untuk konfirmasi, bahkan dalam mode bypassPermissions.
Tool yang memerlukan interaksi pengguna berperilaku sama. AskUserQuestion dan tool MCP yang server-nya menetapkan _meta["anthropic/requiresUserInteraction"] diteruskan ke callback, bahkan ketika aturan allow cocok. Dalam mode dontAsk, kedua kasus tersebut justru ditolak, karena mode tersebut mengubah setiap permintaan izin menjadi penolakan. Anotasi MCP memerlukan Claude Code v2.1.199 atau yang lebih baru.
Tool konektor claude.ai yang telah ditetapkan organisasi Anda ke ask juga keluar dari alur pada langkah ini. Setiap panggilan diteruskan ke callback, bahkan dalam mode bypassPermissions dan bahkan ketika aturan allow cocok. Callback menerima alasan Your organization requires approval for this tool. Dalam mode dontAsk, panggilan tersebut justru ditolak, karena mode tersebut tidak pernah menampilkan permintaan izin.
Di TypeScript SDK, jika Anda menetapkan permission_policy tool kustom ke always_ask, tidak ada aturan allow yang menyetujui panggilannya, bahkan entri allowedTools sekalipun. Dalam mode dontAsk, Claude Code menolak panggilan tersebut, dan dalam mode auto, plan, atau bypassPermissions, Claude Code dapat menyetujuinya sebelum callback Anda berjalan.
4. Permission mode
Terapkan mode izin yang aktif:
- Dalam mode
bypassPermissions, Claude Code menyetujui setiap panggilan yang mencapai langkah ini kecuali panggilan tersebut termasuk tindakan yang tidak disetujui otomatis oleh mode mana pun. Untuk mengetahui tindakan mana yang diteruskan ke callbackcanUseToolAnda, lihat Mode bypass permissions. - Dalam mode
acceptEdits, Claude Code menyetujui operasi file yang tercantum di bawah Mode accept edits. - Dalam mode
plan, sebagian panggilan mencapai callback Anda, dan ketika auto mode tersedia, panggilan lainnya justru diteruskan ke pengklasifikasinya. Untuk informasi selengkapnya, lihat Plan mode. - Dalam mode
defaultdandontAsk, panggilan diteruskan ke aturan allow. - Untuk mode
auto, lihat Auto mode.
5. Allow rules
Periksa aturan allow (dari allowed_tools dan settings.json). Jika aturan cocok, tool tersebut disetujui. Panggilan yang disetujui oleh tool itu sendiri juga diselesaikan pada langkah ini, tanpa memerlukan aturan: misalnya pembacaan file di dalam direktori kerja Anda atau perintah Bash read-only.
Penghapusan jalur kritis yang dikenali tidak disetujui oleh aturan allow, dan perintah yang ditandai Dangerous rm operation not ruled out tidak disetujui oleh aturan Bash atau Bash(*). Apakah perintah tersebut kemudian mencapai callback Anda bergantung pada mode izin: dalam sesi Agent SDK dalam mode auto, misalnya, Claude Code menolaknya secara default tanpa memanggil callback. Tabel mode jalur kritis mencantumkan apa yang dilakukan setiap mode terhadapnya.
Aturan allow tidak menyetujui pembacaan dari jalur jaringan.
6. canUseTool callback
Jika tidak ada langkah sebelumnya yang menyelesaikan permintaan tersebut, panggil callback canUseTool Anda untuk mendapatkan keputusan. Dalam mode dontAsk, langkah ini dilewati dan tool ditolak, meskipun mod yang Anda instal masih dapat menyetujui beberapa panggilan semacam itu.
Di TypeScript SDK, jika Anda menetapkan permissionPrompts: 'none', callback Anda tidak dipanggil pada langkah ini. Hook PermissionRequest masih mendapat kesempatan untuk memutuskan, dan jika hook tersebut tidak memutuskan, Claude Code menolak panggilan tersebut. Opsi ini memerlukan Claude Code v2.1.259 atau yang lebih baru.
Jika Anda meneruskan callback canUseTool dalam konfigurasi di mana TypeScript SDK memperkirakan urutan evaluasi akan menyetujui panggilan secara otomatis sebelum callback dikonsultasikan, SDK mengeluarkan peringatan proses Node.js satu kali saat query dibuat. Kode peringatan tersebut adalah CLAUDE_SDK_CAN_USE_TOOL_SHADOWED. Dua konfigurasi memicunya:
permissionMode: 'bypassPermissions': teks peringatan diawali dengancanUseTool will not be invoked: permissionMode 'bypassPermissions'. Panggilan tool disetujui sebelumcanUseTooldikonsultasikan, sehingga callback Anda hanya berjalan untuk beberapa panggilan, seperti panggilan yang tercantum di bawah Mode bypass permissions. Untuk memeriksa panggilan yang disetujui juga, letakkan pemeriksaan callback Anda di hookPreToolUse- Entri
allowedToolsyang hanya berupa nama tool, seperti"Read": peringatan mencantumkan setiap entri semacam itu setelahcanUseTool will not be invoked for:. Panggilan ke tool yang tercantum disetujui sebelumcanUseTooldikonsultasikan, kecuali panggilan yang tidak pernah disetujui oleh aturan allow. Agar callback Anda berjalan untuk panggilan tool yang tercantum yang memerlukan persetujuan, hapus entri tool tersebut dariallowedTools
Entri dengan penentu seperti Bash(ls *) dan mode acceptEdits tidak memicunya, dan aturan allow yang berasal dari file pengaturan tidak terlihat oleh pemeriksaan ini.
Peringatan ini tidak memblokir panggilan apa pun atau mengubah opsi apa pun. Jika callback Anda sudah menerima setiap panggilan yang ingin Anda periksa, biarkan konfigurasi Anda apa adanya. Untuk menulis peringatan ke log, dengarkan dengan process.on('warning', ...) dan cocokkan kode CLAUDE_SDK_CAN_USE_TOOL_SHADOWED.
Halaman ini berfokus pada aturan allow dan deny serta mode izin. Untuk langkah-langkah lainnya:
- Hook: jalankan kode kustom untuk mengizinkan, menolak, atau memodifikasi permintaan tool. Lihat Mengontrol eksekusi dengan hook.
- Callback canUseTool: minta persetujuan pengguna saat runtime, ketika tidak ada langkah sebelumnya yang menyelesaikan panggilan tersebut. Lihat Menangani persetujuan dan input pengguna.
Aturan allow dan deny
Saat Anda mengatur allowedTools dan disallowedTools (TypeScript) atau allowed_tools dan disallowed_tools (Python), Claude Code menambahkan entri-entrinya ke daftar aturan allow dan deny dalam alur evaluasi izin. Tool lain yang tidak tercantum dalam allowed_tools tetap tersedia bagi Claude, dan panggilan ke tool tersebut yang memerlukan persetujuan akan diteruskan ke mode izin.
| Opsi | Efek |
|---|---|
allowed_tools=["Read", "Grep"] |
Read dan Grep disetujui secara otomatis, kecuali pembacaan dari path jaringan. Tool lain yang tidak tercantum di sini tetap ada, dan panggilan ke tool tersebut yang memerlukan persetujuan diteruskan ke mode izin dan canUseTool. |
disallowed_tools=["Bash"] |
Definisi tool Bash dihapus dari permintaan. |
disallowed_tools=["Bash(rm *)"] |
Bash tetap tersedia. Panggilan yang cocok dengan rm * sebagaimana tertulis ditolak di setiap mode izin, termasuk bypassPermissions. Panggilan Bash lainnya, termasuk /bin/rm, diteruskan ke mode izin. |
disallowed_tools=["*"] |
Glob nama tool didukung dalam aturan deny: "*" cocok dengan setiap tool dan "mcp__*" cocok dengan setiap tool MCP di semua server. |
Aturan allow menerima glob nama tool hanya setelah prefiks literal mcp__<server>__. Segmen server harus bebas glob agar aturan tersebut menyebut server spesifik yang Anda konfigurasikan: mcp__puppeteer__* cocok dengan setiap tool dari server puppeteer, dan mcp__github__get_* cocok dengan tool get_ miliknya. Entri tanpa jangkar seperti allowed_tools=["*"] atau allowed_tools=["mcp__*"] diabaikan dan tidak menyetujui apa pun secara otomatis.
[!WARNING]
Tool yang disetujui secara otomatis tidak pernah mencapai
canUseTool. Panggilan tool yang disetujui pada langkah sebelumnya mana pun, olehacceptEditsataubypassPermissions, atau oleh aturan allow, akan melewati callbackcanUseToolAnda, sehingga pemeriksaan izin yang Anda tempatkan di sana dilewati secara diam-diam untuk tool tersebut.Jika panggilan ke tool dalam
allowed_toolsmasih mencapai callbackcanUseToolAnda, atau ditolak dalam modedontAsk, periksa apakah panggilan tersebut merupakan pembacaan dari path jaringan atau termasuk di antara panggilan berikut. Tidak ada aturan allow yang menyetujui panggilan-panggilan ini. Dalam modedontAsk, yang tidak pernah menampilkan permintaan izin, Claude Code menolaknya tanpa memanggilcanUseTool, dan dalam mode izin lainnya Anda menanganinya sebagaimana disebutkan di setiap item:
AskUserQuestion, tool MCP yang ditandai_meta["anthropic/requiresUserInteraction"], dan tool konektor yang diatur organisasi Anda keask: jawab di dalam callback. Menangani pertanyaan klarifikasi menunjukkan cara menjawabAskUserQuestion, dan panggilan konektor tiba dengan alasanYour organization requires approval for this toolTool kustom yang ditandai aplikasi Anda dengan
always_ask: putuskan panggilan tersebut di dalam callback. Untuk menghentikan kedatangan panggilan ini, ubah kebijakan di tengah sesi. Dalam modeauto,plan, danbypassPermissions, panggilan tersebut justru dapat disetujui sebelum callback, dalam kasus-kasus yang tercantum di Mode izin yang dapat menyetujui panggilanalways_askPenghapusan jalur kritis
rmdanrmdiryang dikenali: dalam modedefault,acceptEdits, danbypassPermissions, izinkan atau tolak penghapusan tersebut di dalam callback, di manadecisionReasondiawali denganDangerous rm. Untuk modeautodanplan, lihat Penghapusan jalur kritis di setiap mode izinNama polos: entri seperti
Readataumcp__github__get_issuemenyetujui secara otomatis setiap panggilan ke tool tersebut, kecuali tindakan yang tidak disetujui otomatis oleh mode mana pun dan pembacaan dari path jaringan.Aturan berlingkup: entri seperti
Bash(npm test *)menyetujui secara otomatis panggilan yang cocok dengannya, dan panggilanBashlain yang memerlukan persetujuan diteruskan ke mode izin.Untuk memeriksa panggilan yang disetujui oleh aturan allow,
acceptEdits, ataubypassPermissions, gunakan hookPreToolUse, yang juga berjalan untuk panggilan-panggilan tersebut. Penolakan oleh hook tetap berlaku bahkan dalam modebypassPermissions.
Untuk agent yang dikunci ketat, pasangkan allowedTools dengan permissionMode: "dontAsk":
const options = {
allowedTools: ["Read", "Glob", "Grep"],
permissionMode: "dontAsk"
};
Panggilan Read, Glob, dan Grep yang tercantum disetujui, kecuali tindakan yang tidak disetujui otomatis oleh mode mana pun dan pembacaan dari path jaringan. Setiap panggilan lain yang akan memunculkan permintaan izin justru ditolak, meskipun mod yang Anda pasang masih dapat menyetujui sebagian panggilan tersebut.
Panggilan yang tidak memerlukan persetujuan dalam mode default tetap berjalan, baik Anda mencantumkannya maupun tidak. Ini mencakup perintah Bash read-only, tool seperti Agent yang tidak meminta persetujuan sebelum berjalan, dan pembacaan file di dalam direktori kerja Anda. Untuk menyembunyikan tool bawaan dari Claude sepenuhnya alih-alih menolak panggilannya, tambahkan nama polosnya ke disallowedTools.
[!WARNING]
allowed_toolstidak membatasibypassPermissions.allowed_toolsmenyetujui terlebih dahulu tool yang Anda cantumkan. Dalam modebypassPermissions, Claude Code menyetujui panggilan ke tool yang tidak tercantum, kecuali panggilan tersebut termasuk tindakan yang tidak disetujui otomatis oleh mode mana pun.Jika Anda mengatur
allowed_tools=["Read"]denganpermission_mode="bypassPermissions", Claude Code tetap menyetujui panggilan ke tool sepertiBash,Write, danEdit. Jika Anda memerlukanbypassPermissionstetapi ingin tool tertentu diblokir, gunakandisallowed_tools. Untuk panggilan yang masih mencapai callbackcanUseToolAnda dalam mode ini, lihat Mode bypass permissions.
Anda juga dapat mengonfigurasi aturan allow, deny, dan ask secara deklaratif di .claude/settings.json. Aturan-aturan ini dibaca saat sumber pengaturan project diaktifkan, yang memang aktif untuk opsi query() default. Jika Anda mengatur setting_sources (TypeScript: settingSources) secara eksplisit, sertakan "project" agar aturan tersebut berlaku. Lihat Pengaturan izin untuk sintaks aturan.
Untuk mengetahui kapan aturan allow di .claude/settings.json sebuah proyek berlaku, lihat Aturan allow proyek dan kepercayaan workspace.
Pola path dalam aturan
Aturan berlingkup untuk Read dan Edit menerima pola path. Aturan Edit(path) mengatur semua tool bawaan yang menulis file, termasuk Write dan NotebookEdit, jadi tulis aturan path untuk salah satu dari tool tersebut sebagai Edit(path). Jika Anda menulis aturan path sebagai Write(path) atau NotebookEdit(path), aturan tersebut tidak cocok dengan panggilan apa pun dan tidak berpengaruh.
Dalam allowed_tools dan disallowed_tools, awali pola path dengan // untuk path absolut, atau dengan satu / untuk path di dalam direktori kerja sesi:
//path: dengan aturan denyEdit(//secrets/**), Claude Code memblokir penulisan di bawah/secretspada disk dari tool file Claude dan dari perintah Bash sepertiteedan pengalihan> file. Skrip yang dijalankan Claude dan yang membuka file sendiri masih dapat menulis di bawah/secrets. Untuk penegakan oleh sistem operasi, lihat Mengonfigurasi tool Bash dalam sandbox./path:Edit(/secrets/**)cocok dengan direktorisecretsdi dalam direktori kerja.
Untuk cara lain mengawali pola path, lihat Aturan Read dan Edit.
Mode izin
Mode izin memberikan kontrol global atas cara Claude menggunakan tool. Anda dapat mengatur mode izin saat memanggil query() atau mengubahnya secara dinamis selama sesi streaming.
Dengan Claude Code v2.1.302 atau yang lebih baru, aplikasi Anda dimulai dalam mode default kecuali Anda mengatur mode izin atau aplikasi tersebut mendapatkannya dari permissions.defaultMode dalam file pengaturannya. Dalam mode default, Claude Code menolak setiap panggilan tool yang memerlukan persetujuan kecuali Anda menyetujuinya melalui aturan allow, hook, callback canUseTool, atau tool permintaan izin. Jika panggilan tool ditolak, lihat Panggilan tool ditolak dalam claude -p dan eksekusi Agent SDK.
Mode yang tersedia
SDK mendukung mode izin berikut:
| Mode | Deskripsi | Perilaku tool |
|---|---|---|
default |
Perilaku izin standar | Tidak ada persetujuan otomatis berbasis mode; panggilan yang memerlukan persetujuan dan tidak cocok dengan aturan allow apa pun akan memicu callback canUseTool Anda |
dontAsk |
Tolak alih-alih meminta izin | Setiap panggilan yang seharusnya memunculkan permintaan izin akan ditolak tanpa memanggil canUseTool, meskipun mod yang Anda instal masih dapat menyetujui beberapa panggilan tersebut. Panggilan yang disetujui oleh allowed_tools atau aturan allow settings.json tetap berjalan, begitu pula panggilan yang tidak memerlukan persetujuan dalam mode default. Beberapa panggilan, seperti pembacaan dari path jaringan, ditolak bahkan ketika allowed_tools atau aturan allow cocok dengannya. Untuk daftarnya, lihat Mode don't ask |
acceptEdits |
Terima edit file secara otomatis | Edit file dan operasi sistem file (mkdir, rm, mv, dll.) di dalam direktori kerja Anda disetujui secara otomatis |
bypassPermissions |
Lewati pemeriksaan izin | Tool berjalan tanpa permintaan izin, kecuali untuk tindakan yang tidak disetujui otomatis oleh mode mana pun dan, di luar sesi cloud, tool kustom yang ditandai always_ask oleh aplikasi Anda. Gunakan dengan hati-hati |
plan |
Mode perencanaan | Claude mengeksplorasi dan merencanakan. Edit yang dibuat dengan tool file Claude dikirim ke callback canUseTool Anda bahkan ketika aturan allow cocok dengannya |
auto |
Persetujuan yang diklasifikasikan model | Pengklasifikasi model meninjau tindakan seperti perintah shell dan permintaan jaringan, mengizinkan atau memblokir setiap tindakan yang ditinjaunya. Lihat Auto mode untuk ketersediaan dan urutan keputusan |
[!WARNING]
Pewarisan subagent: Jika sesi utama Anda berada dalam plan mode, subagent yang
AgentDefinition-nya mengaturpermissionMode: "acceptEdits"tetap berjalan dalam plan mode. PanggilanEditdanWritedari subagent tersebut pada file sumber Anda tetap dikirim ke callbackcanUseToolAnda. Plan mode juga berlaku untuk subagent yang Anda definisikan, sehingga menyerahkan pekerjaan ke salah satunya tidak menghindari peninjauan rencana terlebih dahulu.Subagent mewarisi
plan,acceptEdits,auto, ataubypassPermissionsdari sesi utama, dan di bawah sesi utama bermodedefaultataudontAsk, subagent berjalan dalam mode yang Anda atur. Meskipun demikian, Claude Code tidak pernah menerapkan nilai"bypassPermissions", dan menerapkan nilai"auto"hanya ketika auto mode tersedia untuk subagent tersebut. PengecualianbypassPermissionsmemerlukan Claude Code v2.1.267 atau yang lebih baru.Subagent mungkin memiliki system prompt yang berbeda dan perilaku yang kurang dibatasi dibandingkan agent utama Anda, sehingga mewarisi
bypassPermissionsmemberi mereka akses sistem penuh dan otonom. Tindakan yang tidak disetujui otomatis oleh mode mana pun tetap berlaku.
Mengatur mode izin
Anda dapat mengatur mode izin sekali saat memulai query, atau mengubahnya secara dinamis saat sesi aktif.
[tab] Saat query
Berikan
permission_mode(Python) ataupermissionMode(TypeScript) saat membuat query.import asyncio from claude_agent_sdk import query, ClaudeAgentOptions async def main(): async for message in query( prompt="Help me refactor this code", options=ClaudeAgentOptions( permission_mode="default", # Set the mode here ), ): if hasattr(message, "result"): print(message.result) asyncio.run(main())import { query } from "@anthropic-ai/claude-agent-sdk"; async function main() { for await (const message of query({ prompt: "Help me refactor this code", options: { permissionMode: "default" // Set the mode here } })) { if ("result" in message) { console.log(message.result); } } } main();
[tab] Selama streaming
Panggil
set_permission_mode()(Python) atausetPermissionMode()(TypeScript) untuk mengubah mode di tengah sesi. Mode baru langsung berlaku untuk semua permintaan tool berikutnya. Ini memungkinkan Anda memulai dengan ketat dan melonggarkan izin seiring tumbuhnya kepercayaan, misalnya beralih keacceptEditssetelah meninjau pendekatan awal Claude.import asyncio from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions async def main(): async with ClaudeSDKClient( options=ClaudeAgentOptions( permission_mode="default", # Start in default mode ) ) as client: await client.query("Help me refactor this code") # Change mode dynamically mid-session await client.set_permission_mode("acceptEdits") # Process messages with the new permission mode async for message in client.receive_response(): if hasattr(message, "result"): print(message.result) asyncio.run(main())import { query } from "@anthropic-ai/claude-agent-sdk"; async function main() { const q = query({ prompt: "Help me refactor this code", options: { permissionMode: "default" // Start in default mode } }); // Change mode dynamically mid-session await q.setPermissionMode("acceptEdits"); // Process messages with the new permission mode for await (const message of q) { if ("result" in message) { console.log(message.result); } } } main();
Detail mode
Mode accept edits (acceptEdits)
Menyetujui operasi file secara otomatis sehingga Claude dapat mengedit kode tanpa meminta izin. Tool lain (seperti perintah Bash yang bukan operasi sistem file) tetap memerlukan izin normal.
Operasi yang disetujui otomatis:
- Edit file dengan tool Edit, Write, dan NotebookEdit
- Perintah sistem file:
mkdir,touch,rm,rmdir,mv,cp,sed
Keduanya berlaku untuk path di dalam direktori kerja atau direktori yang Anda tambahkan. Di Python, tambahkan direktori dengan add_dirs, dan di TypeScript dengan additionalDirectories. Dalam mode acceptEdits, Claude Code tidak menyetujui permintaan secara otomatis ketika Claude:
- Bekerja pada path di luar cakupan tersebut
- Menulis ke path yang dilindungi
- Menghapus path yang dikenali Claude Code sebagai path kritis dengan
rmataurmdir - Menjalankan
touchdengan, misalnya, sebuah opsi, glob, atau awalantimeout 5atauLANG=C
Gunakan ketika: Anda memercayai edit Claude dan menginginkan iterasi yang lebih cepat, seperti saat membuat prototipe atau saat bekerja di direktori yang terisolasi.
Mode don't ask (dontAsk)
Mengubah setiap permintaan izin menjadi penolakan, tanpa memanggil canUseTool, meskipun mod yang Anda instal masih dapat menyetujui beberapa panggilan tersebut. Tool yang telah disetujui sebelumnya oleh allowed_tools, aturan allow settings.json, atau hook berjalan seperti biasa. Panggilan yang tidak memerlukan persetujuan dalam mode default juga berjalan seperti biasa, seperti pembacaan file di dalam direktori kerja Anda dan panggilan ke Agent.
Panggilan berikut ditolak bahkan ketika aturan allow cocok:
- Tool konektor yang diatur ke
askoleh organisasi Anda - Tool yang memerlukan interaksi pengguna, seperti
AskUserQuestiondan tool MCP yang server-nya mengatur_meta["anthropic/requiresUserInteraction"] - Tool kustom yang
permission_policy-nya diatur oleh aplikasi Anda kealways_ask - Pembacaan dari path jaringan
- Penghapusan path kritis yang dikenali
Jika hook PreToolUse Anda mengembalikan allow untuk penghapusan path kritis yang dikenali, pembacaan dari path jaringan, atau panggilan ke tool yang ditandai always_ask, panggilan tersebut tetap ditolak. Pemeriksaan yang mengenali penghapusan ini dapat melewatkan beberapa perintah.
Gunakan ketika: Anda menjalankan agent headless dan menginginkan penolakan tegas untuk setiap panggilan yang seharusnya memunculkan permintaan izin.
Mode bypass permissions (bypassPermissions)
Menyetujui penggunaan tool secara otomatis tanpa meminta izin, kecuali tindakan yang tidak disetujui otomatis oleh mode mana pun. Hook tetap dieksekusi dan dapat memblokir operasi jika diperlukan. Di Linux dan macOS, Claude Code menolak untuk dimulai dalam mode ini sebagai root atau di bawah sudo di luar sandbox yang dikenali, dan query gagal sebelum giliran pertama.
[!WARNING]
Gunakan dengan sangat hati-hati. Claude memiliki akses sistem penuh dalam mode ini. Hanya gunakan di lingkungan terkontrol di mana Anda memercayai semua kemungkinan operasi.
allowed_toolstidak membatasi mode ini, dan panggilan ke tool yang tidak Anda cantumkan juga disetujui. Kontrol berikut tetap berlaku:
- Aturan deny, aturan
askeksplisit, dan hook dievaluasi sebelum pemeriksaan mode dan masih dapat memblokir tool.- Tool konektor yang diatur ke
askoleh organisasi Anda, tool yang memerlukan interaksi pengguna, penghapusan path kritis yang dikenali, dan perintah Bash yang ditandaiDangerous rm operation not ruled outtetap diteruskan ke callbackcanUseToolAnda. Pemeriksaan yang mengenali penghapusan path kritis dapat melewatkan beberapa perintah, dan Anda dapat mematikan permintaan izin penghapusan path kritis. Di luar sesi cloud, panggilan ke tool kustom yang ditandaialways_askoleh aplikasi Anda juga diteruskan ke callback.- Pengaman pesan lintas sesi tetap berlaku.
Plan mode (plan)
Claude mengeksplorasi codebase dan menghasilkan rencana. Selama perencanaan, edit yang dibuat dengan tool file Claude di luar path yang dilindungi mencapai callback canUseTool Anda, bahkan ketika aturan allow cocok atau hook PreToolUse mengembalikan allow. Panggilan AskUserQuestion juga mencapai callback Anda, bahkan ketika aturan allow menyebutkan tool tersebut.
Ketika auto mode tersedia, Claude Code mengirim panggilan berikut selama perencanaan ke pengklasifikasi auto mode untuk ditinjau alih-alih ke callback Anda, ketika tidak ada aturan allow yang menyetujuinya:
- Perintah shell
- Pengambilan web
- Pencarian web
- Panggilan ke tool MCP yang ditandai read-only oleh server-nya
Peninjauan ini aktif secara default. Untuk mematikannya, atur useAutoModeDuringPlan ke false dalam opsi settings yang Anda berikan ke query(), atau dalam pengaturan pengguna Anda. Selama peninjauan dimatikan, pencarian web dan panggilan ke tool MCP yang ditandai read-only mencapai callback Anda.
Untuk perintah shell dan pengambilan web, tabel berikut menunjukkan apakah setiap panggilan mencapai callback Anda:
| Panggilan selama perencanaan | Peninjauan aktif | Peninjauan dimatikan, atau auto mode tidak tersedia |
|---|---|---|
Perintah shell read-only, seperti ls |
Berjalan tanpa mencapai callback Anda | Berjalan tanpa mencapai callback Anda |
| Perintah shell lain yang tidak disetujui oleh aturan allow mana pun, kecuali penghapusan path kritis | Dikirim ke pengklasifikasi, yang menyetujui atau menolaknya tanpa callback Anda | Mencapai callback Anda |
Panggilan WebFetch ke domain dokumentasi yang telah disetujui sebelumnya |
Berjalan tanpa mencapai callback Anda | Berjalan tanpa mencapai callback Anda |
Panggilan WebFetch lain yang tidak disetujui oleh aturan allow mana pun |
Dikirim ke pengklasifikasi, yang menyetujui atau menolaknya tanpa callback Anda | Mencapai callback Anda |
Untuk apa yang terjadi setelah pengklasifikasi menolak beberapa panggilan berturut-turut, lihat Ambang batas pemblokiran berulang.
[!NOTE]
Di TypeScript SDK, jika Anda mengatur
allowDangerouslySkipPermissions: truebersama denganpermissionMode: 'plan', edit file tetap mencapai callbackcanUseToolAnda. Untuk mengalihkan sesi yang dimulai dalam plan mode kebypassPermissionsnanti dengansetPermissionMode(), Anda perlu mengaturallowDangerouslySkipPermissionssejak awal.
Gunakan ketika: Anda ingin Claude menghasilkan rencana terlebih dahulu, seperti selama code review atau sebelum perubahan besar.
Auto mode (auto)
Model pengklasifikasi meninjau tindakan seperti perintah shell dan permintaan jaringan sebelum dijalankan, dan mengizinkan atau memblokir setiap tindakan yang ditinjaunya. Untuk model dan penyedia yang diperlukan auto mode serta urutan evaluasi tindakannya, lihat Menghilangkan permintaan izin dengan auto mode.
Jika Anda mengalihkan sesi yang berada dalam auto mode ke model yang tidak didukung auto mode, menggunakan set_model(), setModel(), atau applyFlagSettings(), sesi berubah ke mode default:
- Yang Anda lihat: pesan
systemdengan subtipestatusdanpermissionModediatur ke"default", yang diketik oleh TypeScript SDK sebagaiSDKStatusMessage. Sejak saat itu, panggilan yang memerlukan persetujuan dan tidak cocok dengan aturan allow apa pun mencapai callbackcanUseToolAnda. - Untuk kembali ke auto mode: beralih ke model yang didukung, lalu panggil
set_permission_mode("auto")atausetPermissionMode("auto"). Jika Anda mengalihkan model kembali tanpa melakukan panggilan tersebut, sesi tetap dalam modedefault. Selama model yang tidak didukung aktif, panggilan tersebut gagal denganCannot set permission mode to auto: auto mode unavailable for this model.
Perubahan ke mode default setelah panggilan set_model(), setModel(), atau applyFlagSettings() memerlukan Claude Code v2.1.299 atau yang lebih baru.
Sumber daya terkait
Untuk langkah-langkah lain dalam alur evaluasi izin:
- Menangani persetujuan dan input pengguna: prompt persetujuan interaktif dan pertanyaan klarifikasi
- Panduan hooks: jalankan kode khusus pada titik-titik kunci dalam siklus hidup agen
- Aturan izin: aturan allow/deny deklaratif dalam
settings.json