Loading...
    • Panduan Pengembang
    • Referensi API
    • MCP
    • Sumber daya
    • Catatan Rilis
    Search...
    ⌘K
    Langkah pertama
    Pengenalan ClaudeMulai cepat
    Model & harga
    Ikhtisar modelMemilih modelYang baru di Claude 4.5Migrasi ke Claude 4.5Penghentian modelHarga
    Bangun dengan Claude
    Ikhtisar fiturMenggunakan Messages APIJendela konteksPraktik terbaik prompting
    Kemampuan
    Prompt cachingPengeditan konteksExtended thinkingUpayaStreaming MessagesPemrosesan batchKutipanDukungan multibahasaPenghitungan tokenEmbeddingsVisiDukungan PDFFiles APIHasil pencarianOutput terstruktur
    Alat
    IkhtisarCara mengimplementasikan penggunaan alatStreaming alat berbutir halusAlat BashAlat eksekusi kodePemanggilan alat terprogramAlat penggunaan komputerAlat editor teksAlat pengambilan webAlat pencarian webAlat memoriAlat pencarian alat
    Keterampilan Agen
    IkhtisarMulai cepatPraktik terbaikMenggunakan Keterampilan dengan API
    Agent SDK
    IkhtisarMulai cepatTypeScript SDKTypeScript V2 (pratinjau)Python SDKPanduan Migrasi
    Input StreamingMenangani IzinKontrol eksekusi dengan hookManajemen SesiCheckpoint fileOutput terstruktur di SDKHosting Agent SDKPenyebaran agen AI yang amanMemodifikasi prompt sistemMCP di SDKAlat KustomSubagen di SDKSlash Commands di SDKKeterampilan Agen di SDKPelacakan Biaya dan PenggunaanDaftar TugasPlugin di SDK
    MCP di API
    Konektor MCPServer MCP jarak jauh
    Claude di platform pihak ketiga
    Amazon BedrockMicrosoft FoundryVertex AI
    Rekayasa prompt
    IkhtisarGenerator promptGunakan template promptPenyempurna promptJadilah jelas dan langsungGunakan contoh (multishot prompting)Biarkan Claude berpikir (CoT)Gunakan tag XMLBerikan Claude peran (prompt sistem)Isi sebelumnya respons ClaudeRantai prompt kompleksTips konteks panjangTips extended thinking
    Uji & evaluasi
    Tentukan kriteria kesuksesanKembangkan kasus ujiMenggunakan Alat EvaluasiMengurangi latensi
    Perkuat penjaga
    Kurangi halusinasiTingkatkan konsistensi outputMitigasi jailbreakStreaming penolakanKurangi kebocoran promptJaga Claude tetap dalam karakter
    Administrasi dan pemantauan
    Ikhtisar Admin APIAPI Penggunaan dan BiayaClaude Code Analytics API
    Console
    Log in
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...

    Solutions

    • AI agents
    • Code modernization
    • Coding
    • Customer support
    • Education
    • Financial services
    • Government
    • Life sciences

    Partners

    • Amazon Bedrock
    • Google Cloud's Vertex AI

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Company

    • Anthropic
    • Careers
    • Economic Futures
    • Research
    • News
    • Responsible Scaling Policy
    • Security and compliance
    • Transparency

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Help and security

    • Availability
    • Status
    • Support
    • Discord

    Terms and policies

    • Privacy policy
    • Responsible disclosure policy
    • Terms of service: Commercial
    • Terms of service: Consumer
    • Usage policy
    Panduan

    Menangani Izin

    Kontrol penggunaan alat dan izin dalam Claude Agent SDK
    • Ikhtisar
    • Diagram Alur Izin
    • Mode Izin
    • Mode yang Tersedia
    • Mengatur Mode Izin
    • Perilaku Spesifik Mode
    • Prioritas Mode dalam Alur Izin
    • Praktik Terbaik
    • canUseTool
    • Menangani Alat AskUserQuestion
    • Struktur Input
    • Mengembalikan Jawaban
    • Sumber Daya Terkait

    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 callback canUseTool, hooks, dan aturan izin settings.json. Untuk dokumentasi API lengkap, lihat referensi SDK TypeScript.

    Ikhtisar

    Claude Agent SDK menyediakan empat cara yang saling melengkapi untuk mengontrol penggunaan alat:

    1. Mode Izin - Pengaturan perilaku izin global yang mempengaruhi semua alat
    2. Callback canUseTool - Penanganan izin runtime untuk kasus yang tidak tercakup oleh aturan lain
    3. Hooks - Kontrol terperinci atas setiap eksekusi alat dengan logika kustom
    4. Aturan izin (settings.json) - Aturan allow/deny deklaratif dengan parsing perintah bash terintegrasi

    Kasus penggunaan untuk setiap pendekatan:

    • Mode izin - Tetapkan perilaku izin keseluruhan (perencanaan, auto-accepting edits, bypassing checks)
    • 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 → Deny Rules → Allow Rules → Ask Rules → Permission Mode Check → canUseTool Callback → PostToolUse Hook

    Mode Izin

    Mode izin memberikan kontrol global atas bagaimana Claude menggunakan alat. Anda dapat mengatur mode izin saat memanggil query() atau mengubahnya secara dinamis selama sesi streaming.

    Mode yang Tersedia

    SDK mendukung empat mode izin, masing-masing dengan perilaku yang berbeda:

    ModeDeskripsiPerilaku Alat
    defaultPerilaku izin standarPemeriksaan izin normal berlaku
    planMode perencanaan - tidak ada eksekusiClaude hanya dapat menggunakan alat read-only; menyajikan rencana sebelum eksekusi (Saat ini tidak didukung dalam SDK)
    acceptEditsAuto-accept file editsEdit file dan operasi filesystem secara otomatis disetujui
    bypassPermissionsBypass semua pemeriksaan izinSemua 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:

    import { query } from "@anthropic-ai/claude-agent-sdk";
    
    const result = await query({
      prompt: "Help me refactor this code",
      options: {
        permissionMode: 'default'  // Standard permission mode
      }
    });

    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

    Operasi yang auto-approved:

    • Edit file (Edit, Write tools)
    • 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:

    1. Hooks dieksekusi terlebih dahulu - Dapat allow, deny, ask, atau continue
    2. Aturan Deny diperiksa - Blokir alat terlepas dari mode
    3. Aturan Allow diperiksa - Izinkan alat jika cocok
    4. Aturan Ask diperiksa - Minta izin jika cocok
    5. Mode izin dievaluasi:
      • Mode bypassPermissions - Jika aktif, izinkan semua alat yang tersisa
      • Mode lain - Tunda ke callback canUseTool
    6. Callback canUseTool - Menangani kasus yang tersisa

    Ini berarti:

    • Hooks dapat selalu mengontrol penggunaan alat, bahkan dalam mode bypassPermissions
    • Aturan deny eksplisit menggantikan semua mode izin
    • Aturan ask dievaluasi sebelum mode izin
    • Mode bypassPermissions menggantikan callback canUseTool untuk alat yang tidak cocok

    Praktik Terbaik

    1. Gunakan mode default untuk eksekusi terkontrol dengan pemeriksaan izin normal
    2. Gunakan mode acceptEdits saat bekerja pada file atau direktori terisolasi
    3. Hindari bypassPermissions dalam produksi atau pada sistem dengan data sensitif
    4. Gabungkan mode dengan hooks untuk kontrol terperinci
    5. Ubah mode secara dinamis berdasarkan kemajuan tugas dan kepercayaan diri

    Contoh perkembangan mode:

    // Start in default mode for controlled execution
    permissionMode: 'default'
    
    // Switch to acceptEdits for rapid iteration
    await q.setPermissionMode('acceptEdits')

    canUseTool

    Callback canUseTool dilewatkan sebagai opsi saat memanggil fungsi query. Ini menerima nama alat dan parameter input, dan harus mengembalikan keputusan - allow atau deny.

    canUseTool fires kapan pun Claude Code akan menampilkan prompt izin kepada pengguna, misalnya hooks dan aturan izin tidak mencakupnya dan tidak dalam mode acceptEdits.

    Berikut adalah contoh lengkap yang menunjukkan cara mengimplementasikan persetujuan alat interaktif:

    Menangani Alat AskUserQuestion

    Alat AskUserQuestion memungkinkan Claude untuk mengajukan pertanyaan klarifikasi kepada pengguna selama percakapan. Ketika alat ini dipanggil, callback canUseTool Anda menerima pertanyaan dan harus mengembalikan jawaban pengguna.

    Struktur Input

    Ketika canUseTool dipanggil dengan toolName: "AskUserQuestion", input berisi:

    {
      questions: [
        {
          question: "Which database should we use?",
          header: "Database",
          options: [
            { label: "PostgreSQL", description: "Relational, ACID compliant" },
            { label: "MongoDB", description: "Document-based, flexible schema" }
          ],
          multiSelect: false
        },
        {
          question: "Which features should we enable?",
          header: "Features",
          options: [
            { label: "Authentication", description: "User login and sessions" },
            { label: "Logging", description: "Request and error logging" },
            { label: "Caching", description: "Redis-based response caching" }
          ],
          multiSelect: true
        }
      ]
    }

    Mengembalikan Jawaban

    Kembalikan jawaban dalam updatedInput.answers sebagai record yang memetakan teks pertanyaan ke label opsi yang dipilih:

    return {
      behavior: "allow",
      updatedInput: {
        questions: input.questions,  // Pass through original questions
        answers: {
          "Which database should we use?": "PostgreSQL",
          "Which features should we enable?": "Authentication, Caching"
        }
      }
    }

    Jawaban multi-select adalah string yang dipisahkan koma (misalnya, "Authentication, Caching").

    Sumber Daya Terkait

    • Panduan Hooks - Pelajari cara mengimplementasikan hooks untuk kontrol terperinci atas eksekusi alat
    • Pengaturan: Aturan Izin - Konfigurasi aturan allow/deny deklaratif dengan parsing perintah bash
    import { query } from "@anthropic-ai/claude-agent-sdk";
    
    // Create an async generator for streaming input
    async function* streamInput() {
      yield { 
        type: 'user',
        message: { 
          role: 'user', 
          content: "Let's start with default permissions" 
        }
      };
      
      // Later in the conversation...
      yield {
        type: 'user',
        message: {
          role: 'user',
          content: "Now let's speed up development"
        }
      };
    }
    
    const q = query({
      prompt: streamInput(),
      options: {
        permissionMode: 'default'  // Start in default mode
      }
    });
    
    // Change mode dynamically
    await q.setPermissionMode('acceptEdits');
    
    // Process messages
    for await (const message of q) {
      console.log(message);
    }
    import { query } from "@anthropic-ai/claude-agent-sdk";
    
    async function promptForToolApproval(toolName: string, input: any) {
      console.log("\n🔧 Tool Request:");
      console.log(`   Tool: ${toolName}`);
      
      // Display tool parameters
      if (input && Object.keys(input).length > 0) {
        console.log("   Parameters:");
        for (const [key, value] of Object.entries(input)) {
          let displayValue = value;
          if (typeof value === 'string' && value.length > 100) {
            displayValue = value.substring(0, 100) + "...";
          } else if (typeof value === 'object') {
            displayValue = JSON.stringify(value, null, 2);
          }
          console.log(`     ${key}: ${displayValue}`);
        }
      }
      
      // Get user approval (replace with your UI logic)
      const approved = await getUserApproval();
      
      if (approved) {
        console.log("   ✅ Approved\n");
        return {
          behavior: "allow",
          updatedInput: input
        };
      } else {
        console.log("   ❌ Denied\n");
        return {
          behavior: "deny",
          message: "User denied permission for this tool"
        };
      }
    }
    
    // Use the permission callback
    const result = await query({
      prompt: "Help me analyze this codebase",
      options: {
        canUseTool: async (toolName, input) => {
          return promptForToolApproval(toolName, input);
        }
      }
    });