WIDEO · CLAUDE CODE · HOOKI • 8 min czytania •

Prompt to prośba. Hook to prawo.

Reguła w system prompcie jest prośbą. Model czyta ją razem z całą resztą rozmowy i zwykle jej słucha. Reguła, która ma działać za każdym razem, należy do kodu. Jej miejsce jest tam, gdzie twój kod trzyma już wywołanie narzędzia, a nic jeszcze się nie wykonało. W Claude Code i w Claude Agent SDK tym miejscem jest hook PreToolUse. Pierwszy odcinek mojej serii wideo o architekturze agentów pokazuje to na jednym zwrocie pieniędzy. Ten wpis przechodzi przez niego razem z kodem z filmu.

Odcinek 1 kanału Agentic Whiteboard, po angielsku, z angielskimi napisami. Obejrzyj na YouTube

Poznaj Bloba, agenta AI w obsłudze klienta. Na samej górze jego system promptu stoi jedna reguła: NEVER refund more than $500. Klient prosi o zwrot 2000 dolarów, a Blob odpowiada: „Sure! Refunding $2,000 now.” Blob się nie zepsuł i nie zbuntował. Zrobił to, co model językowy robi z promptem.

Odcinek trwa nieco ponad siedem minut. Otwiera Agentic Whiteboard, mój nowy kanał na YouTube o architekturze agentów. Historię niosą trzy postacie. Blob to agent. Ada prowadzi dział obsługi i odpowiada za Bloba. Kai to architekt, który go zbudował.

Dlaczego reguła w prompcie przecieka

Kai zaczyna tam, gdzie zaczyna prawie każdy. Wpisuje regułę do system promptu i ją testuje. Dziesięć próśb, potem sto, i Blob za każdym razem odmawia. Więc Kai wdraża agenta.

Model nie wykonuje system promptu tak, jak komputer wykonuje kod. Czyta prompt razem z resztą kontekstu i dopiero wtedy decyduje. Zwykle reguła wygrywa. Ale reguła to jedna linijka. Wokół niej w filmie jest klient, którego zamówienie było prezentem dla córki i przyszło zniszczone. Rozmowa ma trzydzieści siedem tur, a prośba brzmi tak, jak żaden test jej nie sformułował. Te szczegóły są zmyślone, ale każdy agent na produkcji ma swoje.

Przewodnik do egzaminu Claude Certified Architect Foundations mówi to wprost, w punkcie 1.4:

„When deterministic compliance is required (e.g., identity verification before financial operations), prompt instructions alone have a non-zero failure rate”

Po polsku: gdy zgodność ma być deterministyczna, same instrukcje w prompcie mają niezerowy odsetek błędów.

Kolejny ruch to zwykle wielkie litery. NEVER, MANDATORY, ta sama reguła trzy razy. Może błędy będą rzadsze. Do zera nie spadną. Przewodnik Anthropic o promptowaniu dodaje własne ostrzeżenie. Prompty z agresywnym tonem, na przykład „CRITICAL: You MUST use this tool when…”, mogą sprawić, że nowsze modele będą sięgać po narzędzie za często. Jako poprawkę przewodnik podaje złagodzenie tonu. Większa tablica to wciąż tylko tablica.

Gdzie postawić bramkę

Claude nigdy sam nie uruchamia narzędzi, które zdefiniujesz. Gdy chce jakiegoś użyć, zatrzymuje się z stop_reason: "tool_use". Podaje nazwę narzędzia i wybrane dane wejściowe: refund_customer, zamówienie A-1042, kwota 2000. Narzędzie uruchamia twój kod i odsyła wynik. Całą pętlę, od pierwszego bloku tool_use do end_turn, opisałem w osobnym wpisie.

W tej pętli jest szczelina. Model już zdecydował, twój kod trzyma prośbę, a pieniądze jeszcze nie wyszły. W tę szczelinę wstawiasz bramkę. To kod, który działa przed narzędziem. Nie czyta rozmowy. Nie obchodzi go prezent ani uprzejmość klienta. Czyta jedną rzecz: kwotę. 2000 to więcej niż 500, więc wywołanie zostaje odrzucone. Nie zwykle. Za każdym razem.

Kadr z odcinka: Blob niesie bilet na 2000 dolarów do zielonej bramki z pieczątką DENIED; hook czyta tool_input.amount = 2000 i pomija rozmowę, prezent i uprzejmość
Kadr z odcinka: bramka czyta kwotę i nic poza nią.

Hook PreToolUse w Agent SDK

W Claude Code i w Claude Agent SDK ta bramka ma nazwę: hook PreToolUse. Uruchamia się, gdy Claude wybrał już narzędzie i dane wejściowe, a narzędzie jeszcze nie ruszyło. Może przepuścić wywołanie albo je odrzucić i podać powód. Claude ten powód widzi. Oto hook Kaia w Pythonie, dokładnie taki jak w filmie:

Agent SDK · hook PreToolUse
async def refund_limit(input_data, tool_use_id, context):
    amount = input_data["tool_input"]["amount"]
    if amount > 500:
        return {"hookSpecificOutput": {
            "hookEventName": "PreToolUse",
            "permissionDecision": "deny",
            "permissionDecisionReason":
                "Over $500. Escalate to a human."}}
    return {}

HookMatcher(matcher="mcp__support__refund_customer",
            hooks=[refund_limit], on_failure="block")

Sam hook ma dziewięć linijek. O tym, czy naprawdę trzyma, decyduje wywołanie HookMatcher pod nim. Są w nim dwa szczegóły.

  • Matcher wskazuje jedno narzędzie. Własne narzędzie w Agent SDK działa na serwerze MCP w tym samym procesie. Dlatego jego pełna nazwa to mcp__{server_name}__{tool_name}. Bez matchera hook odpala się przy każdym narzędziu. Przy lookup_order linijka z ["amount"] rzuca błąd, bo to narzędzie nie ma kwoty.
  • on_failure="block". Domyślnie, gdy hook rzuci wyjątek, wywołanie idzie dalej do zwykłego sprawdzania uprawnień. Strażnik przepuszcza wtedy wszystko, i to akurat w przypadku, którego nikt nie przetestował. Z tą opcją strażnik, który się wywali, blokuje wywołanie. Pozwól więc błędowi polecieć dalej. Hook, który sam łapie swój błąd i zwraca {}, wcale nie zawodzi. Gdy SDK nie umie obsłużyć tej opcji, według dokumentacji zapytanie pada przy starcie i nie wysyła promptu.

W Messages API, z własną pętlą, system hooków nie jest ci potrzebny. Szczelina i tak należy do ciebie. Sprawdź dane wejściowe, zanim uruchomisz narzędzie. Jeśli łamią regułę, nie uruchamiaj go. Odeślij wynik narzędzia oznaczony jako błąd, z powodem opisanym prostymi słowami:

Messages API · własna pętla
tool_result · is_error: true
"Over $500. Escalate to a human."

Inna maszyneria, ta sama zasada. Reguła żyje w kodzie, w jedynym punkcie, przez który przechodzi każdy zwrot. Czy tę pętlę piszesz sam, czy bierzesz z SDK, to osobny wybór. Porównałem już, co samo API, Agent SDK i CLI zostawiają twojemu kodowi.

PRACODAWCA NIE JEST PARTNEREM?

Anthropic wpuszcza na egzaminy tylko osoby z organizacji w Claude Partner Network. Dołącz do naszego kolektywu konsultantów AI i podejdź do wszystkich czterech egzaminów przez naszą organizację partnerską.

Sam kod wyjścia 1 nie blokuje

Claude Code potrafi też uruchomić hook jako polecenie powłoki. Tu czeka jedna pułapka. Żeby zablokować, polecenie kończy się kodem 2 albo zwraca JSON z decyzją deny. Sam kod wyjścia 1 nie blokuje. Domyślnie to błąd nieblokujący, a wywołanie idzie dalej.

Claude Code · hook jako polecenie
exit 2                      → blocked ✓
permissionDecision: "deny"  → blocked ✓
exit 1 alone                → call goes ahead ✗

Dokumentacja hooków mówi to wprost: „If your hook is meant to enforce a policy, use exit 2.” Hook może też blokować, gdy sam zawiedzie. Służy do tego ustawienie onFailure: "block", i wtedy blokują także inne kody wyjścia. Bez tego ustawienia strażnik z exit 1 przejdzie pokaz i zawiedzie na produkcji.

Droga przez JSON ma własną pułapkę. Dla PreToolUse pole nazywa się hookSpecificOutput.permissionDecision. Pole decision na najwyższym poziomie jest dla tego zdarzenia przestarzałe. Dokumentacja ostrzega też przed błędnym JSON-em. Jeśli hook zwróci kod 0 i JSON niezgodny ze schematem, akcja pójdzie dalej.

Co po odmowie

Zwrot jest zablokowany. Bramka, która tylko trzaska drzwiami, to połowa projektu. Blob wciąż rozmawia ze zdenerwowanym klientem. Tu liczy się powód. Hook Kaia nie mówi samego „nie”. Mówi: „Over $500. Escalate to a human.” Kai dał też Blobowi jeszcze jedno narzędzie, escalate_to_human. Blob wywołuje je z krótkim podsumowaniem:

Następne wywołanie Bloba
escalate_to_human({
  "order_id": "A-1042",
  "summary": "Broken gift,
    $2,000 requested, over the limit."
})

Sprawa trafia do Ady, która naprawdę może ją zatwierdzić. Klient słyszy prawdę: „I can't approve this myself, so I've passed it to a teammate who can.” Czyli: sam tego nie zatwierdzę, więc przekazałem sprawę osobie, która może.

Kadr z odcinka: Blob podaje teczkę Case A-1042 z etykietą Needs approval Adzie przy biurku, z podpisem Lands with a human who can say yes
Kadr z odcinka: sprawa trafia do osoby, która może powiedzieć „tak”.

Zwróć uwagę, co jest gwarantowane, a co nie. Blokada jest gwarantowana. Następny krok to wciąż wybór modelu. Więc ułatw mu dobry wybór: daj jasny powód i właściwe narzędzie. Nie ogólny błąd, nie udawany sukces, nie urwaną rozmowę. Przewodnik Architect Foundations tłumaczy, czemu ogólny błąd w rodzaju „Operation failed” nie pozwala agentowi wybrać właściwej drogi naprawy (punkt 2.2). Ciche udawanie sukcesu i przerwanie całego procesu nazywa antywzorcami (punkt 5.3). Przy przekazaniu sprawy wymienia cztery pola dla człowieka, który nie widzi zapisu rozmowy: identyfikator klienta, przyczynę, kwotę zwrotu i zalecane działanie.

Limit 500 dolarów też nie jest moim pomysłem. Punkt 1.5 tego samego przewodnika podaje go jako własny przykład: hooki blokują zwroty powyżej 500 dolarów i kierują sprawę do człowieka.

Newsletter

The Agentic Architect

Praktyczne wzorce, case studies, rozbiory projektów agentowych i nowinki o AI. Zero spamu, raz w tygodniu.

Dostaniesz jednego maila z prośbą o potwierdzenie. Wypiszesz się jednym kliknięciem. Polityka prywatności

Prompt czy kod: jedno pytanie

Czy każda reguła ma zostać hookiem? Film sortuje pięć reguł jednym pytaniem: czy musi zadziałać za każdym razem?

RegułaGdzie trafia
Bądź ciepły, odpowiadaj krótko.prompt
Streszczaj każdą sprawę w trzech punktach.prompt + przykład
Sprawdź tożsamość klienta przed każdym zwrotem.bramka warunku
Zwroty powyżej 500 dolarów idą do człowieka.hook PreToolUse
Nigdy nie usuwaj tabeli produkcyjnej.hook / zakaz narzędzia

Ton i format mogą raz się rozjechać i nikt nie straci pieniędzy, więc zostają w prompcie. Pozostałe trzy muszą trzymać. Sprawdzenie tożsamości to bramka warunku: narzędzie zwrotu nie ruszy, dopóki weryfikacja się nie uda. Tabela produkcyjna potrzebuje hooka na narzędziu, które wykonuje SQL. Albo w ogóle braku prawa zapisu na produkcji i całkowitego zakazu tego narzędzia.

Jedna pułapka w Claude Code. Narzędzie na liście dozwolonych tylko uruchamia się bez pytania. Nie zabiera innych narzędzi. Jeśli coś nie może ruszyć nigdy, zakaż narzędzia. Sama nazwa narzędzia w regule deny usuwa je z kontekstu Claude'a w całości. Reguła z zakresem dopasowuje polecenie dokładnie tak, jak jest zapisane. Nie da więc gwarancji, że wyłapie komendę DROP ukrytą w SQL.

Ten sam podział otwiera moje dwanaście zasad projektowania agentów, spisanych przy nauce do egzaminu. Wszystko, co musi trzymać zawsze, idzie do kodu. Prompt zostaje dla decyzji, które wymagają osądu.

Kiedy hook to przesada

Nie zamieniaj każdego zdania z promptu w kod. Hook kosztuje. Trzeba go napisać, utrzymać zielone testy i przemyśleć przypadki brzegowe. Jeśli model wciąż wybiera złe narzędzie, najtańszą poprawką jest zwykle jaśniejszy opis narzędzia. Dokumentacja narzędzi Anthropic nazywa szczegółowy opis „by far the most important factor in tool performance”, czyli zdecydowanie najważniejszym czynnikiem. Jeśli rozjeżdża się format odpowiedzi, pokaż przykład. Zacznij od najtańszej poprawki, która trafia w przyczynę.

Kadr z odcinka: Kai wskazuje dwoje drzwi pod pytaniem slips once?; drzwi BUG prowadzą do lepszego promptu, drzwi DISASTER do hooka
Kadr z odcinka: test Kaia dla każdej reguły.

Test Kaia mieści się w dwóch zdaniach. Wyobraź sobie, że reguła raz zawiedzie. Jeśli to błąd, popraw prompt, a jeśli katastrofa, napisz hook.

Jeśli uczysz się do egzaminu Claude Certified Architect Foundations, zapamiętaj z tego odcinka jedno. Gdy pytanie mówi, że reguła musi trzymać zawsze, wzmacnianie system promptu jest pułapką. Wymuś regułę w kodzie.

Skąd to wiem. Szczegóły techniczne pochodzą z dokumentacji Anthropic do Claude Code, Agent SDK i Claude API oraz z przewodnika do egzaminu Claude Certified Architect Foundations w wersji 1.0 z lipca 2026. Drugi agent sprawdził narrację i kod z ekranu względem tych źródeł 6 listopada 2026, a kod powyżej to wersja po tej weryfikacji. Blob, Ada, Kai i historia zwrotu są zmyślone. Agentic Whiteboard i Certified AI Consultant Program są niezależne, niepowiązane z Anthropic i przez Anthropic niepopierane.

SP

Szymon Paluch

Claude Certified Architect · ex-CTO

Przygotowujesz się do certyfikacji Claude?

Nasz program przygotowawczy idzie głębiej, z ćwiczeniami na scenariuszach.

Zobacz program

Kolejne odcinki pojawiają się na kanale Agentic Whiteboard na YouTube.

Powiązane wpisy