20 poin oleh GN⁺ 2025-07-02 | 4 komentar | Bagikan ke WhatsApp
  • 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

 
shakespeare 2025-07-02

Tolong buatkan versi Windows juga :(

 
nalbam 2025-07-06

Gunakan WSL.

 
slowmo 2025-07-08

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.

 
GN⁺ 2025-07-02
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

    • Secara pribadi saya memakai ekstensi VS Code bernama cline.bot, bukan Claude Code
      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

    • Sebenarnya tingkat seperti ini sudah bisa diimplementasikan di .Claude/settings.json
  • 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

    • Misalnya, "Jangan pakai early return di fungsi 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

    • Sebagai orang yang tidak memakai Cursor, saya masih penasaran apakah masih ada alasan memakai itu
  • 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