20 puan yazan GN⁺ 2025-07-02 | 4 yorum | WhatsApp'ta paylaş
  • 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

 
shakespeare 2025-07-02

Lütfen Windows sürümünü de yapın :(

 
nalbam 2025-07-06

WSL kullanın

 
slowmo 2025-07-08

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.

 
GN⁺ 2025-07-02
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 verimliydi
    Bu 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.md dosyasını güncelletme örnekleri bile var; yani kendi hook'larını da değiştirtmek tamamen imkânsız değil
      Ama 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ı

    • Ben aslında Claude Code yerine cline.bot adlı VS Code eklentisini kullanıyorum
      Bence 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 test
    gibi bir komuta izin verip
    docker compose exec django python manage.py makemigrations
    gibi bir komutu engelleyebilirsiniz

    • Aslında bunun bu kadarı .Claude/settings.json içinde zaten yapılabiliyor
  • Bunun 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.md dosyasındaki talimatları ve kod tabanının önemli kısımlarını sık sık unutuyor; bu yüzden sürekli hatırlatmak gerekiyor
    Bu güncellemenin bu sorunu çözüp çözemeyeceğini merak ediyorum

    • Mesela şöyle: "void fonksiyonlarda erken return kullanma! CLAUDE.md'de bu kalıbın yasak olduğu yazıyor!"
      Claude CLAUDE.md dosyasını okuyup "22 saniye, 2.6k token..." diyor
      Sonra 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

    • Cursor kullanmadığım için, insanların bunu kullanmak için hâlâ bir nedeni olup olmadığını merak 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 üzerinden Qlty CLI ile 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ğildi
    Bu 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ı