Автоматизируйте всё с помощью Cron
Automate Everything with Cron — easy-to-understand guide based on official docs
Автоматизируйте всё с помощью Cron
Если вы читали наш учебник по боту для ежедневных дайджестов, вы уже знакомы с основами cron-задач. Но это лишь верхушка айсберга. Сегодня копаем глубже — пять реальных сценариев автоматизации, которые можно позаимствовать и адаптировать под свои рабочие процессы.
Прежде чем нырнуть с головой, вот золотое правило: cron-задачи запускаются в свежих сессиях агента без памяти о вашем текущем чате. Ваши промпты должны быть полностью самодостаточными. Включайте всё, что нужно знать агенту: команды, контекст, ожидания. Думайте об этом как об инструкции для очень умного стажёра, который только что вошёл в дверь.
Альтернативы без токенов (экономьте вызовы LLM)
Не каждой автоматизации нужна LLM. Два варианта позволяют полностью избежать затрат токенов:
- Периодический сторожевой пёс — если ваш скрипт уже выдаёт нужное сообщение (алерты о памяти, предупреждения о диске, heartbeat-сигналы), используйте cron-задачи только со скриптом. Тот же планировщик, без LLM. Просто попросите Hermes в чате — инструмент
cronjobсам знает, когда выбратьno_agent=True, и напишет скрипт за вас. - Разовый запуск из работающего скрипта — для шагов CI, post-commit хуков или деплой-скриптов используйте
hermes send, чтобы передать stdout или файл напрямую в Telegram, Discord, Slack и т.д. Запись в cron не нужна.
Паттерн 1: Мониторинг изменений на сайте
Следите за URL и получайте уведомления только при реальных изменениях. Секретное оружие здесь — параметр script: Python-скрипт запускается перед каждым выполнением, и его stdout становится контекстом для агента. Скрипт выполняет механическую работу (загрузка, сравнение), агент — аналитическую (интересно ли это изменение?).
Сначала создайте скрипт мониторинга:
mkdir -p ~/.hermes/scripts
import hashlib, json, os, urllib.request
URL = "https://example.com/pricing"
STATE_FILE = os.path.expanduser("~/.hermes/scripts/.watch-site-state.json")
# Fetch current content
req = urllib.request.Request(URL, headers={"User-Agent": "Hermes-Monitor/1.0"})
content = urllib.request.urlopen(req, timeout=30).read().decode()
current_hash = hashlib.sha256(content.encode()).hexdigest()
# Load previous state
prev_hash = None
if os.path.exists(STATE_FILE):
with open(STATE_FILE) as f:
prev_hash = json.load(f).get("hash")
# Save current state
with open(STATE_FILE, "w") as f:
json.dump({"hash": current_hash, "url": URL}, f)
# Output for the agent
if prev_hash and prev_hash != current_hash:
print(f"CHANGE DETECTED on {URL}")
print(f"Previous hash: {prev_hash}")
print(f"Current hash: {current_hash}")
print(f"\nCurrent content (first 2000 chars):\n{content[:2000]}")
else:
print("NO_CHANGE")
Теперь настройте cron-задачу:
/cron add "every 1h" "If the script output says CHANGE DETECTED, summarize what changed on the page and why it might matter. If it says NO_CHANGE, respond with just [SILENT]." --script ~/.hermes/scripts/watch-site.py --name "Pricing monitor" --deliver telegram
Трюк с [SILENT]: для задач мониторинга скажите агенту отвечать только [SILENT], когда ничего не изменилось. Cron-доставка воспринимает это как маркер тишины — вы получаете уведомления только когда что-то действительно происходит. Никакого спама в тихие часы.
Паттерн 2: Еженедельный отчёт
Собирайте информацию из нескольких источников в форматированную сводку. Задача запускается раз в неделю и доставляет отчёт в ваш основной канал.
/cron add "0 9 * * 1" "Generate a weekly report covering:
1. Search the web for the top 5 AI news stories from the past week
2. Search GitHub for trending repositories in the 'machine-learning' topic
3. Check Hacker News for the most discussed AI/ML posts
Format as a clean summary with sections for each source. Include links.
Keep it under 500 words — highlight only what matters." --name "Weekly AI digest" --deliver telegram
Из CLI:
hermes cron create "0 9 * * 1" \
"Generate a weekly report covering the top AI news, trending ML GitHub repos, and most-discussed HN posts. Format with sections, include links, keep under 500 words." \
--name "Weekly AI digest" \
--deliver telegram
0 9 * * 1 — стандартное cron-выражение: 9:00 утра каждый понедельник.
Паттерн 3: Наблюдатель за GitHub-репозиторием
Отслеживайте новые issues, PR или релизы в репозитории.
/cron add "every 6h" "Check the GitHub repository NousResearch/hermes-agent for:
- New issues opened in the last 6 hours
- New PRs opened or merged in the last 6 hours
- Any new releases
Use the terminal to run gh commands:
gh issue list --repo NousResearch/hermes-agent --state open --json number,title,author,createdAt --limit 10
gh pr list --repo NousResearch/hermes-agent --state all --json number,title,author,createdAt,mergedAt --limit 10
Filter to only items from the last 6 hours. If nothing new, respond with [SILENT].
Otherwise, provide a concise summary of the activity." --name "Repo watcher" --deliver discord
Самодостаточные промпты имеют значение. Обратите внимание, как промпт включает точные команды gh. У cron-агента нет истории переписки с прошлых запусков — распишите всё детально. (Постоянная память загружается, так что сохранённые предпочтения из MEMORY.md переносятся, но не полагайтесь на неё для критически важных деталей задачи.)
Паттерн 4: Конвейер сбора данных
Собирайте данные через регулярные интервалы, сохраняйте в файлы и отслеживайте тренды со временем. Этот паттерн сочетает скрипт (для сбора) с агентом (для анализа).
import json, os, urllib.request
from datetime import datetime
DATA_DIR = os.path.expanduser("~/.hermes/data/prices")
os.makedirs(DATA_DIR, exist_ok=True)
# Fetch current data (example: crypto prices)
url = "https://api.coingecko.com/api/v3/simple/price?ids=bitcoin,ethereum&vs_currencies=usd"
data = json.loads(urllib.request.urlopen(url, timeout=30).read())
# Append to history file
entry = {"timestamp": datetime.now().isoformat(), "prices": data}
history_file = os.path.join(DATA_DIR, "history.jsonl")
with open(history_file, "a") as f:
f.write(json.dumps(entry) + "\n")
# Output for the agent
print(f"Collected prices at {entry['timestamp']}: {data}")
Затем настройте cron-задачу, которая запускает скрипт и просит агента проанализировать собранные данные:
/cron add "every 30m" "Run the collection script, then analyze the price history in ~/.hermes/data/prices/history.jsonl. If you notice a significant trend (more than 5% change in the last hour), summarize it. Otherwise respond with [SILENT]." --script ~/.hermes/scripts/collect-prices.py --name "Price tracker" --deliver telegram
Паттерн 5: Подход «Просто спроси»
Не хотите писать скрипты или запоминать синтаксис cron? Просто опишите, что нужно, на простом языке:
/cron add "every 2h" "Check if there are any new articles about AI regulation on Google News. If there are, summarize the top 3. If nothing new, respond with [SILENT]." --name "AI regulation watch" --deliver telegram
Агент сам разберётся с остальным — поиском в интернете, фильтрацией результатов и форматированием вывода.
Подводим итоги
Эти пять паттернов покрывают самые распространённые сценарии автоматизации: мониторинг, отчёты, наблюдение за репозиториями, сбор данных и простые задачи «просто спроси». Ключевые выводы:
- Скрипты выполняют механическую работу — загрузка, сравнение, сбор
- Агенты выполняют аналитическую работу — интересно ли это? что изменилось? почему это важно?
[SILENT]защищает от спама — уведомления приходят только когда что-то действительно важно- Самодостаточные промпты обязательны — агент каждый раз начинает с чистого листа
Полную документацию по функциям смотрите в разделе Запланированные задачи (Cron). Удачной автоматизации!
📖 Официальная документация
Эта статья основана на официальной документации Hermes Agent :Официальные документы › guides/automate-with-cron