Claude Code hooks adalah perintah shell yang didefinisikan pengguna yang dieksekusi pada berbagai titik dalam siklus hidup Claude Code. Hooks menyediakan kontrol deterministik atas perilaku Claude Code, memastikan tindakan tertentu selalu terjadi daripada mengandalkan LLM untuk memilih menjalankannya.

Untuk dokumentasi referensi tentang hooks, lihat Referensi Hooks.

Contoh kasus penggunaan untuk hooks meliputi:

  • Notifikasi: Sesuaikan cara Anda mendapatkan notifikasi ketika Claude Code menunggu input atau izin Anda untuk menjalankan sesuatu.
  • Pemformatan otomatis: Jalankan prettier pada file .ts, gofmt pada file .go, dll. setelah setiap pengeditan file.
  • Logging: Lacak dan hitung semua perintah yang dieksekusi untuk kepatuhan atau debugging.
  • Umpan balik: Berikan umpan balik otomatis ketika Claude Code menghasilkan kode yang tidak mengikuti konvensi codebase Anda.
  • Izin kustom: Blokir modifikasi pada file produksi atau direktori sensitif.

Dengan mengkodekan aturan-aturan ini sebagai hooks daripada instruksi prompting, Anda mengubah saran menjadi kode tingkat aplikasi yang dieksekusi setiap kali diharapkan untuk berjalan.

Anda harus mempertimbangkan implikasi keamanan dari hooks saat menambahkannya, karena hooks berjalan secara otomatis selama loop agen dengan kredensial lingkungan Anda saat ini. Misalnya, kode hooks yang berbahaya dapat mengeksfiltrasi data Anda. Selalu tinjau implementasi hooks Anda sebelum mendaftarkannya.

Untuk praktik keamanan terbaik lengkap, lihat Pertimbangan Keamanan dalam dokumentasi referensi hooks.

Gambaran Umum Event Hook

Claude Code menyediakan beberapa event hook yang berjalan pada titik-titik berbeda dalam alur kerja:

  • PreToolUse: Berjalan sebelum panggilan tool (dapat memblokir mereka)
  • PostToolUse: Berjalan setelah panggilan tool selesai
  • Notification: Berjalan ketika Claude Code mengirim notifikasi
  • Stop: Berjalan ketika Claude Code selesai merespons
  • SubagentStop: Berjalan ketika tugas subagen selesai

Setiap event menerima data yang berbeda dan dapat mengontrol perilaku Claude dengan cara yang berbeda.

Quickstart

Dalam quickstart ini, Anda akan menambahkan hook yang mencatat perintah shell yang dijalankan Claude Code.

Prasyarat

Instal jq untuk pemrosesan JSON di command line.

Langkah 1: Buka konfigurasi hooks

Jalankan slash command /hooks dan pilih event hook PreToolUse.

Hooks PreToolUse berjalan sebelum panggilan tool dan dapat memblokir mereka sambil memberikan umpan balik Claude tentang apa yang harus dilakukan secara berbeda.

Langkah 2: Tambahkan matcher

Pilih + Add new matcher… untuk menjalankan hook Anda hanya pada panggilan tool Bash.

Ketik Bash untuk matcher.

Gunakan string kosong "" untuk mencocokkan semua tool. Karakter * bukan matcher yang valid dengan sendirinya.

Langkah 3: Tambahkan hook

Pilih + Add new hook… dan masukkan perintah ini:

jq -r '"\(.tool_input.command) - \(.tool_input.description // "No description")"' >> ~/.claude/bash-command-log.txt

Langkah 4: Simpan konfigurasi Anda

Untuk lokasi penyimpanan, pilih User settings karena Anda mencatat ke direktori home Anda. Hook ini kemudian akan berlaku untuk semua proyek, bukan hanya proyek Anda saat ini.

Kemudian tekan Esc sampai Anda kembali ke REPL. Hook Anda sekarang terdaftar!

Langkah 5: Verifikasi hook Anda

Jalankan /hooks lagi atau periksa ~/.claude/settings.json untuk melihat konfigurasi Anda:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "jq -r '\"\\(.tool_input.command) - \\(.tool_input.description // \"No description\")\"' >> ~/.claude/bash-command-log.txt"
          }
        ]
      }
    ]
  }
}

Langkah 6: Uji hook Anda

Minta Claude untuk menjalankan perintah sederhana seperti ls dan periksa file log Anda:

cat ~/.claude/bash-command-log.txt

Anda harus melihat entri seperti:

ls - Lists files and directories

Contoh Lainnya

Untuk implementasi contoh lengkap, lihat contoh validator perintah bash dalam codebase publik kami.

Hook Pemformatan Kode

Secara otomatis memformat file TypeScript setelah pengeditan:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|MultiEdit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "if echo '$(.tool_input.file_path)' | grep -q '\\.ts$'; then npx prettier --write '$(.tool_input.file_path)'; fi"
          }
        ]
      }
    ]
  }
}

Hook Notifikasi Kustom

Dapatkan notifikasi desktop ketika Claude membutuhkan input:

{
  "hooks": {
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "notify-send 'Claude Code' 'Awaiting your input'"
          }
        ]
      }
    ]
  }
}

Hook Perlindungan File

Blokir pengeditan pada file sensitif:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Edit|MultiEdit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "python3 -c \"import json, sys; data=json.load(sys.stdin); path=data.get('tool_input',{}).get('file_path',''); sys.exit(2 if any(p in path for p in ['.env', 'package-lock.json', '.git/']) else 0)\""
          }
        ]
      }
    ]
  }
}

Pelajari lebih lanjut

  • Untuk dokumentasi referensi tentang hooks, lihat Referensi Hooks.
  • Untuk praktik keamanan terbaik yang komprehensif dan panduan keselamatan, lihat Pertimbangan Keamanan dalam dokumentasi referensi hooks.
  • Untuk langkah-langkah troubleshooting dan teknik debugging, lihat Debugging dalam dokumentasi referensi hooks.