8 8
9Claude 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`](/docs/id/agent-sdk/user-input) untuk menangani segalanya di runtime.9Claude 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`](/docs/id/agent-sdk/user-input) untuk menangani segalanya di runtime.
10 10
11<Note>
12 Halaman ini mencakup mode izin dan aturan. Untuk membangun alur persetujuan interaktif di mana pengguna menyetujui atau menolak permintaan alat di runtime, lihat [Tangani persetujuan dan input pengguna](/docs/id/agent-sdk/user-input).
13</Note>
14
15<h2 id="how-permissions-are-evaluated">11<h2 id="how-permissions-are-evaluated">
16 Bagaimana izin dievaluasi12 Bagaimana izin dievaluasi
17</h2>13</h2>
20 16
21<Steps>17<Steps>
22 <Step title="Hooks">18 <Step title="Hooks">
23 Jalankan [hooks](/docs/id/agent-sdk/hooks) terlebih dahulu. Hook dapat menolak panggilan sepenuhnya atau meneruskannya. Hook yang mengembalikan `allow` tidak melewati aturan deny dan ask di bawah; aturan tersebut dievaluasi terlepas dari hasil hook.19 Jalankan [hooks](/docs/id/agent-sdk/hooks) terlebih dahulu. Hook dapat menolak panggilan sepenuhnya atau meneruskannya. Hook yang mengembalikan `allow` tidak melewati aturan deny dan ask di bawah; aturan tersebut dievaluasi terlepas dari hasil hook. Hook `PreToolUse` allow juga tidak dapat menyetujui penghapusan `rm` atau `rmdir` yang menargetkan [jalur kritis](/docs/id/permission-modes#critical-paths).
24 </Step>20 </Step>
25 21
26 <Step title="Deny rules">22 <Step title="Deny rules">
27 Periksa aturan `deny` (dari `disallowed_tools` dan [settings.json](/docs/id/settings#permission-settings)). Jika aturan deny cocok, alat diblokir, bahkan dalam mode `bypassPermissions`. Aturan deny dengan nama bare seperti `Bash` menghapus alat dari konteks Claude sebelum evaluasi ini dimulai, jadi hanya aturan berscopе seperti `Bash(rm *)` yang diperiksa pada langkah ini.23 Periksa aturan `deny` (dari `disallowed_tools` dan [settings.json](/docs/id/settings-reference#permission-settings)). Jika aturan deny cocok, alat diblokir, bahkan dalam mode `bypassPermissions`. Aturan deny dengan nama bare seperti `Bash` menghapus alat dari konteks Claude sebelum evaluasi ini dimulai, jadi hanya aturan yang dibatasi seperti `Bash(rm *)` yang diperiksa pada langkah ini.
28 </Step>24 </Step>
29 25
30 <Step title="Ask rules">26 <Step title="Ask rules">
31 Periksa aturan `ask` dari [settings.json](/docs/id/settings#permission-settings). Jika aturan ask cocok, panggilan jatuh melalui callback [`canUseTool`](/docs/id/agent-sdk/user-input) Anda untuk konfirmasi, bahkan dalam mode `bypassPermissions`.27 Periksa aturan `ask` dari [settings.json](/docs/id/settings-reference#permission-settings). Jika aturan ask cocok, panggilan jatuh melalui callback [`canUseTool`](/docs/id/agent-sdk/user-input) Anda untuk konfirmasi, bahkan dalam mode `bypassPermissions`.
32 28
33 Alat yang memerlukan interaksi pengguna berperilaku dengan cara yang sama: `AskUserQuestion` dan alat MCP yang servernya menetapkan [`_meta["anthropic/requiresUserInteraction"]`](/docs/id/mcp#require-approval-for-a-specific-tool) selalu jatuh melalui callback, bahkan ketika aturan allow cocok. Dalam mode `dontAsk` kedua kasus ditolak sebagai gantinya, karena mode itu tidak pernah meminta. Anotasi MCP memerlukan Claude Code v2.1.199 atau lebih baru.29 Alat yang memerlukan interaksi pengguna berperilaku dengan cara yang sama: `AskUserQuestion` dan alat MCP yang servernya menetapkan [`_meta["anthropic/requiresUserInteraction"]`](/docs/id/mcp#require-approval-for-a-specific-tool) selalu jatuh melalui callback, bahkan ketika aturan allow cocok. Dalam mode `dontAsk` kedua kasus ditolak sebagai gantinya, karena mode itu tidak pernah meminta. Anotasi MCP memerlukan Claude Code v2.1.199 atau lebih baru.
34 30
35 Alat konektor [claude.ai](/docs/id/mcp#organization-controls-on-connector-tools) yang organisasi Anda telah atur ke `ask` juga meninggalkan alur pada langkah ini. Setiap panggilan jatuh melalui callback, bahkan dalam mode `bypassPermissions` dan bahkan ketika aturan allow cocok. Callback menerima alasan `Organisasi Anda memerlukan persetujuan untuk alat ini`. Dalam mode `dontAsk` panggilan ditolak sebagai gantinya, karena mode itu tidak pernah meminta.31 Alat konektor [claude.ai](/docs/id/mcp#organization-controls-on-connector-tools) yang organisasi Anda atur ke `ask` juga meninggalkan alur pada langkah ini. Setiap panggilan jatuh melalui 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 ditolak sebagai gantinya, karena mode itu tidak pernah meminta.
36 </Step>32 </Step>
37 33
38 <Step title="Permission mode">34 <Step title="Permission mode">
39 Terapkan [mode izin](#permission-modes) yang aktif. `bypassPermissions` menyetujui semua yang mencapai langkah ini. `acceptEdits` menyetujui operasi file. `plan` merutekan alat file-edit dan shell-write ke callback `canUseTool` Anda terlepas dari aturan allow, jadi operasi write tidak dapat disetujui secara otomatis saat merencanakan. Mode lain jatuh melalui.35 Terapkan [mode izin](#permission-modes) yang aktif:
36
37 * Dalam mode `bypassPermissions`, Claude Code menyetujui semua yang mencapai langkah ini kecuali penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](/docs/id/permission-modes#critical-paths), yang jatuh melalui sebagai gantinya.
38 * Dalam mode `acceptEdits`, Claude Code menyetujui operasi file yang tercantum di bawah [Accept edits mode](#accept-edits-mode-acceptedits).
39 * Dalam mode `plan`, Claude Code mengirim alat file-edit dan shell-write ke callback `canUseTool` Anda terlepas dari aturan allow, sehingga operasi write tidak dapat disetujui secara otomatis saat merencanakan.
40 * Dalam mode lain, permintaan jatuh melalui.
40 </Step>41 </Step>
41 42
42 <Step title="Allow rules">43 <Step title="Allow rules">
43 Periksa aturan `allow` (dari `allowed_tools` dan settings.json). Jika aturan cocok, alat disetujui.44 Periksa aturan `allow` (dari `allowed_tools` dan settings.json). Jika aturan cocok, alat disetujui. Panggilan yang alat setujui sendiri juga diselesaikan pada langkah ini, tanpa aturan yang diperlukan: misalnya pembacaan file di dalam direktori kerja Anda atau [perintah Bash read-only](/docs/id/permissions#read-only-commands). Penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](/docs/id/permission-modes#critical-paths) tidak pernah disetujui oleh aturan allow: mereka mencapai callback Anda dalam mode yang meminta, pergi ke [classifier](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) dalam mode `auto` pada Claude Code v2.1.218 atau lebih baru, dan ditolak dalam mode `dontAsk`.
44 </Step>45 </Step>
45 46
46 <Step title="canUseTool callback">47 <Step title="canUseTool callback">
47 Jika tidak diselesaikan oleh salah satu di atas, panggil callback [`canUseTool`](/docs/id/agent-sdk/user-input) Anda untuk keputusan. Dalam mode `dontAsk`, langkah ini dilewati dan alat ditolak.48 Jika tidak diselesaikan oleh salah satu di atas, panggil callback [`canUseTool`](/docs/id/agent-sdk/user-input) Anda untuk keputusan. Dalam mode `dontAsk`, langkah ini dilewati dan alat ditolak.
49
50 Dalam SDK TypeScript, jika Anda menetapkan [`permissionPrompts: 'none'`](/docs/id/agent-sdk/typescript#options), callback Anda tidak dipanggil pada langkah ini. Hook [`PermissionRequest`](/docs/id/hooks#permissionrequest) masih mendapat kesempatan untuk memutuskan, dan jika tidak, Claude Code menolak panggilan. Opsi memerlukan Claude Code v2.1.259 atau lebih baru.
48 </Step>51 </Step>
49</Steps>52</Steps>
50 53
51<img src="https://mintcdn.com/claude-code/jYgs7qigNjO1Badj/images/agent-sdk/permissions-flow.svg?fit=max&auto=format&n=jYgs7qigNjO1Badj&q=85&s=c771ad9085b1277d3708027a49c744bc" alt="Diagram alur evaluasi izin enam langkah yang sesuai dengan langkah-langkah di atas: permintaan alat melewati hooks, aturan deny, aturan ask, mode izin, aturan allow, dan canUseTool. Hooks, aturan deny, dan canUseTool dapat merutekan ke Blocked; bypass mode izin, aturan allow, dan canUseTool dapat merutekan ke Execute; aturan ask merutekan ke canUseTool." width="1180" height="260" data-path="images/agent-sdk/permissions-flow.svg" />54<img src="https://mintcdn.com/claude-code/jYgs7qigNjO1Badj/images/agent-sdk/permissions-flow.svg?fit=max&auto=format&n=jYgs7qigNjO1Badj&q=85&s=c771ad9085b1277d3708027a49c744bc" className="dark:hidden" alt="Diagram dari alur evaluasi izin enam langkah yang cocok dengan langkah-langkah di atas: permintaan alat melewati hooks, deny rules, ask rules, permission mode, allow rules, dan canUseTool. Hooks, deny rules, dan canUseTool dapat merutekan ke Blocked; permission mode bypass, allow rules, dan canUseTool dapat merutekan ke Execute; ask rules merutekan ke canUseTool." width="1180" height="260" data-path="images/agent-sdk/permissions-flow.svg" />
52 55
53Mulai dari v2.1.198, jika Anda meneruskan callback `canUseTool` yang urutan evaluasi ini tidak pernah dapat mencapai, SDK TypeScript mengeluarkan peringatan proses Node.js sekali ketika kueri dibangun. Kode peringatan adalah `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`. Dua konfigurasi memicunya:56<img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/agent-sdk/permissions-flow-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=e53a91e9059cbf51852b7cedb4dd4251" className="hidden dark:block" alt="Diagram dari alur evaluasi izin enam langkah yang cocok dengan langkah-langkah di atas: permintaan alat melewati hooks, deny rules, ask rules, permission mode, allow rules, dan canUseTool. Hooks, deny rules, dan canUseTool dapat merutekan ke Blocked; permission mode bypass, allow rules, dan canUseTool dapat merutekan ke Execute; ask rules merutekan ke canUseTool." width="1180" height="260" data-path="images/agent-sdk/permissions-flow-dark.svg" />
54 57
55* `permissionMode: 'bypassPermissions'`, yang secara otomatis menyetujui setiap panggilan yang mencapai langkah mode izin58Jika Anda meneruskan callback `canUseTool` dalam konfigurasi di mana SDK TypeScript mengharapkan urutan evaluasi untuk menyetujui panggilan secara otomatis sebelum callback dikonsultasikan, SDK memancarkan peringatan proses Node.js sekali ketika kueri dibangun. Kode peringatan adalah `CLAUDE_SDK_CAN_USE_TOOL_SHADOWED`. Dua konfigurasi memicunya:
56* Setiap entri `allowedTools` bare seperti `"Read"`, yang secara otomatis menyetujui seluruh alat itu sebelum callback dikonsultasikan
57 59
58Entri dengan specifier seperti `Bash(ls *)` dan mode `acceptEdits` tidak memicunya, dan aturan allow yang berasal dari file pengaturan tidak terlihat oleh pemeriksaan.60* `permissionMode: 'bypassPermissions'`, yang menyetujui setiap panggilan yang mencapai langkah mode izin terlepas dari [tindakan yang tidak ada mode auto-approve](/docs/id/permission-modes#actions-no-mode-auto-approves)
61* Setiap entri `allowedTools` bare seperti `"Read"`, yang menyetujui seluruh alat itu sebelum callback dikonsultasikan, terlepas dari [tindakan yang tidak ada mode auto-approve](/docs/id/permission-modes#actions-no-mode-auto-approves)
62
63Entri dengan spesifier seperti `Bash(ls *)` dan mode `acceptEdits` tidak memicunya, dan aturan allow yang berasal dari file pengaturan tidak terlihat oleh pemeriksaan.
59 64
60Dengarkan dengan `process.on('warning', ...)` dan cocokkan kode untuk mencatat atau menekannya. Untuk membatasi setiap panggilan alat terlepas dari mode dan aturan, gunakan hook [`PreToolUse`](/docs/id/agent-sdk/hooks) sebagai gantinya.65Dengarkan dengan `process.on('warning', ...)` dan cocokkan kode untuk mencatat atau menekannya. Untuk membatasi setiap panggilan alat terlepas dari mode dan aturan, gunakan hook [`PreToolUse`](/docs/id/agent-sdk/hooks) sebagai gantinya.
61 66
62Halaman ini berfokus pada **aturan allow dan deny** serta **mode izin**. Untuk langkah lainnya:67Halaman ini berfokus pada **aturan allow dan deny** serta **mode izin**. Untuk langkah-langkah lainnya:
63 68
64* **Hooks:** jalankan kode khusus untuk mengizinkan, menolak, atau memodifikasi permintaan alat. Lihat [Kontrol eksekusi dengan hooks](/docs/id/agent-sdk/hooks).69* **Hooks:** jalankan kode khusus untuk mengizinkan, menolak, atau memodifikasi permintaan alat. Lihat [Control execution with hooks](/docs/id/agent-sdk/hooks).
65* **canUseTool callback:** minta persetujuan pengguna di runtime, ketika tidak ada langkah sebelumnya yang menyelesaikan panggilan. Lihat [Tangani persetujuan dan input pengguna](/docs/id/agent-sdk/user-input).70* **canUseTool callback:** minta persetujuan pengguna saat runtime, ketika tidak ada langkah sebelumnya yang menyelesaikan panggilan. Lihat [Handle approvals and user input](/docs/id/agent-sdk/user-input).
66 71
67<h2 id="allow-and-deny-rules">72<h2 id="allow-and-deny-rules">
68 Aturan allow dan deny73 Aturan izin dan penolakan
69</h2>74</h2>
70 75
71`allowed_tools` dan `disallowed_tools` (TypeScript: `allowedTools` / `disallowedTools`) menambahkan entri ke daftar aturan allow dan deny dalam alur evaluasi di atas. Aturan allow hanya mempengaruhi persetujuan: alat yang tidak tercantum dalam `allowed_tools` masih tersedia untuk Claude dan jatuh melalui mode izin. Aturan deny berperilaku berbeda tergantung pada apakah mereka menamai alat atau membatasi pola dalam satu alat.76`allowed_tools` dan `disallowed_tools` (TypeScript: `allowedTools` / `disallowedTools`) menambahkan entri ke daftar aturan izin dan penolakan dalam alur evaluasi di atas. Jika Anda menyebutkan salah satu dari [alat pelacakan tugas](/docs/id/agent-sdk/todo-tracking#model-availability) dalam `allowed_tools`, Claude Code juga memilih sesi masuk. Alat lain apa pun yang tidak tercantum dalam `allowed_tools` masih tersedia untuk Claude, dan panggilan ke alat tersebut yang memerlukan persetujuan jatuh melalui mode izin. Aturan penolakan berperilaku berbeda tergantung pada apakah mereka menyebutkan alat atau membatasi pola dalam satu.
72 77
73| Opsi | Efek |78| Opsi | Efek |
74| :-------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |79| :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
75| `allowed_tools=["Read", "Grep"]` | `Read` dan `Grep` disetujui secara otomatis. Alat yang tidak tercantum di sini masih ada dan jatuh melalui mode izin dan `canUseTool`. |80| `allowed_tools=["Read", "Grep"]` | `Read` dan `Grep` disetujui secara otomatis. Alat lain yang tidak tercantum di sini masih ada, dan panggilan ke alat tersebut yang memerlukan persetujuan jatuh melalui mode izin dan `canUseTool`. |
76| `disallowed_tools=["Bash"]` | Definisi alat `Bash` dihapus dari permintaan. Claude tidak melihat alat dan tidak dapat mencobanya. |81| `disallowed_tools=["Bash"]` | Definisi alat `Bash` dihapus dari permintaan. Claude tidak melihat alat dan tidak dapat mencobanya. |
77| `disallowed_tools=["Bash(rm *)"]` | `Bash` tetap tersedia. Panggilan yang cocok dengan `rm *` ditolak di setiap mode izin, termasuk `bypassPermissions`. Panggilan `Bash` lainnya jatuh melalui mode izin. |82| `disallowed_tools=["Bash(rm *)"]` | `Bash` tetap tersedia. Panggilan yang cocok dengan `rm *` [seperti yang ditulis](/docs/id/permissions#bash-rule-limits) ditolak dalam setiap mode izin, termasuk `bypassPermissions`. Panggilan `Bash` lainnya, termasuk `/bin/rm`, jatuh melalui mode izin. |
78| `disallowed_tools=["*"]` | Setiap definisi alat dihapus dari permintaan. Glob nama-alat didukung dalam aturan deny: `"*"` cocok dengan setiap alat dan `"mcp__*"` cocok dengan setiap alat MCP di semua server. |83| `disallowed_tools=["*"]` | Setiap definisi alat dihapus dari permintaan. Glob nama alat didukung dalam aturan penolakan: `"*"` cocok dengan setiap alat dan `"mcp__*"` cocok dengan setiap alat MCP di semua server. |
79 84
80Aturan allow menerima glob nama-alat hanya setelah awalan literal `mcp__<server>__`. Segmen server harus bebas glob sehingga aturan menamai server spesifik yang Anda konfigurasi: `mcp__puppeteer__*` cocok dengan setiap alat dari server `puppeteer`, dan `mcp__github__get_*` cocok dengan alat `get_` miliknya. Entri yang tidak berlabuh seperti `allowed_tools=["*"]` atau `allowed_tools=["mcp__*"]` diabaikan dengan peringatan startup dan tidak menyetujui apa pun secara otomatis.85Aturan izin menerima glob nama alat hanya setelah awalan `mcp__<server>__` literal. Segmen server harus bebas glob sehingga aturan menyebutkan server spesifik yang Anda konfigurasi: `mcp__puppeteer__*` cocok dengan setiap alat dari server `puppeteer`, dan `mcp__github__get_*` cocok dengan alat `get_` miliknya. Entri yang tidak berlabuh seperti `allowed_tools=["*"]` atau `allowed_tools=["mcp__*"]` diabaikan dengan peringatan startup dan tidak menyetujui apa pun secara otomatis.
81 86
82Aturan yang dibatasi untuk `Read` dan `Edit` mengambil pola jalur. Aturan `Edit(path)` mengatur semua alat bawaan yang menulis file, termasuk `Write` dan `NotebookEdit`; aturan `Write(path)` tidak pernah cocok dengan pemeriksaan izin file.87Aturan berskop untuk `Read` dan `Edit` mengambil pola jalur. Aturan `Edit(path)` mengatur semua alat bawaan yang menulis file, termasuk `Write` dan `NotebookEdit`; aturan `Write(path)` tidak pernah cocok dengan pemeriksaan izin file.
83 88
84Gunakan `//path` untuk jalur sistem file absolut: aturan deny dari `Edit(//secrets/**)` memblokir penulisan di mana pun di bawah `/secrets` di disk. Dengan garis miring tunggal di depan, `Edit(/secrets/**)` berlabuh di sumber aturan sebagai gantinya. Untuk aturan yang dilewatkan melalui `allowed_tools` atau `disallowed_tools`, itu berarti direktori kerja sesi, sehingga aturan tidak memblokir `/secrets` di disk. Lihat [Aturan Read dan Edit](/docs/id/permissions#read-and-edit) untuk empat bentuk jangkar dan bagaimana aturan dari file pengaturan diselesaikan.89Gunakan `//path` untuk jalur sistem file absolut: aturan penolakan `Edit(//secrets/**)` memblokir penulisan di mana pun di bawah `/secrets` di disk. Dengan garis miring tunggal di depan, `Edit(/secrets/**)` berlabuh di sumber aturan sebagai gantinya. Untuk aturan yang dilewatkan melalui `allowed_tools` atau `disallowed_tools`, itu berarti direktori kerja sesi, sehingga aturan tidak memblokir `/secrets` di disk. Lihat [Aturan Read dan Edit](/docs/id/permissions#read-and-edit) untuk empat bentuk jangkar dan bagaimana aturan dari file pengaturan diselesaikan.
85 90
86<Warning>91<Warning>
87 **Alat yang disetujui otomatis tidak pernah mencapai `canUseTool`.** Panggilan alat yang disetujui pada langkah sebelumnya apa pun, oleh `acceptEdits` atau `bypassPermissions`, atau oleh aturan allow, melewati callback `canUseTool` Anda, sehingga pemeriksaan izin yang Anda letakkan di sana secara diam-diam dilewati untuk alat tersebut. `AskUserQuestion`, alat MCP yang ditandai [`_meta["anthropic/requiresUserInteraction"]`](/docs/id/mcp#require-approval-for-a-specific-tool), dan alat konektor [yang organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) masih mencapai callback, bahkan ketika aturan allow cocok.92 **Alat yang disetujui secara otomatis tidak pernah mencapai `canUseTool`.** Panggilan alat yang disetujui pada langkah sebelumnya apa pun, oleh `acceptEdits` atau `bypassPermissions`, atau oleh aturan izin, melewati callback `canUseTool` Anda, sehingga pemeriksaan izin yang Anda letakkan di sana diam-diam dilewati untuk alat tersebut. `AskUserQuestion`, alat MCP yang ditandai [`_meta["anthropic/requiresUserInteraction"]`](/docs/id/mcp#require-approval-for-a-specific-tool), alat konektor [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools), dan penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](/docs/id/permission-modes#critical-paths) masih mencapai callback, bahkan ketika aturan izin cocok. Dalam mode `auto`, penghapusan jalur kritis pergi ke [pengklasifikasi](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) alih-alih callback, sementara panggilan lain yang tercantum di sini masih mencapainya; perutean pengklasifikasi memerlukan Claude Code v2.1.218 atau lebih baru. Dalam mode `dontAsk` panggilan ini ditolak sebagai gantinya, tanpa memanggil callback.
88 93
89 Cakupan tergantung pada bentuk entri: nama bare seperti `Read` atau `mcp__github__get_issue` menyetujui secara otomatis setiap panggilan ke alat tersebut, sementara aturan yang dibatasi seperti `Bash(ls *)` hanya menyetujui panggilan yang cocok dan panggilan `Bash` lainnya masih jatuh melalui callback. Untuk pemeriksaan yang harus berjalan pada setiap panggilan alat, gunakan hook [`PreToolUse`](/docs/id/agent-sdk/hooks): hook berjalan sebelum setiap langkah lainnya, dan penolakan hook berlaku bahkan dalam mode `bypassPermissions`.94 Cakupan tergantung pada bentuk entri: nama telanjang seperti `Read` atau `mcp__github__get_issue` menyetujui setiap panggilan ke alat tersebut terlepas dari pengecualian di atas, sementara aturan berskop seperti `Bash(npm test *)` hanya menyetujui panggilan yang cocok, dan panggilan `Bash` lainnya yang memerlukan persetujuan masih jatuh melalui callback. Untuk pemeriksaan yang harus berjalan pada setiap panggilan alat, gunakan [hook `PreToolUse`](/docs/id/agent-sdk/hooks): hook berjalan sebelum setiap langkah lainnya, dan penolakan hook bahkan berlaku dalam mode `bypassPermissions`.
90</Warning>95</Warning>
91 96
92Untuk agen yang terkunci, pasangkan `allowedTools` dengan `permissionMode: "dontAsk"`. Alat yang tercantum disetujui, terlepas dari alat yang selalu diminta dalam Peringatan di atas; apa pun yang lain ditolak sepenuhnya daripada meminta:97Untuk agen yang terkunci, pasangkan `allowedTools` dengan `permissionMode: "dontAsk"`:
93 98
94```typescript theme={null}99```typescript theme={null}
95const options = {100const options = {
98};103};
99```104```
100 105
106Alat yang tercantum disetujui, terlepas dari [tindakan yang tidak ada mode auto-approve](/docs/id/permission-modes#actions-no-mode-auto-approves), dan setiap panggilan lain yang akan meminta ditolak sebagai gantinya. Panggilan yang tidak memerlukan persetujuan dalam mode `default` berjalan apakah atau tidak Anda mencantumnya, seperti [perintah Bash hanya-baca](/docs/id/permissions#read-only-commands), alat seperti `Agent` yang tidak bertanya sebelum menjalankan, dan pembacaan file di dalam direktori kerja Anda. Untuk menempatkan alat di luar jangkauan Claude sepenuhnya, tambahkan nama telanjangnya ke `disallowedTools`.
107
101<Warning>108<Warning>
102 **`allowed_tools` tidak membatasi `bypassPermissions`.** `allowed_tools` hanya pra-menyetujui alat yang Anda cantumkan. Alat yang tidak tercantum tidak cocok dengan aturan allow apa pun dan jatuh melalui mode izin, di mana `bypassPermissions` menyetujuinya. Menetapkan `allowed_tools=["Read"]` bersama dengan `permission_mode="bypassPermissions"` masih menyetujui setiap alat, termasuk `Bash`, `Write`, dan `Edit`. Jika Anda memerlukan `bypassPermissions` tetapi ingin alat tertentu diblokir, gunakan `disallowed_tools`.109 **`allowed_tools` tidak membatasi `bypassPermissions`.** `allowed_tools` pra-menyetujui alat yang Anda cantumkan. Alat unlisted lainnya tidak cocok dengan aturan izin apa pun dan jatuh melalui mode izin, di mana `bypassPermissions` menyetujuinya. Mengatur `allowed_tools=["Read"]` bersama dengan `permission_mode="bypassPermissions"` masih menyetujui setiap alat, termasuk `Bash`, `Write`, dan `Edit`. Jika Anda memerlukan `bypassPermissions` tetapi menginginkan alat spesifik diblokir, gunakan `disallowed_tools`.
103</Warning>110</Warning>
104 111
105Anda juga dapat mengonfigurasi aturan allow, deny, dan ask secara deklaratif di `.claude/settings.json`. Aturan ini dibaca ketika sumber pengaturan `project` diaktifkan, yang merupakan default untuk opsi `query()`. Jika Anda menetapkan `setting_sources` (TypeScript: `settingSources`) secara eksplisit, sertakan `"project"` agar aturan diterapkan. Lihat [Pengaturan izin](/docs/id/settings#permission-settings) untuk sintaks aturan.112Anda juga dapat mengonfigurasi aturan izin, penolakan, dan tanya secara deklaratif dalam `.claude/settings.json`. Aturan ini dibaca ketika sumber pengaturan `project` diaktifkan, yang mana untuk opsi `query()` default. Jika Anda mengatur `setting_sources` (TypeScript: `settingSources`) secara eksplisit, sertakan `"project"` agar aturan diterapkan. Lihat [Pengaturan Izin](/docs/id/settings-reference#permission-settings) untuk sintaks aturan.
106 113
107<h2 id="permission-modes">114<h2 id="permission-modes">
108 Mode izin115 Mode izin
109</h2>116</h2>
110 117
111Mode izin memberikan kontrol global atas bagaimana Claude menggunakan alat. Anda dapat menetapkan mode izin saat memanggil `query()` atau mengubahnya secara dinamis selama sesi streaming.118Mode izin memberikan kontrol global atas cara Claude menggunakan tools. Anda dapat mengatur mode izin saat memanggil `query()` atau mengubahnya secara dinamis selama sesi streaming.
112 119
113<h3 id="available-modes">120<h3 id="available-modes">
114 Mode yang tersedia121 Mode yang tersedia
115</h3>122</h3>
116 123
117SDK mendukung mode izin ini:124SDK mendukung mode izin berikut:
118 125
119| Mode | Deskripsi | Perilaku alat |126| Mode | Deskripsi | Perilaku Tool |
120| :------------------ | :-------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |127| :------------------ | :-------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
121| `default` | Perilaku izin standar | Tidak ada persetujuan otomatis; alat yang tidak cocok memicu callback `canUseTool` Anda |128| `default` | Perilaku izin standar | Tidak ada persetujuan otomatis berbasis mode; panggilan yang memerlukan persetujuan dan tidak cocok dengan aturan izin memicu callback `canUseTool` Anda |
122| `dontAsk` | Tolak daripada meminta | Apa pun yang tidak pra-disetujui oleh `allowed_tools` atau aturan ditolak; alat konektor [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dan alat yang memerlukan interaksi pengguna ditolak bahkan jika Anda telah pra-menyetujuinya. `canUseTool` tidak pernah dipanggil |129| `dontAsk` | Tolak alih-alih meminta | Setiap panggilan yang sebaliknya akan meminta ditolak. Panggilan yang disetujui oleh `allowed_tools` atau aturan berjalan, begitu juga panggilan yang tidak memerlukan persetujuan dalam mode `default`, seperti pembacaan file di dalam direktori kerja Anda dan panggilan ke `Agent`. Connector tools [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dan tools yang memerlukan interaksi pengguna ditolak bahkan jika Anda telah menyetujuinya sebelumnya, begitu juga penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](/docs/id/permission-modes#critical-paths). `canUseTool` tidak pernah dipanggil |
123| `acceptEdits` | Terima otomatis edit file | Edit file dan [operasi sistem file](#accept-edits-mode-acceptedits) (`mkdir`, `rm`, `mv`, dll.) disetujui secara otomatis |130| `acceptEdits` | Terima otomatis pengeditan file | Pengeditan file dan [operasi sistem file](#accept-edits-mode-acceptedits) (`mkdir`, `rm`, `mv`, dll.) secara otomatis disetujui |
124| `bypassPermissions` | Lewati pemeriksaan izin | Alat berjalan tanpa prompt izin, kecuali aturan [`ask`](#how-permissions-are-evaluated) eksplisit cocok, alat konektor [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools), dan alat yang memerlukan interaksi pengguna (gunakan dengan hati-hati) |131| `bypassPermissions` | Lewati pemeriksaan izin | Tools berjalan tanpa prompt izin, kecuali untuk [tindakan yang tidak ada mode auto-approve](/docs/id/permission-modes#actions-no-mode-auto-approves). Gunakan dengan hati-hati |
125| `plan` | Mode perencanaan | Claude menjelajahi dan merencanakan tanpa mengedit file sumber Anda; edit file tidak pernah disetujui secara otomatis dan diminta melalui callback `canUseTool` Anda |132| `plan` | Mode perencanaan | Claude menjelajahi dan merencanakan tanpa mengedit file sumber Anda; pengeditan file tidak pernah auto-approved dan meminta melalui callback `canUseTool` Anda |
126| `auto` | Persetujuan yang diklasifikasikan model | Pengklasifikasi model menyetujui atau menolak setiap panggilan alat. Lihat [Mode Auto](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) untuk ketersediaan |133| `auto` | Persetujuan yang diklasifikasikan model | Pengklasifikasi model menyetujui atau menolak prompt izin. Lihat [Mode Auto](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) untuk ketersediaan |
127 134
128<Warning>135<Warning>
129 **Warisan subagen:** Ketika induk menggunakan `bypassPermissions`, `acceptEdits`, atau `auto`, semua subagen mewarisi mode tersebut dan tidak dapat ditimpa per subagen. Subagen mungkin memiliki prompt sistem yang berbeda dan perilaku yang kurang terbatas daripada agen utama Anda, jadi mewarisi `bypassPermissions` memberikan mereka akses sistem penuh dan otonom. Aturan [`ask`](#how-permissions-are-evaluated) eksplisit, alat konektor [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools), dan alat yang memerlukan interaksi pengguna masih memaksa prompt.136 **Pewarisan subagent:** Subagent berjalan dalam mode izin sesi induk kecuali Anda mengatur `permissionMode` pada [`AgentDefinition`](/docs/id/agent-sdk/typescript#agentdefinition) dan sesi induk berada dalam mode `default`, `dontAsk`, atau `plan`. Bahkan kemudian, Claude Code tidak pernah menerapkan nilai `"bypassPermissions"`. Subagent berjalan dalam mode `bypassPermissions` hanya ketika sesi induk itu sendiri melakukannya. Pengecualian `bypassPermissions` memerlukan Claude Code v2.1.267 atau lebih baru.
137
138 Subagent mungkin memiliki prompt sistem yang berbeda dan perilaku yang kurang terbatas daripada agen utama Anda, jadi mewarisi `bypassPermissions` memberi mereka akses sistem penuh dan otonom. [Tindakan yang tidak ada mode auto-approve](/docs/id/permission-modes#actions-no-mode-auto-approves) masih berlaku.
130</Warning>139</Warning>
131 140
132<h3 id="set-permission-mode">141<h3 id="set-permission-mode">
133 Tetapkan mode izin142 Atur mode izin
134</h3>143</h3>
135 144
136Anda dapat menetapkan mode izin sekali saat memulai kueri, atau mengubahnya secara dinamis saat sesi aktif.145Anda dapat mengatur mode izin sekali saat memulai query, atau mengubahnya secara dinamis saat sesi aktif.
137 146
138<Tabs>147<Tabs>
139 <Tab title="Pada waktu kueri">148 <Tab title="Pada waktu query">
140 Teruskan `permission_mode` (Python) atau `permissionMode` (TypeScript) saat membuat kueri. Mode ini berlaku untuk seluruh sesi kecuali diubah secara dinamis.149 Lewatkan `permission_mode` (Python) atau `permissionMode` (TypeScript) saat membuat query. Mode ini berlaku untuk seluruh sesi kecuali diubah secara dinamis.
141 150
142 <CodeGroup>151 <CodeGroup>
143 ```python Python theme={null}152 ```python Python theme={null}
181 </Tab>190 </Tab>
182 191
183 <Tab title="Selama streaming">192 <Tab title="Selama streaming">
184 Panggil `set_permission_mode()` (Python) atau `setPermissionMode()` (TypeScript) untuk mengubah mode di tengah sesi. Mode baru berlaku segera untuk semua permintaan alat berikutnya. Ini memungkinkan Anda memulai dengan pembatasan dan melonggarkan izin seiring kepercayaan berkembang, misalnya beralih ke `acceptEdits` setelah meninjau pendekatan awal Claude.193 Panggil `set_permission_mode()` (Python) atau `setPermissionMode()` (TypeScript) untuk mengubah mode di tengah sesi. Mode baru berlaku segera untuk semua permintaan tool berikutnya. Ini memungkinkan Anda untuk memulai dengan pembatasan dan melonggarkan izin seiring kepercayaan berkembang, misalnya beralih ke `acceptEdits` setelah meninjau pendekatan awal Claude.
185 194
186 <CodeGroup>195 <CodeGroup>
187 ```python Python theme={null}196 ```python Python theme={null}
242</h3>251</h3>
243 252
244<h4 id="accept-edits-mode-acceptedits">253<h4 id="accept-edits-mode-acceptedits">
245 Mode terima edit (`acceptEdits`)254 Mode terima pengeditan (`acceptEdits`)
246</h4>255</h4>
247 256
248Menyetujui operasi file secara otomatis sehingga Claude dapat mengedit kode tanpa meminta. Alat lain (seperti perintah Bash yang bukan operasi sistem file) masih memerlukan izin normal.257Auto-approve operasi file sehingga Claude dapat mengedit kode tanpa meminta. Tools lain (seperti perintah Bash yang bukan operasi sistem file) masih memerlukan izin normal.
249 258
250**Operasi yang disetujui secara otomatis:**259**Operasi yang auto-approved:**
251 260
252* Edit file (alat Edit, Write)261* Pengeditan file (tools Edit, Write)
253* Perintah sistem file: `mkdir`, `touch`, `rm`, `rmdir`, `mv`, `cp`, `sed`262* Perintah sistem file: `mkdir`, `touch`, `rm`, `rmdir`, `mv`, `cp`, `sed`
254 263
255Keduanya hanya berlaku untuk jalur di dalam direktori kerja atau `additionalDirectories`. Jalur di luar cakupan itu dan penulisan ke jalur yang dilindungi masih meminta.264Keduanya hanya berlaku untuk jalur di dalam direktori kerja atau `additionalDirectories`. Dalam mode `acceptEdits`, Claude Code tidak auto-approve permintaan ketika Claude:
265
266* Bekerja pada jalur di luar cakupan itu
267* Menulis ke jalur yang dilindungi
268* Menghapus [jalur kritis](/docs/id/permission-modes#critical-paths) dengan `rm` atau `rmdir`
256 269
257**Gunakan ketika:** Anda mempercayai edit Claude dan menginginkan iterasi yang lebih cepat, seperti selama prototyping atau saat bekerja di direktori terisolasi.270**Gunakan ketika:** Anda mempercayai pengeditan Claude dan menginginkan iterasi yang lebih cepat, seperti selama prototyping atau saat bekerja di direktori terisolasi.
258 271
259<h4 id="don’t-ask-mode-dontask">272<h4 id="don’t-ask-mode-dontask">
260 Mode jangan tanya (`dontAsk`)273 Mode jangan tanya (`dontAsk`)
261</h4>274</h4>
262 275
263Mengonversi prompt izin apa pun menjadi penolakan. Alat yang pra-disetujui oleh `allowed_tools`, aturan allow `settings.json`, atau hook berjalan normal. Alat konektor [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dan alat yang memerlukan interaksi pengguna ditolak bahkan ketika aturan allow cocok. Segalanya ditolak tanpa memanggil `canUseTool`.276Mengonversi prompt izin apa pun menjadi penolakan, tanpa memanggil `canUseTool`. Tools yang disetujui sebelumnya oleh `allowed_tools`, aturan izin `settings.json`, atau hook berjalan seperti biasa, begitu juga panggilan yang tidak memerlukan persetujuan dalam mode `default`, seperti pembacaan file di dalam direktori kerja Anda dan panggilan ke `Agent`. Connector tools [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools), tools yang memerlukan interaksi pengguna, dan penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](/docs/id/permission-modes#critical-paths) ditolak bahkan ketika aturan izin cocok. Hook allow `PreToolUse` juga tidak menghapus penghapusan jalur kritis.
264 277
265**Gunakan ketika:** Anda menginginkan permukaan alat yang tetap dan eksplisit untuk agen headless dan lebih suka penolakan keras daripada ketergantungan diam pada `canUseTool` yang tidak ada.278**Gunakan ketika:** Anda menginginkan permukaan tool yang tetap dan eksplisit untuk agen headless dan lebih suka penolakan keras daripada ketergantungan diam pada `canUseTool` yang tidak ada.
266 279
267<h4 id="bypass-permissions-mode-bypasspermissions">280<h4 id="bypass-permissions-mode-bypasspermissions">
268 Mode lewati izin (`bypassPermissions`)281 Mode lewati izin (`bypassPermissions`)
269</h4>282</h4>
270 283
271Menyetujui semua penggunaan alat secara otomatis tanpa prompt. Hooks masih dijalankan dan dapat memblokir operasi jika diperlukan.284Auto-approve penggunaan tool tanpa meminta, kecuali kasus yang tercantum dalam peringatan di bawah. Hook masih dijalankan dan dapat memblokir operasi jika diperlukan.
272 285
273<Warning>286<Warning>
274 Gunakan dengan sangat hati-hati. Claude memiliki akses sistem penuh dalam mode ini. Hanya gunakan di lingkungan terkontrol di mana Anda mempercayai semua operasi yang mungkin.287 Gunakan dengan sangat hati-hati. Claude memiliki akses sistem penuh dalam mode ini. Hanya gunakan di lingkungan terkontrol di mana Anda mempercayai semua operasi yang mungkin.
275 288
276 `allowed_tools` tidak membatasi mode ini. Setiap alat disetujui, bukan hanya yang Anda cantumkan. Aturan deny (`disallowed_tools`), aturan `ask` eksplisit, dan hooks dievaluasi sebelum pemeriksaan mode dan masih dapat memblokir alat. Alat konektor [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools) dan alat yang memerlukan interaksi pengguna masih jatuh melalui callback `canUseTool` Anda.289 `allowed_tools` tidak membatasi mode ini. Setiap tool disetujui, bukan hanya yang Anda daftarkan. Kontrol ini masih berlaku:
290
291 * Aturan penolakan, aturan `ask` eksplisit, dan hook dievaluasi sebelum pemeriksaan mode dan masih dapat memblokir tool.
292 * Connector tools [organisasi Anda atur ke `ask`](/docs/id/mcp#organization-controls-on-connector-tools), tools yang memerlukan interaksi pengguna, dan penghapusan `rm` dan `rmdir` yang menargetkan [jalur kritis](/docs/id/permission-modes#critical-paths) masih jatuh ke callback `canUseTool` Anda.
293 * [Perlindungan pesan lintas sesi](/docs/id/permission-modes#skip-all-checks-with-bypasspermissions-mode) masih berlaku.
277</Warning>294</Warning>
278 295
279<h4 id="plan-mode-plan">296<h4 id="plan-mode-plan">
280 Mode rencana (`plan`)297 Mode rencana (`plan`)
281</h4>298</h4>
282 299
283Claude menjelajahi basis kode dan menghasilkan rencana tanpa mengedit file sumber Anda. Alat baca saja berjalan seperti dalam mode default. Edit file tidak pernah disetujui secara otomatis dalam mode rencana, bahkan ketika aturan allow cocok. Mereka diminta melalui callback `canUseTool` Anda sebagai gantinya. Claude dapat menggunakan `AskUserQuestion` untuk mengklarifikasi persyaratan sebelum menyelesaikan rencana. Lihat [Tangani persetujuan dan input pengguna](/docs/id/agent-sdk/user-input#handle-clarifying-questions) untuk menangani prompt ini.300Claude menjelajahi basis kode dan menghasilkan rencana tanpa mengedit file sumber Anda. Tools read-only berjalan seperti dalam mode izin `default`.
301
302Pengeditan file tidak pernah auto-approved dalam mode rencana, bahkan ketika aturan izin cocok. Mereka meminta melalui callback `canUseTool` Anda sebagai gantinya. Pada Claude Code v2.1.212 atau lebih baru, perintah shell yang memodifikasi file, seperti `touch` dan `rm`, mencapai callback `canUseTool` Anda dengan cara yang sama.
303
304Claude dapat menggunakan `AskUserQuestion` untuk mengklarifikasi persyaratan sebelum menyelesaikan rencana. Lihat [Tangani persetujuan dan input pengguna](/docs/id/agent-sdk/user-input#handle-clarifying-questions) untuk menangani prompt ini.
284 305
285**Gunakan ketika:** Anda ingin Claude mengusulkan perubahan tanpa menjalankannya, seperti selama tinjauan kode atau ketika Anda perlu menyetujui perubahan sebelum dibuat.306**Gunakan ketika:** Anda ingin Claude mengusulkan perubahan tanpa menjalankannya, seperti selama tinjauan kode atau ketika Anda perlu menyetujui perubahan sebelum dibuat.
286 307
288 Sumber daya terkait309 Sumber daya terkait
289</h2>310</h2>
290 311
291Untuk langkah lain dalam alur evaluasi izin:312Untuk langkah-langkah lain dalam alur evaluasi izin:
292 313
293* [Tangani persetujuan dan input pengguna](/docs/id/agent-sdk/user-input): prompt persetujuan interaktif dan pertanyaan klarifikasi314* [Menangani persetujuan dan input pengguna](/docs/id/agent-sdk/user-input): prompt persetujuan interaktif dan pertanyaan klarifikasi
294* [Panduan hooks](/docs/id/agent-sdk/hooks): jalankan kode khusus di titik kunci dalam siklus hidup agen315* [Panduan hooks](/docs/id/agent-sdk/hooks): jalankan kode khusus pada titik-titik kunci dalam siklus hidup agen
295* [Aturan izin](/docs/id/settings#permission-settings): aturan allow/deny deklaratif di `settings.json`316* [Aturan izin](/docs/id/settings-reference#permission-settings): aturan allow/deny deklaratif dalam `settings.json`