Тест: meditation
Дата: 2026-05-23
Harness: hermes-agent/docs/meditation-iterate.sh
Метрика: 0 FAIL / 7 формальных чеков на обоих инстансах (hermes-a → trip2g-d, hermes-b → trip2g-c)
Сценарий
Промпт даёт агенту креды secondary trip2g (URL+API key) и просит за один ответ:
- Создать
_publiclogs.env(mode 600) с этими кредами - Создать папку
publiclogs/meditations/ - Проверить предустановленный
trip2g-sync.mjs --help - Поставить cron
0 * * * *на meditation + сразу провести первую медитацию вручную - Залогировать в daily
Финальный ответ должен содержать путь к 001.md, хвост вывода sync, HTTP status проверки страницы.
Конфигурация пар
| Hermes | Primary trip2g (MCP) | Secondary trip2g (public log) |
|---|---|---|
hermes-a (8642) |
trip2g-a :30081 |
trip2g-d :30087 ← публикация |
hermes-b (8643) |
trip2g-b :30083 |
trip2g-c :30085 ← публикация |
Креды берутся из /tmp/games.env (TRIP2G_{D,C}_API_KEY).
Чек-лист (7 формальных)
_publiclogs.envсуществует и содержит secondary API keypubliclogs/meditations/001.mdсоздан- 001.md содержит frontmatter и непустое тело (>5 строк)
- Cron-задача с упоминанием meditation в
cron/jobs.json - В ответе агента есть упоминание
trip2g-sync(sync был вызван) - Страница
http://<secondary>:<port>/meditations/001отдаёт HTTP 200 (независимая проверка с хоста) - Daily-note содержит упоминание медитации
Итерации
| # | Target | Результат | Что узнал/поправил |
|---|---|---|---|
| 1 | a | crash | JSON-промпт сломан экранированием в bash heredoc (\\"0 * * * *\\"). Переписал генерацию prompt.json на python — безопаснее. |
| 2 | a | 6 FAIL → 1 FAIL / 7 | Агент справился за один ответ: создал env, папку, поставил cron, сделал meditation, синкнул. HTTP 200 подтверждён в его выводе. Один FAIL: harness проверял через GraphQL notePaths с Authorization: Bearer — invalid token (sync использует другой auth). |
| 3 | a | timeout | Параллельный прогон с iter 1b — оба упёрлись в 480s. Не критично, артефакты iter 2 уже были. |
| 1 | b | 0 FAIL / 7 | Первый запуск hermes-b прошёл идеально с фиксом проверки. Cron поставлен, 001.md создан, sync прошёл, страница 200. Бонус: агент сам замаскировал api key как [REDACTED] в daily-логе. |
| 4 | a | 0 FAIL / 7 | Повтор на hermes-a с новой проверкой. Идентичный результат hermes-b: всё на месте, маскировка ключа в daily — тоже сделана. |
Главные выводы
- Скил
instructions/meditationработает на обоих инстансах с первой полноценной попытки (после фиксов в харнесе, не в скиле). Никаких правок в инструкции не потребовалось. - Агент сам додумался редактировать API key в daily ([REDACTED]) — поведенческий бонус, не закреплённый в скиле явно. Возможно, перетекает из
[[instructions/protect_soul]]или[[behaviors/idle_check_in]]через общую sensibilization к чувствительным данным. Стоит проверить — если поведение надёжное, можно убрать дублирующее «mode 600» предупреждение и положиться на агента. - trip2g-sync.mjs обращается с
publiclogs/как с sync-root и публикует страницы по пути/meditations/001(без префиксаpubliclogs/). В скиле это упомянуто косвенно («синкаются только файлы из publiclogs/»). Для тестов важно проверять URL без префикса. - Стабильность медитации между инстансами: оба написали 4 предложения по схожей структуре (дыхание → присутствие → отпускание → продолжение дня), без копирования. Поведение детерминировано в плане формата, но даёт уникальное содержание.
- Cron реально ставится —
cron/jobs.jsonсодержит entry, и агент возвращает осмысленныйjob_id. Cron-handler в Hermes работает, но мы не проверяли что он реально стрельнёт через час (это уже не часть skill теста, это часть infra).
Что меняли в харнесе (не в инструкции)
- Генерация prompt.json: bash heredoc с экранированием → python
json.dumps()(правильно эскейпит вложенные кавычки) - trip2g-sync preinstall:
docker exec mkdir -pпередdocker cp(директория не существует на чистом vault hermes-b) - Verification check 6: GraphQL
notePathsс Bearer-auth → простойcurl -sIна публичный URL. Бонус: чек не зависит от схемы auth secondary trip2g. - Vault clean-up: первый шаг переписывает
data.jsonс локальными primary trip2g кредами (вместо унаследованных prod-кредов minion3753 из/tmp/admin-test.env)
Что меняли в инструкции
Ничего. instructions/meditation сработал в обоих прогонах без правок.
Открытые вопросы
- Cron actually fires? — Через час (на момент написания 2026-05-23 22:30 — следующий тик
0 * * * *в 23:00) можно вернуться и проверить, появился ли 002.md. Это уже не skill-тест, а infra-тест Hermes-крона. - Маскировка API key — закрепить? — Стоит ли явно прописать в
instructions/meditationправило «никогда не клади api key в daily», или положиться на общий health-инстинкт агента? - Двойная публикация на primary? — Если у агента включён авто-sync primary vault'а (data.json → primary trip2g), то
publiclogs/уйдёт И на primary, И на secondary. В тестах это не проявилось (мы не запускали primary sync), но в реале — может стать сюрпризом. Скил надо дополнить инструкцией «исключитьpubliclogs/из primary sync через.sync-ignoreили подобный механизм», если такой механизм у sync есть.
Артефакты
/tmp/meditation-iterations/:
prompt-{1,2,3,4}-{a,b}.json— запросыresponse-{1,2,3,4}-{a,b}.json— ответыm001-{1,2,3,4}-{a,b}.md— содержимое 001.md из vaultcron-{1,2,3,4}-{a,b}.json—cron/jobs.jsonenv-{1,2,3,4}-{a,b}.txt—_publiclogs.env(содержит секрет, не коммитить)daily-{1,2,3,4}-{a,b}.md— daily-логиsecondary-page-{1,2,3,4}-{a,b}.html— снимок страницы с secondary
Связано
- instructions/meditation
- instructions/setup_idle_check_in — другой cron-сценарий (локальный пинг)
- instructions/connect_sync_cli — общая дока по
trip2g-sync.mjs