Hooks Claude Code: Guardrail Agen yang Deterministik

Hooks Claude Code adalah perintah shell yang dijalankan runtime secara otomatis pada titik-titik tertentu dalam lifecycle agen, seperti sebelum atau sesudah sebuah tool dipanggil, atau saat sebuah tugas selesai. Hooks dikonfigurasi di settings.json alih-alih di prompt, jadi berjalan setiap saat terlepas dari keputusan model. Inilah mekanisme untuk jaminan yang mungkin dilupakan model.
Instruksi prompt adalah saran yang mungkin diikuti model, mungkin juga tidak, dan pengaruhnya bergeser sepanjang sesi panjang. Hook adalah kode deterministik yang dijalankan runtime tanpa syarat, jadi aturan format atau keamanan yang ditegakkan hook terjadi pada setiap event yang cocok. Pakai prompt untuk panduan dan hooks untuk jaminan.
Bisa. Hook PreToolUse berjalan sebelum tool yang cocok dieksekusi, dan jika keluar dengan status pemblokir maka panggilan tool ditolak dan alasannya diumpankan kembali ke model. Karena hook menerima seluruh input tool sebagai JSON, ia bisa mengizinkan perintah aman dan menolak yang berbahaya secara presisi, itulah sebabnya aturan keamanan berada di hooks.
Mulailah dengan hook PostToolUse yang memformat berkas yang baru disunting, hook PreToolUse yang memblokir tulisan ke lockfile atau kode ter-generate, dan hook Stop yang menjalankan perintah tes cepat Anda sebagai gerbang mutu. Ketiganya menutup kesalahan agen yang paling umum dan hanya butuh beberapa baris settings.json masing-masing.
Hooks berjalan dengan izin pengguna penuh Anda dan tanpa prompt konfirmasi, jadi skrip hook yang ceroboh adalah risiko nyata. Perlakukan skrip hook seperti kode produksi: beri tanda kutip pada variabel, hindari menyisipkan input tool mentah ke shell, dan uji tiap skrip dengan tangan sebelum mengaitkannya ke event yang sering terpicu. Mengommit hooks ke repo juga memungkinkan tim Anda meninjaunya.

Ringkasan Utama
Hooks Claude Code adalah perintah shell yang berjalan otomatis pada titik-titik tetap dalam lifecycle agen, seperti sebelum sebuah tool dipanggil atau saat sebuah tugas selesai. Karena berjalan sebagai kode deterministik alih-alih saran model, hooks memaksa jaminan yang bisa dilupakan model: memformat setiap suntingan, memblokir tulisan ke path terlindungi, dan menjalankan tes sebagai gerbang mutu.
Meminta agen untuk selalu menjalankan formatter berhasil sampai satu kali ia lupa, dan pada agen coding satu kali itu mendarat di diff Anda. Instruksi dalam prompt adalah saran yang mungkin diikuti model, mungkin juga tidak. Hooks adalah kebalikannya: perintah shell yang dijalankan runtime untuk Anda, setiap saat, terlepas dari apa yang diputuskan model.
Panduan ini menjelaskan apa itu hooks Claude Code, event lifecycle mana yang bisa Anda kaitkan, pola guardrail mana yang layak ditambahkan lebih dulu, dan bagaimana sebuah hook memblokir tindakan berbahaya sebelum berjalan. Mekanismenya khusus Claude Code, tetapi gagasan gerbang deterministik di sekitar agen yang non-deterministik bersifat universal.
Hook adalah perintah shell yang dijalankan Claude Code otomatis ketika event tertentu terpicu, dikonfigurasi di settings.json Anda alih-alih di prompt. Model tidak pernah memutuskan apakah sebuah hook berjalan; runtime yang memutuskan. Sifat tunggal itulah yang membuat hooks berguna, karena ia mengubah harapan menjadi jaminan: bukan tolong lint ini, melainkan ini sudah di-lint.
Hooks menerima JSON terstruktur tentang event pada standard input, sehingga sebuah skrip hook bisa memeriksa persis tool mana yang akan berjalan dan dengan argumen apa. Tiga hal membedakannya dari mekanisme steering lain:
Hooks dikelompokkan berdasarkan event di settings.json. Yang paling sering dipakai adalah PreToolUse, yang berjalan sebelum sebuah tool dipanggil dan bisa memblokirnya; PostToolUse, yang berjalan setelah sebuah tool berhasil dan ideal untuk memformat atau me-lint berkas yang baru saja berubah; dan Stop, yang berjalan saat Claude selesai merespons dan menjadi gerbang mutu yang alami. Ada juga event untuk pengiriman prompt, notifikasi, dan awal sesi.
Setup awal yang umum memformat setiap berkas yang disunting dan menyaring tiap perintah Bash melalui skrip penjaga kecil:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{ "type": "command", "command": "npx prettier --write \"$CLAUDE_FILE_PATHS\"" }
]
}
],
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{ "type": "command", "command": ".claude/guard-bash.sh" }
]
}
]
}
}Cocokkan hooks secara sempit. Matcher PostToolUse untuk Edit atau Write sebaiknya memformat hanya berkas yang benar-benar berubah, memakai path yang diberikan Claude Code di payload event, alih-alih memformat ulang seluruh repositori pada setiap suntingan dan mengubur diff Anda dalam keriuhan.
Anda tidak butuh banyak hooks untuk merasakan manfaatnya. Beberapa yang dipilih dengan baik sudah menutup kesalahan yang paling sering dibuat agen.
Hook PreToolUse adalah titik penegakan. Sebelum Claude Code menjalankan tool yang cocok, ia menjalankan hook Anda dan membaca hasilnya. Jika hook keluar dengan status pemblokir, panggilan tool ditolak dan alasannya diumpankan kembali ke model, yang lalu harus memilih jalur berbeda. Beginilah cara Anda menghentikan sebuah tindakan secara deterministik alih-alih meminta model untuk tidak melakukannya.
Karena hook melihat seluruh input tool sebagai JSON, keputusannya bisa presisi: izinkan perintah Bash yang hanya membaca, tolak yang menyalurkan skrip jarak jauh ke shell, dan biarkan sisanya lewat. Model tidak bisa berkelit melewati sebuah hook, itulah persis alasan aturan yang relevan dengan keamanan berada di sini dan bukan di instruksi CLAUDE.md.
Sebuah hook berjalan dengan izin pengguna penuh Anda dan tanpa prompt konfirmasi, jadi perintah hook yang ceroboh adalah risikonya sendiri. Perlakukan tiap skrip hook seperti kode produksi: beri tanda kutip pada variabel Anda, hindari menyisipkan input tool secara buta ke shell, dan uji skripnya dengan tangan sebelum mengaitkannya ke event yang terpicu pada setiap panggilan tool.
Hooks berada di jalur kritis loop agen, jadi hook yang lambat atau labil membuat seluruh sesi terasa lambat. Beberapa kebiasaan menjaganya tetap tidak mengganggu.
Hooks adalah cara Anda berhenti mengulang koreksi yang sama ke agen. Apa pun yang Anda dapati harus diminta setiap sesi, seperti format ini, jangan sentuh itu, atau jalankan tesnya sebelum berhenti, adalah kandidat untuk hook, dan begitu menjadi hook, ia terjadi entah model mengingatnya atau tidak. Mulailah dengan formatter dan gerbang tes, lalu tambahkan penjaga seiring Anda belajar di mana agen Anda tergelincir.