Hooks

Урок 5 из 10 курса «Claude Code в действии (новая версия 2026)»: официальный курс Anthropic Academy (Антропик) на русском языке. Урок входит в платный доступ; первые уроки курса бесплатно.

О чём урок

Видео: «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, потому что он может…

План урока

  1. События hooks
  2. PreToolUse: решение в формате JSON
  3. Коды выхода для hooks, которые не возвращают JSON
  4. Настоящая защита: вырезать, а не блокировать
  5. Сохранение состояния при компактизации
  6. Итоги

Урок входит в полный доступ. Полный текст и видео открываются после оплаты. Первые уроки каждого курса бесплатны.

Полезные гиды