Задания Cron только для сценариев
Иногда вы уже точно знаете, какое сообщение хотите отправить. Вам не нужен агент, чтобы рассуждать об этом — вам просто нужен скрипт, который будет запускаться по таймеру, и его выходные данные (если есть) попадать в Telegram/Discord/Slack/Signal.
Гермес называет это режимом без агентов. Это система cron без LLM.
┌──────────────────┐ ┌──────────────────┐
│ scheduler tick │ every │ run script │
│ (every N minutes)│ ──────▶ │ (bash or python) │
└──────────────────┘ └──────────────────┘
│
│ stdout
▼
┌──────────────────┐
│ delivery router │
│ (telegram/disc…) │
└──────────────────┘
- Нет звонка в LLM. Ноль токенов, нулевой цикл агентов, нулевые затраты на модель.
- Скрипт — это задание. Скрипт решает, следует ли предупреждать. Выдать вывод → сообщение будет отправлено. Ничего не излучать → тихий флажок.
- Bash или Python. Файлы
.sh/.bashзапускаются в/bin/bash; любое другое расширение работает под текущим интерпретатором Python. Все, что находится в~/.hermes/scripts/, принимается. - Тот же планировщик. Работает в cronjob вместе с заданиями LLM — приостановка, возобновление, листинг, журналы и таргетинг доставки работают одинаково.
Когда это использовать
Используйте режим без агента для:
- Следовые таймеры памяти/диска/графического процессора. Запускаются каждые 5 минут, предупреждают только при превышении порогового значения.
- Перехватчики CI. Развертывание завершено → опубликуйте SHA фиксации. Сборка не удалась → отправьте последние 100 строк журнала.
- Периодические показатели. «Доход Daily Stripe в 9 утра» как простой вызов API + красивая печать.
- Внешние опросчики событий. Проверка API, оповещение об изменении состояния.
- Сердцебиение. Проверяйте панель управления каждые N минут, чтобы убедиться, что хост жив.
Используйте обычное задание cron (управляемое LLM), когда вам нужно, чтобы агент решил, что сказать — подведите итог длинному документу, выберите интересные элементы из ленты, набросайте понятное для человека сообщение. Путь без агента предназначен для случаев, когда стандартный вывод сценария уже является сообщением.
Создать его из чата
Реальное преимущество режима без агента заключается в том, что агент сам может настроить для вас сторожевой таймер — без редактора, без оболочки, без запоминания флагов CLI. Вы описываете то, что хотите, Hermes пишет сценарий, составляет график его выполнения и сообщает вам, когда он сработает.
Пример расшифровки
Вы: пингуете меня в Telegram, если оперативная память превышает 85 %, каждые 5 минут.
Hermes: (записывает
~/.hermes/scripts/memory-watchdog.sh, затем вызываетcronjob(...)сno_agent=true)Настроить. Запускается каждые 5 минут, предупреждает Telegram только тогда, когда ОЗУ превышает 85%. Скрипт:
memory-watchdog.sh. Идентификатор вакансии: abc123.
Под капотом агент выполняет два вызова инструмента:
# 1. Write the check script
write_file(
path="~/.hermes/scripts/memory-watchdog.sh",
content='''#!/usr/bin/env bash
ram_pct=$(free | awk '/^Mem:/ {printf "%d", $3 * 100 / $2}')
if [ "$ram_pct" -ge 85 ]; then
echo "RAM ${ram_pct}% on $(hostname)"
fi
# Empty stdout = silent tick; no message sent.
''',
)
# 2. Schedule it — no_agent=True skips the LLM on every tick
cronjob(
action="create",
schedule="every 5m",
script="memory-watchdog.sh",
no_agent=True,
deliver="telegram",
name="memory-watchdog",
)
С этого момента каждый тик свободен: планировщик запускает скрипт, передает его стандартный вывод в Telegram, если он не пуст, и никогда не касается модели.
Что за вас решит агент
Когда вы формулируете запрос типа «оповестить меня, когда X» или «каждые N минут проверяйте Y и сообщайте мне, есть ли Z», описание инструмента Hermes cronjob сообщает ему, что необходимо достичь no_agent=True всякий раз, когда содержимое сообщения полностью определяется сценарием. Он возвращается к обычному пути, основанному на LLM, когда запрос требует обоснования («»подведите итоги новых проблем», "выберите наиболее интересные заголовки", "составьте дружеское напоминание").
Вам не обязательно самостоятельно указывать --no-agent. Просто опишите поведение.
Управление сторожевыми таймерами из чата
Агент может приостанавливать, возобновлять, редактировать и удалять задания так же, как он их создает:
Вы: остановите сторожевой таймер памяти на сегодняшний вечер
Гермес: (вызывает
cronjob(action='pause', job_id='abc123'))Приостановлено. Возобновите работу с помощью «Включите его снова» или через «hermes cron возобновить abc123».
Вы: измените настройку на каждые 15 минут.
Гермес: (вызывает
cronjob(action='update', job_id='abc123', Schedule='каждые 15 минут'))
Полный жизненный цикл (создание/список/обновление/пауза/возобновление/запуск/удаление) доступен агенту без изучения каких-либо команд CLI.
Создайте его из CLI
Предпочитаете оболочку? Путь CLI дает тот же результат с тремя командами:
# 1. Write your script
cat > ~/.hermes/scripts/memory-watchdog.sh <<'EOF'
#!/usr/bin/env bash
# Alert when RAM usage is over 85%. Silent otherwise.
RAM_PCT=$(free | awk '/^Mem:/ {printf "%d", $3 * 100 / $2}')
if [ "$RAM_PCT" -ge 85 ]; then
echo "⚠ RAM ${RAM_PCT}% on $(hostname)"
fi
# Empty stdout = silent run; no message sent.
EOF
chmod +x ~/.hermes/scripts/memory-watchdog.sh
# 2. Schedule it
hermes cron create "every 5m" \
--no-agent \
--script memory-watchdog.sh \
--deliver telegram \
--name "memory-watchdog"
# 3. Verify
hermes cron list
hermes cron run <job_id> # fire it once to test
Вот и все. Ни подсказки, ни навыков, ни модели.
Как вывод сценария сопоставляется с доставкой
| Поведение скрипта | Результат |
|---|---|
| Выход 0, непустой стандартный вывод | стандартный вывод доставляется дословно |
| Выход 0, пустой стандартный вывод | Тихая галочка — доставки нет |
Выход 0, стандартный вывод содержит {"wakeAgent": false} в последней строке |
Тихая галочка (общие ворота с вакансиями LLM) |
| Ненулевой код выхода | Предупреждение об ошибке доставляется (поэтому сломанный сторожевой таймер не выходит из строя молча) |
| Таймаут скрипта | Предупреждение об ошибке доставлено |
Поведение «тихо, когда пусто» является ключом к классическому паттерну сторожевого таймера: сценарий может запускаться каждую минуту, но канал видит сообщение только тогда, когда что-то действительно требует внимания.
Правила скрипта
Скрипты должны находиться в ~/.hermes/scripts/. Это применяется как во время создания задания, так и во время выполнения — абсолютные пути, расширение ~/ и шаблоны обхода пути (../) отклоняются. Тот же каталог используется совместно со шлюзом сценария предварительной проверки, используемым заданиями LLM.
Выбор интерпретатора осуществляется по расширению файла:
| Расширение | Переводчик |
|---|---|
.sh, .bash |
/bin/bash |
| что-нибудь еще | sys.executable (текущий Python) |
Мы намеренно НЕ соблюдаем шебанги #!/... — сохранение явного и небольшого размера интерпретатора уменьшает поверхность, которой доверяет планировщик.
Синтаксис расписания
То же, что и все остальные задания cron:
hermes cron create "every 5m" # interval
hermes cron create "every 2h"
hermes cron create "0 9 * * *" # standard cron: 9am daily
hermes cron create "30m" # one-shot: run once in 30 minutes
Полный синтаксис см. в справке по функциям cron.
Цели доставки
--deliver принимает все, о чем знает шлюз. Некоторые распространенные формы:
--deliver telegram # platform home channel
--deliver telegram:-1001234567890 # specific chat
--deliver telegram:-1001234567890:17585 # specific Telegram forum topic
--deliver discord:#ops
--deliver slack:#engineering
--deliver signal:+15551234567
--deliver local # just save to ~/.hermes/cron/output/
Для платформ с токенами ботов (Telegram, Discord, Slack, Signal, SMS, WhatsApp) во время выполнения сценария не требуется работающий шлюз — инструмент вызывает конечную точку REST каждой платформы напрямую, используя учетные данные, уже находящиеся в ~/.hermes/.env / ~/.hermes/config.yaml.
Редактирование и жизненный цикл
hermes cron list # see all jobs
hermes cron pause <job_id> # stop firing, keep definition
hermes cron resume <job_id>
hermes cron edit <job_id> --schedule "every 10m" # adjust cadence
hermes cron edit <job_id> --agent # flip to LLM mode
hermes cron edit <job_id> --no-agent --script … # flip back
hermes cron remove <job_id> # delete it
Все, что работает в заданиях LLM (пауза, возобновление, ручной запуск, изменение цели доставки), работает и в заданиях без агента.
Рабочий пример: оповещение о свободном месте на диске
cat > ~/.hermes/scripts/disk-alert.sh <<'EOF'
#!/usr/bin/env bash
# Alert when / or /home is over 90% full.
THRESHOLD=90
df -h / /home 2>/dev/null | awk -v t="$THRESHOLD" '
NR > 1 && $5+0 >= t {
printf "⚠ Disk %s full on %s\n", $5, $6
}
'
EOF
chmod +x ~/.hermes/scripts/disk-alert.sh
hermes cron create "*/15 * * * *" \
--no-agent \
--script disk-alert.sh \
--deliver telegram \
--name "disk-alert"
Тихо, когда обе файловые системы ниже 90%; запускает ровно одну строку на каждую файловую систему, превышающую пороговое значение, когда она заполняется.
Сравнение с другими шаблонами
| Подход | Что работает | Когда использовать |
|---|---|---|
Гермес посылает (один кадр) |
Любая команда оболочки, передаваемая в него | Специальная доставка или как действие внешнего планировщика (systemd, launchd) |
cronjob --no-agent (эта страница) |
Ваш сценарий в расписании Гермеса | Повторяющиеся сторожевые таймеры/оповещения/метрики, которые не требуют обоснования |
cronjob (по умолчанию, LLM) |
Агент с дополнительным сценарием предварительной проверки | Когда содержание сообщения требует анализа данных |
ОС cron + hermes send |
Ваш скрипт по расписанию ОС | Когда Гермес может быть нездоров (то, за чем вы следите) |
Для критических сторожевых таймеров состояния системы, которые должны срабатывать даже когда шлюз не работает, продолжайте использовать cron на уровне ОС + простой вызов «curl» или «hermes send» — они запускаются как независимые процессы ОС и не зависят от работы Hermes. Внутренний планировщик — правильный выбор, когда объект мониторинга является внешним.
Похожие
- Автоматизация всего с помощью Cron — шаблоны cron на основе LLM.
- Справочник по запланированным задачам (Cron) — полный синтаксис расписания, жизненный цикл, маршрутизация доставки.
- Вывод сценария конвейера с помощью
hermes send— одноразовый аналог для специальных сценариев. - Gateway Internals — внутренности маршрутизатора доставки.