Hooks (хуки)
⏱️ Примерное время: 8 минут · 🎯 Урок 12 курса Claude Code 101
Hooks позволяют выполнять команды в определённых точках жизненного цикла Claude Code. Ключевое отличие хуков от всего остального в этом курсе: хуки детерминированы — они выполняются всегда.
Зачем нужны хуки
Вы можете указать Claude в CLAUDE.md запускать Prettier после каждой правки файла. Чаще всего он так и сделает. Но иногда — нет. Хук же делает это каждый раз без исключений.
Типичные сценарии:
- Авто-форматирование после правок файлов
- Логирование всех выполненных команд для комплаенса
- Блокировка опасных операций — например, изменения продакшен-файлов
- Отправка вам уведомлений, когда Claude завершает задачу
Как они работают
Хуки настраиваются в settings.json. Вы выбираете событие, опционально задаёте matcher для инструментов, к которым оно применяется, и указываете команду для запуска. Доступные события:
- PreToolUse — перед вызовом инструмента
- PostToolUse — после завершения вызова инструмента
- UserPromptSubmit — когда вы отправляете промпт, до его обработки Claude
- Stop — когда Claude заканчивает ответ
- Notification — когда Claude отправляет уведомление
Настраивать их можно командой /hooks внутри Claude Code или редактируя settings.json напрямую.
Практический пример
Самый частый хук — авто-форматирование после правок. Задайте хук PostToolUse с matcher "Edit|MultiEdit|Write", чтобы он срабатывал при любом изменении файла. Команда проверяет расширение файла и запускает нужный форматтер — Prettier для TypeScript, gofmt для Go, что использует ваш проект.
Блокировка через PreToolUse
Хуки PreToolUse могут блокировать вызовы инструментов до их выполнения. Хук получает имя инструмента и ввод как JSON на stdin. Код выхода определяет поведение:
- Код 0 — продолжить нормально.
- Код 2 — заблокировать действие. Сообщение из stderr передаётся обратно Claude как обратная связь, чтобы он знал, почему заблокирован, и мог скорректироваться.
- Любой другой код — неблокирующая ошибка, которая показывается вам, но ничего не останавливает.
Так вы навязываете жёсткие правила. Заблокировать запись в каталог продакшен-конфигов. Заблокировать bash-команды с rm -rf. Заблокировать коммиты в main. Всё, что вашей команде нужно гарантировать, а не просто рекомендовать.
Шаринг хуков с командой
Хуки, настроенные в .claude/settings.json, — проектного уровня и могут коммититься в репозиторий. Значит, вся команда автоматически получит те же хуки. Используйте переменную окружения CLAUDE_PROJECT_DIR в командах, чтобы ссылаться на скрипты в проекте — тогда они работают независимо от текущего рабочего каталога Claude.
Резюме
Хуки дают детерминированный контроль над поведением Claude Code. Используйте PostToolUse для авто-форматирования и логирования. Используйте PreToolUse для блокировки опасных операций. Настраивайте их через /hooks или в settings.json. И коммитьте в репозиторий, чтобы команда тоже их получила.
Если что-то должно происходить каждый раз без сбоев — не кладите это в промпт. Положите в хук.
*Адаптировано с русским переводом. Оригинал: © 2025 Anthropic. All rights reserved.*