02 / 06 · Продвинутый

Hooks — автоматизация

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

5 типов хуков .claude/settings.json

Типы хуков

ХукКогда срабатываетТипичное применение
PreToolUseПеред вызовом инструмента (Edit, Write, Bash)Блокировать опасные команды, валидация ввода
PostToolUseПосле успешного вызова инструментаАвтоформат, линтер, запуск тестов
StopКогда агент завершает ответФинальная проверка сборки, уведомление
UserPromptSubmitПри отправке промпта пользователемИнъекция контекста, проверка политики
NotificationСобытие уведомления (агент ждёт ввода)Звук, push, сообщение в мессенджер

Пример: автоформат после правки

Хук PostToolUse форматирует только что изменённые файлы. Выбери свой стек — команда подстроится. Выбор запоминается.

.claude/settings.json
json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          { "type": "command", "command": "vendor/bin/pint $CLAUDE_FILE_PATHS" }
        ]
      }
    ]
  }
}

Частые ошибки

Хук вообще не запускается

Проверь путь: хуки читаются из .claude/settings.json в корне проекта (или из глобального ~/.claude/settings.json). Имя события чувствительно к регистру — PostToolUse, не posttooluse.

Бесконечный цикл правок

Если PostToolUse сам меняет файл (форматтер), он может снова стриггерить событие. Используй matcher поуже и убедись, что форматтер идемпотентен — второй прогон не меняет файл.

Команда «висит»

Интерактивные команды ждут ввода и блокируют агента. Добавляй неинтерактивные флаги (--no-interaction, --force) и держи таймаут хука разумным.

Тихий фейл

Скрипт упал, но вернул код 0 — агент думает, что всё ок. Начинай shell-хуки с set -e и возвращай ненулевой код, чтобы Claude Code увидел ошибку.