Lewati ke konten utama

Claude Code Hooks: Panduan Praktis Otomatisasi Alur Kerja

Pelajari cara kerja otomatisasi berbasis hook dan mulai menggunakan hook Claude Code untuk mengotomatiskan tugas pengodean seperti pengujian, pemformatan, dan menerima notifikasi.
Diperbarui 22 Jul 2026  · 15 mnt baca

Jelajahi dengan AI

Buka di ChatGPTBuka di ClaudeBuka di Perplexity

Saat bekerja dengan Claude Code, Anda akan melihat masalah umum: Ia menulis kode yang baik tetapi melupakan langkah penting seperti pemformatan, menjalankan tes, 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.

Dalam tutorial ini, saya membahas cara menyiapkan hook untuk pemformatan kode, eksekusi tes, notifikasi, dan perlindungan file. Anda akan membangun sistem otomatisasi yang menegakkan standar pengembangan Anda tanpa intervensi manual.

Untuk informasi lebih lanjut tentang Claude Code, lihat panduan praktik terbaik Claude Code kami dan tutorial Claude Skills. Jika Anda ingin mempelajari cara mengonfigurasi instruksi tingkat proyek, lihat panduan kami tentang menulis CLAUDE.md.

TL;DR

  • Claude Code Hooks adalah perintah shell yang berjalan otomatis pada titik tertentu dalam siklus hidup Claude Code (sebelum/sesudah pemanggilan tool, saat sesi dimulai, ketika Claude berhenti)

  • Konfigurasikan di .claude/settings.json (proyek) atau ~/.claude/settings.json (global) menggunakan JSON dengan event, matcher, dan command

  • Gunakan hook PreToolUse untuk memblokir operasi berbahaya sebelum terjadi (kode keluar 2 = blokir)

  • Gunakan hook PostToolUse untuk tugas pembersihan seperti pemformatan, linting, atau menjalankan tes setelah Claude menulis kode

  • Hook menerima konteks JSON pada stdin dan mengomunikasikan hasil melalui kode keluar, stdout, dan stderr

Apa Itu Claude Code Hooks?

Claude Code Hooks adalah perintah shell yang berjalan otomatis ketika event tertentu terjadi selama sesi pengodean AI Anda. Anggap saja sebagai pemicu otomatis yang mengeksekusi skrip kustom Anda pada momen tepatsebelum 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. Ketika ada kecocokan, perintah yang Anda tentukan akan dijalankan dengan akses ke konteks tentang apa yang baru saja terjadi. Ini memberi Anda kendali atas perilaku Claude dan memungkinkan otomatisasi tugas berulang yang sebaliknya memerlukan intervensi manual.

Berikut hook dasar yang menjalankan formatter kode setiap kali Claude menulis file Python:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write",
        "hooks": [
          {
            "type": "command",
            "command": "python -m black ."
          }
        ]
      }
    ]
  }
}

Hook ini memiliki tiga bagian: 

  • Event: PostToolUse (setelah Claude menyelesaikan suatu aksi)

  • Matcher: Write (hanya saat menulis file)

  • Command: 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 ingin melangkah lebih jauh dengan otomatisasi Claude Code, tutorial Claude Code Routines kami menunjukkan cara menjadwalkan hook dan agen untuk berjalan secara berkala di cloud.

Mari kita lihat cara membuat hook dari awal dan mendaftarkannya di Claude Code.

Prasyarat

Anda memerlukan beberapa hal sebelum memulai:

  • Claude Code terpasang dan berjalan: Anda sebaiknya nyaman menggunakan Claude Code untuk tugas pengodean dasar

  • Keakraban dengan command line: 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 dapat menguji hook dengan aman 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 dalam bash atau terminal, saya merekomendasikan mengikuti kursus Introduction to Shell kami.

Mulai Menggunakan Claude Code Hooks

Sekarang Anda memahami apa itu hook, mari siapkan otomatisasi pertama Anda. Prosesnya melibatkan memilih event yang tepat untuk kebutuhan Anda, mengonfigurasi aturan sederhana, dan mengujinya dengan perintah dasar.

Memahami event hook

Claude Code menyediakan lebih dari 25 event hook. Tabel di bawah mencakup 10 yang paling sering Anda gunakan. Untuk daftar lengkap, lihat referensi hook resmi.

PreToolUse dan PostToolUse adalah event yang paling umum. PreToolUse berjalan sebelum Claude melakukan aksi seperti menulis file atau menjalankan perintah, sehingga sangat cocok untuk validasi atau memblokir operasi berbahaya. PostToolUse berjalan setelah Claude menyelesaikan aksi, yang cocok untuk tugas pembersihan seperti memformat kode atau menjalankan tes.

UserPromptSubmit terpicu ketika 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, seperti meminta izin untuk menjalankan perintah atau saat membutuhkan input Anda. PermissionRequest terpicu saat Claude Code menampilkan dialog izin, memungkinkan Anda menyetujui atau menolak permintaan secara otomatis atas nama pengguna.

Stop dan SubagentStop terpicu ketika Claude selesai merespons, yang berguna untuk pemeriksaan akhir atau pembuatan laporan. Perbedaannya adalah Stop aktif ketika Claude menyelesaikan respons keseluruhan, sedangkan SubagentStop saat pembantu yang dipanggil tool (“subagent”) menyelesaikan pekerjaannya.

Event lainnya, PreCompact, SessionStart, dan SessionEnd, menangani situasi spesifik siklus hidup. PreCompact berjalan tepat sebelum Claude memendekkan riwayat percakapan. ‘SessionStart’ aktif di awal sesi baru untuk menyiapkan default, dan SessionEnd terpicu saat sesi ditutup, memungkinkan pembersihan atau pelaporan akhir.

Nama event

Waktu pemicu

Kasus penggunaan utama

PreToolUse

Sebelum Claude melakukan aksi (mis., menulis file, menjalankan perintah).

Memvalidasi aksi atau memblokir operasi berbahaya.

PostToolUse

Setelah Claude menyelesaikan aksi.

Tugas pembersihan, pemformatan kode, atau menjalankan tes.

UserPromptSubmit

Saat Anda mengirim prompt, sebelum pemrosesan dimulai.

Menambahkan konteks ke percakapan atau memvalidasi persyaratan prompt.

Notification

Saat Claude mengirim peringatan (mis., meminta input atau izin).

Menangani peringatan sistem dan permintaan perhatian pengguna.

PermissionRequest

Saat dialog izin ditampilkan.

Menyetujui atau menolak permintaan secara otomatis atas nama pengguna.

Stop

Saat Claude menyelesaikan respons keseluruhan.

Pemeriksaan akhir atau membuat laporan untuk respons utama.

SubagentStop

Saat pembantu yang dipanggil tool ("subagent") menyelesaikan pekerjaannya.

Pemeriksaan akhir khusus untuk aktivitas subagent.

PreCompact

Tepat sebelum riwayat percakapan dipendekkan.

Mengelola pembersihan percakapan dan pelestarian konteks.

SessionStart

Di awal sesi baru.

Inisialisasi dan menyiapkan default.

SessionEnd

Saat sesi ditutup.

Pembersihan akhir atau pelaporan akhir sesi.

Memahami matcher

Matcher adalah filter yang menentukan aksi Claude Code mana yang memicu hook. Secara teknis, matcher adalah string yang ditafsirkan sebagai regular expression, sehingga Anda bisa menggunakan kecocokan tepat atau pola yang lebih fleksibel. 

Matcher yang paling relevan adalah yang sederhana seperti Write (aktif saat Claude menulis file) atau Edit (aktif saat mengedit konten), dan kombinasi seperti Edit|Write untuk mencakup beberapa aksi. 

Anda juga dapat menggunakan pola prefiks seperti Notebook.* untuk mencocokkan semua tool yang diawali dengan “Notebook.” Jika Anda ingin hook aktif pada setiap aksi, gunakan regex universal .*, string kosong ("") atau biarkan matcher kosong.

Karena matcher peka huruf besar/kecil dan hanya berlaku pada nama aksi, sebaiknya buat serinci mungkin. Saat Anda membutuhkan kontrol lebih halus (misalnya membatasi hook pada 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:

  1. Buka Claude Code dan ketik /hooks di antarmuka chat

  2. Pilih event pemicu Anda (pilih PostToolUse untuk contoh ini)

  3. Pilih "Add new hook" dari menu

  4. Tetapkan pola matcher Anda (masukkan Write untuk menargetkan penulisan file)

  5. Masukkan perintah Anda:

    • Mac: say "Task complete"

    • Windows: powershell -c [console]::beep()

    • Linux: spd-say "Task complete"

  6. 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 langsung, hook berada di ~/.claude/settings.json untuk pengaturan global, .claude/settings.json di dalam direktori proyek Anda (commit ke repo untuk hook berbagi tim), atau .claude/settings.local.json untuk hook pribadi yang diabaikan git secara default. 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 Anda. Sekarang setiap kali Claude menulis file, Anda akan mendengar notifikasi audio.

Menguji hook Anda

Sebelum melanjutkan, pastikan hook Anda benar-benar berfungsi:

  1. Minta Claude menulis file Python apa pun (mis., "Buat file hello.py yang mencetak hello world")

  2. Anda seharusnya mendengar notifikasi audio saat Claude menyelesaikan operasi penulisan

  3. Jika Anda tidak mendengar apa pun, periksa transkrip Claude Code dengan menekan Ctrl-O untuk melihat pesan kesalahan

  4. 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 Anda nanti saat membangun hook yang lebih kompleks. Jika Anda baru saja mengedit file pengaturan secara manual, mengubah matcher atau event, atau memasang tool baru yang ingin digunakan dalam perintah hook, akan membantu untuk membuka kembali /hooks atau memulai ulang Claude untuk memuat ulang konfigurasi.

Pola dasar ini (event, matcher, command) menjadi fondasi semua otomatisasi hook. Anda dapat mengembangkannya dengan menambahkan beberapa perintah untuk dijalankan secara bersamaan saat event yang sama terpicu. Misalnya, Anda mungkin ingin memutar suara dan membuat cadangan saat Claude menulis file. 

Anda juga dapat membuat matcher terpisah untuk tool berbeda dalam event yang sama, sehingga penulisan file memicu aksi yang berbeda dibanding pengeditan kode. Semua hook yang cocok dengan pola tool yang sama berjalan secara paralel. Jika Anda mengonfigurasi beberapa matcher untuk event yang sama, setiap hook akan berjalan saat matchernya terpicu.

Bekerja dengan Input Hook

Ketika Claude Code memicu hook, ia mengirimkan informasi tentang apa yang baru saja terjadi melalui standar input (stdin), aliran data yang mengalir langsung ke perintah Anda saat dijalankan. Data inilah yang membuat hook menjadi kuat, bukan 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 kustom.

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 kita terjemahkan tiap komponennya:

  • session_id: mengidentifikasi percakapan Anda saat ini

  • transcript_path: menunjuk ke riwayat percakapan

  • cwd: menunjukkan direktori kerja

  • hook_event_name: memberi tahu event mana yang aktif

Memiliki konteks ini memungkinkan hook Anda membuat keputusan cerdas: Anda dapat melacak percakapan mana yang memicu aksi, mengakses riwayat chat lengkap jika diperlukan, atau menjalankan perintah di direktori yang benar.

Variasi input berbasis event

Event tool seperti PreToolUse dan PostToolUse menyertakan detail tambahan tentang aksi tersebut, yang membuat hook 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 ditulis atau diedit, sementara content berisi teks persis yang akan ditulis tool. Setelah eksekusi, respons tool menggemakan filePath final (perhatikan camelCase) untuk mengonfirmasi file mana yang benar-benar disentuh, bersama dengan flag success yang menunjukkan apakah operasi selesai dengan benar. 

Informasi terperinci ini berarti hook Anda dapat merespons secara berbeda berdasarkan apa yang sebenarnya terjadi. Anda bisa memformat hanya file Python, mencadangkan hanya direktori penting, atau mengirim notifikasi hanya saat jenis file tertentu dimodifikasi.

Event seperti UserPromptSubmit lebih sederhana karena tidak melibatkan tool:

{
  "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 tool. Ini menjadikannya 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 lakukan, terutama selama sesi pengodean 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 membaca data JSON yang dikirim Claude Code dan mencatat prompt beserta konteks sesi. Ini membuat riwayat interaksi yang dapat dicari, yang sangat berguna ketika Anda perlu mengingat bagaimana Anda memecahkan 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 secara normal. Mekanisme kontrol ini yang mengubah hook dari alat pencatatan sederhana menjadi otomatisasi alur kerja yang kuat yang dapat membimbing perilaku Claude. Ini terjadi melalui tiga saluran: standar output (stdout), standar error (stderr), dan kode keluar.

Saluran output dan kode keluar

Standar output (stdout) berarti output normal. Misalnya, jika Anda mencetak sesuatu, itu masuk ke stdout. Untuk sebagian besar hook, ini yang muncul di transkrip Claude Code saat Anda menekan Ctrl-O, memberi Anda catatan tentang apa yang dilakukan otomatisasi tanpa mengacaukan percakapan utama.

Standar error (stderr) mengacu pada pesan kesalahan. Anda dapat menulis ke stderr menggunakan 

  • Python: print("message", file=sys.stderr) atau

  • Command line: echo "message" >&2

Perbedaan kuncinya adalah stderr dapat dikirim langsung ke Claude untuk diproses otomatis, sehingga ia dapat merespons masalah yang terdeteksi hook Anda.

Kode keluar memberi tahu Claude Code apa yang harus dilakukan selanjutnya:

  • Kode keluar 0: Sukses (menampilkan stdout ke pengguna)

  • Kode keluar 2: Kesalahan pemblokiran (mengirim stderr ke Claude)

  • Kode lain: Kesalahan non-pemblokiran (menampilkan stderr ke pengguna, tetapi tetap lanjut)

Sistem ini memberi Anda kontrol terperinci tentang kapan Claude harus berhenti, melanjutkan, atau mendapatkan umpan balik tentang apa yang ditemukan otomatisasi Anda. Mari kita lihat contoh untuk dua kode keluar yang paling penting.

Kode keluar 0: Operasi normal

Sebagian besar 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 command-line.

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 membuat jejak audit atau melacak perubahan apa yang dilakukan 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, memungkinkan ia 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

Ketika 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 sambil menjaga Claude mendapat informasi tentang 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 dimodifikasi, membuat keputusan tentang tingkat pentingnya 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 aksi 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.

Harap dicatat bahwa contoh ini menggunakan perintah say, yang tersedia di macOS. Di Linux, Anda dapat menggunakan notify-send, dan di Windows, perintah PowerShell, untuk mencapai notifikasi serupa.

Hal-hal yang Sering Menjebak dengan Claude Code Hooks

Beberapa hal yang sering menjebak kebanyakan orang selama minggu pertama mereka dengan hook:

Pernyataan echo pada profil shell merusak hook. Hook berjalan di shell non-interaktif yang memuat ~/.zshrc atau ~/.bashrc Anda. Jika profil Anda memiliki pernyataan echo tanpa syarat, itu akan menambahkan teks ke stdout hook dan merusak parsing JSON. Bungkus dengan pengecekan shell interaktif:

if [[ $- == *i* ]]; then
  echo "Welcome back"
fi

Hook Stop dapat berputar tanpa henti. Hook Stop yang keluar dengan kode 2 memaksa Claude untuk terus bekerja. Jika skrip Anda tidak memeriksa stop_hook_active dari input JSON dan keluar dengan bersih saat nilainya true, Anda akan berputar hingga timeout. Selalu sertakan pengaman keluar dini.

Matcher peka huruf besar/kecil. bash tidak cocok dengan Bash. Gunakan nama tool persis seperti yang muncul di Claude Code.

Output dibatasi 10.000 karakter. Jika hook Anda menghasilkan lebih dari itu, output akan terpotong sebelum dimasukkan ke konteks Claude. Jaga stdout tetap ringkas dan tampilkan hanya apa yang diperlukan model untuk bertindak.

Kebingungan antara hook tingkat tim dan pribadi. Hook di .claude/settings.json dibagikan dengan tim (commit ke repo). Untuk hook pribadi yang tidak ingin Anda bagikan, gunakan .claude/settings.local.json, yang secara default diabaikan oleh git.

Hook vs. skill: kapan menggunakan yang mana

Hook dan Claude Skills memiliki tujuan berbeda dan paling baik digunakan bersama. Skill adalah file markdown yang mengajarkan Claude cara melakukan sesuatu (prosedur, konvensi, template). Hook adalah perintah shell yang menegakkan aturan secara deterministik, terlepas dari apa yang diputuskan Claude.

Perbedaannya penting: skill adalah saran yang dapat diabaikan model saat tertekan; hook selalu aktif. Tulis skill untuk mendokumentasikan prosedur migrasi tim Anda. Tulis hook PostToolUse untuk menjalankan linter migrasi pada setiap file .sql yang ditulis Claude. Skill membuat Claude kompeten; hook membuat Claude akuntabel.

Kebutuhan

Gunakan skill

Gunakan hook

Pengetahuan prosedural yang dimuat Claude saat relevan

Ya

Tidak

Penegakan ketat yang tidak dapat dilewati

Tidak

Ya

Berjalan deterministik setiap saat

Tidak

Ya

Bertahan menghadapi model yang berperilaku buruk

Tidak

Ya

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 adaptasi untuk proyek Anda sendiri.

Hal hebatnya, Anda sebenarnya tidak harus membangun hook ini secara manual. Anda cukup memberi Claude Code salah satu ide prompt di bawah, bersama dengan referensi Hooks dalam dokumentasinya, dan ia akan menghasilkan kode dan JSON yang relevan untuk konfigurasi.

Setiap pola ini dapat disesuaikan untuk tool dan alur kerja spesifik Anda. Mulailah dengan yang menyelesaikan frustrasi harian terbesar Anda, lalu kembangkan otomatisasi saat Anda terbiasa dengan pengembangan hook.

Hook lanjutan untuk keamanan dan kepatuhan

Hook sangat baik untuk menegakkan aturan keamanan dan standar kepatuhan. Berikut empat kasus penggunaan.

Pemindai kunci API

  • Masalah: Tanpa sengaja melakukan commit rahasia ke version control

  • Pemicu: Sebelum menulis file apa pun

  • Solusi: Memindai konten file untuk API key, 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 setiap kecocokan mencurigakan, lakukan verifikasi lokal dan jangan pernah mengirim rahasia mentah ke luar. 

Kirim hanya cuplikan bertopeng (mis., sisakan 4 karakter prefiks/sufiks) atau hash ke Anthropic API untuk menganalisis string mencurigakan dan menentukan apakah itu benar-benar rahasia atau sekadar nama variabel. Keluar dengan kode 2 dan berikan umpan balik kepada Claude tentang rahasia yang terdeteksi dan alternatif yang lebih aman.”

Penegak header lisensi

  • Masalah: Proyek open source kehilangan header lisensi wajib pada file baru

  • Pemicu: Sebelum menulis file kode sumber

  • Solusi: Memvalidasi bahwa file .py, .js, .java baru berisi teks lisensi yang benar

“Parse input hook untuk mendapatkan konten file dan periksa apakah 10 baris pertama mengandung teks lisensi menggunakan pencocokan string. Untuk validasi yang lebih canggih, kirim header file ke Claude melalui Anthropic API 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 Claude template lisensi yang benar untuk ditambahkan.”

Penjaga file produksi

  • Masalah: Tanpa sengaja memodifikasi file konfigurasi sistem yang kritis

  • Pemicu: Sebelum mengedit file di direktori sensitif

  • Solusi: Memblokir perubahan pada /etc/, nginx.conf, database.yml, dan konfigurasi penting lain

“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

“Parse input hook untuk mendapatkan path file dan periksa apakah itu file gambar menggunakan pencocokan ekstensi. Jalankan tool kompresi seperti imageoptim atau panggil TinyPNG API 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

Alur kerja Git dan dokumentasi adalah area lain di mana hook juga sangat berguna. Mari lihat beberapa ide.

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 kepada Claude yang menjelaskan kebijakan perlindungan branch. Untuk aturan penamaan branch yang kompleks, gunakan API Claude untuk menganalisis nama branch dan menentukan apakah mereka 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 men-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 melakukan commit perubahan secara otomatis. Sertakan nama file dan jenis perubahan dalam prompt API agar 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 tool 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 tool pembuatan dokumentasi yang sesuai (jsdoc, sphinx-build, dll.) dan commit dokumentasi yang diperbarui secara otomatis.

Hook lanjutan untuk kolaborasi dan integrasi alur kerja

Terakhir, hook dapat membantu menjaga semua anggota tim Anda tetap terbarui.

Integrasi Slack

  • Masalah: Tim tidak menyadari perubahan penting pada basis kode bersama

  • Pemicu: Saat notifikasi dikirim untuk operasi signifikan

  • Solusi: Memposting pesan terformat ke kanal 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 yang mudah dibaca manusia tentang apa yang berubah 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 event tertentu terjadi (perubahan konfigurasi, file deployment dimodifikasi)

  • 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 data payload 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 mengetahui aktivitas pemeliharaan atau deployment

  • Pemicu: Saat file deployment atau infrastruktur dimodifikasi

  • Solusi: Memperbarui halaman status layanan dengan notifikasi pemeliharaan

“Parse 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 dan estimasi durasi yang sesuai.”

Pemberi tahu status tim

  • Masalah: Konflik saat beberapa pengembang mengerjakan fitur yang sama tanpa saling mengetahui

  • Pemicu: Saat memulai sesi Claude Code baru

  • Solusi: Memberi tahu kanal 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 sedang dilakukan. Kirim pesan terformat ke kanal komunikasi tim dengan nama Anda, nama proyek, dan area fokus. Sertakan perkiraan durasi pekerjaan dan undang anggota tim untuk berkoordinasi jika mereka mengerjakan fitur terkait.”

Pemikiran Akhir

Claude Code Hooks mengubah asisten pengodean AI yang tak 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 menggerakkan otomatisasi cerdas, serta mengontrol perilaku Claude melalui kode keluar dan output terstruktur. 

Pola praktis yang kami 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 kontrol penuh atas asisten AI Anda. Sekarang setelah Anda memahami dasarnya, Anda dapat membangun otomatisasi yang sesuai dengan kebutuhan alur kerja spesifik tim Anda. 

Untuk mempelajari lebih lanjut tentang bekerja dengan alat AI, lihat kursus Understanding Prompt Engineering dari DataCamp, yang membahas strategi prompting yang bekerja langsung dengan pengembangan hook. Untuk keterampilan pengodean AI yang lebih luas, coba kursus Intermediate ChatGPT kami untuk mengembangkan keterampilan yang membuat asisten AI menjadi mitra yang 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 saat event tertentu terjadi selama sesi Claude Code Anda. Hook menyelesaikan masalah ketika Claude menulis kode yang baik tetapi melupakan langkah penting seperti pemformatan, menjalankan tes, atau pemeriksaan 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 tes setelah modifikasi, atau memblokir perubahan berbahaya pada file sensitif. Hook memantau sesi Anda, mendeteksi event 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 event (seperti PostToolUse), pola matcher (seperti Write untuk penulisan file), dan perintah Anda (seperti python -m black .). Atau, Anda bisa 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 aksi (seperti menulis atau mengedit file), sehingga 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 aksi, sehingga sempurna untuk tugas pembersihan seperti memformat kode, menjalankan tes, atau mencatat apa yang terjadi. Gunakan PreToolUse saat Anda membutuhkan kontrol preventif dan PostToolUse saat Anda memerlukan otomatisasi reaktif.

Bagaimana cara mengirim informasi tentang tindakan Claude ke skrip hook saya?

Claude Code mengirimkan informasi terperinci melalui standar 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 ke direktori tertentu dengan memeriksa path file.

Apa fungsi kode keluar 2, dan kapan saya harus menggunakannya?

Kode keluar 2 memberi tahu Claude Code bahwa suatu operasi harus diblokir, dan mengirim pesan kesalahan Anda (yang 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 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.

Apakah hook Claude Code bisa menyebabkan loop tak berujung?

Ya, hook Stop dapat berputar tanpa henti jika tidak ditangani dengan hati-hati. Hook Stop yang keluar dengan kode 2 memaksa Claude untuk terus bekerja. Jika skrip Anda tidak memeriksa stop_hook_active dari JSON input hook dan keluar dengan bersih saat nilainya true, Claude akan merespons, memicu hook Stop lagi, diblokir lagi, dan mengulang hingga sesi habis waktu. Selalu sertakan pengaman di awal skrip hook Stop yang memeriksa field ini dan segera mengembalikan kode keluar 0 saat sudah aktif.

Jenis hook apa saja yang didukung Claude Code selain perintah shell?

Claude Code mendukung lima jenis hook: command (perintah shell, yang paling umum), http (POST ke URL untuk integrasi webhook), mcp_tool (memanggil tool pada server MCP yang terhubung), prompt (mengirim prompt ke model Claude untuk evaluasi satu kali), dan agent (memunculkan subagent yang dapat menggunakan tool untuk memverifikasi kondisi). Untuk sebagian besar kasus penggunaan, hook command sudah mencakup kebutuhan Anda. Lihat referensi hook resmi untuk detail tiap jenis.


Bex Tuychiev's photo
Author
Bex Tuychiev
LinkedIn

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. 

Topik

Pelajari Pengodean Berbantuan AI bersama DataCamp!

Kursus

Pengembangan Kode dengan Bantuan AI untuk Developer

1 Hr 30 Min
7.7K
Tingkatkan kemampuan pemrograman Anda dengan AI—bimbing asisten pemrograman Anda untuk menulis, menguji, dan mendokumentasikan kode secara efektif.
Lihat DetailRight Arrow
Mulai Kursus
Lihat Lebih BanyakRight Arrow
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

Lihat Lebih BanyakLihat Lebih Banyak