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 deterministiktir — her 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:
- Bir event (olay)
- (İsteğe bağlı) Hangi tool’lara uygulanacağını belirten bir matcher
- Çalıştırılacak bir command (komut)
Mevcut event’ler
| Event | Ne zaman çalışır |
|---|---|
| PreToolUse | Bir tool call çalışmadan önce |
| PostToolUse | Bir tool call tamamlandıktan sonra |
| UserPromptSubmit | Bir prompt gönderdiğinde, Claude işlemeden önce |
| Stop | Claude cevap vermeyi bitirdiğinde |
| Notification | Claude 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 code | Davranış |
|---|---|
| 0 | Normal devam et |
| 2 | Aksiyonu blokla. stderr mesajı Claude’a feedback olarak verilir; böylece neden bloklandığını anlar ve yaklaşımını düzenleyebilir. |
| Diğer | Sana gösterilen ama hiçbir şeyi durdurmayan non-blocking error |
Sert kuralları zorunlu kılmanın yolu
- Production config dizinine yazmayı blokla
rm -rfiçeren bash komutlarını bloklamainbranch’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çinPreToolUse— tehlikeli operasyonları bloklamak için/hooksveyasettings.jsonile 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.