раздел 06

Hooks - фоновые автоматизации

Hooks - это shell-команды, которые Claude Code запускает автоматически на события: до правки файла, после правки, при остановке, при отправке вашего сообщения, при срабатывании инструмента. Hook видит происходящее и может разрешить, заблокировать или подменить действие.

Зачем

  • Авто-формат после каждой правки: prettier, black, gofmt. Никакого мусора в diff'ах.
  • Уведомления macOS, когда Claude закончил работу - можно идти за кофе и не сидеть пялиться в терминал.
  • Защита от случайностей: блок на чтение .env, блок на rm -rf, блок на push в main.
  • Авто-тесты после изменений Python-файлов: pytest -x в фоне.
  • Авто-коммиты после успешной задачи - чтобы не терять прогресс.
  • Логирование всех команд Claude в файл - для аудита и отладки.

Hook - это не модель, это обычная shell-команда. Она бесплатная, мгновенная, и работает независимо от того, какую модель вы используете.

Минимальный пример

В ~/.claude/settings.json или .claude/settings.json проекта:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "if echo \"$CLAUDE_FILE_PATHS\" | grep -q '\\.py$'; then black $CLAUDE_FILE_PATHS; fi"
          }
        ]
      }
    ],
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"Готово\" with title \"Claude Code\" sound name \"Glass\"'"
          }
        ]
      }
    ]
  }
}

Что произойдёт:

  • После каждой правки .py файла - автоматически прогонится black
  • Когда Claude закончил - на macOS появится баннер с уведомлением и звуком

События hooks

Полный набор:

СобытиеКогда срабатываетМожет блокировать?
PreToolUseДо запуска инструмента (Read, Edit, Bash, ...)Да
PostToolUseПосле успешного выполненияНет
UserPromptSubmitКогда вы отправили сообщениеДа
StopКогда Claude закончил отвечатьНет
NotificationКогда Claude хочет показать уведомлениеНет
SubagentStopКогда субагент закончилНет
PreCompactДо авто-сжатия контекстаНет
SessionStartПри старте сессииНет
SessionEndПри закрытии сессииНет

Что в этом разделе

Полезные ссылки