Только скриптовые Cron-задачи

Иногда вы уже точно знаете, какое сообщение хотите отправить. Вам не нужен агент, чтобы обдумывать его — вам нужен только скрипт, который запускается по таймеру, и его вывод (если он есть) открывается в Telegram/Discord/Slack/Signal.

Гермес кредит это режим без агента. Это система cron минус LLM.

   ┌──────────────────┐          ┌──────────────────┐
   │ scheduler tick   │  every   │ run script       │
   │ (every N minutes)│ ──────▶ │ (bash or python) │
   └──────────────────┘          └──────────────────┘
                                          │
                                          │ stdout
                                          ▼
                                 ┌──────────────────┐
                                 │ delivery router  │
                                 │ (telegram/disc…) │
                                 └──────────────────┘

Когда использовать

Используйте режим без агента для:

Используйте обычную (LLM-управляемую) задачу cron, когда агенту нужно решить, что сказать — обобщить длинный документ, выбрать интересные элементы из ленты, дружелюбное сообщение. Путь без агента — для случаев, когда стандартный скрипт УЖЕ является сообщением.

Создание через чат

Настоящий режим без агента в том, что агент сам может настроить для вас сторожевую таймер — без редактора, без обработок, без запоминания флагов CLI. Вы указываете, что Гермес пишет скрипт, хотите увидеть его и сообщить, когда он сработает.

Пример диалога

Вы: присылай мне в телеграм, если ОЗУ больше 85%, женщины 5 минут

Hermes: (пишет ~/.hermes/scripts/memory-watchdog.sh, затем вызывает cronjob(...) с no_agent=true)

Настроено. Запускается сеть через 5 минут, оповещает Telegram только тогда, когда ОЗУ достигает 85%. Скрипт: memory-watchdog.sh. Идентификатор задачи: abc123.

Под капотом агент делает два вызова инструментов:

# 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",
)

С этого момента каждый так бесплатен: планировщик запускает скрипт, передаёт его стандартный вывод в Telegram, если он не пуст, и никогда не обращается к моделям.

Что агент решает за вас

Когда вы формулируете запрос типа «предупреди меня, когда X» или «каждые N минут проверяй Y и сообщай, если Z описание», инструмент «cronjob» в Hermes указывает агенту использовать «no_agent=True» каждый раз, когда требования отправляются полностью скриптом. Он возвращается к обычному LLM-пути, когда на запрос рассуждений («обобщи новые проблемы», «выбери самые интересные заголовки», «составь американское напоминание»).

Вам не нужно встречаться с --no-agent самостоятельно. Просто опишите поведение.

Управление сторожевыми таймерами из чата

Агент может приостанавливать, возобновлять, решать и удалять задачи так же, как и создавать их:

Вы: остановили сторожевую память таймера на сегодня

Hermes: (вызывает cronjob(action='pause', job_id='abc123'))

Приостановлено. Возобновите команду «включить обратно» или через hermes cron возобновить abc123.

Вы: измены на женщинах 15 минут

Гермес: (вызывает cronjob(action='update', job_id='abc123', Schedule='каждые 15 минут'))

Полный жизненный цикл (создание/список/обновление/пауза/восстановление/запуск сейчас/удаление команды) доступен агенту без необходимости изучения CLI.

Создание через CLI

Предпочитаете оболочку? Путь CLI выдает тот же результат с командами:

# 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>    # запустить один раз для проверки

Вот и всё. Никакого промпта, никаких навыков, никаких моделей.

Как вывод скрипта сопоставляется с доставкой

Поведение скрипта Результат
Выход 0, непустой стандартный вывод stdout доставляется дословно
Выход 0, пустой стандартный вывод Тихий такт — без доставки
Выход 0, стандартный вывод содержит {"wakeAgent": false} в верхней строке Тихий такт (общий шлюз с LLM-задачами)
Ненулевой кодовый выход Подается оповещение о тревоге (что сломанный сторожевой таймер не молчал)
Тайм-аут скрипта Подается оповещение о тревоге

Поведение «тихо, когда пусто» — ключ к классическому шаблону сторожевого таймера: скрипт может запускаться каждую минуту, но канал видит сообщение только тогда, когда что-то действительно требует внимания.

Правила для скриптов

Скрипты должны находиться в ~/.hermes/scripts/. Это впоследствии как при постановке задачи, так и во время выполнения — абсолютные пути, развёртывание ~/ и обход каталогов (../) отклоняются. Этот же каталог используется для скрипта предварительной проверки, используемого LLM-задачами.

Выбор интерпретатора — при расширении файла:

Расширение Интерпретатор
.sh, .bash /bin/bash
всё остальное sys.executable (текущий Python)

Мы намерены НЕ соблюдать шебанг #!/... — явный и ограниченный набор интерпретаторов ограждают поверхность, которой доверяет планировщик.

Синтаксис расписания

То же самое, что и у всех остальных задач cron:

hermes cron create "every 5m"        # интервал
hermes cron create "every 2h"
hermes cron create "0 9 * * *"       # стандартный cron: ежедневно в 9 утра
hermes cron create "30m"             # одноразовый: запустить один раз через 30 минут

Полный синтаксис см. в справочнике по функциям cron.

Цели доставки

--deliver принимает всё, что знает шлюз. Некоторые распространённые формы:

--deliver telegram                       # домашний канал платформы
--deliver telegram:-1001234567890        # конкретный чат
--deliver telegram:-1001234567890:17585  # конкретная тема форума Telegram
--deliver discord:#ops
--deliver slack:#engineering
--deliver signal:+15551234567
--deliver local                          # просто сохранить в ~/.hermes/cron/output/

Для платформ с токенами ботов (Telegram, Discord, Slack, Signal, SMS, WhatsApp) во время выполнения скрипта не требуется работающий шлюз — инструмент напрямую обращается к REST-эндпоинту каждой платформы, через учётные данные, уже периодически в ~/.hermes/.env / ~/.hermes/config.yaml.

Редактирование и жизненный цикл

hermes cron list                                    # просмотреть все задачи
hermes cron pause <job_id>                          # остановить запуск, сохранить определение
hermes cron resume <job_id>
hermes cron edit <job_id> --schedule "every 10m"    # изменить периодичность
hermes cron edit <job_id> --agent                   # переключиться в режим LLM
hermes cron edit <job_id> --no-agent --script      # переключиться обратно
hermes cron remove <job_id>                         # удалить задачу

Всё, что работает с LLM-задачами (пауза, возобновление, ручной запуск, изменение целей доставки), работает и с задачами без агента.

Пример:).

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"

Молчит, когда обе системы работают менее чем на 90%; выдает правильный код для каждой файловой системы, превысивший порог, когда одна из них возникла.

Сравнение с другими подходами

Подход Какой результат Когда использовать
cronjob --no-agent (эта страница) Ваш скрипт по расписанию Гермес Повторяющиеся сторожевые таймеры / оповещения / метрики, не требующие рассуждений
cronjob (по умолчанию, LLM) Агент с опциональным скриптом предварительной проверки Когда требуется анализ данных
OS cron + curl к подписке webhook Ваш скрипт по расписанию ОС Когда Гермес может быть нездоров (то, что вы мониторите)

Для последних сторожевых таймеров систем здоровья, которые должны ограничивать даже при недоступен шлюзе, проверяйте cron на уровне ОС с помощью простого curl к подписке веб-перехватчика Hermes (или любого другого внешнего конечного пункта'у оповещения) — они измеряют как независимые процессы ОС и не зависят от работоспособности Hermes. Встроенный планировщик — правильный выбор, когда мониторится внешняя сущность.

Связанные разделы