Bez hype'u
Zacznij pisać, aby wyszukać...
nawigacjaotwórz
CtrlKszukaj
← Wszystkie notatki

Hook to trzy linie logiki między zdarzeniem a reakcją.

Hook to kod który odpala się automatycznie w reakcji na zdarzenie w cyklu życia sesji AI. Obserwuje, automatyzuje i kontroluje to, czego skille i orkiestracja nie widzą.

Udostępnij

Sesja z modelem AI trwa godzinę. W tym czasie agent wywołuje kilkanaście narzędzi, zapisuje pliki tymczasowe, modyfikuje kod i kilka razy traci wątek, gdy jego okno kontekstowe ulega kompakcji. Nikt nie pilnuje, czy pliki trafiają do właściwego workspace, ani nie zapisuje wniosków z utraconego kontekstu. System działa na ślepo - chyba że ktoś zaprogramował automatyczne reakcje na te zdarzenia.

Zdarzenie i reakcja

Systemy AI oparte o agentów mają dwa podstawowe mechanizmy działania. Skille (procedury mówią modelowi co robić) czekają pasywnie na wywołanie. Orkiestracja (koordynacja wielu agentów) aktywnie planuje, który agent ma się czym zająć. Żaden z tych mechanizmów nie widzi jednak, co dzieje się pomiędzy krokami planu. Gdy model zapisuje plik poza wyznaczonym katalogiem albo kontekst kurczy się o 80%, ani skill, ani orkiestrator tego nie zauważą. Chyba że coś nasłuchuje na takie zdarzenia.

Hook to kod, który odpala się automatycznie w reakcji na zdarzenie w cyklu życia sesji AI. Nie czeka na wywołanie jak skill - reaguje sam, gdy coś się wydarzy.

Hook podpięty pod zdarzenie SessionStart automatycznie ładuje strukturę katalogu roboczego i przypina ją do kontekstu. Model od pierwszego tokenu wie, gdzie jest i z czym pracuje.

Cykl życia sesji AI

Sesja z agentem AI to nie jest prosty cykl prompt-odpowiedź. Zaczyna się, trwa, kurczy się i kończy - każda z tych faz to zdarzenie, na które można zareagować.

Start sesji to moment na przygotowanie środowiska. Hooki mogą załadować stan z poprzedniej interakcji, dostarczyć modelowi podsumowanie ostatnich zmian w projekcie czy wczytać listę dostępnych narzędzi.

Użycie narzędzia to najczęstsze zdarzenie. Każde wywołanie funkcji, zapisu pliku, odczytu kodu czy wykonania komendy w terminalu to osobny, obserwowalny moment. Dzieli się na dwa etapy: PreToolUse (tuż przed wykonaniem) i PostToolUse (tuż po).

Kompakcja kontekstu następuje, gdy historia dialogu przekracza limit okna kontekstowego modelu. System automatycznie tworzy podsumowanie i odrzuca najstarsze fragmenty. Hook podpięty pod to zdarzenie może stworzyć “checkpoint” wiedzy, zapisując kluczowe informacje z sesji zanim znikną one z pamięci roboczej.

Koniec sesji to ostatnia szansa na działanie. Hooki mogą zapisać logi, wyczyścić pliki tymczasowe, zaktualizować status zadania w zewnętrznym systemie lub przygotować podsumowanie pracy agenta.

Anatomia hooka

Struktura hooka opiera się na trzech elementach:

  1. Zdarzenie (Event): Konkretny moment w cyklu życia sesji, który aktywuje hooka. Przykłady: SessionStart, PreToolUse, PostToolUse, SessionEnd.
  2. Warunek (Matcher): Filtr, który precyzuje, czy hook ma zareagować na dane zdarzenie. Może to być nazwa narzędzia (WriteFile), typ operacji (bash) lub wzorzec w parametrach (np. rm -rf).
  3. Akcja (Action): Kod, który zostaje wykonany, gdy zdarzenie i warunek zostaną spełnione. Może to być logowanie, modyfikacja danych, a nawet zablokowanie pierwotnej operacji.
ZdarzenieWarunek (Matcher)AkcjaCel
PostToolUseNarzędzie: WriteFileUruchom linter na zapisanym plikuAutomatyzacja
PreToolUseNarzędzie: Bash, Parametr: rm -rf /*Zablokuj wykonanie komendyKontrola
SessionStartBrakZaładuj strukturę workspace do kontekstuAutomatyzacja
PreCompactBrakZapisz kluczowe fragmenty sesji do plikuObserwacja

Trzy role hooków

Jeden mechanizm, trzy role. Różnica leży w tym, co hook robi z informacją o zdarzeniu.

Obserwacja to najbardziej pasywna rola. Hooki nasłuchują na zdarzenia - użycie narzędzi, modyfikacje plików - i zapisują je w logach. Nie ingerują w pracę agenta, a jedynie tworzą audytowalny ślad jego działań.

Automatyzacja to rola reaktywna. Hook nie czeka na polecenie - sam wykonuje rutynowe zadania w odpowiedzi na działania modelu. Gdy agent zapisuje plik z kodem, hook automatycznie uruchamia formatowanie. Gdy sesja się zaczyna, hook ładuje potrzebny kontekst.

Kontrola to najbardziej aktywna i inwazyjna rola. Hook przechwytuje zdarzenie przed jego wykonaniem (PreToolUse) i na podstawie zdefiniowanych reguł decyduje, czy na nie pozwolić. Może zablokować próbę usunięcia plików systemowych, odrzucić próbę dostępu do zasobów poza workspace lub przeprowadzić skanowanie pod kątem prompt injection. To warstwa bezpieczeństwa, której nie zapewni ani autonomia agenta, ani orkiestracja.

Hooki w ekosystemie

Mechanizm hooków staje się standardem w platformach dla agentów AI. Wspólny rdzeń: zdarzenia związane z cyklem życia sesji (SessionStart, SessionEnd) oraz użyciem narzędzi (PreToolUse, PostToolUse).

PlatformaLiczba eventówKluczowe eventyStatus
Claude Code29Session, Tool (pre/post), Agent (SubagentStart/Stop), Compact, Permission, ConfigNajbardziej dojrzały, 5 typów handlerów
Gemini CLI11BeforeTool, AfterTool, BeforeAgent, AfterAgent, SessionStart/End, PreCompress, BeforeModelWiększość synchronicznych, matcher regex
Codex CLI6SessionStart, PreToolUse, PostToolUse, PermissionRequest, UserPromptSubmit, StopHooki GA maj 2026
Windsurf12Pre/post: read code, write code, run commandSkupienie na enterprise governance
Cursor~21sessionStart/End, preToolUse, beforeShell, beforeMCP, afterFileEdit, preCompact, stopLiczne bugi zgłaszane na forum
Aider0-Filozofia Git-first, brak hooków

Podejścia są różne. Niektóre platformy, jak Aider, świadomie rezygnują z tego mechanizmu, opierając całą interakcję na operacjach Git. Inne, jak Claude Code, budują wokół hooków rozbudowany system do kontroli i obserwacji, który staje się kluczowym elementem ich architektury.

Sygnał bez pamięci

Hook niczego nie tworzy. Jego jedyną funkcją jest reakcja. Ale bez tej warstwy skille nie wiedzą co model właśnie zapisał, orkiestracja nie wie że kontekst się skurczył, a autonomiczne pętle powtarzają błędy których nikt nie zalogował.

Hook zapisuje sygnał, że coś ważnego się wydarzyło. Ale sesja AI jest efemeryczna i w końcu się kończy. Gdzie ten sygnał ma przetrwać, by system mógł się z niego uczyć następnym razem?


W newsletterze rozwijam tego rodzaju tematy głębiej. Zapisz się.