- Fitur hook kustom diperkenalkan di Claude Code. Ini memungkinkan perilaku aplikasi dikendalikan dengan lebih presisi dan konsisten berulang kali tanpa bergantung pada pilihan LLM
- Berbagai otomasi dimungkinkan, seperti kustomisasi notifikasi, pemformatan kode otomatis, dan pelacakan log perintah
- Dapat berjalan sebelum/sesudah eksekusi perintah, saat notifikasi terjadi, dan saat respons selesai, serta dapat dikelola di level proyek, pengguna, dan enterprise melalui file konfigurasi
- Melalui struktur file konfigurasi dan metode matcher, hanya hook tertentu yang bisa dijalankan pada momen pemanggilan tool tertentu
- Input dikirim dalam format JSON, dan output menggunakan exit code atau JSON untuk mengontrol hasil serta umpan balik
- Hook akan menjalankan perintah shell secara otomatis dengan seluruh hak akses pengguna, sehingga perlu perhatian terhadap keamanan dan keselamatan
Pengenalan
- Hook di Claude Code adalah perintah shell kustom yang dijalankan otomatis pada setiap tahap lifecycle eksekusi kode
- Dengan ini, otomasi yang konsisten setiap saat menjadi mungkin alih-alih bergantung pada eksekusi opsional oleh LLM
-
Contoh penggunaan utama
- Notifikasi: memberikan notifikasi kustom kepada pengguna saat menunggu input
- Pemformatan otomatis: menjalankan
prettier atau gofmt secara otomatis setelah file diedit
- Logging: mencatat dan mengagregasi perintah yang dijalankan untuk pelacakan atau debugging
- Umpan balik: memberikan umpan balik otomatis saat kode yang dihasilkan tidak sesuai dengan aturan codebase
- Izin kustom: memblokir perubahan pada direktori sensitif atau file produksi
- Karena berjalan sebagai kode sistem, bukan prompt, hook selalu dieksekusi secara deterministik → meningkatkan keandalan otomasi
- Hook secara langsung menjalankan perintah shell dengan seluruh hak akses pengguna, sehingga validasi keamanan tetap diperlukan.
Contoh konfigurasi
- Contoh: mendaftarkan hook agar Claude meninggalkan log setiap kali sebelum menjalankan perintah Bash
1. Masuk ke menu pengaturan hook dengan perintah /hooks, lalu pilih event PreToolUse
2. Tambahkan matcher Bash (hanya berlaku untuk perintah Bash)
3. Daftarkan dan simpan perintah hook (jika memilih lokasi User settings, akan berlaku ke semua proyek)
4. Periksa konfigurasi lewat /hooks atau lihat langsung file ~/.claude/settings.json
Struktur konfigurasi
- Hook dikelompokkan berdasarkan matcher, dan tiap matcher dapat memiliki beberapa hook dalam bentuk array
- Contoh: string tunggal (exact match), regex, atau dibiarkan kosong agar berlaku untuk semua event
- Jenis file konfigurasi
~/.claude/settings.json: konfigurasi seluruh pengguna
.claude/settings.json: konfigurasi proyek
.claude/settings.local.json: konfigurasi lokal (tidak dibagikan)
- konfigurasi kebijakan enterprise
Event hook utama
- PreToolUse: dijalankan sebelum pemanggilan tool, dan jika perlu dapat memblokir eksekusi (matcher utama: Bash, Write, Edit, Grep, dll.)
- PostToolUse: tepat setelah tool dijalankan, mendukung matcher yang sama
- Notification: dijalankan saat notifikasi dikirim
- Stop: dijalankan setelah respons selesai
Contoh matcher
Task: pekerjaan agen
Bash: perintah shell
Glob: pencocokan pola file
Grep: pencarian isi
Read: membaca file
Edit, MultiEdit: mengubah file
Write: menulis file
WebFetch, WebSearch: pekerjaan web
Format input dan output
- Input: JSON dikirim melalui stdin (termasuk informasi sesi dan data per event)
- Contoh: PreToolUse menyertakan
tool_input, PostToolUse menambahkan tool_response
- Output:
- exit code 0: eksekusi normal, stdout ditampilkan ke pengguna
- exit code 2: diblokir, stderr diteruskan ke Claude sebagai umpan balik (pada PreToolUse, eksekusi tool diblokir)
- kode lainnya: error, hanya stderr yang ditampilkan ke pengguna
- Kontrol lanjutan: jika mengembalikan JSON ke stdout, detail alur dapat dikontrol dengan
"continue" false atau "decision": "block"
Integrasi dengan tool MCP
- Tool berbasis Model Context Protocol (MCP) juga didukung, dan bisa ditargetkan secara selektif melalui pola penamaan khusus (
mcp____)
Rekomendasi keamanan
- Karena hook berisiko menjalankan perintah arbitrer sistem, aturan keamanan seperti validasi input, pemeriksaan path, pengecualian file sensitif, dan penggunaan absolute path wajib diterapkan
- Perubahan konfigurasi tidak langsung diterapkan; sistem menggunakan snapshot saat sesi dimulai dan menampilkan peringatan bila ada perubahan eksternal
Lingkungan eksekusi dan debugging
- Setiap hook memiliki batas maksimum 60 detik, berjalan paralel, dan beroperasi di working directory serta environment saat ini
- Debugging dapat dilakukan melalui
/hooks dengan memeriksa konfigurasi, menguji perintah secara langsung, serta mengecek exit code dan output
- Proses dan hasil eksekusi dapat dilihat dalam mode transcript (Ctrl-R)
4 komentar
Tolong buatkan versi Windows juga :(
Gunakan WSL.
Mungkin karena spesifikasi PC saya rendah, di Windows WSL beberapa pekerjaan yang memanfaatkan Claude Code (misalnya build proyek, menjalankan web server lokal, dll.) jadi terlalu lambat. Cara menjalankan hanya pekerjaan tersebut secara manual di luar WSL memang ada, tetapi merepotkan dan ada keterbatasannya, jadi sejak Gemini CLI keluar, di Windows saya lebih sering memakai Gemini CLI daripada Claude Code.
Komentar Hacker News
Saya frustrasi karena Claude Code Opus 4 punya kebiasaan tidak menambahkan newline di akhir file
Karena harus me-restart claude saat menguji hook baru, jauh lebih efisien memakai skrip yang bisa terus diedit dalam sesi yang sama
Skrip ini menerapkan formatter untuk file C dan shell script, lalu untuk file lain hanya memperbaiki newline yang hilang di akhir
AI seperti Claude lemah dalam memecah masalah dengan tepat, dan kadang mencoba mengerjakan sesuatu dengan cara yang aneh, jadi seperti contoh hook di atas, saya beberapa kali memperbaikinya dengan menyimpan file JSON ke disk, lalu hanya mengambil path-nya dan menyimpannya lagi, kemudian meneruskan path tersebut ke save-hook.sh
Saya berhasil mendapatkan yang saya inginkan dalam 10 menit, tapi waktu yang terbuang karena menyuruhnya melakukan langkah besar sekaligus jauh lebih banyak
Kita sering mendengar bahwa AI akan menggantikan developer, tapi siapa yang akan menyiapkan hook seperti ini dan mengusulkan fitur baru tetaplah pekerjaan manusia
Pekerjaan terkait tooling seperti ini akan terus ada sampai AI berevolusi ke tingkat di mana ia sendiri bisa memikirkan ide ini dan menerapkannya ke AI lain
Kalau dianalogikan dengan pertukangan kayu, menurut saya sekarang kita sedang berada di titik transisi dari perkakas tangan ke perkakas listrik
Orang yang memahami dasar-dasarnya bisa menggunakan alat dengan baik, tetapi sekarang tahapnya lebih seperti bekerja cepat dengan table saw alih-alih membuat sesuatu secara halus dengan tangan, jadi lebih efisien tetapi juga bisa lebih berbahaya
Mirip dengan klaim bahwa mesin pertanian seperti combine harvester akan menggantikan pekerjaan di sektor pertanian
Apa masuk akal menganggap semua tenaga kerja hanya akan beralih menjadi operator mesin?
Pandangannya adalah bahwa baik alat otomatisasi, pertanian, maupun AI, nilainya tidak sesederhana sekadar peralihan seperti itu
Seperti kisah terkenal "dunia di atas punggung kura-kura", setelah kemunculan AI, kita bisa terus mengulang diskusi "lalu siapa yang mengelola AI itu?" tanpa akhir
Sudah ada kasus di mana Claude Code diminta memperbarui CLAUDE.md sendiri, jadi membuatnya mengubah hook-nya sendiri pun bukan sesuatu yang sepenuhnya mustahil
Tetapi menariknya, seperti di Jurassic Park, pertanyaan "apakah kita seharusnya melakukannya" mudah terlewat
Pendapat bahwa AI akan mengurangi pekerjaan developer, dan pertanyaan tentang siapa yang akan menyiapkan hook, keduanya benar
Ini menekankan bahwa kemajuan teknologi tidak bisa disederhanakan hanya sebagai soal bertambah atau berkurangnya jumlah pekerjaan; teknologi menghapus pekerjaan sekaligus menciptakan pekerjaan baru
Sebenarnya, bagi kebanyakan orang, pekerjaan seperti ini terasa bukan sebagai development melainkan maintenance, DevOps, dan sejenisnya
Bahkan pada produk SaaS pun banyak pekerjaan yang lebih terkait operasi daripada kode, dan itu cukup berbeda dari development penuh yang dibayangkan pengguna HN
Saya sangat menantikan fitur ini
Hook tampaknya akan memainkan peran penting dalam context engineering agen dan verifikasi performa runtime
Ini juga bisa diperluas ke berbagai situasi seperti compliance enterprise atau pemantauan perilaku
Fakta bahwa Anthropic langsung mendukungnya dari usulan issue GitHub juga mengesankan
Tautan issue terkait
Saya rasa fitur seperti ini akan menjadi jurus andalan yang nantinya tersebar ke semua coding agent
Alasan saya merasa fitur ini bagus adalah karena kita bisa langsung menulis aturan kontrol eksekusi command yang kompleks tanpa harus memutar lewat CLAUDE.md
Misalnya,
docker compose exec django python manage.py test
bisa diizinkan, sedangkan
docker compose exec django python manage.py makemigrations
bisa diblokir
Saya rasa akan lebih baik jika fitur ini bekerja sebagai server MCP itu sendiri
Kita bisa membuat hook sebagai tool mcp dengan nama yang sudah disepakati, lalu membayangkan agen secara otomatis menemukan hook itu tanpa perlu tahu implementasi internalnya, sehingga server mcp bisa dipakai ulang atau dimanfaatkan kembali oleh agen lain
Claude Code sering lupa instruksi di file CLAUDE.md dan isi penting codebase, jadi perlu sering diingatkan
Saya berharap pembaruan kali ini bisa memperbaiki masalah itu
void! Di CLAUDE.md jelas pola seperti itu dilarang!"Claude membaca CLAUDE.md lalu, "22 detik, 2.6k token…"
lalu merespons, "Anda benar!"
Membagikan beberapa contoh hook
Tulisan contoh pembuatan hook dan otomatisasi workflow
Senang melihat Claude Code kini punya dukungan linting/type checking setelah modifikasi kode yang setara dengan Cursor
Semoga Cursor juga mendapat fitur seperti ini
Untuk sekarang saya masih menyiasatinya dengan menggabungkan beberapa aturan sebagai solusi sementara
Saya melihat fitur ini menutup kesenjangan fitur besar yang selama ini ada
Karena cara Claude Code membuat commit, sebagian besar Git hooks biasa tidak berjalan, jadi saya terpaksa memakai cara memutar dengan menginstruksikannya lewat CLAUDE.md agar mengotomatiskan format kode memakai Qlty CLI, tetapi Claude tidak bisa menjalankannya dengan konsisten, yang cukup disayangkan
Dengan perubahan kali ini, hasil yang lebih deterministik bisa didapat
Memang event yang bisa di-hook saat ini masih terbatas, tetapi saya berharap ke depannya event Git commit dan push juga bisa dengan mudah di-hook
Tautan GitHub Qlty CLI
Sebagai catatan, Claude sangat bagus menangani Java
Ia memahami style guide saya, bahkan preferensi indentasi saya, dengan sangat akurat sampai-sampai kode Java yang dihasilkannya tidak perlu diformat ulang
Bahkan JavaDoc pun disesuaikan dengan sangat rapi, cukup mengejutkan
Mungkin jumlah pembelajaran dari kode Java enterprise skala besar memang luar biasa banyak
Saya penasaran kenapa git hooks biasa tidak bekerja dengan benar di claude code
Husky dan lint-staged berjalan normal, tetapi Pre Commit Hooks tidak berjalan
Menurut pemahaman singkat saya, fitur ini tidak menghabiskan context, dan tidak seperti MCP di mana Claude memutuskan kapan akan menjalankannya; ini adalah struktur aksi otomatis yang ditentukan langsung oleh pengguna untuk setiap penggunaan tool