Claude Code 101 / Продвинутое

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.*