Skip to main content

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 Pengaturan dalam panduan cepat Agent SDK.

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

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):
  3. Kelas TypedDict: skema bertipe yang kunci NotRequired-nya tidak dimasukkan ke dalam required.
    • Python 3.11 dan yang lebih baru: impor TypedDict dan NotRequired dari typing.
    • Python 3.10: typing tidak memiliki NotRequired. Impor TypedDict dan NotRequired dari typing_extensions, yang diinstal oleh SDK pada Python 3.10.
Dalam bentuk pemetaan sederhana dan TypedDict, bungkus tipe dalam Annotated[type, "description"] untuk menetapkan deskripsi field.

Pengembalian

Fungsi dekorator yang membungkus implementasi tool dan mengembalikan instance SdkMcpTool.

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 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.

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_id atau up_to_message_id bukan UUID yang valid
  • ValueError: sesi tidak memiliki pesan, atau up_to_message_id tidak cocok dengan pesan mana pun dalam transkrip
  • FileNotFoundError: 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).
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 environment variable 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. Untuk run tanpa pengawasan yang perlu menunggu melalui pemadaman yang lebih lama, atur CLAUDE_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 menjadi 300 dan menghapus batas pada variabel ini.
  • CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: watchdog stall untuk subagent. Sementara watchdog stream aktif, default adalah CLAUDE_STREAM_IDLE_TIMEOUT_MS ditambah 5 menit, yang menjadi 600000 kecuali Anda menaikkan variabel itu. Dengan watchdog stream mati, default adalah 600000. Sebelum v2.1.257, default selalu 600000. 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_WATCHDOG dengan CLAUDE_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; atur CLAUDE_ENABLE_STREAM_WATCHDOG=0 untuk menonaktifkannya. CLAUDE_STREAM_IDLE_TIMEOUT_MS default ke 300000 dan 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 belakang ANTHROPIC_BASE_URL tahan terbuka dengan keep-alive pings, host yang mengatur include_partial_messages terus menerima pesan ping StreamEvent. 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

Ketika setting_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.
Muat hanya sumber pengaturan tertentu:
Aplikasi SDK-only:
Untuk memuat instruksi proyek CLAUDE.md, sertakan "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):
  1. Pengaturan lokal (.claude/settings.local.json)
  2. Pengaturan proyek (.claude/settings.json)
  3. Pengaturan pengguna (~/.claude/settings.json)
Opsi programatis seperti 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.
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. 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.
Gunakan dengan field betas dalam ClaudeAgentOptions untuk mengaktifkan fitur beta.
Pada Claude API, beta context-1m-2025-08-07 sudah pensiun untuk Claude Sonnet 4.5 dan Claude Sonnet 4. Jika Anda masih meneruskannya dengan salah satu model tersebut, permintaan yang melebihi context window standar 200K token akan mengembalikan error, jadi hapus beta tersebut dari betas. Untuk menjalankan sesi dengan context window 1M token, atur model ke model yang berjalan dengan window 1M secara default, seperti claude-sonnet-5-5 atau claude-opus-5-5. Untuk model yang mencapai 1M hanya melalui varian [1m]-nya, tambahkan sufiks tersebut ke ID model, seperti pada claude-opus-4-6[1m].

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.
Setiap entri 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:
Untuk informasi lengkap tentang membuat dan menggunakan plugins, lihat Plugins.

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.
Proses CLI yang mendasar dapat memancarkan tipe error yang Literal ini tidak daftar, seperti 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.
Subtype yang tidak memiliki dataclass sendiri tiba sebagai 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.
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 tentang bagaimana percakapan berakhir:
  • 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 agent selesai tetapi panggilan API terakhir mengembalikan error.
  • api_error_status: kode status HTTP dari error API yang mengakhiri. None ketika giliran 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_*.
  • 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 adalah interrupt() dan callback izin mengembalikan PermissionResultDeny dengan interrupt=True. None pada versi CLI yang mendahului field, pada hasil dari perintah lokal seperti /voice atau /usage, yang melewati loop query, atau pada hasil error yang disintesis yang dipancarkan ketika sesi gagal secara fatal. Mencerminkan SDKResultMessage.terminal_reason SDK 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 mana origin adalah None atau {"kind": "human"}, dari hasil giliran yang disuntikkan seperti notifikasi tugas latar belakang. Memerlukan Python Agent SDK 0.2.137 atau lebih baru.
Ketika beberapa tugas latar belakang selesai dalam waktu berdekatan, Claude Code dapat menjawab notifikasinya dalam satu giliran alih-alih satu giliran untuk masing-masing. Anda tetap menerima satu 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.
Ketika 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.
Untuk membedakan kegagalan, periksa 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.
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.

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 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. Setiap output yang ditampilkan adalah nilai yang Anda baca dari UserMessage.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:
Meluncurkan agent baru untuk menangani tugas kompleks multi-langkah secara otonom. Output (status: "completed"):
Output (status: "async_launched"):
Output (status: "remote_launched"):
Mengembalikan hasil dari subagent. Output dibedakan pada bidang 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:
Output:

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:
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 mengambil salah satu bentuk berikut tergantung pada apa yang Claude baca. Periksa kunci type untuk membedakannya. Output (type: "text"):
Output (type: "image"):
Output (type: "notebook"):
Output (type: "pdf"):
Output (type: "parts"):
Output (type: "file_unchanged"):

Write

Nama tool: Write Input:
Output:

Glob

Nama tool: Glob Input:
Output:
totalMatches dan countIsComplete memerlukan Claude Code v2.1.191 atau lebih baru.

Grep

Nama tool: Grep Input:
Output:
Grep mengembalikan bentuk dict ini dalam setiap mode output. Kunci opsional mana yang ada tergantung pada 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:
Output:

WebFetch

Nama tool: WebFetch Input:
Output:

WebSearch

Nama tool: WebSearch Input:
Output:

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:
  • TodoWrite
  • TaskCreate
  • TaskGet
  • TaskUpdate
  • TaskList
Di mana pun alat-alat tersebut tersedia, Claude Code menyediakan empat alat Task, atau 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.
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:

TaskOutput

Dihapus dalam Claude Code v2.1.277. Sebelumnya mengambil output dari tugas latar belakang yang sedang berjalan atau selesai, dengan BashOutput 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:
Output:

ExitPlanMode

Nama tool: ExitPlanMode Input:
Output:

ListMcpResources

Nama tool: ListMcpResourcesTool Input:
Hasilnya adalah daftar daripada dict, jadi tool_use_result menyimpan list untuk tool ini. Output:

ReadMcpResource

Nama tool: ReadMcpResourceTool Input:
Output:

Membangun antarmuka percakapan berkelanjutan

Contoh berikut menjaga satu ClaudeSDKClient 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 panggilan query() 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.
Untuk mencegah perintah yang di-sandbox menulis ke sebuah file, cantumkan jalur absolutnya di bawah 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

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

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

Ketika allowUnsandboxedCommands 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:
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 allowUnsandboxedCommands diaktifkan, model dapat secara otonom menjalankan perintah di luar sandbox tanpa prompt persetujuan, kecuali untuk tindakan yang tidak ada mode auto-approve. Kombinasi ini secara efektif memungkinkan model untuk melarikan diri dari isolasi sandbox secara diam-diam.

Lihat juga