194 `ToolAnnotations`194 `ToolAnnotations`
195</h4>195</h4>
196 196
197Petunjuk perilaku untuk tool, diteruskan sebagai argumen `annotations` dari [`tool()`](#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. Anda juga dapat melewatkan `mcp.types.ToolAnnotations` biasa di mana pun SDK menerima anotasi.197Petunjuk perilaku untuk tool, diteruskan sebagai argumen `annotations` dari [`tool()`](#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.
198 198
199Nama 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.199Nama 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.
200 200
321| `summary` | `str` | Judul tampilan: judul kustom, prompt terbaru, ringkasan yang dihasilkan otomatis, atau prompt pertama |321| `summary` | `str` | Judul tampilan: judul kustom, prompt terbaru, ringkasan yang dihasilkan otomatis, atau prompt pertama |
322| `last_modified` | `int` | Waktu modifikasi terakhir dalam milidetik sejak epoch |322| `last_modified` | `int` | Waktu modifikasi terakhir dalam milidetik sejak epoch |
323| `file_size` | `int \| None` | Ukuran file sesi dalam byte (`None` untuk backend penyimpanan jarak jauh) |323| `file_size` | `int \| None` | Ukuran file sesi dalam byte (`None` untuk backend penyimpanan jarak jauh) |
324| `custom_title` | `str \| None` | Judul sesi yang ditetapkan pengguna |324| `custom_title` | `str \| None` | Judul sesi: judul yang ditetapkan pengguna, atau judul yang dihasilkan otomatis jika tidak ada yang ditetapkan |
325| `first_prompt` | `str \| None` | Prompt pengguna bermakna pertama dalam sesi |325| `first_prompt` | `str \| None` | Prompt pengguna bermakna pertama dalam sesi |
326| `git_branch` | `str \| None` | Cabang Git di akhir sesi |326| `git_branch` | `str \| None` | Branch Git di akhir sesi |
327| `cwd` | `str \| None` | Direktori kerja untuk sesi |327| `cwd` | `str \| None` | Direktori kerja untuk sesi |
328| `tag` | `str \| None` | Tag sesi yang ditetapkan pengguna (lihat [`tag_session()`](#tag_session)) |328| `tag` | `str \| None` | Tag sesi yang ditetapkan pengguna (lihat [`tag_session()`](#tag_session)) |
329| `created_at` | `int \| None` | Waktu pembuatan sesi dalam milidetik sejak epoch |329| `created_at` | `int \| None` | Waktu pembuatan sesi dalam milidetik sejak epoch |
927| `continue_conversation` | `bool` | `False` | Lanjutkan percakapan terbaru |927| `continue_conversation` | `bool` | `False` | Lanjutkan percakapan terbaru |
928| `resume` | `str \| None` | `None` | ID sesi untuk dilanjutkan |928| `resume` | `str \| None` | `None` | ID sesi untuk dilanjutkan |
929| `session_id` | `str \| None` | `None` | Gunakan ID sesi tertentu alih-alih yang dibuat otomatis. Harus UUID yang valid. Tidak dapat digabungkan dengan `continue_conversation` atau `resume` kecuali `fork_session` juga diatur |929| `session_id` | `str \| None` | `None` | Gunakan ID sesi tertentu alih-alih yang dibuat otomatis. Harus UUID yang valid. Tidak dapat digabungkan dengan `continue_conversation` atau `resume` kecuali `fork_session` juga diatur |
930| `max_turns` | `int \| None` | `None` | Jumlah maksimal putaran agentic (round trip penggunaan tool) |930| `max_turns` | `int \| None` | `None` | Jumlah maksimal giliran agentic (round trip penggunaan tool) |
931| `max_budget_usd` | `float \| None` | `None` | Hentikan query ketika estimasi biaya sisi klien mencapai nilai USD ini. Hanya menghitung pengeluaran panggilan sendiri; total yang dipulihkan dari sesi yang dilanjutkan tidak dihitung. Untuk peringatan akurasi dan perilaku reset, lihat [Track cost and usage](/docs/id/agent-sdk/cost-tracking) |931| `max_budget_usd` | `float \| None` | `None` | Hentikan query ketika estimasi biaya sisi klien mencapai nilai USD ini. Hanya menghitung pengeluaran panggilan sendiri; total yang dipulihkan dari sesi yang dilanjutkan tidak dihitung. Untuk peringatan akurasi dan perilaku reset, lihat [Track cost and usage](/docs/id/agent-sdk/cost-tracking) |
932| `disallowed_tools` | `list[str]` | `[]` | Tools untuk ditolak. Nama bare seperti `"Bash"` menghapus tool dari konteks Claude. Aturan scoped seperti `"Bash(rm *)"` membiarkan tool tersedia dan menolak panggilan yang cocok di setiap mode izin, termasuk `bypassPermissions`, untuk perintah [seperti yang ditulis](/docs/id/permissions#bash-rule-limits). Lihat [Permissions](/docs/id/agent-sdk/permissions#allow-and-deny-rules) |932| `disallowed_tools` | `list[str]` | `[]` | Tools untuk ditolak. Nama bare seperti `"Bash"` menghapus tool dari konteks Claude. Aturan scoped seperti `"Bash(rm *)"` membiarkan tool tersedia dan menolak panggilan yang cocok di setiap mode izin, termasuk `bypassPermissions`, untuk perintah [seperti yang ditulis](/docs/id/permissions#bash-rule-limits). Lihat [Permissions](/docs/id/agent-sdk/permissions#allow-and-deny-rules) |
933| `enable_file_checkpointing` | `bool` | `False` | Aktifkan pelacakan perubahan file untuk rewinding. Lihat [File checkpointing](/docs/id/agent-sdk/file-checkpointing) |933| `enable_file_checkpointing` | `bool` | `False` | Aktifkan pelacakan perubahan file untuk rewinding. Lihat [File checkpointing](/docs/id/agent-sdk/file-checkpointing) |
940| `cli_path` | `str \| Path \| None` | `None` | Jalur kustom ke executable CLI Claude Code |940| `cli_path` | `str \| Path \| None` | `None` | Jalur kustom ke executable CLI Claude Code |
941| `settings` | `str \| None` | `None` | Jalur ke file pengaturan atau string JSON inline |941| `settings` | `str \| None` | `None` | Jalur ke file pengaturan atau string JSON inline |
942| `add_dirs` | `list[str \| Path]` | `[]` | Direktori tambahan yang dapat diakses Claude. SDK meneruskan setiap entri ke Claude Code sebagai `--add-dir`, jadi dengan sumber pengaturan `project` Claude Code juga [memuat skills, commands, dan subagents direktori](/docs/id/permissions#additional-directories-grant-file-access-not-configuration) |942| `add_dirs` | `list[str \| Path]` | `[]` | Direktori tambahan yang dapat diakses Claude. SDK meneruskan setiap entri ke Claude Code sebagai `--add-dir`, jadi dengan sumber pengaturan `project` Claude Code juga [memuat skills, commands, dan subagents direktori](/docs/id/permissions#additional-directories-grant-file-access-not-configuration) |
943| `env` | `dict[str, str]` | `{}` | Variabel lingkungan yang digabungkan di atas lingkungan proses yang diwarisi. Lihat [Environment variables](/docs/id/env-vars) untuk variabel yang dibaca CLI yang mendasar, dan [Handle slow or stalled API responses](#handle-slow-or-stalled-api-responses) untuk variabel terkait timeout. Atur `CLAUDE_AGENT_SDK_CLIENT_APP` untuk mengidentifikasi aplikasi Anda di header User-Agent |943| `env` | `dict[str, str]` | `{}` | Environment variable yang digabungkan di atas lingkungan proses yang diwarisi. Lihat [Environment variables](/docs/id/env-vars) untuk variabel yang dibaca CLI yang mendasar, dan [Handle slow or stalled API responses](#handle-slow-or-stalled-api-responses) untuk variabel terkait timeout. Atur `CLAUDE_AGENT_SDK_CLIENT_APP` untuk mengidentifikasi aplikasi Anda di header User-Agent |
944| `extra_args` | `dict[str, str \| None]` | `{}` | Argumen CLI tambahan untuk diteruskan langsung ke CLI |944| `extra_args` | `dict[str, str \| None]` | `{}` | Argumen CLI tambahan untuk diteruskan langsung ke CLI |
945| `max_buffer_size` | `int \| None` | `None` | Byte maksimal saat membuffer stdout CLI |945| `max_buffer_size` | `int \| None` | `None` | Byte maksimal saat membuffer stdout CLI |
946| `debug_stderr` | `Any` | `sys.stderr` | *Deprecated* - SDK mengabaikan nilai ini. Gunakan callback `stderr` untuk output stderr CLI |946| `debug_stderr` | `Any` | `sys.stderr` | *Deprecated* - SDK mengabaikan nilai ini. Gunakan callback `stderr` untuk output stderr CLI |
951| `include_partial_messages` | `bool` | `False` | Sertakan event streaming pesan parsial. Ketika diaktifkan, pesan [`StreamEvent`](#streamevent) dihasilkan |951| `include_partial_messages` | `bool` | `False` | Sertakan event streaming pesan parsial. Ketika diaktifkan, pesan [`StreamEvent`](#streamevent) dihasilkan |
952| `include_hook_events` | `bool` | `False` | Sertakan event lifecycle hook dalam aliran pesan sebagai objek `HookEventMessage` |952| `include_hook_events` | `bool` | `False` | Sertakan event lifecycle hook dalam aliran pesan sebagai objek `HookEventMessage` |
953| `forward_subagent_text` | `bool` | `False` | Teruskan blok teks dan thinking subagent dalam aliran pesan. Tanpa opsi ini, Claude Code memancarkan blok `tool_use` dan `tool_result` subagent tetapi bukan teks atau thinking. Memerlukan Python Agent SDK 0.2.140 atau lebih baru |953| `forward_subagent_text` | `bool` | `False` | Teruskan blok teks dan thinking subagent dalam aliran pesan. Tanpa opsi ini, Claude Code memancarkan blok `tool_use` dan `tool_result` subagent tetapi bukan teks atau thinking. Memerlukan Python Agent SDK 0.2.140 atau lebih baru |
954| `verbatim_prompts` | `bool` | `False` | Berikan setiap prompt seperti yang ditulis. SDK mengirim setiap pesan pengguna dengan `client_composed` diatur ke `True`. Lihat [`client_composed`](/docs/id/agent-sdk/typescript#sdkusermessage) untuk apa yang Claude Code lewati pada pesan tersebut. Gunakan opsi ini ketika teks prompt Anda menyertakan konten yang pengguna akhir tidak ketik. Untuk kontrol per-turn, biarkan mati dan atur `"client_composed": True` pada pesan streaming individual sebagai gantinya. Sementara opsi aktif, SDK menimpa nilai `client_composed` apa pun yang Anda atur. Memerlukan Python Agent SDK 0.2.158 atau lebih baru dan Claude Code v2.1.248 atau lebih baru; CLI yang disertakan dengan versi SDK tersebut memenuhi persyaratan Claude Code |954| `verbatim_prompts` | `bool` | `False` | Berikan setiap prompt seperti yang ditulis. SDK mengirim setiap pesan pengguna dengan `client_composed` diatur ke `True`. Lihat [`client_composed`](/docs/id/agent-sdk/typescript#sdkusermessage) untuk apa yang Claude Code lewati pada pesan tersebut. Gunakan opsi ini ketika teks prompt Anda menyertakan konten yang pengguna akhir tidak ketik. Untuk kontrol per giliran, biarkan mati dan atur `"client_composed": True` pada pesan streaming individual sebagai gantinya. Sementara opsi aktif, SDK menimpa nilai `client_composed` apa pun yang Anda atur. Memerlukan Python Agent SDK 0.2.158 atau lebih baru dan Claude Code v2.1.248 atau lebih baru; CLI yang disertakan dengan versi SDK tersebut memenuhi persyaratan Claude Code |
955| `fork_session` | `bool` | `False` | Ketika melanjutkan dengan `resume`, fork ke ID sesi baru alih-alih melanjutkan sesi asli |955| `fork_session` | `bool` | `False` | Ketika melanjutkan dengan `resume`, fork ke ID sesi baru alih-alih melanjutkan sesi asli |
956| `resume_session_at` | `str \| None` | `None` | Ketika melanjutkan, muat percakapan hanya hingga dan termasuk pesan dengan UUID ini. Gunakan dengan `resume`, dan biasanya `fork_session`, untuk cabang dari titik sebelumnya. Memerlukan Python Agent SDK 0.2.137 atau lebih baru |956| `resume_session_at` | `str \| None` | `None` | Ketika melanjutkan, muat percakapan hanya hingga dan termasuk pesan dengan UUID ini. Gunakan dengan `resume`, dan biasanya `fork_session`, untuk bercabang dari titik sebelumnya. Memerlukan Python Agent SDK 0.2.137 atau lebih baru |
957| `resume_drops_turn` | `str \| None` | `None` | UUID dari prompt pengguna yang putaran pemotongan `resume_session_at` buang. Ketika diatur, CLI menolak resume jika rentang yang dibuang menyimpan entri yang tidak dapat diatribusikan ke putaran itu. Memerlukan Python Agent SDK 0.2.137 atau lebih baru dan Claude Code v2.1.223 atau lebih baru; CLI yang disertakan dengan versi SDK tersebut memenuhi persyaratan Claude Code |957| `resume_drops_turn` | `str \| None` | `None` | UUID dari prompt pengguna yang gilirannya dibuang oleh pemotongan `resume_session_at`. Ketika diatur, CLI menolak resume jika rentang yang dibuang menyimpan entri yang tidak dapat diatribusikan ke giliran itu. Memerlukan Python Agent SDK 0.2.137 atau lebih baru dan Claude Code v2.1.223 atau lebih baru; CLI yang disertakan dengan versi SDK tersebut memenuhi persyaratan Claude Code |
958| `agents` | `dict[str, AgentDefinition] \| None` | `None` | Subagent yang didefinisikan secara programatis |958| `agents` | `dict[str, AgentDefinition] \| None` | `None` | Subagent yang didefinisikan secara programatis |
959| `plugins` | `list[SdkPluginConfig]` | `[]` | Muat plugin kustom dari jalur lokal. Lihat [Plugins](/docs/id/agent-sdk/plugins) untuk detail |959| `plugins` | `list[SdkPluginConfig]` | `[]` | Muat plugin kustom dari jalur lokal. Lihat [Plugins](/docs/id/agent-sdk/plugins) untuk detail |
960| `sandbox` | [`SandboxSettings`](#sandboxsettings) ` \| None` | `None` | Konfigurasi perilaku sandbox secara programatis. Lihat [Sandbox settings](#sandboxsettings) untuk detail |960| `sandbox` | [`SandboxSettings`](#sandboxsettings) ` \| None` | `None` | Konfigurasi perilaku sandbox secara programatis. Lihat [Sandbox settings](#sandboxsettings) untuk detail |
961| `setting_sources` | `list[SettingSource] \| None` | `None` (CLI defaults: all sources) | Kontrol pengaturan filesystem mana yang akan dimuat. Teruskan `[]` untuk menonaktifkan pengaturan pengguna, proyek, dan lokal. Dengan `skills` diatur dan field ini tidak diatur, hanya sumber pengguna dan proyek yang dimuat. Atur `setting_sources` secara eksplisit untuk menyimpan pengaturan lokal. Pengaturan kebijakan terkelola endpoint dimuat terlepas dari itu; pengaturan yang dikelola server diambil ketika sesi mengautentikasi dengan kredensial organisasi pada [konfigurasi yang memenuhi syarat](/docs/id/server-managed-settings#platform-availability). Untuk input yang dibaca terlepas dari opsi ini, lihat [What settingSources does not control](/docs/id/agent-sdk/claude-code-features#what-settingsources-does-not-control) |961| `setting_sources` | `list[SettingSource] \| None` | `None` (CLI defaults: all sources) | Kontrol pengaturan filesystem mana yang akan dimuat. Teruskan `[]` untuk menonaktifkan pengaturan pengguna, proyek, dan lokal. Dengan `skills` diatur dan field ini tidak diatur, hanya sumber pengguna dan proyek yang dimuat. Atur `setting_sources` secara eksplisit untuk menyimpan pengaturan lokal. Pengaturan kebijakan terkelola endpoint dimuat terlepas dari itu; pengaturan yang dikelola server diambil ketika sesi mengautentikasi dengan kredensial organisasi pada [konfigurasi yang memenuhi syarat](/docs/id/server-managed-settings#platform-availability). Untuk input yang dibaca terlepas dari opsi ini, lihat [What settingSources does not control](/docs/id/agent-sdk/claude-code-features#what-settingsources-does-not-control) |
962| `skills` | `list[str] \| Literal["all"] \| None` | `None` | Skills yang tersedia untuk sesi. Teruskan `"all"` untuk mengaktifkan setiap skill yang ditemukan, atau daftar nama skill. Teruskan nama yang tepat saja. SDK menolak nama yang salah bentuk dan bentuk wildcard dengan `ValueError` sebelum memulai proses Claude Code; pemeriksaan ini memerlukan Python Agent SDK 0.2.129 atau lebih baru. Ketika diatur, SDK secara otomatis menambahkan tool Skill ke `allowed_tools`. Jika Anda juga meneruskan `tools`, sertakan `"Skill"` dalam daftar itu. Lihat [Skills](/docs/id/agent-sdk/skills) |962| `skills` | `list[str] \| Literal["all"] \| None` | `None` | Skills yang tersedia untuk sesi. Teruskan `"all"` untuk mengaktifkan setiap skill yang ditemukan, atau daftar nama skill. Teruskan nama yang tepat saja. SDK menolak nama yang salah bentuk dan bentuk wildcard dengan `ValueError` sebelum memulai proses Claude Code; pemeriksaan ini memerlukan Python Agent SDK 0.2.129 atau lebih baru. Ketika diatur, SDK secara otomatis menambahkan tool Skill ke `allowed_tools`. Jika Anda juga meneruskan `tools`, sertakan `"Skill"` dalam daftar itu. Lihat [Skills](/docs/id/agent-sdk/skills) |
963| `max_thinking_tokens` | `int \| None` | `None` | *Deprecated* - Token maksimal untuk blok thinking. Gunakan `thinking` sebagai gantinya |963| `max_thinking_tokens` | `int \| None` | `None` | *Deprecated* - Token maksimal untuk blok thinking. Gunakan `thinking` sebagai gantinya |
964| `thinking` | [`ThinkingConfig`](#thinkingconfig) ` \| None` | `None` | Mengontrol perilaku extended thinking. Mengambil prioritas atas `max_thinking_tokens` |964| `thinking` | [`ThinkingConfig`](#thinkingconfig) ` \| None` | `None` | Mengontrol perilaku extended thinking. Diutamakan daripada `max_thinking_tokens` |
965| `effort` | [`EffortLevel`](#effortlevel) ` \| None` | `None` | Tingkat usaha untuk kedalaman thinking. Lihat [adjust the effort level](/docs/id/model-config#adjust-effort-level) |965| `effort` | [`EffortLevel`](#effortlevel) ` \| None` | `None` | Tingkat effort untuk kedalaman thinking. Lihat [adjust the effort level](/docs/id/model-config#adjust-effort-level) |
966| `session_store` | [`SessionStore`](/docs/id/agent-sdk/session-storage#the-sessionstore-interface) ` \| None` | `None` | Cerminkan transkrip sesi ke backend eksternal sehingga host apa pun dapat melanjutkannya. Lihat [Persist sessions to external storage](/docs/id/agent-sdk/session-storage) |966| `session_store` | [`SessionStore`](/docs/id/agent-sdk/session-storage#the-sessionstore-interface) ` \| None` | `None` | Cerminkan transkrip sesi ke backend eksternal sehingga host lain dapat melanjutkannya. Lihat [Persist sessions to external storage](/docs/id/agent-sdk/session-storage) |
967| `session_store_flush` | `Literal["batched", "eager"]` | `"batched"` | Kapan membuang entri transkrip yang dicerminkan ke `session_store`. `"batched"` membuang sekali per putaran atau ketika buffer penuh; `"eager"` memicu pembilasan latar belakang setelah setiap frame. Diabaikan ketika `session_store` adalah `None` |967| `session_store_flush` | `Literal["batched", "eager"]` | `"batched"` | Kapan membuang entri transkrip yang dicerminkan ke `session_store`. `"batched"` membuang sekali per giliran atau ketika buffer penuh; `"eager"` memicu pembilasan latar belakang setelah setiap frame. Diabaikan ketika `session_store` adalah `None` |
968| `load_timeout_ms` | `int` | `60000` | Per-call timeout untuk `session_store.load()` dan `list_subkeys()` selama materialisasi resume, dalam milidetik |968| `load_timeout_ms` | `int` | `60000` | Per-call timeout untuk `session_store.load()` dan `list_subkeys()` selama materialisasi resume, dalam milidetik |
969| `task_budget` | `TaskBudget \| None` | `None` | Budget token sisi API. Dikirim sebagai `output_config.task_budget` dengan header beta `task-budgets-2026-03-13`. Teruskan `{"total": <int>}`. |969| `task_budget` | `TaskBudget \| None` | `None` | Budget token sisi API. Dikirim sebagai `output_config.task_budget` dengan header beta `task-budgets-2026-03-13`. Teruskan `{"total": <int>}`. |
970 970
972 Menangani respons API yang lambat atau terhenti972 Menangani respons API yang lambat atau terhenti
973</h4>973</h4>
974 974
975Subprocess CLI membaca beberapa variabel lingkungan yang mengontrol timeout API dan deteksi stall. Teruskan melalui `ClaudeAgentOptions.env`:975Subprocess CLI membaca beberapa environment variable yang mengontrol timeout API dan deteksi stall. Teruskan melalui `ClaudeAgentOptions.env`:
976 976
977```python theme={null}977```python theme={null}
978from claude_agent_sdk import ClaudeAgentOptions978from claude_agent_sdk import ClaudeAgentOptions
987```987```
988 988
989* `API_TIMEOUT_MS`: timeout per-permintaan pada klien Anthropic, dalam milidetik. Default `600000`. Berlaku untuk loop utama dan semua subagent.989* `API_TIMEOUT_MS`: timeout per-permintaan pada klien Anthropic, dalam milidetik. Default `600000`. Berlaku untuk loop utama dan semua subagent.
990* `CLAUDE_CODE_MAX_RETRIES`: maksimal retry API. Default `10`, dibatasi pada `15`. Setiap retry mendapat jendela `API_TIMEOUT_MS` sendiri, jadi waktu dinding terburuk kira-kira `API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)` ditambah backoff. Untuk run tanpa pengawasan yang perlu menunggu melalui pemadaman yang lebih lama, atur [`CLAUDE_CODE_RETRY_WATCHDOG=1`](/docs/id/errors#tune-retry-behavior): itu retry 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.990* `CLAUDE_CODE_MAX_RETRIES`: maksimal retry API. Default `10`, dibatasi pada `15`. Setiap retry mendapat jendela `API_TIMEOUT_MS` sendiri, jadi waktu dinding terburuk kira-kira `API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)` ditambah backoff. Untuk run tanpa pengawasan yang perlu menunggu melalui pemadaman yang lebih lama, atur [`CLAUDE_CODE_RETRY_WATCHDOG=1`](/docs/id/errors#tune-retry-behavior): 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.
991* `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`.991* `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`.
992 992
993 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.993 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.
1034| `type` | Ya | Harus `"preset"` untuk menggunakan preset system prompt |1034| `type` | Ya | Harus `"preset"` untuk menggunakan preset system prompt |
1035| `preset` | Ya | Harus `"claude_code"` untuk menggunakan system prompt Claude Code |1035| `preset` | Ya | Harus `"claude_code"` untuk menggunakan system prompt Claude Code |
1036| `append` | Tidak | Instruksi tambahan untuk ditambahkan ke preset system prompt |1036| `append` | Tidak | Instruksi tambahan untuk ditambahkan ke preset system prompt |
1037| `exclude_dynamic_sections` | Tidak | Pindahkan konteks per-pengguna, seperti lokasi memori otomatis, dari system prompt ke pesan pengguna pertama. Meningkatkan reuse prompt-cache di seluruh pengguna dan mesin. Lihat [Modify system prompts](/docs/id/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines) |1037| `exclude_dynamic_sections` | Tidak | Pindahkan konteks per-pengguna, seperti lokasi auto memory, dari system prompt ke pesan pengguna pertama. Meningkatkan reuse prompt-cache di seluruh pengguna dan mesin. Lihat [Modify system prompts](/docs/id/agent-sdk/modifying-system-prompts#improve-prompt-caching-across-users-and-machines) |
1038| `snapshot` | Tidak | Atur ke `False` untuk membangun kembali system prompt pada setiap permintaan alih-alih [menggunakan kembali prompt yang sesi catat pada permintaan pertamanya](/docs/id/agent-sdk/modifying-system-prompts#change-the-prompt-of-an-existing-session). Memerlukan `claude-agent-sdk` v0.2.153 atau lebih baru |1038| `snapshot` | Tidak | Atur ke `False` untuk membangun kembali system prompt pada setiap permintaan alih-alih [menggunakan kembali prompt yang sesi catat pada permintaan pertamanya](/docs/id/agent-sdk/modifying-system-prompts#change-the-prompt-of-an-existing-session). Memerlukan `claude-agent-sdk` v0.2.153 atau lebih baru |
1039 1039
1040<h3 id="systempromptcustom">1040<h3 id="systempromptcustom">
1041 `SystemPromptCustom`1041 `SystemPromptCustom`
1042</h3>1042</h3>
1043 1043
1044Prompt system 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.1044System 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.
1045 1045
1046```python theme={null}1046```python theme={null}
1047class SystemPromptCustom(TypedDict):1047class SystemPromptCustom(TypedDict):
1177Untuk memuat instruksi proyek CLAUDE.md, sertakan `"project"` dalam `setting_sources`. Lihat [Modify system prompts](/docs/id/agent-sdk/modifying-system-prompts#claude-md-files-for-project-level-instructions) untuk cara loading CLAUDE.md berinteraksi dengan opsi system prompt.1177Untuk memuat instruksi proyek CLAUDE.md, sertakan `"project"` dalam `setting_sources`. Lihat [Modify system prompts](/docs/id/agent-sdk/modifying-system-prompts#claude-md-files-for-project-level-instructions) untuk cara loading CLAUDE.md berinteraksi dengan opsi system prompt.
1178 1178
1179<h4 id="settings-precedence">1179<h4 id="settings-precedence">
1180 Preseden pengaturan1180 Prioritas pengaturan
1181</h4>1181</h4>
1182 1182
1183Ketika beberapa sumber dimuat, pengaturan digabungkan dengan preseden ini (tertinggi ke terendah):1183Ketika beberapa sumber dimuat, pengaturan digabungkan dengan urutan prioritas ini (tertinggi ke terendah):
1184 1184
11851. Pengaturan lokal (`.claude/settings.local.json`)11851. Pengaturan lokal (`.claude/settings.local.json`)
11862. Pengaturan proyek (`.claude/settings.json`)11862. Pengaturan proyek (`.claude/settings.json`)
11873. Pengaturan pengguna (`~/.claude/settings.json`)11873. Pengaturan pengguna (`~/.claude/settings.json`)
1188 1188
1189Opsi programatis seperti `agents`, `allowed_tools`, dan `settings` mengganti pengaturan filesystem pengguna, proyek, dan lokal. Pengaturan kebijakan terkelola mengambil prioritas atas opsi programatis.1189Opsi programatis seperti `agents`, `allowed_tools`, dan `settings` menimpa pengaturan filesystem pengguna, proyek, dan lokal. Pengaturan kebijakan terkelola diutamakan daripada opsi programatis.
1190 1190
1191<h3 id="agentdefinition">1191<h3 id="agentdefinition">
1192 `AgentDefinition`1192 `AgentDefinition`
1218| `prompt` | Ya | System prompt agent |1218| `prompt` | Ya | System prompt agent |
1219| `tools` | Tidak | Array nama tool yang diizinkan. Jika dihilangkan, mewarisi setiap [tool yang tersedia untuk subagent](/docs/id/sub-agents#available-tools) |1219| `tools` | Tidak | Array nama tool yang diizinkan. Jika dihilangkan, mewarisi setiap [tool yang tersedia untuk subagent](/docs/id/sub-agents#available-tools) |
1220| `disallowedTools` | Tidak | Array nama tool untuk dihapus dari set tool agent. Pola tingkat server MCP juga diterima: `mcp__server` atau `mcp__server__*` menghapus setiap tool dari server itu, dan `mcp__*` menghapus setiap tool MCP dari server apa pun |1220| `disallowedTools` | Tidak | Array nama tool untuk dihapus dari set tool agent. Pola tingkat server MCP juga diterima: `mcp__server` atau `mcp__server__*` menghapus setiap tool dari server itu, dan `mcp__*` menghapus setiap tool MCP dari server apa pun |
1221| `model` | Tidak | Penggantian model untuk agent ini. Menerima alias seperti `"sonnet"`, `"opus"`, `"haiku"`, atau `"inherit"`, atau ID model lengkap. Ketika Anda menghilangkannya, Claude Code memilih model dalam [urutan model subagent](/docs/id/sub-agents#choose-a-model) |1221| `model` | Tidak | Override model untuk agent ini. Menerima alias seperti `"sonnet"`, `"opus"`, `"haiku"`, atau `"inherit"`, atau ID model lengkap. Ketika Anda menghilangkannya, Claude Code memilih model dalam [urutan model subagent](/docs/id/sub-agents#choose-a-model) |
1222| `skills` | Tidak | Daftar nama skill untuk preload ke dalam konteks agent saat startup. Skill yang tidak terdaftar tetap dapat dipanggil melalui tool Skill |1222| `skills` | Tidak | Daftar nama skill untuk preload ke dalam konteks agent saat startup. Skill yang tidak terdaftar tetap dapat dipanggil melalui tool Skill |
1223| `memory` | Tidak | Sumber memori untuk agent ini: `"user"`, `"project"`, atau `"local"` |1223| `memory` | Tidak | Sumber memori untuk agent ini: `"user"`, `"project"`, atau `"local"` |
1224| `mcpServers` | Tidak | Server MCP yang tersedia untuk agent ini. Setiap entri adalah nama server atau dict `{name: config}` inline |1224| `mcpServers` | Tidak | Server MCP yang tersedia untuk agent ini. Setiap entri adalah nama server atau dict `{name: config}` inline |
1225| `initialPrompt` | Tidak | Auto-submitted sebagai putaran pengguna pertama ketika agent ini berjalan sebagai agent thread utama |1225| `initialPrompt` | Tidak | Auto-submitted sebagai giliran pengguna pertama ketika agent ini berjalan sebagai agent thread utama |
1226| `maxTurns` | Tidak | Jumlah maksimal putaran agentic sebelum agent berhenti |1226| `maxTurns` | Tidak | Jumlah maksimal giliran agentic sebelum agent berhenti |
1227| `background` | Tidak | Jalankan agent ini sebagai tugas latar belakang non-blocking ketika dipanggil |1227| `background` | Tidak | Jalankan agent ini sebagai tugas latar belakang non-blocking ketika dipanggil |
1228| `effort` | Tidak | Tingkat usaha reasoning untuk agent ini. Menerima tingkat bernama atau integer. Lihat [`EffortLevel`](#effortlevel) |1228| `effort` | Tidak | Tingkat effort reasoning untuk agent ini. Menerima tingkat bernama atau integer. Lihat [`EffortLevel`](#effortlevel) |
1229| `permissionMode` | Tidak | Mode izin untuk eksekusi tool dalam agent ini. [Aturan inheritance subagent](/docs/id/agent-sdk/permissions#available-modes) memutuskan kapan itu berlaku. Lihat [`PermissionMode`](#permissionmode) |1229| `permissionMode` | Tidak | Mode izin untuk eksekusi tool dalam agent ini. [Aturan inheritance subagent](/docs/id/agent-sdk/permissions#available-modes) memutuskan kapan itu berlaku. Lihat [`PermissionMode`](#permissionmode) |
1230 1230
1231<Note>1231<Note>
1253 `EffortLevel`1253 `EffortLevel`
1254</h3>1254</h3>
1255 1255
1256Tingkat usaha untuk membimbing kedalaman thinking.1256Tingkat effort untuk membimbing kedalaman thinking.
1257 1257
1258```python theme={null}1258```python theme={null}
1259EffortLevel = Literal[1259EffortLevel = Literal[
1465| `enabled` | `type`, `budget_tokens`, `display` | Aktifkan thinking dengan budget token tertentu |1465| `enabled` | `type`, `budget_tokens`, `display` | Aktifkan thinking dengan budget token tertentu |
1466| `disabled` | `type` | Nonaktifkan thinking |1466| `disabled` | `type` | Nonaktifkan thinking |
1467 1467
1468Field 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`](#thinkingblock). Claude Code tidak mengirim `display` ke Amazon Bedrock atau Google Cloud's Agent Platform, jadi pada penyedia tersebut Opus 4.7 dan lebih baru mengembalikan output `ThinkingBlock` kosong bahkan ketika Anda mengatur `display` ke `"summarized"`.1468Field 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`](#thinkingblock). Claude Code tidak menyertakan `display` dalam permintaan 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"`.
1469 1469
1470Karena 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`:1470Karena 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`:
1471 1471
1626| `serverInfo` | `dict` (opsional) | Nama dan versi server (`{"name": str, "version": str}`) |1626| `serverInfo` | `dict` (opsional) | Nama dan versi server (`{"name": str, "version": str}`) |
1627| `error` | `str` (opsional) | Pesan error jika server gagal terhubung |1627| `error` | `str` (opsional) | Pesan error jika server gagal terhubung |
1628| `config` | [`McpServerStatusConfig`](#mcpserverstatusconfig) (opsional) | Konfigurasi server. Bentuk yang sama seperti [`McpServerConfig`](#mcpserverconfig) (stdio, SSE, HTTP, atau SDK), ditambah varian `claudeai-proxy` untuk server yang terhubung melalui claude.ai |1628| `config` | [`McpServerStatusConfig`](#mcpserverstatusconfig) (opsional) | Konfigurasi server. Bentuk yang sama seperti [`McpServerConfig`](#mcpserverconfig) (stdio, SSE, HTTP, atau SDK), ditambah varian `claudeai-proxy` untuk server yang terhubung melalui claude.ai |
1629| `scope` | `str` (opsional) | Scope konfigurasi |1629| `scope` | `str` (opsional) | Cakupan konfigurasi |
1630| `tools` | `list` (opsional) | Tools yang disediakan oleh server ini, masing-masing dengan field `name`, `description`, dan `annotations` |1630| `tools` | `list` (opsional) | Tools yang disediakan oleh server ini, masing-masing dengan field `name`, `description`, dan `annotations` |
1631 1631
1632<h3 id="contextusageresponse">1632<h3 id="contextusageresponse">
1660 apiUsage: NotRequired[dict[str, Any] | None]1660 apiUsage: NotRequired[dict[str, Any] | None]
1661```1661```
1662 1662
1663Setiap entri `ContextUsageCategory` membawa `name`, `tokens`, `color`, dan flag `isDeferred` opsional. `totalTokens` adalah penggunaan konteks sesi saat ini, dan `maxTokens` adalah jendela yang penggunaan diukur terhadapnya. Jendela itu adalah jendela konteks model, atau jendela 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.1663Setiap 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.
1664 1664
1665<h3 id="sdkpluginconfig">1665<h3 id="sdkpluginconfig">
1666 `SdkPluginConfig`1666 `SdkPluginConfig`
1734| `uuid` | `str \| None` | Pengenal pesan unik |1734| `uuid` | `str \| None` | Pengenal pesan unik |
1735| `parent_tool_use_id` | `str \| None` | ID penggunaan tool jika pesan ini adalah respons hasil tool |1735| `parent_tool_use_id` | `str \| None` | ID penggunaan tool jika pesan ini adalah respons hasil tool |
1736| `tool_use_result` | `dict[str, Any] \| None` | Data hasil tool jika berlaku |1736| `tool_use_result` | `dict[str, Any] \| None` | Data hasil tool jika berlaku |
1737| `origin` | `MessageOrigin \| None` | Asal pesan ini, diisi pada putaran yang disuntikkan seperti notifikasi tugas dan pesan peer. `None` ketika CLI tidak mengatribusikannya. Memerlukan Python Agent SDK 0.2.137 atau lebih baru |1737| `origin` | `MessageOrigin \| None` | Asal pesan ini, diisi pada giliran yang disuntikkan seperti notifikasi tugas dan pesan peer. `None` ketika CLI tidak mengatribusikannya. Memerlukan Python Agent SDK 0.2.137 atau lebih baru |
1738 1738
1739SDK 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`](/docs/id/agent-sdk/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.1739SDK 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`](/docs/id/agent-sdk/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.
1740 1740
1767| `parent_tool_use_id` | `str \| None` | ID penggunaan tool jika ini adalah respons bersarang |1767| `parent_tool_use_id` | `str \| None` | ID penggunaan tool jika ini adalah respons bersarang |
1768| `error` | [`AssistantMessageError`](#assistantmessageerror) ` \| None` | Tipe error jika respons mengalami error |1768| `error` | [`AssistantMessageError`](#assistantmessageerror) ` \| None` | Tipe error jika respons mengalami error |
1769| `usage` | `dict[str, Any] \| None` | Penggunaan token per-pesan (kunci yang sama seperti [`ResultMessage.usage`](#resultmessage)) |1769| `usage` | `dict[str, Any] \| None` | Penggunaan token per-pesan (kunci yang sama seperti [`ResultMessage.usage`](#resultmessage)) |
1770| `message_id` | `str \| None` | ID pesan API. Beberapa pesan dari satu putaran berbagi ID yang sama |1770| `message_id` | `str \| None` | ID pesan API. Beberapa pesan dari satu giliran berbagi ID yang sama |
1771| `stop_reason` | `str \| None` | Alasan berhenti dari API (misalnya `end_turn`, `tool_use`) |1771| `stop_reason` | `str \| None` | Alasan berhenti dari API (misalnya `end_turn`, `tool_use`) |
1772| `session_id` | `str \| None` | ID sesi pesan ini milik |1772| `session_id` | `str \| None` | ID sesi pesan ini milik |
1773| `uuid` | `str \| None` | Pengenal pesan unik dalam transkrip sesi |1773| `uuid` | `str \| None` | Pengenal pesan unik dalam transkrip sesi |
1840 1840
1841Beberapa field membawa detail diagnostik tentang bagaimana percakapan berakhir:1841Beberapa field membawa detail diagnostik tentang bagaimana percakapan berakhir:
1842 1842
1843* `is_error`: `True` ketika percakapan berakhir dalam status error. Selalu `True` pada subtype `error_*`. Pada `subtype="success"` ini adalah `True` ketika permintaan model terakhir gagal, berarti loop agen selesai tetapi panggilan API terakhir mengembalikan error.1843* `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.
1844* `api_error_status`: kode status HTTP dari error API yang mengakhiri. `None` ketika putaran berakhir tanpa satu. Diisi hanya pada `subtype="success"`.1844* `api_error_status`: kode status HTTP dari error API yang mengakhiri. `None` ketika giliran berakhir tanpa satu. Diisi hanya pada `subtype="success"`.
1845* `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.1845* `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.
1846* `errors`: string error tingkat loop seperti pesan max-turns. Diisi hanya pada subtype `error_*`.1846* `errors`: string error tingkat loop seperti pesan max-turns. Diisi hanya pada subtype `error_*`.
1847* `terminal_reason`: mengapa loop query berakhir, seperti `"completed"`, `"max_turns"`, `"api_error"`, `"aborted_streaming"`, atau `"aborted_tools"`. Nilai `"aborted_streaming"` atau `"aborted_tools"` berarti putaran dibatalkan sebelum selesai. Penyebab umum adalah [`interrupt()`](#claudesdkclient) dan callback izin mengembalikan [`PermissionResultDeny`](#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`](/docs/id/agent-sdk/typescript#sdkresultmessage) SDK TypeScript, yang mencantumkan set lengkap nilai.1847* `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()`](#claudesdkclient) dan callback izin mengembalikan [`PermissionResultDeny`](#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`](/docs/id/agent-sdk/typescript#sdkresultmessage) SDK TypeScript, yang mencantumkan set lengkap nilai.
1848* `origin`: asal pesan pengguna yang memicu putaran ini. Dalam [mode input streaming](/docs/id/agent-sdk/streaming-vs-single-mode), periksa ini untuk membedakan hasil prompt Anda sendiri, di mana `origin` adalah `None` atau `{"kind": "human"}`, dari hasil putaran yang disuntikkan seperti notifikasi tugas latar belakang. Memerlukan Python Agent SDK 0.2.137 atau lebih baru.1848* `origin`: asal pesan pengguna yang memicu giliran ini. Dalam [mode input streaming](/docs/id/agent-sdk/streaming-vs-single-mode), 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.
1849 1849
1850Dict `usage` mencakup loop agen utama saja dan mengecualikan subagent dan panggilan model bersarang atau tambahan lainnya. Dalam [mode input streaming](/docs/id/agent-sdk/streaming-vs-single-mode), nilainya per-putaran. Lebih suka `model_usage` untuk akuntansi token dan biaya. Dict `usage` berisi kunci berikut ketika ada:1850Dict `usage` mencakup loop agent utama saja dan mengecualikan subagent dan panggilan model bersarang atau tambahan lainnya. Dalam [mode input streaming](/docs/id/agent-sdk/streaming-vs-single-mode), nilainya per-giliran. Lebih suka `model_usage` untuk akuntansi token dan biaya. Dict `usage` berisi kunci berikut ketika ada:
1851 1851
1852| Kunci | Tipe | Deskripsi |1852| Kunci | Tipe | Deskripsi |
1853| - | - | - |1853| - | - | - |
1854| `input_tokens` | `int` | Token input yang dikonsumsi oleh loop agen tingkat atas. [Token subagent tidak disertakan](/docs/id/agent-sdk/cost-tracking#get-the-total-cost-of-a-query); gunakan `model_usage` untuk akuntansi seluruh pohon. |1854| `input_tokens` | `int` | Token input yang dikonsumsi oleh loop agent tingkat atas. [Token subagent tidak disertakan](/docs/id/agent-sdk/cost-tracking#get-the-total-cost-of-a-query); gunakan `model_usage` untuk akuntansi seluruh pohon. |
1855| `output_tokens` | `int` | Token output yang dihasilkan oleh loop agen tingkat atas. Token subagent tidak disertakan. |1855| `output_tokens` | `int` | Token output yang dihasilkan oleh loop agent tingkat atas. Token subagent tidak disertakan. |
1856| `cache_creation_input_tokens` | `int` | Token yang digunakan untuk membuat entri cache baru. |1856| `cache_creation_input_tokens` | `int` | Token yang digunakan untuk membuat entri cache baru. |
1857| `cache_read_input_tokens` | `int` | Token yang dibaca dari entri cache yang ada. |1857| `cache_read_input_tokens` | `int` | Token yang dibaca dari entri cache yang ada. |
1858 1858
1859Dict `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 classifier izin dan permintaan penghitungan token, dikecualikan dari `model_usage`. Perlakukan `model_usage` sebagai perkiraan, bukan pernyataan penagihan.1859Dict `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.
1860 1860
1861Dalam [mode input streaming](/docs/id/agent-sdk/streaming-vs-single-mode), `model_usage` dan `total_cost_usd` adalah kumulatif di seluruh putaran, jadi baca hasil terbaru daripada menjumlahkan di seluruh hasil. Panggilan yang melanjutkan sesi juga menghitung [total yang dipulihkan dari panggilan sebelumnya sesi](/docs/id/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls). Lihat [Track costs in streaming input mode](/docs/id/agent-sdk/cost-tracking#track-costs-in-streaming-input-mode) untuk reset dan [Recover totals after a session crash](/docs/id/agent-sdk/cost-tracking#recover-totals-after-a-session-crash) untuk hasil yang dinolkan.1861Dalam [mode input streaming](/docs/id/agent-sdk/streaming-vs-single-mode), `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](/docs/id/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls). Lihat [Track costs in streaming input mode](/docs/id/agent-sdk/cost-tracking#track-costs-in-streaming-input-mode) untuk reset dan [Recover totals after a session crash](/docs/id/agent-sdk/cost-tracking#recover-totals-after-a-session-crash) untuk hasil yang dinolkan.
1862 1862
1863Setiap 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`](/docs/id/agent-sdk/typescript#modelusage):1863Setiap 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`](/docs/id/agent-sdk/typescript#modelusage):
1864 1864
1869| `cacheReadInputTokens` | `int` | Token baca cache untuk model ini. |1869| `cacheReadInputTokens` | `int` | Token baca cache untuk model ini. |
1870| `cacheCreationInputTokens` | `int` | Token pembuatan cache untuk model ini. |1870| `cacheCreationInputTokens` | `int` | Token pembuatan cache untuk model ini. |
1871| `webSearchRequests` | `int` | Permintaan pencarian web yang dibuat oleh model ini. |1871| `webSearchRequests` | `int` | Permintaan pencarian web yang dibuat oleh model ini. |
1872| `thinkingTokens` | `int` | Token thinking yang dihasilkan oleh model ini, sudah dihitung dalam `outputTokens`. Tidak ada sampai putaran berjalan pada versi Claude Code yang mencatatnya, dan tidak dideklarasikan pada TypedDict, jadi bacanya dengan `.get()`. Memerlukan Python Agent SDK 0.2.150 atau lebih baru, yang CLI bundel-nya mencatatnya. |1872| `thinkingTokens` | `int` | Token thinking yang dihasilkan oleh model ini, sudah dihitung dalam `outputTokens`. Tidak ada sampai giliran berjalan pada versi Claude Code yang mencatatnya, dan tidak dideklarasikan pada TypedDict, jadi bacanya dengan `.get()`. Memerlukan Python Agent SDK 0.2.150 atau lebih baru, yang CLI bundel-nya mencatatnya. |
1873| `costUSD` | `float` | Biaya yang diperkirakan dalam USD untuk model ini, dihitung sisi klien. Lihat [Track cost and usage](/docs/id/agent-sdk/cost-tracking) untuk peringatan penagihan. |1873| `costUSD` | `float` | Biaya yang diperkirakan dalam USD untuk model ini, dihitung sisi klien. Lihat [Track cost and usage](/docs/id/agent-sdk/cost-tracking) untuk peringatan penagihan. |
1874| `contextWindow` | `int` | Ukuran jendela konteks untuk model ini. |1874| `contextWindow` | `int` | Ukuran context window untuk model ini. |
1875| `maxOutputTokens` | `int` | Batas token output maksimal untuk model ini. |1875| `maxOutputTokens` | `int` | Batas token output maksimal untuk model ini. |
1876| `canonicalModel` | `str` | ID model kanonik yang digunakan untuk pencarian harga. Mungkin berbeda dari string model mentah yang menjadi kunci entri, seperti ID spesifik penyedia atau alias. Tidak selalu ada. |1876| `canonicalModel` | `str` | ID model kanonik yang digunakan untuk pencarian harga. Mungkin berbeda dari string model mentah yang menjadi kunci entri, seperti ID spesifik penyedia atau alias. Tidak selalu ada. |
1877| `provider` | `str` | Penyedia API yang melayani model ini, seperti `firstParty`, `bedrock`, `vertex`, `foundry`, `anthropicAws`, `mantle`, atau `gateway`. Tidak selalu ada. |1877| `provider` | `str` | Penyedia API yang melayani model ini, seperti `firstParty`, `bedrock`, `vertex`, `foundry`, `anthropicAws`, `mantle`, atau `gateway`. Tidak selalu ada. |
1878| `costBasis` | `str` | Tabel harga yang menentukan harga permintaan terbaru model ini: `list` untuk harga daftar, `managed` untuk tabel [`modelPricing`](/docs/id/settings-reference#modelpricing), atau `unknown` ketika tidak ada yang cocok dengan ID model. Tidak selalu ada, dan tidak dideklarasikan pada TypedDict, jadi bacanya dengan `.get()`. Memerlukan Claude Code v2.1.246 atau lebih baru. |
1878 1879
1879<h3 id="streamevent">1880<h3 id="streamevent">
1880 `StreamEvent`1881 `StreamEvent`
1978 `TaskStartedMessage`1979 `TaskStartedMessage`
1979</h3>1980</h3>
1980 1981
1981Dipancarkan ketika tugas latar belakang dimulai. Tugas latar belakang adalah apa pun yang dilacak di luar putaran utama: perintah Bash yang di-background, [Monitor](#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`.1982Dipancarkan ketika tugas latar belakang dimulai. Tugas latar belakang adalah apa pun yang dilacak di luar giliran utama: perintah Bash yang di-background, [Monitor](#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`.
1982 1983
1983```python theme={null}1984```python theme={null}
1984@dataclass1985@dataclass
2166 """Base error for Claude SDK."""2167 """Base error for Claude SDK."""
2167```2168```
2168 2169
2169Ketika `query()` single-shot berakhir dengan hasil error, misalnya error turn-limit, SDK mengangkat [`ResultError`](#resulterror) setelah menghasilkan pesan hasil akhir. Versi Python Agent SDK sebelum 0.2.140 mengangkat `Exception` biasa yang bukan subkelas `ClaudeSDKError`.2170Ketika `query()` single-shot berakhir dengan hasil error, misalnya error turn-limit, SDK mengangkat [`ResultError`](#resulterror).
2170 2171
2171<h3 id="clinotfounderror">2172<h3 id="clinotfounderror">
2172 `CLINotFoundError`2173 `CLINotFoundError`
2216 `ResultError`2217 `ResultError`
2217</h3>2218</h3>
2218 2219
2219Diangkat setelah [`ResultMessage`](#resultmessage) akhir ketika proses Claude Code keluar karena run berakhir dengan 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.2220Diangkat ketika proses Claude Code keluar karena run berakhir dengan [pesan hasil](#resultmessage) 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.
2220 2221
2221```python theme={null}2222```python theme={null}
2222class ResultError(ProcessError):2223class ResultError(ProcessError):
2649 hookEventName: Literal["PostToolUse"]2650 hookEventName: Literal["PostToolUse"]
2650 additionalContext: NotRequired[str]2651 additionalContext: NotRequired[str]
2651 updatedToolOutput: NotRequired[Any]2652 updatedToolOutput: NotRequired[Any]
2652 updatedMCPToolOutput: NotRequired[Any] # Deprecated: use updatedToolOutput, which works for all tools2653 updatedMCPToolOutput: NotRequired[Any] # MCP tools only. Prefer updatedToolOutput, which works for all tools
2653 2654
2654 2655
2655class PostToolUseFailureHookSpecificOutput(TypedDict):2656class PostToolUseFailureHookSpecificOutput(TypedDict):
2708 Contoh Penggunaan Hook2709 Contoh Penggunaan Hook
2709</h3>2710</h3>
2710 2711
2711Contoh 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.2712Contoh 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.
2712 2713
2713```python theme={null}2714```python theme={null}
2714import asyncio2715import asyncio
2782```python theme={null}2783```python theme={null}
2783{2784{
2784 "description": str, # Deskripsi singkat tugas (3-5 kata)2785 "description": str, # Deskripsi singkat tugas (3-5 kata)
2785 "prompt": str, # Tugas untuk dijalankan oleh agen2786 "prompt": str, # Tugas untuk dijalankan oleh agent
2786 "subagent_type": str | None, # Jenis agen khusus yang digunakan2787 "subagent_type": str | None, # Jenis agent khusus yang digunakan
2787 "model": "sonnet" | "opus" | "haiku" | "fable" | None, # Penggantian model untuk agen ini2788 "model": "sonnet" | "opus" | "haiku" | "fable" | None, # Override model untuk agent ini
2788 "run_in_background": bool | None, # Agen berjalan di latar belakang secara default; atur ke False untuk menjalankan secara sinkron2789 "run_in_background": bool | None, # Agent berjalan di latar belakang secara default; atur ke False untuk menjalankan secara sinkron
2789 "name": str | None, # Nama untuk agen yang dihasilkan2790 "name": str | None, # Nama untuk agent yang dihasilkan
2790 "team_name": str | None, # Tidak digunakan lagi; diabaikan2791 "team_name": str | None, # Tidak digunakan lagi; diabaikan
2791 "mode": "acceptEdits" | "auto" | "bypassPermissions" | "default" | "dontAsk" | "plan" | None, # Tidak digunakan lagi; diabaikan. Aturan pewarisan subagen memutuskan mode izin subagen2792 "mode": "acceptEdits" | "auto" | "bypassPermissions" | "default" | "dontAsk" | "plan" | None, # Tidak digunakan lagi; diabaikan. Aturan pewarisan subagent memutuskan mode izin subagent
2792 "isolation": "worktree" | "remote" | None, # Mode isolasi untuk perubahan agen2793 "isolation": "worktree" | "remote" | None, # Mode isolasi untuk perubahan agent
2793}2794}
2794```2795```
2795 2796
2796Meluncurkan agen baru untuk menangani tugas kompleks multi-langkah secara otonom.2797Meluncurkan agent baru untuk menangani tugas kompleks multi-langkah secara otonom.
2797 2798
2798**Output (status: `"completed"`):**2799**Output (status: `"completed"`):**
2799 2800
2850{2851{
2851 "status": "async_launched",2852 "status": "async_launched",
2852 "isAsync": bool | None, # True pada peluncuran latar belakang2853 "isAsync": bool | None, # True pada peluncuran latar belakang
2853 "agentId": str, # ID agen yang diluncurkan2854 "agentId": str, # ID agent yang diluncurkan
2854 "description": str, # Deskripsi tugas2855 "description": str, # Deskripsi tugas
2855 "resolvedModel": str | None, # Model yang digunakan pada transisi backgrounding2856 "resolvedModel": str | None, # Model yang digunakan pada transisi backgrounding
2856 "modelsUsed": list[str] | None, # Model yang digunakan sebelum backgrounding, secara berurutan, dengan pengulangan berturut-turut yang runtuh2857 "modelsUsed": list[str] | None, # Model yang digunakan sebelum backgrounding, secara berurutan, dengan pengulangan berturut-turut yang runtuh
2857 "prompt": str, # Prompt yang dijalankan agen2858 "prompt": str, # Prompt yang dijalankan agent
2858 "outputFile": str, # Jalur file tempat output agen ditulis2859 "outputFile": str, # Jalur file tempat output agent ditulis
2859 "canReadOutputFile": bool | None, # Apakah file output dapat dibaca secara langsung2860 "canReadOutputFile": bool | None, # Apakah file output dapat dibaca secara langsung
2860}2861}
2861```2862```
2868 "taskId": str, # ID tugas yang dikirimkan2869 "taskId": str, # ID tugas yang dikirimkan
2869 "sessionUrl": str, # Tautan ke sesi cloud2870 "sessionUrl": str, # Tautan ke sesi cloud
2870 "description": str, # Deskripsi tugas2871 "description": str, # Deskripsi tugas
2871 "prompt": str, # Prompt yang dijalankan agen2872 "prompt": str, # Prompt yang dijalankan agent
2872 "outputFile": str, # Jalur file tempat output agen ditulis2873 "outputFile": str, # Jalur file tempat output agent ditulis
2873}2874}
2874```2875```
2875 2876
2876Mengembalikan hasil dari subagen. 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 subagen yang terisolasi](/docs/id/worktrees#isolate-subagents-with-worktrees), `worktreePath` pada varian `completed` adalah tempat menemukannya, dan `worktreeBranch` adalah cabangnya ketika Claude Code membuat worktree dengan git.2877Mengembalikan 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](/docs/id/worktrees#isolate-subagents-with-worktrees), `worktreePath` pada varian `completed` adalah tempat menemukannya, dan `worktreeBranch` adalah branch-nya ketika Claude Code membuat worktree dengan git.
2877 2878
2878Pada varian `completed`, `resolvedModel` menamai model yang dimulai subagen, yang dapat berbeda dari input `model` yang diminta ketika [`availableModels`](/docs/id/model-config#restrict-model-selection) atau penggantian lain berlaku. Bidang ini memerlukan Claude Code v2.1.174 atau lebih baru. Pada varian `async_launched`, `resolvedModel` menamai model yang digunakan ketika agen 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.2879Pada varian `completed`, `resolvedModel` menamai model yang dimulai subagent, yang dapat berbeda dari input `model` yang diminta ketika [`availableModels`](/docs/id/model-config#restrict-model-selection) 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.
2879 2880
2880Claude 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.2881Claude 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.
2881 2882
3150 "file": {3151 "file": {
3151 "filePath": str,3152 "filePath": str,
3152 },3153 },
3153 "source": "seeded" | None, # Hadir ketika salinan sebelumnya berasal dari file CLAUDE.md atau memory yang dimuat saat startup daripada panggilan Read3154 "source": "seeded" | None, # Hadir ketika salinan sebelumnya berasal dari file CLAUDE.md atau memori yang dimuat saat startup daripada panggilan Read
3154}3155}
3155```3156```
3156 3157
3593```python theme={null}3594```python theme={null}
3594{3595{
3595 "plan": str | None, # Rencana yang disajikan kepada pengguna3596 "plan": str | None, # Rencana yang disajikan kepada pengguna
3596 "isAgent": bool, # True ketika subagen memanggil tool3597 "isAgent": bool, # True ketika subagent memanggil tool
3597 "filePath": str | None, # Hadir ketika rencana disimpan ke file3598 "filePath": str | None, # Hadir ketika rencana disimpan ke file
3598 "hasTaskTool": bool | None, # Opsional; apakah tool Agent tersedia dalam konteks saat ini3599 "hasTaskTool": bool | None, # Opsional; apakah tool Agent tersedia dalam konteks saat ini
3599 "planWasEdited": bool | None, # Hadir dan True ketika pengguna mengedit rencana sebelum menyetujui3600 "planWasEdited": bool | None, # Hadir dan True ketika pengguna mengedit rencana sebelum menyetujui