Hook dan otomatisasi
Hubungkan hook SessionStart untuk memuat konteks secara otomatis. Gunakan PreToolUse untuk memblokir perintah berbahaya. Jalankan Claude secara berkala dengan gerbang persetujuan.
Hook adalah perintah yang dijalankan Claude Code pada peristiwa siklus hidup tertentu. Konfigurasikan sekali di ~/.claude/settings.json; mereka akan aktif secara otomatis. Hook memberlakukan disiplin yang mungkin Anda lupakan: memuat STATE.md setiap sesi, memeriksa file .env yang di-stage sebelum melakukan commit. Biaya penyiapan adalah 10 menit. Hasilnya permanen.
SessionStart aktif saat sesi dibuka; apa pun yang dicetaknya menjadi konteks sebelum pesan pertama Anda:
{
"hooks": {
"SessionStart": [
{
"command": "cat ~/notes/STATE.md ~/notes/MEMORY.md 2>/dev/null || true"
}
]
}
}|| true itu penting: jangan mengganggu pembukaan sesi jika file hilang. Pertahankan hook di bawah 50ms dan jangan melakukan panggilan jaringan saat sesi dibuka. Butuh data API baru? Jalankan cron yang menulis file lokal; muat file di hook.
Empat peristiwa hook lainnya:
Stop: aktif saat sesi berakhir. Gunakan untuk pengingat: "Sebelum Anda menutup: perbarui STATE.md."
PreToolUse: aktif sebelum Claude memanggil alat. Lapisan penegakan keamanan Anda: blokir perintah berbahaya, catat panggilan untuk jejak audit. Exit 0 memungkinkan panggilan; exit 2 memblokirnya.
PostToolUse: aktif setelah alat kembali. Jalankan linter setelah penulisan file, periksa kebijakan RLS setelah migrasi SQL.
UserPromptSubmit: aktif saat Anda menekan enter. Suntikkan konteks atau terapkan pertahanan injeksi prompt untuk konten eksternal.
Hook PreToolUse yang memblokir setiap panggilan Bash yang berisi rm -rf:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"command": "if echo \"$CLAUDE_TOOL_INPUT\" | grep -q 'rm -rf'; then echo 'DIBLOKIR: rm -rf tidak diizinkan' >&2; exit 2; fi"
}
]
}
}Bidang matcher menargetkan alat tertentu. Tanpa itu, hook akan aktif pada setiap panggilan alat. Gunakan matcher untuk menjaga hook tetap cepat dan terarah.
Saat hook tidak aktif, periksa secara berurutan:
Sintaks: JSON valid? Jalankan cat ~/.claude/settings.json | python3 -m json.tool.
Jalur file: uji perintah hook secara manual di terminal Anda.
Kode keluar: apakah || true hilang?
Kecepatan: lebih dari 3 detik? Pindahkan bagian yang lambat ke cron.
Dua masalah produksi. Tetapkan bidang timeout eksplisit pada setiap hook agar perilaku tetap dapat diprediksi. Dan hook berjalan di lingkungan yang terbatas, bukan shell lengkap Anda: jika hook membutuhkan variabel lingkungan (seperti token Slack), sumber .env Anda secara eksplisit dalam perintah hook. Ini adalah penyebab paling umum dari hook yang berfungsi di terminal Anda tetapi gagal secara diam-diam di Claude Code.
Claude Code yang digerakkan oleh Cron. Agen yang sama dapat berjalan sesuai jadwal melalui claude --headless: ringkasan pagi pukul 7 pagi yang diposting ke Slack, pemantauan media sosial setiap 4 jam, pemeriksaan kesehatan deployment setiap 30 menit.
Pola kritis: gerbang persetujuan. Cron membuat draf, Anda meninjau, sistem mengirim. Agen otonom yang mengirim pesan keluar tanpa peninjauan pada akhirnya akan mengirim sesuatu yang salah: templat yang salah, audiens yang salah, waktu yang salah. Arsitektur: agen menemukan dan membuat draf, manusia meninjau dan merilis. Implementasi: agen menulis draf ke saluran Slack; tidak ada yang keluar sampai manusia menyetujui. Ini skalabel untuk puluhan agen tanpa ada yang menjadi nakal.
Bangun sistem hook secara bertahap:
Fase 1 (minggu 1-2), muat hook: SessionStart memuat STATE.md dan MEMORY.md; Stop mengingatkan Anda untuk memperbarui.
Fase 2 (minggu 3-4), hook penjaga: PreToolUse memblokir secara keras untuk perintah yang tidak dapat dibatalkan (force-push ke main, DROP TABLE, rm -rf).
Fase 3 (bulan 2+), hook audit: PostToolUse memeriksa apa yang sebenarnya ditulis: migrasi SQL yang kehilangan kebijakan RLS, rute API baru yang kehilangan pembatasan laju, rahasia di file apa pun yang ditulis.
PostToolUse lebih kuat daripada PreToolUse untuk audit karena membaca konten file yang ditulis, kebenaran dasar, bukan hanya apa yang dimaksud Claude. Bangun hook di sekitar mode kegagalan Anda yang sebenarnya: dua hook yang memecahkan masalah nyata mengalahkan sepuluh hook teoretis.
SessionStart memuat konteks, Stop mengingatkan, PreToolUse memblokir perintah berbahaya (exit 2), PostToolUse mengaudit apa yang ditulis, dan cron ditambah gerbang persetujuan mengubah Claude menjadi sistem terjadwal dengan manusia di tombol kirim. Mulai dengan satu hook: cat ~/notes/STATE.md 2>/dev/null || true di SessionStart. Tambahkan fase berikutnya setiap bulan.