Глубокое погружение
Claude Code Hooks: автоматизируйте и защитите работу с ИИ
Hooks — это детерминированный слой Claude Code: команды, которые форматируют код после каждой правки, пишут логи и блокируют опасные операции до их выполнения. Вся настройка — шаг за шагом, со скриншотами.

Иллюстрированный разбор из 12 шагов — примерно 4 минут чтения. Каждый шаг ссылается на точный момент исходного видео.
TL;DR
Hooks — это команды, которые Claude Code автоматически выполняет в заданные точки своего жизненного цикла. В отличие от инструкций в CLAUDE.md, которым модель следует лишь в большинстве случаев, hooks детерминированы: если совпали событие и матчер, команда выполнится всегда. Hook состоит из события (например, PostToolUse), необязательного матчера (например, Edit|Write) и команды. Храните hooks в .claude/settings.json, чтобы делиться ими с командой, обращайтесь к скриптам через $CLAUDE_PROJECT_DIR, чтобы пути не зависели от рабочей директории, а выход с кодом 2 из PreToolUse-хука блокирует вызов инструмента и возвращает Claude причину.
Исходное видео
Страница следует официальному видео Claude о hooks и пошагово воспроизводит его настройку. Каждый скриншот ссылается на точный момент, где он появляется.
Скриншоты — кадры из видео с указанием автора; текст написан нами. Шаги сверены с видео в сентябре 2026 года.
Как устроен hook
Один JSON-блок: событие, матчер и команда, которая выполнится всегда.
- 1
Начнём с проблемы: инструкции в промпте ненадёжны
Можно попросить Claude в CLAUDE.md запускать eslint после каждой правки — и в большинстве случаев он это сделает. Но «большинство случаев» — это именно та проблема, когда пропущенный запуск ломает файл. Hooks созданы для всего, что должно происходить каждый раз.

Правило из CLAUDE.md, которое модель может тихо пропустить.Смотреть с 0:30 - 2
Анатомия hook: событие, матчер, команда
Hooks живут в блоке hooks файла settings.json. Выбираете событие (здесь PreToolUse), необязательный матчер, сужающий набор инструментов (здесь Bash), и команду для выполнения. Каждый подходящий вызов запускает hook без исключений.

PreToolUse + матчер Bash + block-dangerous-commands.sh.Смотреть с 0:14 - 3
Один файл — две автоматизации
Готовую настройку читают сверху вниз: после вызова инструмента правки auto-format.sh приводит код в порядок, после каждого вызова Bash log-commands.sh дописывает команду в журнал. Оба — обычные скрипты проекта, лежащие в .claude/hooks.

Два PostToolUse-хука — форматирование и лог — рядом.Смотреть с 0:36
Автоматизируйте рутину
Форматирование после каждой правки и лог каждой команды — без напоминаний.
- 4
Добавьте матчер для правок файлов
Чтобы форматировать после правок, добавьте PostToolUse-запись с матчером на инструменты Edit, MultiEdit и Write. Ниже уже готов логирующий hook для Bash.

Ввод матчера Edit; под ним логгер Bash.Смотреть с 1:30 - 5
Направьте команду на скрипт проекта
Поле command выполняет любую shell-команду. Автодополнение VS Code подставляет путь к .claude/hooks по мере ввода — намёк, что скрипты hooks лучше держать в отдельной папке.

Автодополнение вводит путь к .claude/hooks.Смотреть с 1:38 - 6
Задайте таймаут, чтобы hook не завис сессию
Готовая запись направляет Edit, MultiEdit и Write на .claude/hooks/auto-format.sh с таймаутом 20 секунд. Скрипт смотрит расширение файла и запускает prettier, go fmt, ruff или другой форматтер проекта.

auto-format.sh обрабатывает каждую правку с таймаутом 20 с.Смотреть с 1:39 - 7
Смотрите на работающий Stop-hook вживую
Hooks срабатывают и на событиях жизненного цикла вне вызовов инструментов. Здесь строка статуса терминала показывает Stop-hook, выполняющийся перед концом сессии, с таймером и счётчиком токенов. Событие Notification срабатывает так же, когда Claude ждёт вашего ввода.

Строка статуса с надписью «running stop hook» и таймером.Смотреть с 0:08
Блокируйте опасные операции
PreToolUse-хуки отклоняют деструктивные команды до их исполнения.
- 8
PreToolUse-hook с правом вето на опасные команды
Скрипт блокировки читает вход инструмента как JSON через jq, ищет в команде деструктивные rm-паттерны и force push, пишет причину в stderr и завершается с кодом 2. Claude видит причину и может скорректироваться вместо исполнения.

Код выхода 2 блокирует вызов; stderr становится обратной связью для Claude.Смотреть с 1:54 - 9
Отказ через структурированное JSON-решение
Когда нужна более жёсткая гарантия, hook может ответить hookSpecificOutput — JSON-полезной нагрузкой, отклоняющей вызов PreToolUse. Этот hook блокирует DROP TABLE и предлагает миграцию — продакшен остаётся нетронутым.

Решение об отказе, собранное jq, направляет Claude к миграции.Смотреть с 2:16
Делитесь hooks с командой
Проектные настройки и меню /hooks держат всех на одних и тех же предохранителях.
- 10
Храните hooks в проекте, а не на машине
Hooks в .claude/settings.json действуют на уровне проекта: закоммитьте файл, и вся команда получит те же предохранители в следующей сессии. Скрипты лежат рядом, в .claude/hooks.

Папка .claude с hooks и settings.json, готовая к коммиту.Смотреть с 2:30 - 11
Используйте $CLAUDE_PROJECT_DIR в каждом пути
Рабочая директория Claude может смениться посреди сессии, и относительные пути сломаются. Переменная $CLAUDE_PROJECT_DIR всегда указывает на корень проекта, поэтому пути до скриптов hooks остаются рабочими, из какой бы директории Claude ни запускался.

Переменная project-dir закрепляет путь команды.Смотреть с 2:38 - 12
Проверяйте hooks через меню /hooks
Команда /hooks в Claude Code показывает список всех настроенных hooks, их события и условия срабатывания. Меню доступно только для чтения — чтобы добавить или изменить hooks, редактируйте settings.json или попросите Claude.

Меню /hooks показывает пять настроенных hooks.Смотреть с 2:54