- Claude Code'a kullanıcı tanımlı hook özelliği eklendi. Böylece LLM'nin seçimlerine bağlı kalmadan, uygulamanın davranışı daha kesin ve tekrarlanabilir biçimde kontrol edilebiliyor
- Bildirim özelleştirme, kodun otomatik biçimlendirilmesi ve komut günlüğü takibi gibi çeşitli otomasyonlar mümkün
- Komut çalıştırma öncesi/sonrası, bildirim oluştuğunda ve yanıt tamamlandığında devreye giriyor; ayar dosyaları üzerinden proje, kullanıcı ve kurumsal düzeyde yönetilebiliyor
- Ayar dosyası yapısı ve matcher eşleştirme yöntemi sayesinde, belirli araç çağrısı anlarında yalnızca belirli hook'lar çalıştırılabiliyor
- Girdi JSON formatında iletiliyor ve çıktı exit code veya JSON ile sonuçlar ve geri bildirim kontrol ediliyor
- Hook'lar shell komutlarını kullanıcının tam yetkileriyle otomatik çalıştırdığı için, güvenlik ve emniyet konusunda dikkat gerekiyor
Giriş
- Claude Code hook'ları, kod çalıştırma yaşam döngüsünün her aşamasında otomatik çalışan özelleştirilmiş shell komutlarıdır
- Bu sayede, LLM'nin isteğe bağlı olarak çalıştırdığı akışlar yerine her seferinde tutarlı otomasyon sağlanabiliyor
-
Başlıca kullanım örnekleri
- Bildirimler: Girdi beklenirken kullanıcıya özelleştirilmiş bildirim gönderme
- Otomatik biçimlendirme: Dosya düzenlendikten sonra
prettier veya gofmt otomatik çalıştırma
- Günlükleme: Çalıştırılan komutları kaydedip toplulaştırarak izleme veya hata ayıklamada kullanma
- Geri bildirim: Kod tabanı kurallarına uymayan kod üretildiğinde otomatik geri bildirim verme
- Özel izinler: Hassas dizinlerde veya production dosyalarında değişikliği engelleme
- Prompt yerine sistem kodu olarak çalıştığı için, her seferinde deterministik olarak yürütülür → otomasyonun güvenilirliği artar
- Hook'lar kullanıcının tam yetkileriyle shell komutlarını doğrudan çalıştırdığı için, güvenlik doğrulaması gerektirir.
Yapılandırma örneği
- Örnek: Claude'un her Bash komutu çalıştırılmadan önce log bırakması için hook kaydetme
1. /hooks komutuyla hook ayar menüsüne girin, PreToolUse olayını seçin
2. Bash matcher'ını ekleyin (yalnızca Bash komutlarına uygulanır)
3. Hook komutunu kaydedin ve saklayın (User settings konumu seçilirse tüm projelere uygulanır)
4. /hooks ile ayarları doğrulayabilir veya ~/.claude/settings.json dosyasını doğrudan kontrol edebilirsiniz
Ayar yapısı
- Hook'lar matcher ölçütüne göre gruplanır ve her matcher için bir dizi halinde birden çok hook tanımlanabilir
- Örnek: tekil string (tam eşleşme), regex veya boş bırakılırsa tüm olaylara uygulanır
- Ayar dosyası türleri
~/.claude/settings.json: kullanıcı genel ayarları
.claude/settings.json: proje ayarları
.claude/settings.local.json: yerel (paylaşılmayan) ayarlar
- kurumsal politika ayarları
Başlıca hook olayları
- PreToolUse: Araç çağrısından önce çalışır, gerekirse çalıştırmayı engelleyebilir (başlıca matcher'lar: Bash, Write, Edit, Grep vb.)
- PostToolUse: Araç çalıştıktan hemen sonra, aynı matcher desteğiyle
- Notification: Bildirim gönderildiğinde çalışır
- Stop: Yanıt tamamlandıktan sonra çalışır
Matcher örnekleri
Task: ajan görevi
Bash: shell komutu
Glob: dosya deseni eşleştirme
Grep: içerik arama
Read: dosya okuma
Edit, MultiEdit: dosya düzenleme
Write: dosya yazma
WebFetch, WebSearch: web işleri
Girdi ve çıktı biçimi
- Girdi: stdin üzerinden JSON iletilir (oturum bilgisi ve olaya özel veriler dahil)
- Örnek: PreToolUse içinde
tool_input, PostToolUse içinde buna ek olarak tool_response bulunur
- Çıktı:
- exit code 0: normal çalışma, stdout kullanıcıya gösterilir
- exit code 2: engelleme, stderr Claude'a geri bildirim olarak iletilir (PreToolUse içinde araç çalıştırması engellenir)
- Diğer kodlar: hata, yalnızca stderr kullanıcıya gösterilir
- Gelişmiş kontrol: stdout içinde JSON döndürülürse,
"continue": false veya "decision": "block" gibi ayrıntılı akış kontrolü mümkündür
MCP araçlarıyla entegrasyon
- Model Context Protocol (MCP) tabanlı araçlar da desteklenir; özel adlandırma deseni (
mcp____) üzerinden seçici olarak hedeflenebilir
Güvenlik önerileri
- Hook'lar sistemde keyfi komut çalıştırma riski taşıdığından, girdi doğrulama, yol kontrolü, hassas dosyaları hariç tutma ve mutlak yol kullanımı gibi güvenlik kuralları zorunludur
- Ayar değişiklikleri anında yansımaz; oturum başlangıcında alınan bir anlık görüntü kullanılır ve dış değişikliklerde uyarı gösterilir
Çalışma ortamı ve hata ayıklama
- Her hook en fazla 60 saniye sınırına sahiptir, paralel çalışır ve mevcut çalışma dizini ile ortamda çalışır
/hooks içinde ayar doğrulama, komutu doğrudan test etme ve exit code/çıktı kontrolü ile hata ayıklama yapılabilir
- Çalışma süreci ve sonuçlar transcript modunda (Ctrl-R) görüntülenebilir
4 yorum
Lütfen Windows sürümünü de yapın :(
WSL kullanın
Bilgisayarımın donanımı yetersiz olduğu için mi bilmiyorum ama Windows WSL üzerinde Claude Code kullanarak yaptığım bazı işler (ör. proje build alma, yerel web sunucusu çalıştırma vb.) fazlasıyla yavaş.
Söz konusu işleri sadece manuel olarak WSL dışında çalıştırmanın bir yolu da var ama hem uğraştırıcı hem de kısıtları olduğu için, Gemini CLI çıktıktan sonra Windows'ta Claude Code yerine ağırlıklı olarak Gemini CLI kullanıyorum.
Hacker News görüşü
Claude Code Opus 4'ün dosya sonuna satır sonu eklememe alışkanlığı yüzünden hayal kırıklığı yaşadım
Yeni hook'ları test ederken
claude'u yeniden başlatmak gerektiği için, oturum içinde düzenlemeye devam etmeyi sağlayan bir script kullanmak çok daha verimliydiBu script C dosyaları ve shell script'lerine formatter uyguluyor, diğer dosyalarda ise sadece eksik satır sonunu düzeltiyor
Claude gibi yapay zekalar problemi uygun şekilde parçalara ayırmakta zayıf kalabiliyor ve bazen işleri garip biçimlerde yapmaya çalışıyor; bu yüzden yukarıdaki hook örneğinde olduğu gibi JSON dosyasını diske kaydedip yalnızca yolu çıkararak tekrar kaydetmek ve o yolu
save-hook.sh'ye vermek şeklinde birkaç kez düzeltme yaptımİstediğimi 10 dakikada yaptım ama tek seferde büyük adımlar attırmaya çalışırken boşa giden zaman daha fazlaydı
AI'ın geliştiricilerin yerini alacağına dair çok şey duyuyoruz ama bu tür hook'ları kimin kuracağı ve yeni özellikleri kimin önereceği hâlâ insanların işi
Araçlarla ilgili bu tür işler, AI kendi başına bu fikri düşünüp başka AI'lara uygulayacak kadar gelişene kadar varlığını sürdürecek
Marangozluk benzetmesi yaparsak, şu an el aletlerinden elektrikli aletlere geçiş noktasındayız
Temelleri bilen kişi aracı iyi kullanabilir ama artık elde ince işçilik yapmak yerine table saw ile hızlı çalışılan bir aşamadayız; verim daha yüksek ama aynı zamanda daha tehlikeli de olabilir
Biçerdöver gibi tarım makinelerinin çıkıp tarım işlerini ortadan kaldıracağı iddiasına benziyor
Herkesin basitçe makine operatörüne dönüşeceğini söylemek ne kadar mantıklı?
İster otomasyon araçları olsun ister tarım ister AI, değer sadece basit bir dönüşümden ibaret değil
Ünlü "Dünya kaplumbağanın sırtında" hikâyesindeki gibi, AI ortaya çıktıktan sonra "peki o AI'ı kim yönetecek?" tartışmasını sonsuza kadar sürdürebilirsiniz
Hatta Claude Code'a kendi
CLAUDE.mddosyasını güncelletme örnekleri bile var; yani kendi hook'larını da değiştirtmek tamamen imkânsız değilAma Jurassic Park'taki gibi, "yapabilir miyiz"den çok "yapmalı mıyız" sorusunun kolayca gözden kaçması ilginç
AI'ın yazılım işlerini azaltacağı görüşü de, o zaman hook'ları kimin kuracağı sorusu da doğru
Vurgulanması gereken şey, teknolojik ilerlemenin sadece iş sayısının artması ya da azalması meselesine indirgenemeyeceği; işleri ortadan kaldırırken aynı anda yenilerini de yaratmasıdır
Açıkçası çoğu insan için bu tür işler geliştirme değil, daha çok bakım, DevOps benzeri işler
SaaS ürünlerinde de işlerin büyük kısmı kod yazmaktan çok operasyonla ilgili oluyor ve bu, HN kullanıcılarının düşündüğü klasik geliştirmeden farklı
Bu özelliğin gelmesi beni gerçekten heyecanlandırıyor
Hook'ların ajanların bağlam mühendisliği ve çalışma zamanı performansını doğrulamada önemli rol oynayacağını düşünüyorum
Kurumsal uyumluluk ya da davranış izleme gibi birçok duruma da genişletilebilir
Anthropic'in bir GitHub issue önerisinden yola çıkıp bunu doğrudan desteklemesi de etkileyici
İlgili issue bağlantısı
cline.botadlı VS Code eklentisini kullanıyorumBence bu tür bir özellik yakında tüm kodlama ajanlarının standart süper gücü olacak
Bu özelliği sevmemin nedeni,
CLAUDE.mdüzerinden dolambaçlı bir yol izlemeye gerek kalmadan doğrudan karmaşık komut çalıştırma kontrol kuralları yazabilmekÖrneğin,
docker compose exec django python manage.py testgibi bir komuta izin verip
docker compose exec django python manage.py makemigrationsgibi bir komutu engelleyebilirsiniz
.Claude/settings.jsoniçinde zaten yapılabiliyorBunun doğrudan bir MCP sunucusu olarak çalışması daha iyi olurdu diye düşünüyorum
Hook'ları önceden belirlenmiş isimlere sahip MCP araçları olarak tanımlayıp, ajanın bunları otomatik keşfetmesini; iç uygulamayı bilmeden aynı MCP sunucusunu yeniden kullanabilmesini veya başka ajanlarda da değerlendirebilmesini hayal edebiliyorum
Claude Code,
CLAUDE.mddosyasındaki talimatları ve kod tabanının önemli kısımlarını sık sık unutuyor; bu yüzden sürekli hatırlatmak gerekiyorBu güncellemenin bu sorunu çözüp çözemeyeceğini merak ediyorum
voidfonksiyonlarda erkenreturnkullanma!CLAUDE.md'de bu kalıbın yasak olduğu yazıyor!"Claude
CLAUDE.mddosyasını okuyup "22 saniye, 2.6k token..." diyorSonra da "Haklısın!" diye cevap veriyor
Birkaç örnek hook paylaşıyorum
Hook yazma ve iş akışı otomasyonu örnek yazısı
Claude Code'un Cursor ile aynı seviyede, kod değişikliği sonrası linting/type check desteğine kavuşması sevindirici
Keşke Cursor'a da böyle bir özellik gelse
Şimdilik geçici çözüm olarak birkaç kuralı birleştirip bir ölçüde idare ediyorum
Bence bu özellik uzun süredir var olan büyük işlev farkını kapatıyor
Claude Code commit oluştururken çoğu normal Git hook'u çalışmadığı için,
CLAUDE.mdüzerindenQlty CLIile kod biçimlendirmesini otomatikleştirmesini söyleyen bir geçici çözüm kullanıyordum; ama Claude bunu tutarlı şekilde iyi yapamadığından bu yaklaşım tatmin edici değildiBu değişiklikle daha belirleyici sonuçlar alınabilir
Şu anda hook eklenebilen olaylar sınırlı olsa da, ileride Git commit ve push olaylarının da kolayca hook'lanabilmesini umuyorum
Qlty CLI GitHub bağlantısı
Bu arada Claude Java konusunda gerçekten çok iyi
Stil rehberimi ve hatta girinti tercihimi bile doğru anlayıp Java kodunu yeniden biçimlendirmeye gerek bırakmayacak kadar kusursuz uyum sağlıyor
JavaDoc'u bile çok özenli biçimde ayarlaması şaşırtıcı
Muhtemelen çok büyük miktarda kurumsal Java koduyla eğitildi
Normal Git hook'larının neden Claude Code içinde düzgün çalışmadığını merak ediyorum
Husky ve lint-staged düzgün çalıştı ama pre-commit hook'ları çalışmadı
Benim kısa anlayışıma göre bu özellik context tüketmiyor ve MCP'deki gibi ne zaman çalışacağına Claude'un karar verdiği bir yapı da değil; kullanıcının her araç kullanımı için doğrudan belirlediği otomatik bir davranış yapısı