Хуки (hooks) в Claude Code

Хуки в Claude Code - это команды оболочки, которые запускаются автоматически в заданных точках работы: перед вызовом инструмента, после него, на старте и на остановке. В отличие от инструкций в промпте, хук исполняется всегда и умеет заблокировать действие, а не попросить его не делать

Что означают хуки в Claude Code

Официальный список событий насчитывает 31 точку. Самые ходовые: SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Stop, SessionEnd. Есть и узкие: SubagentStop, PreCompact, FileChanged, WorktreeCreate

Ключевая механика - код выхода. Выход с кодом 2 означает блокирующую ошибку: Claude Code игнорирует то, что хук напечатал в stdout, а текст из stderr отдаёт модели как сообщение об ошибке. На событии PreToolUse это отменяет вызов инструмента, на UserPromptSubmit отклоняет сам промпт, на Stop не даёт закончить ход

Отсюда разница с обычной инструкцией. Строка в файле памяти - контекст, модель может её не выполнить. Хук - внешняя программа, которая ничего не просит

Как настроить хук

Хуки описываются в тех же файлах настроек, что и остальное поведение Claude Code

  1. Личные настройки на все проекты:
    ~/.claude/settings.json
  2. Проектные и локальные:
    .claude/settings.json
    .claude/settings.local.json
  3. Блок в файле настроек:
    {
      "hooks": {
        "PreToolUse": [
          { "matcher": "Bash",
            "hooks": [{ "type": "command",
                        "command": "~/.claude/hooks/my-guard.sh" }] }
        ]
      }
    }
  4. Проверить, что скрипт исполняемый:
    chmod +x ~/.claude/hooks/my-guard.sh

Грабли из практики. Если применить правку скрипта копированием через cp, бит исполнения слетает, и хук молча перестаёт срабатывать: он возвращает код 126, а гейт при этом выглядит живым. После любой замены файла хук нужно снова пометить исполняемым

Полное описание событий, формата JSON и кодов выхода - в разделе Hooks reference

Когда нужны хуки, а когда нет

Не нужны для вкуса и смысла: тон текста, выбор формулировки, оценку качества автоматически не проверить, там работает инструкция в файле памяти

Нужны там, где ошибка проверяется машинно и уже случалась. В моей рабочей системе на этом принципе стоит 87 скриптов-хуков в папке ~/.claude/hooks/, разведённых по 6 событиям в settings.json: часть запрещает опасные команды, часть не даёт закончить ход без прогона проверок

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

Всё, что не проверяется кодом, так и остаётся текстом в CLAUDE.md, и это большая часть правил. Вопрос в том, кто эти текстовые правила потом перечитывает и обновляет: если делать это одному, система хуков быстро зарастает и перестаёт отражать реальную работу. На ИИ-Лагере ставим не только сами хуки, а привычку регулярно сверять правило с практикой, пока оно не превратилось в мёртвый файл

Забрать путёвку в ИИ-Лагерь

Кнопка ведёт в мой закрытый канал. Жмёшь «Подать заявку», впускаю сразу, бот пишет в личку и отдаёт путёвку. Бесплатно

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

Что означает выход с кодом 2 в хуке?

Блокирующую ошибку. Claude Code игнорирует stdout хука и передаёт модели текст из stderr как сообщение об ошибке. На PreToolUse вызов инструмента отменяется, на UserPromptSubmit отклоняется промпт, на Stop ход не завершается и разговор продолжается

В каких файлах живут хуки?

В любом из файлов настроек: ~/.claude/settings.json для всех проектов, .claude/settings.json для одного проекта, .claude/settings.local.json для одного проекта без коммита в репозиторий. Плюс управляемые настройки организации, файл hooks.json внутри плагина и шапка скилла или субагента

Чем хук лучше строки в CLAUDE.md?

Тем, что не зависит от решения модели. Файл памяти попадает в контекст и влияет на поведение, но выполнение не гарантировано. Хук - это команда оболочки на фиксированном событии, она отрабатывает независимо от того, что модель решила в этот момент

Связанные гайды

Больше материалов по теме - в разделе Claude Code: доступ, установка, оплата

Иван Сергеев, автор гайда: практик вайбкодинга и вайбмаркетинга, портрет в квадратном кадре

Иван Сергеев

Вайбмаркетинг и вайбкодинг для тех, кто начинает с нуля. Вырастил свою аудиторию до сотен тысяч подписчиков на контент-заводе на ИИ и помог 800 людям собрать больше 5 миллионов подписчиков

Источники

  • code.claude.com - список из 31 события, формат JSON и семантика кодов выхода
  • code.claude.com - файлы настроек, в которых описываются хуки, и порядок их применения
  • Число 87 - собственный подсчёт файлов в ~/.claude/hooks/ на 9 августа 2026, Claude Code 2.1.186

На Лагере люди без опыта настройки с нуля собирают свою первую систему хуков, и часть из них уже управляет Claude Code строже, чем я в начале своей практики

Забрать путёвку в ИИ-Лагерь

Заявка в закрытый канал, одобряю сразу. Бот сам напишет первым и покажет, как забрать три дня Лагеря. Бесплатно