SpyBara
Go Premium

Documentation 2026-10-08 22:58 UTC to 2026-10-09 03:01 UTC

22 files changed +188 −46. View all changes and history on the product overview
2026
Fri 9 03:59 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59
Details

146| `auto` | Persetujuan yang diklasifikasikan model | Pengklasifikasi model meninjau tindakan seperti perintah shell dan permintaan jaringan, memungkinkan atau memblokir masing-masing yang ditinjau. Lihat [Mode Auto](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) untuk ketersediaan dan urutan keputusan |146| `auto` | Persetujuan yang diklasifikasikan model | Pengklasifikasi model meninjau tindakan seperti perintah shell dan permintaan jaringan, memungkinkan atau memblokir masing-masing yang ditinjau. Lihat [Mode Auto](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) untuk ketersediaan dan urutan keputusan |

147 147 

148<Warning>148<Warning>

149 **Pewarisan subagent:** Subagent berjalan dalam mode izin sesi induk kecuali Anda mengatur `permissionMode` pada [`AgentDefinition`](/docs/id/agent-sdk/typescript#agentdefinition) dan sesi induk berada dalam mode `default`, `dontAsk`, atau `plan`. Bahkan kemudian, Claude Code tidak pernah menerapkan nilai `"bypassPermissions"`. Subagent berjalan dalam mode `bypassPermissions` hanya ketika sesi induk itu sendiri melakukannya. Pengecualian `bypassPermissions` memerlukan Claude Code v2.1.267 atau lebih baru.149 **Pewarisan subagent:** Subagent berjalan dalam mode izin sesi induk kecuali Anda mengatur `permissionMode` pada [`AgentDefinition`](/docs/id/agent-sdk/typescript#agentdefinition) dan sesi induk berada dalam mode `default`, `dontAsk`, atau `plan`. Bahkan kemudian, Claude Code tidak pernah menerapkan nilai `"bypassPermissions"`, dan menerapkan nilai `"auto"` hanya ketika [auto mode tersedia](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) untuk subagent tersebut. Subagent berjalan dalam mode `bypassPermissions` hanya ketika sesi induk itu sendiri melakukannya. Pengecualian `bypassPermissions` memerlukan Claude Code v2.1.267 atau lebih baru.

150 150 

151 Subagent mungkin memiliki prompt sistem yang berbeda dan perilaku yang kurang terbatas daripada agen utama Anda, jadi mewarisi `bypassPermissions` memberi mereka akses sistem penuh dan otonom. [Tindakan yang tidak ada mode auto-approve](/docs/id/permission-modes#actions-no-mode-auto-approves) masih berlaku.151 Subagent mungkin memiliki prompt sistem yang berbeda dan perilaku yang kurang terbatas daripada agen utama Anda, jadi mewarisi `bypassPermissions` memberi mereka akses sistem penuh dan otonom. [Tindakan yang tidak ada mode auto-approve](/docs/id/permission-modes#actions-no-mode-auto-approves) masih berlaku.

152</Warning>152</Warning>

Details

323 Deteksi pemanggilan subagent323 Deteksi pemanggilan subagent

324</h2>324</h2>

325 325 

326Claude memanggil subagent melalui tool Agent. Untuk mendeteksi ketika subagent dipanggil, periksa blok `tool_use` di mana `name` adalah `"Agent"`. Pesan dari dalam konteks subagent mencakup field `parent_tool_use_id`.326Claude memanggil subagent melalui tool Agent. Untuk mendeteksi ketika subagent dipanggil, periksa blok `tool_use` di mana `name` adalah `"Agent"`.

327 

328Pesan dari dalam konteks subagent mencakup field `parent_tool_use_id`. Di TypeScript, setiap pesan assistant dan user yang dihasilkan subagent juga membawa [`agent_id`](/docs/id/agent-sdk/typescript#sdkassistantmessage): `task_id` dari [event task](/docs/id/agent-sdk/typescript#sdktaskstartedmessage) subagent tersebut. `agent_id` memerlukan TypeScript Agent SDK v0.3.292 atau yang lebih baru.

327 329 

328<Note>330<Note>

329 Tool muncul sebagai `"Agent"` dalam blok `tool_use` tetapi sebagai `"Task"` dalam daftar tool `system:init`. Sebelum Claude Code v2.1.63, blok `tool_use` juga menamakannya `"Task"`. Untuk menjaga deteksi tetap berfungsi di seluruh versi SDK, cocokkan kedua nilai dalam `block.name`.331 Tool muncul sebagai `"Agent"` dalam blok `tool_use` tetapi sebagai `"Task"` dalam daftar tool `system:init`. Sebelum Claude Code v2.1.63, blok `tool_use` juga menamakannya `"Task"`. Untuk menjaga deteksi tetap berfungsi di seluruh versi SDK, cocokkan kedua nilai dalam `block.name`.


331 333 

332Struktur pesan berbeda antara SDK. Di Python, Anda mengakses blok konten secara langsung melalui `message.content`. Di TypeScript, `SDKAssistantMessage` membungkus pesan API Claude, jadi Anda mengakses konten melalui `message.message.content`.334Struktur pesan berbeda antara SDK. Di Python, Anda mengakses blok konten secara langsung melalui `message.content`. Di TypeScript, `SDKAssistantMessage` membungkus pesan API Claude, jadi Anda mengakses konten melalui `message.message.content`.

333 335 

334Contoh ini melakukan iterasi melalui pesan yang di-stream, mencatat ketika subagent dipanggil dan ketika pesan berikutnya berasal dari dalam konteks eksekusi subagent tersebut.336Contoh ini melakukan iterasi melalui pesan yang di-stream, mencatat ketika subagent dipanggil dan ketika pesan berikutnya berasal dari dalam konteks eksekusi subagent tersebut. Versi TypeScript juga mencatat `agent_id` dari setiap pesan subagent yang membawanya.

335 337 

336<CodeGroup>338<CodeGroup>

337 ```python Python theme={null}339 ```python Python theme={null}


403 // Check if this message is from within a subagent's context405 // Check if this message is from within a subagent's context

404 if (msg.parent_tool_use_id) {406 if (msg.parent_tool_use_id) {

405 console.log(" (running inside subagent)");407 console.log(" (running inside subagent)");

408 // On assistant and user messages, agent_id matches the task_id

409 // on that subagent's task_started and other task events

410 if (msg.agent_id) {

411 console.log(` agent_id: ${msg.agent_id}`);

412 }

406 }413 }

407 414 

408 if ("result" in message) {415 if ("result" in message) {

Details

1557 type: "assistant";1557 type: "assistant";

1558 uuid: UUID;1558 uuid: UUID;

1559 session_id: string;1559 session_id: string;

1560 message: BetaMessage; // Dari Anthropic SDK1560 message: BetaMessage; // From Anthropic SDK

1561 parent_tool_use_id: string | null;1561 parent_tool_use_id: string | null;

1562 error?: SDKAssistantMessageError;1562 error?: SDKAssistantMessageError;

1563 aborted?: true;1563 aborted?: true;

1564 agent_id?: string;

1564 timestamp?: string;1565 timestamp?: string;

1565 context_usage?: SDKContextUsage;1566 context_usage?: SDKContextUsage;

1566 user_message_uuid?: string;1567 user_message_uuid?: string;


1580 1581 

1581`aborted` adalah `true` ketika gangguan atau pembatalan memotong pesan asisten sebelum aliran selesai: pesan tidak memiliki `stop_reason` dan konten mungkin berakhir di tengah kata. Bidang ini tidak ada pada pesan yang diselesaikan secara normal. Ini memerlukan Agent SDK v0.3.214 atau lebih baru.1582`aborted` adalah `true` ketika gangguan atau pembatalan memotong pesan asisten sebelum aliran selesai: pesan tidak memiliki `stop_reason` dan konten mungkin berakhir di tengah kata. Bidang ini tidak ada pada pesan yang diselesaikan secara normal. Ini memerlukan Agent SDK v0.3.214 atau lebih baru.

1582 1583 

1584`agent_id` mengidentifikasi subagent yang menghasilkan pesan dan tidak ada pada pesan thread utama. Nilainya sama dengan `task_id` pada [`task_started`](#sdktaskstartedmessage) dan event tugas lainnya dari subagent tersebut, dan tidak berubah ketika subagent [dilanjutkan](/docs/id/agent-sdk/subagents#resume-subagents). Field ini memerlukan Agent SDK v0.3.292 atau yang lebih baru.

1585 

1586Cocokkan pesan subagent dengan event tugasnya berdasarkan `agent_id` alih-alih memasangkan `parent_tool_use_id` sebuah pesan dengan `tool_use_id` sebuah event tugas. Ketika sebuah panggilan tool melanjutkan subagent, event tugas membawa `tool_use_id` dari panggilan tersebut, sedangkan pesan tetap membawa `parent_tool_use_id` dari panggilan tool yang pertama kali memulai subagent, sehingga keduanya tidak lagi cocok.

1587 

1583Claude Code menetapkan `user_message_uuid` dan `user_message_uuids` pada pesan asisten pertama giliran, di bawah kondisi dalam [`user_message_uuid`](#user_message_uuid). Ketika Claude Code menjalankan kembali giliran yang terinterupsi oleh restart, pesan asisten re-run yang membawa bidang itu juga membawa [`resume_reason`](#resume_reason).1588Claude Code menetapkan `user_message_uuid` dan `user_message_uuids` pada pesan asisten pertama giliran, di bawah kondisi dalam [`user_message_uuid`](#user_message_uuid). Ketika Claude Code menjalankan kembali giliran yang terinterupsi oleh restart, pesan asisten re-run yang membawa bidang itu juga membawa [`resume_reason`](#resume_reason).

1584 1589 

1585`timestamp` adalah waktu ISO 8601 ketika konten pesan selesai dihasilkan pada proses yang menghasilkannya. Nilai berasal dari jam mesin itu, jadi gunakan hanya untuk tampilan dan jangan urutkan pesan berdasarkannya. Satu giliran API dapat menghasilkan beberapa pesan asisten yang berbagi `message.id`, masing-masing dengan `timestamp` sendiri. Ketika bidang tidak ada, kembali ke waktu Anda menerima pesan.1590`timestamp` adalah waktu ISO 8601 ketika konten pesan selesai dihasilkan pada proses yang menghasilkannya. Nilai berasal dari jam mesin itu, jadi gunakan hanya untuk tampilan dan jangan urutkan pesan berdasarkannya. Satu giliran API dapat menghasilkan beberapa pesan asisten yang berbagi `message.id`, masing-masing dengan `timestamp` sendiri. Ketika bidang tidak ada, kembali ke waktu Anda menerima pesan.


1597 type: "user";1602 type: "user";

1598 uuid?: UUID;1603 uuid?: UUID;

1599 session_id?: string;1604 session_id?: string;

1605 agent_id?: string;

1600 message: MessageParam; // From Anthropic SDK1606 message: MessageParam; // From Anthropic SDK

1601 pasted_content?: MessageParam["content"][];1607 pasted_content?: MessageParam["content"][];

1602 parent_tool_use_id: string | null;1608 parent_tool_use_id: string | null;


1636};1642};

1637```1643```

1638 1644 

1645Pesan pengguna yang dihasilkan subagent, seperti `tool_result` untuk salah satu panggilan tool-nya sendiri, membawa `agent_id`. Lihat [`SDKAssistantMessage`](#sdkassistantmessage), yang mendefinisikan field tersebut dan persyaratan versinya.

1646 

1639Pada pesan yang membawa blok `tool_result`, `tool_use_result` adalah objek output terstruktur dari tool, bukan teks yang dikirim ke model. Bentuknya bergantung pada tool yang disebutkan oleh blok `tool_use` yang sesuai, sehingga field ini bertipe `unknown`; bentuk bawaan tercantum di [Tool Output Types](#tool-output-types). Hasil-hasil berikut memerlukan penanganan di luar bentuk yang tercantum:1647Pada pesan yang membawa blok `tool_result`, `tool_use_result` adalah objek output terstruktur dari tool, bukan teks yang dikirim ke model. Bentuknya bergantung pada tool yang disebutkan oleh blok `tool_use` yang sesuai, sehingga field ini bertipe `unknown`; bentuk bawaan tercantum di [Tool Output Types](#tool-output-types). Hasil-hasil berikut memerlukan penanganan di luar bentuk yang tercantum:

1640 1648 

1641* Tool `Agent`: `tool_use_result` adalah [`AgentOutput`](#agent-2). Render dari objek ini alih-alih mengurai teks `tool_result`. `content` dari hasil `completed` berisi laporan subagent, atau, untuk subagent yang laporannya melalui panggilan tool `SubagentHandback`, catatan singkat tentang penyerahan tersebut sebagai pengganti laporan. Dalam [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) pada Claude Code v2.1.271 atau lebih baru, setiap subagent yang menghasilkan hasil `completed` melapor dengan cara tersebut kecuali jika merupakan [fork](/docs/id/sub-agents#fork-the-current-conversation), dan Claude menerima laporan sebagai pesan terpisah dari subagent.1649* Tool `Agent`: `tool_use_result` adalah [`AgentOutput`](#agent-2). Render dari objek ini alih-alih mengurai teks `tool_result`. `content` dari hasil `completed` berisi laporan subagent, atau, untuk subagent yang laporannya melalui panggilan tool `SubagentHandback`, catatan singkat tentang penyerahan tersebut sebagai pengganti laporan. Dalam [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) pada Claude Code v2.1.271 atau lebih baru, setiap subagent yang menghasilkan hasil `completed` melapor dengan cara tersebut kecuali jika merupakan [fork](/docs/id/sub-agents#fork-the-current-conversation), dan Claude menerima laporan sebagai pesan terpisah dari subagent.


1992 `SDKPartialAssistantMessage`2000 `SDKPartialAssistantMessage`

1993</h3>2001</h3>

1994 2002 

1995Pesan parsial streaming (hanya ketika `includePartialMessages` adalah true). Bidang `parent_tool_use_id` selalu `null`: acara aliran dipancarkan untuk sesi utama saja. Untuk atribusi subagent, gunakan pesan lengkap, yang membawa `parent_tool_use_id`, atau aktifkan [`forwardSubagentText`](#options) untuk menerima teks dan thinking subagent sebagai pesan lengkap.2003Pesan parsial streaming (hanya ketika `includePartialMessages` bernilai true).

2004 

2005Field `parent_tool_use_id` selalu `null`: event stream hanya dikeluarkan untuk sesi utama. Untuk atribusi subagent, gunakan pesan lengkap, yang membawa [`agent_id`](#sdkassistantmessage) dan `parent_tool_use_id`, atau aktifkan [`forwardSubagentText`](#options) untuk menerima teks dan thinking subagent sebagai pesan lengkap.

1996 2006 

1997```typescript theme={null}2007```typescript theme={null}

1998type SDKPartialAssistantMessage = {2008type SDKPartialAssistantMessage = {


5777 task_type?: string;5787 task_type?: string;

5778 is_backgrounded?: boolean;5788 is_backgrounded?: boolean;

5779 spawn_depth?: number;5789 spawn_depth?: number;

5790 parent_task_id?: string;

5780 ambient?: boolean;5791 ambient?: boolean;

5781 uuid: UUID;5792 uuid: UUID;

5782 session_id: string;5793 session_id: string;


5794 5805 

5795[Subagent yang dilanjutkan](/docs/id/agent-sdk/subagents#resume-subagents) selalu melaporkan `is_backgrounded: true`, karena Claude Code menjalankan setiap subagent yang dilanjutkan di latar belakang. Ketika tugas foreground kemudian pindah ke latar belakang, Claude Code melaporkan nilai `is_backgrounded` yang baru dalam pesan [`task_updated`](#sdktaskupdatedmessage) alih-alih mengirimkan `task_started` kedua.5806[Subagent yang dilanjutkan](/docs/id/agent-sdk/subagents#resume-subagents) selalu melaporkan `is_backgrounded: true`, karena Claude Code menjalankan setiap subagent yang dilanjutkan di latar belakang. Ketika tugas foreground kemudian pindah ke latar belakang, Claude Code melaporkan nilai `is_backgrounded` yang baru dalam pesan [`task_updated`](#sdktaskupdatedmessage) alih-alih mengirimkan `task_started` kedua.

5796 5807 

5808`parent_task_id` menyimpan `task_id` dari subagent yang meluncurkan tugas ini. Gunakan untuk mengelompokkan setiap tugas di bawah subagent yang memulainya. Claude Code menetapkannya pada tugas subagent, Bash, dan [Monitor](#monitor). Field ini memerlukan Agent SDK v0.3.292 atau lebih baru. Field ini tidak ada ketika:

5809 

5810* Thread utama meluncurkan tugas

5811* Claude Code tidak lagi melacak tugas parent

5812* [Rekan tim](/docs/id/agent-teams) atau agent di dalam workflow meluncurkan tugas

5813 

5814Parent dapat berupa tugas foreground atau tugas yang sudah berakhir, jadi perlakukan ID yang tidak Anda kenali sebagai tidak memiliki parent.

5815 

5797<h3 id="sdktaskprogressmessage">5816<h3 id="sdktaskprogressmessage">

5798 `SDKTaskProgressMessage`5817 `SDKTaskProgressMessage`

5799</h3>5818</h3>


5850 `SDKBackgroundTasksChangedMessage`5869 `SDKBackgroundTasksChangedMessage`

5851</h3>5870</h3>

5852 5871 

5853Dipancarkan setiap kali set tugas latar belakang yang aktif berubah: tugas dimulai, selesai, dihentikan paksa, agent foreground dipindahkan ke latar belakang, atau field `description` atau `ambient` suatu tugas berubah.5872Dipancarkan setiap kali set tugas latar belakang yang aktif berubah: tugas dimulai, selesai, atau dihentikan paksa; agent foreground dipindahkan ke latar belakang; atau field `description`, `ambient`, atau `parent_task_id` suatu tugas berubah. Untuk field `parent_task_id` pada setiap entri, lihat [`SDKTaskStartedMessage`](#sdktaskstartedmessage), yang mendefinisikannya beserta persyaratan versinya.

5854 5873 

5855Array `tasks` adalah set aktif lengkap. Ganti set yang di-cache dengan setiap payload alih-alih memasangkan event `task_started` dan `task_notification`, sehingga perubahan keanggotaan berikutnya memperbaiki event apa pun yang Anda lewatkan.5874Array `tasks` adalah set aktif lengkap. Ganti set yang di-cache dengan setiap payload alih-alih memasangkan event `task_started` dan `task_notification`, sehingga perubahan keanggotaan berikutnya memperbaiki event apa pun yang Anda lewatkan.

5856 5875 

5857Urutan relatif terhadap event per-tugas tersebut tidak ditentukan, jadi jangan mengorelasikan kedua stream tersebut.5876Ketika tugas berakhir, [`task_updated`](#sdktaskupdatedmessage) dan [`task_notification`](#sdktasknotificationmessage)-nya tiba sebelum `background_tasks_changed` yang menghapusnya dari daftar. Di luar itu, urutan relatif terhadap event per-tugas tidak ditentukan.

5858 5877 

5859Tidak ada yang dipancarkan saat startup. Atur ulang ke set kosong setiap kali proses CLI sesi dimulai atau dimulai ulang dan biarkan perubahan keanggotaan berikutnya mengisinya kembali.5878Tidak ada yang dipancarkan saat startup. Atur ulang ke set kosong setiap kali proses CLI sesi dimulai atau dimulai ulang dan biarkan perubahan keanggotaan berikutnya mengisinya kembali.

5860 5879 


5871 task_type: string;5890 task_type: string;

5872 subagent_type?: string;5891 subagent_type?: string;

5873 description: string;5892 description: string;

5893 parent_task_id?: string;

5874 ambient?: boolean;5894 ambient?: boolean;

5875 }[];5895 }[];

5876 uuid: UUID;5896 uuid: UUID;

artifacts.md +38 −10

Details

51Build a dashboard artifact of last week's deploy failures by service and keep it updated as you investigate.51Build a dashboard artifact of last week's deploy failures by service and keep it updated as you investigate.

52```52```

53 53 

54Kecuali Anda menentukan lokasi, Claude menulis halaman ke file HTML atau Markdown di direktori sementara di luar proyek Anda, kemudian menerbitkannya. Di luar [plan mode](/docs/id/permission-modes#analyze-before-you-edit-with-plan-mode), artefak baru yang Claude terbitkan sebagai respons terhadap prompt yang Anda ketik berjalan tanpa prompt izin atau tinjauan pengklasifikasi, kecuali penerbitan tersebut mendeklarasikan kemampuan runtime untuk halaman, seperti [connector calls](#pull-live-data-with-mcp-connectors) atau [file downloads](#offer-a-file-download). Dalam plan mode, Claude Code meminta Anda sebelum penerbitan pertama setiap artefak.54Kecuali Anda menentukan lokasi, Claude menulis halaman ke file HTML atau Markdown di direktori sementara di luar proyek Anda, kemudian menerbitkannya. Artifact tetap pribadi untuk Anda sampai Anda [membagikannya](#share-an-artifact).

55 55 

56Artefak tetap pribadi untuk Anda sampai Anda [membagikannya](#share-an-artifact). Setelah Anda membagikannya secara publik, Claude Code meminta persetujuan Anda sekali per percakapan sebelum mengubahnya, atau dalam [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) memiliki pengklasifikasi meninjau perubahan tersebut.56Setelah penerbitan pertama, Claude mencetak URL, dan browser Anda membuka halaman baru.

57 57 

58Jika Anda mematikan [feature-flag fetching](/docs/id/env-vars#features-that-need-feature-flag-fetching), Claude Code meminta sebelum penerbitan pertama setiap artefak, atau dalam auto mode memiliki pengklasifikasi meninjau artefak tersebut.58* **Buka kembali halaman**: tekan `Ctrl+]` kapan saja untuk membuka kembali artifact terbaru dari sesi

59* **Lihat artifact sesi ini**: pill `⧉` di bawah prompt menampilkan nama artifact, atau jumlahnya ketika sesi memiliki beberapa artifact. Dalam [fullscreen rendering](/docs/id/fullscreen), klik pill tersebut untuk membuka daftar [`/artifacts`](#find-an-artifact-again)

60* **Cegah browser terbuka**: atur `CLAUDE_CODE_ARTIFACT_AUTO_OPEN=0` di lingkungan Anda

61* **Remote Control**: jika Anda mengirim prompt melalui [Remote Control](/docs/id/remote-control) dari claude.ai, Claude Desktop, atau aplikasi Claude mobile, tidak ada tab yang terbuka di mesin yang menjalankan sesi. Browser terbuka di sana lain kali Claude menerbitkan artifact dari prompt yang Anda ketik di terminal

59 62 

60Setelah penerbitan pertama, Claude mencetak URL, dan browser Anda membuka halaman baru. Jika Anda mengirim prompt melalui [Remote Control](/docs/id/remote-control) dari claude.ai, Claude Desktop, atau aplikasi Claude mobile, tidak ada tab yang terbuka di mesin yang menjalankan sesi. Browser terbuka di sana lain kali Claude menerbitkan artefak dari prompt yang Anda ketik di terminal. Tekan `Ctrl+]` kapan saja untuk membuka kembali artefak terbaru dari sesi Anda.63Claude memilih judul artifact dan ikon tab browser yang sesuai dengan isi halaman, seperti bagan atau kalender. Judul muncul di [galeri artifact](#share-an-artifact) Anda di claude.ai dan di tautan bersama. Minta Claude untuk judul atau ikon tab tertentu jika Anda menginginkannya.

61 64 

62Claude memilih judul artefak dan emoji, dan keduanya muncul di [galeri artefak](#share-an-artifact) Anda di claude.ai dan di tautan bersama. Claude juga dapat memilih ikon tab browser yang sesuai dengan apa yang ada di halaman, seperti bagan atau kalender. Minta Claude untuk judul, emoji, atau ikon tab tertentu jika Anda menginginkannya.65Jika Claude merespons bahwa ia tidak dapat menerbitkan, atau menulis file HTML lokal tanpa tautan, artifact tidak diaktifkan untuk sesi Anda. Periksa persyaratan [Ketersediaan](#availability). Jika terminal menampilkan `Artifacts need a claude.ai login`, lihat [entri untuk error tersebut](/docs/id/errors#artifacts-need-a-claude-ai-login) untuk cara masuk.

63 66 

64Untuk menghentikan browser agar tidak membuka secara otomatis ketika artefak baru diterbitkan, atur `CLAUDE_CODE_ARTIFACT_AUTO_OPEN=0` di lingkungan Anda.67<h3 id="when-claude-code-asks-before-publishing">

68 Kapan Claude Code bertanya sebelum menerbitkan

69</h3>

70 

71Artifact baru yang Claude terbitkan sebagai respons terhadap prompt yang Anda ketik berjalan tanpa permintaan izin atau tinjauan pengklasifikasi. Dalam kasus-kasus berikut, Claude Code bertanya kepada Anda terlebih dahulu, atau dalam [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) meminta pengklasifikasi meninjau penerbitan tersebut:

65 72 

66Jika Claude merespons bahwa ia tidak dapat menerbitkan, atau menulis file HTML lokal tanpa tautan, alat tidak diaktifkan untuk sesi Anda. Periksa persyaratan [Ketersediaan](#availability).73| Kapan | Apa yang dilakukan Claude Code |

74| :- | :- |

75| Sesi berada dalam [plan mode](/docs/id/permission-modes#analyze-before-you-edit-with-plan-mode) | Bertanya sebelum penerbitan pertama setiap artifact |

76| Penerbitan mendeklarasikan kemampuan runtime untuk halaman, seperti [panggilan konektor](#pull-live-data-with-mcp-connectors) atau [unduhan file](#offer-a-file-download) | Bertanya sebelum penerbitan tersebut |

77| Anda membagikan artifact secara publik | Bertanya sekali per percakapan sebelum mengubahnya |

78| Anda mematikan [feature-flag fetching](/docs/id/env-vars#features-that-need-feature-flag-fetching) | Bertanya sebelum penerbitan pertama setiap artifact |

79| Claude menerbitkan dalam giliran yang dimulai oleh [tugas terjadwal](/docs/id/scheduled-tasks) yang berjalan di sesi Anda, bukan oleh prompt yang Anda ketik | Bertanya sebelum penerbitan pertama setiap artifact |

80| Claude tidak dapat membaca file tanpa persetujuan Anda | Bertanya sebelum menerbitkannya. Aturan izin allow untuk tool `Artifact` tidak melewati permintaan ini |

81 

82Claude membaca file di [direktori kerja](/docs/id/permissions#working-directories) sesi Anda, dan di direktori sementara tempat ia menulis halaman, tanpa bertanya. Agar Claude dapat menerbitkan dari folder lain tanpa permintaan izin, tambahkan folder tersebut sebagai direktori kerja dengan [`--add-dir`](/docs/id/cli-reference#cli-flags) saat peluncuran atau `/add-dir` selama sesi.

67 83 

68<h2 id="update-an-artifact">84<h2 id="update-an-artifact">

69 Perbarui artefak85 Perbarui artefak


87 Temukan artefak lagi103 Temukan artefak lagi

88</h2>104</h2>

89 105 

90Jalankan `/artifacts` di Claude Code untuk membuat daftar setiap artefak yang Anda miliki dan setiap artefak yang dibagikan kepada Anda. Pilih satu dan tekan `o` untuk membukanya di browser Anda atau `c` untuk menyalin tautannya. Tekan `Enter` untuk melampirkannya ke sesi saat ini; sebelum v2.1.216, `Enter` membukanya di browser Anda. Claude Code membaca daftar dari akun claude.ai Anda, sehingga berfungsi di sesi baru dan setelah `/clear`, ketika tautan telah keluar dari terminal. Memerlukan Claude Code v2.1.208 atau lebih baru.106Jalankan `/artifacts` di Claude Code untuk membuat daftar artifact yang Anda miliki dan artifact yang dibagikan kepada Anda. Artifact dari sesi saat ini ditampilkan terlebih dahulu, di bawah **This session**. Memerlukan Claude Code v2.1.208 atau lebih baru.

107 

108Pilih sebuah artifact, lalu tekan salah satu tombol berikut:

109 

110* **`Enter`**: membukanya di browser Anda jika artifact tersebut sudah terlampir ke sesi saat ini, dan melampirkannya jika belum. Sebelum v2.1.216, `Enter` membukanya di browser Anda

111* **`o`**: membukanya di browser Anda

112* **`c`**: menyalin tautannya

113 

114Claude Code membaca daftar dari akun claude.ai Anda, sehingga berfungsi di sesi baru dan setelah `/clear`, ketika tautan telah keluar dari terminal.

91 115 

92<h2 id="share-an-artifact">116<h2 id="share-an-artifact">

93 Bagikan artefak117 Bagikan artefak


110 134 

111Editor menerbitkan versi baru dengan cara yang sama seperti Anda [memperbarui artefak dari sesi lain](#update-an-artifact): mereka memberikan Claude URL artefak, atau melampirkannya dari [`/artifacts`](#find-an-artifact-again), dan Claude menarik konten saat ini dan menerbitkan ulang dengan perubahan mereka. Semua orang dengan halaman terbuka melihat setiap pembaruan secara langsung.135Editor menerbitkan versi baru dengan cara yang sama seperti Anda [memperbarui artefak dari sesi lain](#update-an-artifact): mereka memberikan Claude URL artefak, atau melampirkannya dari [`/artifacts`](#find-an-artifact-again), dan Claude menarik konten saat ini dan menerbitkan ulang dengan perubahan mereka. Semua orang dengan halaman terbuka melihat setiap pembaruan secara langsung.

112 136 

137Jika seorang editor menerbitkan saat Claude masih memegang salinan halaman yang lebih lama, Claude Code menolak penerbitan yang dibangun di atas salinan tersebut. Claude kemudian menggabungkan perubahannya ke versi yang lebih baru dan menerbitkan lagi.

138 

113<h2 id="read-an-artifact-shared-with-you">139<h2 id="read-an-artifact-shared-with-you">

114 Baca artefak yang dibagikan dengan Anda140 Baca artefak yang dibagikan dengan Anda

115</h2>141</h2>


168 194 

169Claude juga berhenti membalas dengan sendirinya ke artefak setelah menangani 60 komentar yang dikirim atau aktivasi thread pada artefak tersebut dalam satu jam. Anda melihat `Comments are waiting on Artifact: <name>` sekali, dan Claude melanjutkan lagi saat komentar jam itu sudah lama.195Claude juga berhenti membalas dengan sendirinya ke artefak setelah menangani 60 komentar yang dikirim atau aktivasi thread pada artefak tersebut dalam satu jam. Anda melihat `Comments are waiting on Artifact: <name>` sekali, dan Claude melanjutkan lagi saat komentar jam itu sudah lama.

170 196 

171Jalankan `/tasks` untuk melihat setiap artefak yang sesi Anda pantau, tercantum sebagai tugas pembaruan langsung. Anda dapat menghentikan Claude dari membalas dengan sendirinya dengan salah satu cara berikut:197Jalankan `/tasks` untuk melihat artifact yang dipantau oleh sesi Anda. `/tasks` mengelompokkan pemantauan yang dimulai Claude Code dengan sendirinya di bawah baris **System tasks**. Tekan `Enter` pada baris tersebut untuk menampilkan daftarnya. Pemantauan yang Anda minta untuk dimulai oleh Claude muncul di bawah **Monitors**.

198 

199Anda dapat menghentikan Claude dari membalas dengan sendirinya dengan salah satu cara berikut:

172 200 

173* **Tekan Ctrl+C sekali pada prompt idle**: Claude berhenti membalas pada setiap artefak yang sesi Anda pantau. Balasan dimulai lagi setelah Anda mengirim pesan berikutnya.201* **Tekan Ctrl+C sekali pada prompt idle**: Claude berhenti membalas pada setiap artefak yang sesi Anda pantau. Balasan dimulai lagi setelah Anda mengirim pesan berikutnya.

174* **Hentikan tugas di `/tasks`**: Claude berhenti membalas pada artefak tersebut sampai Anda memintanya melanjutkan balasan di sana. Menerbitkan artefak lagi tidak memulai balasan lagi, dan penghentian masih berlaku ketika Anda melanjutkan sesi nanti.202* **Hentikan tugas di `/tasks`**: Claude berhenti membalas pada artefak tersebut sampai Anda memintanya melanjutkan balasan di sana. Menerbitkan artefak lagi tidak memulai balasan lagi, dan penghentian masih berlaku ketika Anda melanjutkan sesi nanti.


391| Autentikasi | Sesi didukung oleh akun claude.ai: masuk dengan `/login` di CLI atau aplikasi desktop. Sesi Claude Tag masuk melalui identitas agen, jadi tidak ada langkah yang diperlukan di sana. Sesi menggunakan kunci API, [gateway token](/docs/id/llm-gateway), atau kredensial penyedia cloud tidak dapat menerbitkan. |419| Autentikasi | Sesi didukung oleh akun claude.ai: masuk dengan `/login` di CLI atau aplikasi desktop. Sesi Claude Tag masuk melalui identitas agen, jadi tidak ada langkah yang diperlukan di sana. Sesi menggunakan kunci API, [gateway token](/docs/id/llm-gateway), atau kredensial penyedia cloud tidak dapat menerbitkan. |

392| Penyedia model | Anthropic API. Tidak tersedia di [Amazon Bedrock](/docs/id/amazon-bedrock), [Google Cloud's Agent Platform](/docs/id/google-vertex-ai), atau [Microsoft Foundry](/docs/id/microsoft-foundry). |420| Penyedia model | Anthropic API. Tidak tersedia di [Amazon Bedrock](/docs/id/amazon-bedrock), [Google Cloud's Agent Platform](/docs/id/google-vertex-ai), atau [Microsoft Foundry](/docs/id/microsoft-foundry). |

393| Kebijakan organisasi | Kunci enkripsi yang dikelola pelanggan (CMEK), HIPAA, dan [Zero Data Retention](/docs/id/zero-data-retention) tidak diaktifkan untuk organisasi. |421| Kebijakan organisasi | Kunci enkripsi yang dikelola pelanggan (CMEK), HIPAA, dan [Zero Data Retention](/docs/id/zero-data-retention) tidak diaktifkan untuk organisasi. |

394| Surface | Claude Code CLI, atau aplikasi desktop Claude versi 1.13576.0 atau lebih baru. Sesi [Claude Tag](https://claude.com/docs/claude-tag/overview) juga dapat menerbitkan artifacts ketika Claude Tag dan artifacts keduanya diaktifkan untuk organisasi. Dimatikan secara default di konteks [Agent SDK](/docs/id/agent-sdk/overview), GitHub Action, dan server MCP, ketika Anda menjalankan Claude Code dengan [`-p`](/docs/id/headless) dari terminal atau skrip Anda sendiri, dan ketika [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/id/env-vars) diatur. |422| Surface | Claude Code CLI, atau aplikasi desktop Claude versi 1.13576.0 atau lebih baru. Sesi [Claude Tag](https://claude.com/docs/claude-tag/overview) juga dapat menerbitkan artifacts ketika Claude Tag dan artifacts keduanya diaktifkan untuk organisasi. Sesi yang dilayani oleh [`claude remote-control`](/docs/id/remote-control) dapat menerbitkan artifacts ketika Anda memulai sesi tersebut sendiri. Memerlukan Claude Code v2.1.281 atau lebih baru. Dimatikan secara default di konteks [Agent SDK](/docs/id/agent-sdk/overview), GitHub Action, dan server MCP, ketika Anda menjalankan Claude Code dengan [`-p`](/docs/id/headless) dari terminal atau skrip Anda sendiri, dan ketika [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/id/env-vars) diatur. |

395 423 

396Apakah artifacts diizinkan untuk organisasi Anda berasal dari kebijakan organisasi Anda, yang Claude Code muat dari `api.anthropic.com`. Ketika Claude Code tidak dapat memuat kebijakan, artifacts tidak tersedia. Ketika Anda memintanya, Claude mengatakan alasannya.424Apakah artifacts diizinkan untuk organisasi Anda berasal dari kebijakan organisasi Anda, yang Claude Code muat dari `api.anthropic.com`. Ketika Claude Code tidak dapat memuat kebijakan, artifacts tidak tersedia. Ketika Anda memintanya, Claude mengatakan alasannya.

397 425 

Details

106| `--input-format` | Tentukan format input untuk mode cetak (opsi: `text`, `stream-json`) | `claude -p --output-format json --input-format stream-json` |106| `--input-format` | Tentukan format input untuk mode cetak (opsi: `text`, `stream-json`) | `claude -p --output-format json --input-format stream-json` |

107| `--json-schema` | Dapatkan output JSON yang divalidasi yang cocok dengan JSON Schema setelah agen menyelesaikan alurnya (mode cetak saja). Lihat [output terstruktur](/docs/id/agent-sdk/structured-outputs). Claude Code keluar dengan kesalahan pada skema yang tidak valid dan menerima kata kunci `format` sebagai anotasi tanpa validasi sisi klien | `claude -p --json-schema '{"type":"object","properties":{...}}' "query"` |107| `--json-schema` | Dapatkan output JSON yang divalidasi yang cocok dengan JSON Schema setelah agen menyelesaikan alurnya (mode cetak saja). Lihat [output terstruktur](/docs/id/agent-sdk/structured-outputs). Claude Code keluar dengan kesalahan pada skema yang tidak valid dan menerima kata kunci `format` sebagai anotasi tanpa validasi sisi klien | `claude -p --json-schema '{"type":"object","properties":{...}}' "query"` |

108| `--maintenance` | Jalankan [hook Setup](/docs/id/hooks#setup) dengan pencocokan `maintenance` sebelum sesi (mode cetak saja) | `claude -p --maintenance "query"` |108| `--maintenance` | Jalankan [hook Setup](/docs/id/hooks#setup) dengan pencocokan `maintenance` sebelum sesi (mode cetak saja) | `claude -p --maintenance "query"` |

109| `--max-budget-usd` | Jumlah dolar maksimum yang dibelanjakan untuk panggilan API sebelum berhenti (hanya mode print). Claude Code memeriksa batas ini terhadap [estimasi biaya sisi klien](/docs/id/agent-sdk/cost-tracking#estimates-not-billing), yang dapat berbeda dari tagihan Anda. Pengeluaran dari [subagent](/docs/id/sub-agents) dihitung terhadap batas. Ketika Anda kembali ke percakapan dengan `--continue` atau `--resume`, total yang [dipulihkan dari eksekusi sebelumnya](/docs/id/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls) tidak dihitung terhadapnya. Setelah pengeluaran mencapai batas, memunculkan subagent lain gagal dengan `Budget limit reached`, dan Claude Code menghentikan subagent latar belakang yang masih berjalan; perilaku penegakan batas ini memerlukan Claude Code v2.1.217 atau lebih baru | `claude -p --max-budget-usd 5.00 "query"` |109| `--max-budget-usd` | Hentikan eksekusi setelah estimasi pengeluaran untuk panggilan API mencapai jumlah ini (mode cetak saja). Claude Code memeriksa batas ini terhadap [estimasi biaya sisi klien](/docs/id/agent-sdk/cost-tracking#estimates-not-billing), yang dapat berbeda dari tagihan Anda. Pengeluaran dari [subagent](/docs/id/sub-agents) dihitung terhadap batas. Pengeluaran dapat melewati batas, jadi [sisakan ruang](/docs/id/agent-sdk/agent-loop#budget-headroom). Ketika Anda kembali ke percakapan dengan `--continue` atau `--resume`, total yang [dipulihkan dari eksekusi sebelumnya](/docs/id/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls) tidak dihitung terhadapnya. Setelah pengeluaran mencapai batas, memunculkan subagent lain gagal dengan `Budget limit reached`, dan Claude Code menghentikan subagent latar belakang yang masih berjalan; perilaku penegakan batas ini memerlukan Claude Code v2.1.217 atau lebih baru | `claude -p --max-budget-usd 5.00 "query"` |

110| `--max-turns` | Batasi jumlah putaran agentic (mode cetak saja). Keluar dengan kesalahan ketika batas tercapai. Tidak ada batas secara default. Dengan `--input-format stream-json`, pesan yang masih antri ketika batas mengakhiri putaran tetap antri dan memulai putaran baru dengan batasnya sendiri | `claude -p --max-turns 3 "query"` |110| `--max-turns` | Batasi jumlah putaran agentic (mode cetak saja). Keluar dengan kesalahan ketika batas tercapai. Tidak ada batas secara default. Dengan `--input-format stream-json`, pesan yang masih antri ketika batas mengakhiri putaran tetap antri dan memulai putaran baru dengan batasnya sendiri | `claude -p --max-turns 3 "query"` |

111| `--mcp-config` | Muat server MCP dari file atau string JSON (dipisahkan spasi). Ketika Anda melewatkan bendera ini dengan `-p`, Claude Code menunggu server yang masih tertunda untuk terhubung sebelum menjalankan putaran pertama, hingga waktu tunggu startup [`MCP_TIMEOUT`](/docs/id/env-vars), 30 detik secara default; server dengan [daftar alat yang di-cache](/docs/id/mcp#managing-your-servers) melewati tunggu dan terhubung saat penggunaan pertama. Tunggu memerlukan Claude Code v2.1.221 atau lebih baru | `claude --mcp-config ./mcp.json` |111| `--mcp-config` | Muat server MCP dari file atau string JSON (dipisahkan spasi). Ketika Anda melewatkan bendera ini dengan `-p`, Claude Code menunggu server yang masih tertunda untuk terhubung sebelum menjalankan putaran pertama, hingga waktu tunggu startup [`MCP_TIMEOUT`](/docs/id/env-vars), 30 detik secara default; server dengan [daftar alat yang di-cache](/docs/id/mcp#managing-your-servers) melewati tunggu dan terhubung saat penggunaan pertama. Tunggu memerlukan Claude Code v2.1.221 atau lebih baru | `claude --mcp-config ./mcp.json` |

112| `--model` | Menetapkan model untuk sesi saat ini dengan [alias model](/docs/id/model-config#model-aliases) seperti `sonnet`, `opus`, `haiku`, atau `fable`, atau nama lengkap model. Menimpa pengaturan [`model`](/docs/id/settings-reference#model) dan [`ANTHROPIC_MODEL`](/docs/id/model-config#environment-variables) | `claude --model claude-sonnet-5` |112| `--model` | Menetapkan model untuk sesi saat ini dengan [alias model](/docs/id/model-config#model-aliases) seperti `sonnet`, `opus`, `haiku`, atau `fable`, atau nama lengkap model. Menimpa pengaturan [`model`](/docs/id/settings-reference#model) dan [`ANTHROPIC_MODEL`](/docs/id/model-config#environment-variables) | `claude --model claude-sonnet-5` |

Details

307| | Tersedia di sesi cloud | Mengapa |307| | Tersedia di sesi cloud | Mengapa |

308| :- | :- | :- |308| :- | :- | :- |

309| `CLAUDE.md` repo Anda | Ya | Bagian dari klon |309| `CLAUDE.md` repo Anda | Ya | Bagian dari klon |

310| Hook `.claude/settings.json` repo Anda dan aturan izin | Ya, dalam sesi dengan satu repositori | Bagian dari klon. Sesi dengan beberapa repositori, termasuk thread [proyek](/docs/id/claude-projects#what-threads-pick-up-from-your-repositories), dimulai di atas klon dan tidak membacanya |310| Hook `.claude/settings.json` repo Anda dan aturan izin | Ya, dalam sesi dengan satu repositori | Bagian dari klon. Untuk sesi dengan beberapa repositori, lihat [pengaturan mana yang dibacanya](/docs/id/settings#settings-in-cloud-sessions) |

311| Server MCP `.mcp.json` repo Anda | Ya, dalam sesi dengan satu repositori | Bagian dari klon, ditemukan dari direktori kerja sesi |311| Server MCP `.mcp.json` repo Anda | Ya, dalam sesi dengan satu repositori | Bagian dari klon, ditemukan dari direktori kerja sesi. Untuk lingkungan yang di-host sendiri, lihat [pengaturan repositori mana yang berlaku](/docs/id/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories) |

312| `.claude/rules/` repo Anda | Ya | Bagian dari klon |312| `.claude/rules/` repo Anda | Ya | Bagian dari klon |

313| `.claude/skills/`, `.claude/agents/`, `.claude/commands/` repo Anda | Ya | Bagian dari klon |313| `.claude/skills/`, `.claude/agents/`, `.claude/commands/` repo Anda | Ya | Bagian dari klon |

314| Plugin dan marketplace yang dideklarasikan di `.claude/settings.json` repo Anda | Tidak | Sesi cloud tidak menginstal plugin yang dihidupkan repositori di bawah [`enabledPlugins`](/docs/id/settings-reference#enabledplugins), termasuk yang dari marketplace yang dicantumkan di bawah [`extraKnownMarketplaces`](/docs/id/settings-reference#extraknownmarketplaces) |314| Plugin dan marketplace yang dideklarasikan di `.claude/settings.json` repo Anda | Tidak | Sesi cloud tidak menginstal plugin yang dihidupkan repositori di bawah [`enabledPlugins`](/docs/id/settings-reference#enabledplugins), termasuk yang dari marketplace yang dicantumkan di bawah [`extraKnownMarketplaces`](/docs/id/settings-reference#extraknownmarketplaces) |


575 575 

576Hook SessionStart berperilaku sama di cloud seperti secara lokal, dengan peringatan ini:576Hook SessionStart berperilaku sama di cloud seperti secara lokal, dengan peringatan ini:

577 577 

578* **Satu repositori per sesi**: sesi dengan beberapa repositori tidak memuat hook dari `.claude/settings.json` repositori apa pun, jadi hook SessionStart yang Anda tentukan di sana tidak berjalan. Instal dependensi untuk sesi tersebut dengan [skrip setup](#setup-scripts) sebagai gantinya.578* **Satu repositori per sesi**: di lingkungan yang dihosting Anthropic, sesi dengan beberapa repositori tidak memuat hook dari `.claude/settings.json` repositori apa pun, jadi hook SessionStart yang Anda tentukan di sana tidak berjalan. Instal dependensi untuk sesi tersebut dengan [skrip setup](#setup-scripts) sebagai gantinya. Untuk lingkungan yang dihosting sendiri, lihat [pengaturan repositori mana yang berlaku](/docs/id/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories).

579* **Tidak ada scoping khusus cloud**: hook berjalan di sesi lokal dan cloud. Untuk melewati eksekusi lokal, keluar lebih awal kecuali variabel lingkungan `CLAUDE_CODE_REMOTE` adalah `true`, cara yang ditunjukkan oleh [skrip instalasi dependensi](#install-dependencies-with-a-sessionstart-hook).579* **Tidak ada scoping khusus cloud**: hook berjalan di sesi lokal dan cloud. Untuk melewati eksekusi lokal, keluar lebih awal kecuali variabel lingkungan `CLAUDE_CODE_REMOTE` adalah `true`, cara yang ditunjukkan oleh [skrip instalasi dependensi](#install-dependencies-with-a-sessionstart-hook).

580* **Memerlukan akses jaringan**: perintah instalasi perlu menjangkau registri paket. Jika lingkungan Anda menggunakan akses jaringan **None**, hook ini gagal. [Allowlist default](#default-allowed-domains) di bawah **Trusted** mencakup npm, PyPI, RubyGems, dan crates.io.580* **Memerlukan akses jaringan**: perintah instalasi perlu menjangkau registri paket. Jika lingkungan Anda menggunakan akses jaringan **None**, hook ini gagal. [Allowlist default](#default-allowed-domains) di bawah **Trusted** mencakup npm, PyPI, RubyGems, dan crates.io.

581* **Kompatibilitas proxy**: di lingkungan yang dihosting Anthropic, semua lalu lintas keluar melewati [proxy keamanan](#security-proxy), dan beberapa manajer paket tidak bekerja dengan benar dengannya; Bun adalah contoh yang diketahui. Di [lingkungan yang dihosting sendiri](/docs/id/self-hosted-environments-deploy#default-deny-egress), lalu lintas keluar melewati batas jaringan Anda sendiri.581* **Kompatibilitas proxy**: di lingkungan yang dihosting Anthropic, semua lalu lintas keluar melewati [proxy keamanan](#security-proxy), dan beberapa manajer paket tidak bekerja dengan benar dengannya; Bun adalah contoh yang diketahui. Di [lingkungan yang dihosting sendiri](/docs/id/self-hosted-environments-deploy#default-deny-egress), lalu lintas keluar melewati batas jaringan Anda sendiri.

env-vars.md +2 −1

Details

204| `CLAUDE_AFK_TIMEOUT_MS` | Berapa milidetik waktu idle sebelum dialog [`AskUserQuestion`](/docs/id/tools-reference) yang belum dijawab melanjutkan secara otomatis tanpa Anda. Auto-continue nonaktif secara default; ikut serta dengan pengaturan [`askUserQuestionTimeout`](/docs/id/settings-reference#askuserquestiontimeout). Variabel ini adalah override untuk demo dan pengujian otomatis: jika ditetapkan, variabel ini diutamakan daripada pengaturan tersebut dan mengaktifkan auto-continue bahkan ketika pengaturan tidak ditetapkan atau bernilai `never`. Menetapkan `0` tidak menonaktifkan timeout; justru menutup dialog seketika. Diabaikan di [pengaturan proyek dan lokal](/docs/id/settings-reference#variables-claude-code-ignores-in-env). Sebelum v2.1.200, auto-continue aktif secara default dengan timeout `60000` (60 detik). Memerlukan Claude Code v2.1.198 atau lebih baru |204| `CLAUDE_AFK_TIMEOUT_MS` | Berapa milidetik waktu idle sebelum dialog [`AskUserQuestion`](/docs/id/tools-reference) yang belum dijawab melanjutkan secara otomatis tanpa Anda. Auto-continue nonaktif secara default; ikut serta dengan pengaturan [`askUserQuestionTimeout`](/docs/id/settings-reference#askuserquestiontimeout). Variabel ini adalah override untuk demo dan pengujian otomatis: jika ditetapkan, variabel ini diutamakan daripada pengaturan tersebut dan mengaktifkan auto-continue bahkan ketika pengaturan tidak ditetapkan atau bernilai `never`. Menetapkan `0` tidak menonaktifkan timeout; justru menutup dialog seketika. Diabaikan di [pengaturan proyek dan lokal](/docs/id/settings-reference#variables-claude-code-ignores-in-env). Sebelum v2.1.200, auto-continue aktif secara default dengan timeout `60000` (60 detik). Memerlukan Claude Code v2.1.198 atau lebih baru |

205| `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` | Tetapkan ke `1` untuk menonaktifkan semua tipe [subagent](/docs/id/sub-agents) bawaan seperti Explore dan Plan. Hanya berlaku dalam mode non-interaktif (flag `-p`). Berguna bagi pengguna SDK yang menginginkan awal yang bersih. Ini juga menghapus `general-purpose`, subagent yang dijalankan Claude Code ketika panggilan tool Agent tidak menyertakan `subagent_type`. Panggilan seperti itu kemudian gagal dengan [`subagent_type is required`](/docs/id/errors#subagent-type-is-required) |205| `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` | Tetapkan ke `1` untuk menonaktifkan semua tipe [subagent](/docs/id/sub-agents) bawaan seperti Explore dan Plan. Hanya berlaku dalam mode non-interaktif (flag `-p`). Berguna bagi pengguna SDK yang menginginkan awal yang bersih. Ini juga menghapus `general-purpose`, subagent yang dijalankan Claude Code ketika panggilan tool Agent tidak menyertakan `subagent_type`. Panggilan seperti itu kemudian gagal dengan [`subagent_type is required`](/docs/id/errors#subagent-type-is-required) |

206| `CLAUDE_AGENT_SDK_MCP_NO_PREFIX` | Tetapkan ke `1` untuk melewati awalan `mcp__<server>__` pada nama tool dari server MCP yang dibuat SDK. Tool menggunakan nama aslinya. Hanya untuk penggunaan SDK |206| `CLAUDE_AGENT_SDK_MCP_NO_PREFIX` | Tetapkan ke `1` untuk melewati awalan `mcp__<server>__` pada nama tool dari server MCP yang dibuat SDK. Tool menggunakan nama aslinya. Hanya untuk penggunaan SDK |

207| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | Timeout macet dalam milidetik untuk subagent. Default `600000` (10 menit); jika Anda menaikkan `CLAUDE_STREAM_IDLE_TIMEOUT_MS` saat stream watchdog aktif, default ikut naik, seperti yang dijelaskan di [Menangani respons API yang lambat atau macet](/docs/id/agent-sdk/typescript#handle-slow-or-stalled-api-responses). Timer diatur ulang pada setiap event progres streaming; jika tidak ada progres yang tiba dalam rentang waktu tersebut, Claude Code membatalkan subagent dan melaporkan kemacetan ke induknya |207| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | Timeout macet dalam milidetik untuk subagent. Juga mencakup [agent workflow](/docs/id/workflows#when-an-agent-stalls-and-restarts) di Claude Code v2.1.286 atau yang lebih baru. Default `600000` (10 menit); jika Anda menaikkan `CLAUDE_STREAM_IDLE_TIMEOUT_MS` saat watchdog stream aktif, nilai default ikut naik, seperti yang dijelaskan di [Menangani respons API yang lambat atau macet](/docs/id/agent-sdk/typescript#handle-slow-or-stalled-api-responses) |

208| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | Tetapkan persentase (1-100) dari auto-compact window di mana auto-compaction dipicu. Gunakan nilai lebih rendah seperti `50` untuk melakukan compaction lebih awal; variabel ini tidak dapat menaikkan ambang batas, sehingga nilai di atas persentase default diabaikan. Ini hanya berlaku dalam sesi yang [melakukan compaction sebelum batas konteks model](/docs/id/model-config#context-window-and-auto-compaction). Berlaku untuk percakapan utama dan subagent |208| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | Tetapkan persentase (1-100) dari auto-compact window di mana auto-compaction dipicu. Gunakan nilai lebih rendah seperti `50` untuk melakukan compaction lebih awal; variabel ini tidak dapat menaikkan ambang batas, sehingga nilai di atas persentase default diabaikan. Ini hanya berlaku dalam sesi yang [melakukan compaction sebelum batas konteks model](/docs/id/model-config#context-window-and-auto-compaction). Berlaku untuk percakapan utama dan subagent |

209| `CLAUDE_AUTO_BACKGROUND_TASKS` | Tetapkan ke `1` untuk memaksa mengaktifkan pemindahan otomatis tugas agent yang berjalan lama ke latar belakang. Jika diaktifkan, subagent dipindahkan ke latar belakang setelah berjalan sekitar dua menit. Juga mengaktifkan [pemindahan otomatis panggilan tool MCP yang lama ke latar belakang](/docs/id/mcp#automatic-backgrounding-of-long-tool-calls) dalam mode non-interaktif pada Claude Code v2.1.212 atau lebih baru |209| `CLAUDE_AUTO_BACKGROUND_TASKS` | Tetapkan ke `1` untuk memaksa mengaktifkan pemindahan otomatis tugas agent yang berjalan lama ke latar belakang. Jika diaktifkan, subagent dipindahkan ke latar belakang setelah berjalan sekitar dua menit. Juga mengaktifkan [pemindahan otomatis panggilan tool MCP yang lama ke latar belakang](/docs/id/mcp#automatic-backgrounding-of-long-tool-calls) dalam mode non-interaktif pada Claude Code v2.1.212 atau lebih baru |

210| `CLAUDE_AX_PREPARK_MS` | Dalam [mode pembaca layar](/docs/id/accessibility), berapa milidetik Claude Code menunggu sebelum menulis baris yang baru atau berubah. Default `0`, sehingga Claude Code tidak menunggu. Sebelum v2.1.287, default-nya adalah `50`. Claude Code membatasi waktu tunggu pada `5000`. Memerlukan Claude Code v2.1.233 atau lebih baru |210| `CLAUDE_AX_PREPARK_MS` | Dalam [mode pembaca layar](/docs/id/accessibility), berapa milidetik Claude Code menunggu sebelum menulis baris yang baru atau berubah. Default `0`, sehingga Claude Code tidak menunggu. Sebelum v2.1.287, default-nya adalah `50`. Claude Code membatasi waktu tunggu pada `5000`. Memerlukan Claude Code v2.1.233 atau lebih baru |


378| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | Usia maksimum dalam milidetik dari pesan transkrip terakhir agar sesi yang berakhir di tengah giliran dapat berlanjut secara otomatis saat dilanjutkan. Ketika pesan terakhir lebih tua dari batas ini, Claude Code melewati pelanjutan otomatis `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` dan pesan kelanjutan `CLAUDE_CODE_RESUME_PROMPT`-nya, dan sesi dimulai dalam keadaan idle sehingga Anda melanjutkan secara eksplisit. Tidak diatur atau `0` berarti tanpa batas, kecuali bahwa giliran yang permintaan terakhirnya gagal dengan error API hanya dilanjutkan selama error tersebut berusia kurang dari enam jam. Nilai positif membatasi setiap giliran, termasuk giliran tersebut; nilai negatif atau non-numerik menerapkan batas satu jam. Skrip spawn untuk agent yang berjalan lama dapat mengatur ini agar restart terhadap transkrip lama tidak menjalankan ulang prompt yang usang. Claude Code menetapkan batas satu jam sendiri ketika memulai ulang sesi [agent view](/docs/id/agent-view) yang crash yang mewarisi percakapannya dari sesi interaktif. Memerlukan Claude Code v2.1.211 atau yang lebih baru |378| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | Usia maksimum dalam milidetik dari pesan transkrip terakhir agar sesi yang berakhir di tengah giliran dapat berlanjut secara otomatis saat dilanjutkan. Ketika pesan terakhir lebih tua dari batas ini, Claude Code melewati pelanjutan otomatis `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` dan pesan kelanjutan `CLAUDE_CODE_RESUME_PROMPT`-nya, dan sesi dimulai dalam keadaan idle sehingga Anda melanjutkan secara eksplisit. Tidak diatur atau `0` berarti tanpa batas, kecuali bahwa giliran yang permintaan terakhirnya gagal dengan error API hanya dilanjutkan selama error tersebut berusia kurang dari enam jam. Nilai positif membatasi setiap giliran, termasuk giliran tersebut; nilai negatif atau non-numerik menerapkan batas satu jam. Skrip spawn untuk agent yang berjalan lama dapat mengatur ini agar restart terhadap transkrip lama tidak menjalankan ulang prompt yang usang. Claude Code menetapkan batas satu jam sendiri ketika memulai ulang sesi [agent view](/docs/id/agent-view) yang crash yang mewarisi percakapannya dari sesi interaktif. Memerlukan Claude Code v2.1.211 atau yang lebih baru |

379| `CLAUDE_CODE_RESUME_PROMPT` | Menimpa pesan kelanjutan yang dikirim Claude Code ke Claude ketika `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` melanjutkan giliran yang terputus alih-alih mengirim ulang prompt-nya, atau ketika Anda melanjutkan [panggilan tool yang ditunda](/docs/id/hooks#defer-a-tool-call-for-later) dengan `-p`. Default ke `Continue from where you left off.`. String kosong menggunakan default |379| `CLAUDE_CODE_RESUME_PROMPT` | Menimpa pesan kelanjutan yang dikirim Claude Code ke Claude ketika `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` melanjutkan giliran yang terputus alih-alih mengirim ulang prompt-nya, atau ketika Anda melanjutkan [panggilan tool yang ditunda](/docs/id/hooks#defer-a-tool-call-for-later) dengan `-p`. Default ke `Continue from where you left off.`. String kosong menggunakan default |

380| `CLAUDE_CODE_RETRY_WATCHDOG` | Atur ke `1` untuk sesi tanpa pengawasan seperti harness evaluasi, job CI, atau worker jarak jauh. Melakukan retry pada error kapasitas `429` dan `529` tanpa batas alih-alih gagal setelah `CLAUDE_CODE_MAX_RETRIES` percobaan. Claude Code langsung gagal ketika permintaan berkecepatan standar mendapat `429` yang melaporkan batas pengeluaran atau kredit penggunaan yang habis, bahkan yang berasal dari [batas pengeluaran gateway](/docs/id/errors#spend-limit-reached) yang direset sesuai jadwal. Sebelum v2.1.239, watchdog melakukan retry pada kasus ini tanpa batas. Untuk permintaan fast mode, lihat [Menangani rate limit](/docs/id/fast-mode#handle-rate-limits). Watchdog melakukan backoff hingga 5 menit di antara percobaan, atau hingga batas direset ketika respons membawa waktu reset rate limit, sehingga sesi yang mencapai batas penggunaan menunggu hingga window yang tersisa berakhir. Pada v2.1.199 atau yang lebih baru, ini juga menaikkan jumlah retry default untuk error sementara lainnya, seperti error server, timeout, dan koneksi terputus, menjadi 300, sekitar tiga jam backoff, dan menghapus batas 15 pada `CLAUDE_CODE_MAX_RETRIES` jika Anda mengatur variabel tersebut secara eksplisit. Memerlukan Claude Code v2.1.186 atau yang lebih baru |380| `CLAUDE_CODE_RETRY_WATCHDOG` | Atur ke `1` untuk sesi tanpa pengawasan seperti harness evaluasi, job CI, atau worker jarak jauh. Melakukan retry pada error kapasitas `429` dan `529` tanpa batas alih-alih gagal setelah `CLAUDE_CODE_MAX_RETRIES` percobaan. Claude Code langsung gagal ketika permintaan berkecepatan standar mendapat `429` yang melaporkan batas pengeluaran atau kredit penggunaan yang habis, bahkan yang berasal dari [batas pengeluaran gateway](/docs/id/errors#spend-limit-reached) yang direset sesuai jadwal. Sebelum v2.1.239, watchdog melakukan retry pada kasus ini tanpa batas. Untuk permintaan fast mode, lihat [Menangani rate limit](/docs/id/fast-mode#handle-rate-limits). Watchdog melakukan backoff hingga 5 menit di antara percobaan, atau hingga batas direset ketika respons membawa waktu reset rate limit, sehingga sesi yang mencapai batas penggunaan menunggu hingga window yang tersisa berakhir. Pada v2.1.199 atau yang lebih baru, ini juga menaikkan jumlah retry default untuk error sementara lainnya, seperti error server, timeout, dan koneksi terputus, menjadi 300, sekitar tiga jam backoff, dan menghapus batas 15 pada `CLAUDE_CODE_MAX_RETRIES` jika Anda mengatur variabel tersebut secara eksplisit. Memerlukan Claude Code v2.1.186 atau yang lebih baru |

381| `CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS` | Waktu maksimum dalam milidetik yang dihabiskan setiap permintaan API untuk menunggu error `429` dan `529` ketika `CLAUDE_CODE_RETRY_WATCHDOG` diatur. Setelah waktu tersebut habis, error serupa berikutnya mengakhiri permintaan. Berikan bilangan bulat positif dalam digit biasa, seperti `1800000` untuk 30 menit. Ketika tidak diatur, penantian tidak memiliki batas. Memerlukan Claude Code v2.1.295 atau lebih baru |

381| `CLAUDE_CODE_SAFE_MODE` | Atur ke `1` untuk memulai dalam safe mode: CLAUDE.md, skill, plugin, hook, server MCP, perintah dan agent kustom, gaya output, workflow, tema kustom, pintasan keyboard kustom, perintah baris status dan saran file, server LSP, dan auto memory tidak dimuat, untuk pemecahan masalah konfigurasi yang rusak. Kebijakan pengaturan terkelola tetap berlaku, termasuk hook, baris status, dan perintah saran file yang dikonfigurasi kebijakan; plugin terkelola, skill terkelola, CLAUDE.md terkelola, dan server MCP yang dikonfigurasi kebijakan tidak berlaku. Setara dengan meneruskan [`--safe-mode`](/docs/id/cli-reference#cli-flags). Proses anak yang dimunculkan secara langsung mewarisi variabel ini |382| `CLAUDE_CODE_SAFE_MODE` | Atur ke `1` untuk memulai dalam safe mode: CLAUDE.md, skill, plugin, hook, server MCP, perintah dan agent kustom, gaya output, workflow, tema kustom, pintasan keyboard kustom, perintah baris status dan saran file, server LSP, dan auto memory tidak dimuat, untuk pemecahan masalah konfigurasi yang rusak. Kebijakan pengaturan terkelola tetap berlaku, termasuk hook, baris status, dan perintah saran file yang dikonfigurasi kebijakan; plugin terkelola, skill terkelola, CLAUDE.md terkelola, dan server MCP yang dikonfigurasi kebijakan tidak berlaku. Setara dengan meneruskan [`--safe-mode`](/docs/id/cli-reference#cli-flags). Proses anak yang dimunculkan secara langsung mewarisi variabel ini |

382| `CLAUDE_CODE_SCRIPT_CAPS` | Objek JSON yang membatasi berapa kali skrip tertentu dapat dipanggil per sesi ketika `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` diatur. Kunci adalah substring yang dicocokkan dengan teks perintah; nilai adalah batas panggilan berupa bilangan bulat. Misalnya, `{"deploy.sh": 2}` mengizinkan `deploy.sh` dipanggil paling banyak dua kali. Pencocokan berbasis substring sehingga trik ekspansi shell seperti `./scripts/deploy.sh $(evil)` tetap dihitung terhadap batas. Fan-out runtime melalui `xargs` atau `find -exec` tidak terdeteksi; ini adalah kontrol defense-in-depth |383| `CLAUDE_CODE_SCRIPT_CAPS` | Objek JSON yang membatasi berapa kali skrip tertentu dapat dipanggil per sesi ketika `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB` diatur. Kunci adalah substring yang dicocokkan dengan teks perintah; nilai adalah batas panggilan berupa bilangan bulat. Misalnya, `{"deploy.sh": 2}` mengizinkan `deploy.sh` dipanggil paling banyak dua kali. Pencocokan berbasis substring sehingga trik ekspansi shell seperti `./scripts/deploy.sh $(evil)` tetap dihitung terhadap batas. Fan-out runtime melalui `xargs` atau `find -exec` tidak terdeteksi; ini adalah kontrol defense-in-depth |

383| `CLAUDE_CODE_SCROLL_SPEED` | Mengatur pengali gulir roda mouse dalam [rendering layar penuh](/docs/id/fullscreen#mouse-wheel-scrolling). Menerima nilai positif apa pun hingga 20, termasuk nilai pecahan di bawah 1 seperti `0.5` untuk memperlambat gulir trackpad dan roda yang dipercepat di terminal yang sudah memperkuat event roda. Atur ke `3` agar sesuai dengan `vim` jika terminal Anda mengirim satu event roda per takik tanpa penguatan. Diabaikan di terminal IDE JetBrains, tempat Claude Code menggunakan penanganan gulir miliknya sendiri |384| `CLAUDE_CODE_SCROLL_SPEED` | Mengatur pengali gulir roda mouse dalam [rendering layar penuh](/docs/id/fullscreen#mouse-wheel-scrolling). Menerima nilai positif apa pun hingga 20, termasuk nilai pecahan di bawah 1 seperti `0.5` untuk memperlambat gulir trackpad dan roda yang dipercepat di terminal yang sudah memperkuat event roda. Atur ke `3` agar sesuai dengan `vim` jika terminal Anda mengirim satu event roda per takik tanpa penguatan. Diabaikan di terminal IDE JetBrains, tempat Claude Code menggunakan penanganan gulir miliknya sendiri |

errors.md +1 −1

Details

4064 Marketplace is already added from a different source4064 Marketplace is already added from a different source

4065</h3>4065</h3>

4066 4066 

4067Anda mengonfirmasi penambahan marketplace melalui [`/plugin install <plugin> --marketplace <source>`](/docs/id/plugins/install#add-a-marketplace-and-install-in-one-command), dan katalog yang Claude Code ambil dari sumber itu menamai dirinya sama dengan marketplace yang sudah Anda tambahkan dari sumber berbeda. Claude Code menyimpan marketplace yang ada daripada menggantinya, dan plugin tidak terpasang.4067Anda menyebutkan sumber marketplace baru dengan [`--marketplace <source>` pada perintah install](/docs/id/plugins/install#add-a-marketplace-and-install-in-one-command), dalam sesi atau dari shell Anda. Katalog yang Claude Code ambil dari sumber itu memiliki nama yang sama dengan marketplace yang sudah Anda tambahkan dari sumber berbeda. Claude Code menyimpan marketplace yang ada daripada menggantinya, dan plugin tidak terpasang.

4068 4068 

4069```text theme={null}4069```text theme={null}

4070Marketplace "acme-tools" is already added from a different source (github:acme/plugins). To use this source instead, remove that marketplace first with /plugin marketplace remove acme-tools.4070Marketplace "acme-tools" is already added from a different source (github:acme/plugins). To use this source instead, remove that marketplace first with /plugin marketplace remove acme-tools.

hooks.md +18 −8

Details

1237 Kontrol keputusan SessionStart1237 Kontrol keputusan SessionStart

1238</h4>1238</h4>

1239 1239 

1240Claude Code menambahkan stdout yang [diperlakukannya sebagai teks biasa](#exit-code-0) ke konteks Claude. Selain [field output JSON](#json-output) yang tersedia untuk semua hook, Anda dapat mengembalikan field khusus event berikut:1240Hook SessionStart dapat menambahkan konteks untuk Claude, menyediakan pesan pengguna pertama, menetapkan judul sesi, memantau file, dan memuat ulang skill. Kembalikan field untuk masing-masing, selain [field output JSON](#json-output) yang tersedia untuk semua hook:

1241 1241 

1242| Field | Deskripsi |1242| Field | Deskripsi |

1243| :- | :- |1243| :- | :- |

1244| `additionalContext` | String yang ditambahkan ke konteks Claude di awal percakapan, sebelum prompt pertama. Lihat [Menambahkan konteks untuk Claude](#add-context-for-claude) untuk cara teks dikirimkan dan apa yang perlu dimasukkan ke dalamnya |1244| `additionalContext` | String yang ditambahkan ke konteks Claude di awal percakapan, sebelum prompt pertama. Lihat [Menambahkan konteks untuk Claude](#add-context-for-claude) untuk cara teks dikirimkan dan apa yang perlu dimasukkan ke dalamnya |

1245| `initialUserMessage` | String yang digunakan sebagai pesan pengguna pertama dalam sesi. Berlaku dalam [mode non-interaktif](/docs/id/headless) dengan flag `-p`, tempat string ini menjadi giliran pertama bahkan jika tidak ada prompt yang diberikan. Jika prompt diberikan, prompt tersebut menyusul sebagai giliran berikutnya. Tidak seperti `additionalContext`, yang melekat pada giliran yang sudah ada, field ini membuat giliran tersebut |1245| `initialUserMessage` | String yang digunakan sebagai pesan pengguna pertama dari sesi, dalam [mode non-interaktif](/docs/id/headless) dengan flag `-p`. String ini menjadi giliran pertama meskipun Anda tidak memberikan prompt. Prompt yang Anda berikan akan mengikuti sebagai giliran berikutnya |

1246| `sessionTitle` | Menetapkan judul sesi, dengan efek yang sama seperti `/rename`. Gunakan untuk memberi nama sesi secara otomatis dari folder peluncuran, branch git, atau nama worktree. Berlaku saat `source` bernilai `"startup"`, `"resume"`, atau `"fork"`; diabaikan pada `"clear"` dan `"compact"` |1246| `sessionTitle` | Menetapkan judul sesi, dengan efek yang sama seperti `/rename`. Berlaku ketika `source` bernilai `"startup"`, `"resume"`, atau `"fork"` |

1247| `watchPaths` | Array path absolut yang dipantau untuk event [FileChanged](#filechanged) selama sesi ini |1247| `watchPaths` | Array path absolut yang dipantau untuk event [FileChanged](#filechanged) selama sesi ini |

1248| `reloadSkills` | Boolean. Saat `true`, Claude Code memindai ulang direktori [skill](/docs/id/skills) dan perintah setelah hook SessionStart selesai, sehingga skill yang dipasang oleh hook tersedia dalam sesi yang sama, dimulai dari prompt pertama |1248| `reloadSkills` | Boolean. Ketika `true`, Claude Code memindai ulang direktori [skill](/docs/id/skills) dan perintah setelah hook SessionStart selesai. Lihat [Memuat ulang skill yang dipasang hook](#reload-skills-that-a-hook-installs) |

1249 

1250Output ini menambahkan konteks dan memberi nama sesi:

1249 1251 

1250```json theme={null}1252```json theme={null}

1251{1253{


1257}1259}

1258```1260```

1259 1261 

1260Karena stdout biasa sudah sampai ke Claude untuk event ini, hook yang hanya memuat konteks dapat langsung mencetak ke stdout tanpa membuat JSON. Gunakan bentuk JSON saat Anda perlu menggabungkan konteks dengan field lain seperti `sessionTitle`.1262Hook yang hanya menambahkan konteks dapat mencetaknya tanpa membangun JSON, karena Claude Code menambahkan [stdout teks biasa](#exit-code-0) dari hook SessionStart ke konteks Claude.

1263 

1264Jika hook SessionStart dari plugin Anda menyediakan `initialUserMessage` atau `sessionTitle`, pasang plugin tersebut sebelum sesi dimulai. Claude Code mengabaikan kedua field tersebut dari plugin yang selesai dipasang setelah hook SessionStart berjalan.

1265 

1266<h4 id="reload-skills-that-a-hook-installs">

1267 Memuat ulang skill yang dipasang hook

1268</h4>

1269 

1270Agar skill yang dipasang oleh hook SessionStart tersedia dalam sesi yang sama, kembalikan `reloadSkills`. Penemuan skill biasanya berjalan sebelum hook SessionStart selesai, sehingga tanpanya, file yang ditulis hook ke `~/.claude/skills/` atau `.claude/skills/` bisa belum ada ketika prompt pertama berjalan.

1261 1271 

1262Gunakan `reloadSkills` saat hook SessionStart memasang atau memperbarui skill. Penemuan skill biasanya berjalan sebelum hook SessionStart selesai, sehingga file yang ditulis hook ke `~/.claude/skills/` atau `.claude/skills/` jika tidak demikian hanya akan muncul di sesi berikutnya. Contoh ini menyinkronkan repositori skill bersama dan meminta pemindaian ulang:1272Contoh ini menyinkronkan repositori skill bersama dan meminta pemindaian ulang:

1263 1273 

1264```bash theme={null}1274```bash theme={null}

1265#!/bin/bash1275#!/bin/bash


1270echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "reloadSkills": true}}'1280echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "reloadSkills": true}}'

1271```1281```

1272 1282 

1273URL repositori tersebut adalah placeholder; ganti dengan repositori skill Anda sendiri. Dengan placeholder tersebut, clone gagal dan mencetak pesan `fatal:` ke stderr. Stderr dari hook SessionStart yang keluar dengan 0 hanya bersifat informasional, sehingga permintaan `reloadSkills` tetap berlaku.1283URL repositori tersebut adalah placeholder. Ganti dengan repositori skill Anda sendiri.

1274 1284 

1275<h4 id="persist-environment-variables">1285<h4 id="persist-environment-variables">

1276 Mempertahankan environment variable1286 Mempertahankan environment variable


4279Async hooks memiliki batasan tambahan dibandingkan dengan hooks sinkron:4289Async hooks memiliki batasan tambahan dibandingkan dengan hooks sinkron:

4280 4290 

4281* Output hook disampaikan pada turn percakapan berikutnya. Jika sesi idle, respons menunggu sampai interaksi pengguna berikutnya. Pengecualian: hook `asyncRewake` yang keluar dengan kode 2 membangunkan Claude segera bahkan ketika sesi idle.4291* Output hook disampaikan pada turn percakapan berikutnya. Jika sesi idle, respons menunggu sampai interaksi pengguna berikutnya. Pengecualian: hook `asyncRewake` yang keluar dengan kode 2 membangunkan Claude segera bahkan ketika sesi idle.

4282* Setiap eksekusi membuat proses latar belakang terpisah. Tidak ada deduplikasi di seluruh beberapa penjalankan hook async yang sama.4292* Setiap eksekusi membuat proses latar belakang terpisah.

4283 4293 

4284<h2 id="security-considerations">4294<h2 id="security-considerations">

4285 Pertimbangan keamanan4295 Pertimbangan keamanan

Details

91| `-y, --yes` | Terima perintah instal yang ditampilkan tanpa prompt `Run this command now?`. Diabaikan ketika perintah berjalan di dalam sesi Claude Code, seperti dari tool Bash atau hook. Memerlukan Claude Code v2.1.229 atau lebih baru |91| `-y, --yes` | Terima perintah instal yang ditampilkan tanpa prompt `Run this command now?`. Diabaikan ketika perintah berjalan di dalam sesi Claude Code, seperti dari tool Bash atau hook. Memerlukan Claude Code v2.1.229 atau lebih baru |

92| `--accept-command <sha256>` | Terima perintah instal yang ditampilkan yang `sha256` sebelumnya [`--json` run](#plugin-json-result) dilaporkan dalam `shownCommand`, sebagai pengganti `-y`. Tidak dapat digabungkan dengan `-y`. Lihat [Terima perintah instal yang ditampilkan](#accept-a-displayed-install-command). Memerlukan Claude Code v2.1.271 atau lebih baru |92| `--accept-command <sha256>` | Terima perintah instal yang ditampilkan yang `sha256` sebelumnya [`--json` run](#plugin-json-result) dilaporkan dalam `shownCommand`, sebagai pengganti `-y`. Tidak dapat digabungkan dengan `-y`. Lihat [Terima perintah instal yang ditampilkan](#accept-a-displayed-install-command). Memerlukan Claude Code v2.1.271 atau lebih baru |

93| `--json` | Cetak hasil sebagai satu objek JSON pada baris terakhir stdout alih-alih pesan yang dapat dibaca manusia, untuk digunakan dalam skrip. Lihat [Format hasil JSON](#plugin-json-result). Memerlukan Claude Code v2.1.268 atau lebih baru |93| `--json` | Cetak hasil sebagai satu objek JSON pada baris terakhir stdout alih-alih pesan yang dapat dibaca manusia, untuk digunakan dalam skrip. Lihat [Format hasil JSON](#plugin-json-result). Memerlukan Claude Code v2.1.268 atau lebih baru |

94| `--marketplace <source>` | Instal `<plugin>`, yang diberikan dengan nama telanjangnya, dari marketplace di `<source>`, dengan menambahkan marketplace tersebut terlebih dahulu jika Anda belum menambahkannya. Lihat [Tambahkan marketplace dan instal dalam satu perintah](/docs/id/plugins/install#add-a-marketplace-and-install-in-one-command). Memerlukan Claude Code v2.1.292 atau lebih baru |

94 95 

95Jalankan `claude plugin install --help` di shell Anda untuk melihat setiap opsi yang didukung versi Anda.96Jalankan `claude plugin install --help` di shell Anda untuk melihat setiap opsi yang didukung versi Anda.

96 97 

Details

189 189 

190* **Scope**: cakupan pengguna secara default. Lewatkan `--scope project` atau `--scope local` untuk mengubahnya.190* **Scope**: cakupan pengguna secara default. Lewatkan `--scope project` atau `--scope local` untuk mengubahnya.

191* **When the plugins load**: plugin yang diinstalnya memuat lain kali Anda memulai Claude Code, atau ketika Anda menjalankan `/reload-plugins` dalam sesi yang sudah terbuka.191* **When the plugins load**: plugin yang diinstalnya memuat lain kali Anda memulai Claude Code, atau ketika Anda menjalankan `/reload-plugins` dalam sesi yang sudah terbuka.

192* **The marketplace must be added first**: di mesin di mana tidak ada yang telah membuka sesi Claude Code interaktif, marketplace resmi tidak terdaftar, jadi skrip yang menginstal darinya menjalankan `claude plugin marketplace add anthropics/claude-plugins-official` sebelum instalasi.192* **The marketplace on a new machine**: di mesin di mana belum ada yang membuka sesi Claude Code interaktif, marketplace resmi tidak terdaftar, jadi skrip yang menginstal darinya menjalankan `claude plugin marketplace add anthropics/claude-plugins-official` sebelum instalasi. Lihat [Tambahkan dan instal dari shell Anda](#add-and-install-from-your-shell).

193 193 

194```bash theme={null}194```bash theme={null}

195claude plugin install formatter@your-org --scope project195claude plugin install formatter@your-org --scope project


232 Tambahkan marketplace dan instal dalam satu perintah232 Tambahkan marketplace dan instal dalam satu perintah

233</h3>233</h3>

234 234 

235Untuk menginstal plugin dari marketplace yang belum Anda tambahkan, jalankan `/plugin install` dalam sesi Claude Code dan namai sumber marketplace dengan `--marketplace`. Memerlukan Claude Code v2.1.275 atau lebih baru.235Untuk menginstal plugin dari marketplace yang belum Anda tambahkan, sebutkan sumber marketplace dengan `--marketplace` pada perintah instal, dalam sesi atau dari shell Anda. Sumber mengambil [bentuk yang sama seperti `/plugin marketplace add`](#add-a-marketplace), seperti GitHub `owner/repo`, URL git, atau jalur lokal. Berikan nama plugin sendiri, tanpa akhiran `@marketplace`.

236 

237<h4 id="add-and-install-in-a-session">

238 Tambahkan dan instal dalam sesi

239</h4>

240 

241Jalankan `/plugin install` dalam sesi Claude Code dengan plugin dan sumbernya. Memerlukan Claude Code v2.1.275 atau lebih baru. Dalam sesi, sumber tidak dapat berisi spasi.

236 242 

237```text theme={null}243```text theme={null}

238/plugin install deploy-helper --marketplace your-org/plugins244/plugin install deploy-helper --marketplace your-org/plugins

239```245```

240 246 

241Sumber mengambil [bentuk yang sama seperti `/plugin marketplace add`](#add-a-marketplace), seperti GitHub `owner/repo`, URL git, atau jalur lokal, kecuali bahwa tidak dapat berisi spasi. Berikan nama plugin sendiri, tanpa akhiran `@marketplace`.

242 

243Jika Anda belum menambahkan marketplace itu, Claude Code menunjukkan sumber yang diselesaikan dan meminta Anda mengonfirmasi sebelum menambahkannya. Setelah marketplace ditambahkan, detail plugin membuka dan Anda memilih [cakupan instalasi](#install-a-plugin). Jika sumber cocok dengan marketplace yang sudah Anda tambahkan, Claude Code melewati konfirmasi dan membuka detail plugin di marketplace itu.247Jika Anda belum menambahkan marketplace itu, Claude Code menunjukkan sumber yang diselesaikan dan meminta Anda mengonfirmasi sebelum menambahkannya. Setelah marketplace ditambahkan, detail plugin membuka dan Anda memilih [cakupan instalasi](#install-a-plugin). Jika sumber cocok dengan marketplace yang sudah Anda tambahkan, Claude Code melewati konfirmasi dan membuka detail plugin di marketplace itu.

244 248 

249<h4 id="add-and-install-from-your-shell">

250 Tambahkan dan instal dari shell Anda

251</h4>

252 

253Di shell Anda, tanpa memulai sesi, jalankan `claude plugin install` dengan plugin dan sumbernya. Memerlukan Claude Code v2.1.292 atau lebih baru.

254 

255```bash theme={null}

256claude plugin install deploy-helper --marketplace your-org/plugins

257```

258 

259Perintah shell menambahkan marketplace tanpa langkah konfirmasi. Marketplace yang sudah Anda tambahkan dari sumber tersebut digunakan kembali. Marketplace baru ditambahkan dengan [pemeriksaan kebijakan organisasi](/docs/id/plugins/org#restrict-what-users-can-install) yang sama seperti `claude plugin marketplace add`, dan dideklarasikan di pengaturan pengguna Anda bahkan ketika Anda meneruskan `--scope project`.

260 

245<h3 id="add-a-private-marketplace">261<h3 id="add-a-private-marketplace">

246 Tambahkan marketplace pribadi262 Tambahkan marketplace pribadi

247</h3>263</h3>

Details

138| `$.mcp.call` | Memanggil alat pada server MCP yang terhubung, di bawah aturan izin sesi |138| `$.mcp.call` | Memanggil alat pada server MCP yang terhubung, di bawah aturan izin sesi |

139| `$.model.complete` | Menggunakan paket atau kunci API pengguna untuk panggilan model |139| `$.model.complete` | Menggunakan paket atau kunci API pengguna untuk panggilan model |

140| `$.prompt.submit` | Mengirimkan prompt, dan dapat mengirimkannya sebagai kata-kata pengguna sendiri |140| `$.prompt.submit` | Mengirimkan prompt, dan dapat mengirimkannya sebagai kata-kata pengguna sendiri |

141| `$.session.send` | Mengirimkan pesan yang dibaca sesi lain atau subagen Claude |141| `$.session.send` | Mengirimkan pesan yang dibaca oleh Claude milik sesi lain, subagent, atau [rekan tim](/docs/id/agent-teams) |

142 142 

143Dalam baris `hooks:`, [`tool.call`](/docs/id/plugins/mods/reference#tools) dan [`prompt.submit`](/docs/id/plugins/mods/reference#prompts-and-what-claude-reads) berarti mod melihat setiap panggilan alat dan setiap prompt, dan dapat mengubahnya. [`session.append`](/docs/id/plugins/mods/reference#session) berarti mod dapat menulis ulang setiap baris percakapan sebelum disimpan. [`ui.render{component=AskUserQuestion}`](/docs/id/plugins/mods/interface#change-what-claude-code-already-draws) berarti mod dapat menggambar ulang dialog yang digunakan Claude untuk menanyakan pengguna. `tool.check` berarti mod dapat menyetujui atau menolak panggilan alat sebelum prompt izin muncul. [Ketahui apa yang terjadi secara default](#know-what-happens-by-default) mencantumkan aturan dan hook mana dari Anda yang memiliki prioritas atas jawabannya.143Dalam baris `hooks:`, [`tool.call`](/docs/id/plugins/mods/reference#tools) dan [`prompt.submit`](/docs/id/plugins/mods/reference#prompts-and-what-claude-reads) berarti mod melihat setiap panggilan alat dan setiap prompt, dan dapat mengubahnya. [`session.append`](/docs/id/plugins/mods/reference#session) berarti mod dapat menulis ulang setiap baris percakapan sebelum disimpan. [`ui.render{component=AskUserQuestion}`](/docs/id/plugins/mods/interface#change-what-claude-code-already-draws) berarti mod dapat menggambar ulang dialog yang digunakan Claude untuk menanyakan pengguna. `tool.check` berarti mod dapat menyetujui atau menolak panggilan alat sebelum prompt izin muncul. [Ketahui apa yang terjadi secara default](#know-what-happens-by-default) mencantumkan aturan dan hook mana dari Anda yang memiliki prioritas atas jawabannya.

144 144 

Details

159 Mengirim dan menerima pesan antar sesi159 Mengirim dan menerima pesan antar sesi

160</h2>160</h2>

161 161 

162Sebuah mod dapat mengirim pesan teks biasa ke sesi Anda yang lain atau ke salah satu subagent milik sesi ini, serta mengamati pesan yang masuk dan keluar. `$.session.send({ to, text })` mengirim satu pesan, dengan pengiriman yang sama seperti yang dilakukan tool SendMessage. `to` adalah `{ sessionId }` untuk sebuah sesi, `{ agentId }` untuk subagent dari `$.agent.list()`, atau alamat string asal pesan yang diterima. Panggilan ini selesai setelah pesan masuk antrean, dengan `{ isDelivered: true }`. Ketika tidak ada yang tersampaikan, panggilan selesai dengan `{ isDelivered: false, reason }`, dan `reason` menjelaskan alasannya.162Sebuah mod dapat mengirim pesan teks biasa ke sesi Anda yang lain, ke salah satu subagent milik sesi ini, atau ke rekan tim dalam [tim agent](/docs/id/agent-teams) miliknya. Mod juga dapat mengamati pesan yang masuk dan keluar.

163 

164Untuk mengirim satu pesan, panggil `$.session.send({ to, text })`, yang melakukan pengiriman yang sama seperti yang dilakukan tool SendMessage. Atur `to` berdasarkan siapa yang menerima pesan:

165 

166* **Sesi Anda yang lain**: `{ sessionId }`

167* **Subagent atau rekan tim**: `{ agentId }`, dengan id dari `$.agent.list()`

168* **Pengirim pesan yang Anda terima**: alamat string asal pesan tersebut

169 

170Panggilan ini selesai setelah pesan masuk antrean, dengan `{ isDelivered: true }`. Ketika tidak ada yang tersampaikan, panggilan selesai dengan `{ isDelivered: false, reason }`, dan `reason` menjelaskan alasannya.

163 171 

164Hook ini menjawab perintah `/ping`, yang [didaftarkan sebagai perintah](#add-a-command), dengan menanyakan status kepada sesi yang id-nya Anda ketik setelah perintah tersebut:172Hook ini menjawab perintah `/ping`, yang [didaftarkan sebagai perintah](#add-a-command), dengan menanyakan status kepada sesi yang id-nya Anda ketik setelah perintah tersebut:

165 173 

Details

281 281 

282`result.usage` menyimpan hitungan token yang dilaporkan Claude API untuk permintaan, ditambah `model` yang menjawab: `input_tokens`, `output_tokens`, `cache_read_input_tokens`, dan `cache_creation_input_tokens`. Hook juga berjalan untuk permintaan subagent, jadi periksa `e.agentId` ketika Anda hanya menginginkan percakapan utama.282`result.usage` menyimpan hitungan token yang dilaporkan Claude API untuk permintaan, ditambah `model` yang menjawab: `input_tokens`, `output_tokens`, `cache_read_input_tokens`, dan `cache_creation_input_tokens`. Hook juga berjalan untuk permintaan subagent, jadi periksa `e.agentId` ketika Anda hanya menginginkan percakapan utama.

283 283 

284Untuk melihat panggilan tool yang dijalankan sendiri oleh API selama permintaan, seperti panggilan ke [tool advisor](/docs/id/advisor), baca `result.serverToolUses`. Claude Code tidak menjalankan panggilan ini, sehingga tidak ada hook `tool.call` atau `tool.check` yang diaktifkan untuk panggilan tersebut. Bidang ini tidak ada ketika respons tidak memiliki panggilan semacam itu, dan memerlukan Claude Code v2.1.290 atau yang lebih baru.

285 

284<h3 id="hook-the-settings-hook-events">286<h3 id="hook-the-settings-hook-events">

285 Tangani peristiwa hook pengaturan287 Tangani peristiwa hook pengaturan

286</h3>288</h3>

Details

209| [`$.ui`](/docs/id/plugins/mods/interface#pick-where-to-draw) | `resolve`, `invalidate`, `open`, `close`, `panes`, `focus`, `scroll`, `toast`, `status`, `log`, `notice`, `ask`, `copy`, `selection`, `blit` |209| [`$.ui`](/docs/id/plugins/mods/interface#pick-where-to-draw) | `resolve`, `invalidate`, `open`, `close`, `panes`, `focus`, `scroll`, `toast`, `status`, `log`, `notice`, `ask`, `copy`, `selection`, `blit` |

210| [`$.command`](/docs/id/plugins/mods/api#add-a-command) | `register`, `run`, `list` |210| [`$.command`](/docs/id/plugins/mods/api#add-a-command) | `register`, `run`, `list` |

211| [`$.tool`](/docs/id/plugins/mods/api#add-a-tool) | `register`, `call`, `check`, `list` |211| [`$.tool`](/docs/id/plugins/mods/api#add-a-tool) | `register`, `call`, `check`, `list` |

212| `$.agent` | `register`, `spawn`, `list` |212| `$.agent` | `register`, `spawn`, `list`. `list()` mengembalikan subagent dan rekan tim (teammate) sesi ini, masing-masing dengan `status` berupa `pending`, `running`, `waiting`, `idle`, `completed`, `failed`, atau `killed`, di mana `idle` dan `waiting` memerlukan Claude Code v2.1.289 atau yang lebih baru. |

213| [`$.model`](/docs/id/plugins/mods/api#call-a-model) | `complete`, `fork`, `classify` |213| [`$.model`](/docs/id/plugins/mods/api#call-a-model) | `complete`, `fork`, `classify` |

214| [`$.prompt`](/docs/id/plugins/mods/api#start-a-turn-from-a-background-job) | `submit`, `read`, `fill`, `suggest`, `compose`. Claude membaca teks dari `submit({ text })` setelah sebuah kalimat yang menyebut mod Anda sebagai pengirim. `submit({ text, asUser: true })` mengirim teks sebagai kata-kata pengguna sendiri, tanpa kalimat tersebut. |214| [`$.prompt`](/docs/id/plugins/mods/api#start-a-turn-from-a-background-job) | `submit`, `read`, `fill`, `suggest`, `compose`. Claude membaca teks dari `submit({ text })` setelah sebuah kalimat yang menyebut mod Anda sebagai pengirim. `submit({ text, asUser: true })` mengirim teks sebagai kata-kata pengguna sendiri, tanpa kalimat tersebut. |

215| `$.turn` | `abort` |215| `$.turn` | `abort` |


317| Timeout `$.process.run` | 30 detik secara default, paling lama 10 menit |317| Timeout `$.process.run` | 30 detik secara default, paling lama 10 menit |

318| `maxTokens` `$.model.complete` | 1024 secara default, hingga 64.000 atau batas output model |318| `maxTokens` `$.model.complete` | 1024 secara default, hingga 64.000 atau batas output model |

319| `$.fs.read` dan `$.fs.write` | 4 MiB untuk satu file |319| `$.fs.read` dan `$.fs.write` | 4 MiB untuk satu file |

320| Alasan `drop` dari hook atau alasan `deny` dari `config.set` | 4.096 karakter. Bagian akhir dari alasan yang lebih panjang dipotong, dan drop atau deny tetap berlaku. Pemotongan ini memerlukan Claude Code v2.1.292 atau yang lebih baru, dan pada versi sebelumnya hook tersebut [gagal](/docs/id/plugins/mods/events#handle-a-hook-that-fails) sebagai gantinya. |

320| Teks dalam satu tree | 100.000 karakter pertama yang digambar |321| Teks dalam satu tree | 100.000 karakter pertama yang digambar |

321| `language` atau `path` dari `Code`, `value` dari opsi `Select`, atau `module` dari `Client` | 10.000 karakter. Jika salah satunya lebih panjang, Claude Code [menggambar versi situsnya sendiri](/docs/id/plugins/mods/interface#build-a-tree-from-elements). |322| `language` atau `path` dari `Code`, `value` dari opsi `Select`, atau `module` dari `Client` | 10.000 karakter. Jika salah satunya lebih panjang, Claude Code [menggambar versi situsnya sendiri](/docs/id/plugins/mods/interface#build-a-tree-from-elements). |

322| `href` dari `Link` | 2.048 karakter. `href` yang lebih panjang membuat seluruh tree tidak digambar. |323| `href` dari `Link` | 2.048 karakter. `href` yang lebih panjang membuat seluruh tree tidak digambar. |

Details

110* `returned neither { value } nor { deny }`: stub untuk panggilan mods API mengembalikan nilai telanjang, yang membuat tes gagal110* `returned neither { value } nor { deny }`: stub untuk panggilan mods API mengembalikan nilai telanjang, yang membuat tes gagal

111* `no implementation for` diikuti oleh nama: mod Anda membuat panggilan itu dan tidak ada stub yang menjawabnya111* `no implementation for` diikuti oleh nama: mod Anda membuat panggilan itu dan tidak ada stub yang menjawabnya

112 112 

113Kit juga mengekspor mock dalam memori yang menjawab seluruh namespace untuk Anda. `mock.clock(on)` menjawab [`$.clock`](/docs/id/plugins/mods/api#run-work-in-the-background), `mock.store(on, { count: 7 })` menjawab `$.store` dari toko yang dimulai dengan entri tersebut, dan `mock.env(on, { CI: 'true' })` menjawab `$.env.get` dari variabel tersebut. `mock.clock` mengembalikan jam mock yang tes Anda maju, sehingga tes timer tidak menunggu. `mock.store` mengembalikan tidak ada, jadi untuk memeriksa apa yang disimpan mod Anda, tulis dua stub `store` sendiri seperti [tes gambar](#test-a-drawing) lakukan.113Kit juga mengekspor mock siap pakai untuk jam, toko, environment variable, dan baris yang ditambahkan ke percakapan:

114 

115* **`mock.clock(on)`**: menjawab [`$.clock`](/docs/id/plugins/mods/api#run-work-in-the-background) dan mengembalikan jam mock yang dimajukan oleh tes Anda, sehingga tes timer tidak menunggu.

116* **`mock.store(on, { count: 7 })`**: menjawab `$.store` dari toko yang dimulai dengan entri tersebut. Ini tidak mengembalikan apa pun, jadi untuk memeriksa apa yang disimpan mod Anda, tulis dua stub `store` sendiri seperti yang dilakukan [tes gambar](#test-a-drawing).

117* **`mock.env(on, { CI: 'true' })`**: menjawab `$.env.get` dari variabel tersebut.

118* **`mock.session(on)`**: mengembalikan sesi mock yang metode `appended()`-nya mencantumkan baris yang ditambahkan mod Anda dengan [`$.session.append`](/docs/id/plugins/mods/reference#session), yang terlama terlebih dahulu; ini memerlukan Claude Code v2.1.293 atau lebih baru.

114 119 

115<h3 id="follow-the-test-kit’s-rules">120<h3 id="follow-the-test-kit’s-rules">

116 Ikuti aturan test kit121 Ikuti aturan test kit


168 Lihat apa yang dikembalikan stub173 Lihat apa yang dikembalikan stub

169</h3>174</h3>

170 175 

171Setiap panggilan mods API yang dibuat mod Anda dalam tes memerlukan stub yang menjawab di tempat Claude Code, kecuali beberapa yang dijawab kit sendiri: panggilan [`$.ui.invalidate`](/docs/id/plugins/mods/interface#redraw-when-something-changes) dan [`$.state`](/docs/id/plugins/mods/interface#keep-state). Untuk panggilan `$.clock`, gunakan `mock.clock(on)`, atau `$.clock.now()` mod Anda gagal dengan `no implementation for clock.now`.176Setiap panggilan mods API yang dibuat mod Anda dalam tes memerlukan stub yang menjawab di tempat Claude Code, kecuali beberapa yang dijawab kit sendiri: panggilan [`$.ui.invalidate`](/docs/id/plugins/mods/interface#redraw-when-something-changes), [`$.state`](/docs/id/plugins/mods/interface#keep-state), dan `$.session.append`. Untuk panggilan `$.clock`, gunakan `mock.clock(on)`, atau `$.clock.now()` mod Anda gagal dengan `no implementation for clock.now`.

172 177 

173Tabel ini mencantumkan yang paling sering digunakan mod. Kolom pertama adalah panggilan yang dibuat mod Anda atau peristiwa yang dilewatkan dengan `next(e)`. Kolom kedua adalah fungsi untuk diteruskan ke `on` di bawah nama itu, jadi baris `$.store.get` menjadi `on('store.get', ($, e) => ({ value: saved.get(e.key) }))`. `'...'` dalam stub menandai teks untuk Anda isi:178Tabel ini mencantumkan yang paling sering digunakan mod. Kolom pertama adalah panggilan yang dibuat mod Anda atau peristiwa yang dilewatkan dengan `next(e)`. Kolom kedua adalah fungsi untuk diteruskan ke `on` di bawah nama itu, jadi baris `$.store.get` menjadi `on('store.get', ($, e) => ({ value: saved.get(e.key) }))`. `'...'` dalam stub menandai teks untuk Anda isi:

174 179 

Details

209 Gambar tidak muncul atau merespons209 Gambar tidak muncul atau merespons

210</h2>210</h2>

211 211 

212Mod dimuat, dan pane, band, atau kontrol tidak berperilaku seperti yang Anda harapkan.212Mod dimuat, dan pane, band, toast, atau kontrol tidak berperilaku seperti yang Anda harapkan.

213 213 

214<h3 id="a-pane-or-band-is-empty-or-shows-claude-code’s-usual-content">214<h3 id="a-pane-or-band-is-empty-or-shows-claude-code’s-usual-content">

215 Pane atau band kosong atau menampilkan konten biasa Claude Code215 Pane atau band kosong atau menampilkan konten biasa Claude Code


247 247 

248Buka pane dari perintah atau tombol, atau periksa hasil `isPlaced` panggilan. Lihat [Open a pane at the right time](/docs/id/plugins/mods/interface#open-a-pane-at-the-right-time).248Buka pane dari perintah atau tombol, atau periksa hasil `isPlaced` panggilan. Lihat [Open a pane at the right time](/docs/id/plugins/mods/interface#open-a-pane-at-the-right-time).

249 249 

250<h3 id="a-toast-doesn’t-appear">

251 Toast tidak muncul

252</h3>

253 

254Mod Anda memanggil [`$.ui.toast`](/docs/id/plugins/mods/api#show-something-without-starting-a-turn) dalam sesi terminal interaktif dan Anda tidak melihat toast tersebut. Untuk memastikan bahwa panggilan tersebut berjalan, cari di [debug log](#read-the-debug-log) baris yang berisi nama mod Anda dan teks toast, seperti `$.ui.toast (first-mod): build finished`. Kemudian periksa penyebab seperti berikut:

255 

256* **Baris untuk panggilan tersebut tidak ada**: cari baris yang menjelaskan mengapa Claude Code menolak panggilan tersebut, seperti `first-mod: $.ui.toast dropped: timeoutMs is a whole number of ms, 1 to 60000`.

257* **Sebuah pane sedang menahan toast**: mod Anda atau mod lain meneruskan [`holdToasts`](/docs/id/plugins/mods/interface#hold-toasts-behind-a-dialog) saat membuka pane yang sedang ditampilkan. Tutup pane tersebut untuk mengakhiri penahanan. Jika pane tersebut milik Anda dan memang dimaksudkan untuk tetap terbuka, hapus `holdToasts` dari panggilan `$.ui.open`-nya dan buka pane tersebut lagi.

258* **Toast berada di bawah prompt**: di [renderer klasik](/docs/id/fullscreen#enable-fullscreen-rendering), lihat di sebelah kanan di bawah prompt. Toast di sana berupa satu baris yang diawali dengan nama mod, bukan kotak di kanan atas.

259* **Mod Anda memunculkan toast yang lebih baru**: di renderer klasik, toast yang lebih baru dari mod Anda dapat menggantikan toast yang sedang ditampilkan atau sedang menunggu untuk ditampilkan. Debug log memiliki baris lain untuk toast yang lebih lama, yang diakhiri dengan `gave way, cut short` jika toast tersebut sedang ditampilkan, atau `gave way, unseen` jika toast tersebut tidak pernah muncul. Untuk menampilkan kedua pesan, letakkan keduanya dalam satu toast.

260* **Waktu toast habis sebelum digambar**: dalam rendering fullscreen, Claude Code menggambar paling banyak tiga toast sekaligus, sehingga waktu sebuah toast dapat habis sebelum toast tersebut digambar. Debug log memiliki baris lain untuk toast tersebut, yang diakhiri dengan `left the stack, never drawn`. Ketika mod Anda memunculkan beberapa toast sekaligus, letakkan pesan-pesannya dalam satu toast.

261 

262Sebelum v2.1.290, Claude Code membuang toast yang dimunculkan dalam dua detik sejak toast terakhir yang ditampilkannya untuk mod Anda, dan baris debug log untuk toast yang dibuang tersebut mengatakan `within 2000ms of the last; dropped`.

263 

250<h3 id="hotkeys-do-nothing">264<h3 id="hotkeys-do-nothing">

251 Hotkey tidak melakukan apa pun265 Hotkey tidak melakukan apa pun

252</h3>266</h3>

Details

129* Tambahkan marketplace sekali: `claude plugin marketplace add your-org/your-marketplace`, di mana argumennya adalah shorthand GitHub `owner/repo`, URL, atau jalur129* Tambahkan marketplace sekali: `claude plugin marketplace add your-org/your-marketplace`, di mana argumennya adalah shorthand GitHub `owner/repo`, URL, atau jalur

130* Pasang plugin: `claude plugin install deploy-helper@your-marketplace`130* Pasang plugin: `claude plugin install deploy-helper@your-marketplace`

131* Atau lakukan keduanya dari dalam sesi: `/plugin install deploy-helper --marketplace your-org/your-marketplace`. Memerlukan Claude Code v2.1.275 atau lebih baru. Lihat [Tambahkan marketplace dan pasang dalam satu perintah](/docs/id/plugins/install#add-a-marketplace-and-install-in-one-command)131* Atau lakukan keduanya dari dalam sesi: `/plugin install deploy-helper --marketplace your-org/your-marketplace`. Memerlukan Claude Code v2.1.275 atau lebih baru. Lihat [Tambahkan marketplace dan pasang dalam satu perintah](/docs/id/plugins/install#add-a-marketplace-and-install-in-one-command)

132* Atau lakukan keduanya dari shell dalam satu perintah: `claude plugin install deploy-helper --marketplace your-org/your-marketplace`. Memerlukan Claude Code v2.1.292 atau lebih baru

132 133 

133<h3 id="ship-updates-to-users">134<h3 id="ship-updates-to-users">

134 Kirim pembaruan kepada pengguna135 Kirim pembaruan kepada pengguna

Details

163 `Invalid marketplace source format`163 `Invalid marketplace source format`

164</h3>164</h3>

165 165 

166Anda menjalankan `/plugin marketplace add <source>` atau `claude plugin marketplace add <source>`, dan Claude Code menjawab `Invalid marketplace source format. Try: owner/repo, https://..., or ./path`.166Anda menjalankan `/plugin marketplace add <source>`, `claude plugin marketplace add <source>`, atau `claude plugin install <plugin> --marketplace <source>`, dan Claude Code menjawab `Invalid marketplace source format. Try: owner/repo, https://..., or ./path`.

167 167 

168Claude Code menerima sumber dalam salah satu bentuk ini:168Claude Code menerima sumber dalam salah satu bentuk ini:

169 169 


568 `Marketplace "<name>" is already added from a different source`568 `Marketplace "<name>" is already added from a different source`

569</h3>569</h3>

570 570 

571Anda mengonfirmasi penambahan marketplace melalui [`/plugin install <plugin> --marketplace <source>`](/docs/id/plugins/install#add-a-marketplace-and-install-in-one-command), dan katalog yang Claude Code ambil dari sumber itu memiliki nama yang sama dengan marketplace yang sudah Anda tambahkan dari sumber berbeda. Claude Code menyimpan marketplace yang ada alih-alih menggantinya, dan plugin tidak diinstal.571Anda menyebutkan sumber marketplace baru dengan [`--marketplace <source>` pada perintah instal](/docs/id/plugins/install#add-a-marketplace-and-install-in-one-command), dalam sesi atau dari shell Anda. Katalog yang Claude Code ambil dari sumber itu memiliki nama yang sama dengan marketplace yang sudah Anda tambahkan dari sumber berbeda. Claude Code menyimpan marketplace yang ada alih-alih menggantinya, dan plugin tidak diinstal.

572 572 

573Pesan lengkapnya terlihat seperti ini:573Pesan lengkapnya terlihat seperti ini:

574 574 

sub-agents.md +3 −1

Details

609Mode izin percakapan utama memutuskan apakah Claude Code menggunakan nilai yang Anda atur:609Mode izin percakapan utama memutuskan apakah Claude Code menggunakan nilai yang Anda atur:

610 610 

611* Ketika percakapan utama berada dalam `bypassPermissions`, `acceptEdits`, atau [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode), subagent berjalan dalam mode yang sama dan Claude Code mengabaikan `permissionMode` yang Anda atur. Di bawah auto mode, pengklasifikasi mengevaluasi panggilan tool subagent dengan aturan blok dan izin percakapan utama. Ketika subagent selesai, pengklasifikasi juga meninjau pekerjaan dan laporan finalnya sebelum laporan dikirimkan, seperti [How auto mode handles subagents](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) menjelaskan.611* Ketika percakapan utama berada dalam `bypassPermissions`, `acceptEdits`, atau [auto mode](/docs/id/permission-modes#eliminate-prompts-with-auto-mode), subagent berjalan dalam mode yang sama dan Claude Code mengabaikan `permissionMode` yang Anda atur. Di bawah auto mode, pengklasifikasi mengevaluasi panggilan tool subagent dengan aturan blok dan izin percakapan utama. Ketika subagent selesai, pengklasifikasi juga meninjau pekerjaan dan laporan finalnya sebelum laporan dikirimkan, seperti [How auto mode handles subagents](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) menjelaskan.

612* Ketika percakapan utama berada dalam mode `default`, `dontAsk`, atau `plan`, subagent berjalan dalam mode izin yang Anda atur, kecuali `bypassPermissions`. Subagent yang mendeklarasikan `bypassPermissions` menyimpan mode percakapan utama sebagai gantinya. Pengecualian `bypassPermissions` memerlukan Claude Code v2.1.267 atau lebih baru.612* Ketika percakapan utama berada dalam mode `default`, `dontAsk`, atau `plan`, subagent berjalan dalam mode izin yang Anda atur. Subagent tetap menggunakan mode izin percakapan utama dalam kasus berikut:

613 * Anda mengatur `bypassPermissions`. Pengecualian `bypassPermissions` memerlukan Claude Code v2.1.267 atau lebih baru.

614 * Anda mengatur `auto` dan [auto mode tidak tersedia](/docs/id/permission-modes#eliminate-prompts-with-auto-mode) untuk subagent, seperti ketika file pengaturan mengatur [`disableAutoMode`](/docs/id/settings-reference#disableautomode) atau model subagent tidak mendukung auto mode.

613 615 

614`permissionMode` menerima nilai ini, dan `manual` sebagai alias untuk `default`:616`permissionMode` menerima nilai ini, dan `manual` sebagai alias untuk `default`:

615 617 

workflows.md +27 −1

Details

354 354 

355Badan adalah JavaScript biasa dengan `await` tingkat atas. `agent()` menghasilkan satu subagen, `pipeline()` menjalankan satu per item dalam daftar, dan `parallel()` menjalankan serangkaian tugas agen pada waktu yang sama dan menunggu semuanya selesai.355Badan adalah JavaScript biasa dengan `await` tingkat atas. `agent()` menghasilkan satu subagen, `pipeline()` menjalankan satu per item dalam daftar, dan `parallel()` menjalankan serangkaian tugas agen pada waktu yang sama dan menunggu semuanya selesai.

356 356 

357Panggilan `agent()` diselesaikan ke `null` jika Anda menghentikannya di tengah-jalan atau mengalami kesalahan API yang tidak dapat dipulihkan. `pipeline()` menyimpan setiap `null` dalam array hasil, itulah mengapa contoh berakhir dengan `.filter(Boolean)` untuk menghapus entri tersebut.357Panggilan `agent()` diselesaikan ke `null` jika Anda menghentikannya di tengah-jalan atau mengalami kesalahan API yang tidak dapat dipulihkan. `pipeline()` menyimpan setiap `null` dalam array hasil, itulah mengapa contoh berakhir dengan `.filter(Boolean)` untuk menghapus entri tersebut, termasuk slot dari [agent yang macet pada setiap upaya](#when-an-agent-stalls-and-restarts).

358 358 

359Dalam [mode otomatis](/docs/id/permission-modes#eliminate-prompts-with-auto-mode), prompt yang diteruskan skrip Anda ke `agent()` tidak dihitung sebagai permintaan dari Anda ketika pengklasifikasi meninjau tindakan subagen itu, karena Claude Code menandainya sebagai teks yang dihitung skrip.359Dalam [mode otomatis](/docs/id/permission-modes#eliminate-prompts-with-auto-mode), prompt yang diteruskan skrip Anda ke `agent()` tidak dihitung sebagai permintaan dari Anda ketika pengklasifikasi meninjau tindakan subagen itu, karena Claude Code menandainya sebagai teks yang dihitung skrip.

360 360 


463* Batas direset dalam 24 jam. Batas mingguan dapat direset lebih jauh.463* Batas direset dalam 24 jam. Batas mingguan dapat direset lebih jauh.

464* Run belum menunggu dua kali. Ketika mencapai batas untuk ketiga kalinya, agen gagal.464* Run belum menunggu dua kali. Ketika mencapai batas untuk ketiga kalinya, agen gagal.

465 465 

466<h3 id="when-an-agent-stalls-and-restarts">

467 Ketika agent macet dan dimulai ulang

468</h3>

469 

470Agent yang outputnya berhenti datang cukup lama akan dimulai ulang dari prompt yang sama. Di [`/workflows`](#watch-the-run), namanya mendapat akhiran `(retry 1)` dan detailnya menampilkan `attempt 2 (stalled)`. Mulai ulang terjadi secara otomatis, jadi Anda tidak perlu melakukan apa pun.

471 

472Percobaan baru dimulai tanpa transkrip dari percobaan yang macet. File yang sudah diubah oleh percobaan yang macet tetap berubah, dan token yang dihabiskannya tetap masuk dalam total run. Jendela macet adalah berapa lama Claude Code menunggu output dari agent sebelum mengakhiri percobaan. Waktu yang dihabiskan agent untuk menunggu panggilan tool-nya sendiri atau [reset batas penggunaan](#when-a-run-hits-your-usage-limit) tidak dihitung dalam jendela macet.

473 

474Agent dimulai ulang paling banyak lima kali, termasuk mulai ulang yang Anda minta dengan `r`. Jika percobaan keenam juga macet, panggilan `agent()` gagal, dan awal pesan kesalahan menjelaskan alasannya:

475 

476* `agent stalled on all 6 attempts`: setiap percobaan melewati seluruh jendela tanpa output. Jika pekerjaan agent membuatnya diam selama itu, perpanjang jendelanya

477* `agent lost its reply on all 6 attempts`: stream respons setiap percobaan menjadi diam dan Claude Code berhenti menunggunya. Memperpanjang jendela macet tidak membantu, karena [streaming idle watchdog](/docs/id/network-config#streaming-idle-watchdogs) mengakhiri respons lebih dulu dan `CLAUDE_STREAM_IDLE_TIMEOUT_MS` mengatur timeout watchdog tersebut

478* `agent abandoned after 6 attempts`: percobaan berakhir dengan cara yang berbeda-beda, yang dicantumkan oleh pesan kesalahan secara berurutan

479 

480Untuk memberi agent lebih banyak waktu menghasilkan output sebelum jendela berakhir:

481 

482* **Satu agent**: teruskan `stallMs` dalam milidetik pada panggilan `agent()`-nya, seperti `agent(prompt, { stallMs: 1800000 })` untuk 30 menit

483* **Setiap agent**: atur [`CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`](/docs/id/env-vars#variables), yang juga berlaku untuk subagent di luar alur kerja

484 

485Apakah run berlanjut setelah kegagalan tergantung pada cara skrip Anda memanggil agent:

486 

487* **Di dalam [`parallel()` atau `pipeline()`](#what-the-saved-script-looks-like)**: run berlanjut dengan `null` sebagai pengganti hasil agent

488* **Di-await secara langsung**: run berakhir dengan kesalahan tersebut

489 

490Untuk mencoba lagi, minta Claude untuk meluncurkan kembali alur kerja. [Lanjutkan setelah jeda](#resume-after-a-pause) menjelaskan apa yang berjalan lagi.

491 

466<h3 id="cost">492<h3 id="cost">

467 Biaya493 Biaya

468</h3>494</h3>

worktrees.md +1 −1

Details

104* **Pengalihan git**: Claude Code memblokir perintah Bash atau Monitor yang mengalihkan git ke checkout utama. Pengalihan dapat datang melalui `git -C`, `--git-dir`, variabel `GIT_DIR` atau `GIT_WORK_TREE`, atau `cd` ke checkout utama sebelum menjalankan git.104* **Pengalihan git**: Claude Code memblokir perintah Bash atau Monitor yang mengalihkan git ke checkout utama. Pengalihan dapat datang melalui `git -C`, `--git-dir`, variabel `GIT_DIR` atau `GIT_WORK_TREE`, atau `cd` ke checkout utama sebelum menjalankan git.

105* **Bentuk perintah**: Claude Code memblokir perintah Bash atau Monitor saat tidak dapat memverifikasi dari teks perintah bahwa git apa pun yang dijalankan perintah tetap berada di dalam worktree. Itu terjadi, misalnya, saat nama perintah dihitung saat runtime, saat sintaks tidak dapat diuraikan, atau saat ekspansi seperti `${!name}` atau `${ command; }` dapat menjalankan perintah yang teks tidak jelaskan. Claude Code memberi tahu Claude cara menulis ulang perintah yang ditolak, seperti membaginya menjadi perintah biasa yang terpisah. Anda tidak dapat mematikan pemeriksaan ini.105* **Bentuk perintah**: Claude Code memblokir perintah Bash atau Monitor saat tidak dapat memverifikasi dari teks perintah bahwa git apa pun yang dijalankan perintah tetap berada di dalam worktree. Itu terjadi, misalnya, saat nama perintah dihitung saat runtime, saat sintaks tidak dapat diuraikan, atau saat ekspansi seperti `${!name}` atau `${ command; }` dapat menjalankan perintah yang teks tidak jelaskan. Claude Code memberi tahu Claude cara menulis ulang perintah yang ditolak, seperti membaginya menjadi perintah biasa yang terpisah. Anda tidak dapat mematikan pemeriksaan ini.

106 106 

107Pemeriksaan ini membaca jalur yang ditargetkan oleh sebuah edit, direktori tempat perintah dijalankan, dan teks perintah. Tidak satu pun dari pemeriksaan ini melacak file mana yang ditulis oleh perintah shell, sehingga perintah yang menulis ke checkout utama tanpa menjalankan git di sana, seperti `cp` atau pengalihan shell, tidak ditolak olehnya. Claude Code memperlakukan perintah tersebut seperti perintah shell lainnya, sehingga apakah perintah itu dijalankan atau Claude Code meminta persetujuan Anda bergantung pada [mode izin](/docs/id/permission-modes) dan aturan Anda.107Pemeriksaan ini membaca jalur yang ditargetkan oleh sebuah edit, direktori tempat perintah dijalankan, dan teks perintah. Tidak satu pun dari pemeriksaan ini melacak file mana yang ditulis oleh perintah shell, sehingga perintah yang menulis ke checkout utama tanpa menjalankan git di sana, seperti `cp` atau pengalihan shell, tidak ditolak olehnya. Claude Code memperlakukan perintah tersebut seperti perintah shell lainnya berdasarkan pengaturan [izin](/docs/id/permissions) dan [sandboxing](/docs/id/sandboxing) Anda.

108 108 

109Pemeriksaan berlaku untuk repositori tempat Anda meluncurkan Claude Code. Mereka juga mencakup checkout utama yang ditautkan worktree ditautkan darinya. Untuk perintah PowerShell, Claude Code hanya menerapkan pemeriksaan direktori kerja.109Pemeriksaan berlaku untuk repositori tempat Anda meluncurkan Claude Code. Mereka juga mencakup checkout utama yang ditautkan worktree ditautkan darinya. Untuk perintah PowerShell, Claude Code hanya menerapkan pemeriksaan direktori kerja.

110 110