Claude Code bildirimleri çalışmayı bıraktığında sebep neredeyse her zaman şu dördünden biridir: hook yüklenmemiştir, hook çalışıyor ama hata veriyordur, güvendiğiniz event beklediğiniz anda tetiklenmiyordur ya da işletim sistemi uyarıyı gizliyordur. Neyin yüklendiğini görmek için Claude Code içinde /hooks komutunu çalıştırın, her hook'un gerçekte ne yaptığını görmek için oturumu claude --debug ile başlatın, ardından bilgisayarınızdaki veya telefonunuzdaki bildirim ayarlarını kontrol edin. Claude Code Notifier kullanıyorsanız ccn doctor ve ccn test bunların çoğunu iki komutla halleder.
Aşağıdaki kontrol listesi en yaygın sebepten en az yaygın olana doğru ilerler. Mac, Windows ve Linux'ta geçerlidir.
011. Claude Code'un hook'u yüklediğini kontrol edin
Claude Code prompt'una /hooks yazın. Bu, Claude Code'un yüklediği tüm hook'ları gösteren salt okunur bir tarayıcıdır ve her birinin nereden geldiğini belirtir: kullanıcı ayarları, proje ayarları, yerel ayarlar, bir plugin veya mevcut oturum. Tam komutu ve tanımlandığı dosyayı görmek için bir hook seçin.
Hook'unuz listede yoksa:
- JSON geçersizdir. Ayar dosyaları katı JSON'dur. Sondaki bir virgül veya
//yorumu dosyayı bozar ve Claude Code bir sonraki açılışta Settings Error bildirir. Claude Code'un reddettiği girdileri görmek içinclaude doctorkomutunu çalıştırın. - Dosya yanlış yerdedir. Kişisel hook'lar
~/.claude/settings.jsondosyasına (Windows'ta%USERPROFILE%\.claude\settings.json) yazılır. Proje hook'ları projenin içindeki.claude/settings.jsondosyasına yazılır. Hangi dosyaların yüklendiğini görmek için/statusçalıştırıpSetting sourcessatırına bakın. - Event adı yanlıştır. Event adları büyük/küçük harfe duyarlıdır:
Notification,Stop,PermissionRequest. Bilinmeyen bir event adı Settings Warning olarak gösterilir ve atlanır. - Hook'lar kapatılmıştır. Herhangi bir ayar dosyasındaki
"disableAllHooks": truetüm hook'ları kapatır./hooksOnly hooks from managed settings run herediyorsa, kuruluşunuzallowManagedHooksOnlyayarını etkinleştirmiştir ve kendi hook'larınız çalışmaz. - Değişiklik algılanmamıştır. Claude Code normalde ayarları kendiliğinden yeniden yükler. Hook birkaç saniye içinde görünmezse oturumu yeniden başlatın.
022. Çalışma alanı güvenini onaylayın
Etkileşimli bir oturumda Claude Code, siz klasör için çalışma alanı güven iletişim kutusunu onaylayana kadar kendi ~/.claude/settings.json dosyanız dahil tüm ayar dosyalarındaki hook'ları bekletir. Bu iletişim kutusunu kapattıysanız veya Claude Code'u daha önce hiç açmadığınız bir klasördeyseniz, hook'larınız orada çalışmaz. O klasörde claude başlatın ve iletişim kutusunu onaylayın.
033. Event'in sandığınız anda tetiklendiğinden emin olun
"Bozuk" görünen bildirimlerin çoğu aslında zamanlama meselesidir. Anthropic'in hooks referansına göre:
permission_prompt ile NotificationBir izin prompt'u yaklaşık altı saniyedir bekliyor ve siz bir şey yazmadınız. Her tuş vuruşu sayacı sıfırlar.idle_prompt ile NotificationClaude bitirdikten yaklaşık 60 saniye sonra, siz bir şey yazmadıysanız ve çalışan bir arka plan agent'ı kalmadıysa.StopClaude her yanıtı bitirdiğinde. Kesintide tetiklenmez. API hatalarında bunun yerine StopFailure tetiklenir.PermissionRequestClaude Code sizden izin istemek üzereyken.Yani terminalde yazarken bir Notification hook'unu test ederseniz hiç tetiklenmeyebilir. Başka bir pencereye geçip bekleyin. Bir tur biter bitmez uyarı almak için Stop kullanın; ayrıntılar Stop hook rehberinde.
İzin modunuzu da kontrol edin. Claude Code'un yeni sürümleri etkileşimli oturumları, bir sınıflandırıcının çoğu işlemi sormadan onayladığı auto modda başlatır. Prompt yoksa permission_prompt bildirimi ve PermissionRequest hook'u da yoktur. İzin uyarılarını test etmek için durum çubuğunda manual mod görünene kadar Shift+Tab tuşuna basın, ardından Claude'dan onay gerektiren bir şey yapmasını isteyin. Ayrıntılar için İzin modları açıklaması'na bakın.
Matcher'lar da büyük/küçük harfe duyarlıdır. bash değerindeki bir PermissionRequest matcher'ı Bash aracıyla eşleşmez.
044. Hook komutunu kendiniz çalıştırın
Komutu /hooks üzerinden kopyalayın ve örnek girdiyle bir terminalde çalıştırın:
echo '{"hook_event_name":"Stop","cwd":"/tmp","last_assistant_message":"done"}' | ./my-hook.sh
echo $?
Sık görülen hatalar:
command not found: betiğin mutlak yolunu, proje içindeki betikler için de${CLAUDE_PROJECT_DIR}kullanın.- Betik hiçbir şey yapmıyor:
chmod +x ./my-hook.shile çalıştırılabilir yapın. jq: command not found:jqkurun ya da JSON'u Python veya Node.js ile ayrıştırın.
055. Debug log'u okuyun
Claude Code'u claude --debug ile başlatın. Terminalde fazladan bir şey yazdırılmaz; log ~/.claude/debug/<session-id>.txt dosyasına gider. Yolu kendiniz seçmek için claude --debug-file /tmp/claude.log kullanın ve başka bir terminalde tail -f /tmp/claude.log çalıştırın. Oturum zaten açıksa /debug log'u açar ve nerede olduğunu söyler.
Hooks: ile başlayan satırlara bakın. Her biri event'i, komutu, nasıl sonlandığını (finished with status 0, timed out, failed to start) ve ne kadar sürdüğünü gösterir. Eşleşme hakkında daha fazla ayrıntı için CLAUDE_CODE_DEBUG_LOG_LEVEL=verbose ayarlayın.
İki sorun yalnızca burada ortaya çıkar:
- Shell profiliniz bir şey yazdırıyor.
~/.bashrcveya~/.zshrcbirechoçalıştırıyorsa ve shell bunu source ediyorsa, bu metin hook'unuzun JSON çıktısının önüne eklenir ve Claude Code çıktıyı düz metin olarak değerlendirir. Log'daHook output does not start with {ifadesini arayın. Profil çıktısınıif [[ $- == *i* ]]; then ... fiiçine alın ki yalnızca etkileşimli shell'lerde çalışsın. - Yazılacak terminal yok. Mac ve Linux'ta command hook'ları kontrol eden bir terminal olmadan çalışır. Zil çaldırmaya veya
/dev/tty'ye escape kodu yazmaya çalışan bir hook sessizce başarısız olur. Bunun yerine bir masaüstü bildirim komutu ya da Claude Code'un kendipreferredNotifChannelayarını kullanın; bu konu terminal zili rehberinde anlatılıyor.
066. İşletim sistemini kontrol edin
Debug log hook'un 0 durum koduyla bittiğini söylüyor ama yine de hiçbir şey görmediyseniz, bildirimi işletim sistemi gizlemiştir. Bildirimi gönderen uygulamanın bildirim gösterme izni olduğunu ve Odak (Mac), Rahatsız etmeyin (Windows) ya da Linux masaüstünüzdeki rahatsız etmeyin seçeneğinin kapalı olduğunu kontrol edin. Linux'ta ayrıca bir bildirim daemon'ının çalışıyor olması gerekir.
Platforma özel komutları macOS, Windows ve Linux rehberlerinde bulabilirsiniz.
07Claude Code Notifier kullanıyorsanız
Claude Code Notifier, küçük bir programı (ccn) Claude Code hook'ları olarak kuran bağımsız bir araçtır (Anthropic tarafından geliştirilmemiştir). ccn de diğerleri gibi bir hook olduğu için yukarıdakilerin hepsi geçerliliğini korur. Önce aracın kendi kontrolleriyle başlayın:
ccn doctorhook'ları, kimlik bilgilerini, sunucu bağlantısını ve varlık algılamayı kontrol eder. Önce bildirdiği sorunları giderin.ccn testbir test bildirimi gönderir. Bildirim ulaşıyorsa sorun altyapıda değil, olayda ya da bir ayardadır.ccn devicesbu bilgisayarla eşleştirilmiş telefonları listeler. Hiçbiri listelenmiyorsaccn pairile yeniden eşleştirin; eşleştirme rehberi adım adım anlatıyor.ccn config showgeçerli ayarları yazdırır.notify_on_done,notify_on_permissionvenotify_on_questionayarlarının açık olduğunu vequiet_hoursaralığının şu anki saati kapsamadığını kontrol edin. Telefonda değiştirilen ayarlar bilgisayaraccn syncile aktarılır.
Bazı davranışlar hata gibi görünse de aslında bilerek böyle tasarlanmıştır:
- Klavyenin başındasınız. Son 30 saniye içinde bir şey yazdıysanız telefon beklenmez ve terminal her zamanki gibi sorar.
quiet_when_presentaçıkken (varsayılan), Claude'un çalıştığı terminalin başındaysanız telefona hiçbir şey gitmez; başka bir uygulamada aktifseniz bir bilgi kartı gider. - Mac'te yinelenen veya eksik bildirimler. Eski Mac menü çubuğu uygulamasını ve
ccn'i aynı Mac'te birlikte çalıştırmayın. - Uzun süre kullanmamak. Bir telefon veya bilgisayar 60 gün kullanılmazsa sunucu eşleştirmesini siler; bu durumda yeniden eşleştirmeniz gerekir.
Telefonun kendisinde, uygulama için bildirimlere izin verildiğini ve Odak (iPhone) ya da Rahatsız Etmeyin (Android) modunun bildirimleri susturmadığını kontrol edin. Android'de pil optimizasyonu bazı uygulamaların bildirimlerini geciktirebilir; bildirimler geç geliyorsa uygulamanın pil ayarlarından kısıtlamasız çalışmasına izin verin. settings.json dosyasını elle düzenlediyseniz ccn doctor hook'larının hâlâ yerinde olup olmadığını söyler. ccn upgrade en son sürüme günceller.
08SSS
Notification hook'um neden yalnızca bazen tetikleniyor?
permission_prompt ve idle_prompt türleri, başında olmadığınız anlaşıldığında tetiklenecek şekilde zamanlanır. permission_prompt yaklaşık altı saniye yazı yazılmamasını, idle_prompt ise Claude bittikten sonra yaklaşık 60 saniye bekler. Yazıyorsanız ertelenirler. Anında sinyal için PermissionRequest veya Stop kullanın.
Claude Code debug log'u nerede?
claude --debug komutunu çalıştırdığınızda log ~/.claude/debug/<session-id>.txt dosyasına yazılır. Konumu seçmek için claude --debug-file <path>, çalışan bir oturumun içinden ise /debug kullanın.
ccn test çalışıyor ama gerçek bildirimler gelmiyor. Neden?
Altyapı sorunsuz, o yüzden ayarlara ve zamanlamaya bakın. ccn config show çıktısında notify_on_* ve quiet_hours ayarlarını kontrol edin; quiet_when_present açıkken terminalin başındaysanız hiçbir şey gönderilmediğini unutmayın ve Claude Code'daki izin modunu kontrol edin.