Kursus
Saat bekerja dengan Claude Code, Anda akan menyadari masalah umum: Ia menulis kode yang baik tetapi lupa langkah penting seperti pemformatan, menjalankan pengujian, atau mengikuti protokol keamanan. Anda akhirnya mengulang pengingat yang sama berulang kali.
Claude Code Hooks memungkinkan Anda mengotomatiskan pengingat ini dengan menjalankan perintah shell secara otomatis pada titik tertentu dalam alur kerja Anda.
Tutorial ini menunjukkan cara menyiapkan hook untuk pemformatan kode, eksekusi pengujian, notifikasi, dan perlindungan file. Anda akan membangun sistem otomatisasi yang menegakkan standar pengembangan Anda secara konsisten tanpa intervensi manual.
Untuk mempelajari lebih lanjut tentang model bahasa besar (LLM) yang menjalankan Claude Code, baca artikel tentang Claude Sonnet 4.5. Saya juga merekomendasikan tutorial Moltbot (Clawdbot) dan tutorial Claude Cowork.
Apa itu Claude Code Hooks?
Claude Code Hooks adalah perintah shell yang berjalan secara otomatis ketika peristiwa tertentu terjadi selama sesi pengodean AI Anda. Anggap saja sebagai pemicu otomatis yang mengeksekusi skrip khusus Anda pada momen yang tepat—sebelum Claude menulis file, setelah ia menjalankan perintah, atau saat mengirimkan notifikasi kepada Anda.
Sistem ini bekerja dengan memantau tindakan Claude Code dan mencocokkannya dengan aturan yang Anda tetapkan dalam file konfigurasi. Saat kecocokan terjadi, perintah yang Anda tentukan akan berjalan dengan akses ke konteks tentang apa yang baru saja terjadi. Ini memberi Anda kendali atas perilaku Claude dan memungkinkan Anda mengotomatisasi tugas berulang yang sebaliknya memerlukan intervensi manual.
Berikut contoh hook dasar yang menjalankan pemformat kode setiap kali Claude menulis file Python:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "python -m black ."
}
]
}
]
}
}
Hook ini memiliki tiga bagian:
-
Peristiwa:
PostToolUse(setelah Claude menyelesaikan suatu aksi) -
Matcher:
Write(hanya saat menulis file) -
Perintah:
python -m black .(memformat file Python di direktori saat ini)
Hook menerima informasi terperinci tentang apa yang baru saja dilakukan Claude melalui data JSON yang dikirim ke input skrip, sehingga Anda dapat membangun otomatisasi yang lebih canggih yang merespons perubahan file tertentu.
Jika Anda tertarik pada otomatisasi di luar alur kerja pengodean, Claude Cowork menawarkan otomatisasi berbantuan AI serupa untuk tugas file dan dokumen.
Selanjutnya, kita akan mengeksplorasi cara membuat hook semacam itu dari nol dan mendaftarkannya di Claude Code untuk ditambahkan ke alur kerja Anda.
Prasyarat
Sebelum menyelami Claude Code Hooks, Anda perlu menyiapkan beberapa hal:
-
Claude Code terpasang dan berjalan: Anda sebaiknya terbiasa menggunakan Claude Code untuk tugas pengodean dasar
-
Keakraban dengan baris perintah: Hook menjalankan perintah shell, jadi Anda perlu tahu cara menulis perintah terminal dasar untuk sistem operasi Anda
-
Akses editor teks: Anda akan mengedit file konfigurasi JSON untuk menyiapkan hook
-
Direktori proyek: Sebuah proyek pengodean tempat Anda bisa dengan aman menguji hook tanpa memengaruhi pekerjaan penting
Anda tidak perlu menjadi ahli skrip shell, tetapi memahami cara menjalankan perintah seperti ls, cd, dan operasi file dasar akan membantu Anda mengikuti contoh. Jika Anda baru mengenal bash atau terminal, saya merekomendasikan kursus Introduction to Shell kami.
Memulai dengan Claude Code Hooks
Sekarang Anda memahami apa itu hook, mari siapkan otomatisasi pertama Anda. Prosesnya melibatkan memilih peristiwa yang tepat untuk kebutuhan Anda, mengonfigurasi aturan sederhana, dan mengujinya dengan perintah dasar.
Memahami peristiwa hook
Claude Code menyediakan sepuluh peristiwa berbeda tempat Anda dapat menjalankan perintah. Setiap peristiwa terpicu pada momen tertentu, memberi Anda kendali atas bagian berbeda dari alur kerja:
PreToolUse dan PostToolUse adalah peristiwa yang paling umum. PreToolUse berjalan sebelum Claude melakukan aksi seperti menulis file atau menjalankan perintah, sehingga cocok untuk validasi atau memblokir operasi berbahaya. PostToolUse berjalan setelah Claude menyelesaikan aksi, yang efektif untuk tugas pembersihan seperti memformat kode atau menjalankan pengujian.
UserPromptSubmit terpicu saat Anda mengirim prompt ke Claude, sebelum ia memproses permintaan Anda. Anda dapat menggunakannya untuk menambahkan konteks ke percakapan atau memvalidasi bahwa prompt memenuhi persyaratan tertentu.
Notification berjalan ketika Claude mengirimkan peringatan kepada Anda, seperti meminta izin untuk menjalankan perintah atau saat membutuhkan masukan Anda. PermissionRequest terpicu ketika Claude Code menampilkan dialog izin, memungkinkan Anda menyetujui atau menolak permintaan tersebut secara otomatis atas nama pengguna.
Stop dan SubagentStop terpicu saat Claude selesai merespons, yang berguna untuk pemeriksaan akhir atau pembuatan laporan. Perbedaannya adalah Stop menyala ketika Claude menyelesaikan respons keseluruhan, sedangkan SubagentStop saat pembantu yang dipanggil alat (“subagent”) menyelesaikan pekerjaannya.
Peristiwa lain, PreCompact dan SessionStart, menangani situasi khusus seperti pembersihan percakapan dan inisialisasi sesi.
Peristiwa lain, PreCompact, SessionStart, dan SessionEnd, menangani situasi khusus siklus hidup. PreCompact berjalan tepat sebelum Claude memendekkan riwayat percakapan. ‘SessionStart’ menyala di awal sesi baru untuk menyiapkan default, dan SessionEnd terpicu saat sesi ditutup, memungkinkan pembersihan atau pelaporan akhir.
|
Nama peristiwa |
Waktu pemicu |
Kasus penggunaan utama |
|
|
Sebelum Claude melakukan aksi (mis., menulis file, menjalankan perintah). |
Memvalidasi aksi atau memblokir operasi berbahaya. |
|
|
Setelah Claude menyelesaikan sebuah aksi. |
Tugas pembersihan, pemformatan kode, atau menjalankan pengujian. |
|
|
Saat Anda mengirim prompt, sebelum pemrosesan dimulai. |
Menambahkan konteks ke percakapan atau memvalidasi persyaratan prompt. |
|
|
Saat Claude mengirim peringatan (mis., meminta masukan atau izin). |
Menangani peringatan sistem dan permintaan perhatian pengguna. |
|
|
Saat dialog izin ditampilkan. |
Menyetujui atau menolak permintaan secara otomatis atas nama pengguna. |
|
|
Saat Claude menyelesaikan respons keseluruhan. |
Pemeriksaan akhir atau membuat laporan untuk respons utama. |
|
|
Saat pembantu yang dipanggil alat ("subagent") menyelesaikan pekerjaannya. |
Pemeriksaan akhir khusus untuk aktivitas subagent. |
|
|
Tepat sebelum riwayat percakapan dipersingkat. |
Mengelola pembersihan percakapan dan pelestarian konteks. |
|
|
Di awal sesi baru. |
Inisialisasi dan menyiapkan default. |
|
|
Saat sesi ditutup. |
Pembersihan akhir atau pelaporan akhir sesi. |
Memahami matcher
Matcher adalah filter yang menentukan aksi Claude Code mana yang memicu sebuah hook. Secara teknis, ini adalah string yang ditafsirkan sebagai regular expression, sehingga Anda bisa menggunakan kecocokan pasti atau pola yang lebih fleksibel.
Matcher yang paling relevan adalah yang sederhana seperti Write (menyala saat Claude menulis file) atau Edit (menyala saat mengedit konten), dan kombinasi seperti Edit|Write untuk mencakup beberapa aksi.
Anda juga dapat menggunakan pola awalan seperti Notebook.* untuk mencocokkan semua alat yang diawali dengan “Notebook.” Jika Anda ingin hook menyala pada setiap aksi, gunakan regex universal .*, string kosong ("") atau biarkan matcher kosong.
Karena matcher bersifat case-sensitive dan hanya bertindak pada nama aksi, sebaiknya buat serinci mungkin. Saat Anda membutuhkan kontrol yang lebih halus (misalnya, membatasi hook untuk jenis file tertentu) Anda dapat membaca payload JSON yang diteruskan Claude ke hook dan menerapkan regex atau kondisi Anda sendiri di sana.
Membuat hook pertama Anda di Claude Code
Claude Code menyediakan dua cara untuk menyiapkan hook: melalui perintah interaktif /hooks atau dengan mengedit file konfigurasi secara langsung. Mari mulai dengan pendekatan interaktif karena lebih ramah pemula.
Menggunakan perintah /hooks:
-
Buka Claude Code dan ketik /hooks di antarmuka chat
-
Pilih peristiwa pemicu (pilih
PostToolUseuntuk contoh ini) -
Pilih "Add new hook" dari menu
-
Tetapkan pola matcher Anda (masukkan
Writeuntuk menargetkan penulisan file) -
Masukkan perintah Anda:
-
Mac:
say "Task complete" -
Windows:
powershell -c [console]::beep() -
Linux:
spd-say "Task complete" -
Simpan konfigurasi dan kembali ke Claude Code dengan menekan Esc tiga kali
Perintah /hooks akan otomatis memperbarui file pengaturan Anda dan memuat ulang konfigurasi. Anda juga dapat menggunakan /hooks kapan saja untuk melihat hook yang ada atau melakukan perubahan.
Jika Anda lebih suka mengedit file konfigurasi secara langsung, hook berada di ~/.claude/settings.json untuk pengaturan global atau .claude/settings.json di dalam direktori proyek Anda. Untuk contoh kita di atas, tampilannya seperti ini:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "say 'Task complete'"
}
]
}
]
}
}
Setelah mengedit file secara manual, mulai ulang Claude Code atau gunakan perintah /hooks untuk memuat ulang konfigurasi. Sekarang setiap kali Claude menulis file, Anda akan mendengar notifikasi audio.
Menguji hook Anda
Sebelum melangkah lebih jauh, verifikasi bahwa hook Anda benar-benar berfungsi:
-
Minta Claude menulis file Python apa pun (mis., "Buat file hello.py yang mencetak hello world")
-
Anda seharusnya mendengar notifikasi audio saat Claude menyelesaikan operasi penulisan
-
Jika Anda tidak mendengar apa pun, periksa transkrip Claude Code dengan menekan Ctrl-O untuk melihat pesan kesalahan
-
Masalah umum termasuk perintah hook tidak ditemukan, izin file salah, atau kesalahan sintaks di file konfigurasi Anda
Membuat uji dasar ini berjalan akan menghemat waktu debug nanti saat membangun hook yang lebih kompleks. Jika Anda baru saja mengedit file pengaturan secara manual, mengubah matcher atau peristiwa, atau menginstal alat baru yang ingin digunakan dalam perintah hook, akan membantu untuk membuka kembali /hooks atau memulai ulang Claude untuk memuat ulang konfigurasi.
Pola dasar ini—peristiwa, matcher, perintah—menjadi fondasi untuk semua otomatisasi hook. Anda dapat memperluasnya dengan menambahkan beberapa perintah untuk dijalankan secara bersamaan ketika peristiwa yang sama terpicu. Misalnya, Anda mungkin ingin memutar suara dan membuat cadangan saat Claude menulis file.
Anda juga dapat membuat matcher terpisah untuk alat yang berbeda dalam peristiwa yang sama, sehingga penulisan file memicu aksi berbeda dari pengeditan kode. Semua hook yang cocok dengan pola alat yang sama berjalan paralel. Jika Anda mengonfigurasi beberapa matcher untuk peristiwa yang sama, setiap hook akan berjalan saat matchernya terpicu.
Bekerja dengan Input Hook
Saat Claude Code memicu sebuah hook, ia mengirimkan informasi tentang apa yang baru saja terjadi melalui standard input (stdin), sebuah aliran data yang mengalir langsung ke perintah Anda saat dijalankan. Data ini membuat hook menjadi kuat alih-alih sekadar skrip acak yang berjalan pada waktu sembarang.
Claude Code mengemas informasi ini sebagai JSON dan memberikannya ke perintah apa pun yang Anda konfigurasikan, baik itu perintah terminal sederhana atau skrip khusus.
Anatomi input hook
Setiap hook menerima objek JSON dengan field dasar tentang sesi saat ini:
{
"session_id": "abc123",
"transcript_path": "/Users/you/.claude/projects/my-project/conversation.jsonl",
"cwd": "/Users/you/my-project",
"hook_event_name": "PostToolUse"
}
Mari terjemahkan setiap komponennya:
-
session_id: mengidentifikasi percakapan Anda saat ini -
transcript_path: menunjuk ke riwayat percakapan -
cwd: menunjukkan direktori kerja -
hook_event_name: memberi tahu Anda peristiwa mana yang menyala
Dengan konteks ini, hook Anda dapat membuat keputusan cerdas: Anda dapat melacak percakapan mana yang memicu suatu aksi, mengakses riwayat chat lengkap jika diperlukan, atau menjalankan perintah di direktori yang benar.
Variasi input berbasis peristiwa
Peristiwa alat seperti PreToolUse dan PostToolUse menyertakan detail tambahan tentang aksi, di sinilah hook menjadi sangat berguna untuk otomatisasi. Dalam PreToolUse, tool_input ditentukan, dan tool_response ditambahkan dalam PostToolUse:
{
"session_id": "abc123",
"hook_event_name": "PostToolUse",
"tool_name": "Write",
"tool_input": {
"file_path": "/path/to/file.py",
"content": "print('Hello world')"
},
"tool_response": {
"filePath": "/path/to/file.py",
"success": true
}
}
Dalam input hook, file_path menunjukkan path file yang sedang ditulis atau diedit, sedangkan content berisi teks persis yang akan ditulis alat. Setelah eksekusi, respons alat menggemakan filePath final (perhatikan camelCase) untuk mengonfirmasi file mana yang benar-benar tersentuh, bersama dengan flag success yang menunjukkan apakah operasi selesai dengan benar.
Informasi detail ini berarti hook Anda dapat merespons secara berbeda berdasarkan apa yang benar-benar terjadi. Anda bisa memformat hanya file Python, mencadangkan hanya direktori penting, atau mengirim notifikasi hanya saat jenis file tertentu diubah.
Peristiwa seperti UserPromptSubmit lebih sederhana karena tidak melibatkan alat:
{
"session_id": "abc123",
"hook_event_name": "UserPromptSubmit",
"prompt": "Write a function to calculate factorial"
}
Perhatikan bahwa hook UserPromptSubmit tidak menggunakan matcher dalam konfigurasinya. Mereka terpicu pada semua prompt, bukan operasi alat. Ini membuatnya sempurna untuk mencatat percakapan, menambahkan konteks proyek secara otomatis, atau memvalidasi prompt sebelum Claude memprosesnya.
Membaca input hook dalam praktik
Mari buat hook yang mencatat setiap prompt pengguna. Ini menyelesaikan masalah kehilangan jejak apa yang Anda minta Claude kerjakan, terutama selama sesi pengodean yang panjang. Pertama, konfigurasi hook:
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "python3 ~/.claude/log_prompts.py"
}
]
}
]
}
}
Selanjutnya, buat skrip Python di ~/.claude/log_prompts.py dengan konten berikut:
#!/usr/bin/env python3
import json
import sys
from datetime import datetime
# Read JSON data from stdin
input_data = json.load(sys.stdin)
# Extract information
session_id = input_data.get("session_id", "unknown")
prompt = input_data.get("prompt", "")
timestamp = datetime.now().isoformat()
# Log the prompt
log_entry = f"{timestamp} | Session: {session_id[:8]} | {prompt}\n"
with open("prompt_history.txt", "a") as f:
f.write(log_entry)
Skrip ini membaca data JSON yang dikirim Claude Code dan mencatat prompt dengan konteks sesi. Ini membuat riwayat interaksi yang dapat dicari, yang sangat berguna saat Anda perlu mengingat bagaimana Anda menyelesaikan masalah beberapa minggu kemudian.
Bekerja dengan Output Hook
Setelah perintah hook Anda berjalan, ia perlu memberi tahu Claude Code apa yang terjadi dan apakah harus melanjutkan seperti biasa. Mekanisme kontrol ini yang mengubah hook dari alat pencatatan sederhana menjadi otomatisasi alur kerja yang kuat yang dapat memandu perilaku Claude. Ini terjadi melalui tiga saluran: standard output (stdout), standard error (stderr), dan kode keluar.
Saluran output dan kode keluar
Standard output (stdout) adalah keluaran normal. Misalnya, jika Anda mencetak sesuatu, itu masuk ke stdout. Untuk sebagian besar hook, inilah yang muncul di transkrip Claude Code saat Anda menekan Ctrl-O, memberi Anda catatan tentang apa yang dilakukan otomatisasi Anda tanpa mengacaukan percakapan utama.
Standard error (stderr) mengacu pada pesan kesalahan. Anda dapat menulis ke stderr menggunakan
-
Python:
print("message", file=sys.stderr)atau -
Baris perintah:
echo "message" >&2
Perbedaan utamanya adalah stderr dapat dikirim langsung ke Claude untuk diproses otomatis, sehingga ia bisa merespons masalah yang dideteksi hook Anda.
Kode keluar memberi tahu Claude Code apa yang harus dilakukan selanjutnya:
-
Kode keluar 0: Berhasil (menampilkan
stdoutke pengguna) -
Kode keluar 2: Kesalahan pemblokiran (mengirim
stderrke Claude) -
Kode keluar 3: Eksekusi ditangguhkan (menunjukkan bahwa perintah selesai tanpa error, tetapi efeknya ditunda hingga kondisi tambahan terpenuhi)
-
Kode lain: Kesalahan non-pemblokiran (menampilkan
stderrke pengguna, tetapi tetap lanjut)
Sistem ini memberi Anda kontrol terperinci tentang kapan Claude harus berhenti, melanjutkan, atau menerima umpan balik tentang apa yang ditemukan otomatisasi Anda. Mari lihat contoh untuk dua kode keluar yang paling penting.
Kode keluar 0: Operasi normal
Kebanyakan hook menggunakan kode keluar 0 untuk menunjukkan semuanya baik-baik saja. Berikut hook lengkap yang mencatat operasi file dan memberi tahu pengguna:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "python3 -c \"import datetime; open('activity.log','a').write('File written: ' + datetime.datetime.now().isoformat() + '\\n'); print('Logged file operation')\""
}
]
}
]
}
}
Hook ini menjalankan dua perintah: mencatat ke file, lalu mencetak pesan ke transkrip. Ada banyak cara untuk melakukan ini, tetapi pendekatan ini lintas platform dan menghindari ketergantungan pada spesifik baris perintah.
Karena tidak ada kode keluar eksplisit, defaultnya 0. Pesan yang dicetak muncul di transkrip Claude Code, memberi Anda umpan balik bahwa pencatatan berhasil. Pola ini sempurna untuk membangun jejak audit atau melacak perubahan apa yang dibuat Claude pada proyek Anda dari waktu ke waktu.
Kode keluar 2: Memblokir dengan umpan balik
Kode keluar 2 mengirim pesan kesalahan Anda langsung ke Claude, memungkinkannya merespons secara otomatis. Di sinilah hook menjadi mekanisme keselamatan, bukan sekadar otomatisasi. Berikut hook yang memblokir operasi file berbahaya:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "python3 ~/.claude/security_check.py"
}
]
}
]
}
}
Anda perlu membuat skrip pemeriksaan keamanan di ~/.claude/security_check.py:
#!/usr/bin/env python3
import json
import sys
# Read hook input
input_data = json.load(sys.stdin)
tool_input = input_data.get("tool_input", {})
file_path = tool_input.get("file_path", "")
# Check for dangerous patterns
dangerous_paths = ["/etc/", "/usr/", "production.conf"]
is_dangerous = any(pattern in file_path for pattern in dangerous_paths)
if is_dangerous:
# Block the operation and tell Claude why
print(f"Blocked modification of {file_path} - this appears to be a system or production file", file=sys.stderr)
sys.exit(2) # Sends stderr message to Claude
else:
# Allow the operation
print(f"Approved modification of {file_path}")
sys.exit(0) # Shows stdout in transcript
Saat hook ini mendeteksi path berbahaya, ia keluar dengan kode 2. Claude Code mengirim pesan stderr ke Claude, yang kemudian dapat menjelaskan kepada Anda mengapa operasi diblokir dan menyarankan alternatif. Ini mencegah kerusakan tidak disengaja pada file sistem sekaligus membuat Claude memahami kebijakan keamanan Anda.
Membangun Hook Notifikasi Cerdas untuk Claude Code
Mari bangun hook notifikasi yang ditingkatkan yang menggabungkan pemrosesan input dengan penanganan output cerdas. Ini menyelesaikan masalah kebisingan dari hook awal kita yang memberi peringatan pada setiap perubahan file:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"hooks": [
{
"type": "command",
"command": "python3 ~/.claude/smart_notify.py"
}
]
}
]
}
}
Buat skrip notifikasi di ~/.claude/smart_notify.py:
#!/usr/bin/env python3
import json
import sys
import os
import subprocess
# Read the hook input
input_data = json.load(sys.stdin)
tool_input = input_data.get("tool_input", {})
file_path = tool_input.get("file_path", "")
# Categorize file importance
important_extensions = [".py", ".js", ".ts", ".java", ".cpp"]
config_files = ["Dockerfile", "requirements.txt", "package.json"]
is_code = any(file_path.endswith(ext) for ext in important_extensions)
is_config = any(filename in file_path for filename in config_files)
if is_code:
# Important: notify and log
print(f"Code file modified: {os.path.basename(file_path)}")
subprocess.run(["say", "Code updated"], check=False) # Mac
sys.exit(0) # Show message in transcript
elif is_config:
# Very important: louder notification
print(f"Configuration file changed: {os.path.basename(file_path)}")
subprocess.run(["say", "Configuration updated - review changes"], check=False)
sys.exit(0)
else:
# Not important: silent success
sys.exit(0)
Hook ini membaca input untuk memahami file apa yang diubah, membuat keputusan tentang tingkat kepentingan notifikasi berdasarkan jenis file, menggunakan stdout untuk mencatat perubahan penting ke transkrip, memicu peringatan audio berbeda berdasarkan jenis file, dan selalu keluar dengan kode 0 karena ini adalah tindakan informasional, bukan pemblokiran.
Kombinasi analisis input dan kontrol output menciptakan hook yang berperilaku cerdas berdasarkan konteks sekaligus memberikan tingkat umpan balik yang tepat kepada Anda dan Claude Code. Alih-alih mendapatkan notifikasi yang mengganggu untuk setiap file sementara, Anda hanya mendengar perubahan yang benar-benar penting bagi proyek Anda.
Perlu dicatat bahwa contoh ini menggunakan perintah say, yang tersedia di macOS. Di Linux, Anda bisa menggunakan notify-send, dan di Windows, perintah PowerShell, untuk mencapai notifikasi serupa.
Pola Lanjutan untuk Claude Code Hooks
Di luar notifikasi dan pencatatan dasar, hook dapat menyelesaikan masalah alur kerja pengembangan nyata yang dihadapi tim setiap hari. Berikut beberapa ide yang dapat Anda adaptasikan untuk proyek Anda sendiri.
Yang hebat adalah, Anda sebenarnya tidak harus membangun hook ini secara manual. Anda cukup memberikan salah satu ide prompt di bawah ini kepada Claude Code, bersama dengan referensi Hooks dalam dokumentasinya, dan ia akan menghasilkan kode serta JSON yang relevan untuk konfigurasi.
Setiap pola ini dapat disesuaikan dengan alat dan alur kerja spesifik Anda. Mulailah dengan yang menyelesaikan frustrasi harian terbesar Anda, lalu perluas otomatisasi saat Anda semakin nyaman dengan pengembangan hook.
Hook lanjutan untuk keamanan dan kepatuhan
Pemindai kunci API
-
Masalah: Tanpa sengaja melakukan commit rahasia ke version control
-
Pemicu: Sebelum menulis file apa pun
-
Solusi: Memindai konten file untuk kunci API, token, dan kata sandi menggunakan pola regex
“Buat skrip Python yang membaca JSON input hook, mengekstrak konten file, dan menggunakan pola regex untuk mendeteksi format rahasia umum seperti api_key=, token:, atau password=. Untuk kecocokan yang mencurigakan, lakukan verifikasi lokal dan jangan pernah mengirim rahasia mentah ke luar.
Hanya kirim cuplikan yang ditutupi (mis., sisakan 4 karakter prefix/suffix) atau hash ke API Anthropic untuk menganalisis string mencurigakan dan menentukan apakah itu benar-benar rahasia atau nama variabel. Keluar dengan kode 2 dan berikan umpan balik ke Claude tentang rahasia yang terdeteksi dan alternatif yang lebih aman.”
Penegak header lisensi
-
Masalah: Proyek open source kehilangan header lisensi yang diwajibkan pada file baru
-
Pemicu: Sebelum menulis file kode sumber
-
Solusi: Memvalidasi bahwa file
.py,.js,.javabaru berisi teks lisensi yang benar
“Parsing input hook untuk mendapatkan konten file dan periksa apakah 10 baris pertama berisi teks lisensi menggunakan pencocokan string. Untuk validasi yang lebih canggih, kirim header file ke Claude melalui API Anthropic untuk memverifikasi bahwa ia berisi pemberitahuan hak cipta dan informasi lisensi yang benar. Blokir pembuatan file dengan kode keluar 2 jika header hilang, dan berikan ke Claude templat lisensi yang benar untuk ditambahkan.”
Penjaga file produksi
-
Masalah: Tanpa sengaja mengubah file konfigurasi sistem yang kritis
-
Pemicu: Sebelum mengedit file di direktori sensitif
-
Solusi: Memblokir perubahan pada
/etc/,nginx.conf,database.yml, dan konfigurasi kritis lainnya
“Ekstrak path file dari JSON input hook dan periksa apakah cocok dengan pola seperti /etc/, production.yml, atau nama file kritis lainnya. Gunakan API Claude untuk menganalisis path file dan menentukan apakah itu file konfigurasi yang dapat memengaruhi sistem produksi. Keluar dengan kode 2 dan berikan panduan spesifik tentang praktik pengembangan yang lebih aman saat path berbahaya terdeteksi.”
Pengoptimal gambar
-
Masalah: File gambar besar memperlambat aplikasi dan repositori
-
Pemicu: Setelah menambahkan file gambar baru
-
Solusi: Mengompresi file PNG/JPEG sambil mempertahankan kualitas visual
“Parsing input hook untuk mendapatkan path file dan periksa apakah itu file gambar menggunakan pencocokan ekstensi. Jalankan alat kompresi seperti imageoptim atau panggil API TinyPNG untuk mengompresi gambar sambil mempertahankan kualitas. Catat hasil kompresi ke stdout sehingga Anda dapat melihat penghematan ukuran file di transkrip Claude.”
Hook lanjutan untuk otomatisasi version control
Validator branch Git
-
Masalah: Anggota tim tanpa sengaja mendorong perubahan ke branch yang dilindungi
-
Pemicu: Sebelum operasi tulis atau edit file apa pun
-
Solusi: Memeriksa branch Git saat ini dan memblokir operasi pada main/master/production
“Gunakan perintah bash sederhana git branch --show-current untuk mendapatkan nama branch saat ini dan bandingkan dengan daftar branch yang dilindungi. Jika berada di branch yang dilindungi, keluar dengan kode 2 dan kirim pesan kesalahan ke Claude yang menjelaskan kebijakan perlindungan branch. Untuk aturan penamaan branch yang kompleks, gunakan API Claude untuk menganalisis nama branch dan menentukan apakah cocok dengan pola perlindungan.”
Auto-commit cerdas
-
Masalah: Lupa melakukan commit perubahan atau menulis pesan commit yang buruk
-
Pemicu: Setelah modifikasi file apa pun
-
Solusi: Secara otomatis stage dan commit perubahan dengan pesan deskriptif yang dihasilkan AI
“Baca path file yang dimodifikasi dari input hook, jalankan git diff untuk mendapatkan perubahan, dan kirim diff ke API Claude dengan prompt yang meminta pesan commit ringkas. Gunakan pesan yang dihasilkan dengan perintah git add dan git commit untuk secara otomatis melakukan commit perubahan. Sertakan nama file dan jenis perubahan dalam prompt API untuk memastikan pesan commit mengikuti standar conventional commit.”
Generator dokumentasi
-
Masalah: Dokumentasi API tidak sinkron dengan perubahan kode
-
Pemicu: Setelah memodifikasi file antarmuka (controller, model, API)
-
Solusi: Menjalankan alat dokumentasi seperti JSDoc, Sphinx, atau generator OpenAPI secara otomatis
“Periksa path file yang dimodifikasi untuk menentukan apakah itu endpoint API, model, atau file antarmuka menggunakan pencocokan pola. Kirim konten file ke API Claude, memintanya mengekstrak perubahan API dan menghasilkan pembaruan dokumentasi. Jalankan alat pembuatan dokumentasi yang sesuai (jsdoc, sphinx-build, dll.) dan commit dokumentasi yang diperbarui secara otomatis.
Hook lanjutan untuk kolaborasi dan integrasi alur kerja
Integrasi Slack
-
Masalah: Tim tidak menyadari perubahan penting pada basis kode bersama
-
Pemicu: Saat notifikasi dikirim untuk operasi signifikan
-
Solusi: Memposting pesan terformat ke channel tim dengan nama file dan ringkasan perubahan
“Ekstrak informasi file dari input hook dan saring untuk jenis file penting seperti kode sumber atau file konfigurasi. Gunakan API Claude untuk menghasilkan ringkasan perubahan yang mudah dibaca berdasarkan nama dan jenis file. Kirim pesan terformat ke Slack menggunakan URL webhook dengan mention anggota tim untuk perubahan kritis.”
Dispatcher webhook
-
Masalah: Pemicu pipeline CI/CD manual menyebabkan keterlambatan deployment
-
Pemicu: Saat peristiwa tertentu terjadi (perubahan konfigurasi, file deployment diubah)
-
Solusi: Memanggil API eksternal untuk memicu build, deployment, atau proses otomatis lainnya
“Periksa path file yang dimodifikasi terhadap pola seperti Dockerfile, package.json, atau konfigurasi deployment untuk menentukan apakah CI/CD harus dipicu. Gunakan library requests di Python untuk memanggil URL webhook dengan header autentikasi dan payload data tentang perubahan. Sertakan path file dan metadata perubahan dalam payload webhook agar sistem eksternal dapat membuat keputusan cerdas tentang apa yang harus dibangun atau dideploy.”
Pembaruan halaman status
-
Masalah: Pelanggan tidak menyadari aktivitas pemeliharaan atau deployment
-
Pemicu: Saat file deployment atau infrastruktur diubah
-
Solusi: Memperbarui halaman status layanan dengan notifikasi pemeliharaan
“Parsing input hook untuk perubahan file infrastruktur seperti manifest Kubernetes atau konfigurasi Terraform menggunakan pola path file. Hasilkan pesan pemeliharaan menggunakan API Claude berdasarkan jenis perubahan infrastruktur yang terdeteksi. Posting pembaruan status ke layanan seperti StatusPage.io atau PagerDuty menggunakan REST API mereka dengan tipe insiden yang sesuai dan estimasi durasi.”
Pemberi tahu status tim
-
Masalah: Konflik saat banyak pengembang tanpa sadar mengerjakan fitur yang sama
-
Pemicu: Saat memulai sesi Claude Code baru
-
Solusi: Mengabarkan channel tim bahwa Anda mulai mengerjakan proyek atau komponen tertentu
“Baca direktori proyek dari input hook dan gunakan API Claude untuk menganalisis file terbaru atau riwayat git guna memahami jenis pekerjaan yang dilakukan. Kirim pesan terformat ke channel komunikasi tim berisi nama Anda, nama proyek, dan area fokus. Sertakan estimasi durasi pekerjaan dan undang anggota tim untuk berkoordinasi jika mereka mengerjakan fitur terkait.”
Kesimpulan
Claude Code Hooks mengubah asisten pengodean AI yang tidak terduga menjadi alur kerja otomatis yang berjalan tepat saat Anda membutuhkannya. Dalam tutorial ini, Anda telah mempelajari cara menyiapkan hook menggunakan perintah interaktif /hooks dan konfigurasi manual, memahami data input JSON yang mendukung otomatisasi cerdas, serta mengendalikan perilaku Claude melalui kode keluar dan output terstruktur.
Pola praktis yang kita bahas mencakup validator keamanan yang memblokir operasi berbahaya dan notifikasi cerdas yang mengurangi kebisingan. Contoh-contoh ini menunjukkan bagaimana hook menyelesaikan masalah pengembangan nyata sekaligus memberi Anda kendali penuh atas asisten AI Anda. Sekarang setelah Anda memahami dasarnya, Anda dapat membangun otomatisasi yang sesuai dengan kebutuhan alur kerja tim Anda.
Untuk mempelajari lebih lanjut tentang bekerja dengan alat AI, lihat kursus Understanding Prompt Engineering dari DataCamp, yang membahas strategi prompt yang selaras dengan pengembangan hook. Untuk keterampilan pengodean AI yang lebih luas, coba kursus Intermediate ChatGPT untuk mengembangkan keterampilan yang membuat asisten AI lebih andal dalam alur kerja pengembangan Anda.
Claude Code Hooks FAQs
Apa itu Claude Code Hooks?
Claude Code Hooks adalah pemicu otomatis yang mengeksekusi perintah shell ketika peristiwa tertentu terjadi selama sesi Claude Code Anda. Mereka menyelesaikan masalah saat Claude menulis kode yang baik tetapi lupa langkah penting seperti pemformatan, menjalankan pengujian, atau memeriksa keamanan. Alih-alih mengingatkan Claude secara manual setiap saat, hook mengotomatiskan pengingat ini dengan menjalankan perintah secara otomatis: Misalnya, memformat kode Python setelah Claude menulisnya, menjalankan pengujian setelah modifikasi, atau memblokir perubahan berbahaya pada file sensitif. Hook memantau sesi Anda, mendeteksi peristiwa yang cocok, dan mengeksekusi perintah yang Anda konfigurasikan dengan akses ke konteks terperinci tentang apa yang baru saja dilakukan Claude.
Bagaimana cara menggunakan hook di Claude Code?
Anda dapat menyiapkan hook dengan dua cara. Metode termudah adalah menggunakan perintah interaktif /hooks di Claude Code, yang memandu Anda memilih peristiwa (seperti PostToolUse), pola matcher (seperti Write untuk penulisan file), dan perintah Anda (seperti python -m black .). Alternatifnya, Anda dapat mengedit konfigurasi secara manual di ~/.claude/settings.json (global) atau .claude/settings.json (khusus proyek) untuk mendefinisikan hook sebagai JSON. Setelah dikonfigurasi, hook dimuat dan aktif secara otomatis. Anda dapat melihat, mengubah, atau memuat ulang hook kapan saja dengan menjalankan /hooks lagi atau memulai ulang Claude Code.
Apa perbedaan antara hook PreToolUse dan PostToolUse?
PreToolUse berjalan sebelum Claude mengeksekusi sebuah aksi (seperti menulis atau mengedit file), menjadikannya ideal untuk validasi dan memblokir operasi berbahaya. Anda dapat memeriksa apa yang akan dilakukan Claude dan menghentikannya jika perlu dengan keluar menggunakan kode 2. Hook PostToolUse berjalan setelah Claude menyelesaikan sebuah aksi, sehingga sempurna untuk tugas pembersihan seperti memformat kode, menjalankan pengujian, atau mencatat apa yang terjadi. Gunakan PreToolUse saat Anda membutuhkan kontrol preventif dan PostToolUse saat Anda membutuhkan otomatisasi reaktif.
Bagaimana cara meneruskan informasi tentang apa yang dilakukan Claude ke skrip hook saya?
Claude Code mengirimkan informasi terperinci melalui standard input (stdin) sebagai JSON, berisi konteks seperti path file, konten yang ditulis, ID sesi, dan lainnya. Skrip hook Anda membaca JSON ini menggunakan json.load(sys.stdin) di Python atau metode serupa di bahasa lain. Payload JSON ini memungkinkan hook Anda membuat keputusan cerdas, misalnya hanya memformat file Python dengan memeriksa ekstensi file, atau memblokir modifikasi pada direktori tertentu dengan memeriksa path file.
Apa fungsi kode keluar 2, dan kapan saya harus menggunakannya?
Kode keluar 2 memberi tahu Claude Code bahwa sebuah operasi harus diblokir, dan mengirim pesan kesalahan Anda (ditulis ke stderr) langsung ke Claude. Claude kemudian dapat menjelaskan masalah kepada Anda dan menyarankan alternatif. Gunakan kode keluar 2 untuk pemeriksaan keamanan (memblokir modifikasi file berbahaya), validasi kepatuhan (header wajib yang hilang), atau gerbang keselamatan (mencegah commit ke branch yang dilindungi). Untuk hook informasional yang tidak boleh memblokir operasi, gunakan kode keluar 0 atau kode lainnya.
Saya adalah pembuat konten ilmu data dengan pengalaman lebih dari 2 tahun dan salah satu dengan jumlah pengikut terbesar di Medium. Saya suka menulis artikel mendetail tentang AI dan ML dengan sedikit gaya sarkastik karena harus ada sesuatu untuk membuatnya sedikit kurang membosankan. Saya telah menghasilkan lebih dari 130 artikel dan satu kursus DataCamp, dengan satu lagi sedang dalam proses. Konten saya telah dilihat oleh lebih dari 5 juta pasang mata, dengan 20 ribu di antaranya menjadi pengikut di Medium dan LinkedIn.

