Claude Code Hooks: praktyczny przewodnik po automatyzacji workflowu
Dowiedz się, jak działa automatyzacja oparta na hookach i zacznij używać hooków Claude Code do automatyzacji zadań, takich jak testowanie, formatowanie i powiadomienia.
Podczas pracy z Claude Code szybko zauważysz typowy problem: pisze dobry kod, ale pomija ważne kroki, jak formatowanie, uruchamianie testów czy przestrzeganie zasad bezpieczeństwa. Kończy się to ciągłym powtarzaniem tych samych przypomnień. Hooki Claude Code pozwalają zautomatyzować te przypomnienia, automatycznie uruchamiając polecenia powłoki w określonych momentach twojego workflowu.
W tym tutorialu pokazuję, jak skonfigurować hooki do formatowania kodu, uruchamiania testów, wysyłania powiadomień i ochrony plików. Zbudujesz system automatyzacji, który egzekwuje twoje standardy deweloperskie bez ręcznej ingerencji.
Hooki Claude Code to polecenia powłoki uruchamiane automatycznie w określonych punktach cyklu życia Claude Code (przed/po wywołaniach narzędzi, przy starcie sesji, gdy Claude się zatrzymuje)
Konfiguruj je w .claude/settings.json (projekt) lub ~/.claude/settings.json (globalnie) za pomocą JSON z wydarzeniami, matcherami i poleceniami
Używaj hooków PreToolUse, by blokować niebezpieczne operacje zanim do nich dojdzie (kod wyjścia 2 = blokada)
Używaj hooków PostToolUse do zadań porządkowych, jak formatowanie, lintowanie lub uruchamianie testów po tym, jak Claude zapisze kod
Hooki otrzymują kontekst w formacie JSON na stdin i przekazują wyniki przez kody wyjścia, stdout oraz stderr
Czym są hooki Claude Code?
Hooki Claude Code to polecenia powłoki uruchamiane automatycznie, gdy w twojej sesji kodowania z AI wystąpią określone zdarzenia. Pomyśl o nich jak o automatycznych wyzwalaczach, które odpalają twoje skrypty w precyzyjnych momentach—zanim Claude zapisze plik, po uruchomieniu polecenia albo gdy wyśle ci powiadomienie.
System działa, monitorując działania Claude Code i dopasowując je do reguł zdefiniowanych w pliku konfiguracyjnym. Gdy nastąpi dopasowanie, twoje polecenie uruchamia się z dostępem do kontekstu tego, co właśnie się stało. Daje ci to kontrolę nad zachowaniem Claude'a i pozwala automatyzować powtarzalne zadania, które w innym wypadku wymagałyby ręcznej pracy.
Oto podstawowy hook, który uruchamia formatter kodu za każdym razem, gdy Claude zapisze plik Pythona:
{"hooks":{"PostToolUse":[{"matcher":"Write","hooks":[{"type":"command","command":"python -m black ."}]}]}}Obsługiwane przez
Ten hook ma trzy części:
Zdarzenie:PostToolUse (po zakończeniu działania przez Claude'a)
Matcher:Write (tylko przy zapisie plików)
Polecenie:python -m black . (sformatuj pliki Pythona w bieżącym katalogu)
Hook otrzymuje szczegółowe informacje o tym, co właśnie zrobił Claude, poprzez dane JSON wysyłane na wejście skryptu, dzięki czemu możesz tworzyć bardziej zaawansowaną automatyzację reagującą na konkretne zmiany plików.
Jeśli chcesz pójść dalej z automatyzacją w Claude Code, nasz tutorial Claude Code Routines pokazuje, jak planować cykliczne uruchamianie hooków i agentów w chmurze.
Zobaczmy teraz, jak stworzyć hooki od zera i zarejestrować je w Claude Code.
Obeznanie z wierszem poleceń: Hooki uruchamiają polecenia powłoki, więc musisz znać podstawowe polecenia terminala w swoim systemie operacyjnym
Dostęp do edytora tekstu: Będziesz edytować pliki konfiguracyjne JSON, aby ustawić hooki
Katalog projektu: Projekt, w którym możesz bezpiecznie testować hooki, nie ryzykując ważnej pracy
Nie musisz być ekspertem od skryptów powłoki, ale znajomość poleceń takich jak ls, cd oraz podstawowych operacji na plikach ułatwi śledzenie przykładów. Jeśli dopiero zaczynasz z bashem lub terminalem, polecam nasz kurs Introduction to Shell.
Pierwsze kroki z hookami Claude Code
Skoro już wiesz, czym są hooki, skonfigurujmy twoją pierwszą automatyzację. Proces polega na wyborze właściwego zdarzenia, skonfigurowaniu prostej reguły i przetestowaniu jej podstawowym poleceniem.
Zrozumienie zdarzeń hooków
Claude Code udostępnia ponad 25 zdarzeń hooków. Tabela poniżej obejmuje 10, których będziesz używać najczęściej. Pełną listę znajdziesz w oficjalnej dokumentacji hooków.
PreToolUse i PostToolUse to najczęstsze zdarzenia. PreToolUse uruchamia się, zanim Claude wykona akcję, taką jak zapis pliku czy uruchomienie polecenia, dzięki czemu idealnie nadaje się do walidacji lub blokowania niebezpiecznych operacji. PostToolUse działa po zakończeniu akcji i świetnie sprawdza się w zadaniach porządkowych, takich jak formatowanie kodu czy uruchamianie testów.
UserPromptSubmit wyzwala się, gdy wysyłasz prompt do Claude'a, zanim zacznie go przetwarzać. Możesz go użyć do dodawania kontekstu do rozmowy lub walidacji, czy prompty spełniają określone wymagania.
Notification działa, gdy Claude wysyła alerty, np. prosi o zgodę na uruchomienie polecenia lub potrzebuje twojego wkładu. PermissionRequest wyzwala się, gdy Claude Code wyświetla okno zgody, co pozwala automatycznie zatwierdzać lub odrzucać prośby w imieniu użytkownika.
Stop i SubagentStop wyzwalają się, gdy Claude kończy odpowiedź, co jest przydatne do finalnych kontroli lub generowania raportów. Różnica jest taka, że Stop odpala się po zakończeniu ogólnej odpowiedzi Claude'a, a SubagentStop wtedy, gdy pomocnik uruchomiony przez narzędzie („subagent”) zakończy swoją pracę.
Pozostałe zdarzenia, PreCompact, SessionStart i SessionEnd, dotyczą sytuacji specyficznych dla cyklu życia. PreCompact uruchamia się tuż przed skróceniem historii rozmowy. „SessionStart” odpala się na początku nowej sesji, aby ustawić domyślne wartości, a SessionEnd wyzwala się przy zamykaniu sesji, umożliwiając sprzątanie lub końcowe raportowanie.
Nazwa zdarzenia
Moment wyzwolenia
Główne zastosowania
PreToolUse
Zanim Claude wykona akcję (np. zapisze plik, uruchomi polecenie).
Walidacja akcji lub blokowanie niebezpiecznych operacji.
PostToolUse
Po zakończeniu akcji przez Claude'a.
Zadania porządkowe, formatowanie kodu lub uruchamianie testów.
UserPromptSubmit
Gdy wysyłasz prompt, zanim rozpocznie się przetwarzanie.
Dodawanie kontekstu do rozmowy lub walidacja promptów.
Notification
Gdy Claude wysyła alerty (np. prosi o dane lub zgodę).
Obsługa alertów systemowych i próśb o uwagę użytkownika.
PermissionRequest
Gdy wyświetlane jest okno zgody.
Automatyczne zatwierdzanie lub odrzucanie próśb w imieniu użytkownika.
Stop
Gdy Claude kończy swoją ogólną odpowiedź.
Końcowe sprawdzenia lub generowanie raportów dla głównej odpowiedzi.
SubagentStop
Gdy pomocnik uruchomiony przez narzędzie ("subagent") kończy pracę.
Końcowe sprawdzenia specyficzne dla aktywności subagenta.
PreCompact
Tuż przed skróceniem historii rozmowy.
Zarządzanie porządkowaniem rozmowy i zachowaniem kontekstu.
SessionStart
Na początku nowej sesji.
Inicjalizacja i ustawianie domyślnych wartości.
SessionEnd
Gdy sesja się zamyka.
Końcowe sprzątanie lub raportowanie na koniec sesji.
Zrozumienie matcherów
Matchery to filtry decydujące, które działania Claude Code wyzwolą hook. Technicznie są to łańcuchy interpretowane jako wyrażenia regularne, więc możesz używać dopasowań dokładnych lub bardziej elastycznych wzorców.
Najbardziej przydatne są proste matchery, jak Write (odpala się przy zapisie pliku) czy Edit (odpala się przy edycji treści), oraz kombinacje typu Edit|Write, by objąć wiele akcji.
Możesz też używać prefiksów typu Notebook.*, aby dopasować wszystkie narzędzia zaczynające się od „Notebook”. Jeśli chcesz, by hook odpalał się przy każdej akcji, użyj uniwersalnego regexu .*, pustego łańcucha ("") lub pozostaw matcher pusty.
Ponieważ matchery rozróżniają wielkość liter i działają tylko na nazwach akcji, najlepiej utrzymywać je możliwie precyzyjne. Gdy potrzebujesz dokładniejszej kontroli (np. ograniczyć hook do określonych typów plików), możesz odczytać ładunek JSON przekazywany do hooka i zastosować własne regexy lub warunki.
Tworzenie pierwszego hooka w Claude Code
Claude Code oferuje dwa sposoby konfiguracji hooków: przez interaktywne polecenie /hooks lub poprzez bezpośrednią edycję plików konfiguracyjnych. Zacznijmy od podejścia interaktywnego, bo jest bardziej przyjazne na start.
Użycie polecenia /hooks:
Otwórz Claude Code i wpisz /hooks w interfejsie czatu
Wybierz zdarzenie wyzwalające (dla tego przykładu wybierz PostToolUse)
W menu wybierz „Add new hook”
Ustaw wzorzec matchera (wpisz Write, aby celować w zapis plików)
Wpisz swoje polecenie:
Mac: say "Task complete"
Windows: powershell -c [console]::beep()
Linux: spd-say "Task complete"
Zapisz konfigurację i wróć do Claude Code, naciskając Esc trzy razy
Polecenie /hooks automatycznie zaktualizuje twój plik ustawień i przeładuje konfigurację. Możesz też w każdej chwili użyć /hooks, aby podejrzeć istniejące hooki lub wprowadzić zmiany.
Jeśli wolisz edycję plików konfiguracyjnych, hooki znajdują się w ~/.claude/settings.json dla ustawień globalnych, w .claude/settings.json w katalogu projektu (skomituj do repo, aby współdzielić hooki w zespole) lub w .claude/settings.local.json dla prywatnych hooków, które domyślnie są ignorowane przez gita. Dla naszego przykładu wyglądałoby to tak:
{"hooks":{"PostToolUse":[{"matcher":"Write","hooks":[{"type":"command","command":"say 'Task complete'"}]}]}}Obsługiwane przez
Po ręcznej edycji pliku zrestartuj Claude Code lub użyj polecenia /hooks, aby przeładować konfigurację. Teraz za każdym razem, gdy Claude zapisze plik, usłyszysz powiadomienie dźwiękowe.
Testowanie hooka
Zanim pójdziesz dalej, sprawdź, czy hook faktycznie działa:
Poproś Claude'a o zapis dowolnego pliku Pythona (np. „Utwórz plik hello.py, który wypisuje hello world”)
Powinieneś usłyszeć powiadomienie dźwiękowe, gdy Claude zakończy operację zapisu
Jeśli nic nie słyszysz, sprawdź transkrypt Claude Code, naciskając Ctrl-O, aby zobaczyć ewentualne komunikaty o błędach
Typowe problemy to: nieznalezione polecenie hooka, złe uprawnienia pliku lub błędy składni w pliku konfiguracyjnym
Doprowadzenie do działania tego prostego testu oszczędzi ci czasu na debugowanie przy budowaniu bardziej złożonych hooków. Jeśli właśnie ręcznie edytowałeś plik ustawień, zmieniłeś matcher lub zdarzenie, albo zainstalowałeś nowe narzędzia używane w poleceniu hooka, pomocne może być ponowne otwarcie /hooks lub restart Claude'a, by przeładować konfigurację.
Ten podstawowy schemat (zdarzenie, matcher, polecenie) stanowi fundament całej automatyzacji hooków. Możesz go rozwinąć, dodając wiele poleceń uruchamianych równocześnie przy tym samym zdarzeniu. Na przykład możesz chcieć jednocześnie odtworzyć dźwięk i utworzyć kopię zapasową, gdy Claude zapisze plik.
Możesz też tworzyć osobne matchery dla różnych narzędzi w tym samym zdarzeniu, tak aby zapis pliku wyzwalał inne akcje niż edycja kodu. Wszystkie hooki pasujące do tego samego wzorca narzędzia uruchamiają się równolegle. Jeśli skonfigurujesz wiele matcherów dla tego samego zdarzenia, każdy hook uruchomi się, gdy dopasuje się jego matcher.
Praca z wejściami hooków
Gdy Claude Code wyzwala hooka, wysyła informacje o tym, co właśnie się stało, przez standardowe wejście (stdin) — strumień danych trafiający bezpośrednio do twojego polecenia w momencie jego uruchomienia. Te dane sprawiają, że hooki są potężne, a nie tylko przypadkowo odpalanymi skryptami.
Claude Code pakuje te informacje jako JSON i przekazuje je do skonfigurowanego polecenia — czy to prostego polecenia terminalowego, czy własnego skryptu.
Anatomia wejść hooków
Każdy hook otrzymuje obiekt JSON z podstawowymi polami dotyczącymi bieżącej sesji:
{"session_id":"abc123","transcript_path":"/Users/you/.claude/projects/my-project/conversation.jsonl","cwd":"/Users/you/my-project","hook_event_name":"PostToolUse"}Obsługiwane przez
Przetłumaczmy każdy element:
session_id: identyfikuje bieżącą rozmowę
transcript_path: wskazuje historię rozmowy
cwd: pokazuje katalog roboczy
hook_event_name: informuje, które zdarzenie się wyzwoliło
Posiadanie tego kontekstu pozwala twoim hookom podejmować inteligentne decyzje: możesz śledzić, która rozmowa wyzwoliła akcję, w razie potrzeby uzyskać dostęp do pełnej historii czatu lub uruchamiać polecenia we właściwym katalogu.
Warianty wejść zależne od zdarzenia
Zdarzenia narzędziowe, takie jak PreToolUse i PostToolUse, zawierają dodatkowe szczegóły o akcji — to tutaj hooki stają się naprawdę użyteczne do automatyzacji. W PreToolUse podany jest tool_input, a w PostToolUse dodatkowo tool_response:
{"session_id":"abc123","hook_event_name":"PostToolUse","tool_name":"Write","tool_input":{"file_path":"/path/to/file.py","content":"print('Hello world')"},"tool_response":{"filePath":"/path/to/file.py","success":true}}Obsługiwane przez
Wejście hooka zawiera file_path z ścieżką pliku zapisywanego lub edytowanego, a content — dokładny tekst, który narzędzie ma zapisać. Po wykonaniu akcja narzędzia zwraca w odpowiedzi końcowy filePath (zwróć uwagę na camelCase), aby potwierdzić, który plik faktycznie został zmieniony, oraz flagę success wskazującą, czy operacja zakończyła się powodzeniem.
Dzięki tym szczegółom twoje hooki mogą reagować różnie w zależności od tego, co się wydarzyło. Możesz formatować tylko pliki Pythona, tworzyć kopie zapasowe tylko ważnych katalogów czy wysyłać powiadomienia tylko przy modyfikacji określonych typów plików.
Zdarzenia takie jak UserPromptSubmit są prostsze, bo nie obejmują narzędzi:
{"session_id":"abc123","hook_event_name":"UserPromptSubmit","prompt":"Write a function to calculate factorial"}Obsługiwane przez
Zauważ, że hooki UserPromptSubmit nie używają matcherów w konfiguracji. Wyzwalają się dla wszystkich promptów, a nie operacji narzędzi. Nadają się idealnie do logowania rozmów, automatycznego dodawania kontekstu projektowego lub walidowania promptów, zanim Claude je przetworzy.
Praktyczne odczytywanie wejścia hooka
Stwórzmy hooka, który loguje każdy prompt użytkownika. Rozwiązuje to problem gubienia śladu tego, o co prosiłeś Claude'a, zwłaszcza podczas długich sesji kodowania. Najpierw konfiguracja hooka:
{"hooks":{"UserPromptSubmit":[{"hooks":[{"type":"command","command":"python3 ~/.claude/log_prompts.py"}]}]}}Obsługiwane przez
Następnie utwórz skrypt Pythona w ~/.claude/log_prompts.py o następującej treści:
#!/usr/bin/env python3import json
import sys
from datetime import datetime
# Read JSON data from stdin
input_data = json.load(sys.stdin)# Extract information
session_id = input_data.get("session_id","unknown")
prompt = input_data.get("prompt","")
timestamp = datetime.now().isoformat()# Log the prompt
log_entry =f"{timestamp} | Session: {session_id[:8]} | {prompt}\n"withopen("prompt_history.txt","a")as f:
f.write(log_entry)Obsługiwane przez
Skrypt odczytuje dane JSON wysyłane przez Claude Code i loguje prompt wraz z kontekstem sesji. Tworzy to przeszukiwalną historię interakcji, co jest nieocenione, gdy po tygodniach chcesz przypomnieć sobie, jak rozwiązałeś dany problem.
Praca z wyjściami hooków
Po uruchomieniu twojego polecenia hook musi przekazać Claude Code informację, co się stało i czy kontynuować normalnie. Ten mechanizm kontroli zamienia hooki z prostych narzędzi do logowania w potężną automatyzację workflowu, która może sterować zachowaniem Claude'a. Dzieje się to przez trzy kanały: standardowe wyjście (stdout), standardowe wyjście błędów (stderr) i kody wyjścia.
Kanały wyjścia i kody wyjścia
Standardowe wyjście (stdout) to zwykłe wyjście. Na przykład, jeśli coś wypiszesz, trafi to do stdout. W większości hooków to, co pojawia się w transkrypcie Claude Code po naciśnięciu Ctrl-O, dając ci zapis tego, co zrobiła automatyzacja, bez zaśmiecania głównej rozmowy.
Standardowe wyjście błędów (stderr) służy do komunikatów o błędach. Możesz pisać na stderr używając
Python: print("message", file=sys.stderr) lub
Wiersz poleceń: echo "message" >&2
Kluczowa różnica polega na tym, że stderr może być wysłane bezpośrednio do Claude'a do automatycznego przetworzenia, co pozwala mu reagować na problemy wykryte przez twoje hooki.
Kody wyjścia mówią Claude Code, co robić dalej:
Kod wyjścia 0: Sukces (pokazuje użytkownikowi stdout)
Kod wyjścia 2: Błąd blokujący (wysyła stderr do Claude'a)
Inne kody: Błąd nieblokujący (pokazuje stderr użytkownikowi, ale kontynuuje)
Ten system daje ci precyzyjną kontrolę, kiedy Claude ma się zatrzymać, kontynuować lub otrzymać informację zwrotną o tym, co wykryła twoja automatyzacja. Zobaczmy przykłady dla dwóch najważniejszych kodów wyjścia.
Kod wyjścia 0: Normalne działanie
Większość hooków używa kodu 0, aby wskazać, że wszystko poszło dobrze. Oto kompletny hook, który loguje operacje na plikach i powiadamia użytkownika:
Ten hook uruchamia dwie akcje: zapis do pliku logu, a potem wydruk komunikatu do transkryptu. Można to zrobić na wiele sposobów, ale to podejście jest wieloplatformowe i nie zależy od specyfiki wiersza poleceń.
Ponieważ nie ma jawnego kodu wyjścia, domyślnie jest to 0. Wydrukowana wiadomość pojawia się w transkrypcie Claude Code, dając informację zwrotną, że logowanie zadziałało. Ten wzorzec świetnie się sprawdza przy budowie ścieżek audytu lub śledzeniu zmian, jakie Claude wprowadza w twoim projekcie z czasem.
Kod wyjścia 2: Blokowanie z informacją zwrotną
Kod wyjścia 2 wysyła twój komunikat o błędzie bezpośrednio do Claude'a, pozwalając mu automatycznie zareagować. Tu hooki stają się mechanizmem bezpieczeństwa, a nie tylko automatyzacją. Oto hook, który blokuje niebezpieczne operacje na plikach:
{"hooks":{"PreToolUse":[{"matcher":"Write|Edit","hooks":[{"type":"command","command":"python3 ~/.claude/security_check.py"}]}]}}Obsługiwane przez
Musisz utworzyć skrypt kontroli bezpieczeństwa w ~/.claude/security_check.py:
#!/usr/bin/env python3import json
import sys
# Read hook input
input_data = json.load(sys.stdin)
tool_input = input_data.get("tool_input",{})
file_path = tool_input.get("file_path","")# Check for dangerous patterns
dangerous_paths =["/etc/","/usr/","production.conf"]
is_dangerous =any(pattern in file_path for pattern in dangerous_paths)if is_dangerous:# Block the operation and tell Claude whyprint(f"Blocked modification of {file_path} - this appears to be a system or production file",file=sys.stderr)
sys.exit(2)# Sends stderr message to Claudeelse:# Allow the operationprint(f"Approved modification of {file_path}")
sys.exit(0)# Shows stdout in transcriptObsługiwane przez
Gdy ten hook wykryje niebezpieczną ścieżkę, wychodzi z kodem 2. Claude Code wysyła komunikat ze stderr do Claude'a, który może wytłumaczyć, dlaczego operacja została zablokowana, i zaproponować alternatywy. To zapobiega przypadkowemu uszkodzeniu plików systemowych, a jednocześnie informuje Claude'a o twoich zasadach bezpieczeństwa.
Budowa inteligentnego hooka powiadomień dla Claude Code
Zbudujmy ulepszony hook powiadomień, który łączy przetwarzanie wejścia z mądrym sterowaniem wyjściem. Rozwiązuje to problem hałasu z naszego pierwotnego hooka, który alertował przy każdej zmianie pliku:
{"hooks":{"PostToolUse":[{"matcher":"Write|Edit","hooks":[{"type":"command","command":"python3 ~/.claude/smart_notify.py"}]}]}}Obsługiwane przez
Utwórz skrypt powiadomień w ~/.claude/smart_notify.py:
#!/usr/bin/env python3import json
import sys
import os
import subprocess
# Read the hook input
input_data = json.load(sys.stdin)
tool_input = input_data.get("tool_input",{})
file_path = tool_input.get("file_path","")# Categorize file importance
important_extensions =[".py",".js",".ts",".java",".cpp"]
config_files =["Dockerfile","requirements.txt","package.json"]
is_code =any(file_path.endswith(ext)for ext in important_extensions)
is_config =any(filename in file_path for filename in config_files)if is_code:# Important: notify and logprint(f"Code file modified: {os.path.basename(file_path)}")
subprocess.run(["say","Code updated"], check=False)# Mac
sys.exit(0)# Show message in transcriptelif is_config:# Very important: louder notificationprint(f"Configuration file changed: {os.path.basename(file_path)}")
subprocess.run(["say","Configuration updated - review changes"], check=False)
sys.exit(0)else:# Not important: silent success
sys.exit(0)Obsługiwane przez
Ten hook odczytuje wejście, aby zrozumieć, który plik zmodyfikowano, podejmuje decyzje o wadze powiadomienia na podstawie typu pliku, używa stdout do logowania ważnych zmian w transkrypcie, wyzwala różne alerty dźwiękowe w zależności od typu pliku i zawsze kończy się kodem 0, ponieważ to działania informacyjne, a nie blokujące.
Połączenie analizy wejścia i kontroli wyjścia tworzy hooka, który zachowuje się inteligentnie w zależności od kontekstu, zapewniając właściwy poziom informacji zarówno tobie, jak i Claude Code. Zamiast irytujących powiadomień dla każdego pliku tymczasowego, słyszysz tylko o zmianach istotnych dla twojego projektu.
Pamiętaj, że w tym przykładzie użyto polecenia say, które jest dostępne w macOS. Na Linuksie możesz użyć notify-send, a w Windows polecenia PowerShell, aby uzyskać podobne powiadomienia.
Częste potknięcia przy hookach Claude Code
Kilka rzeczy potrafi utrudnić życie w pierwszym tygodniu pracy z hookami:
Instrukcje echo w profilach powłoki psują hooki. Hooki działają w nieinteraktywnych powłokach, które źródłują twój ~/.zshrc lub ~/.bashrc. Jeśli profil ma bezwarunkowe echo, dopisują one tekst do stdout hooka i psują parsowanie JSON. Owiń je warunkiem sprawdzającym powłokę interaktywną:
Hooki Stop mogą zapętlać się bez końca. Hook Stop, który wychodzi z kodem 2, zmusza Claude'a do dalszej pracy. Jeśli twój skrypt nie sprawdza stop_hook_active z wejścia JSON i nie kończy się czysto, gdy jest true, będziesz się kręcić aż do timeoutu. Zawsze dodawaj wczesną gardę.
Matchery rozróżniają wielkość liter.bash nie dopasuje Bash. Używaj dokładnej nazwy narzędzia, jak w Claude Code.
Wyjście jest ograniczone do 10 000 znaków. Jeśli hook wygeneruje więcej, zostanie to ucięte przed wstrzyknięciem do kontekstu Claude'a. Trzymaj stdout zwięzłe i przekazuj tylko to, co model potrzebuje, by działać.
Mylenie hooków zespołowych i osobistych. Hooki w .claude/settings.json są współdzielone z zespołem (skomituj je do repo). Dla prywatnych hooków, których nie chcesz udostępniać, użyj .claude/settings.local.json, który jest domyślnie ignorowany przez gita.
Hooki vs. umiejętności: kiedy używać których
Hooki i Claude Skills mają różne cele i najlepiej działają razem. Skill to plik markdown, który uczy Claude'a jak coś robić (procedury, konwencje, szablony). Hook to polecenie powłoki, które egzekwuje regułę w sposób deterministyczny, niezależnie od decyzji Claude'a.
Różnica jest istotna: skill to sugestia, którą model może zignorować pod presją; hook odpala się za każdym razem. Napisz skill, by udokumentować procedurę migracji zespołu. Napisz hook PostToolUse, by uruchamiać linter migracji na każdym pliku .sql, który zapisze Claude. Skill sprawia, że Claude jest kompetentny; hook sprawia, że jest rozliczalny.
Potrzeba
Użyj skill
Użyj hooka
Wiedza proceduralna ładowana przez Claude'a, gdy jest potrzebna
Tak
Nie
Twarde egzekwowanie, którego nie da się pominąć
Nie
Tak
Deterministyczne uruchamianie za każdym razem
Nie
Tak
Odporność na „złe zachowanie” modelu
Nie
Tak
Zaawansowane wzorce dla hooków Claude Code
Poza podstawowymi powiadomieniami i logowaniem hooki mogą rozwiązywać realne problemy workflowu deweloperskiego, z którymi zespoły mierzą się na co dzień. Oto kilka pomysłów do adaptacji w twoich projektach.
Najlepsze jest to, że wcale nie musisz budować tych hooków ręcznie. Możesz po prostu podać Claude Code jeden z poniższych pomysłów na prompt wraz z dokumentacją hooków, a wygeneruje on odpowiedni kod i JSON do konfiguracji.
Każdy z tych wzorców można dostosować do twoich narzędzi i workflowu. Zacznij od tych, które rozwiązują twoje największe codzienne bolączki, a potem rozszerzaj automatyzację, gdy poczujesz się pewniej w tworzeniu hooków.
Zaawansowane hooki dla bezpieczeństwa i zgodności
Hooki świetnie wymuszają zasady bezpieczeństwa i standardy zgodności. Oto cztery przypadki użycia.
Skaner kluczy API
Problem: Przypadkowe commitowanie sekretów do systemu kontroli wersji
Wyzwalacze: Przed zapisem dowolnego pliku
Rozwiązanie: Skanowanie treści plików w poszukiwaniu kluczy API, tokenów i haseł za pomocą wzorców regex
„Utwórz skrypt Pythona, który odczytuje wejściowy JSON hooka, wyciąga treść pliku i używa wzorców regex do wykrywania popularnych formatów sekretów, jak api_key=, token: czy password=. Dla każdego podejrzanego dopasowania wykonaj lokalną weryfikację i nigdy nie wysyłaj surowych sekretów na zewnątrz.
Wysyłaj do API Anthropic tylko zamaskowane fragmenty (np. zachowaj 4 znaki prefiksu/sufiksu) lub hashe, by analizować podejrzane ciągi i rozstrzygnąć, czy to faktyczne sekrety, czy nazwy zmiennych. Zakończ kodem 2 i przekaż Claude'owi informację o wykrytych sekretach oraz bezpieczniejszych alternatywach.”
Egzekwowanie nagłówków licencyjnych
Problem: Projekty open source z brakującymi wymaganymi nagłówkami licencji w nowych plikach
Wyzwalacze: Przed zapisem plików źródłowych
Rozwiązanie: Walidacja, że nowe pliki .py, .js, .java zawierają właściwy tekst licencji
„Przeanalizuj wejście hooka, aby pobrać treść pliku, i sprawdź, czy w pierwszych 10 liniach znajduje się tekst licencji, używając dopasowania łańcuchów. Dla bardziej zaawansowanej walidacji wyślij nagłówek pliku do Claude'a przez API Anthropic, aby potwierdzić obecność właściwych informacji o prawach autorskich i licencji. Zablokuj tworzenie pliku kodem 2, jeśli brakuje nagłówków, i dostarcz Claude'owi właściwy szablon licencji do dodania.”
Strażnik plików produkcyjnych
Problem: Przypadkowa modyfikacja krytycznych plików konfiguracyjnych systemu
Wyzwalacze: Przed edycją plików w wrażliwych katalogach
Rozwiązanie: Blokowanie zmian w /etc/, nginx.conf, database.yml i innych krytycznych konfiguracjach
„Wyciągnij ścieżkę pliku z wejścia JSON hooka i sprawdź, czy pasuje do wzorców, jak /etc/, production.yml czy innych krytycznych nazw. Użyj API Claude'a, aby przeanalizować ścieżkę i stwierdzić, czy to plik konfiguracyjny mogący wpłynąć na systemy produkcyjne. Zakończ kodem 2 i przekaż konkretne wskazówki o bezpieczniejszych praktykach, gdy wykryto niebezpieczne ścieżki.”
Optymalizator obrazów
Problem: Duże pliki obrazów spowalniające aplikacje i repozytoria
Wyzwalacze: Po dodaniu nowych plików graficznych
Rozwiązanie: Kompresja plików PNG/JPEG przy zachowaniu jakości
„Przeanalizuj wejście hooka, aby pobrać ścieżkę pliku, i sprawdź po rozszerzeniu, czy to obraz. Uruchom narzędzia do kompresji, takie jak imageoptim, lub wywołaj API TinyPNG, by skompresować obraz z zachowaniem jakości. Zaloguj wyniki kompresji do stdout, aby zobaczyć oszczędność rozmiaru pliku w transkrypcie Claude'a.”
Zaawansowane hooki dla automatyzacji kontroli wersji
Workflowy Git i dokumentacja to obszary, w których hooki też są bardzo przydatne. Oto kilka pomysłów.
Walidator gałęzi Gita
Problem: Członkowie zespołu przypadkowo wypychający zmiany na chronione gałęzie
Wyzwalacze: Przed dowolnym zapisem lub edycją pliku
Rozwiązanie: Sprawdzanie bieżącej gałęzi Gita i blokowanie operacji na main/master/production
„Użyj prostego polecenia bash git branch --show-current, by pobrać nazwę bieżącej gałęzi i porównać ją z listą chronionych. Jeśli jesteś na chronionej gałęzi, zakończ kodem 2 i wyślij Claude'owi komunikat o zasadach ochrony gałęzi. Dla złożonych reguł nazewnictwa użyj API Claude'a, aby przeanalizować nazwy gałęzi i ocenić dopasowanie do wzorców ochrony.”
Inteligentny auto-commit
Problem: Zapominanie o commitach lub słabe wiadomości commitów
Wyzwalacze: Po każdej modyfikacji pliku
Rozwiązanie: Automatyczne stage'owanie i commitowanie zmian z opisami generowanymi przez AI
„Odczytaj zmodyfikowane ścieżki plików z wejścia hooka, uruchom git diff, aby pobrać zmiany, i wyślij diff do API Claude'a z prośbą o zwięzłą wiadomość commita. Użyj wygenerowanej wiadomości z poleceniami git add i git commit, by automatycznie zatwierdzić zmiany. Uwzględnij nazwy plików i typy zmian w prośbie do API, by wiadomości przestrzegały standardu conventional commits.”
Generator dokumentacji
Problem: Dokumentacja API wypadająca z synchronizacji ze zmianami w kodzie
Wyzwalacze: Po modyfikacji plików interfejsów (kontrolery, modele, API)
Rozwiązanie: Automatyczne uruchamianie narzędzi dokumentacyjnych, takich jak JSDoc, Sphinx czy generatory OpenAPI
„Sprawdź ścieżkę zmodyfikowanego pliku, aby rozpoznać, czy to endpoint API, model lub plik interfejsu, używając dopasowań wzorców. Wyślij treść pliku do API Claude'a z prośbą o wyłuskanie zmian w API i wygenerowanie aktualizacji dokumentacji. Uruchom odpowiednie narzędzie dokumentacyjne (jsdoc, sphinx-build itd.) i automatycznie zatwierdź zaktualizowaną dokumentację.
Zaawansowane hooki dla współpracy i integracji workflowu
Wreszcie, hooki mogą pomóc utrzymać wszystkich członków zespołu na bieżąco.
Integracja ze Slackiem
Problem: Zespół nie jest świadomy ważnych zmian w współdzielonych bazach kodu
Wyzwalacze: Gdy wysyłane są powiadomienia o istotnych operacjach
Rozwiązanie: Wysyłanie sformatowanych wiadomości na kanały zespołowe z nazwami plików i podsumowaniami zmian
„Wyciągnij informacje o plikach z wejścia hooka i przefiltruj pod kątem ważnych typów, jak kod źródłowy lub pliki konfiguracyjne. Użyj API Claude'a do wygenerowania zrozumiałego podsumowania zmian na podstawie nazw i typów plików. Wyślij sformatowaną wiadomość do Slacka, używając adresów webhook z wzmiankami o członkach zespołu przy krytycznych zmianach.”
Wyzwalacze: Gdy zachodzą określone zdarzenia (zmiany konfiguracji, modyfikacje plików wdrożeniowych)
Rozwiązanie: Wywoływanie zewnętrznych API do uruchamiania buildów, wdrożeń i innych procesów automatycznych
„Porównaj ścieżkę zmodyfikowanego pliku do wzorców typu Dockerfile, package.json lub konfiguracji wdrożeniowych, by zdecydować, czy uruchomić CI/CD. Użyj biblioteki requests w Pythonie, aby wywołać webhooki z nagłówkami autoryzacji i danymi o zmianach. Dołącz ścieżki plików i metadane zmian do ładunku webhooka, by systemy zewnętrzne mogły inteligentnie zdecydować, co budować lub wdrażać.”
Aktualizator strony statusu
Problem: Klienci nieświadomi prac konserwacyjnych lub wdrożeń
Wyzwalacze: Gdy modyfikowane są pliki wdrożeniowe lub infrastrukturalne
Rozwiązanie: Aktualizacje stron statusów usług informujące o pracach konserwacyjnych
„Przeanalizuj wejście hooka pod kątem zmian w plikach infrastruktury, takich jak manifesty Kubernetes czy konfiguracje Terraform, używając wzorców ścieżek. Wygeneruj komunikaty o konserwacji przy pomocy API Claude'a na podstawie typu wykrytych zmian infrastruktury. Wyślij aktualizacje statusu do usług typu StatusPage.io lub PagerDuty przy użyciu ich REST API z odpowiednimi typami incydentów i szacowanym czasem trwania.”
Powiadamiacz statusu zespołu
Problem: Konflikty, gdy wielu deweloperów nieświadomie pracuje nad tymi samymi funkcjami
Wyzwalacze: Przy rozpoczęciu nowej sesji Claude Code
Rozwiązanie: Powiadamianie kanałów zespołowych, że zaczynasz pracę nad konkretnym projektem lub komponentem
„Odczytaj katalog projektu z wejścia hooka i użyj API Claude'a, by przeanalizować ostatnie pliki lub historię gita i zrozumieć, nad jaką pracą trwają działania. Wyślij sformatowaną wiadomość do kanałów komunikacji zespołu z twoim imieniem, nazwą projektu i obszarem prac. Dołącz przewidywany czas pracy i zaproś członków zespołu do koordynacji, jeśli pracują nad powiązanymi funkcjami.”
Na koniec
Hooki Claude Code zamieniają nieprzewidywalnych asystentów AI w zautomatyzowane workflowy, które uruchamiają się dokładnie wtedy, gdy ich potrzebujesz. W tym tutorialu nauczyłeś się konfigurować hooki zarówno przy pomocy interaktywnego polecenia /hooks, jak i ręcznej konfiguracji, rozumieć dane wejściowe JSON napędzające inteligentną automatyzację oraz kontrolować zachowanie Claude'a za pomocą kodów wyjścia i ustrukturyzowanych wyjść.
Omówione praktyczne wzorce obejmują walidatory bezpieczeństwa blokujące niebezpieczne operacje i inteligentne powiadomienia redukujące hałas. Te przykłady pokazują, jak hooki rozwiązują realne problemy deweloperskie, jednocześnie dając ci pełną kontrolę nad asystentem AI. Skoro znasz już podstawy, możesz budować automatyzację dopasowaną do potrzeb workflowu twojego zespołu.
Aby dowiedzieć się więcej o pracy z narzędziami AI, sprawdź kurs DataCamp Understanding Prompt Engineering, który omawia strategie promptowania współgrające z rozwojem hooków. Dla szerszych umiejętności w AI codingu wypróbuj naszIntermediate ChatGPT, aby rozwinąć umiejętności czyniące asystentów AI bardziej niezawodnymi partnerami w twoim workflowie deweloperskim.
Claude Code Hooks — FAQ
Czym są hooki Claude Code?⌄
Hooki Claude Code to automatyczne wyzwalacze wykonujące polecenia powłoki, gdy w twojej sesji Claude Code wystąpią określone zdarzenia. Rozwiązują problem, w którym Claude pisze dobry kod, ale zapomina o ważnych krokach, jak formatowanie, uruchamianie testów czy kontrola bezpieczeństwa. Zamiast ręcznie przypominać Claude'owi za każdym razem, hooki automatyzują te przypomnienia, uruchamiając polecenia automatycznie: na przykład formatując kod Pythona po jego zapisie przez Claude'a, uruchamiając testy po modyfikacjach lub blokując niebezpieczne zmiany w wrażliwych plikach. Hooki monitorują twoją sesję, wykrywają pasujące zdarzenia i wykonują skonfigurowane polecenia z dostępem do szczegółowego kontekstu tego, co właśnie zrobił Claude.
Jak używać hooków w Claude Code?⌄
Możesz skonfigurować hooki na dwa sposoby. Najłatwiej użyć interaktywnego polecenia /hooks w Claude Code, które przeprowadzi cię przez wybór zdarzenia (np. PostToolUse), wzorca matchera (np. Write dla zapisów plików) i polecenia (np. python -m black .). Alternatywnie możesz ręcznie edytować konfigurację w ~/.claude/settings.json (globalnie) lub .claude/settings.json (dla projektu), aby zdefiniować hooki w JSON. Po konfiguracji hooki są automatycznie ładowane i aktywne. Możesz je przeglądać, modyfikować lub przeładowywać w dowolnym momencie, uruchamiając ponownie /hooks lub restartując Claude Code.
Jaka jest różnica między hookami PreToolUse i PostToolUse?⌄
PreToolUse uruchamia się przed wykonaniem akcji przez Claude'a (np. zapisem lub edycją pliku), co czyni go idealnym do walidacji i blokowania niebezpiecznych operacji. Możesz sprawdzić, co Claude zamierza zrobić, i zatrzymać to, wychodząc z kodem 2. Hooki PostToolUse działają po zakończeniu akcji, dzięki czemu świetnie nadają się do zadań porządkowych, takich jak formatowanie kodu, uruchamianie testów czy logowanie. Używaj PreToolUse, gdy potrzebujesz kontroli prewencyjnej, a PostToolUse, gdy potrzebujesz automatyzacji reaktywnej.
Jak przekazać do skryptu hooka informację o tym, co zrobił Claude?⌄
Claude Code wysyła szczegółowe informacje przez standardowe wejście (stdin) jako JSON, zawierające kontekst, taki jak ścieżka do pliku, treść do zapisu, ID sesji i więcej. Twój skrypt hooka odczytuje ten JSON używając json.load(sys.stdin) w Pythonie lub podobnych metod w innych językach. Ten ładunek JSON pozwala hookowi podejmować inteligentne decyzje, np. formatować tylko pliki Pythona po sprawdzeniu rozszerzenia lub blokować modyfikacje określonych katalogów po sprawdzeniu ścieżki pliku.
Co robi kod wyjścia 2 i kiedy go używać?⌄
Kod wyjścia 2 informuje Claude Code, że operacja ma zostać zablokowana, i wysyła twój komunikat o błędzie (zapisany na stderr) bezpośrednio do Claude'a. Claude może następnie wyjaśnić problem i zaproponować alternatywy. Używaj kodu 2 do kontroli bezpieczeństwa (blokowanie niebezpiecznych modyfikacji plików), walidacji zgodności (brak wymaganych nagłówków) lub bramek bezpieczeństwa (zapobieganie commitom na chronione gałęzie). Dla hooków informacyjnych, które nie powinny blokować operacji, używaj kodu 0 lub innych kodów.
Czy hooki Claude Code mogą powodować nieskończone pętle?⌄
Tak, hooki Stop mogą zapętlać się bez końca, jeśli nie są ostrożnie obsłużone. Hook Stop, który wychodzi z kodem 2, zmusza Claude'a do dalszej pracy. Jeśli twój skrypt nie sprawdza stop_hook_active z wejściowego JSON i nie kończy się poprawnie, gdy jest true, Claude odpowie, znów wyzwoli hook Stop, znów zostanie zablokowany i tak w kółko aż do timeoutu. Zawsze dodawaj na początku skryptów Stop warunek sprawdzający to pole i natychmiast zwracaj kod 0, gdy jest już aktywne.
Jakie typy hooków obsługuje Claude Code poza poleceniami powłoki?⌄
Claude Code obsługuje pięć typów hooków: command (polecenia powłoki, najczęstsze), http (POST na URL dla integracji webhook), mcp_tool (wywołanie narzędzia na podłączonym serwerze MCP), prompt (wysłanie promptu do modelu Claude do jednorazowej ewaluacji) oraz agent (uruchomienie subagenta, który może używać narzędzi do weryfikacji warunków). W większości przypadków wystarczą hooki command. Szczegóły każdego typu znajdziesz w oficjalnej dokumentacji hooków.
Podczas pracy z Claude Code szybko zauważysz typowy problem: pisze dobry kod, ale pomija ważne kroki, jak formatowanie, uruchamianie testów czy przestrzeganie zasad bezpieczeństwa. Kończy się to ciągłym powtarzaniem tych samych przypomnień. Hooki Claude Code pozwalają zautomatyzować te przypomnienia, automatycznie uruchamiając polecenia powłoki w określonych momentach twojego workflowu.
W tym tutorialu pokazuję, jak skonfigurować hooki do formatowania kodu, uruchamiania testów, wysyłania powiadomień i ochrony plików. Zbudujesz system automatyzacji, który egzekwuje twoje standardy deweloperskie bez ręcznej ingerencji.
Jeśli chcesz dowiedzieć się więcej o Claude Code, zajrzyj do naszego poradnika najlepsze praktyki Claude Code oraz tutorialu Claude Skills. Jeśli chcesz nauczyć się konfigurowania instrukcji na poziomie projektu, zobacz poradnik pisania pliku CLAUDE.md.
TL;DR
Hooki Claude Code to polecenia powłoki uruchamiane automatycznie w określonych punktach cyklu życia Claude Code (przed/po wywołaniach narzędzi, przy starcie sesji, gdy Claude się zatrzymuje)
Konfiguruj je w
.claude/settings.json(projekt) lub~/.claude/settings.json(globalnie) za pomocą JSON z wydarzeniami, matcherami i poleceniamiUżywaj hooków
PreToolUse, by blokować niebezpieczne operacje zanim do nich dojdzie (kod wyjścia 2 = blokada)Używaj hooków
PostToolUsedo zadań porządkowych, jak formatowanie, lintowanie lub uruchamianie testów po tym, jak Claude zapisze kodHooki otrzymują kontekst w formacie JSON na
stdini przekazują wyniki przez kody wyjścia,stdoutorazstderrCzym są hooki Claude Code?
Hooki Claude Code to polecenia powłoki uruchamiane automatycznie, gdy w twojej sesji kodowania z AI wystąpią określone zdarzenia. Pomyśl o nich jak o automatycznych wyzwalaczach, które odpalają twoje skrypty w precyzyjnych momentach—zanim Claude zapisze plik, po uruchomieniu polecenia albo gdy wyśle ci powiadomienie.
System działa, monitorując działania Claude Code i dopasowując je do reguł zdefiniowanych w pliku konfiguracyjnym. Gdy nastąpi dopasowanie, twoje polecenie uruchamia się z dostępem do kontekstu tego, co właśnie się stało. Daje ci to kontrolę nad zachowaniem Claude'a i pozwala automatyzować powtarzalne zadania, które w innym wypadku wymagałyby ręcznej pracy.
Oto podstawowy hook, który uruchamia formatter kodu za każdym razem, gdy Claude zapisze plik Pythona:
Ten hook ma trzy części:
Zdarzenie:
PostToolUse(po zakończeniu działania przez Claude'a)Matcher:
Write(tylko przy zapisie plików)Polecenie:
python -m black .(sformatuj pliki Pythona w bieżącym katalogu)Hook otrzymuje szczegółowe informacje o tym, co właśnie zrobił Claude, poprzez dane JSON wysyłane na wejście skryptu, dzięki czemu możesz tworzyć bardziej zaawansowaną automatyzację reagującą na konkretne zmiany plików.
Jeśli chcesz pójść dalej z automatyzacją w Claude Code, nasz tutorial Claude Code Routines pokazuje, jak planować cykliczne uruchamianie hooków i agentów w chmurze.
Zobaczmy teraz, jak stworzyć hooki od zera i zarejestrować je w Claude Code.
Wymagania wstępne
Zanim zaczniesz, potrzebujesz kilku rzeczy:
Zainstalowany i działający Claude Code: Powinieneś swobodnie korzystać z Claude Code przy podstawowych zadaniach programistycznych
Obeznanie z wierszem poleceń: Hooki uruchamiają polecenia powłoki, więc musisz znać podstawowe polecenia terminala w swoim systemie operacyjnym
Dostęp do edytora tekstu: Będziesz edytować pliki konfiguracyjne JSON, aby ustawić hooki
Katalog projektu: Projekt, w którym możesz bezpiecznie testować hooki, nie ryzykując ważnej pracy
Nie musisz być ekspertem od skryptów powłoki, ale znajomość poleceń takich jak
ls,cdoraz podstawowych operacji na plikach ułatwi śledzenie przykładów. Jeśli dopiero zaczynasz z bashem lub terminalem, polecam nasz kurs Introduction to Shell.Pierwsze kroki z hookami Claude Code
Skoro już wiesz, czym są hooki, skonfigurujmy twoją pierwszą automatyzację. Proces polega na wyborze właściwego zdarzenia, skonfigurowaniu prostej reguły i przetestowaniu jej podstawowym poleceniem.
Zrozumienie zdarzeń hooków
Claude Code udostępnia ponad 25 zdarzeń hooków. Tabela poniżej obejmuje 10, których będziesz używać najczęściej. Pełną listę znajdziesz w oficjalnej dokumentacji hooków.
PreToolUseiPostToolUseto najczęstsze zdarzenia.PreToolUseuruchamia się, zanim Claude wykona akcję, taką jak zapis pliku czy uruchomienie polecenia, dzięki czemu idealnie nadaje się do walidacji lub blokowania niebezpiecznych operacji.PostToolUsedziała po zakończeniu akcji i świetnie sprawdza się w zadaniach porządkowych, takich jak formatowanie kodu czy uruchamianie testów.UserPromptSubmitwyzwala się, gdy wysyłasz prompt do Claude'a, zanim zacznie go przetwarzać. Możesz go użyć do dodawania kontekstu do rozmowy lub walidacji, czy prompty spełniają określone wymagania.Notificationdziała, gdy Claude wysyła alerty, np. prosi o zgodę na uruchomienie polecenia lub potrzebuje twojego wkładu.PermissionRequestwyzwala się, gdy Claude Code wyświetla okno zgody, co pozwala automatycznie zatwierdzać lub odrzucać prośby w imieniu użytkownika.StopiSubagentStopwyzwalają się, gdy Claude kończy odpowiedź, co jest przydatne do finalnych kontroli lub generowania raportów. Różnica jest taka, żeStopodpala się po zakończeniu ogólnej odpowiedzi Claude'a, aSubagentStopwtedy, gdy pomocnik uruchomiony przez narzędzie („subagent”) zakończy swoją pracę.Pozostałe zdarzenia,
PreCompact,SessionStartiSessionEnd, dotyczą sytuacji specyficznych dla cyklu życia.PreCompacturuchamia się tuż przed skróceniem historii rozmowy. „SessionStart” odpala się na początku nowej sesji, aby ustawić domyślne wartości, aSessionEndwyzwala się przy zamykaniu sesji, umożliwiając sprzątanie lub końcowe raportowanie.Nazwa zdarzenia
Moment wyzwolenia
Główne zastosowania
PreToolUseZanim Claude wykona akcję (np. zapisze plik, uruchomi polecenie).
Walidacja akcji lub blokowanie niebezpiecznych operacji.
PostToolUsePo zakończeniu akcji przez Claude'a.
Zadania porządkowe, formatowanie kodu lub uruchamianie testów.
UserPromptSubmitGdy wysyłasz prompt, zanim rozpocznie się przetwarzanie.
Dodawanie kontekstu do rozmowy lub walidacja promptów.
NotificationGdy Claude wysyła alerty (np. prosi o dane lub zgodę).
Obsługa alertów systemowych i próśb o uwagę użytkownika.
PermissionRequestGdy wyświetlane jest okno zgody.
Automatyczne zatwierdzanie lub odrzucanie próśb w imieniu użytkownika.
StopGdy Claude kończy swoją ogólną odpowiedź.
Końcowe sprawdzenia lub generowanie raportów dla głównej odpowiedzi.
SubagentStopGdy pomocnik uruchomiony przez narzędzie ("subagent") kończy pracę.
Końcowe sprawdzenia specyficzne dla aktywności subagenta.
PreCompactTuż przed skróceniem historii rozmowy.
Zarządzanie porządkowaniem rozmowy i zachowaniem kontekstu.
SessionStartNa początku nowej sesji.
Inicjalizacja i ustawianie domyślnych wartości.
SessionEndGdy sesja się zamyka.
Końcowe sprzątanie lub raportowanie na koniec sesji.
Zrozumienie matcherów
Matchery to filtry decydujące, które działania Claude Code wyzwolą hook. Technicznie są to łańcuchy interpretowane jako wyrażenia regularne, więc możesz używać dopasowań dokładnych lub bardziej elastycznych wzorców.
Najbardziej przydatne są proste matchery, jak
Write(odpala się przy zapisie pliku) czyEdit(odpala się przy edycji treści), oraz kombinacje typuEdit|Write, by objąć wiele akcji.Możesz też używać prefiksów typu
Notebook.*, aby dopasować wszystkie narzędzia zaczynające się od „Notebook”. Jeśli chcesz, by hook odpalał się przy każdej akcji, użyj uniwersalnego regexu.*, pustego łańcucha ("") lub pozostawmatcherpusty.Ponieważ matchery rozróżniają wielkość liter i działają tylko na nazwach akcji, najlepiej utrzymywać je możliwie precyzyjne. Gdy potrzebujesz dokładniejszej kontroli (np. ograniczyć hook do określonych typów plików), możesz odczytać ładunek JSON przekazywany do hooka i zastosować własne regexy lub warunki.
Tworzenie pierwszego hooka w Claude Code
Claude Code oferuje dwa sposoby konfiguracji hooków: przez interaktywne polecenie
/hookslub poprzez bezpośrednią edycję plików konfiguracyjnych. Zacznijmy od podejścia interaktywnego, bo jest bardziej przyjazne na start.Użycie polecenia
/hooks:Otwórz Claude Code i wpisz /hooks w interfejsie czatu
Wybierz zdarzenie wyzwalające (dla tego przykładu wybierz
PostToolUse)W menu wybierz „Add new hook”
Ustaw wzorzec matchera (wpisz
Write, aby celować w zapis plików)Wpisz swoje polecenie:
Mac:
say "Task complete"Windows:
powershell -c [console]::beep()Linux:
spd-say "Task complete"Zapisz konfigurację i wróć do Claude Code, naciskając Esc trzy razy
Polecenie
/hooksautomatycznie zaktualizuje twój plik ustawień i przeładuje konfigurację. Możesz też w każdej chwili użyć/hooks, aby podejrzeć istniejące hooki lub wprowadzić zmiany.Jeśli wolisz edycję plików konfiguracyjnych, hooki znajdują się w
~/.claude/settings.jsondla ustawień globalnych, w.claude/settings.jsonw katalogu projektu (skomituj do repo, aby współdzielić hooki w zespole) lub w.claude/settings.local.jsondla prywatnych hooków, które domyślnie są ignorowane przez gita. Dla naszego przykładu wyglądałoby to tak:Po ręcznej edycji pliku zrestartuj Claude Code lub użyj polecenia
/hooks, aby przeładować konfigurację. Teraz za każdym razem, gdy Claude zapisze plik, usłyszysz powiadomienie dźwiękowe.Testowanie hooka
Zanim pójdziesz dalej, sprawdź, czy hook faktycznie działa:
Poproś Claude'a o zapis dowolnego pliku Pythona (np. „Utwórz plik hello.py, który wypisuje hello world”)
Powinieneś usłyszeć powiadomienie dźwiękowe, gdy Claude zakończy operację zapisu
Jeśli nic nie słyszysz, sprawdź transkrypt Claude Code, naciskając Ctrl-O, aby zobaczyć ewentualne komunikaty o błędach
Typowe problemy to: nieznalezione polecenie hooka, złe uprawnienia pliku lub błędy składni w pliku konfiguracyjnym
Doprowadzenie do działania tego prostego testu oszczędzi ci czasu na debugowanie przy budowaniu bardziej złożonych hooków. Jeśli właśnie ręcznie edytowałeś plik ustawień, zmieniłeś matcher lub zdarzenie, albo zainstalowałeś nowe narzędzia używane w poleceniu hooka, pomocne może być ponowne otwarcie
/hookslub restart Claude'a, by przeładować konfigurację.Ten podstawowy schemat (zdarzenie, matcher, polecenie) stanowi fundament całej automatyzacji hooków. Możesz go rozwinąć, dodając wiele poleceń uruchamianych równocześnie przy tym samym zdarzeniu. Na przykład możesz chcieć jednocześnie odtworzyć dźwięk i utworzyć kopię zapasową, gdy Claude zapisze plik.
Możesz też tworzyć osobne matchery dla różnych narzędzi w tym samym zdarzeniu, tak aby zapis pliku wyzwalał inne akcje niż edycja kodu. Wszystkie hooki pasujące do tego samego wzorca narzędzia uruchamiają się równolegle. Jeśli skonfigurujesz wiele matcherów dla tego samego zdarzenia, każdy hook uruchomi się, gdy dopasuje się jego matcher.
Praca z wejściami hooków
Gdy Claude Code wyzwala hooka, wysyła informacje o tym, co właśnie się stało, przez standardowe wejście (
stdin) — strumień danych trafiający bezpośrednio do twojego polecenia w momencie jego uruchomienia. Te dane sprawiają, że hooki są potężne, a nie tylko przypadkowo odpalanymi skryptami.Claude Code pakuje te informacje jako JSON i przekazuje je do skonfigurowanego polecenia — czy to prostego polecenia terminalowego, czy własnego skryptu.
Anatomia wejść hooków
Każdy hook otrzymuje obiekt JSON z podstawowymi polami dotyczącymi bieżącej sesji:
Przetłumaczmy każdy element:
session_id: identyfikuje bieżącą rozmowętranscript_path: wskazuje historię rozmowycwd: pokazuje katalog roboczyhook_event_name: informuje, które zdarzenie się wyzwoliłoPosiadanie tego kontekstu pozwala twoim hookom podejmować inteligentne decyzje: możesz śledzić, która rozmowa wyzwoliła akcję, w razie potrzeby uzyskać dostęp do pełnej historii czatu lub uruchamiać polecenia we właściwym katalogu.
Warianty wejść zależne od zdarzenia
Zdarzenia narzędziowe, takie jak
PreToolUseiPostToolUse, zawierają dodatkowe szczegóły o akcji — to tutaj hooki stają się naprawdę użyteczne do automatyzacji. WPreToolUsepodany jesttool_input, a wPostToolUsedodatkowotool_response:Wejście hooka zawiera
file_pathz ścieżką pliku zapisywanego lub edytowanego, acontent— dokładny tekst, który narzędzie ma zapisać. Po wykonaniu akcja narzędzia zwraca w odpowiedzi końcowyfilePath(zwróć uwagę na camelCase), aby potwierdzić, który plik faktycznie został zmieniony, oraz flagęsuccesswskazującą, czy operacja zakończyła się powodzeniem.Dzięki tym szczegółom twoje hooki mogą reagować różnie w zależności od tego, co się wydarzyło. Możesz formatować tylko pliki Pythona, tworzyć kopie zapasowe tylko ważnych katalogów czy wysyłać powiadomienia tylko przy modyfikacji określonych typów plików.
Zdarzenia takie jak
UserPromptSubmitsą prostsze, bo nie obejmują narzędzi:Zauważ, że hooki
UserPromptSubmitnie używają matcherów w konfiguracji. Wyzwalają się dla wszystkich promptów, a nie operacji narzędzi. Nadają się idealnie do logowania rozmów, automatycznego dodawania kontekstu projektowego lub walidowania promptów, zanim Claude je przetworzy.Praktyczne odczytywanie wejścia hooka
Stwórzmy hooka, który loguje każdy prompt użytkownika. Rozwiązuje to problem gubienia śladu tego, o co prosiłeś Claude'a, zwłaszcza podczas długich sesji kodowania. Najpierw konfiguracja hooka:
Następnie utwórz skrypt Pythona w
~/.claude/log_prompts.pyo następującej treści:Skrypt odczytuje dane JSON wysyłane przez Claude Code i loguje prompt wraz z kontekstem sesji. Tworzy to przeszukiwalną historię interakcji, co jest nieocenione, gdy po tygodniach chcesz przypomnieć sobie, jak rozwiązałeś dany problem.
Praca z wyjściami hooków
Po uruchomieniu twojego polecenia hook musi przekazać Claude Code informację, co się stało i czy kontynuować normalnie. Ten mechanizm kontroli zamienia hooki z prostych narzędzi do logowania w potężną automatyzację workflowu, która może sterować zachowaniem Claude'a. Dzieje się to przez trzy kanały: standardowe wyjście (
stdout), standardowe wyjście błędów (stderr) i kody wyjścia.Kanały wyjścia i kody wyjścia
Standardowe wyjście (
stdout) to zwykłe wyjście. Na przykład, jeśli coś wypiszesz, trafi to dostdout. W większości hooków to, co pojawia się w transkrypcie Claude Code po naciśnięciu Ctrl-O, dając ci zapis tego, co zrobiła automatyzacja, bez zaśmiecania głównej rozmowy.Standardowe wyjście błędów (
stderr) służy do komunikatów o błędach. Możesz pisać nastderrużywającPython:
print("message", file=sys.stderr)lubWiersz poleceń:
echo "message" >&2Kluczowa różnica polega na tym, że
stderrmoże być wysłane bezpośrednio do Claude'a do automatycznego przetworzenia, co pozwala mu reagować na problemy wykryte przez twoje hooki.Kody wyjścia mówią Claude Code, co robić dalej:
Kod wyjścia 0: Sukces (pokazuje użytkownikowi
stdout)Kod wyjścia 2: Błąd blokujący (wysyła
stderrdo Claude'a)Inne kody: Błąd nieblokujący (pokazuje
stderrużytkownikowi, ale kontynuuje)Ten system daje ci precyzyjną kontrolę, kiedy Claude ma się zatrzymać, kontynuować lub otrzymać informację zwrotną o tym, co wykryła twoja automatyzacja. Zobaczmy przykłady dla dwóch najważniejszych kodów wyjścia.
Kod wyjścia 0: Normalne działanie
Większość hooków używa kodu 0, aby wskazać, że wszystko poszło dobrze. Oto kompletny hook, który loguje operacje na plikach i powiadamia użytkownika:
Ten hook uruchamia dwie akcje: zapis do pliku logu, a potem wydruk komunikatu do transkryptu. Można to zrobić na wiele sposobów, ale to podejście jest wieloplatformowe i nie zależy od specyfiki wiersza poleceń.
Ponieważ nie ma jawnego kodu wyjścia, domyślnie jest to 0. Wydrukowana wiadomość pojawia się w transkrypcie Claude Code, dając informację zwrotną, że logowanie zadziałało. Ten wzorzec świetnie się sprawdza przy budowie ścieżek audytu lub śledzeniu zmian, jakie Claude wprowadza w twoim projekcie z czasem.
Kod wyjścia 2: Blokowanie z informacją zwrotną
Kod wyjścia 2 wysyła twój komunikat o błędzie bezpośrednio do Claude'a, pozwalając mu automatycznie zareagować. Tu hooki stają się mechanizmem bezpieczeństwa, a nie tylko automatyzacją. Oto hook, który blokuje niebezpieczne operacje na plikach:
Musisz utworzyć skrypt kontroli bezpieczeństwa w
~/.claude/security_check.py:Gdy ten hook wykryje niebezpieczną ścieżkę, wychodzi z kodem 2. Claude Code wysyła komunikat ze stderr do Claude'a, który może wytłumaczyć, dlaczego operacja została zablokowana, i zaproponować alternatywy. To zapobiega przypadkowemu uszkodzeniu plików systemowych, a jednocześnie informuje Claude'a o twoich zasadach bezpieczeństwa.
Budowa inteligentnego hooka powiadomień dla Claude Code
Zbudujmy ulepszony hook powiadomień, który łączy przetwarzanie wejścia z mądrym sterowaniem wyjściem. Rozwiązuje to problem hałasu z naszego pierwotnego hooka, który alertował przy każdej zmianie pliku:
Utwórz skrypt powiadomień w
~/.claude/smart_notify.py:Ten hook odczytuje wejście, aby zrozumieć, który plik zmodyfikowano, podejmuje decyzje o wadze powiadomienia na podstawie typu pliku, używa stdout do logowania ważnych zmian w transkrypcie, wyzwala różne alerty dźwiękowe w zależności od typu pliku i zawsze kończy się kodem 0, ponieważ to działania informacyjne, a nie blokujące.
Połączenie analizy wejścia i kontroli wyjścia tworzy hooka, który zachowuje się inteligentnie w zależności od kontekstu, zapewniając właściwy poziom informacji zarówno tobie, jak i Claude Code. Zamiast irytujących powiadomień dla każdego pliku tymczasowego, słyszysz tylko o zmianach istotnych dla twojego projektu.
Pamiętaj, że w tym przykładzie użyto polecenia
say, które jest dostępne w macOS. Na Linuksie możesz użyćnotify-send, a w Windows polecenia PowerShell, aby uzyskać podobne powiadomienia.Częste potknięcia przy hookach Claude Code
Kilka rzeczy potrafi utrudnić życie w pierwszym tygodniu pracy z hookami:
Instrukcje echo w profilach powłoki psują hooki. Hooki działają w nieinteraktywnych powłokach, które źródłują twój
~/.zshrclub~/.bashrc. Jeśli profil ma bezwarunkoweecho, dopisują one tekst do stdout hooka i psują parsowanie JSON. Owiń je warunkiem sprawdzającym powłokę interaktywną:Hooki Stop mogą zapętlać się bez końca. Hook
Stop, który wychodzi z kodem 2, zmusza Claude'a do dalszej pracy. Jeśli twój skrypt nie sprawdzastop_hook_activez wejścia JSON i nie kończy się czysto, gdy jesttrue, będziesz się kręcić aż do timeoutu. Zawsze dodawaj wczesną gardę.Matchery rozróżniają wielkość liter.
bashnie dopasujeBash. Używaj dokładnej nazwy narzędzia, jak w Claude Code.Wyjście jest ograniczone do 10 000 znaków. Jeśli hook wygeneruje więcej, zostanie to ucięte przed wstrzyknięciem do kontekstu Claude'a. Trzymaj stdout zwięzłe i przekazuj tylko to, co model potrzebuje, by działać.
Mylenie hooków zespołowych i osobistych. Hooki w
.claude/settings.jsonsą współdzielone z zespołem (skomituj je do repo). Dla prywatnych hooków, których nie chcesz udostępniać, użyj.claude/settings.local.json, który jest domyślnie ignorowany przez gita.Hooki vs. umiejętności: kiedy używać których
Hooki i Claude Skills mają różne cele i najlepiej działają razem. Skill to plik markdown, który uczy Claude'a jak coś robić (procedury, konwencje, szablony). Hook to polecenie powłoki, które egzekwuje regułę w sposób deterministyczny, niezależnie od decyzji Claude'a.
Różnica jest istotna: skill to sugestia, którą model może zignorować pod presją; hook odpala się za każdym razem. Napisz skill, by udokumentować procedurę migracji zespołu. Napisz hook
PostToolUse, by uruchamiać linter migracji na każdym pliku.sql, który zapisze Claude. Skill sprawia, że Claude jest kompetentny; hook sprawia, że jest rozliczalny.Potrzeba
Użyj skill
Użyj hooka
Wiedza proceduralna ładowana przez Claude'a, gdy jest potrzebna
Tak
Nie
Twarde egzekwowanie, którego nie da się pominąć
Nie
Tak
Deterministyczne uruchamianie za każdym razem
Nie
Tak
Odporność na „złe zachowanie” modelu
Nie
Tak
Zaawansowane wzorce dla hooków Claude Code
Poza podstawowymi powiadomieniami i logowaniem hooki mogą rozwiązywać realne problemy workflowu deweloperskiego, z którymi zespoły mierzą się na co dzień. Oto kilka pomysłów do adaptacji w twoich projektach.
Najlepsze jest to, że wcale nie musisz budować tych hooków ręcznie. Możesz po prostu podać Claude Code jeden z poniższych pomysłów na prompt wraz z dokumentacją hooków, a wygeneruje on odpowiedni kod i JSON do konfiguracji.
Każdy z tych wzorców można dostosować do twoich narzędzi i workflowu. Zacznij od tych, które rozwiązują twoje największe codzienne bolączki, a potem rozszerzaj automatyzację, gdy poczujesz się pewniej w tworzeniu hooków.
Zaawansowane hooki dla bezpieczeństwa i zgodności
Hooki świetnie wymuszają zasady bezpieczeństwa i standardy zgodności. Oto cztery przypadki użycia.
Skaner kluczy API
Problem: Przypadkowe commitowanie sekretów do systemu kontroli wersji
Wyzwalacze: Przed zapisem dowolnego pliku
Rozwiązanie: Skanowanie treści plików w poszukiwaniu kluczy API, tokenów i haseł za pomocą wzorców regex
„Utwórz skrypt Pythona, który odczytuje wejściowy JSON hooka, wyciąga treść pliku i używa wzorców regex do wykrywania popularnych formatów sekretów, jak
api_key=,token:czypassword=. Dla każdego podejrzanego dopasowania wykonaj lokalną weryfikację i nigdy nie wysyłaj surowych sekretów na zewnątrz.Wysyłaj do API Anthropic tylko zamaskowane fragmenty (np. zachowaj 4 znaki prefiksu/sufiksu) lub hashe, by analizować podejrzane ciągi i rozstrzygnąć, czy to faktyczne sekrety, czy nazwy zmiennych. Zakończ kodem 2 i przekaż Claude'owi informację o wykrytych sekretach oraz bezpieczniejszych alternatywach.”
Egzekwowanie nagłówków licencyjnych
Problem: Projekty open source z brakującymi wymaganymi nagłówkami licencji w nowych plikach
Wyzwalacze: Przed zapisem plików źródłowych
Rozwiązanie: Walidacja, że nowe pliki
.py,.js,.javazawierają właściwy tekst licencji„Przeanalizuj wejście hooka, aby pobrać treść pliku, i sprawdź, czy w pierwszych 10 liniach znajduje się tekst licencji, używając dopasowania łańcuchów. Dla bardziej zaawansowanej walidacji wyślij nagłówek pliku do Claude'a przez API Anthropic, aby potwierdzić obecność właściwych informacji o prawach autorskich i licencji. Zablokuj tworzenie pliku kodem 2, jeśli brakuje nagłówków, i dostarcz Claude'owi właściwy szablon licencji do dodania.”
Strażnik plików produkcyjnych
Problem: Przypadkowa modyfikacja krytycznych plików konfiguracyjnych systemu
Wyzwalacze: Przed edycją plików w wrażliwych katalogach
Rozwiązanie: Blokowanie zmian w
/etc/,nginx.conf,database.ymli innych krytycznych konfiguracjach„Wyciągnij ścieżkę pliku z wejścia JSON hooka i sprawdź, czy pasuje do wzorców, jak
/etc/,production.ymlczy innych krytycznych nazw. Użyj API Claude'a, aby przeanalizować ścieżkę i stwierdzić, czy to plik konfiguracyjny mogący wpłynąć na systemy produkcyjne. Zakończ kodem 2 i przekaż konkretne wskazówki o bezpieczniejszych praktykach, gdy wykryto niebezpieczne ścieżki.”Optymalizator obrazów
Problem: Duże pliki obrazów spowalniające aplikacje i repozytoria
Wyzwalacze: Po dodaniu nowych plików graficznych
Rozwiązanie: Kompresja plików PNG/JPEG przy zachowaniu jakości
„Przeanalizuj wejście hooka, aby pobrać ścieżkę pliku, i sprawdź po rozszerzeniu, czy to obraz. Uruchom narzędzia do kompresji, takie jak
imageoptim, lub wywołaj API TinyPNG, by skompresować obraz z zachowaniem jakości. Zaloguj wyniki kompresji dostdout, aby zobaczyć oszczędność rozmiaru pliku w transkrypcie Claude'a.”Zaawansowane hooki dla automatyzacji kontroli wersji
Workflowy Git i dokumentacja to obszary, w których hooki też są bardzo przydatne. Oto kilka pomysłów.
Walidator gałęzi Gita
Problem: Członkowie zespołu przypadkowo wypychający zmiany na chronione gałęzie
Wyzwalacze: Przed dowolnym zapisem lub edycją pliku
Rozwiązanie: Sprawdzanie bieżącej gałęzi Gita i blokowanie operacji na main/master/production
„Użyj prostego polecenia bash
git branch --show-current, by pobrać nazwę bieżącej gałęzi i porównać ją z listą chronionych. Jeśli jesteś na chronionej gałęzi, zakończ kodem 2 i wyślij Claude'owi komunikat o zasadach ochrony gałęzi. Dla złożonych reguł nazewnictwa użyj API Claude'a, aby przeanalizować nazwy gałęzi i ocenić dopasowanie do wzorców ochrony.”Inteligentny auto-commit
Problem: Zapominanie o commitach lub słabe wiadomości commitów
Wyzwalacze: Po każdej modyfikacji pliku
Rozwiązanie: Automatyczne stage'owanie i commitowanie zmian z opisami generowanymi przez AI
„Odczytaj zmodyfikowane ścieżki plików z wejścia hooka, uruchom
git diff, aby pobrać zmiany, i wyślij diff do API Claude'a z prośbą o zwięzłą wiadomość commita. Użyj wygenerowanej wiadomości z poleceniamigit addigit commit, by automatycznie zatwierdzić zmiany. Uwzględnij nazwy plików i typy zmian w prośbie do API, by wiadomości przestrzegały standardu conventional commits.”Generator dokumentacji
Problem: Dokumentacja API wypadająca z synchronizacji ze zmianami w kodzie
Wyzwalacze: Po modyfikacji plików interfejsów (kontrolery, modele, API)
Rozwiązanie: Automatyczne uruchamianie narzędzi dokumentacyjnych, takich jak JSDoc, Sphinx czy generatory OpenAPI
„Sprawdź ścieżkę zmodyfikowanego pliku, aby rozpoznać, czy to endpoint API, model lub plik interfejsu, używając dopasowań wzorców. Wyślij treść pliku do API Claude'a z prośbą o wyłuskanie zmian w API i wygenerowanie aktualizacji dokumentacji. Uruchom odpowiednie narzędzie dokumentacyjne (
jsdoc,sphinx-builditd.) i automatycznie zatwierdź zaktualizowaną dokumentację.Zaawansowane hooki dla współpracy i integracji workflowu
Wreszcie, hooki mogą pomóc utrzymać wszystkich członków zespołu na bieżąco.
Integracja ze Slackiem
Problem: Zespół nie jest świadomy ważnych zmian w współdzielonych bazach kodu
Wyzwalacze: Gdy wysyłane są powiadomienia o istotnych operacjach
Rozwiązanie: Wysyłanie sformatowanych wiadomości na kanały zespołowe z nazwami plików i podsumowaniami zmian
„Wyciągnij informacje o plikach z wejścia hooka i przefiltruj pod kątem ważnych typów, jak kod źródłowy lub pliki konfiguracyjne. Użyj API Claude'a do wygenerowania zrozumiałego podsumowania zmian na podstawie nazw i typów plików. Wyślij sformatowaną wiadomość do Slacka, używając adresów webhook z wzmiankami o członkach zespołu przy krytycznych zmianach.”
Dyspozytor webhooków
Problem: Ręczne wyzwalanie potoków CI/CD powodujące opóźnienia wdrożeń
Wyzwalacze: Gdy zachodzą określone zdarzenia (zmiany konfiguracji, modyfikacje plików wdrożeniowych)
Rozwiązanie: Wywoływanie zewnętrznych API do uruchamiania buildów, wdrożeń i innych procesów automatycznych
„Porównaj ścieżkę zmodyfikowanego pliku do wzorców typu
Dockerfile,package.jsonlub konfiguracji wdrożeniowych, by zdecydować, czy uruchomić CI/CD. Użyj biblioteki requests w Pythonie, aby wywołać webhooki z nagłówkami autoryzacji i danymi o zmianach. Dołącz ścieżki plików i metadane zmian do ładunku webhooka, by systemy zewnętrzne mogły inteligentnie zdecydować, co budować lub wdrażać.”Aktualizator strony statusu
Problem: Klienci nieświadomi prac konserwacyjnych lub wdrożeń
Wyzwalacze: Gdy modyfikowane są pliki wdrożeniowe lub infrastrukturalne
Rozwiązanie: Aktualizacje stron statusów usług informujące o pracach konserwacyjnych
„Przeanalizuj wejście hooka pod kątem zmian w plikach infrastruktury, takich jak manifesty Kubernetes czy konfiguracje Terraform, używając wzorców ścieżek. Wygeneruj komunikaty o konserwacji przy pomocy API Claude'a na podstawie typu wykrytych zmian infrastruktury. Wyślij aktualizacje statusu do usług typu StatusPage.io lub PagerDuty przy użyciu ich REST API z odpowiednimi typami incydentów i szacowanym czasem trwania.”
Powiadamiacz statusu zespołu
Problem: Konflikty, gdy wielu deweloperów nieświadomie pracuje nad tymi samymi funkcjami
Wyzwalacze: Przy rozpoczęciu nowej sesji Claude Code
Rozwiązanie: Powiadamianie kanałów zespołowych, że zaczynasz pracę nad konkretnym projektem lub komponentem
„Odczytaj katalog projektu z wejścia hooka i użyj API Claude'a, by przeanalizować ostatnie pliki lub historię gita i zrozumieć, nad jaką pracą trwają działania. Wyślij sformatowaną wiadomość do kanałów komunikacji zespołu z twoim imieniem, nazwą projektu i obszarem prac. Dołącz przewidywany czas pracy i zaproś członków zespołu do koordynacji, jeśli pracują nad powiązanymi funkcjami.”
Na koniec
Hooki Claude Code zamieniają nieprzewidywalnych asystentów AI w zautomatyzowane workflowy, które uruchamiają się dokładnie wtedy, gdy ich potrzebujesz. W tym tutorialu nauczyłeś się konfigurować hooki zarówno przy pomocy interaktywnego polecenia
/hooks, jak i ręcznej konfiguracji, rozumieć dane wejściowe JSON napędzające inteligentną automatyzację oraz kontrolować zachowanie Claude'a za pomocą kodów wyjścia i ustrukturyzowanych wyjść.Omówione praktyczne wzorce obejmują walidatory bezpieczeństwa blokujące niebezpieczne operacje i inteligentne powiadomienia redukujące hałas. Te przykłady pokazują, jak hooki rozwiązują realne problemy deweloperskie, jednocześnie dając ci pełną kontrolę nad asystentem AI. Skoro znasz już podstawy, możesz budować automatyzację dopasowaną do potrzeb workflowu twojego zespołu.
Aby dowiedzieć się więcej o pracy z narzędziami AI, sprawdź kurs DataCamp Understanding Prompt Engineering, który omawia strategie promptowania współgrające z rozwojem hooków. Dla szerszych umiejętności w AI codingu wypróbuj nasz Intermediate ChatGPT, aby rozwinąć umiejętności czyniące asystentów AI bardziej niezawodnymi partnerami w twoim workflowie deweloperskim.