Прокачай свой крон: 5 паттернов автоматизации, которые можно применить уже сегодня
Cron Troubleshooting Guide — easy-to-understand guide based on official docs
Прокачай свой крон: 5 паттернов автоматизации, которые можно применить уже сегодня
Итак, ты настроил свой первый cron-джоб с Hermes Agent и подсел. Но знаешь ли ты, что возможностей гораздо больше? Учебник по ежедневному боту-дайджесту — это только начало. Давай рассмотрим пять реальных паттернов автоматизации, которые сделают твою жизнь проще.
Золотое правило: самодостаточные промпты
Прежде чем мы начнём, вот самое важное, что нужно запомнить: cron-джобы запускаются в новых сессиях агента. У твоего агента нет никакой памяти о текущем чате. Поэтому каждый промпт должен быть полностью самодостаточным — включай всё, что нужно агенту: от контекста до точных команд.
Пропускай LLM, когда она не нужна
Не каждая автоматизация требует языковую модель. У тебя есть два варианта с нулевым расходом токенов:
- Периодический сторожевой пёс: Если твой скрипт уже выдаёт готовое сообщение (например, алерты о памяти или heartbeat-сигналы), используй cron-джобы только со скриптом. Просто попроси Hermes в чате — инструмент
cronjobсам знает, когда использоватьno_agent=True, и напишет скрипт за тебя. - Разовый запуск из работающего скрипта: Для шагов CI или вебхуков деплоя используй
hermes send, чтобы передать вывод напрямую в Telegram или Discord без настройки cron.
Паттерн 1: Мониторинг изменений на сайте
Хочешь знать, когда изменится страница с ценами или конкурент обновит свой сайт? Этот паттерн использует Python-скрипт для механической работы, а агент занимается анализом.
Сначала создай свой скрипт мониторинга:
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: Еженедельный отчёт
Собирай информацию из нескольких источников в форматированную сводку. Запускается каждый понедельник в 9 утра:
/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-репозиторием
Следи за любым репозиторием: новые issue, 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")
print(f"Collected prices at {entry['timestamp']}: BTC ${data['bitcoin']['usd']}, ETH ${data['ethereum']['usd']}")
Затем настрой cron-джоб, который запускает скрипт и просит агента проанализировать собранные данные на предмет трендов.
Паттерн 5: Сторожевой пёс только на скрипте
Для алертов, где скрипт уже выдаёт готовое сообщение, пропусти LLM полностью:
/cron add "every 5m" --script ~/.hermes/scripts/check-disk.py --no-agent --deliver slack
Инструмент cronjob автоматически выбирает no_agent=True, когда это имеет смысл, и пишет скрипт за тебя.
Готов к автоматизации?
Эти паттерны — только отправная точка. Комбинируй их: используй скрипты для механической работы, агентов — для анализа, а [SILENT] — чтобы держать уведомления чистыми. Полную справку по функциям смотри в документации Scheduled Tasks (Cron). Удачной автоматизации!
📖 Официальная документация
Эта статья основана на официальной документации Hermes Agent :Официальные документы › guides/automate-with-cron