Langsung ke konten utama

Instalasi

Instal paket ke dalam lingkungan virtual. Pada instalasi Python Debian, Ubuntu, dan Homebrew terbaru, menjalankan pip install terhadap Python sistem gagal dengan error: externally-managed-environment.
Untuk uv, Windows PowerShell, dan pengaturan kunci API, lihat Memulai dalam gambaran umum Agent SDK.

Memilih antara query() dan ClaudeSDKClient

Python SDK menyediakan dua cara untuk berinteraksi dengan Claude Code:

Perbandingan cepat

Kapan menggunakan query() (tugas sekali jalan)

Terbaik untuk:
  • Pertanyaan sekali jalan di mana Anda tidak memerlukan riwayat percakapan
  • Tugas independen yang tidak memerlukan konteks dari pertukaran sebelumnya
  • Skrip otomasi sederhana
  • Ketika Anda menginginkan awal yang segar setiap kali

Kapan menggunakan ClaudeSDKClient (percakapan berkelanjutan)

Terbaik untuk:
  • Melanjutkan percakapan - Ketika Anda memerlukan Claude untuk mengingat konteks
  • Pertanyaan lanjutan - Membangun berdasarkan respons sebelumnya
  • Aplikasi interaktif - Antarmuka obrolan, REPL
  • Logika berbasis respons - Ketika tindakan berikutnya bergantung pada respons Claude
  • Kontrol sesi - Mengelola siklus hidup percakapan secara eksplisit

Fungsi

query()

Membuat sesi baru untuk setiap interaksi dengan Claude Code secara default. Mengembalikan async iterator yang menghasilkan pesan saat tiba. Setiap panggilan ke query() dimulai segar tanpa memori interaksi sebelumnya kecuali Anda melewatkan continue_conversation=True atau resume dalam ClaudeAgentOptions. Lihat Sessions.

Parameter

Pengembalian

Mengembalikan AsyncIterator[Message] yang menghasilkan pesan dari percakapan.

Contoh - Dengan opsi

tool()

Dekorator untuk mendefinisikan tools MCP dengan keamanan tipe.

Parameter

Opsi skema input

  1. Pemetaan tipe sederhana (direkomendasikan):
  2. Format JSON Schema (untuk validasi kompleks):

Pengembalian

Fungsi dekorator yang membungkus implementasi tool dan mengembalikan instance SdkMcpTool.

Contoh

ToolAnnotations

Diimpor ulang dari mcp.types (juga tersedia sebagai from claude_agent_sdk import ToolAnnotations). Semua field adalah petunjuk opsional; klien tidak boleh mengandalkannya untuk keputusan keamanan.

create_sdk_mcp_server()

Buat server MCP dalam proses yang berjalan dalam aplikasi Python Anda.

Parameter

Pengembalian

Mengembalikan objek McpSdkServerConfig yang dapat diteruskan ke ClaudeAgentOptions.mcp_servers.

Contoh

list_sessions()

Mencantumkan sesi masa lalu dengan metadata. Filter berdasarkan direktori proyek atau cantumkan sesi di semua proyek. Sinkron; mengembalikan segera.

Parameter

Tipe pengembalian: SDKSessionInfo

Contoh

Cetak 10 sesi terbaru untuk proyek. Hasil diurutkan berdasarkan last_modified menurun, jadi item pertama adalah yang terbaru. Hilangkan directory untuk mencari di semua proyek.

get_session_messages()

Mengambil pesan dari sesi masa lalu. Sinkron; mengembalikan segera.

Parameter

Tipe pengembalian: SessionMessage

Contoh

get_session_info()

Membaca metadata untuk sesi tunggal berdasarkan ID tanpa memindai direktori proyek lengkap. Sinkron; mengembalikan segera.

Parameter

Mengembalikan SDKSessionInfo, atau None jika sesi tidak ditemukan.

Contoh

Cari metadata sesi tunggal tanpa memindai direktori proyek. Berguna ketika Anda sudah memiliki ID sesi dari run sebelumnya.

rename_session()

Mengganti nama sesi dengan menambahkan entri judul kustom. Panggilan berulang aman; judul terbaru menang. Sinkron.

Parameter

Menimbulkan ValueError jika session_id bukan UUID yang valid atau title kosong; FileNotFoundError jika sesi tidak dapat ditemukan.

Contoh

Ganti nama sesi terbaru sehingga lebih mudah ditemukan nanti. Judul baru muncul di SDKSessionInfo.custom_title pada pembacaan berikutnya.

tag_session()

Menandai sesi. Teruskan None untuk menghapus tag. Panggilan berulang aman; tag terbaru menang. Sinkron.

Parameter

Menimbulkan ValueError jika session_id bukan UUID yang valid atau tag kosong setelah sanitasi; FileNotFoundError jika sesi tidak dapat ditemukan.

Contoh

Tandai sesi, kemudian filter berdasarkan tag itu pada pembacaan nanti. Teruskan None untuk menghapus tag yang ada.

Kelas

ClaudeSDKClient

Mempertahankan sesi percakapan di beberapa pertukaran. Ini adalah setara Python dari cara fungsi query() SDK TypeScript bekerja secara internal - ia membuat objek klien yang dapat melanjutkan percakapan.

Fitur Utama

  • Kontinuitas sesi: Mempertahankan konteks percakapan di beberapa panggilan query()
  • Percakapan yang sama: Sesi mempertahankan pesan sebelumnya
  • Dukungan interrupt: Dapat menghentikan eksekusi di tengah-tengah tugas
  • Siklus hidup eksplisit: Anda mengontrol kapan sesi dimulai dan berakhir
  • Alur berbasis respons: Dapat bereaksi terhadap respons dan mengirim tindak lanjut
  • Tools dan hooks kustom: Mendukung tools kustom (dibuat dengan dekorator @tool) dan hooks

Metode

Dukungan Context Manager

Klien dapat digunakan sebagai async context manager untuk manajemen koneksi otomatis:
Penting: Saat mengulangi pesan, hindari menggunakan break untuk keluar lebih awal karena ini dapat menyebabkan masalah pembersihan asyncio. Sebaliknya, biarkan iterasi selesai secara alami atau gunakan flag untuk melacak kapan Anda menemukan apa yang Anda butuhkan.

Contoh - Melanjutkan percakapan

Contoh - Streaming input dengan ClaudeSDKClient

Contoh - Menggunakan interrupts

Perilaku buffer setelah interrupt: interrupt() mengirim sinyal berhenti tetapi tidak menghapus buffer pesan. Pesan yang sudah diproduksi oleh tugas yang terputus, termasuk ResultMessage-nya (dengan subtype="error_during_execution"), tetap berada dalam aliran. Anda harus menguras mereka dengan receive_response() sebelum membaca respons ke query baru. Jika Anda mengirim query baru segera setelah interrupt() dan memanggil receive_response() hanya sekali, Anda akan menerima pesan tugas yang terputus, bukan respons query baru.

Contoh - Kontrol izin lanjutan

Tipe

@dataclass vs TypedDict: SDK ini menggunakan dua jenis tipe. Kelas yang didekorasi dengan @dataclass (seperti ResultMessage, AgentDefinition, TextBlock) adalah instance objek saat runtime dan mendukung akses atribut: msg.result. Kelas yang didefinisikan dengan TypedDict (seperti ThinkingConfigEnabled, McpStdioServerConfig, SyncHookJSONOutput) adalah dict biasa saat runtime dan memerlukan akses kunci: config["budget_tokens"], bukan config.budget_tokens. Sintaks panggilan ClassName(field=value) bekerja untuk keduanya, tetapi hanya dataclass yang menghasilkan objek dengan atribut.

SdkMcpTool

Definisi untuk tool SDK MCP yang dibuat dengan dekorator @tool.

Transport

Kelas dasar abstrak untuk implementasi transport kustom. Gunakan ini untuk berkomunikasi dengan proses Claude melalui saluran kustom (misalnya, koneksi jarak jauh alih-alih subprocess lokal).
Ini adalah API internal tingkat rendah. Antarmuka dapat berubah di rilis mendatang. Implementasi kustom harus diperbarui agar sesuai dengan perubahan antarmuka apa pun.
Impor: from claude_agent_sdk import Transport

ClaudeAgentOptions

Dataclass konfigurasi untuk query Claude Code.

Menangani respons API yang lambat atau terhenti

Subprocess CLI membaca beberapa variabel lingkungan yang mengontrol timeout API dan deteksi stall. Teruskan melalui ClaudeAgentOptions.env:
  • API_TIMEOUT_MS: timeout per-permintaan pada klien Anthropic, dalam milidetik. Default 600000. Berlaku untuk loop utama dan semua subagent.
  • CLAUDE_CODE_MAX_RETRIES: maksimal retry API. Default 10, dibatasi pada 15. Setiap retry mendapat jendela API_TIMEOUT_MS sendiri, jadi waktu dinding terburuk kira-kira API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1) ditambah backoff. Untuk run tanpa pengawasan yang perlu menunggu melalui pemadaman yang lebih lama, atur CLAUDE_CODE_RETRY_WATCHDOG=1: itu retry kapasitas error tanpa batas, dan sejak Claude Code v2.1.199 menaikkan default untuk error transien lainnya menjadi 300 dan menghapus batas pada variabel ini.
  • CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: watchdog stall untuk subagent yang diluncurkan dengan run_in_background. Default 600000. Direset pada setiap event stream; pada stall itu membatalkan subagent, menandai tugas gagal, dan menampilkan error ke parent dengan hasil parsial apa pun. Tidak berlaku untuk subagent sinkron.
  • CLAUDE_ENABLE_STREAM_WATCHDOG dengan CLAUDE_STREAM_IDLE_TIMEOUT_MS: membatalkan permintaan ketika header telah tiba tetapi badan respons berhenti streaming. Watchdog aktif secara default untuk semua penyedia; atur CLAUDE_ENABLE_STREAM_WATCHDOG=0 untuk menonaktifkannya. CLAUDE_STREAM_IDLE_TIMEOUT_MS default ke 300000 dan diklem ke minimum itu. Permintaan yang dibatalkan melalui jalur retry normal.

OutputFormat

Konfigurasi untuk validasi output terstruktur. Teruskan ini sebagai dict ke field output_format pada ClaudeAgentOptions:

SystemPromptPreset

Konfigurasi untuk menggunakan preset system prompt Claude Code dengan penambahan opsional.

SystemPromptFile

Konfigurasi untuk memuat system prompt kustom dari file alih-alih meneruskannya sebagai string. SDK memetakan ini ke flag CLI --system-prompt-file. Gunakan bentuk file ketika prompt besar: SDK meneruskan string system_prompt pada argv subprocess CLI, yang tunduk pada batas panjang command-line OS sebelum SDK mengirim permintaan API apa pun. Di Linux satu argumen lebih panjang dari kira-kira 128 KB gagal pada spawn proses dengan Argument list too long. Di Windows seluruh command line dibatasi pada kira-kira 32 KB, jadi bentuk string gagal pada ambang yang lebih rendah.

SettingSource

Mengontrol sumber konfigurasi berbasis filesystem mana yang dimuat pengaturan SDK.

Perilaku default

Ketika setting_sources dihilangkan atau None, query() memuat pengaturan filesystem yang sama seperti CLI Claude Code: pengguna, proyek, dan lokal. Pengaturan kebijakan terkelola dimuat dalam semua kasus; pengaturan yang dikelola server diambil ketika sesi mengautentikasi dengan kredensial organisasi pada konfigurasi yang memenuhi syarat. Lihat What settingSources does not control untuk input yang dibaca terlepas dari opsi ini, dan cara menonaktifkannya.

Mengapa menggunakan setting_sources

Nonaktifkan pengaturan filesystem:
Dalam Python SDK 0.1.59 dan lebih awal, daftar kosong diperlakukan sama dengan menghilangkan opsi, jadi setting_sources=[] tidak menonaktifkan pengaturan filesystem. Upgrade ke rilis yang lebih baru jika Anda memerlukan daftar kosong untuk berlaku. SDK TypeScript tidak terpengaruh.
Muat semua pengaturan filesystem secara eksplisit:
Muat hanya sumber pengaturan tertentu:
Lingkungan testing dan CI:
Aplikasi SDK-only:
Memuat instruksi proyek CLAUDE.md:

Preseden pengaturan

Ketika beberapa sumber dimuat, pengaturan digabungkan dengan preseden ini (tertinggi ke terendah):
  1. Pengaturan lokal (.claude/settings.local.json)
  2. Pengaturan proyek (.claude/settings.json)
  3. Pengaturan pengguna (~/.claude/settings.json)
Opsi programatis seperti agents dan allowed_tools mengganti pengaturan filesystem pengguna, proyek, dan lokal. Pengaturan kebijakan terkelola mengambil prioritas atas opsi programatis.

AgentDefinition

Konfigurasi untuk subagent yang didefinisikan secara programatis.
Field AgentDefinition menggunakan camelCase, seperti disallowedTools, permissionMode, dan maxTurns. Nama-nama ini memetakan langsung ke format wire yang dibagikan dengan SDK TypeScript. Ini berbeda dari ClaudeAgentOptions, yang menggunakan Python snake_case untuk field tingkat atas yang setara seperti disallowed_tools dan permission_mode. Karena AgentDefinition adalah dataclass, melewatkan keyword snake_case menimbulkan TypeError pada waktu konstruksi.

PermissionMode

Mode izin untuk mengontrol eksekusi tool.

EffortLevel

Tingkat usaha untuk membimbing kedalaman thinking.

CanUseTool

Type alias untuk fungsi callback izin tool.
Callback menerima:
  • tool_name: Nama tool yang sedang dipanggil
  • input_data: Parameter input tool
  • context: ToolPermissionContext dengan informasi tambahan
Mengembalikan PermissionResult (baik PermissionResultAllow atau PermissionResultDeny). Callback adalah pengganti SDK untuk prompt izin interaktif: dipanggil hanya ketika alur evaluasi izin diselesaikan ke prompt. Panggilan tool yang sudah disetujui oleh entri allowed_tools, aturan allow pengaturan, atau mode izin, seperti acceptEdits atau bypassPermissions, tidak pernah memanggilnya. Untuk gating setiap panggilan tool, gunakan hook PreToolUse sebagai gantinya. AskUserQuestion, tool MCP yang ditandai requiresUserInteraction, dan connector tools organisasi Anda atur ke ask mencapai callback bahkan ketika aturan allow cocok. Dalam mode dontAsk panggilan ini ditolak sebagai gantinya, tanpa memanggil callback.

ToolPermissionContext

Informasi konteks yang diteruskan ke callback izin tool.

PermissionResult

Tipe union untuk hasil callback izin.

PermissionResultAllow

Hasil yang menunjukkan panggilan tool harus diizinkan.

PermissionResultDeny

Hasil yang menunjukkan panggilan tool harus ditolak.

PermissionUpdate

Konfigurasi untuk memperbarui izin secara programatis.

PermissionRuleValue

Aturan untuk ditambahkan, diganti, atau dihapus dalam pembaruan izin.

ToolsPreset

Konfigurasi preset tools untuk menggunakan set tool default Claude Code.

ThinkingConfig

Mengontrol perilaku extended thinking. Union dari tiga konfigurasi:
Field opsional display mengontrol apakah teks thinking dikembalikan "summarized" atau "omitted". Pada Claude Opus 4.7 dan lebih baru, default API adalah "omitted", jadi atur "summarized" untuk menerima konten thinking dalam output ThinkingBlock. Karena ini adalah kelas TypedDict, mereka adalah dict biasa saat runtime. Baik buatlah sebagai dict literal atau panggil kelas seperti konstruktor; keduanya menghasilkan dict. Akses field dengan config["budget_tokens"], bukan config.budget_tokens:

SdkBeta

Tipe literal untuk fitur beta SDK.
Gunakan dengan field betas dalam ClaudeAgentOptions untuk mengaktifkan fitur beta.
Beta context-1m-2025-08-07 sudah pensiun sejak 30 April 2026. Melewatkan header ini dengan Claude Sonnet 4.5 atau Sonnet 4 tidak berpengaruh, dan permintaan yang melebihi jendela konteks standar 200k-token mengembalikan error. Untuk menggunakan jendela konteks 1M-token, migrasikan ke Claude Sonnet 5, Claude Sonnet 4.6, Claude Opus 4.6, Claude Opus 4.7, atau Claude Opus 4.8, yang mencakup konteks 1M pada harga standar tanpa header beta yang diperlukan.

McpSdkServerConfig

Konfigurasi untuk server MCP SDK yang dibuat dengan create_sdk_mcp_server().

McpServerConfig

Tipe union untuk konfigurasi server MCP.

McpStdioServerConfig

McpSSEServerConfig

McpHttpServerConfig

McpServerStatusConfig

Konfigurasi server MCP seperti yang dilaporkan oleh get_mcp_status(). Ini adalah union dari semua varian transport McpServerConfig ditambah varian output-only claudeai-proxy untuk server yang di-proxy melalui claude.ai.
McpSdkServerConfigStatus adalah bentuk yang dapat diserialisasi dari McpSdkServerConfig dengan hanya field type ("sdk") dan name (str); instance dalam proses dihilangkan. McpClaudeAIProxyServerConfig memiliki field type ("claudeai-proxy"), url (str), dan id (str).

McpStatusResponse

Respons dari ClaudeSDKClient.get_mcp_status(). Membungkus daftar status server di bawah kunci mcpServers.

McpServerStatus

Status server MCP yang terhubung, terdapat dalam McpStatusResponse.

SdkPluginConfig

Konfigurasi untuk memuat plugins dalam SDK.
Contoh:
Untuk informasi lengkap tentang membuat dan menggunakan plugins, lihat Plugins.

Tipe Pesan

Message

Tipe union dari semua pesan yang mungkin.

UserMessage

Pesan input pengguna.

AssistantMessage

Pesan respons asisten dengan blok konten.

AssistantMessageError

Tipe error yang mungkin untuk pesan asisten.

SystemMessage

Pesan sistem dengan metadata.

ResultMessage

Pesan hasil akhir dengan informasi biaya dan penggunaan.
Field subtype menentukan field mana yang lainnya diisi. Ini adalah salah satu dari "success", "error_during_execution", "error_max_turns", "error_max_budget_usd", atau "error_max_structured_output_retries". Dataclass Python meratakan semua varian menjadi satu bentuk, jadi field yang tidak berlaku untuk subtype yang dikembalikan adalah None. Beberapa field membawa detail diagnostik ketika percakapan berakhir dengan error:
  • is_error: True ketika percakapan berakhir dalam status error. Selalu True pada subtype error_*. Pada subtype="success" ini adalah True ketika permintaan model terakhir gagal, berarti loop agen selesai tetapi panggilan API terakhir mengembalikan error.
  • api_error_status: kode status HTTP dari error API yang mengakhiri. None ketika putaran berakhir tanpa satu. Diisi hanya pada subtype="success".
  • result: teks pesan asisten terakhir pada subtype="success", atau None pada subtype error_*. Ketika subtype="success" dan is_error=True, ini menyimpan string error API jika tersedia tetapi dapat kosong, jadi periksa api_error_status dan konten AssistantMessage sebelumnya untuk detail.
  • errors: string error tingkat loop seperti pesan max-turns. Diisi hanya pada subtype error_*.
Dict usage berisi kunci berikut ketika ada: Dict model_usage memetakan nama model ke penggunaan per-model. Kunci dict dalam menggunakan camelCase karena nilai diteruskan tanpa modifikasi dari proses CLI yang mendasar, cocok dengan tipe ModelUsage TypeScript:

StreamEvent

Event stream untuk pembaruan pesan parsial selama streaming. Hanya diterima ketika include_partial_messages=True dalam ClaudeAgentOptions. Impor via from claude_agent_sdk.types import StreamEvent.

RateLimitEvent

Dipancarkan ketika status rate limit berubah (misalnya, dari "allowed" ke "allowed_warning"). Gunakan ini untuk memperingatkan pengguna sebelum mereka mencapai batas keras, atau untuk mundur ketika status adalah "rejected".

RateLimitInfo

Status rate limit yang dibawa oleh RateLimitEvent.

TaskStartedMessage

Dipancarkan ketika tugas latar belakang dimulai. Tugas latar belakang adalah apa pun yang dilacak di luar putaran utama: perintah Bash yang di-background, Monitor watch, subagent yang dihasilkan melalui tool Agent, atau agent jarak jauh. Field task_type memberi tahu Anda yang mana. Penamaan ini tidak terkait dengan penggantian nama tool Task-ke-Agent.

TaskUsage

Data token dan timing untuk tugas latar belakang.

TaskProgressMessage

Dipancarkan secara berkala dengan pembaruan kemajuan untuk tugas latar belakang yang sedang berjalan.

TaskNotificationMessage

Dipancarkan ketika tugas latar belakang selesai, gagal, atau dihentikan. Tugas latar belakang termasuk perintah Bash run_in_background, Monitor watches, dan subagent latar belakang.

Tipe Blok Konten

ContentBlock

Tipe union dari semua blok konten.

TextBlock

Blok konten teks.

ThinkingBlock

Blok konten thinking (untuk model dengan kemampuan thinking).

ToolUseBlock

Blok permintaan penggunaan tool.

ToolResultBlock

Blok hasil eksekusi tool.

Tipe Error

ClaudeSDKError

Kelas exception dasar untuk semua error SDK.

CLINotFoundError

Diangkat ketika Claude Code CLI tidak diinstal atau tidak ditemukan.

CLIConnectionError

Diangkat ketika koneksi ke Claude Code gagal.

ProcessError

Diangkat ketika proses Claude Code gagal.

CLIJSONDecodeError

Diangkat ketika parsing JSON gagal.

Tipe Hook

Untuk panduan komprehensif tentang menggunakan hooks dengan contoh dan pola umum, lihat Hooks guide.

HookEvent

Tipe event hook yang didukung.
SDK TypeScript mendukung event hook tambahan yang belum tersedia di Python: SessionStart, SessionEnd, Setup, TeammateIdle, TaskCompleted, ConfigChange, WorktreeCreate, WorktreeRemove, PostToolBatch, dan MessageDisplay.

HookCallback

Definisi tipe untuk fungsi callback hook.
Parameter:
  • input: Input hook yang kuat dengan union yang dibedakan berdasarkan hook_event_name (lihat HookInput)
  • tool_use_id: Pengenal penggunaan tool opsional (untuk hook terkait tool)
  • context: Konteks hook dengan informasi tambahan
Mengembalikan HookJSONOutput yang mungkin berisi:
  • decision: "block" untuk memblokir tindakan
  • systemMessage: Pesan peringatan yang ditampilkan kepada pengguna
  • hookSpecificOutput: Data output spesifik hook

HookContext

Informasi konteks yang diteruskan ke callback hook.

HookMatcher

Konfigurasi untuk mencocokkan hooks ke event atau tools tertentu.

HookInput

Tipe union dari semua tipe input hook. Tipe aktual bergantung pada field hook_event_name.

BaseHookInput

Field dasar yang ada di semua tipe input hook.

PreToolUseHookInput

Data input untuk event hook PreToolUse.

PostToolUseHookInput

Data input untuk event hook PostToolUse.

PostToolUseFailureHookInput

Data input untuk event hook PostToolUseFailure. Dipanggil ketika eksekusi tool gagal.

UserPromptSubmitHookInput

Data input untuk event hook UserPromptSubmit.

StopHookInput

Data input untuk event hook Stop.

SubagentStopHookInput

Data input untuk event hook SubagentStop.

PreCompactHookInput

Data input untuk event hook PreCompact.

NotificationHookInput

Data input untuk event hook Notification.

SubagentStartHookInput

Data input untuk event hook SubagentStart.

PermissionRequestHookInput

Data input untuk event hook PermissionRequest. Memungkinkan hooks untuk menangani keputusan izin secara programatis.

HookJSONOutput

Tipe union untuk nilai pengembalian callback hook.

SyncHookJSONOutput

Output hook sinkron dengan field kontrol dan keputusan.
Gunakan continue_ (dengan underscore) dalam kode Python. Ini secara otomatis dikonversi ke continue ketika dikirim ke CLI.

HookSpecificOutput

TypedDict yang berisi nama event hook dan field spesifik event. Bentuknya bergantung pada nilai hookEventName. Untuk detail lengkap tentang field yang tersedia per event hook, lihat Control execution with hooks. Union yang dibedakan dari tipe output spesifik event. Field hookEventName menentukan field mana yang valid.

AsyncHookJSONOutput

Output hook async yang menunda eksekusi hook.
Gunakan async_ (dengan underscore) dalam kode Python. Ini secara otomatis dikonversi ke async ketika dikirim ke CLI.

Contoh Penggunaan Hook

Contoh ini mendaftarkan dua hooks: satu yang memblokir perintah bash berbahaya seperti rm -rf /, dan satu lagi yang mencatat semua penggunaan tool untuk audit. Hook keamanan hanya berjalan pada perintah Bash (melalui matcher), sementara hook logging berjalan pada semua tools.

Tipe Input/Output Tool

Dokumentasi skema input/output untuk semua tools Claude Code bawaan. Meskipun Python SDK tidak mengekspor ini sebagai tipe, mereka mewakili struktur input dan output tool dalam pesan.

Agent

Nama tool: Agent (sebelumnya Task, yang masih diterima sebagai alias) Input:
Output:

AskUserQuestion

Nama tool: AskUserQuestion Mengajukan pertanyaan klarifikasi kepada pengguna selama eksekusi. Lihat Handle approvals and user input untuk detail penggunaan. Input:
Output:

Bash

Nama tool: Bash Input:
Output:

Monitor

Nama tool: Monitor Menjalankan sumber latar belakang dan mengirimkan setiap event ke Claude sehingga dapat bereaksi tanpa polling: command menjalankan skrip dan mengeluarkan satu event per baris stdout, dan ws membuka WebSocket dan mengeluarkan satu event per frame teks. Berikan tepat satu dari command atau ws. Ketika Monitor menjalankan perintah, ia mengikuti aturan izin yang sama seperti Bash; pengawasan WebSocket meminta persetujuan secara terpisah. Sumber ws memerlukan Claude Code v2.1.195 atau lebih baru. Lihat Monitor tool reference untuk perilaku dan ketersediaan penyedia. Input:
Output:

Edit

Nama tool: Edit Input:
Output:

Read

Nama tool: Read Input:
Output (File teks):
Output (Gambar):

Write

Nama tool: Write Input:
Output:

Glob

Nama tool: Glob Input:
Output:

Grep

Nama tool: Grep Input:
Output (content mode):
Output (files_with_matches mode):

NotebookEdit

Nama tool: NotebookEdit Input:
Output:

WebFetch

Nama tool: WebFetch Input:
Output:

WebSearch

Nama tool: WebSearch Input:
Output:

TodoWrite

Nama tool: TodoWrite
Mulai dari Claude Code v2.1.142, TodoWrite dinonaktifkan secara default. Gunakan TaskCreate, TaskGet, TaskUpdate, dan TaskList sebagai gantinya. Lihat Migrate to Task tools untuk memperbarui kode pemantauan Anda, atau atur CLAUDE_CODE_ENABLE_TASKS=0 untuk kembali ke TodoWrite.
Input:
Output:

TaskCreate

Nama tool: TaskCreate Input:
Output:

TaskUpdate

Nama tool: TaskUpdate Input:
Output:

TaskGet

Nama tool: TaskGet Input:
Output:

TaskList

Nama tool: TaskList Input:
Output:

BashOutput

Nama tool: BashOutput Input:
Output:

KillBash

Nama tool: KillBash Input:
Output:

ExitPlanMode

Nama tool: ExitPlanMode Input:
Output:

ListMcpResources

Nama tool: ListMcpResourcesTool Input:
Output:

ReadMcpResource

Nama tool: ReadMcpResourceTool Input:
Output:

Fitur Lanjutan dengan ClaudeSDKClient

Membangun Antarmuka Percakapan Berkelanjutan

Menggunakan Hooks untuk Modifikasi Perilaku

Pemantauan Kemajuan Real-time

Contoh Penggunaan

Operasi file dasar (menggunakan query)

Penanganan error

Mode streaming dengan klien

Menggunakan tools kustom dengan ClaudeSDKClient

Konfigurasi Sandbox

SandboxSettings

Konfigurasi untuk perilaku sandbox. Gunakan ini untuk mengaktifkan sandboxing perintah dan mengonfigurasi pembatasan jaringan secara programatis.
Sandbox bergantung pada dukungan platform dan, di Linux, alat seperti bubblewrap dan socat. Secara default, ketika enabled adalah True tetapi sandbox tidak dapat dimulai, perintah berjalan tanpa sandbox dengan peringatan di stderr. Default ini berbeda dari SDK TypeScript, di mana failIfUnavailable default ke true.Atur "failIfUnavailable": True dalam pengaturan sandbox Anda untuk berhenti sebagai gantinya. Kunci belum dideklarasikan pada SandboxSettings namun, tetapi SDK meneruskannya ke Claude Code, yang menghormatinya. query() kemudian melaporkan ResultMessage dengan subtype="error_during_execution" dan alasannya dalam errors. Perhatikan subtype itu daripada mengharapkan query() untuk menaikkan sebelum menghasilkan pesan.

Contoh penggunaan

Keamanan Unix socket: Opsi allowUnixSockets dapat memberikan akses ke layanan sistem yang kuat. Misalnya, mengizinkan /var/run/docker.sock secara efektif memberikan akses sistem host penuh melalui API Docker, melewati isolasi sandbox. Hanya izinkan Unix sockets yang benar-benar diperlukan dan pahami implikasi keamanan dari masing-masing.

SandboxNetworkConfig

Konfigurasi spesifik jaringan untuk mode sandbox. Pengaturan ini berlaku untuk perintah Bash dalam sandbox ketika enabled adalah True dalam SandboxSettings induk. Mereka tidak membatasi tool WebFetch, yang menggunakan aturan izin sebagai gantinya.
Proxy sandbox bawaan memberlakukan daftar izin jaringan berdasarkan nama host yang diminta dan tidak menghentikan atau memeriksa lalu lintas TLS, sehingga teknik seperti domain fronting dapat berpotensi melewatinya. Lihat Batasan keamanan sandboxing untuk detail dan Penyebaran aman untuk mengonfigurasi proxy yang menghentikan TLS.

SandboxIgnoreViolations

Konfigurasi untuk mengabaikan pelanggaran sandbox tertentu.

Fallback Izin untuk Perintah Tanpa Sandbox

Ketika allowUnsandboxedCommands diaktifkan, model dapat meminta untuk menjalankan perintah di luar sandbox dengan mengatur dangerouslyDisableSandbox: True dalam input tool. Permintaan ini jatuh kembali ke sistem izin yang ada, berarti handler can_use_tool Anda akan dipanggil, memungkinkan Anda menerapkan logika otorisasi kustom.
excludedCommands vs allowUnsandboxedCommands:
  • excludedCommands: Daftar statis perintah yang selalu melewati sandbox secara otomatis (misalnya, ["docker"]). Model tidak memiliki kontrol atas ini.
  • allowUnsandboxedCommands: Memungkinkan model memutuskan saat runtime apakah akan meminta eksekusi tanpa sandbox dengan mengatur dangerouslyDisableSandbox: True dalam input tool.
Pola ini memungkinkan Anda untuk:
  • Audit permintaan model: Catat ketika model meminta eksekusi tanpa sandbox
  • Implementasikan allowlist: Hanya izinkan perintah tertentu untuk berjalan tanpa sandbox
  • Tambahkan alur persetujuan: Memerlukan otorisasi eksplisit untuk operasi istimewa
Perintah yang berjalan dengan dangerouslyDisableSandbox: True memiliki akses sistem penuh. Pastikan handler can_use_tool Anda memvalidasi permintaan ini dengan hati-hati.Jika permission_mode diatur ke bypassPermissions dan allow_unsandboxed_commands diaktifkan, model dapat secara otonom menjalankan perintah di luar sandbox tanpa prompt persetujuan apa pun. Kombinasi ini secara efektif memungkinkan model untuk melarikan diri dari isolasi sandbox secara diam-diam.

Lihat juga