268| [Skill](/docs/id/skills) frontmatter | Sisa sesi setelah skill dipanggil. Lihat [Hooks dalam skills dan agents](#hooks-in-skills-and-agents) | Ya, didefinisikan dalam file skill |268| [Skill](/docs/id/skills) frontmatter | Sisa sesi setelah skill dipanggil. Lihat [Hooks dalam skills dan agents](#hooks-in-skills-and-agents) | Ya, didefinisikan dalam file skill |
269| [Subagent](/docs/id/sub-agents) frontmatter | Saat subagent itu berjalan | Ya, didefinisikan dalam file subagent |269| [Subagent](/docs/id/sub-agents) frontmatter | Saat subagent itu berjalan | Ya, didefinisikan dalam file subagent |
270 270
271Sesi cloud di [Claude Code di web](/docs/id/claude-code-on-the-web) tidak membaca `~/.claude/settings.json` lokal Anda; hooks di sana berasal dari repo, artinya `.claude/settings.json`-nya dalam sesi dengan satu repositori dan plugins yang dideklarasikannya dalam sesi apa pun, dan dari pengaturan yang dikelola server organisasi Anda. Dalam [lingkungan self-hosted](/docs/id/self-hosted-environments-configuration#permissions-and-tool-approval), Claude Code juga menjalankan hooks yang operator semai dari `~/.claude/` host runner, dan menjalankan hooks dalam file pengaturan terkelola image runner saat file itu termasuk dalam [sumber terkelola yang Claude Code terapkan](/docs/id/managed-settings#how-claude-code-combines-managed-sources), yang secara default berarti hanya ketika pengaturan yang dikelola server maupun kebijakan Claude Code yang dikirimkan MDM tidak menyediakan tingkat terkelola. Lihat [apa yang terbawa dari setup Anda](/docs/id/cloud-environments#what-carries-over-from-your-setup) untuk file mana yang mencapai sesi cloud.271Sesi cloud di [Claude Code di web](/docs/id/claude-code-on-the-web) tidak membaca `~/.claude/settings.json` lokal Anda; hooks di sana berasal dari `.claude/settings.json` repo dalam sesi dengan satu repositori, dari plugins yang [disinkronkan dari akun claude.ai Anda](/docs/id/plugins-reference#synced-plugins), dan dari pengaturan yang dikelola server organisasi Anda. Dalam [lingkungan self-hosted](/docs/id/self-hosted-environments-configuration#permissions-and-tool-approval), Claude Code juga menjalankan hooks yang operator semai dari `~/.claude/` host runner, dan menjalankan hooks dalam file pengaturan terkelola image runner saat file itu termasuk dalam [sumber terkelola yang Claude Code terapkan](/docs/id/managed-settings#how-claude-code-combines-managed-sources), yang secara default berarti hanya ketika pengaturan yang dikelola server maupun kebijakan Claude Code yang dikirimkan MDM tidak menyediakan tingkat terkelola. Lihat [apa yang terbawa dari setup Anda](/docs/id/cloud-environments#what-carries-over-from-your-setup) untuk file mana yang mencapai sesi cloud.
272 272
273Untuk detail tentang resolusi file pengaturan, lihat [settings](/docs/id/settings).273Untuk detail tentang resolusi file pengaturan, lihat [settings](/docs/id/settings).
274 274
1436 UserPromptSubmit input1436 UserPromptSubmit input
1437</h4>1437</h4>
1438 1438
1439Selain [bidang input umum](#common-input-fields), UserPromptSubmit hooks menerima bidang `prompt` yang berisi teks yang dikirimkan pengguna.1439Selain [bidang input umum](#common-input-fields), UserPromptSubmit hooks menerima bidang `prompt` yang berisi teks yang dikirimkan pengguna. Konten yang ditempel yang diciutkan menjadi placeholder `[Pasted text #N]` tiba dalam keadaan diperluas di tempatnya. Dalam sesi di mana Claude Code [menandai teks yang ditempel untuk Claude](/docs/id/terminal-config#how-claude-treats-pasted-text), konten yang diperluas itu berada di antara baris `<pasted_content id="…">` dan baris `</pasted_content id="…">`, jadi perhitungkan baris-baris tersebut jika hook Anda mengurai prompt.
1440 1440
1441```json theme={null}1441```json theme={null}
1442{1442{
1982 1982
1983`"defer"` adalah untuk integrasi yang menjalankan `claude -p` sebagai subprocess dan membaca output JSON-nya, seperti aplikasi Agent SDK atau UI kustom yang dibangun di atas Claude Code. Ini memungkinkan proses pemanggil itu menjeda Claude pada pemanggilan tool, mengumpulkan input melalui antarmuka miliknya sendiri, dan melanjutkan di mana ia berhenti. Claude Code menghormati nilai ini hanya dalam [mode non-interaktif](/docs/id/headless) dengan flag `-p`. Dalam sesi interaktif itu mencatat peringatan dan mengabaikan hasil hook.1983`"defer"` adalah untuk integrasi yang menjalankan `claude -p` sebagai subprocess dan membaca output JSON-nya, seperti aplikasi Agent SDK atau UI kustom yang dibangun di atas Claude Code. Ini memungkinkan proses pemanggil itu menjeda Claude pada pemanggilan tool, mengumpulkan input melalui antarmuka miliknya sendiri, dan melanjutkan di mana ia berhenti. Claude Code menghormati nilai ini hanya dalam [mode non-interaktif](/docs/id/headless) dengan flag `-p`. Dalam sesi interaktif itu mencatat peringatan dan mengabaikan hasil hook.
1984 1984
1985Tool `AskUserQuestion` adalah kasus tipikal: Claude ingin menanyakan sesuatu kepada pengguna, tetapi tidak ada terminal untuk menjawab. Perjalanan bolak-balik bekerja seperti ini:1985Tool `AskUserQuestion` adalah kasus tipikal: Claude ingin menanyakan sesuatu kepada pengguna, tetapi tidak ada terminal untuk menjawab. Run `-p` menawarkan `AskUserQuestion` hanya ketika memiliki [permission host](/docs/id/headless#turn-off-permission-prompts-in-unattended-runs), seperti tool MCP yang Anda berikan dengan `--permission-prompt-tool`, jadi mulai run dengan salah satunya. Perjalanan bolak-balik bekerja seperti ini:
1986 1986
19871. Claude memanggil `AskUserQuestion`. Hook `PreToolUse` dijalankan.19871. Claude memanggil `AskUserQuestion`. Hook `PreToolUse` dijalankan.
19882. Hook mengembalikan `permissionDecision: "defer"`. Tool tidak dijalankan. Proses keluar dengan `stop_reason: "tool_deferred"` dan pemanggilan tool yang tertunda dipertahankan dalam transkrip.19882. Hook mengembalikan `permissionDecision: "defer"`. Tool tidak dijalankan. Proses keluar dengan `stop_reason: "tool_deferred"` dan pemanggilan tool yang tertunda dipertahankan dalam transkrip.
2443| `elicitation_url_dialog` | Server MCP meminta Anda untuk membuka URL browser dan Anda belum mengetik selama sekitar enam detik |2443| `elicitation_url_dialog` | Server MCP meminta Anda untuk membuka URL browser dan Anda belum mengetik selama sekitar enam detik |
2444| `elicitation_complete` | Server MCP melaporkan bahwa [URL-mode elicitation](#elicitation-input) selesai |2444| `elicitation_complete` | Server MCP melaporkan bahwa [URL-mode elicitation](#elicitation-input) selesai |
2445| `elicitation_response` | Respons elicitation MCP dikirim kembali ke server |2445| `elicitation_response` | Respons elicitation MCP dikirim kembali ke server |
2446| `agent_needs_input` | Sesi latar belakang mulai menunggu input Anda sementara [agent view](/docs/id/agent-view) terbuka di terminal, atau sesi saat ini menanyakan pertanyaan setup terminal [agent team](/docs/id/agent-teams) teammate dan Anda belum mengetik selama sekitar enam detik |2446| `agent_needs_input` | Sesi latar belakang mulai menunggu input Anda sementara [agent view](/docs/id/agent-view) terbuka di terminal, atau sesi saat ini menanyakan [pertanyaan setup terminal teammate agent team](/docs/id/agent-teams#choose-a-display-mode) dan Anda belum mengetik selama sekitar enam detik |
2447| `agent_completed` | Sesi latar belakang selesai atau gagal. Dijalankan hanya saat [agent view](/docs/id/agent-view) terbuka di terminal |2447| `agent_completed` | Sesi latar belakang selesai atau gagal. Dijalankan hanya saat [agent view](/docs/id/agent-view) terbuka di terminal |
2448| `quota_auto_resume_fired` | Claude Code melanjutkan tugas Anda setelah batas penggunaan claude.ai menjeda itu: pada reset, atau lebih cepat ketika sesuatu yang Anda lakukan dalam Claude Code selama menunggu, seperti menambahkan kredit penggunaan, meningkatkan rencana, atau beralih model, membuat penggunaan tersedia lagi, dengan [pengecualian pengaturan model](/docs/id/interactive-mode#wait-for-a-usage-limit-to-reset) |2448| `quota_auto_resume_fired` | Claude Code melanjutkan tugas Anda setelah batas penggunaan claude.ai menjeda itu: pada reset, atau lebih cepat ketika sesuatu yang Anda lakukan dalam Claude Code selama menunggu, seperti menambahkan kredit penggunaan, meningkatkan rencana, atau beralih model, membuat penggunaan tersedia lagi, dengan [pengecualian pengaturan model](/docs/id/interactive-mode#wait-for-a-usage-limit-to-reset) |
2449| `quota_auto_resume_stale` | Batas penggunaan claude.ai reset sementara komputer Anda tidur selama lebih dari sekitar 30 menit. Claude Code menunggu Anda menekan `Enter` alih-alih melanjutkan. Setelah tidur yang lebih pendek itu melanjutkan dan menjalankan `quota_auto_resume_fired` sebagai gantinya |2449| `quota_auto_resume_stale` | Batas penggunaan claude.ai reset sementara komputer Anda tidur selama lebih dari sekitar 30 menit. Claude Code menunggu Anda menekan `Enter` alih-alih melanjutkan. Setelah tidur yang lebih pendek itu melanjutkan dan menjalankan `quota_auto_resume_fired` sebagai gantinya |
2453 2453
2454Tipe `quota_auto_resume_fired`, `quota_auto_resume_stale`, dan `quota_auto_resume_disabled` memerlukan Claude Code v2.1.234 atau lebih baru.2454Tipe `quota_auto_resume_fired`, `quota_auto_resume_stale`, dan `quota_auto_resume_disabled` memerlukan Claude Code v2.1.234 atau lebih baru.
2455 2455
2456Dalam sesi terminal, `permission_prompt` untuk [network request](/docs/id/sandboxing#network-isolation) perintah sandboxed memerlukan Claude Code v2.1.246 atau lebih baru.2456Dalam sesi terminal, `permission_prompt` untuk network request perintah sandboxed memerlukan Claude Code v2.1.246 atau lebih baru.
2457 2457
2458`agent_needs_input` untuk pertanyaan setup terminal teammate memerlukan Claude Code v2.1.248 atau lebih baru.2458`agent_needs_input` untuk pertanyaan setup terminal teammate memerlukan Claude Code v2.1.248 atau lebih baru.
2459 2459
2578 2578
2579Selain [bidang input umum](#common-input-fields), SubagentStop hooks menerima `stop_hook_active`, `agent_id`, `agent_type`, `agent_transcript_path`, dan `last_assistant_message`. Bidang `agent_type` adalah nilai yang digunakan untuk pemfilteran matcher. `transcript_path` adalah transkrip sesi utama, sementara `agent_transcript_path` adalah transkrip subagent sendiri yang disimpan dalam folder `subagents/` bersarang. Bidang `last_assistant_message` berisi konten teks respons akhir subagent, jadi hooks dapat mengaksesnya tanpa mengurai file transkrip.2579Selain [bidang input umum](#common-input-fields), SubagentStop hooks menerima `stop_hook_active`, `agent_id`, `agent_type`, `agent_transcript_path`, dan `last_assistant_message`. Bidang `agent_type` adalah nilai yang digunakan untuk pemfilteran matcher. `transcript_path` adalah transkrip sesi utama, sementara `agent_transcript_path` adalah transkrip subagent sendiri yang disimpan dalam folder `subagents/` bersarang. Bidang `last_assistant_message` berisi konten teks respons akhir subagent, jadi hooks dapat mengaksesnya tanpa mengurai file transkrip.
2580 2580
2581Tidak setiap event SubagentStop berasal dari subagent yang di-spawn Claude. Claude Code juga menjalankan agent internal untuk beberapa fiturnya sendiri, seperti [saran prompt](/docs/id/interactive-mode#prompt-suggestions) dan [pertanyaan sampingan `/btw`](/docs/id/interactive-mode#side-questions-with-%2Fbtw), dan SubagentStop juga dijalankan ketika salah satunya selesai. Untuk events tersebut, `agent_type` adalah nama agent yang dijalankan sebagai sesi itu sendiri, seperti yang diatur dengan [`--agent`](/docs/id/cli-reference#cli-flags) atau [pengaturan `agent`](/docs/id/settings-reference#agent), dan string kosong ketika sesi berjalan tanpa agent.
2582
2583`matcher` yang menyebutkan tipe agent tidak cocok dengan `agent_type` kosong. Hook yang matcher-nya dihilangkan, `""`, atau `"*"`, atau berupa ekspresi reguler yang cocok dengan string kosong, juga dijalankan untuk events dengan `agent_type` kosong.
2584
2581Pada Claude Code v2.1.271 atau lebih baru, subagent yang berjalan dengan tool [`SubagentHandback`](/docs/id/tools-reference) mengirimkan laporannya melalui tool itu sebelum berhenti. Bidang `last_assistant_message` kemudian menyimpan teks penutup subagent, jika ada, yang bukan laporan yang disampaikan. Laporan adalah input `message` panggilan itu, yang hook `PreToolUse` atau `PostToolUse` yang cocok pada `SubagentHandback` menerima sebagai `tool_input.message`.2585Pada Claude Code v2.1.271 atau lebih baru, subagent yang berjalan dengan tool [`SubagentHandback`](/docs/id/tools-reference) mengirimkan laporannya melalui tool itu sebelum berhenti. Bidang `last_assistant_message` kemudian menyimpan teks penutup subagent, jika ada, yang bukan laporan yang disampaikan. Laporan adalah input `message` panggilan itu, yang hook `PreToolUse` atau `PostToolUse` yang cocok pada `SubagentHandback` menerima sebagai `tool_input.message`.
2582 2586
2583SubagentStop hooks juga menerima array `background_tasks` dan `session_crons` yang dijelaskan di bawah [Stop input](#stop-input). Kedua array bersifat scoped ke sesi induk, bukan subagent.2587SubagentStop hooks juga menerima array `background_tasks` dan `session_crons` yang dijelaskan di bawah [Stop input](#stop-input). Kedua array bersifat scoped ke sesi induk, bukan subagent.
2707* **Kode keluar 2**: tugas tidak ditandai sebagai selesai dan pesan stderr diumpankan kembali ke model sebagai umpan balik.2711* **Kode keluar 2**: tugas tidak ditandai sebagai selesai dan pesan stderr diumpankan kembali ke model sebagai umpan balik.
2708* **JSON `{"continue": false, "stopReason": "..."}`**: ketika teammate yang menyelesaikan gilirannya memicu event, menghentikan teammate sepenuhnya, mencocokkan perilaku hook `Stop`. `stopReason` ditampilkan ke pengguna. Ketika tool `TaskUpdate` memicu event, Claude Code mengabaikan `continue: false`; kode keluar 2 masih memblokir penyelesaian.2712* **JSON `{"continue": false, "stopReason": "..."}`**: ketika teammate yang menyelesaikan gilirannya memicu event, menghentikan teammate sepenuhnya, mencocokkan perilaku hook `Stop`. `stopReason` ditampilkan ke pengguna. Ketika tool `TaskUpdate` memicu event, Claude Code mengabaikan `continue: false`; kode keluar 2 masih memblokir penyelesaian.
2709 2713
2710Contoh ini menjalankan tests dan memblokir penyelesaian tugas jika gagal:2714Contoh ini menjalankan tests dan memblokir penyelesa ian tugas jika gagal:
2711 2715
2712```bash theme={null}2716```bash theme={null}
2713#!/bin/bash2717#!/bin/bash
2997 3001
2998Dijalankan ketika perintah shell dalam percakapan utama mengubah direktori kerja, misalnya ketika Claude menjalankan perintah `cd`. Gunakan ini untuk bereaksi terhadap perubahan direktori: muat ulang variabel lingkungan, aktifkan toolchains khusus proyek, atau jalankan skrip setup secara otomatis. Berpasangan dengan [FileChanged](#filechanged) untuk tools seperti [direnv](https://direnv.net/) yang mengelola lingkungan per-direktori.3002Dijalankan ketika perintah shell dalam percakapan utama mengubah direktori kerja, misalnya ketika Claude menjalankan perintah `cd`. Gunakan ini untuk bereaksi terhadap perubahan direktori: muat ulang variabel lingkungan, aktifkan toolchains khusus proyek, atau jalankan skrip setup secara otomatis. Berpasangan dengan [FileChanged](#filechanged) untuk tools seperti [direnv](https://direnv.net/) yang mengelola lingkungan per-direktori.
2999 3003
3000CwdChanged hooks memiliki akses ke [`CLAUDE_ENV_FILE`](#persist-environment-variables). Variabel yang ditulis ke file itu bertahan ke perintah Bash berikutnya sampai event [CwdChanged](#cwdchanged) berikutnya, ketika Claude Code menghapusnya.3004CwdChanged hooks memiliki akses ke [`CLAUDE_ENV_FILE`](#persist-environment-variables). Variabel yang ditulis ke file itu bertahan ke perintah Bash berikutnya sampai event CwdChanged berikutnya, ketika Claude Code menghapusnya.
3001 3005
3002CwdChanged tidak mendukung matchers dan dijalankan pada setiap perubahan direktori.3006CwdChanged tidak mendukung matchers dan dijalankan pada setiap perubahan direktori.
3003 3007
3592 SessionEnd input3596 SessionEnd input
3593</h4>3597</h4>
3594 3598
3595Selain [bidang input umum](#common-input-fields), SessionEnd hooks menerima bidang `reason` menunjukkan mengapa sesi berakhir. Lihat tabel reason di atas untuk semua nilai.3599Selain [bidang input umum](#common-input-fields), SessionEnd hooks menerima bidang `reason` menunjukkan mengapa sesi berakhir. Lihat [tabel reason](#sessionend) di atas untuk semua nilai.
3596 3600
3597```json theme={null}3601```json theme={null}
3598{3602{
3752Events yang mendukung semua lima tipe hook (`command`, `http`, `mcp_tool`, `prompt`, dan `agent`):3756Events yang mendukung semua lima tipe hook (`command`, `http`, `mcp_tool`, `prompt`, dan `agent`):
3753 3757
3754* `PermissionDenied`3758* `PermissionDenied`
3755* `PermissionRequest`
3756* `PostToolBatch`3759* `PostToolBatch`
3757* `PostToolUse`3760* `PostToolUse`
3758* `PostToolUseFailure`3761* `PostToolUseFailure`
3765* `UserPromptExpansion`3768* `UserPromptExpansion`
3766* `UserPromptSubmit`3769* `UserPromptSubmit`
3767 3770
3771`PermissionRequest` mendukung hooks `command`, `http`, `mcp_tool`, dan `prompt` tetapi bukan hooks `agent`. Jika Anda mengonfigurasi agent hook pada event ini, Claude Code melewatinya dan aliran izin berlanjut tidak berubah. Untuk mengizinkan atau menolak dari hook, kembalikan [objek keputusan](#permissionrequest-decision-control) dari command atau HTTP hook.
3772
3768Events yang mendukung hooks `command`, `http`, dan `mcp_tool` tetapi bukan `prompt` atau `agent`:3773Events yang mendukung hooks `command`, `http`, dan `mcp_tool` tetapi bukan `prompt` atau `agent`:
3769 3774
3770* `ConfigChange`3775* `ConfigChange`
3897 Agent hooks adalah eksperimental. Perilaku dan konfigurasi mungkin berubah di rilis mendatang. Untuk alur kerja produksi, lebih suka [command hooks](#command-hook-fields).3902 Agent hooks adalah eksperimental. Perilaku dan konfigurasi mungkin berubah di rilis mendatang. Untuk alur kerja produksi, lebih suka [command hooks](#command-hook-fields).
3898</Warning>3903</Warning>
3899 3904
3900Agent-based hooks (`type: "agent"`) seperti prompt-based hooks tetapi dengan akses tool multi-turn. Alih-alih pemanggilan LLM tunggal, hook agent spawn subagent yang dapat membaca file, mencari kode, dan memeriksa codebase untuk memverifikasi kondisi. Agent hooks mendukung events yang sama seperti prompt-based hooks.3905Agent-based hooks (`type: "agent"`) seperti prompt-based hooks tetapi dengan akses tool multi-turn. Alih-alih pemanggilan LLM tunggal, hook agent spawn subagent yang dapat membaca file, mencari kode, dan memeriksa codebase untuk memverifikasi kondisi. Agent hooks mendukung events yang sama seperti [prompt-based hooks](#prompt-based-hooks), kecuali `PermissionRequest`.
3901 3906
3902<h3 id="how-agent-hooks-work">3907<h3 id="how-agent-hooks-work">
3903 Bagaimana agent hooks bekerja3908 Bagaimana agent hooks bekerja