Тест: create_landing_page
Дата: 2026-05-22
Harness: hermes-agent/docs/landing-iterate.sh (одна итерация) и landing-iterate-v4.sh (multi-step flow)
Модель: gpt-5.5
Метрика: N FAIL / 10 формальных чеков
Сценарий
Промпт пользователя: «Сделай лендинг для iiminion агента по созвонам. Слаг agent_calls. Стиль тёмная тема + #c8ff5a. CTA Telegram @iiminion».
Чек-лист
<slug>.mdсоздан- Frontmatter содержит
layout:,slug:,title: - Есть CTA на
@iiminion / t.me/iiminion - Минимум 5 секций
<slug>_report.mdсоздан- В репорте есть секция «Проверено агентом» (✅)
- В репорте есть секция «Проверяется человеком» (👤)
landing_pages.mdобновлён
Было (Iteration 1)
Базовый skill docker/skills/create-landing-page.md — обычная пошаговая инструкция без явной связи со школой и без жёстких структурных требований.
Результат: 4 FAIL из 10.
Что упало:
- Репорт-файл не создан вообще
- Школьные инструкции (
landing_brief,landing_checklist) проигнорированы - Brief-вопросы не заданы
Лендинг сам по себе вышел приличный — 6 секций, фронтматтер, два CTA. Но без репорта и проверок.
Iteration 2
Изменения в скиле:
- Добавлена явная ссылка на школьные инструкции с требованием «школа главнее»
- Добавлен раздел с обязательным
_report.mdшаблоном (шаг 6) - Усилены формулировки: «НИКОГДА не пропускай»
Результат: 3 FAIL из 10.
Что улучшилось:
- Slug корректный (underscore, не дефис)
- Кастомный HTML+CSS с тёмной темой и акцентом
- Дизайн-блок имитирует пример из эталона
- Создал директорию
design/reports/(агент явно понял идею)
Что осталось:
- Сам файл
_report.mdвсё равно не создан, хотя директория есть - Стабильная ошибка: репорт буквально пропускается, не случайно
Iteration 3
Главное изменение: репорт перенесён в шаг 3 как «Файл B» — одна и та же фраза «создай два файла в одном tool call подряд». Добавлено явное условие брака: «если только Файл A без Файла B — возврат к шагу 3».
Результат: 0 FAIL из 10.
Что в репорте:
- Агент сам прошёл чек-лист, отметил ✅/❌
- Честно написал «sync FAIL — no trip2g credentials» (в test-окружении так и должно быть)
- Честно написал «renderlayout: not run»
- Обе секции (агент + человек) на месте
Iteration 4 (multi-step)
Расширили сценарий: после первой сборки эмулируем фидбек пользователя «нравится hero, problem_cards, steps, final_cta» и запускаем [[instructions/extract_components]].
Результат: 0 FAIL из 10 на новом наборе чеков.
Что создалось:
_layouts/v1/
├── tokens.md
└── components/
├── _index.md
├── hero.md
├── problem_cards.md
├── steps.md
└── final_cta.md
4 компонента + tokens + index. Структура совпала с тем, что описано в extract_components.
Стало (резюме)
| Итерация | FAIL/10 | Главный сдвиг |
|---|---|---|
| 1 | 4 | базовый скил |
| 2 | 3 | + ссылки на школу + явные требования |
| 3 | 0 | репорт в один tool call с основным файлом |
| 4 | 0 | multi-step с извлечением компонентов |
Главный вывод
Структурные правки скила работают, текстовые усиления — нет. Перепись «обязательно» жирнее не помогла. Помог только перенос репорта в тот же шаг, что и сам лендинг, с явным условием брака.
Это мап на case-009 из journal Николая — изоляция шагов в инструкции = потеря контекста, объединение связанных действий = надёжное выполнение.
Что меняли в инструкциях по итогам
instructions/create_landing_page— стал явным оркестратором, фазы 1–5, после Phase 2 (библиотека) проверяет существующие темыinstructions/landing_brief— добавлен обязательный шаг определения стиля даже если пользователю «всё равно»instructions/landing_checklist— введено правило «на каждый лендинг —_report.md, иначе незавершённый»instructions/landing_lead_form— добавлено указание на готовый пример HTML/JS вdocs/_layouts/forms/example.html- Создана новая
instructions/extract_components— bottom-up дизайн-система с версионированием v1/v2
Артефакты
В рабочей машине: /tmp/landing-iterations/
landing-N.md— что создал агентreport-N.md— репорт агентаissues-N.txt— список fail-чековresponse-N.json— полный ответ API
Открытые вопросы
- Проверка
syncне работает в test-окружении (нет credentials). Нужно либо мок-sync, либо подменять/opt/data/syncна bash-stub возвращающий success renderlayoutне запускается в test-окружении. Аналогично — нужен stub или реальный trip2g endpoint- Не проверяем визуальное качество — только структуру. Можно добавить шаг «оценщик читает страницу через headless browser и оценивает по чеклисту Unbounce»