AI PraktykPO POLSKU

Karty pisze AI wyłącznie z oficjalnej dokumentacji, a program sprawdza cytaty i komendy. Jak to działa

modyzaawansowanyhooks.json

Mod reagujący na zdarzenia

Hook to funkcja obsługi zdarzenia, którą Claude Code uruchamia, gdy wystąpi nazwane zdarzenie. Może obserwować działanie, zmienić zdarzenie albo odpowiedzieć w miejsce Claude Code; rejestruje się go przez on(eventName, handler). Handler otrzymuje API modów jako $, zdarzenie jako e i kolejny handler jako next, a wywołania next(e) tworzą łańcuch middleware.

Aby tylko obserwować zdarzenie, wykonaj potrzebną pracę i zwróć next(e); wynik pozostaje taki, jak bez modyfikacji. Aby zmienić dane przekazywane dalej, wywołaj next ze zmienioną kopią zdarzenia, ponieważ samo zdarzenie jest niemodyfikowalne. Możesz też obsłużyć zdarzenie samodzielnie: zwróć wynik bez wywoływania next, co zatrzymuje łańcuch i pomija późniejsze mody oraz zachowanie Claude Code.

Drugi argument on może być matcherem ograniczającym hook do zdarzeń, których pola pasują do wszystkich warunków; wartością może być pojedyncza wartość, tablica albo wyrażenie regularne. Dla tool.call hook może odmówić wywołania, zmienić argumenty albo przekazać je dalej; po next(e) Claude Code wykonuje kontrolę uprawnień, a następnie narzędzie. Zdarzenie tool.check służy do decyzji, czy wywołanie narzędzia może zostać wykonane, a await next(e) pozwala zachować decyzję Claude Code.

Hook, który zgłosi błąd przed wywołaniem next, zostaje pominięty, a następny handler działa w jego zastępstwie. Jeśli błąd wystąpi po rozwiązaniu next, jego wynik pozostaje obowiązujący i nic nie jest uruchamiane ponownie. Dla zabezpieczenia, które ma odmawiać przy błędzie, można dodać obsługę .catch i sprawdzić next.called, aby rozpoznać, czy handler przekazał już zdarzenie dalej.

przykład
Ten hook obserwuje każde wywołanie narzędzia, zapisuje jego nazwę i przekazuje zdarzenie dalej bez zmian.
on('tool.call', async ($, e, next) => {
  // Runs before the tool does
  $.ui.log('Claude is about to use ' + e.tool)
  // Pass the event on unchanged
  return next(e)
})
przykład
Matcher ogranicza hook do narzędzia Bash, a zwrócenie odmowy bez next zatrzymuje wykonanie polecenia.
on('tool.call', { tool: 'Bash' }, async () => {
  // No call to next, so the command never runs
  return { deny: 'Bash is turned off in this project. Use the file tools.' }
})

Zastosowanie w praktyce

Użyj tool.call, gdy chcesz rejestrować narzędzia, które Claude zamierza uruchomić, albo filtrować wywołania według nazwy narzędzia. Przy kontroli ryzykownych poleceń matcher może zawęzić hook do Bash, a handler może zwrócić odmowę zamiast przekazywać wywołanie dalej. Jeśli decyzja zależy od aktualnego stanu, na przykład bieżącej gałęzi Git, obsłuż tool.check zamiast polegać wyłącznie na stałej regule uprawnień. Do modyfikowania promptu użyj prompt.submit: hook może zmienić tekst, dodać kontekst widoczny tylko dla Claude albo zatrzymać wysłanie promptu.

WskazówkaZarejestruj każde zdarzenie osobno dla każdego matchera: ponowne wywołanie on dla session.start bez matchera powoduje błąd ładowania modułu, więc pracę wykonywaną przy starcie sesji umieść w jednym hooku.

Zgodne z dokumentacją (sprawdzone 24 października 2026), opis z 22 października 2026. Karta jest pisana od nowa, gdy zmieni się jej fragment dokumentacji.

Otwórz w serwisie (wyszukiwarka i filtry tematów)