Как заставить Claude Code проверять себя до действия: hooks как стоп-точки
У агента может быть хорошая инструкция, но инструкция не всегда равна действию. В длинной работе модель может забыть, что перед правкой надо выбрать навык, перед публикацией проверить файл, а после изменения кода запустить тест. В таких местах полезно не просить агента помнить, а поставить автоматическую стоп-точку.
В Claude Code эту роль выполняют hooks: пользовательские команды, HTTP-обработчики или prompt-проверки, которые запускаются в определенные моменты жизненного цикла. Практически это означает: перед вызовом инструмента, после правки файла или при отправке запроса можно добавить проверку, которая остановит опасное действие или вернет агенту дополнительный контекст.
Что здесь меняется
Официальная документация Claude Code описывает hooks как механизм для событий с JSON-контекстом: например, перед вызовом инструмента, после вызова инструмента, в начале сессии или перед завершением хода. В блоге Claude отдельно показано, что hooks живут в JSON settings на уровне пользователя, проекта или локального проекта, а matchers позволяют запускать их только для нужных инструментов.
Как это переводится в рабочий прием
Для практической работы это меняет подход к агентам. Вместо бесконечного файла с просьбами «не забудь проверить» можно вынести одну повторяемую проверку в исполняемое правило. Например: после Write/Edit запускать форматирование, перед Bash с опасным шаблоном останавливать команду, перед началом задачи подсказывать агенту выбрать нужные навыки, а после изменений запускать тесты.
Как собрать навык
| Что решить | Как думать | Что проверить |
|---|---|---|
| Что болит | агент забывает повторяемое правило в длинной задаче | можно ли правило проверить программно |
| Куда поставить проверку | до инструмента, после инструмента, при старте или перед финалом | не будет ли проверка мешать обычной работе |
| Что запускать | маленький скрипт, форматтер, тест, валидатор или prompt-проверку | видит ли агент ясную причину остановки |
| Где риск | hooks могут выполнять shell-команды и читать окружение | нет ли доступа к секретам и разрушительным действиям |
Рабочий прием: выбрать одну проверку, которая чаще всего ломается в реальной работе, и вынести ее в hook. Не надо сразу строить сложную систему. Начните с малого: форматирование после правки, запрет опасной команды, проверка наличия нужного навыка, запуск теста после изменения файла.
- 1Шаг 1
Когда использовать: когда агент регулярно забывает важное правило или делает действие без проверки.
- 2Шаг 2
Что подать на вход: список повторяемых ошибок и одно правило, которое можно проверить автоматически.
- 3Шаг 3
Что сделать по шагам: выбрать событие, написать маленький handler, задать matcher, проверить на тестовой задаче.
- 4Шаг 4
Какой результат получить: агент получает остановку или подсказку в нужный момент, а не постфактум.
- 5Шаг 5
Как проверить качество: правило должно срабатывать только там, где оно действительно нужно.
- 6Шаг 6
Когда не использовать: если проверка неформализуема или создает больше шума, чем пользы.
- 7Шаг 7
Какой навык собрать: превращение редакционных и инженерных правил в автоматические проверки агента.
Где граница
Hooks нужно проектировать осторожно. Они могут запускать команды, а команды могут читать файлы, окружение и секреты. Поэтому для рабочего проекта нужны короткие скрипты, понятные права, логика fail-safe для рискованных действий и отдельная проверка, что hook не раскрывает лишние данные в выводе.
Rich block render error: mapping values are not allowed here
in "<unicode string>", line 2, column 72:
... ее. Он делает процесс устойчивее: важная проверка случается в пр ...
^
label: Редакционный вывод
body: Хороший hook не делает агента умнее. Он делает процесс устойчивее: важная проверка случается в правильный момент, даже если агент занят длинной цепочкой действий.Что сделать сегодня
Выберите одну фразу из вашего рабочего правила, которая часто повторяется в инструкциях агенту. Переведите ее в вопрос: «можно ли это проверить автоматически?». Если да, это кандидат на первый hook.