Instalasi
Instal paket ke dalam lingkungan virtual. Pada instalasi Python Debian, Ubuntu, dan Homebrew terbaru, menjalankanpip install terhadap Python sistem gagal dengan error: externally-managed-environment.
Memilih antara query() dan ClaudeSDKClient
Python SDK menyediakan dua cara untuk berinteraksi dengan Claude Code:
Gunakan
ClaudeSDKClient untuk aplikasi interaktif seperti antarmuka obrolan, atau ketika tindakan berikutnya bergantung pada respons Claude.
Fungsi
Blok signature dan fragmen
async for / async with bare di halaman ini bersifat ilustratif. Untuk menjalankannya, bungkus badan dalam async def main(): ... dan panggil asyncio.run(main()).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
MengembalikanAsyncIterator[Message] yang menghasilkan pesan dari percakapan.
Contoh - Dengan opsi
tool()
Dekorator untuk mendefinisikan tools MCP dengan keamanan tipe.
Parameter
Opsi skema input
-
Pemetaan tipe sederhana (direkomendasikan):
-
Format JSON Schema (untuk validasi kompleks):
-
Kelas TypedDict: skema bertipe yang kunci
NotRequired-nya tidak dimasukkan ke dalamrequired.- Python 3.11 dan yang lebih baru: impor
TypedDictdanNotRequireddarityping. - Python 3.10:
typingtidak memilikiNotRequired. ImporTypedDictdanNotRequireddarityping_extensions, yang diinstal oleh SDK pada Python 3.10.
- Python 3.11 dan yang lebih baru: impor
Annotated[type, "description"] untuk menetapkan deskripsi field.
Pengembalian
Fungsi dekorator yang membungkus implementasi tool dan mengembalikan instanceSdkMcpTool.
Contoh
ToolAnnotations
Petunjuk perilaku untuk tool, diteruskan sebagai argumen annotations dari tool(). ToolAnnotations memperluas mcp.types.ToolAnnotations SDK MCP dengan field maxResultSizeChars, dan Anda dapat menulis setiap petunjuk dalam camelCase atau snake_case: ToolAnnotations(readOnlyHint=True) dan ToolAnnotations(read_only_hint=True) adalah setara. Untuk membaca kembali petunjuk dari objek, gunakan ejaan yang dideklarasikan oleh paket mcp yang terinstal: .readOnlyHint pada mcp 1.x dan .read_only_hint pada 2.x, sedangkan .maxResultSizeChars berfungsi pada keduanya. Anda juga dapat melewatkan mcp.types.ToolAnnotations biasa di mana pun SDK menerima anotasi.
Nama snake_case dan field maxResultSizeChars yang diketik memerlukan Python Agent SDK 0.2.140 atau lebih baru. Versi 0.1.31 hingga 0.2.139 mengekspor ulang mcp.types.ToolAnnotations tanpa perubahan. Pada versi 0.1.55 hingga 0.2.139 Anda masih dapat melewatkan maxResultSizeChars sebagai argumen kata kunci: kelas MCP menerima field tambahan, dan SDK meneruskan nilai ke Claude Code.
Semua field bersifat opsional. Klien tidak boleh mengandalkan petunjuk untuk keputusan keamanan.
create_sdk_mcp_server()
Buat server MCP dalam proses yang berjalan dalam aplikasi Python Anda.
Parameter
Pengembalian
Mengembalikan objekMcpSdkServerConfig 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 berdasarkanlast_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 diSDKSessionInfo.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. TeruskanNone untuk menghapus tag yang ada.
fork_session()
Menyalin transkrip sesi ke dalam sesi baru sehingga Anda dapat membawa percakapan ke arah lain sementara sesi asli tetap tidak berubah. Untuk bercabang dari titik sebelumnya dalam percakapan, teruskan up_to_message_id. Sinkron.
Parameter
Mengembalikan
ForkSessionResult yang session_id-nya adalah UUID sesi baru. Teruskan sebagai resume untuk melanjutkan fork. Fork tidak menyertakan file checkpoint sesi asli, sehingga Anda tidak dapat memutar balik fork ke checkpoint yang diambil sebelum fork.
fork_session() menimbulkan:
ValueError:session_idatauup_to_message_idbukan UUID yang validValueError: sesi tidak memiliki pesan, atauup_to_message_idtidak cocok dengan pesan mana pun dalam transkripFileNotFoundError: sesi tidak dapat ditemukan
Contoh
Fork sesi terbaru dengan judul baru, lalu lanjutkan fork tersebut. Sesi asli tetap menyimpan riwayatnya sendiri.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. Lihat perbandingan dengan query().
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
query() juga menerima async iterable dari dict pesan pengguna, sehingga Anda dapat merakit prompt pada waktu pengiriman atau menyertakan blok konten seperti gambar. Claude Code mulai merespons pesan pertama yang dihasilkan segera setelah tiba, tanpa menunggu iterable selesai, dan receive_response() berhenti pada ResultMessage yang mengakhiri respons tersebut. Masukkan semua yang harus dibaca Claude sebelum menjawab ke dalam satu pesan, seperti yang dilakukan generator ini, dan pasangkan setiap panggilan query() dengan loop receive_response() miliknya sendiri.
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, 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).
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 environment variable yang mengontrol timeout API dan deteksi stall. Teruskan melaluiClaudeAgentOptions.env:
-
API_TIMEOUT_MS: timeout per-permintaan pada klien Anthropic, dalam milidetik. Default600000. Berlaku untuk loop utama dan semua subagent. -
CLAUDE_CODE_MAX_RETRIES: maksimal retry API. Default10, dibatasi pada15. Setiap retry mendapat jendelaAPI_TIMEOUT_MSsendiri. Untuk run tanpa pengawasan yang perlu menunggu melalui pemadaman yang lebih lama, aturCLAUDE_CODE_RETRY_WATCHDOG=1: itu mencoba ulang error kapasitas transien tanpa batas dan, pada Claude Code v2.1.199 atau lebih baru, menaikkan default untuk error transien lainnya menjadi300dan menghapus batas pada variabel ini. -
CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: watchdog stall untuk subagent. Sementara watchdog stream aktif, default adalahCLAUDE_STREAM_IDLE_TIMEOUT_MSditambah 5 menit, yang menjadi600000kecuali Anda menaikkan variabel itu. Dengan watchdog stream mati, default adalah600000. Sebelum v2.1.257, default selalu600000. Timer direset pada setiap event stream. Pada stall, Claude Code membatalkan subagent dan melaporkan stall ke parent. Untuk subagent latar belakang, itu juga menandai tugas gagal dan melampirkan hasil parsial apa pun. -
CLAUDE_ENABLE_STREAM_WATCHDOGdenganCLAUDE_STREAM_IDLE_TIMEOUT_MS: watchdog stream yang membatalkan permintaan ketika header telah tiba tetapi badan respons berhenti streaming. Watchdog aktif secara default untuk semua penyedia; aturCLAUDE_ENABLE_STREAM_WATCHDOG=0untuk menonaktifkannya.CLAUDE_STREAM_IDLE_TIMEOUT_MSdefault ke300000dan diklem ke minimum itu. Setelah pembatalan, Automatic retries mencakup apa yang Claude Code lakukan, berdasarkan seberapa jauh respons telah maju. Sementara watchdog menunggu respons yang gateway di belakangANTHROPIC_BASE_URLtahan terbuka dengan keep-alive pings, host yang mengaturinclude_partial_messagesterus menerima pesanpingStreamEvent. Baca frame tersebut sebagai liveness daripada timeout sesi pada keheningan. Sebelum v2.1.257, frame berhenti 5 menit setelah event stream nyata terakhir.
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.
SystemPromptCustom
System prompt kustom dalam bentuk objek, setara dengan melewatkan string sebagai system_prompt, yang juga dapat mengatur snapshot. Memerlukan claude-agent-sdk v0.2.153 atau lebih baru.
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
Ketikasetting_sources dihilangkan atau None dan skills tidak diatur, query() memuat pengaturan filesystem yang sama seperti CLI Claude Code: pengguna, proyek, dan lokal. Dengan skills diatur, baris setting_sources menjelaskan default saat ini. Pengaturan kebijakan terkelola endpoint dimuat dalam semua kasus; pengaturan yang dikelola server diambil ketika sesi mengautentikasi dengan kredensial organisasi pada konfigurasi yang memenuhi syarat. Untuk informasi lebih lanjut, lihat Apa yang tidak dikontrol settingSources.
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."project" dalam setting_sources. Lihat Modify system prompts untuk cara loading CLAUDE.md berinteraksi dengan opsi system prompt.
Prioritas pengaturan
Ketika beberapa sumber dimuat, pengaturan digabungkan dengan urutan prioritas ini (tertinggi ke terendah):- Pengaturan lokal (
.claude/settings.local.json) - Pengaturan proyek (
.claude/settings.json) - Pengaturan pengguna (
~/.claude/settings.json)
agents, allowed_tools, dan settings menimpa pengaturan filesystem pengguna, proyek, dan lokal. Pengaturan kebijakan terkelola diutamakan daripada 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 effort untuk membimbing kedalaman thinking.
CanUseTool
Type alias untuk fungsi callback izin tool.
tool_name: Nama tool yang sedang dipanggilinput_data: Parameter input toolcontext:ToolPermissionContextdengan informasi tambahan
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.
Aturan allow tidak pre-approve tindakan yang tidak ada mode auto-approve; lihat How permissions are evaluated untuk mana dari mereka yang mencapai callback dan apa yang terjadi dalam mode dontAsk dan auto.
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. Claude Code tidak meneruskan nilai display Anda ke beberapa penyedia, seperti Amazon Bedrock dan Google Cloud’s Agent Platform. Pada penyedia tersebut, Opus 4.7 dan lebih baru mengembalikan output ThinkingBlock kosong bahkan ketika Anda mengatur display ke "summarized".
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:
TaskBudget
Budget tugas sisi API dalam token, digunakan dengan field task_budget dalam ClaudeAgentOptions.
Karena ini adalah
TypedDict, teruskan sebagai dict biasa, seperti ClaudeAgentOptions(task_budget={"total": 50000}).
SdkBeta
Tipe literal untuk fitur beta SDK.
betas dalam ClaudeAgentOptions untuk mengaktifkan fitur beta.
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.
ContextUsageResponse
Respons dari ClaudeSDKClient.get_context_usage(). Ini adalah payload yang sama yang Claude Code render untuk perintah /context dalam sesi interaktif, jadi di samping hitungan token itu membawa field tampilan seperti color dan gridRows yang Claude Code gunakan untuk menggambar grid penggunaan /context.
Claude Code membangun payload ini dengan mengirim beberapa permintaan ke API token-counting. Permintaan ini tidak muncul dalam aliran pesan, jadi pelacakan biaya yang membaca aliran tidak akan melihatnya. Pada Anthropic API, penghitungan token tidak ditagih.
ContextUsageCategory membawa name, tokens, color, dan flag isDeferred opsional. totalTokens adalah penggunaan konteks sesi saat ini, dan maxTokens adalah window yang penggunaan diukur terhadapnya. Window itu adalah context window model, atau window auto-compaction yang lebih rendah ketika satu berlaku, dan rawMaxTokens membawa nilai yang sama dengan maxTokens. apiUsage menyimpan penggunaan dari respons API terbaru, bukan total berjalan untuk sesi. Claude Code meninggalkan key deferredBuiltinTools, systemTools, dan systemPromptSections opsional yang tidak diatur, jadi harapkan mereka tidak ada bahkan meskipun tipe mendeklarasikannya.
SdkPluginConfig
Konfigurasi untuk memuat plugins dalam SDK.
Contoh:
Tipe Pesan
Message
Tipe union dari semua pesan yang mungkin.
UserMessage
Pesan input pengguna.
SDK melewatkan
tool_use_result melalui dari CLI tanpa modifikasi. Untuk tool pada server MCP eksternal yang hasilnya berisi blok resource_link, dict memiliki kunci resourceLinks yang menyimpan daftar dict dengan kunci dari tipe TypeScript SDKMcpResourceLink. Claude menerima setiap link sebagai baris teks dalam hasil tool. Untuk merender file yang dikembalikan server, baca resourceLinks alih-alih mengurai teks itu. Kunci resourceLinks memerlukan Python Agent SDK 0.2.150 atau lebih baru dan Claude Code v2.1.257 atau lebih baru; CLI yang dibundel dengan versi SDK itu memenuhi persyaratan Claude Code.
CLI menghilangkan kunci ketika hasil tidak memiliki link dan pada hasil dari subagent. CLI menyimpan paling banyak 50 link per hasil dan berhenti menambahkan link setelah daftar mencapai 64 KiB JSON yang diserialisasi. Tool yang Anda tentukan dalam proses dengan tool() tidak pernah menghasilkan kunci, karena SDK meratakan blok resource_link menjadi teks sebelum CLI melihat hasil.
AssistantMessage
Pesan respons asisten dengan blok konten.
AssistantMessageError
Tipe error yang mungkin untuk pesan asisten.
max_output_tokens. SDK melewatkan nilai tanpa modifikasi, jadi perlakukan string di luar daftar ini seperti Anda memperlakukan unknown. Tipe TypeScript SDKAssistantMessageError mencantumkan set lengkap nilai yang dapat dipancarkan CLI.
SystemMessage
Pesan sistem dengan metadata.
SystemMessage. Untuk mengikuti sesi di antara giliran, atur CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS=1 dan baca message.data["state"] pada setiap pesan yang subtype-nya adalah session_state_changed. SDKSessionStateChangedMessage mencantumkan status yang dapat dibawanya. Lakukan iterasi dengan receive_messages() untuk membacanya: receive_response() berhenti pada ResultMessage, dan pesan session_state_changed dapat menyusul hasil tersebut.
ResultMessage
Pesan hasil akhir dengan informasi biaya dan penggunaan.
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 tentang bagaimana percakapan berakhir:
is_error:Trueketika percakapan berakhir dalam status error. SelaluTruepada subtypeerror_*. Padasubtype="success"ini adalahTrueketika permintaan model terakhir gagal, berarti loop agent selesai tetapi panggilan API terakhir mengembalikan error.api_error_status: kode status HTTP dari error API yang mengakhiri.Noneketika giliran berakhir tanpa satu. Diisi hanya padasubtype="success".result: teks pesan asisten terakhir padasubtype="success", atauNonepada subtypeerror_*. Ketikasubtype="success"danis_error=True, ini menyimpan string error API jika tersedia tetapi dapat kosong, jadi periksaapi_error_statusdan kontenAssistantMessagesebelumnya untuk detail.errors: string error tingkat loop seperti pesan max-turns. Diisi hanya pada subtypeerror_*.terminal_reason: mengapa loop query berakhir, seperti"completed","max_turns","api_error","aborted_streaming", atau"aborted_tools". Nilai"aborted_streaming"atau"aborted_tools"berarti giliran dibatalkan sebelum selesai. Penyebab umum adalahinterrupt()dan callback izin mengembalikanPermissionResultDenydenganinterrupt=True.Nonepada versi CLI yang mendahului field, pada hasil dari perintah lokal seperti/voiceatau/usage, yang melewati loop query, atau pada hasil error yang disintesis yang dipancarkan ketika sesi gagal secara fatal. MencerminkanSDKResultMessage.terminal_reasonSDK TypeScript, yang mencantumkan set lengkap nilai.origin: asal pesan pengguna yang memicu giliran ini. Dalam mode input streaming, periksa ini untuk membedakan hasil prompt Anda sendiri, di manaoriginadalahNoneatau{"kind": "human"}, dari hasil giliran yang disuntikkan seperti notifikasi tugas latar belakang. Memerlukan Python Agent SDK 0.2.137 atau lebih baru.
ResultMessage per notifikasi, secara berurutan, masing-masing dengan origin yang kind-nya adalah "task-notification". Semua kecuali yang terakhir memiliki num_turns yang diatur ke 0 dan result yang kosong, dan yang terakhir membawa giliran yang menjawab semuanya.
Dict usage mencakup loop agent utama saja dan mengecualikan subagent dan panggilan model bersarang atau tambahan lainnya. Dalam mode input streaming, nilainya per-giliran. Lebih suka model_usage untuk akuntansi token dan biaya. Dict usage berisi kunci berikut ketika ada:
Dict
model_usage memetakan nama model ke penggunaan per-model. Ini mencakup setiap panggilan model yang dibuat melalui pipeline query: loop utama, subagent, dan panggilan internal seperti compaction dan Workflow agents. Panggilan helper di luar pipeline itu, seperti pengklasifikasi izin dan permintaan penghitungan token, dikecualikan dari model_usage. Perlakukan model_usage sebagai perkiraan, bukan pernyataan penagihan.
Dalam mode input streaming, model_usage dan total_cost_usd adalah kumulatif di seluruh giliran, jadi baca hasil terbaru daripada menjumlahkan di seluruh hasil. Panggilan yang melanjutkan sesi juga menghitung total yang dipulihkan dari panggilan sebelumnya sesi. Lihat Track costs in streaming input mode untuk reset dan Recover totals after a session crash untuk hasil yang dinolkan.
Setiap nilai dalam model_usage adalah TypedDict ModelUsage, diimpor melalui from claude_agent_sdk.types import ModelUsage. Kuncinya menggunakan camelCase karena SDK melewatkan nilai tanpa modifikasi dari proses CLI yang mendasar, cocok dengan tipe TypeScript ModelUsage:
StreamEvent
Event stream untuk pembaruan pesan parsial selama streaming. Hanya diterima ketika include_partial_messages=True dalam ClaudeAgentOptions. Impor melalui 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.
ConversationResetMessage
Dipancarkan ketika percakapan diganti tanpa mengakhiri koneksi, seperti setelah /clear. Lihat Track costs in streaming input mode untuk bagaimana reset mempengaruhi total yang berjalan pada objek ResultMessage berikutnya. Memerlukan Python Agent SDK 0.2.137 atau lebih baru.
TaskStartedMessage
Dipancarkan ketika tugas latar belakang dimulai. Tugas latar belakang adalah apa pun yang dilacak di luar giliran 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.
Ketika CLI memindahkan panggilan tool MCP yang panjang ke latar belakang, hasil tool untuk panggilan itu hanya menyimpan placeholder dan hasil nyata panggilan tiba dalam pesan ini. Pada notifikasi
"completed" untuk panggilan seperti itu, CLI menambahkan kunci resource_links yang mencantumkan file yang dikembalikan tool dengan referensi, dengan entri dan batas yang sama seperti kunci resourceLinks pada UserMessage.tool_use_result. Kunci resource_links memerlukan Python Agent SDK 0.2.150 atau lebih baru dan Claude Code v2.1.257 atau lebih baru; CLI yang dibundel dengan versi SDK itu memenuhi persyaratan Claude Code.
Dataclass tidak memiliki field untuk resource_links. Bacanya dari dict data yang diwariskan pesan dari SystemMessage: message.data.get("resource_links"). Cocokkan notifikasi dengan panggilan menggunakan tool_use_id. CLI menghilangkan kunci ketika hasil tidak memiliki link dan pada notifikasi untuk tugas yang bukan panggilan tool MCP.
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
Tipe-tipe di bawah ini mendefinisikan apa yang ditangkap kode Anda. Untuk entri yang dikunci ke pesan error yang diangkat tipe-tipe ini, dengan penyebab dan perbaikan untuk masing-masing, lihat Troubleshooting.ClaudeSDKError
Kelas exception dasar untuk semua error SDK.
query() single-shot berakhir dengan hasil error, misalnya error turn-limit, SDK mengangkat ResultError.
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.
ResultError
Diangkat ketika proses Claude Code keluar karena run berakhir dengan pesan hasil error, seperti error turn-limit atau error API. ResultError adalah subkelas ProcessError, jadi handler except ProcessError yang sudah ada juga menangkapnya. Atributnya membawa bidang-bidang dari pesan hasil tersebut, sehingga Anda dapat membuat cabang tentang mengapa run gagal tanpa mengurai teks pesan. Memerlukan Python Agent SDK 0.2.140 atau lebih baru.
terminal_reason sebelum subtype. Ketika permintaan akhir gagal, seperti pada error API, Claude Code melaporkan subtype "success" dengan penyebab dalam terminal_reason, misalnya "api_error"; ketika batas yang Anda tetapkan mengakhiri run, seperti max_turns atau max_budget_usd, itu melaporkan subtype error_*.
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. Lihat tabel ketersediaan hook untuk dukungan per-SDK.
HookCallback
Definisi tipe untuk fungsi callback hook.
input: Input hook yang kuat dengan union yang dibedakan berdasarkanhook_event_name(lihatHookInput)tool_use_id: Pengenal penggunaan tool opsional (untuk hook terkait tool)context: Konteks hook dengan informasi tambahan
HookJSONOutput.
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
Union yang dibedakan dari tipe output spesifik event TypedDict. Field hookEventName menentukan field mana yang valid. Untuk detail lengkap tentang field yang tersedia per event hook, lihat Control execution with hooks.
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 sepertirm -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. Setiap output yang ditampilkan adalah nilai yang Anda baca dariUserMessage.tool_use_result untuk tool tersebut. Nama kunci muncul persis seperti yang dikeluarkan Claude Code. Kunci yang dianotasi | None dengan komentar “present when” atau “optional” dihilangkan ketika tidak berlaku.
Agent
Nama tool:Agent. Nama sebelumnya Task masih diterima sebagai alias, dan daftar tools dalam init SystemMessage melaporkan tool ini sebagai Task untuk kompatibilitas mundur.
Input:
"completed"):
"async_launched"):
"remote_launched"):
status: "completed" untuk tugas yang selesai, "async_launched" untuk tugas latar belakang, dan "remote_launched" untuk tugas yang Claude Code kirimkan ke sesi cloud, di mana sessionUrl menautkan ke sesi itu dan taskId mengidentifikasinya. Jika Claude Code menyimpan worktree subagent yang terisolasi, worktreePath pada varian completed adalah tempat menemukannya, dan worktreeBranch adalah branch-nya ketika Claude Code membuat worktree dengan git.
Pada varian completed, resolvedModel menamai model yang dimulai subagent, yang dapat berbeda dari input model yang diminta ketika availableModels atau override lain berlaku. Bidang ini memerlukan Claude Code v2.1.174 atau lebih baru. Pada varian async_launched, resolvedModel menamai model yang digunakan ketika agent pindah ke latar belakang, jadi swap yang terjadi sebelum backgrounding tercermin di sana. Bidang modelsUsed pada kedua varian mencantumkan model yang digunakan secara berurutan, dengan pengulangan berturut-turut yang runtuh; itu diatur hanya ketika model ditukar di tengah-run. modelsUsed dan perilaku resolvedModel saat backgrounding memerlukan Claude Code v2.1.212 atau lebih baru.
Claude Code mengisi usage dan totalTokens dari permintaan API final subagent, bukan dari seluruh run. Ketika ada, thinking_tokens di bawah output_tokens_details dalam usage adalah jumlah token output permintaan itu yang merupakan thinking token. Kunci output_tokens_details memerlukan Python SDK v0.2.136 atau lebih baru, yang menggabungkan Claude Code v2.1.228. Kunci fallback_credit memerlukan Python SDK v0.2.162 atau lebih baru, yang menggabungkan Claude Code v2.1.285.
AskUserQuestion
Nama tool:AskUserQuestion
Mengajukan pertanyaan klarifikasi kepada pengguna selama eksekusi. Lihat Handle approvals and user input untuk detail penggunaan.
Input:
Bash
Nama tool:Bash
Untuk apa yang menetapkan batas ceiling foreground, lihat Timeout and output limits. Untuk batas waktu background, lihat Time limit for background commands.
Input:
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:
Edit
Nama tool:Edit
Input:
Read
Nama tool:Read
Input:
type untuk membedakannya.
Output (type: "text"):
"image"):
"notebook"):
"pdf"):
"parts"):
"file_unchanged"):
Write
Nama tool:Write
Input:
Glob
Nama tool:Glob
Input:
totalMatches dan countIsComplete memerlukan Claude Code v2.1.191 atau lebih baru.
Grep
Nama tool:Grep
Input:
output_mode.
totalFiles memerlukan Claude Code v2.1.208 atau lebih baru. totalLines memerlukan Claude Code v2.1.210 atau lebih baru.
NotebookEdit
Nama tool:NotebookEdit
Input:
WebFetch
Nama tool:WebFetch
Input:
WebSearch
Nama tool:WebSearch
Input:
TodoWrite
Nama tool:TodoWrite
Tool berikut tersedia secara default hanya pada Claude Opus 4.7, Claude Sonnet 4.6, Claude Haiku 4.5, dan model-model sebelumnya. Pada setiap model lainnya, termasuk ID model yang tidak dikenali Claude Code, tool tersebut tidak tersedia kecuali Anda memilih untuk mengaktifkannya:
TodoWriteTaskCreateTaskGetTaskUpdateTaskList
TodoWrite sebagai gantinya ketika Anda menetapkan CLAUDE_CODE_ENABLE_TASKS=0.Set default ini berlaku di Claude Code v2.1.268 dan yang lebih baru, yang dibundel oleh TypeScript Agent SDK dari v0.3.268.Lihat Model availability untuk opt in.TaskCreate
Nama tool:TaskCreate
Input:
TaskUpdate
Nama tool:TaskUpdate
Input:
TaskGet
Nama tool:TaskGet
Input:
TaskList
Nama tool:TaskList
Input:
TaskOutput
Dihapus dalam Claude Code v2.1.277. Sebelumnya mengambil output dari tugas latar belakang yang sedang berjalan atau selesai, denganBashOutput diterima sebagai alias; Claude membaca file output tugas latar belakang dengan Read sebagai gantinya.
Entri disallowed_tools atau aturan deny yang masih menamai salah satu nama diabaikan tanpa peringatan.
TaskStop
Nama tool:TaskStop. Nama sebelumnya KillShell dan KillBash masih diterima sebagai alias.
Input:
ExitPlanMode
Nama tool:ExitPlanMode
Input:
ListMcpResources
Nama tool:ListMcpResourcesTool
Input:
tool_use_result menyimpan list untuk tool ini.
Output:
ReadMcpResource
Nama tool:ReadMcpResourceTool
Input:
Membangun antarmuka percakapan berkelanjutan
Contoh berikut menjaga satuClaudeSDKClient tetap terhubung di seluruh giliran, sehingga Claude mengingat pesan-pesan sebelumnya. Ketik new untuk memutuskan dan menghubungkan kembali untuk sesi baru, atau exit untuk mengakhiri percakapan.
Penanganan error
Contoh berikut membungkus panggilanquery() dalam penanganan untuk empat dari jenis error yang dimunculkan SDK.
Contoh ini menangkap ResultError, yang memerlukan Python Agent SDK 0.2.140 atau lebih baru.
Konfigurasi Sandbox
SandboxSettings
Konfigurasi untuk perilaku sandbox. Gunakan ini untuk mengaktifkan sandboxing perintah dan mengonfigurasi pembatasan jaringan secara terprogram.
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. SDK meneruskan failIfUnavailable ke Claude Code bersama dengan field SandboxSettings yang dideklarasikan. query() kemudian melaporkan ResultMessage dengan subtype="error_during_execution" dan alasan dalam errors. Karena ini adalah panggilan query() sekali jalan, SDK menaikkan setelah menghasilkan hasil kesalahan itu, jadi bungkus loop dalam blok try untuk melanjutkan melewatinya. Lihat Tangani hasil untuk kontrak kesalahan.denyWrite dalam pengaturan sandbox Anda, seperti "filesystem": {"denyWrite": ["/home/user/project/.env"]}. SDK meneruskan filesystem ke Claude Code bersama dengan field SandboxSettings yang dideklarasikan. Setelah sandbox dimulai, sandbox memblokir penulisan ke setiap jalur absolut yang Anda cantumkan.
Contoh penggunaan
SandboxNetworkConfig
Konfigurasi khusus jaringan untuk mode sandbox. Pengaturan ini berlaku untuk perintah Bash yang di-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 berpotensi dapat 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
KetikaallowUnsandboxedCommands diaktifkan, model dapat meminta untuk menjalankan perintah di luar sandbox dengan mengatur dangerouslyDisableSandbox: True dalam input tool. Permintaan ini kembali ke sistem izin yang ada, berarti handler can_use_tool Anda akan dipanggil, memungkinkan Anda menerapkan logika otorisasi khusus.
Entri excludedCommands Anda sebagai gantinya mengambil perintah keluar dari sandbox tanpa keterlibatan model; sandbox.excludedCommands mencakup kapan entri berlaku.
Contoh berikut mencatat setiap permintaan tanpa sandbox dan menolaknya kecuali logika otorisasi Anda sendiri mengizinkannya:
Lihat juga
- SDK overview - Konsep SDK umum
- TypeScript SDK reference - Dokumentasi SDK TypeScript
- Custom tools - Tentukan alat MCP dalam proses untuk Claude panggil
- CLI reference - Antarmuka baris perintah
- Common workflows - Panduan langkah demi langkah