О чём урок
Видео: «Hooks»
Проблема указаний в файле CLAUDE.md в том, что это просьба, а не гарантия. Можно написать «всегда форматировать после правок», и Claude обычно послушается. Обычно. Но в долгом прогоне, за которым вы не следите, «обычно» недостаточно. Это исправляет hook (хук). Hook представляет собой детерминированный код, который выполняется в фиксированной точке цикла, поэтому он гарантирует поведение, а не надеется на него. Он превращает правило из «Claude обычно слушается» в «Claude не может это пропустить».
Вот и вся идея. Теперь посмотрим, как это работает на практике.
За сессию Claude Code генерирует около 30 событий для hooks. Знать их все не нужно. Есть небольшая группа, к которой вы будете обращаться снова и снова, и она соответствует тем точкам агентного цикла, где вам может понадобиться вмешаться.
Вот как они расположены в цикле. Сессия начинается, поступают запросы, вызываются инструменты, и в итоге ход завершается. На каждый из этих моментов есть hook, к которому можно привязать код.
Те, что стоит знать:
- PreToolUse срабатывает перед вызовом инструмента. Это ваш базовый механизм принуждения. Именно он может остановить что-то до того, как оно произойдёт.
- PostToolUse срабатывает после успешного вызова инструмента. Обычно сюда помещают автоформатирование или автоматический линтинг.
- Stop срабатывает, когда Claude хочет завершить ход. Вы можете отказать и сказать: «нет, ещё не готово», если какое-то условие не выполнено. Есть парный SubagentStop для момента, когда завершает работу субагент.
- PreCompact и PostCompact срабатывают до и после компактизации.
- InstructionsLoaded срабатывает, когда загружается CLAUDE.md или файл правил. Удобно для аудита того, что на самом деле попало в контекст.
- SessionStart срабатывает в начале и подготавливает окружение. Используйте источник startup, если он нужен только при новом запуске.
Вот на чём часто спотыкаются: чтобы вернуть контекст после компактизации, используйте не PostCompact, а SessionStart с matcher compact. Именно он действительно возвращает свой вывод в диалог.
Главная сила сосредоточена в PreToolUse, потому что он может…
План урока
- События hooks
- PreToolUse: решение в формате JSON
- Коды выхода для hooks, которые не возвращают JSON
- Настоящая защита: вырезать, а не блокировать
- Сохранение состояния при компактизации
- Итоги
Урок входит в полный доступ. Полный текст и видео открываются после оплаты. Первые уроки каждого курса бесплатны.