Может ли Skill сделать проверку обязательной?
Не сам по себе. Skill задаёт инструкции и может попросить агента запустить validator, но выбор и исполнение остаются частью поведения модели и клиента. Для технической гарантии нужен детерминированный триггер или внешний гейт.
Сначала определите, что означает «обязательно»: команда должна запускаться после каждого изменения, плохой результат должен останавливать действие или непрошедшее изменение нельзя сливать в основную ветку. Это три разные границы, и один механизм редко закрывает их все.
Чем отличаются skill, hook и workflow?
Skill хранит способ работы, hook автоматически реагирует на событие в конкретном клиенте, workflow запускается в независимом контуре и может стать условием приёмки.
| Механизм | Что делает | Чего не гарантирует |
|---|---|---|
| Skill | Объясняет когда, чем и как проверять | Что модель не пропустит шаг |
| Hook | Запускает команду на событии клиента | Что проверка охватила все пути изменения |
| CI / workflow | Проверяет сохранённое изменение независимо от сессии | Что локальное опасное действие уже не произошло |
| Ruleset / защита ветки | Не принимает изменение без успешной проверки | Качество самой проверки |
Общее сравнение проектных инструкций, skills и MCP находится в статье AGENTS.md, CLAUDE.md, SKILL.md и MCP.
Где поставить обязательный гейт?
Ставьте гейт перед последствием, которое нельзя принимать без доказательства: записью во внешний сервис, публикацией, merge, deploy или передачей результата заказчику.
- 1. Назовите защищаемое действие
Например: merge в main, отправка письма, изменение production или выгрузка клиентского файла.
- 2. Определите наблюдаемую проверку
Команда должна вернуть однозначный exit code и короткое доказательство: отчёт, hash, список assertions или ссылку на run.
- 3. Выберите ближайший детерминированный триггер
После редактирования — hook; при pull request — CI; перед внешней записью — policy или подтверждение операции.
- 4. Закройте обходной путь
Проверьте, можно ли изменить файл через shell вместо редактора, обойти path filter или выполнить действие вне защищённой ветки.
Как выглядит рабочая трёхслойная схема?
Skill готовит проверяемый результат, hook даёт быструю локальную обратную связь, а CI повторяет проверку в чистой среде и блокирует приёмку при ошибке.
- В SKILL.md: условия запуска validator, критерии успеха и запрет объявлять работу готовой без evidence.
- В hook: быстрый форматтер, lint или проверка изменённых файлов с ограниченным временем выполнения.
- В CI: чистая установка, полный набор тестов и сохранение отчёта.
- В правилах ветки: успешный status check обязателен для merge.
- Для внешних действий: отдельное подтверждение человека или policy-гейт.
Дублирование команды допустимо: локальный hook экономит обратную связь, а независимый workflow не доверяет состоянию сессии. Важно, чтобы оба слоя вызывали один версионируемый validator, а не две расходящиеся реализации.
Почему обязательная проверка всё равно может не сработать?
Чаще всего hook слушает не все способы изменения, workflow пропускается фильтром, ошибка validator замаскирована нулевым exit code или правило ветки не требует этот check.
| Сбой | Контрольный тест |
|---|---|
| Изменение через другой tool | Создать файл через editor и shell, убедиться, что оба пути видны |
| Пропущенный workflow | Изменить только файл на границе paths-фильтра |
| Ложный успех | Подать заведомо плохой fixture и ожидать ненулевой exit code |
| Неправильный matcher | Запустить все заявленные события клиента |
| Необязательный check | Попытаться принять изменение без результата проверки |
Какой минимальный набор внедрить сначала?
Начните с одного validator, одного локального триггера и одного независимого гейта на самом ценном действии. Расширяйте покрытие только после отрицательного теста каждого слоя.
- Validator запускается одной документированной командой.
- Одинаковая команда используется локально и в CI.
- Ошибка возвращает ненулевой exit code и понятное сообщение.
- Workflow сохраняет краткое evidence.
- Защищаемое действие нельзя завершить при красном или отсутствующем check.
- Есть владелец, который обновляет триггеры при смене tools и путей.
Если validator ещё не спроектирован, используйте руководство как добавить самопроверку в Agent Skill.
