Технологии извлечения и анализа данных

Хуки

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

Hooks configuration dialog in Pastukhov Code

Конфигурации хуков хранятся в .pastukhov/hooks.yml и автоматически синхронизируются с собственной системой хуков Claude Code. Pastukhov Code предоставляет визуальный диалог для управления хуками вместо редактирования YAML-файлов вручную.

Наиболее распространенное использование хуков — это не блокировка опасных команд, а предотвращение ручного запуска моделью команд сборки и линтинга. Сборки запускаются автоматически при редактировании файлов, поэтому каждая ручная сборка или линтинг, который запускает модель, — это потраченное время и токены. С хуками, запрещающими эти команды, типичный сеанс экономит десятки ненужных вызовов инструментов, что со временем приводит к значительной экономии времени.


Типы хуков

Pastukhov Code поддерживает два типа хуков, которые служат разным целям:

Запрещающие хуки

Запрещающие хуки блокируют выполнение инструмента, сопоставляя шаблоны с вводом инструмента. При обнаружении совпадения вызов инструмента отклоняется, и пользователю показывается сообщение.

  • Для Bash-инструментов — шаблон сопоставляется со строкой команды
  • Для других инструментов — используйте .* как универсальный шаблон для полного запрета инструмента

Каждый запрещающий хук имеет три поля:

  • Pattern — текст или шаблон регулярного выражения для сопоставления с вводом инструмента
  • Regex — включите для обработки шаблона как регулярного выражения (без учёта регистра). Когда отключено, шаблон сопоставляется как подстрока.
  • Message — сообщение об отклонении, показываемое пользователю при срабатывании хука

Выполняемые хуки

Выполняемые хуки запускают команду оболочки перед выполнением инструмента. Они получают контекст о вызове инструмента через stdin (в формате JSON) и могут возвращать структурированный вывод, который влияет на поведение Claude Code.

  • Command — команда оболочки для запуска. Доступна переменная окружения $CLAUDE_PROJECT_DIR, содержащая абсолютный путь к проекту.

События хуков

Хуки организованы по типам событий. Каждое событие может иметь несколько хуков, назначенных разным инструментам:

  • PreToolUse — запускается перед выполнением инструмента. Здесь вы определяете правила запрета и команды перед выполнением. Доступные инструменты: Agent, Bash, Edit, Write, Read, Glob, Grep, WebFetch, WebSearch, NotebookRead, NotebookEdit и другие.
  • UserPromptSubmit — запускается, когда пользователь отправляет подсказку ИИ. Используйте это для проверки или изменения ввода пользователя перед обработкой.

Диалог хуков

Откройте диалог хуков из главного меню. Диалог организован по секциям событий:

  • Выберите секцию события (PreToolUse или UserPromptSubmit) из левой панели
  • В каждом событии инструменты перечислены в алфавитном порядке. Выберите инструмент, чтобы увидеть его хуки.
  • Добавьте хуки с помощью формы определения хука — выберите тип (deny или execute) и заполните поля.
  • Нажмите “Сохранить” для сохранения конфигурации в .pastukhov/hooks.yml.

Распространённые случаи использования

Предотвращение ручной сборки и линтинга

Когда сборки запускаются автоматически при редактировании файлов, модель никогда не должна пытаться собирать, линтовать или запускать проект вручную. Создайте запрещающие хуки на инструменте Bash под PreToolUse для каждой команды, которую модель может попытаться выполнить:

  • Pattern: dotnet build — message: “Не собирайте проекты вручную — это делается автоматически”
  • Pattern: npm run build — message: “Не собирайте проекты вручную — это делается автоматически”
  • Pattern: npm run link — message: “Не линтуйте проекты вручную — это делается автоматически”
  • Pattern: npx svelte-check — message: “Не линтуйте проекты вручную — это делается автоматически”
  • Pattern: npm run check — message: “Не линтуйте проекты вручную — это делается автоматически”
  • Pattern: npm run dev — message: “Не запускайте проекты вручную — это делается автоматически”
  • Pattern: dotnet run — message: “Не запускайте проекты вручную — это делается автоматически”

Без этих хуков модель регулярно запускает команды сборки и линтинга после каждого редактирования — тратя время и токены на действия, которые система сборки уже обрабатывает. Это самое эффективное использование хуков в Pastukhov Code.


Файл конфигурации

Конфигурация хука хранится в .pastukhov/hooks.yml. YAML-структура отображает типы событий на инструменты и их определения хуков:

preToolUse:
  Bash:
    - type: deny
      pattern: "dotnet build"
      message: "Don't build projects manually - it's done automatically"
    - type: deny
      pattern: "npm run build"
      message: "Don't build projects manually - it's done automatically"
    - type: deny
      pattern: "npm run link"
      message: "Don't lint projects manually - it's done automatically"
    - type: deny
      pattern: "npx svelte-check"
      message: "Don't lint projects manually - it's done automatically"
    - type: deny
      pattern: "npm run check"
      message: "Don't lint projects manually - it's done automatically"
    - type: deny
      pattern: "npm run dev"
      message: "Don't start projects manually - it's done automatically"
    - type: deny
      pattern: "dotnet run"
      message: "Don't start projects manually - it's done automatically"
userPromptSubmit: {}

Изменения, сохранённые в диалоге, автоматически синхронизируются с собственной конфигурацией хуков Claude Code. Процесс синхронизации преобразует определения YAML в формат JSON и записывает их в .claude/settings.local.json, поэтому хуки вступают в силу при следующей подсказке пользователя в чате. Текущие запущенные сеансы по-прежнему используют старые хуки до отправки новой подсказки.


Устранение неполадок

  • Хук не срабатывает — проверьте, что хук сохранён и синхронизирован. Нажмите “Сохранить” в диалоге и проверьте, что .claude/settings.local.json был обновлён. Хуки вступают в силу при следующей подсказке пользователя — существующие диалоги продолжают использовать старые хуки до отправки новой подсказки.
  • Шаблон регулярного выражения не сопоставляется — сопоставление регулярных выражений не учитывает регистр. Убедитесь, что ваш шаблон учитывает вариации во вводе. Протестируйте свой шаблон с помощью онлайн-тестера регулярных выражений при необходимости.
  • Выполняемый хук завершается без вывода — выполняемые хуки имеют тайм-аут 60 секунд. Если команда занимает больше времени, она завершается. Проверьте синтаксис команды и убедитесь, что она доступна в системном PATH.
  • Ошибки сохранения YAML — если диалог показывает ошибку YAML, проверьте, что строки шаблона не содержат специальных символов YAML без proper quoting. Сообщение об ошибке отображается в нижнем колонтитуле диалога.