Скриптовые Cron-задачи
Иногда вы уже точно знаете, какое сообщение хотите отправить. Вам не нужен агент, чтобы обдумывать его — вам просто нужен скрипт, запускающийся по таймеру, и его вывод (если он есть), попадающий в Telegram / Discord / Slack / Signal.
VibeOS называет это режимом без агента. Это система cron минус LLM.
┌──────────────────┐ ┌──────────────────┐
│ тик планировщика │ каждые │ запуск скрипта │
│ (каждые N минут) │ ──────▶ │ (bash или python)│
└──────────────────┘ └──────────────────┘
│
│ stdout
▼
┌──────────────────┐
│ маршрутизатор │
│ доставки │
│ (telegram/disc…) │
└──────────────────┘
- Нет вызова LLM. Ноль токенов, ноль циклов агента, ноль затрат на модель.
- Скрипт — это задача. Скрипт решает, нужно ли предупреждать. Выдаёт вывод → сообщение отправляется. Не выдаёт ничего → тихий тик.
- Bash или Python. Файлы
.sh/.bashвыполняются через/bin/bash; любое другое расширение — через текущий интерпретатор Python. Принимаются любые файлы в~/.vibeos/scripts/. - Тот же планировщик. Живёт в
cronjobвместе с LLM-задачами — пауза, возобновление, список, логи и настройка доставки работают одинаково.
Когда использовать
Используйте режим без агента для:
- Сторожей памяти / диска / GPU. Запуск каждые 5 минут, оповещение только при превышении порога.
- CI-хуков. Развёртывание завершено → опубликовать SHA коммита. Сборка не удалась → отправить последние 100 строк лога.
- Периодических метрик. «Ежедневная выручка Stripe в 9 утра» как простой вызов API + красивое форматирование.
- Внешних опросчиков событий. Проверить API, оповестить об изменении состояния.
- Heartbeat-сигналов. Пинговать панель управления каждые N минут, чтобы подтвердить, что хост жив.
Используйте обычную (управляемую LLM) cron-задачу, когда агенту нужно решить, что сказать — обобщить длинный документ, выбрать интересные пункты из ленты, составить дружественное сообщение. Путь без агента — для случаев, когда stdout скрипта УЖЕ является сообщением.
Создание через чат
Настоящее преимущество режима без агента в том, что сам агент может настроить для вас сторожа — без редактора, без оболочки, без запоминания флагов CLI. Вы описываете, что хотите, VibeOS пишет скрипт, планирует его и сообщает, когда он сработает.
Пример диалога
Вы: пингуй меня в телеграм, если RAM больше 85%, каждые 5 минут
VibeOS: (пишет
~/.vibeos/scripts/memory-watchdog.sh, затем вызываетcronjob(...)сno_agent=true)Настроено. Запускается каждые 5 мин, оповещает Telegram только когда RAM превышает 85%. Скрипт:
memory-watchdog.sh. ID задачи:abc123.
Под капотом агент делает два вызова инструментов:
# 1. Написать проверочный скрипт
write_file(
path="~/.vibeos/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}% на $(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",
)
С этого момента каждый тик бесплатен: планировщик запускает скрипт, передаёт его stdout в Telegram, если он не пуст, и никогда не обращается к модели.
Что агент решает за вас
Когда вы формулируете запрос вроде «предупреди меня, когда X» или «каждые N минут проверяй Y и сообщай, если Z», описание инструмента cronjob в VibeOS указывает ему использовать no_agent=True всякий раз, когда содержимое сообщения полностью определяется скриптом. Он возвращается к обычному пути с LLM, когда запрос требует рассуждений («обобщи новые проблемы», «выбери самые интересные заголовки», «составь дружеское напоминание»).
Вам не нужно указывать --no-agent самостоятельно. Просто опишите поведение.
Управление сторожевыми задачами из чата
Агент может приостанавливать, возобновлять, редактировать и удалять задачи так же, как и создавать их:
Вы: останови сторожевую задачу памяти на сегодняшнюю ночь
VibeOS: (вызывает
cronjob(action='pause', job_id='abc123'))Приостановлено. Возобновите командой «включи обратно» или через
vibeos cron resume abc123.
Вы: измени на каждые 15 минут
VibeOS: (вызывает
cronjob(action='update', job_id='abc123', schedule='every 15m'))
Полный жизненный цикл (создание / список / обновление / пауза / возобновление / запуск сейчас / удаление) доступен агенту без необходимости изучать какие-либо команды CLI.
Создание через CLI
Предпочитаете оболочку? Путь через CLI даёт тот же результат тремя командами:
# 1. Напишите свой скрипт
cat > ~/.vibeos/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}% на $(hostname)"
fi
# Пустой stdout = тихий запуск; сообщение не отправляется.
EOF
chmod +x ~/.vibeos/scripts/memory-watchdog.sh
# 2. Запланируйте его
vibeos cron create "every 5m" \
--no-agent \
--script memory-watchdog.sh \
--deliver telegram \
--name "memory-watchdog"
# 3. Проверьте
vibeos cron list
vibeos cron run <job_id> # запустите один раз для теста
Вот и всё. Никакого промпта, никакого навыка, никакой модели.
Как вывод скрипта сопоставляется с доставкой
| Поведение скрипта | Результат |
|---|---|
| Выход 0, непустой stdout | stdout доставляется дословно |
| Выход 0, пустой stdout | Тихий тик — без доставки |
Выход 0, stdout содержит {"wakeAgent": false} в последней строке | Тихий тик (общий шлюз с LLM-задачами) |
| Ненулевой код выхода | Доставляется оповещение об ошибке (чтобы сломанный сторож не молчал) |
| Тайм-аут скрипта | Доставляется оповещение об ошибке |
Поведение «тишина при пустом выводе» — ключ к классическому шаблону сторожевой задачи: скрипт может выполняться каждую минуту, но канал видит сообщение только тогда, когда что-то действительно требует внимания.
Правила для скриптов
Скрипты должны находиться в ~/.vibeos/scripts/. Это проверяется как при создании задачи, так и во время выполнения — абсолютные пути, подстановка ~/ и шаблоны обхода пути (../) отклоняются. Этот же каталог используется для шлюза предварительной проверки в LLM-задачах.
Выбор интерпретатора — по расширению файла:
| Расширение | Интерпретатор |
|---|---|
.sh, .bash | /bin/bash |
| всё остальное | sys.executable (текущий Python) |
Мы намеренно НЕ учитываем шебанг #!/... — явный и ограниченный набор интерпретаторов уменьшает поверхность, которой доверяет планировщик.
Синтаксис расписания
Такой же, как и для всех остальных cron-задач:
vibeos cron create "every 5m" # интервал
vibeos cron create "every 2h"
vibeos cron create "0 9 * * *" # стандартный cron: ежедневно в 9 утра
vibeos 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 # просто сохранить в ~/.vibeos/cron/output/
Для платформ с токенами ботов (Telegram, Discord, Slack, Signal, SMS, WhatsApp) во время выполнения скрипта не требуется работающий шлюз — инструмент напрямую вызывает REST-эндпоинты каждой платформы, используя учётные данные, уже находящиеся в ~/.vibeos/.env / ~/.vibeos/config.yaml.
Редактирование и жизненный цикл
vibeos cron list # просмотреть все задачи
vibeos cron pause <job_id> # остановить выполнение, сохранить определение
vibeos cron resume <job_id>
vibeos cron edit <job_id> --schedule "every 10m" # изменить периодичность
vibeos cron edit <job_id> --agent # переключить в режим LLM
vibeos cron edit <job_id> --no-agent --script … # переключить обратно
vibeos cron remove <job_id> # удалить задачу
Всё, что работает с LLM-задачами (пауза, возобновление, ручной запуск, изменение цели доставки), работает и с задачами без агента.
Пример: Оповещение о дисковом пространстве
cat > ~/.vibeos/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 "⚠ Диск %s заполнен на %s на %s\n", $5, $6, hostname
}
'
EOF
chmod +x ~/.vibeos/scripts/disk-alert.sh
vibeos cron create "*/15 * * * *" \
--no-agent \
--script disk-alert.sh \
--deliver telegram \
--name "disk-alert"
Молчание, когда обе файловые системы заполнены менее чем на 90%; отправляет ровно одну строку для каждой файловой системы, превысившей порог, когда одна из них заполняется.
Сравнение с другими подходами
| Подход | Что выполняется | Когда использовать |
|---|---|---|
cronjob --no-agent (эта страница) | Ваш скрипт по расписанию VibeOS | Повторяющиеся сторожевые задачи / оповещения / метрики, не требующие рассуждений |
cronjob (по умолчанию, с LLM) | Агент с опциональным скриптом предварительной проверки | Когда содержимое сообщения требует анализа данных |
Системный cron + curl к вебхук-подписке | Ваш скрипт по расписанию ОС | Когда VibeOS может быть нездоров (то, что вы мониторите) |
Для критически важных сторожевых задач, которые должны срабатывать даже когда шлюз недоступен, используйте системный cron с обычным curl к вебхук-подписке VibeOS (или любой внешней конечной точке оповещения) — они выполняются как независимые процессы ОС и не зависят от работы VibeOS. Встроенный планировщик — правильный выбор, когда мониторится внешний объект.
Связанные разделы
- Автоматизация всего с помощью Cron — шаблоны cron с LLM.
- Справочник по запланированным задачам (Cron) — полный синтаксис расписания, жизненный цикл, маршрутизация доставки.
- Вебхук-подписки — точки входа HTTP для внешних планировщиков.
- Внутреннее устройство шлюза — внутренности маршрутизатора доставки.