Modül 4 · Customizing Claude Code · ⏱ 12 dakika

Hooks

Hooks

Bu derste neler öğreneceksin

  • Hooks'un deterministik (her zaman çalışan) yapısını ve prompt talimatlarından farkını kavramak
  • Beş hook event'ini öğrenmek (PreToolUse, PostToolUse, UserPromptSubmit, Stop, Notification)
  • PreToolUse ile tehlikeli komutları bloklamak ve PostToolUse ile auto-formatting kurmak
  • Takımla paylaşılabilir hook'ları repo'ya commit etmek

Hooks, Claude Code’un yaşam döngüsünün belirli noktalarında komut çalıştırmana izin verir. Hooks’u bu kursta gördüğümüz diğer her şeyden ayıran şey şu: hook’lar deterministiktirher zaman çalışırlar.

Ders videosu

Neden hook?

CLAUDE.md’nde “her dosya düzenlemesinden sonra Prettier çalıştır” diyebilirsin. Çoğu zaman çalıştıracaktır. Ama bazen çalıştırmaz. Bir hook bunun her seferinde, istisnasız olmasını sağlar.

Yaygın kullanım senaryoları

  • Auto-formatting — dosya düzenlendikten sonra
  • Logging — uyumluluk için tüm çalıştırılan komutları loglamak
  • Tehlikeli operasyonları bloklamak — örneğin production dosyalarını değiştirmek
  • Bildirim gönderme — Claude bir görevi bitirdiğinde sana haber vermek

Nasıl çalışır?

Hook’lar settings.json dosyanda yapılandırılır. Şu üçünü seçersin:

  1. Bir event (olay)
  2. (İsteğe bağlı) Hangi tool’lara uygulanacağını belirten bir matcher
  3. Çalıştırılacak bir command (komut)

Mevcut event’ler

EventNe zaman çalışır
PreToolUseBir tool call çalışmadan önce
PostToolUseBir tool call tamamlandıktan sonra
UserPromptSubmitBir prompt gönderdiğinde, Claude işlemeden önce
StopClaude cevap vermeyi bitirdiğinde
NotificationClaude bir bildirim gönderdiğinde

Hook’ları Claude Code içinden /hooks komutuyla veya doğrudan settings.json’ı düzenleyerek yapılandırırsın.

Pratik örnek: dosya düzenlemesinden sonra auto-format

En yaygın hook:

  • Event: PostToolUse
  • Matcher: "Edit|MultiEdit|Write" — Claude bir dosyayı her değiştirdiğinde tetiklenir
  • Command: Dosya uzantısını kontrol eder ve uygun formatter’ı çalıştırır
    • TypeScript için Prettier
    • Go için gofmt
    • Projenin kullandığı her ne ise

PreToolUse ile bloklamak

PreToolUse hook’ları, tool call’lar çalışmadan önce onları bloklayabilir. Hook’un, tool adını ve input’unu JSON olarak stdin üzerinden alır. Exit code davranışı belirler:

Exit codeDavranış
0Normal devam et
2Aksiyonu blokla. stderr mesajı Claude’a feedback olarak verilir; böylece neden bloklandığını anlar ve yaklaşımını düzenleyebilir.
DiğerSana gösterilen ama hiçbir şeyi durdurmayan non-blocking error

Sert kuralları zorunlu kılmanın yolu

  • Production config dizinine yazmayı blokla
  • rm -rf içeren bash komutlarını blokla
  • main branch’ine commit’i blokla
  • Takımının “önerilen değil, zorunlu” olmasını istediği her şey

Hook’ları takımla paylaşmak

.claude/settings.json’da yapılandırılan hook’lar project-level’dır ve repo’na commit edilebilir. Bu, tüm ekibinin aynı hook’ları otomatik almasını sağlar.

Komutlarda projende saklanan script’lere referans verirken CLAUDE_PROJECT_DIR environment variable’ını kullan — Claude’un mevcut çalışma dizini ne olursa olsun çalışır.

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|MultiEdit|Write",
        "hooks": [
          { "type": "command", "command": "$CLAUDE_PROJECT_DIR/.claude/scripts/format.sh" }
        ]
      }
    ]
  }
}

Özet

Hook’lar Claude Code davranışı üzerinde deterministik kontrol verir.

  • PostToolUse — auto-formatting ve logging için
  • PreToolUse — tehlikeli operasyonları bloklamak için
  • /hooks veya settings.json ile yapılandır
  • Repo’na commit et, takım da otomatik alsın

Tek cümlelik kural: Bir şey her seferinde aksamadan olması gerekiyorsa prompt’a koyma — hook’a koy.

Sırada ne var?

Son aşamadayız! Bir sonraki adım kursun sonu ve Anthropic’in resmi sertifikası — bilgini test edip LinkedIn’e ekleyebileceksin.