Термос Беспалова
Уровень · Продвинутый

Хуки в Claude Code: как автоматизировать проверки

Как заставить агента всегда форматировать код, запускать тесты перед завершением и никогда не трогать секреты — не надеясь, что он запомнит инструкцию, а гарантированно.

Хуки в Claude Code (в англоязычной документации — Claude Code hooks) — команды, которые выполняются автоматически в определённые моменты работы агента: перед вызовом инструмента, после изменения файла, когда агент заканчивает ответ, при старте сессии и в других точках. Хук может запустить форматирование, прогнать тесты, отправить уведомление, добавить агенту контекст — или запретить действие, которое нарушает ваши правила. Главное отличие от инструкций в CLAUDE.md: инструкцию модель может проигнорировать, а хук срабатывает всегда.

Для команды хуки — способ превратить договорённости в гарантии. «Всегда форматируй код», «не трогай .env», «запускай тесты перед тем, как сказать, что готово» перестают зависеть от того, насколько внимательно агент прочитал инструкции. В статье — как хуки устроены, где их настраивать, как они принимают решения и семь рецептов, которые можно взять как есть. Короткая справка — в карточке /hooks в справочнике по Claude Code.

Что такое хуки и чем они отличаются от CLAUDE.md

У Claude Code есть два способа влиять на поведение агента. Первый — инструкции: файл CLAUDE.md, правила, скиллы. Это текст, который попадает в контекст модели, и модель старается ему следовать. Документация прямо говорит, что Claude воспринимает такие файлы как контекст, а не как обязательную конфигурацию. Обычно этого достаточно, но в длинной сессии, после сжатия контекста или в нестандартной ситуации инструкция может быть проигнорирована.

Второй способ — хуки. Это обычные программы: скрипт в терминале, запрос к серверу, вызов инструмента. Их запускает сам Claude Code, а не модель, и модель не может решить «в этот раз не запускать». Если хук сказал «нельзя», действие не выполнится. Поэтому документация рекомендует для запретов, которые должны работать всегда, использовать не строчку в CLAUDE.md, а хук на событие PreToolUse.

Удобное правило распределения: в CLAUDE.md — то, что помогает агенту работать лучше (соглашения, команды, устройство проекта), в хуки — то, что должно происходить без исключений (форматирование, проверки, запреты). Как писать CLAUDE.md, разобрано в гайде файл CLAUDE.md.

Хуки выполняются с вашими правами. Хук — это программа, которую Claude Code запускает на вашем компьютере от вашего имени, без дополнительного подтверждения. Хук из непроверенного источника опаснее, чем агент без хуков. Читайте код каждого хука, который добавляете, особенно из чужих плагинов.

Где хранятся настройки хуков

Хуки описываются в JSON-файлах настроек. От места хранения зависит, на какие проекты хук действует и попадёт ли он к коллегам.

ГдеНа что действуетОбщий для команды
~/.claude/settings.jsonвсе ваши проектынет, только ваш компьютер
.claude/settings.jsonодин проектда, хранится в репозитории
.claude/settings.local.jsonодин проектнет, исключается из git
корпоративные настройкився организацияда, задаёт администратор
плагин, скилл, субагентпока плагин включён или скилл активенда, вместе с плагином или файлом

Хуки с разных уровней не заменяют, а дополняют друг друга: срабатывают все подходящие. Для команды основное место — .claude/settings.json в репозитории: хуки проекта приходят к каждому вместе с кодом. Личные удобства вроде уведомлений на рабочий стол — в ~/.claude/settings.json. Посмотреть все действующие хуки и отключить лишние можно командой /hooks прямо в сессии.

Структура настройки — три уровня вложенности: событие (например, PostToolUse), группа с фильтром-матчером (например, только инструменты Edit и Write) и один или несколько обработчиков, которые выполняются при совпадении. Все подходящие обработчики запускаются параллельно, а одинаковый обработчик, описанный в нескольких файлах, выполняется один раз.

События: когда срабатывает хук

В документации Claude Code больше 30 событий — от старта сессии и переключения модели до создания рабочей копии репозитория. Для большинства задач хватает десятка основных.

СобытиеКогдаМожет заблокировать
SessionStartначало или возобновление сессиинет, но может добавить контекст
UserPromptSubmitвы отправили сообщение, до обработкида, запрос будет отброшен
PreToolUseперед вызовом инструментада, вызов не выполнится
PostToolUseпосле успешного вызованет, но может сообщить агенту о проблеме
NotificationClaude Code отправляет уведомлениенет
Stopагент закончил ответда, агент продолжит работу
SubagentStopсубагент закончил работуда, субагент продолжит
PreCompactперед сжатием контекстада, сжатия не будет
SessionEndконец сессиинет

Матчер уточняет, для чего срабатывает хук. Для PreToolUse и PostToolUse это имя инструмента: Bash, Edit|Write, инструменты MCP-серверов. Дополнительное поле if позволяет сузить условие правилом в синтаксисе разрешений, например Bash(git *) — только для команд git, или Edit(*.ts) — только для правок файлов TypeScript.

Как хук принимает решение: вход, выход, код 2

Когда событие срабатывает, Claude Code передаёт хуку описание события в формате JSON: для команды — на стандартный ввод. В описании есть общие поля (идентификатор сессии, рабочая папка, имя события) и поля события: для PreToolUse — имя инструмента и его параметры, например текст команды или путь к файлу. Скрипт читает это описание, проверяет, что нужно, и сообщает результат кодом выхода и выводом.

Код выходаЧто происходитКогда использовать
0действие продолжается, JSON из вывода читается как решениепроверка пройдена или нужен тонкий контроль через JSON
2действие блокируется, текст ошибки уходит агентужёсткий запрет с объяснением
1 и другиедля большинства событий не блокирует, в журнале — ошибка хукасбой самого скрипта, а не решение

Код 0 — всё в порядке, действие продолжается. Если хук при этом печатает JSON, Claude Code читает из него решение и дополнительные поля, например контекст для агента. Код 2 — блокирующая ошибка: на событиях, которые могут блокировать, действие отменяется, а текст из стандартного потока ошибок передаётся агенту как объяснение. Для PreToolUse код 2 блокирует вызов даже если в JSON написано «разрешить». Любой другой код для большинства событий не блокирует: действие продолжается, а в журнале появляется сообщение об ошибке хука.

У каждого обработчика есть таймаут — для команд по умолчанию 600 секунд. Важная деталь из документации: если хук-команда не уложилась в таймаут, её вывод отбрасывается и вызов инструмента продолжается по обычным правилам разрешений. Поэтому зависший хук не работает как защита — критичные проверки должны быть быстрыми и надёжными.

Скрипт-проверка для PreToolUse (по примеру из документации)#!/bin/bash input=$(cat) command=$(jq -r '.tool_input.command' <<<"$input") if [[ "$command" == rm* ]]; then echo "Удаление файлов через rm запрещено правилами проекта" >&2 exit 2 fi exit 0

Семь рецептов на каждый день

1. Форматирование после каждой правки. Событие PostToolUse, матчер Edit|Write, команда, которая берёт путь к файлу из входных данных и запускает форматтер проекта — Prettier, Black, gofmt. Агент больше не тратит время на отступы, а в пул-реквестах нет правок «исправил форматирование». Команду форматтера подставьте свою — ту, что уже используется в проекте.

.claude/settings.json{ "hooks": { "PostToolUse": [ { "matcher": "Edit|Write", "hooks": [ { "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write" } ] } ] } }

2. Запрет опасных команд. PreToolUse с матчером Bash и скриптом из предыдущего раздела: проверка текста команды на rm -rf, git push --force, удаление базы данных. Код 2 и понятное объяснение в потоке ошибок — агент увидит причину и предложит другой путь.

3. Защита секретов. PreToolUse для инструментов чтения и правки файлов: если путь указывает на .env, ключи или папку с сертификатами — код 2. Правило в CLAUDE.md «не читай .env» агент может нарушить, а хук — нет, сколько бы ни длилась сессия.

4. Тесты перед завершением. Событие Stop: когда агент решил, что закончил, хук запускает тесты. Если они падают — код 2 и вывод тестов в поток ошибок, и агент продолжает работу, пока тесты не пройдут. Если тесты идут долго, их удобнее запускать асинхронно после каждой правки файла и сообщать результат агенту по готовности — такой пример есть в документации. 5. Уведомление. Событие Notification: звук или сообщение на рабочий стол, когда агенту нужно ваше решение. Полезно для длинных задач, пока вы заняты другим.

6. Контекст при старте. Событие SessionStart: хук выводит текущую ветку git, 5 последних коммитов и список открытых задач из трекера, и Claude Code добавляет этот вывод в контекст. Агент с первой минуты знает, что сейчас происходит в проекте, и вам не нужно рассказывать это заново в каждой сессии.

7. Журнал действий. Событие PostToolUse без матчера, обработчик дописывает в файл время, имя инструмента и его параметры, а в компании — отправляет то же самое HTTP-запросом в общую систему журналов. Через месяц такой журнал отвечает на вопрос «что агент делал в пятницу вечером», который иначе задать некому.

Не только команды: HTTP, MCP, промпт и агент

Обработчиков пять типов. command — скрипт в терминале, самый частый вариант. http — отправка описания события POST-запросом на адрес: удобно для централизованного журнала или корпоративной системы контроля; для таких адресов можно задать список разрешённых. mcp_tool — вызов инструмента на подключённом MCP-сервере.

prompt — отправка описания события модели Claude для одношаговой оценки с решением в JSON. Это полезно, когда правило сложно описать скриптом: «не завершай работу, пока не выполнены все пункты из исходной задачи». agent — запуск субагента, который может сам почитать файлы и поискать по проекту, прежде чем принять решение. Два последних типа гибче, но медленнее и сами расходуют лимиты, поэтому для простых проверок лучше скрипт.

Хуки можно встраивать в скиллы и описания субагентов: тогда они действуют, только пока активен скилл или работает субагент. Это удобно для узких сценариев — например, строгие проверки только во время миграции базы данных. Готовые наборы хуков распространяются в составе плагинов; подборки есть в маркетплейсе скиллов.

Безопасность и отладка

Хуки выполняются автоматически с правами вашего пользователя, поэтому к ним применимы те же правила, что к любому скрипту из интернета. Читайте код хуков из чужих плагинов и репозиториев перед установкой. Используйте абсолютные пути к скриптам, берите в кавычки переменные, проверяйте входные данные — описание события формирует модель, и в нём может оказаться что угодно. В интерактивной сессии Claude Code не запускает хуки ни из одного файла настроек, пока вы не подтвердите доверие к папке.

С неинтерактивным режимом — отдельная ловушка. При запуске claude -p или через SDK диалога доверия нет, папка считается доверенной, и хуки из файла .claude/settings.json чужого репозитория выполнятся сразу. Прежде чем запускать агента в скрипте на репозитории, который писали не вы, просмотрите его папку .claude/ или отключите хуки для этого запуска.

Для компаний есть корпоративный режим: администратор может разрешить только хуки из управляемых настроек и заблокировать пользовательские, проектные и плагинные. Это защищает от ситуации, когда хук из случайного репозитория получает доступ к рабочему компьютеру сотрудника.

Если хук не срабатывает, начните с команды /hooks — она показывает, какие хуки загружены и откуда. Затем проверьте матчер (имя инструмента должно совпадать точно, например Bash или Edit), что скрипт исполняемый и что он читает стандартный ввод. Подробный журнал выполнения хуков пишется в режиме отладки Claude Code. Хорошая практика — сначала протестировать скрипт вручную, подав ему на вход пример JSON из документации, и только потом подключать к агенту. Другие команды для диагностики — в справочнике по Claude Code.

Как внедрять Claude Code hooks в команде, чтобы они помогали, а не раздражали. Первая неделя — 1–2 хука, которые ничего не блокируют: форматирование после правки и уведомление. Вторая — 1 запрет с понятным объяснением, например защита файлов с секретами. Третья — проверка тестов на событии Stop. Каждый новый хук стоит обсудить с командой и записать в README проекта, зачем он нужен: хук, причину которого никто не помнит, рано или поздно отключат как «мешающий».

Автор: Артём Беспалов, маркетинговое ИИ-агентство «Термос Беспалова», Калининград.

Источники: справочник Claude Code по хукам · документация Claude Code о CLAUDE.md (проверено 27.09.2026).

Гайды 2026

Разобрано до шаблонов: три гайда по 490 ₽

Всё, что в статьях идёт по верхам, здесь собрано в PDF: пошаговые схемы, готовые промпты и шаблоны, которые можно взять и применить в тот же день.

Обложка гайда «Промпты, которые работают: система и 60 готовых шаблонов»

Промпты, которые работают: система и 60 готовых шаблонов

Как писать запросы к нейросетям так, чтобы ответы можно было брать в работу без переписывания

  • Формула промпта из семи элементов с разбором «плохо / хорошо»
  • Работа с контекстом и файлами: как кормить модель данными
  • Итерации: как дорабатывать ответ, а не начинать заново
  • Few-shot и цепочки промптов со схемами

PDF, 57 стр., A4

Посмотреть фрагмент (PDF)
Обложка гайда «Свой ИИ-агент за выходные: пошагово, с кодом и без»

Свой ИИ-агент за выходные: пошагово, с кодом и без

Три рабочих проекта, выбор платформы, безопасность, стоимость и тесты: от агента в конструкторе до Python-кода с MCP

  • Цикл агента и пять архитектур со схемами
  • Честный раздел «когда агент не нужен» и дерево решений
  • Сравнение платформ no-code и кода по девяти критериям
  • Три проекта пошагово: секретарь заявок, аналитик отчёта, агент на коде

PDF, 51 стр., A4

Посмотреть фрагмент (PDF)
Обложка гайда «Claude с нуля: от первого чата до скиллов и Claude Code»

Claude с нуля: от первого чата до скиллов и Claude Code

Модели, проекты, 18 сценариев с промптами, скиллы, MCP и Claude Code для тех, кто не пишет код

  • Как выбрать модель Claude по задаче (актуально на 25.09.2026)
  • Схема интерфейса и разбор возможностей: проекты, артефакты, поиск, память, рассуждение
  • Формула запроса и приёмы, которые работают именно у Claude
  • 18 рабочих сценариев с готовыми промптами: письма, договоры, презентации, таблицы, исследования

PDF, 42 стр., A4

Посмотреть фрагмент (PDF)

Оплата на стороне платёжного сервиса. После оплаты вы вернётесь на сайт, и файл откроется сразу. Оплачивая, вы принимаете оферту.

Дальше

Что почитать дальше

Файл CLAUDE.md

Как писать память проекта, чтобы агент следовал правилам с первого раза.

Открыть

Справочник по Claude Code

Команды, флаги, файлы настроек и горячие клавиши с пояснениями.

Открыть

Claude Code с нуля

Установка, первые задачи и настройка разрешений.

Открыть
Вопросы

Частые вопросы

Что такое хуки в Claude Code?
Команды, HTTP-запросы, вызовы MCP-инструментов, промпты или субагенты, которые Claude Code запускает автоматически в определённые моменты: перед вызовом инструмента, после правки файла, при завершении ответа и других. Хук может выполнить действие или запретить действие агента.
Чем хуки отличаются от инструкций в CLAUDE.md?
CLAUDE.md — текст в контексте модели, и модель может его не выполнить. Хук запускает сам Claude Code, и модель не может его пропустить. Поэтому то, что должно происходить всегда, — форматирование, тесты, запреты, — лучше делать хуками.
Как хук запрещает действие агента?
Кодом выхода 2 на событии, которое может блокировать, например PreToolUse. Действие отменяется, а текст из потока ошибок передаётся агенту как объяснение. Код 0 разрешает действие, любой другой код для большинства событий не блокирует.
Где хранить хуки для всей команды?
В файле .claude/settings.json в репозитории проекта — тогда хуки приходят к каждому вместе с кодом. Личные хуки хранятся в ~/.claude/settings.json, локальные для проекта — в .claude/settings.local.json, который не попадает в git.
Как заставить агента запускать тесты перед завершением?
Хуком на событие Stop: он запускает тесты, и если они падают, возвращает код 2 с выводом тестов. Агент не завершит работу и продолжит исправлять, пока тесты не пройдут. Долгие тесты можно запускать асинхронно после каждой правки файла.
Безопасны ли хуки?
Хуки выполняются с правами вашего пользователя без подтверждения, поэтому читайте код каждого хука из чужих плагинов. В интерактивной сессии хуки ждут подтверждения доверия к папке, а в компаниях администратор может разрешить только хуки из корпоративных настроек.

Настроить агентов для команды один раз и правильно?

Общие хуки с проверками, файл памяти проекта, разрешения и корпоративные политики — это настраивается один раз и экономит время всей команде. В «Термос Беспалова» помогаем выстроить такой процесс и собираем агентов под задачи бизнеса.

Получить консультацию

Пн–Вс, 10:00–20:00. Отвечаю лично.