Izin SDK
Claude Agent SDK menyediakan kontrol izin yang kuat yang memungkinkan Anda mengelola bagaimana Claude menggunakan alat dalam aplikasi Anda. Panduan ini mencakup cara mengimplementasikan sistem izin menggunakan callbackcanUseTool
, hooks, dan aturan izin settings.json. Untuk dokumentasi API lengkap, lihat referensi TypeScript SDK.
Gambaran Umum
Claude Agent SDK menyediakan empat cara yang saling melengkapi untuk mengontrol penggunaan alat:- Mode Izin - Pengaturan perilaku izin global yang mempengaruhi semua alat
- callback canUseTool - Handler izin runtime untuk kasus yang tidak dicakup oleh aturan lain
- Hooks - Kontrol yang detail atas setiap eksekusi alat dengan logika khusus
- Aturan izin (settings.json) - Aturan allow/deny deklaratif dengan parsing perintah bash terintegrasi
- Mode izin - Mengatur perilaku izin keseluruhan (perencanaan, auto-accepting edits, melewati pemeriksaan)
canUseTool
- Persetujuan dinamis untuk kasus yang tidak tercakup, meminta izin pengguna- Hooks - Kontrol programatik atas semua eksekusi alat
- Aturan izin - Kebijakan statis dengan parsing perintah bash yang cerdas
Diagram Alur Izin
Urutan Pemrosesan: PreToolUse Hook → Aturan Ask → Aturan Deny → Pemeriksaan Mode Izin → Aturan Allow → canUseTool Callback → PostToolUse HookMode Izin
Mode izin menyediakan kontrol global atas bagaimana Claude menggunakan alat. Anda dapat mengatur mode izin saat memanggilquery()
atau mengubahnya secara dinamis selama sesi streaming.
Mode yang Tersedia
SDK mendukung empat mode izin, masing-masing dengan perilaku yang berbeda:Mode | Deskripsi | Perilaku Alat |
---|---|---|
default | Perilaku izin standar | Pemeriksaan izin normal berlaku |
plan | Mode perencanaan - tidak ada eksekusi | Claude hanya dapat menggunakan alat read-only; menyajikan rencana sebelum eksekusi (Saat ini tidak didukung dalam SDK) |
acceptEdits | Auto-accept edit file | Edit file dan operasi filesystem secara otomatis disetujui |
bypassPermissions | Lewati semua pemeriksaan izin | Semua alat berjalan tanpa prompt izin (gunakan dengan hati-hati) |
Mengatur Mode Izin
Anda dapat mengatur mode izin dengan dua cara:1. Konfigurasi Awal
Atur mode saat membuat query:2. Perubahan Mode Dinamis (Hanya Streaming)
Ubah mode selama sesi streaming:Perilaku Spesifik Mode
Mode Accept Edits (acceptEdits
)
Dalam mode accept edits:
- Semua edit file secara otomatis disetujui
- Operasi filesystem (mkdir, touch, rm, dll.) auto-approved
- Alat lain masih memerlukan izin normal
- Mempercepat pengembangan ketika Anda mempercayai edit Claude
- Berguna untuk prototyping cepat dan iterasi
- Edit file (alat Edit, MultiEdit, Write)
- Perintah filesystem bash (mkdir, touch, rm, mv, cp)
- Pembuatan dan penghapusan file
Mode Bypass Permissions (bypassPermissions
)
Dalam mode bypass permissions:
- SEMUA penggunaan alat secara otomatis disetujui
- Tidak ada prompt izin yang muncul
- Hooks masih dieksekusi (masih dapat memblokir operasi)
- Gunakan dengan sangat hati-hati - Claude memiliki akses sistem penuh
- Direkomendasikan hanya untuk lingkungan terkontrol
Prioritas Mode dalam Alur Izin
Mode izin dievaluasi pada titik tertentu dalam alur izin:- Hooks dieksekusi terlebih dahulu - Dapat menimpa mode apa pun
- Aturan deny diperiksa - Blokir alat terlepas dari mode
- Mode
bypassPermissions
- Jika aktif, mengizinkan semua alat yang tersisa - Aturan allow diperiksa
- Mode lain mempengaruhi perilaku alat tertentu
- Callback
canUseTool
- Menangani kasus yang tersisa
- Hooks selalu dapat memblokir penggunaan alat, bahkan dalam mode
bypassPermissions
- Aturan deny eksplisit menimpa semua mode izin
- Mode
bypassPermissions
menimpa aturan allow dancanUseTool
Praktik Terbaik
- Gunakan mode default untuk eksekusi terkontrol dengan pemeriksaan izin normal
- Gunakan mode acceptEdits saat bekerja pada file atau direktori yang terisolasi
- Hindari bypassPermissions dalam produksi atau pada sistem dengan data sensitif
- Kombinasikan mode dengan hooks untuk kontrol yang detail
- Beralih mode secara dinamis berdasarkan kemajuan tugas dan kepercayaan
canUseTool
CallbackcanUseTool
diteruskan sebagai opsi saat memanggil fungsi query
. Ini menerima nama alat dan parameter input, dan harus mengembalikan keputusan - baik allow atau deny.
canUseTool dipicu setiap kali Claude Code akan menampilkan prompt izin kepada pengguna, misalnya hooks dan aturan izin tidak mencakupnya dan tidak dalam mode autoaccept.
Berikut adalah contoh lengkap yang menunjukkan cara mengimplementasikan persetujuan alat interaktif:
Menggunakan Hooks untuk Kontrol Alat
Hooks menyediakan kontrol programatik atas eksekusi alat pada berbagai tahap. Hooks dipanggil untuk setiap penggunaan alat, memberi Anda kontrol penuh atas pipeline izin.Implementasi Hook
Perbedaan Utama dari canUseTool
- Cakupan: Hooks dipanggil untuk semua penggunaan alat;
canUseTool
menangani kasus yang tidak dicakup oleh aturan izin - Kontrol: Hooks memerlukan parsing dan validasi input sendiri
- Events: Hooks mendukung beberapa event (PreToolUse, PostToolUse, dll.) untuk tahap yang berbeda
Menggunakan Aturan Izin (settings.json)
Aturan izin dalamsettings.json
menyediakan kontrol deklaratif dengan parsing perintah bash bawaan. Aturan ini dievaluasi sebelum canUseTool
dipanggil. Untuk detail lebih lanjut tentang konfigurasi pengaturan, lihat dokumentasi pengaturan Claude Code.
Struktur Konfigurasi
Sintaks Aturan
Aturan izin mengikuti pola:ToolName(pattern)
- Aturan bash: Menggunakan pencocokan prefix (bukan regex). Contoh:
Bash(npm:*)
cocok dengan perintah apa pun yang dimulai dengan “npm” - Aturan file: Mendukung pola glob. Contoh:
Read(./src/**/*.ts)
cocok dengan file TypeScript di src - Aturan tool-only: Hilangkan tanda kurung untuk mengontrol seluruh alat. Contoh:
WebFetch
memblokir semua web fetch
Menggunakan dengan SDK
Meskipun aturan belum dapat diatur secara programatik dalam SDK, mereka akan dibaca dari file settings.json di path tempat SDK dimuat.Urutan Evaluasi Izin
- Aturan deny diperiksa terlebih dahulu - jika cocok, penggunaan alat diblokir
- Aturan allow diperiksa selanjutnya - jika cocok, penggunaan alat diizinkan
- Aturan ask diperiksa - jika cocok, pengguna diminta
- Callback canUseTool dipanggil untuk kasus yang tersisa
Parsing Perintah Bash
SDK menyertakan parser bash terintegrasi yang memahami struktur perintah:- Menangani pipes, redirects, dan substitusi perintah
- Mengenali pola berbahaya seperti
rm -rf
ataucurl | sh
- Mendukung wildcard dan pencocokan prefix
Bash(git:*)
- Cocok dengan perintah git apa punBash(npm run test)
- Cocok dengan perintah yang tepatBash(npm run test:*)
- Cocok dengan perintah Bash yang dimulai dengannpm run test
sepertinpm run test anyFile.test.ts
Praktik Terbaik
- Mulai dengan mode default untuk pemeriksaan izin standar
- Gunakan aturan izin untuk kebijakan statis, terutama perintah bash (lihat pengaturan izin)
- Gunakan hooks untuk log, audit, atau transformasi semua penggunaan alat (lihat tipe hook)
- Gunakan canUseTool untuk keputusan dinamis pada kasus yang tidak tercakup (lihat tipe CanUseTool)
- Lapisan pertahanan dengan menggabungkan mode, aturan, hooks, dan callback untuk aplikasi kritis