Script Only
On this page
Иногда вы уже точно знаете, какое сообщение хотите отправить. Вам не нужен агент, чтобы обдумывать его — вам просто нужен скрипт, запускаемый по таймеру, и его вывод (если он есть) должен попадать в Telegram / Discord / Slack / Signal.
Hermes называет это режим без агента (no-agent mode). Это система cron минус LLM.
[code]
┌──────────────────┐ ┌──────────────────┐
│ тик планировщика │ каждые │ запуск скрипта │
│ (каждые N минут) │ ──────▶ │ (bash или python)│
└──────────────────┘ └──────────────────┘
│
│ stdout
▼
┌──────────────────┐
│ маршрутизатор │
│ доставки │
│ (telegram/disc…) │
└──────────────────┘
[/code]
* Без вызова LLM. Ноль токенов, ноль циклов агента, ноль затрат на модель.
* Скрипт — это задача. Скрипт решает, нужно ли оповещать. Выдал вывод → сообщение отправлено. Ничего не выдал → тихий тик.
* Bash или Python. Файлы .sh / .bash выполняются через /bin/bash; любое другое расширение выполняется через текущий интерпретатор Python. Принимается всё, что находится в ~/.hermes/scripts/.
* Тот же планировщик. Живёт в cronjob вместе с LLM-задачами — пауза, возобновление, список, логи и настройка доставки работают одинаково.
Когда использовать¶
Используйте режим без агента для:
- Наблюдение за памятью / диском / GPU. Запуск каждые 5 минут, оповещение только при превышении порога.
- CI-хуки. Развёртывание завершено → отправка SHA коммита. Сборка не удалась → отправка последних 100 строк лога.
- Периодические метрики. «Дневная выручка Stripe в 9 утра» — простой API-запрос + красивое форматирование.
- Опрос внешних событий. Проверка API, оповещение об изменении состояния.
- Heartbeat-сигналы. Отправка сигнала на дашборд каждые N минут, чтобы подтвердить, что хост жив.
Используйте обычную (LLM-управляемую) cron-задачу, когда агенту нужно решить, что сказать — обобщить длинный документ, выбрать интересные элементы из ленты, написать понятное человеку сообщение. Путь без агента предназначен для случаев, где stdout скрипта УЖЕ является сообщением.
Создание через чат¶
Главное преимущество режима без агента в том, что агент сам может настроить для вас наблюдателя — без редактора, без терминала, без запоминания флагов CLI. Вы описываете, что хотите, Hermes пишет скрипт, планирует его и сообщает, когда он сработает.
Пример диалога¶
Вы: присылай мне в телеграм, если RAM больше 85%, каждые 5 минут Hermes: (пишет
~/.hermes/scripts/memory-watchdog.sh, затем вызываетcronjob(...)сno_agent=true) Готово. Запускается каждые 5 мин, оповещает Telegram только когда RAM > 85%. Скрипт:memory-watchdog.sh. ID задачи:abc123.
Под капотом агент совершает два вызова инструментов:
[code]
# 1. Написать проверочный скрипт
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
# Пустой stdout = тихий тик; сообщение не отправляется.
''',
)
# 2. Запланировать — no_agent=True пропускает LLM на каждом тике
cronjob(
action="create",
schedule="every 5m",
script="memory-watchdog.sh",
no_agent=True,
deliver="telegram",
name="memory-watchdog",
)
[/code]
С этого момента каждый тик бесплатен: планировщик запускает скрипт, перенаправляет его stdout в Telegram (если не пусто) и никогда не обращается к модели.
Что агент решает за вас¶
Когда вы формулируете запрос вроде «предупреди меня, когда X» или «каждые N минут проверяй Y и сообщай мне, если Z», описание инструмента cronjob в Hermes указывает агенту использовать no_agent=True всякий раз, когда содержание сообщения полностью определяется скриптом. Он переключается на обычный LLM-управляемый путь, когда запрос требует размышлений («обобщи новые проблемы», «выбери самые интересные заголовки», «напиши дружеское напоминание»).
Вам не нужно указывать --no-agent самостоятельно. Просто опишите желаемое поведение.
Управление наблюдателями из чата¶
Агент может приостанавливать, возобновлять, редактировать и удалять задачи так же, как он их создаёт:
Вы: останови memory watchdog на今晚 Hermes: (вызывает
cronjob(action='pause', job_id='abc123')) Приостановлено. Возобновите командой «включи обратно» или черезhermes cron resume abc123. Вы: измени на каждые 15 минут Hermes: (вызываетcronjob(action='update', job_id='abc123', schedule='every 15m'))
Полный жизненный цикл (создать / список / обновить / приостановить / возобновить / запустить сейчас / удалить) доступен агенту без необходимости изучать команды CLI.
Создание через CLI¶
Предпочитаете терминал? Путь через CLI даёт тот же результат тремя командами:
[code]
# 1. Напишите скрипт
cat > ~/.hermes/scripts/memory-watchdog.sh <<'EOF'
#!/usr/bin/env bash
# Оповещение, когда использование RAM превышает 85%. Иначе молчание.
RAM_PCT=$(free | awk '/^Mem:/ {printf "%d", $3 * 100 / $2}')
if [ "$RAM_PCT" -ge 85 ]; then
echo "⚠ RAM ${RAM_PCT}% on $(hostname)"
fi
# Пустой stdout = тихий запуск; сообщение не отправляется.
EOF
chmod +x ~/.hermes/scripts/memory-watchdog.sh
# 2. Запланируйте
hermes cron create "every 5m" \
--no-agent \
--script memory-watchdog.sh \
--deliver telegram \
--name "memory-watchdog"
# 3. Проверьте
hermes cron list
hermes cron run <job_id> # запустите один раз для теста
[/code]
Вот и всё. Никакого промпта, никакого навыка, никакой модели.
Как вывод скрипта преобразуется в доставку¶
| Поведение скрипта | Результат |
|---|---|
| Код 0, непустой stdout | stdout доставляется как есть |
| Код 0, пустой stdout | Тихий тик — без доставки |
Код 0, stdout содержит {"wakeAgent": false} на последней строке |
Тихий тик (общий механизм с LLM-задачами) |
| Ненулевой код возврата | Доставляется оповещение об ошибке (чтобы сломавшийся наблюдатель не молчал) |
| Тайм-аут скрипта | Доставляется оповещение об ошибке |
Поведение «тихо, когда пусто» — ключ к классическому паттерну наблюдателя: скрипт может запускаться каждую минуту, но канал увидит сообщение только тогда, когда что-то действительно требует внимания.
Правила для скриптов¶
Скрипты должны находиться в ~/.hermes/scripts/. Это проверяется как при создании задачи, так и во время выполнения — абсолютные пути, ~/ и обходы пути (../) отклоняются. Та же директория используется для шлюза с предварительной проверкой скриптов в LLM-задачах.
Интерпретатор выбирается по расширению файла:
| Расширение | Интерпретатор |
|---|---|
.sh, .bash |
/bin/bash |
| всё остальное | sys.executable (текущий Python) |
Мы намеренно НЕ поддерживаем шебанг #!/... — явный и ограниченный набор интерпретаторов уменьшает поверхность атаки, которой доверяет планировщик.
Синтаксис расписания¶
Такой же, как у всех остальных cron-задач:
[code]
hermes cron create "every 5m" # интервал
hermes cron create "every 2h"
hermes cron create "0 9 * * *" # стандартный cron: ежедневно в 9 утра
hermes cron create "30m" # одноразовый: запустить один раз через 30 минут
[/code]
Полный синтаксис см. в справочнике cron.
Цели доставки¶
--deliver принимает всё, что известно шлюзу. Некоторые распространённые примеры:
[code]
--deliver telegram # домашний канал платформы
--deliver telegram:-1001234567890 # конкретный чат
--deliver telegram:-1001234567890:17585 # конкретная тема форума Telegram
--deliver discord:#ops
--deliver slack:#engineering
--deliver signal:+15551234567
--deliver local # просто сохранить в ~/.hermes/cron/output/
[/code]
Для платформ с bot-токенами (Telegram, Discord, Slack, Signal, SMS, WhatsApp) во время выполнения скрипта не требуется работающий шлюз — инструмент напрямую вызывает REST-эндпоинты каждой платформы, используя учётные данные из ~/.hermes/.env / ~/.hermes/config.yaml.
Редактирование и жизненный цикл¶
[code]
hermes cron list # просмотр всех задач
hermes cron pause
hermes cron resume
hermes cron edit
hermes cron edit
hermes cron edit
hermes cron remove
[/code]
Всё, что работает с LLM-задачами (пауза, возобновление, ручной запуск, изменение цели доставки), работает и с задачами без агента.
Пример: Оповещение о дисковом пространстве¶
[code]
cat > ~/.hermes/scripts/disk-alert.sh <<'EOF'
#!/usr/bin/env bash
# Оповещение, когда / или /home заполнены более чем на 90%.
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"
[/code]
Молчание, когда обе файловые системы заполнены менее чем на 90%; отправляет ровно одну строку для каждой файловой системы, превысившей порог, когда одна из них заполняется.
Сравнение с другими подходами¶
| Подход | Что выполняется | Когда использовать |
|---|---|---|
hermes send (одноразово) |
Любая команда оболочки, передающая вывод в него | Ad-hoc доставка или как действие внешнего планировщика (systemd, launchd) |
cronjob --no-agent (эта страница) |
Ваш скрипт по расписанию Hermes | Периодические наблюдатели / оповещения / метрики, не требующие рассуждений |
cronjob (по умолчанию, LLM) |
Агент с опциональным скриптом предварительной проверки | Когда содержимое сообщения требует анализа данных |
OS cron + hermes send |
Ваш скрипт по расписанию ОС | Когда Hermes может быть нездоров (то, что вы мониторите) |
Для критических наблюдателей за работоспособностью системы, которые должны срабатывать даже когда шлюз недоступен, продолжайте использовать OS-уровневый cron + простой вызов curl или hermes send — они работают как независимые процессы ОС и не зависят от работоспособности Hermes. Встроенный планировщик — правильный выбор, когда мониторится внешний объект.
Связанные материалы¶
- Автоматизация всего с помощью Cron — LLM-управляемые cron-паттерны.
- Справочник по запланированным задачам (Cron) — полный синтаксис расписания, жизненный цикл, маршрутизация доставки.
- Передача вывода скрипта через
hermes send— одноразовый аналог для ad-hoc скриптов. -
Внутреннее устройство шлюза — внутренности маршрутизатора доставки.
- Создание через чат
- Создание через CLI
- Как вывод скрипта преобразуется в доставку
- Правила для скриптов
- Синтаксис расписания
- Цели доставки
- Редактирование и жизненный цикл
- Пример: Оповещение о дисковом пространстве
- Сравнение с другими подходами
- Связанные материалы