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 instans 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 pemanggilan ClassName(field=value) berfungsi untuk keduanya, tetapi hanya dataclass yang menghasilkan objek dengan atribut.SdkMcpTool
Definisi untuk tool MCP SDK yang dibuat dengan dekorator @tool.
Transport
Kelas dasar abstrak untuk implementasi transport kustom. Gunakan ini untuk berkomunikasi dengan proses Claude melalui channel kustom (misalnya, koneksi jarak jauh alih-alih subproses lokal).
Import:
from claude_agent_sdk import Transport
ClaudeAgentOptions
Dataclass konfigurasi untuk kueri Claude Code.
Menangani respons API yang lambat atau macet
Subproses CLI membaca beberapa environment variable yang mengontrol timeout API dan deteksi macet. Teruskan variabel-variabel tersebut melaluiClaudeAgentOptions.env:
-
API_TIMEOUT_MS: berapa lama setiap percobaan permintaan dapat menunggu header respons, dalam milidetik. Variabel ini tidak membatasi berapa lama respons streaming berjalan setelah header tiba. Default600000. Berlaku untuk loop utama dan semua subagent. -
CLAUDE_CODE_MAX_RETRIES: jumlah retry API maksimum. Default10, dibatasi hingga15. Setiap retry mendapatkan jendelaAPI_TIMEOUT_MStersendiri. Untuk eksekusi tanpa pengawasan yang perlu menunggu melewati gangguan yang lebih lama, aturCLAUDE_CODE_RETRY_WATCHDOG=1: ini mencoba ulang error kapasitas sementara tanpa batas dan, pada Claude Code v2.1.199 atau lebih baru, menaikkan default untuk error sementara lainnya menjadi300dan menghapus batas pada variabel ini. -
CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: watchdog macet untuk subagent. Selama stream watchdog aktif, defaultnya adalahCLAUDE_STREAM_IDLE_TIMEOUT_MSditambah 5 menit, yang menjadi600000kecuali Anda menaikkan variabel tersebut. Jika stream watchdog nonaktif, defaultnya adalah600000. Sebelum v2.1.257, defaultnya selalu600000. Timer direset pada setiap event stream. Saat terjadi kemacetan, Claude Code membatalkan subagent dan melaporkan kemacetan tersebut ke induk. Untuk subagent latar belakang, Claude Code juga menandai tugas sebagai gagal dan melampirkan hasil parsial apa pun. -
CLAUDE_ENABLE_STREAM_WATCHDOGdenganCLAUDE_STREAM_IDLE_TIMEOUT_MS: stream watchdog yang membatalkan permintaan ketika header telah tiba tetapi body respons berhenti melakukan streaming. Watchdog aktif secara default untuk semua penyedia; aturCLAUDE_ENABLE_STREAM_WATCHDOG=0untuk menonaktifkannya.CLAUDE_STREAM_IDLE_TIMEOUT_MSmemiliki default300000dan dibatasi pada nilai minimum tersebut. Setelah pembatalan, Retry otomatis menjelaskan apa yang dilakukan Claude Code, berdasarkan sejauh mana respons telah berjalan. Selama watchdog menunggu respons yang ditahan tetap terbuka oleh gateway di belakangANTHROPIC_BASE_URLdengan ping keep-alive, host yang mengaturinclude_partial_messagesterus menerima pesanStreamEventping. Baca frame tersebut sebagai tanda keaktifan, alih-alih menghentikan sesi karena timeout akibat tidak ada aktivitas. Sebelum v2.1.257, frame tersebut berhenti 5 menit setelah event stream nyata terakhir.
OutputFormat
Konfigurasi untuk validasi output terstruktur. Berikan ini sebagai dict ke field output_format pada ClaudeAgentOptions:
SystemPromptPreset
Konfigurasi untuk menggunakan system prompt preset Claude Code dengan tambahan opsional.
SystemPromptCustom
System prompt kustom dalam bentuk objek, setara dengan memberikan 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 memberikannya sebagai string. SDK memetakan ini ke flag CLI --system-prompt-file. Gunakan bentuk file ketika prompt berukuran besar: SDK meneruskan system_prompt berupa string pada argv subproses CLI, yang tunduk pada batas panjang baris perintah OS sebelum SDK mengirimkan permintaan API apa pun. Di Linux, satu argumen yang lebih panjang dari sekitar 128 KB gagal saat pembuatan proses dengan Argument list too long. Di Windows, seluruh baris perintah dibatasi sekitar 32 KB, sehingga bentuk string gagal pada ambang yang lebih rendah.
SettingSource
Mengontrol sumber konfigurasi berbasis filesystem mana yang digunakan SDK untuk memuat pengaturan.
Perilaku default
Ketikasetting_sources dihilangkan atau bernilai None dan skills tidak diatur, query() memuat pengaturan filesystem yang sama dengan CLI Claude Code: pengguna, proyek, dan lokal. Jika skills diatur, baris setting_sources menjelaskan default saat ini. Kebijakan yang dikelola endpoint dimuat dalam semua kasus; pengaturan yang dikelola server diambil ketika sesi diautentikasi dengan kredensial organisasi pada konfigurasi yang memenuhi syarat. Untuk informasi lebih lanjut, lihat Apa yang tidak dikontrol oleh settingSources.
Mengapa menggunakan setting_sources
Menonaktifkan pengaturan filesystem:Pada Python SDK 0.1.59 dan sebelumnya, daftar kosong diperlakukan sama seperti menghilangkan opsi, sehingga
setting_sources=[] tidak menonaktifkan pengaturan filesystem. Tingkatkan ke rilis yang lebih baru jika Anda memerlukan daftar kosong agar berlaku. TypeScript SDK tidak terpengaruh."project" di setting_sources. Lihat Memodifikasi system prompt untuk cara pemuatan CLAUDE.md berinteraksi dengan opsi system prompt.
Prioritas pengaturan
Ketika beberapa sumber dimuat, pengaturan digabungkan dengan urutan prioritas berikut (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 terprogram.
AgentDefinition
Konfigurasi untuk subagent yang didefinisikan secara terprogram.
Nama field
AgentDefinition menggunakan camelCase, seperti disallowedTools, permissionMode, dan maxTurns. Nama-nama ini dipetakan langsung ke format wire yang digunakan bersama dengan TypeScript SDK. Ini berbeda dari ClaudeAgentOptions, yang menggunakan snake_case Python untuk field tingkat atas yang setara seperti disallowed_tools dan permission_mode. Karena AgentDefinition adalah dataclass, memberikan keyword snake_case akan memunculkan TypeError saat konstruksi.PermissionMode
Mode izin untuk mengontrol eksekusi tool.
EffortLevel
Tingkat effort untuk mengarahkan kedalaman thinking.
CanUseTool
Alias tipe untuk fungsi callback izin tool.
tool_name: Nama tool yang dipanggilinput_data: Parameter input toolcontext:ToolPermissionContextdengan informasi tambahan
PermissionResult (baik PermissionResultAllow maupun PermissionResultDeny).
Callback ini menggantikan permintaan izin interaktif. SDK memanggil can_use_tool ketika alur evaluasi izin berakhir pada permintaan izin. Panggilan yang disetujui dengan salah satu cara berikut berjalan tanpa memanggil can_use_tool:
- Panggilan yang disetujui oleh entri
allowed_toolsatau aturan allow di pengaturan - Panggilan yang disetujui oleh mode izin, seperti pengeditan file dalam mode
acceptEdits
PreToolUse, yang juga berjalan untuk panggilan tersebut.
Aturan allow tidak menyetujui terlebih dahulu tindakan yang tidak disetujui otomatis oleh mode apa pun; lihat Cara izin dievaluasi untuk mengetahui tindakan mana 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 bahwa panggilan tool harus diizinkan.
Jika Anda mengembalikan
PermissionResultAllow dengan lebih dari 4.096 item di updated_permissions, Claude Code memperlakukan hasil tersebut sebagai tidak valid dan menolak panggilan tool. Setiap PermissionUpdate dihitung sebagai satu item, begitu pula setiap entri dalam daftar rules atau directories-nya. Pesan penolakan diakhiri dengan updatedPermissions may hold at most 4096 updates, rules and directories in all. Untuk menghindari penolakan, kembalikan 4.096 item atau kurang.
PermissionResultDeny
Hasil yang menunjukkan bahwa panggilan tool harus ditolak.
PermissionUpdate
Konfigurasi untuk memperbarui izin secara terprogram.
PermissionRuleValue
Aturan yang akan ditambahkan, diganti, atau dihapus dalam pembaruan izin.
ToolsPreset
Konfigurasi tool preset untuk menggunakan kumpulan tool default Claude Code.
ThinkingConfig
Mengontrol perilaku extended thinking. Union dari tiga konfigurasi:
Field opsional
display mengontrol apakah teks thinking dikembalikan dalam bentuk "summarized" atau "omitted". Pada Claude Opus 4.7 dan yang lebih baru, default API adalah "omitted", jadi atur "summarized" untuk menerima konten thinking dalam output ThinkingBlock. Pada penyedia seperti Amazon Bedrock dan Agent Platform milik Google Cloud, Claude Code tidak meneruskan display untuk model lama yang dikenalinya. Model-model tersebut adalah Opus 4.6, Sonnet 4.6, Haiku 4.5, dan model yang lebih lama, yang menggunakan default masing-masing.
Karena ini adalah kelas TypedDict, kelas-kelas ini merupakan dict biasa saat runtime. Buat sebagai literal dict atau panggil kelas seperti konstruktor; keduanya menghasilkan dict. Akses field dengan config["budget_tokens"], bukan config.budget_tokens:
TaskBudget
Anggaran tugas di sisi API dalam token, digunakan dengan field task_budget di ClaudeAgentOptions.
Karena ini adalah
TypedDict, berikan sebagai dict biasa, seperti ClaudeAgentOptions(task_budget={"total": 50000}).
SdkBeta
Tipe literal untuk fitur beta SDK.
betas di 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 sebagaimana dilaporkan oleh get_mcp_status(). Ini adalah union dari semua varian transport McpServerConfig ditambah varian claudeai-proxy khusus output untuk server yang diproksikan 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(). Respons ini menyertakan payload yang dirender Claude Code untuk perintah /context dalam sesi interaktif. Selain jumlah token, payload tersebut membawa field tampilan seperti color dan gridRows yang digunakan Claude Code untuk menggambar grid penggunaan /context.
Claude Code membangun payload ini dengan mengirimkan beberapa permintaan ke API penghitungan token. Permintaan ini tidak muncul di stream pesan, sehingga pelacakan biaya yang membaca stream tidak akan melihatnya. Pada Anthropic API, penghitungan token tidak dikenai biaya.
ContextUsageCategory membawa name, tokens, color, dan flag opsional isDeferred. totalTokens adalah penggunaan konteks sesi saat ini, dan maxTokens adalah jendela yang menjadi acuan pengukuran penggunaan tersebut. Jendela tersebut adalah context window model, atau jendela auto-compaction yang lebih rendah jika berlaku, dan rawMaxTokens membawa nilai yang sama dengan maxTokens. apiUsage menyimpan penggunaan dari respons API terbaru, bukan total berjalan untuk sesi. Claude Code membiarkan kunci opsional deferredBuiltinTools, systemTools, dan systemPromptSections tidak diatur, jadi perkirakan kunci-kunci tersebut tidak ada meskipun tipe mendeklarasikannya.
SdkPluginConfig
Konfigurasi untuk memuat plugin di 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"nilainyaTruedalam tiga kasus. Periksastop_reasonuntuk membedakannya:"refusal": model menolak untuk merespons. Baca teks penolakan diresult, atau diAssistantMessagesebelumnya ketikaresultkosong."tool_deferred_unavailable": tool yang ditangguhkan tidak lagi tersedia ketika Anda melanjutkan sesi, misalnya karena server MCP-nya tidak terhubung. Dalam dua kasus di bawah ini, prompt yang Anda kirim setelah melanjutkan sesi dihitung sama seperti prompt yang diteruskan bersama resume:- Tanpa prompt: panggilan masih tertunda. Jadikan tool tersebut tersedia dan lanjutkan lagi tanpa prompt, maka panggilan tersebut dijalankan terlebih dahulu.
- Dengan prompt: Claude Code menjawabnya tanpa hasil tool, dan panggilan yang ditangguhkan hilang. Kirim prompt baru jika Anda masih memerlukan tool tersebut dipanggil.
- Nilai lainnya: giliran berakhir pada error yang dilaporkan Claude Code sebagai pengganti respons model, seperti error API. Baca
terminal_reasonuntuk penyebabnya,resultuntuk pesannya, danapi_error_statusuntuk status HTTP ketika API mengembalikannya.
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 dalam sesi tersebut. Lihat Lacak biaya dalam mode input streaming untuk reset dan Pulihkan total setelah kerusakan sesi 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 Lacak biaya dalam mode input streaming 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, seperti perintah Bash yang di-background, Monitor watch, subagent yang dihasilkan melalui tool Agent, atau agent jarak jauh. 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.
data["stop_reason"] terlebih dahulu, lalu terminal_reason, lalu subtype. Respons yang ditolak memiliki stop_reason "refusal", biasanya dengan subtype "success"; terminal_reason-nya tidak membedakannya dan dapat berisi "completed" atau "api_error". Permintaan akhir yang gagal memiliki subtype "success" dan penyebabnya dalam terminal_reason, seperti "api_error" untuk error API. Ketika run mencapai batas yang Anda tetapkan, seperti max_turns atau max_budget_usd, Anda mendapatkan 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.
on_failure, lihat Memblokir tindakan ketika callback gagal.
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. Dengan matcher Bash miliknya, hook keamanan berjalan pada panggilan tool Bash. Hook logging tidak memiliki matcher, sehingga berjalan pada setiap panggilan tool.
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 ketika tool ini tersedia untuk sesi.
Daftar tools dalam init SystemMessage melaporkan tool ini sebagai Task untuk kompatibilitas mundur.
Input:
run_in_background dalam panggilan Agent, secara default agent utama Anda tidak menunggu agent baru, sedangkan subagent menunggu:
- Dari agent utama Anda: agent baru berjalan di latar belakang, dan hasilnya memiliki
status: "async_launched". Agar agent utama Anda menunggu agent baru, lihat Choose whether Claude waits for subagents. - Dari salah satu subagent Anda: subagent yang memanggil menunggu agent baru. Agent baru justru berjalan di latar belakang ketika definisinya mengatur
backgroundkeTrue, atau ketika Anda mematikan mode fork dengan mengaturCLAUDE_CODE_FORK_SUBAGENTke0.
"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 Menangani persetujuan dan input pengguna untuk detail penggunaan.
Input:
Bash
Nama tool:Bash
Untuk apa yang menetapkan batas latar depan, lihat Timeout dan batas output. Untuk batas waktu latar belakang, lihat Batas waktu untuk perintah latar belakang.
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.
Sumber ws memerlukan Claude Code v2.1.195 atau lebih baru. Ketika Monitor menjalankan perintah, ia mengikuti aturan izin yang sama seperti Bash. Lihat Monitor tool reference untuk izin WebSocket, 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. Anda masih dapat menggunakan nama sebelumnya KillShell dan KillBash dalam aturan izin, dalam matcher hook, serta dalam opsi tools, allowed_tools, dan disallowed_tools.
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 allowlist jaringan berdasarkan nama host yang diminta. Secara default, proxy tidak menghentikan atau memeriksa lalu lintas TLS, sehingga teknik seperti domain fronting berpotensi dapat melewati allowlist tersebut. Lihat Batasan keamanan sandboxing untuk detail dan Deployment aman untuk mengonfigurasi proxy yang menghentikan TLS.
SandboxIgnoreViolations
Pelanggaran yang tidak dimasukkan ke dalam laporan pelanggaran sandbox. Setiap kunci mencocokkan bagian dari sebuah perintah, atau * untuk setiap perintah, dan setiap nilai mencantumkan teks yang dicocokkan dalam baris pelanggaran: {"*": ["/etc/hosts"]} menyembunyikan pelanggaran yang menyebutkan /etc/hosts. Akses yang cocok tetap diblokir. Lihat sandbox.ignoreViolations.
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
- Gambaran umum SDK - Konsep SDK umum
- Referensi SDK TypeScript - Dokumentasi SDK TypeScript
- Alat kustom - Tentukan alat MCP dalam proses untuk Claude panggil
- Referensi CLI - Antarmuka baris perintah
- Alur kerja umum - Panduan langkah demi langkah