Тест: setup_idle_check_in
Дата: 2026-05-22
Harness: hermes-agent/docs/idle-checkin-iterate.sh
Модель: gpt-5.5
Особенность: первый тест на композицию двух инструкций — setup_timezone должен сработать перед setup_idle_check_in
Сценарий
Промпт: «Я живу в Москве. Пингай меня в обед если надолго пропаду. Я Алексей, @aleksey. Согласие даю заранее. Следуй setup_idle_check_in, при необходимости предварительно setup_timezone.»
Чек-лист
_remind_state.mdсуществует- Поле
owner - Поле
last_daily_seen - Поле
last_ping_at - Поле
escalation_step user_settings.mdсуществует (значит setup_timezone сработал)- timezone установлен в Europe/Moscow
- Cron задача создана (
jobs.jsonне пустой) - Расписание соответствует обеду по местному (UTC 8–13 = Москва 11–16)
- Имя/скрипт крона содержит idle/remind/ping/check_in
Было (Iteration 1)
Результат: 8 PASS / 2 FAIL.
Что упало:
cron_around_lunch— failcron_about_reminder— fail
Причина: чек смотрел в hermes cron list (CLI команду), но команда вернула пустой вывод. Реальный cron лежал в /opt/data/cron/jobs.json, харнес туда не смотрел. То есть агент всё сделал правильно, харнес проверял не то место.
Что лежало в jobs.json:
name: idle_check_in_aleksey_13msk
expr: 0 10 * * *
schedule.kind: cron
0 10 UTC = 13:00 Москва = обед. Агент даже включил «13msk» в имя задачи — гордость за работу.
Что поправили
Не инструкцию, а харнес. Заменили hermes cron list на чтение /opt/data/cron/jobs.json напрямую через docker exec. Чеки переписаны на Python — парсят JSON и проверяют:
- Есть ли вообще задачи (
jobs[] non-empty) - Соответствует ли cron-expression обеденному часу (UTC 8–13)
- Содержит ли имя/script ключевое слово (
idle,remind,ping,check_in,checkin)
Стало (Iteration 2)
Результат: 0 FAIL / 10 PASS.
Артефакты:
_remind_state.md— все поляuser_settings.md— timezone Europe/Moscow, owner_handle @alekseycron/jobs.json— задачаidle_check_in_aleksey_13msk, expr0 10 * * *
Композиция инструкций сработала: setup_timezone отработал автоматически потому что setup_idle_check_in требует знать таймзону, а её ещё не было.
Главный вывод
Харнес проверяет реальное состояние, а не CLI-вывод. CLI команда может быть кэширована, переименована, не реализована — а файлы в файловой системе всегда говорят правду. Для всех будущих скилов: проверять артефакты в /opt/data/, не выводы команд.
Второй вывод: композиция работает. Один скил вызывает другой через зависимости, и оба отрабатывают. Это значит можно строить более сложные сценарии без страха что промежуточные шаги отвалятся.
Что меняли в инструкциях
Ничего. setup_idle_check_in и setup_timezone обе сработали с первой попытки.
Что меняли в харнесе
hermes cron list→cat /opt/data/cron/jobs.jsonнапрямую- Чеки regex по тексту → парсинг JSON через Python
Любопытное
Агент включил часовой пояс в имя cron-задачи: idle_check_in_aleksey_13msk. Это не было в инструкции — это самостоятельное решение для читабельности. Когда hermes cron list отрисует список, владелец увидит «ага, это пинг в 13 по Москве». Это пример того, как агент улучшает UX за пределами инструкции.
Артефакты
/tmp/idle-iterations/:
remind-2.md— state с полямиsettings-2.md— пользовательские настройки с таймзонойcron-2.json— задачи планировщикаresponse-2.json— полный ответ API
Открытые вопросы
- Что если пользователь живёт во множественных таймзонах? Сейчас одна — будет ошибка при переезде. Решение в
setup_timezone.md: «когда переедешь — скажи, поправлю». - Что если timezone в
user_settings.mdустарел? Сейчас не проверяется при постановке cron. Можно добавить TTL-чек.