---
title: "Управление моделями через хуки"
id: "586"
type: "page"
slug: "hooks-control"
published_at: "2026-06-03T14:29:23+00:00"
modified_at: "2026-06-13T00:56:20+00:00"
url: "https://pastukhov.com/code/docs/validation/hooks-control"
markdown_url: "https://pastukhov.com/code/docs/validation/hooks-control.md"
excerpt: "Хуки — это уровень обеспечения системы валидации Pastukhov Code. Пока навыки направляют поведение модели через…"
---

# Управление моделями через хуки

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

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

![Hooks dialog](https://pastukhov.com/wp-content/uploads/2026/06/hooks-dialog-v2.png)## События и типы хуков

Хуки организованы по типам событий. Pastukhov Code поддерживает два события:

- **PreToolUse** — Запускается перед выполнением инструмента. Здесь определяются правила запрета и команды перед выполнением. Хуки могут нацеливаться на конкретные инструменты: Bash, Edit, Write, Read, Glob, Grep, Agent, NotebookEdit и другие
- **UserPromptSubmit** — Запускается, когда пользователь отправляет промпт ИИ. Используйте это для валидации или изменения пользовательского ввода перед обработкой

### Хуки запрета

Хуки запрета блокируют выполнение инструмента, сопоставляя паттерны с вводом инструмента. Для инструментов Bash паттерн сопоставляется со строкой команды. Для инструментов, не относящихся к Bash, используйте `.*` как catch-all паттерн, чтобы полностью запретить инструмент.

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

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

### Хуки выполнения

Хуки выполнения запускают команду оболочки перед выполнением инструмента. Они получают контекст о вызове инструмента через stdin как JSON и могут возвращать структурированный вывод, который влияет на поведение модели. Переменная окружения `$CLAUDE_PROJECT_DIR` доступна в команде.

## Предотвращение ручных сборок

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

```
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.md, чтобы минимизировать количество инициируемых моделью сборок, используя хуки как последнюю защиту, когда модель забывает о ваших требованиях, когда чат становится длинным или уплотняется.

## Интеграция с Claude Code

Конфигурации хуков, хранящиеся в `.pastukhov/hooks.yml`, автоматически синхронизируются с собственной системой хуков Claude Code. Процесс синхронизации преобразует определения YAML в формат JSON и записывает их в `.claude/settings.local.json`, чтобы хуки вступили в силу при следующем промпте пользователя в чате.

Поток синхронизации работает следующим образом:

1. При запуске и после каждого сохранения `HooksService` читает конфигурацию YAML
2. Каждое определение хука преобразуется в формат JSON Claude Code с автоматическим разрешением пути к исполняемому файлу
3. Хуки дедуплицируются по команде, чтобы избежать конфликтов
4. JSON записывается в `.claude/settings.local.json`
5. Текущие запущенные сессии используют старые хуки до отправки следующего промпта пользователя

Путь к исполняемому файлу для обработки хуков разрешается автоматически путем проверки нескольких мест: рядом с запущенным бинарным процессом, в базовом каталоге приложения или возвращаясь к `dotnet PastukhovCode.dll`.

## Другие цели валидации

Помимо предотвращения ручных сборок, хуки служат другим целям валидации:

- **Блокировка разрушительных операций** — Запрет `rm -rf`, force push или других опасных команд, которые могут вызвать необратимый ущерб даже внутри контейнера
- **Обеспечение соблюдения политик, специфичных для проекта** — Блокировка записей в конкретные защищенные файлы, предотвращение редактирования файлов конфигурации или запрет изменений в тестовых фикстурах
- **Пользовательская логика валидации** — Хуки выполнения могут запускать команды оболочки перед выполнением инструмента, позволяя проверку перед коммитом, валидацию формата или пользовательские защиты

Валидация конфигурации автоматически проверяет `hooks.yml` при сохранении, предупреждая о неизвестных типах событий и свойствах. Ошибки ссылаются на соответствующий раздел в `.pastukhov/README.md`.

## Эффективные паттерны валидации

- **Всегда запрещайте ручные сборки, когда настроены автоматические сборки** — Это самая impactful конфигурация хуков. Добавьте правила запрета для каждой команды сборки и линтинга, которую модель может попробовать
- **Используйте сопоставление подстрок для простых паттернов** — `pattern: "npm run build"` с `regex: false` ловит любую команду, содержащую эту подстроку, включая с дополнительными флагами
- **Используйте regex для сложных паттернов** — Включите `regex: true`, когда вам нужно сопоставление без учета регистра или синтаксис паттернов, например `rm\s+-rf`
- **Тестируйте хуки после сохранения** — Хуки вступают в силу при следующем промпте пользователя. Отправьте тестовый промпт и убедитесь, что хук блокирует ожидаемые команды

Полный справочник по хукам см. в [Хуки](/code/docs/hooks)
. Для системы сборки, хуки которой предотвращают ручной запуск, см. [Сборка и развертывание](/code/docs/build-deploy)
. Для изоляции Docker, которая делает хуки сетью безопасности, а не шлюзом, см. [Изоляция Docker и пропуск разрешений](/code/docs/validation/docker-isolation)
.

**[← Изоляция Docker и пропуск разрешений](/code/docs/validation/docker-isolation)**

**[Аналитика и наблюдаемость →](/code/docs/validation/analytics-observability)**
