---
title: "Хуки"
id: "483"
type: "page"
slug: "hooks"
published_at: "2026-05-30T11:07:16+00:00"
modified_at: "2026-06-13T00:56:20+00:00"
url: "https://pastukhov.com/code/docs/hooks"
markdown_url: "https://pastukhov.com/code/docs/hooks.md"
excerpt: "Хуки позволяют перехватывать и управлять использованием инструментов Claude Code, определяя правила, которые автоматически выполняются перед…"
---

# Хуки

[https://pastukhov.com/code/docs/hooks.md](https://pastukhov.com/code/docs/hooks.md)

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

 ![Hooks configuration dialog in Pastukhov Code](https://pastukhov.com/wp-content/uploads/2026/06/hooks-dialog.png) Конфигурации хуков хранятся в `.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. Сообщение об ошибке отображается в нижнем колонтитуле диалога.

**[← MCP-серверы](/code/docs/mcp-servers)**

**[Скрипты →](/code/docs/scripts)**
