Gdy powiadomienia Claude Code przestają działać, przyczyna to prawie zawsze jedna z czterech rzeczy: hook nie jest załadowany, hook działa, ale kończy się błędem, zdarzenie, na którym polegasz, nie odpala się wtedy, kiedy myślisz, albo system operacyjny ukrywa alert. Uruchom /hooks w Claude Code, żeby zobaczyć, co jest załadowane, odpal sesję z claude --debug, żeby sprawdzić, co faktycznie zrobił każdy hook, a potem sprawdź ustawienia powiadomień na komputerze lub telefonie. Jeśli używasz Claude Code Notifier, ccn doctor i ccn test załatwiają większość tego dwoma poleceniami.
Poniższa lista idzie od najczęstszej przyczyny do najrzadszej. Działa na Macu, Windows i Linux.
011. Sprawdź, czy Claude Code załadował hook
Wpisz /hooks w prompcie Claude Code. To przeglądarka (tylko do odczytu) wszystkich hooków załadowanych przez Claude Code, z oznaczeniem, skąd każdy pochodzi: ustawienia użytkownika, projektu, lokalne, plugin lub bieżąca sesja. Wybierz hook, żeby zobaczyć dokładne polecenie i plik, w którym jest zdefiniowany.
Jeśli twojego hooka nie ma na liście:
- JSON jest niepoprawny. Pliki ustawień to ścisły JSON. Przecinek na końcu albo komentarz
//psuje plik, a Claude Code zgłasza Settings Error przy następnym starcie. Uruchomclaude doctor, żeby zobaczyć wpisy odrzucone przez Claude Code. - Plik jest w złym miejscu. Osobiste hooki trafiają do
~/.claude/settings.json(na Windows:%USERPROFILE%\.claude\settings.json). Hooki projektu trafiają do.claude/settings.jsonw projekcie. Uruchom/statusi sprawdź linięSetting sources, żeby zobaczyć, które pliki się załadowały. - Nazwa zdarzenia jest błędna. Nazwy zdarzeń rozróżniają wielkość liter:
Notification,Stop,PermissionRequest. Nieznana nazwa pojawia się jako Settings Warning i jest pomijana. - Hooki są wyłączone.
"disableAllHooks": truew dowolnym pliku ustawień wyłącza wszystkie hooki. Jeśli/hookspokazujeOnly hooks from managed settings run here, twoja organizacja ustawiłaallowManagedHooksOnlyi twoje własne hooki nie zadziałają. - Zmiana nie została wychwycona. Claude Code zwykle sam przeładowuje ustawienia. Jeśli hook nie pojawi się po kilku sekundach, zrestartuj sesję.
022. Zaakceptuj zaufanie do workspace'u
W sesji interaktywnej Claude Code wstrzymuje hooki ze wszystkich plików ustawień, łącznie z twoim ~/.claude/settings.json, dopóki nie zaakceptujesz okna zaufania do workspace'u dla danego folderu. Jeśli je zamknąłeś albo jesteś w folderze, w którym nigdy nie otwierałeś Claude Code, hooki tam nie zadziałają. Uruchom claude w tym folderze i zaakceptuj okno.
033. Upewnij się, że zdarzenie odpala się wtedy, kiedy myślisz
Wiele „zepsutych” powiadomień to tak naprawdę kwestia czasu. Według dokumentacji hooków Anthropic:
Notification z permission_promptProśba o uprawnienia czeka około sześciu sekund, a ty nic nie wpisałeś. Każde naciśnięcie klawisza resetuje licznik.Notification z idle_promptOkoło 60 sekund po tym, jak Claude skończy, jeśli nic nie wpisałeś i żaden agent w tle nie działa.StopZa każdym razem, gdy Claude skończy odpowiadać. Nie przy przerwaniu. Błędy API odpalają zamiast tego StopFailure.PermissionRequestW momencie, gdy Claude Code ma poprosić cię o uprawnienia.Jeśli więc testujesz hook Notification, pisząc w terminalu, może się w ogóle nie odpalić. Przełącz się na inne okno i poczekaj. Jeśli chcesz alertu od razu po zakończeniu tury, użyj Stop; opisuje to poradnik o Stop hook.
Sprawdź też tryb uprawnień. Nowsze wersje Claude Code uruchamiają sesje interaktywne w trybie auto, w którym klasyfikator zatwierdza większość akcji bez pytania. Brak promptu oznacza brak powiadomienia permission_prompt i brak hooka PermissionRequest. Żeby przetestować alerty o uprawnieniach, naciskaj Shift+Tab, aż pasek statusu pokaże tryb manualny, a potem poproś Claude o coś, co wymaga zatwierdzenia. Szczegóły znajdziesz w objaśnieniu trybów uprawnień.
Matchery też rozróżniają wielkość liter. Matcher PermissionRequest o wartości bash nie dopasuje narzędzia Bash.
044. Uruchom polecenie hooka samodzielnie
Skopiuj polecenie z /hooks i uruchom je w terminalu z przykładowym wejściem:
echo '{"hook_event_name":"Stop","cwd":"/tmp","last_assistant_message":"done"}' | ./my-hook.sh
echo $?
Typowe błędy:
command not found: użyj ścieżki bezwzględnej do skryptu albo${CLAUDE_PROJECT_DIR}dla skryptów w projekcie.- Skrypt nic nie robi: nadaj mu prawa wykonywania przez
chmod +x ./my-hook.sh. jq: command not found: zainstalujjqalbo parsuj JSON w Pythonie lub Node.js.
055. Przeczytaj log debugowania
Uruchom Claude Code z claude --debug. W terminalu nic dodatkowego się nie pojawi; log trafia do ~/.claude/debug/<session-id>.txt. Żeby wybrać ścieżkę, użyj claude --debug-file /tmp/claude.log i w drugim terminalu uruchom tail -f /tmp/claude.log. Jeśli sesja już działa, /debug włącza logowanie i pokazuje, gdzie jest log.
Szukaj linii zaczynających się od Hooks:. Każda podaje zdarzenie, polecenie, sposób zakończenia (finished with status 0, timed out, failed to start) i czas trwania. Więcej szczegółów o dopasowaniu uzyskasz, ustawiając CLAUDE_CODE_DEBUG_LOG_LEVEL=verbose.
Dwa problemy widać tylko tutaj:
- Twój profil shella coś wypisuje. Jeśli
~/.bashrclub~/.zshrcwykonujeecho, a shell go wczytuje, ten tekst ląduje przed wyjściem JSON twojego hooka i Claude Code traktuje całość jako zwykły tekst. Poszukaj w loguHook output does not start with {. Owiń wyjście profilu wif [[ $- == *i* ]]; then ... fi, żeby działało tylko w shellach interaktywnych. - Brak terminala do zapisu. Na Macu i Linux hooki poleceń działają bez terminala sterującego. Hook, który próbuje użyć dzwonka albo zapisać kody escape do
/dev/tty, po cichu zawodzi. Zamiast tego użyj polecenia powiadomień desktopowych albo wbudowanego ustawienia Claude CodepreferredNotifChannel, opisanego w poradniku o dzwonku terminala.
066. Sprawdź system operacyjny
Jeśli debug log mówi, że hook zakończył się ze statusem 0, a mimo to nic nie zobaczyłeś, powiadomienie ukrył system operacyjny. Sprawdź, czy aplikacja wyświetlająca alert ma zgodę na powiadomienia oraz czy Skupienie (Mac), Nie przeszkadzać (Windows) albo przełącznik „nie przeszkadzać” w twoim środowisku Linux jest wyłączony. Na Linux musi działać demon powiadomień.
Polecenia dla konkretnych systemów znajdziesz w poradnikach dla macOS, Windows i Linux.
07Jeśli używasz Claude Code Notifier
Claude Code Notifier to niezależne narzędzie (nie od Anthropic), które instaluje mały program ccn jako hooki Claude Code. Wszystko powyżej nadal obowiązuje, bo ccn to hook jak każdy inny. Zacznij od jego własnych testów:
ccn doctorsprawdza hooki, dane logowania, połączenie z serwerem i wykrywanie obecności. Najpierw napraw wszystko, co zgłosi.ccn testwysyła testowe powiadomienie. Jeśli dotrze, problem leży w zdarzeniu albo ustawieniu, a nie w samym przepływie.ccn deviceswyświetla telefony sparowane z tym komputerem. Jeśli lista jest pusta, sparuj ponownie przezccn pair; krok po kroku opisuje to poradnik parowania.ccn config showwypisuje obowiązujące ustawienia. Sprawdź, czynotify_on_done,notify_on_permissioninotify_on_questionsą włączone i czyquiet_hoursnie obejmuje bieżącej godziny. Ustawienia zmienione na telefonie trafiają na komputer poccn sync.
Kilka zachowań wygląda na błędy, ale tak ma być:
- Jesteś przy klawiaturze. Jeśli pisałeś w ciągu ostatnich 30 sekund, nic nie czeka na telefon, a terminal pyta jak zwykle. Przy włączonym
quiet_when_present(domyślnie) telefon nic nie dostaje, gdy jesteś w terminalu, w którym działa Claude, a gdy pracujesz w innej aplikacji — kartę informacyjną. - Zdublowane lub brakujące alerty na Macu. Nie uruchamiaj starszej aplikacji z paska menu Maca razem z
ccnna tym samym Macu. - Długa przerwa. Jeśli telefon lub komputer nie jest używany przez 60 dni, serwer usuwa jego parowanie i trzeba sparować ponownie.
Na samym telefonie sprawdź, czy aplikacja ma zgodę na powiadomienia i czy nie wycisza jej Skupienie (iPhone) albo Nie przeszkadzać (Android). Na Android optymalizacja baterii potrafi opóźniać powiadomienia niektórych aplikacji; jeśli alerty przychodzą z opóźnieniem, zezwól aplikacji na działanie bez ograniczeń w ustawieniach baterii. Jeśli ręcznie edytowałeś settings.json, ccn doctor powie ci, czy jego hooki nadal są na miejscu. ccn upgrade aktualizuje do najnowszej wersji.
08FAQ
Dlaczego mój Notification hook odpala się tylko czasami?
Typy permission_prompt i idle_prompt są wyzwalane wtedy, gdy wyglądasz na nieobecnego. permission_prompt czeka około sześciu sekund bez pisania, a idle_prompt około 60 sekund od zakończenia pracy przez Claude. Jeśli piszesz, są odkładane. Jeśli chcesz natychmiastowego sygnału, użyj PermissionRequest lub Stop.
Gdzie jest debug log Claude Code?
Uruchom claude --debug, a log zapisze się w ~/.claude/debug/<session-id>.txt. Użyj claude --debug-file <path>, żeby wybrać lokalizację, albo /debug w trakcie sesji.
ccn test działa, ale prawdziwe powiadomienia nie przychodzą. Dlaczego?
Przepływ działa, więc przyjrzyj się ustawieniom i czasowi. Sprawdź w ccn config show wartości notify_on_* i quiet_hours, pamiętaj, że przy włączonym quiet_when_present nic nie jest wysyłane, gdy jesteś w terminalu, i sprawdź tryb uprawnień w Claude Code.