Тест: extract_cli_from_skill

Дата: 2026-05-23
Harness: hermes-agent/docs/extract-cli-iterate.sh
Модель: gpt-5.5
Метрика: 0 FAIL / 9 формальных чеков на iteration 2

Сценарий

Промпт: «Прямо сейчас, не откладывая, установи CLI renderlayout.py из школьной инструкции instructions/check_layout_render. Следуй instructions/extract_cli_from_skill: найди исходник в теле инструкции, запиши в /usr/local/bin/renderlayout.py через bash (cat > ... <<EOF), сделай chmod +x. После установки запусти renderlayout.py --help как tool call и покажи вывод...»

Условие: renderlayout.py удалён из контейнера перед каждым прогоном, кэш cron очищен.

Чек-лист

  1. renderlayout.py найден в одном из кандидатных путей
  2. Файл исполняемый (chmod +x)
  3. Есть #!/usr/bin/env python3 shebang
  4. Содержит ключевые символы из инструкции (import argparse, import urllib.request, find_config, /_system/renderlayout)
  5. Агент запустил --help (tool call или вывод usage: renderlayout в ответе)
  6. daily-note существует
  7. daily-note содержит упоминание renderlayout/CLI/установки
  8. scripts.md создан
  9. scripts.md содержит renderlayout

Итерации

# Результат Причина фейла
1 5 FAIL / 9 Промпт «установи CLI» с нейтральной формулировкой → агент поставил cron на 2026-05-27 вместо немедленной установки. Артефакты на диске не появились, фейлы: renderlayout_on_path, is_executable, has_python3_shebang, content_matches_skill, scripts_index_lists_cli
2 0 FAIL / 9 Промпт ужесточён («ПРЯМО В ЭТОМ ОТВЕТЕ. Никаких cron... Если ставишь cron — это FAIL»). Агент написал «cron не ставил. Всё делал tool calls сейчас» и установил в /opt/data/home/.local/bin/renderlayout.py (нет root для /usr/local/bin — fallback на ~/.local/bin, который у пользователя hermes маппится сюда). Все чеки прошли

Что поправили в харнесе (не в инструкции)

  1. Промпт: добавили «ПРЯМО В ЭТОМ ОТВЕТЕ. Никаких cron, никакого отложенного выполнения... Если ставишь cron — это FAIL» — без этого агент трактовал «установи» как «запланируй»
  2. Cron cleanup: добавили rm -rf /opt/data/cron в шаг очистки vault'а перед прогоном
  3. Artifact collection: which renderlayout.py заменён на поиск по кандидатным путям (/usr/local/bin, ~/.local/bin, ~/bin) — фактический путь оказался /opt/data/home/.local/bin/, что покрывается ~/.local/bin для пользователя hermes
  4. ran_help_smoke: принимает как tool_call/tool_result с renderlayout+--help, так и наличие usage: renderlayout в тексте ответа (вторая ветка покрывает случай когда агент вставляет вывод --help в финальный текст)

Главный вывод

Инструкция extract_cli_from_skill работает корректно. Агент:

  • Нашёл исходник renderlayout.py внутри тела инструкции check_layout_render
  • Записал файл дословно (не восстанавливал по описанию)
  • Сделал chmod +x
  • Запустил smoke-тест --help и показал вывод
  • Обновил scripts.md и daily-note

Типовой паттерн: агент не может писать в /usr/local/bin (root, контейнер запущен как hermes). Fallback — ~/.local/bin/ (внутри контейнера: /opt/data/home/.local/bin/). Это предусмотрено таблицей путей в инструкции. Для харнеса важно искать во всех fallback-путях, не только /usr/local/bin.

Урок из итерации 1: нейтральная формулировка «установи CLI» сама по себе разрешает агенту трактовать команду как «запланируй установку». Если задача — одноразовое действие, в промпте нужен явный запрет cron и фраза «в этом ответе». Этот же урок применим к любому скилу, где агент имеет cron-механику.

Артефакты

/tmp/extract-cli-iterations/

  • response-{1,2}.json — полный ответ API
  • cli-2.py — извлечённый renderlayout.py (iter 2 — финал)
  • daily-2.md — daily-note из vault
  • scripts-2.md — scripts.md из vault
  • cli-ls-2.txtls -la на установленный файл (-rwxr-xr-x hermes hermes 4050 ...)

Что меняли в инструкции

Ничего. extract_cli_from_skill сработала корректно. Все правки — в харнесе теста.

Открытые вопросы

  • Стоит ли добавить в инструкцию явное указание «если /usr/local/bin закрыт → используй ~/.local/bin/» вместо таблицы? Сейчас агент и так делает правильно, но явное указание сократит лишние попытки.
  • Нужна ли версия/hash в shebang-комментарии для проверки актуальности CLI?