Langsung ke konten utama

Instalasi

Instal paket ke dalam lingkungan virtual. Pada instalasi Python Debian, Ubuntu, dan Homebrew terbaru, menjalankan pip install terhadap Python sistem gagal dengan error: externally-managed-environment.
Untuk uv, Windows PowerShell, dan pengaturan kunci API, lihat 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 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).
Ini adalah API internal tingkat rendah. Antarmukanya dapat berubah di rilis mendatang. Implementasi kustom harus diperbarui agar sesuai dengan setiap perubahan antarmuka.
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 melalui ClaudeAgentOptions.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. Default 600000. Berlaku untuk loop utama dan semua subagent.
  • CLAUDE_CODE_MAX_RETRIES: jumlah retry API maksimum. Default 10, dibatasi hingga 15. Setiap retry mendapatkan jendela API_TIMEOUT_MS tersendiri. Untuk eksekusi tanpa pengawasan yang perlu menunggu melewati gangguan yang lebih lama, atur CLAUDE_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 menjadi 300 dan menghapus batas pada variabel ini.
  • CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS: watchdog macet untuk subagent. Selama stream watchdog aktif, defaultnya adalah CLAUDE_STREAM_IDLE_TIMEOUT_MS ditambah 5 menit, yang menjadi 600000 kecuali Anda menaikkan variabel tersebut. Jika stream watchdog nonaktif, defaultnya adalah 600000. Sebelum v2.1.257, defaultnya selalu 600000. 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_WATCHDOG dengan CLAUDE_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; atur CLAUDE_ENABLE_STREAM_WATCHDOG=0 untuk menonaktifkannya. CLAUDE_STREAM_IDLE_TIMEOUT_MS memiliki default 300000 dan 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 belakang ANTHROPIC_BASE_URL dengan ping keep-alive, host yang mengatur include_partial_messages terus menerima pesan StreamEvent ping. 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

Ketika setting_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.
Memuat hanya sumber pengaturan tertentu:
Aplikasi khusus SDK:
Untuk memuat instruksi proyek CLAUDE.md, sertakan "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):
  1. Pengaturan lokal (.claude/settings.local.json)
  2. Pengaturan proyek (.claude/settings.json)
  3. Pengaturan pengguna (~/.claude/settings.json)
Opsi terprogram seperti 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.
Callback menerima:
  • tool_name: Nama tool yang dipanggil
  • input_data: Parameter input tool
  • context: ToolPermissionContext dengan informasi tambahan
Mengembalikan 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_tools atau aturan allow di pengaturan
  • Panggilan yang disetujui oleh mode izin, seperti pengeditan file dalam mode acceptEdits
Untuk memeriksa panggilan tersebut, gunakan hook 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.
Gunakan dengan field betas di ClaudeAgentOptions untuk mengaktifkan fitur beta.
Pada Claude API, beta context-1m-2025-08-07 telah dihentikan untuk Claude Sonnet 4.5 dan Claude Sonnet 4. Jika Anda masih memberikannya dengan salah satu model tersebut, permintaan yang melebihi context window standar 200K token akan mengembalikan error, jadi hapus dari betas. Untuk menjalankan sesi dengan context window 1M token, atur model ke model yang berjalan dengan jendela 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 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 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.
Setiap entri 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:
Untuk informasi lengkap tentang membuat dan menggunakan plugin, lihat Plugin.

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" nilainya True dalam tiga kasus. Periksa stop_reason untuk membedakannya:
    • "refusal": model menolak untuk merespons. Baca teks penolakan di result, atau di AssistantMessage sebelumnya ketika result kosong.
    • "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_reason untuk penyebabnya, result untuk pesannya, dan api_error_status untuk status HTTP ketika API mengembalikannya.
  • 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 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.
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 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.
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.
Untuk menentukan apa yang dicakup oleh 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 seperti rm -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 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 ketika tool ini tersedia untuk sesi. 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. Ketika Claude tidak menyertakan 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 background ke True, atau ketika Anda mematikan mode fork dengan mengatur CLAUDE_CODE_FORK_SUBAGENT ke 0.
Sebelum Python SDK v0.2.169, agent yang dimulai oleh subagent Anda juga berjalan di latar belakang secara default. Rilis tersebut adalah yang pertama menggabungkan Claude Code v2.1.302 atau lebih baru. 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 Menangani persetujuan dan input pengguna untuk detail penggunaan. Input:
Output:

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

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 disetujui otomatis oleh mode mana pun. Kombinasi ini secara efektif memungkinkan model untuk melarikan diri dari isolasi sandbox secara diam-diam.

Lihat juga