Почему Cron?
Cron в Hermes Agent — это не просто планировщик задач. Это полноценная система автоматизации, которая позволяет агенту выполнять задачи по расписанию: мониторить сайты, генерировать отчёты, запускать пайплайны данных и объединять несколько навыков (skills) в сложные рабочие процессы. Агент получает промпт, выполняет его и доставляет результат — всё без вашего участия.
CLI-справочник
Все операции с cron-задачами выполняются через CLI или slash-команды:
hermes cron list [--all] # Список активных (--all включая отключённые)
hermes cron create SCHED # Создать: '30m', 'every 2h', '0 9 * * *'
hermes cron edit ID # Редактировать расписание, промпт, доставку
hermes cron pause/resume ID # Пауза / возобновление
hermes cron run ID # Запустить немедленно (для тестирования)
hermes cron remove ID # Удалить задачу
hermes cron status # Статус планировщика
В интерактивной сессии: /cron list, /cron run <job_id>, /cron pause <job_id>, /cron edit <job_id>, /cron remove <job_id>.
Поля cron-задачи
Каждая cron-задача имеет следующие поля (задаются при создании или через hermes cron edit):
| Поле | Описание |
|---|---|
schedule |
Расписание: 30m, every 2h, 0 9 * * *, ISO-метка времени |
prompt |
Промпт для агента. Должен быть самодостаточным — агент не помнит ваши разговоры |
deliver |
Режим доставки результата (см. раздел «Режимы доставки») |
enabled_toolsets |
Список доступных инструментов: terminal, file, browser, web, messaging и др. Переопределяет дефолты |
workdir |
Рабочая директория агента при выполнении задачи |
model |
Модель и провайдер: {"model": "claude-sonnet-4", "provider": "anthropic"} |
script |
Путь к Python-скрипту, выполняемому перед агентом. stdout передаётся как контекст |
no_agent |
Если true — скрипт выполняется без LLM (только script → stdout) |
skills |
Список навыков для загрузки: ["arxiv", "obsidian"] |
context_from |
Источник контекста: session — возобновить сессию, none — чистый старт |
attach_to_session |
Привязать к конкретной сессии (continuation mode) |
Режимы доставки
Поле deliver определяет, куда отправляется результат:
origin— в тот же чат, где задача была создана (по умолчанию)local— только сохранить локально, без отправки в мессенджерall— во все подключённые платформы одновременноplatform:chat_id— в конкретный чат. Пример:telegram:-1001234567890platform:chat_id:thread_id— в конкретный топик. Пример:telegram:-1001234567890:42
Паттерн 1: Мониторинг изменений на сайте
Отслеживание изменений на веб-страницах. Hermes загружает страницу, сравнивает с предыдущим состоянием и уведомляет только при изменениях:
/cron add "every 30m" "Fetch https://example.com/pricing and compare to the last version. If content changed, summarize what's different. If unchanged, respond [SILENT]." --name "Pricing page monitor"
Используйте [SILENT] в промпте, чтобы агент не слал уведомления при отсутствии изменений.
Паттерн 2: Генерация отчётов
Настройте еженедельный дайджест активности в репозитории:
/cron add "0 9 * * 1" "Summarize GitHub activity for repo: owner/repo. Include: new issues, merged PRs, notable commits. Format as a brief weekly digest." --deliver telegram
Формат расписания поддерживает стандартные cron-выражения (0 9 * * *), относительные интервалы (every 2h) и ISO-метки времени.
Паттерн 3: Слежение за GitHub-репозиторием
/cron add "every 6h" "Check GitHub repo owner/repo for new issues or PRs opened in the last 6 hours. Report titles, authors, and labels. If nothing new, respond [SILENT]." --deliver slack
Паттерн 4: Пайплайн сбора данных
Для сложных сценариев используйте --script — Python-скрипт собирает данные, а агент анализирует:
- Скрипт выполняет HTTP-запросы, чтение файлов, обработку данных
- Агент получает stdout скрипта и применяет рассуждение
- Дешевле и надёжнее, чем если бы агент сам делал запросы
Пример: скрипт собирает криптовалютные цены каждые 15 минут, а агент раз в час анализирует тренды и предупреждает о значительных движениях (>5%).
Паттерн 5: Мульти-skill рабочий процесс
Объединяйте несколько навыков. Skills загружаются по порядку перед промптом:
/cron add "0 8 * * *" "Search arXiv for 3 most interesting papers on 'language model reasoning' from the past day. For each, create an Obsidian note with title, authors, abstract summary, and key contribution." --skill arxiv --skill obsidian --name "Paper digest"
Управление задачами
/cron list— показать все активные задачи/cron run <job_id>— запустить немедленно (для тестирования)/cron pause <job_id>— пауза/cron edit <job_id> --schedule "every 4h"— изменить расписание/cron edit <job_id> --prompt "Новое описание"— обновить промпт/cron remove <job_id>— удалить навсегда
Обязательно тестируйте командой /cron run перед запуском по расписанию.
Практические советы
- Делайте промпты самодостаточными. Агент не помнит ваши разговоры. Указывайте URL, имена репозиториев, форматы и инструкции по доставке прямо в промпте.
- Используйте
[SILENT]щедро. Для мониторинговых задач добавляйте «если ничего не изменилось, ответьте[SILENT]». - Скрипты для сбора данных.
--scriptпозволяет Python-скрипту выполнять рутинную работу, а агенту — только анализировать. - Тестируйте перед запуском.
/cron run <job_id>для проверки вывода до срабатывания по расписанию. - Форматы расписания. Относительные задержки (
30m), интервалы (every 2h), cron-выражения (0 9 * * *), ISO-метки (2025-06-15T09:00:00).
Подводные камни
Skills перекрывают промпты cron-задач
Агент загружает skills через skill_view и следует их инструкциям в первую очередь. Промпт cron-задачи — вторичен. Если skill содержит fallback-цепочки (например, «если send_message не сработал, попробуй curl с bot token»), агент выполнит их, даже если промпт говорит использовать только send_message. Удаляйте все альтернативные методы из skills, которые противоречат каноническому подходу. Это вызвало реальный инцидент: 4 publishing skills содержали fallback-инструкции с bot token, из-за которых cron-агенты использовали отозванные токены вместо send_message.
Emoji с невидимым Unicode блокируются
Emoji с Zero Width Joiner (U+200D), такие как 🐦⬛, блокируются детектором инъекций. Ошибка: Blocked: prompt contains invisible unicode U+200D. Используйте простые emoji или уберите их из промптов cron-задач.
send_message требует messaging в enabled_toolsets
send_message принадлежит тулсету messaging. Сессии cron по умолчанию НЕ включают messaging. Если задаче нужен send_message (например, для публикации в дополнительный канал), добавьте его в enabled_toolsets:
cronjob(action="update", job_id="...",
enabled_toolsets=["terminal", "file", "browser", "web", "messaging"])
Когда enabled_toolsets задан, он переопределяет все дефолты — укажите все нужные тулсеты.
Важно: deliver отвечает за автоматическую доставку финального ответа в целевой чат. send_message нужен только для дополнительных целей.
Устаревшие пути после миграции
При восстановлении из бэкапа с другого сервера ВСЕ пути — в workdir и в тексте промпта — могут ссылаться на несуществующие директории. Выполните hermes cron list --all после восстановления и проверьте каждую задачу.
Агенты cron следуют SKILL.md, а не промпту
Когда промпт говорит «используй send_message», но SKILL.md говорит «используй curl с bot token как fallback», агент следует SKILL.md. Skill загружается как авторитетный контекст и перекрывает промпт. Последствие: если вы исправили workflow в промпте, но оставили старый подход в skill, агент будет использовать старый подход. Всегда обновляйте оба источника. Это вызывало месяцы ошибок «bot unavailable» — промпт был правильный, но skill содержал fallback-цепочки.
Автоматизация с Cron превращает Hermes Agent из интерактивного помощника в круглосуточного работника, который мониторит, анализирует и отчитывается — даже когда вы спите.