Скилловик

Практическая статья

Как добавить самопроверку в Agent Skill: validator и доказательства

Проверяемый цикл plan - validate - execute - verify помогает остановить ошибочный план до изменения файлов или внешней системы.

Agent Skill проверяет структурированный план валидатором до выполнения операции

Что считать самопроверкой Agent Skill?

Самопроверка - отдельный детерминированный барьер, а не просьба модели перечитать собственный ответ. Навык сначала сохраняет структурированный план, запускает validator и продолжает работу только после успешного кода завершения.

Для сложной операции удобен цикл plan - validate - execute - verify. План можно исправлять без изменения исходных данных. После выполнения отдельная проверка подтверждает, что ожидаемое состояние действительно получено.

Чем validator отличается от eval и CI?

Validator отвечает, допустима ли конкретная операция сейчас. Eval измеряет поведение навыка на наборе сценариев, а CI решает, можно ли объединить или выпустить новую версию. Эти уровни дополняют друг друга.

МеханизмГлавный вопросМомент
ValidatorМожно продолжать эту операцию?Внутри каждого запуска
EvalНасколько хорошо работает навык?При разработке и пересмотре
CIГотова ли версия к merge?При изменении репозитория

Поведенческие сравнения описаны в статье как оценить эффективность Agent Skill. Автоматический gate версии вынесен в материал про CI.

Как устроить цикл plan - validate - execute - verify?

Разделите планирование, проверку, выполнение и подтверждение результата на отдельные шаги и файлы. Validator не меняет состояние, executor принимает только проверенный план, а verifier сверяет фактический результат с ожидаемым.

  1. 1. Сформируйте план

    Сохраните операцию, цели, ограничения и dry-run в JSON без изменения исходных файлов.

  2. 2. Проверьте план

    Запустите validator и исправляйте только план, пока код завершения не станет нулевым.

  3. 3. Выполните операцию

    Executor сверяет hash или повторно валидирует неизменившийся план перед записью.

  4. 4. Проверьте результат

    Отдельный verifier сравнивает конечное состояние с критериями и сохраняет evidence.

Такое разделение помогает увидеть, на каком этапе возникла ошибка. Один скрипт, который одновременно проверяет и исправляет вход, сложнее остановить и проверить.

Что включить в контракт плана?

План должен иметь версию схемы, закрытый тип операции, список относительных целей, режим пробного запуска и ограничения. Validator отклоняет неизвестные поля или операции, пустые списки, дубли и пути за пределами разрешённого корня.

  • schema_version для совместимости validator и executor.
  • operation из явного allowlist.
  • targets как непустой список относительных путей.
  • dry_run: true для первой итерации.
  • Лимиты числа файлов, размера и допустимых расширений.

Если план меняется после проверки, прежнее разрешение больше не относится к новой версии. Считайте hash плана или запускайте validator повторно непосредственно перед действием.

Какой интерфейс нужен validator-скрипту?

Validator должен работать без интерактивного ввода, принимать явные аргументы, не менять файлы и возвращать машинно-читаемый результат. Данные проверки идут в stdout, диагностический ход - в stderr, а код завершения однозначно сообщает успех или отказ.

  • Команда --help описывает входы, примеры и коды завершения.
  • Нормальный и ошибочный результат имеют одну стабильную JSON-схему.
  • Каждая ошибка содержит code, field и понятное message.
  • Validator не вызывает executor и не исправляет вход молча.
  • Базовая проверка не зависит от сети, времени и ответа модели.

Если SKILL.md перегружен кодом и справочниками, сначала используйте инструкцию как разделить большой SKILL.md.

Какие коды завершения возвращать?

Код 0 оставьте только для допустимого плана. Ненулевые коды разделите по причинам: неверные аргументы, недоступный файл, ошибка JSON, нарушение предметных правил и неподходящая среда. Это проектный контракт, который нужно документировать.

КодЗначениеСледующий шаг агента
0План допустимПерейти к executor
2Неверные аргументыИсправить команду
3Файл недоступенПроверить путь и права
4JSON не разобранИсправить структуру
5Нарушены правилаИсправить план
6Среда не подходитОстановиться и изменить окружение

GitHub Actions считает ненулевой код failure. Детальные коды нужны не для изменения бинарного gate, а для быстрой и однозначной диагностики человеком и агентом.

Что сохранять как доказательство проверки?

Сохраняйте статус, версию validator, hash плана, версию набора правил, число проверенных целей и безопасный список находок. Не записывайте в evidence токены, секреты, персональные данные и полное содержимое закрытых документов.

Evidence позволяет связать выполненную операцию с конкретным проверенным планом. Если executor получил другой hash, он должен остановиться. В CI такой JSON можно сохранить как workflow artifact вместе с очищенным отчётом.

  • validator_version
  • plan_sha256
  • ruleset
  • checked_targets
  • status и findings без чувствительных значений

Какие границы безопасности должен проверять validator?

Проверяйте относительность и нормализацию путей, выход через .. и симлинки, закрытый список операций, защищённые каталоги, лимиты объёма и dry-run. Validator должен иметь только права, необходимые для чтения плана и проверки допустимой области.

Исполняемые scripts расширяют последствия ошибки, поэтому их нужно читать и тестировать в изолированной среде. Ищите скрытую сеть, shell-команды, broad glob, hardcoded credentials и запись вне заявленной папки.

Полный аудит перед установкой описан в практическом чек-листе проверки AI-навыка. Наличие validator не освобождает от этой проверки.

Какие ошибки делают самопроверку фиктивной?

Самопроверка становится фиктивной, если validator запускается после изменения, возвращает 0 вместе с ошибками, смешивает данные и лог, исправляет план молча или выполняет действие сам. Такой барьер нельзя независимо проверить и безопасно повторить.

  • Проверять только после выполнения.
  • Печатать ошибки и всё равно возвращать 0.
  • Давать одно сообщение invalid input без поля и причины.
  • Просить пароль или подтверждение через интерактивный prompt.
  • Разрешать абсолютные пути и широкие glob.
  • Зависеть от сети или ответа другой модели.
  • Выполнять старый план после проверки изменённого файла.
  • Считать validator доказательством полной безопасности skill.

С чего начать внедрение самопроверки?

Возьмите одну критичную операцию и один известный класс ошибок. Опишите минимальную JSON-схему, создайте validator без записи, добавьте три отрицательных примера и только после этого подключайте executor и проверку результата.

  1. 1. Выберите риск

    Например, выход пути за рабочую папку или пропуск обязательного поля.

  2. 2. Зафиксируйте контракт

    Опишите допустимые поля, типы и ограничения плана.

  3. 3. Напишите чистый validator

    Он только читает, проверяет и возвращает результат.

  4. 4. Добавьте отрицательные тесты

    Проверьте битый JSON, запрещённую операцию и путь вне корня.

  5. 5. Свяжите шаги в SKILL.md

    Запретите executor до exit 0 и потребуйте evidence после verify.

Если процесс затрагивает рабочие данные или внешние системы, Скилловик может помочь собрать ограниченный пилот, контракт проверки и точки человеческого подтверждения.

Обсудить проверяемый Agent Skill

Источники

  1. Build skillsOpenAI Codex; проверено
  2. Agent Skills specificationAgent Skills; проверено
  3. Using scripts in skillsAgent Skills; проверено
  4. Skill authoring best practicesAnthropic; проверено
  5. Agent Skills overviewAnthropic; проверено
  6. Skills for enterpriseAnthropic; проверено
  7. Building effective agentsAnthropic; проверено
  8. json - JSON encoder and decoderPython; проверено
  9. argparse - Parser for command-line optionsPython; проверено
  10. Setting exit codes for actionsGitHub; проверено
  11. Workflow artifactsGitHub; проверено