Tự động hóa mọi thứ với Cron
Hướng dẫn về bot tóm tắt hàng ngày bao gồm những điều cơ bản. Hướng dẫn này còn đi xa hơn — năm mẫu tự động hóa trong thế giới thực mà bạn có thể điều chỉnh cho phù hợp với quy trình làm việc của riêng mình.
Để biết thông tin tham khảo đầy đủ về tính năng, hãy xem Tác vụ đã lên lịch (Cron).
Các công việc định kỳ chạy trong các phiên tác nhân mới mà không có bộ nhớ về cuộc trò chuyện hiện tại của bạn. Lời nhắc phải hoàn toàn khép kín — bao gồm mọi thông tin mà tổng đài viên cần biết.
Mẫu 1: Giám sát thay đổi trang web
Xem URL để biết các thay đổi và chỉ nhận được thông báo khi có gì đó khác biệt.
Tham số script chính là vũ khí bí mật ở đây. Tập lệnh Python chạy trước mỗi lần thực thi và thiết bị xuất chuẩn của nó trở thành ngữ cảnh cho tác nhân. Kịch bản xử lý công việc cơ khí (tìm nạp, tìm khác biệt); tác nhân xử lý lý do (sự thay đổi này có thú vị không?).
Tạo tập lệnh giám sát:
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")
Thiết lập công việc định kỳ:
/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
Khi phản hồi cuối cùng của tổng đài viên chứa [SILENT], quá trình phân phối sẽ bị dừng. Điều này có nghĩa là bạn chỉ nhận được thông báo khi có điều gì đó thực sự xảy ra — không có thư rác vào những giờ yên tĩnh.
Mẫu 2: Báo cáo tuần
Biên soạn thông tin từ nhiều nguồn thành một bản tóm tắt có định dạng. Điều này chạy mỗi tuần một lần và gửi đến kênh chủ của bạn.
/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
Từ 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 là biểu thức cron tiêu chuẩn: 9:00 sáng Thứ Hai hàng tuần.
Mẫu 3: Trình theo dõi kho lưu trữ GitHub
Giám sát kho lưu trữ để biết các số phát hành, PR hoặc bản phát hành mới.
/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
:::cảnh báo Lời nhắc độc lập
Lưu ý lời nhắc bao gồm các lệnh gh chính xác như thế nào. Tác nhân cron không có bộ nhớ về các lần chạy trước đó hoặc tùy chọn của bạn - hãy đánh vần mọi thứ.
:::
Mẫu 4: Đường ống thu thập dữ liệu
Quét dữ liệu đều đặn, lưu vào tệp và phát hiện xu hướng theo thời gian. Mẫu này kết hợp một tập lệnh (để thu thập) với tác nhân (để phân tích).
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")
# Load recent history for analysis
lines = open(history_file).readlines()
recent = [json.loads(l) for l in lines[-24:]] # Last 24 data points
# Output for the agent
print(f"Current: BTC=${data['bitcoin']['usd']}, ETH=${data['ethereum']['usd']}")
print(f"Data points collected: {len(lines)} total, showing last {len(recent)}")
print(f"\nRecent history:")
for r in recent[-6:]:
print(f" {r['timestamp']}: BTC=${r['prices']['bitcoin']['usd']}, ETH=${r['prices']['ethereum']['usd']}")
/cron add "every 1h" "Analyze the price data from the script output. Report:
1. Current prices
2. Trend direction over the last 6 data points (up/down/flat)
3. Any notable movements (>5% change)
If prices are flat and nothing notable, respond with [SILENT].
If there's a significant move, explain what happened." \
--script ~/.hermes/scripts/collect-prices.py \
--name "Price tracker" \
--deliver telegram
Kịch bản thực hiện việc thu thập cơ học; tác nhân thêm lớp lý luận.
Mẫu 5: Quy trình làm việc đa kỹ năng
Xâu chuỗi các kỹ năng lại với nhau để thực hiện các nhiệm vụ theo lịch trình phức tạp. Các kỹ năng được tải theo thứ tự trước khi lời nhắc thực thi.
# Use the arxiv skill to find papers, then the obsidian skill to save notes
/cron add "0 8 * * *" "Search arXiv for the 3 most interesting papers on 'language model reasoning' from the past day. For each paper, create an Obsidian note with the title, authors, abstract summary, and key contribution." \
--skill arxiv \
--skill obsidian \
--name "Paper digest"
Từ công cụ trực tiếp:
cronjob(
action="create",
skills=["arxiv", "obsidian"],
prompt="Search arXiv for papers on 'language model reasoning' from the past day. Save the top 3 as Obsidian notes.",
schedule="0 8 * * *",
name="Paper digest",
deliver="local"
)
Các kỹ năng được tải theo thứ tự — trước tiên là arxiv (dạy nhân viên cách tìm kiếm giấy tờ), sau đó là obsidian (dạy cách viết ghi chú). Lời nhắc gắn kết chúng lại với nhau.
Quản lý công việc của bạn
# List all active jobs
/cron list
# Trigger a job immediately (for testing)
/cron run <job_id>
# Pause a job without deleting it
/cron pause <job_id>
# Edit a running job's schedule or prompt
/cron edit <job_id> --schedule "every 4h"
/cron edit <job_id> --prompt "Updated task description"
# Add or remove skills from an existing job
/cron edit <job_id> --skill arxiv --skill obsidian
/cron edit <job_id> --clear-skills
# Remove a job permanently
/cron remove <job_id>
Mục tiêu phân phối
Cờ --deliver kiểm soát kết quả đi đến đâu:
| Mục tiêu | Ví dụ | Trường hợp sử dụng |
|---|---|---|
origin | --deliver origin | Cuộc trò chuyện tương tự đã tạo công việc (mặc định) |
local | --deliver local | Chỉ lưu vào tệp cục bộ |
telegram | --deliver telegram | Kênh chủ Telegram của bạn |
discord | --deliver discord | Kênh chính Discord của bạn |
slack | --deliver slack | Kênh trang chủ Slack của bạn |
| Trò chuyện cụ thể | --deliver telegram:-1001234567890 | Một nhóm Telegram cụ thể |
| Luồng | --deliver telegram:-1001234567890:17585 | Một chủ đề chủ đề Telegram cụ thể |
Mẹo
Tạo lời nhắc độc lập. Nhân viên hỗ trợ trong công việc định kỳ không có bộ nhớ về các cuộc trò chuyện của bạn. Bao gồm URL, tên kho lưu trữ, tùy chọn định dạng và hướng dẫn gửi trực tiếp trong lời nhắc.
Sử dụng [SILENT] một cách thoải mái. Để giám sát công việc, hãy luôn kèm theo các hướng dẫn như "nếu không có gì thay đổi, hãy phản hồi bằng [SILENT]". Điều này ngăn chặn tiếng ồn thông báo.
Sử dụng tập lệnh để thu thập dữ liệu. Tham số script cho phép tập lệnh Python xử lý các phần nhàm chán (yêu cầu HTTP, I/O tệp, theo dõi trạng thái). Tác nhân chỉ nhìn thấy thiết bị xuất chuẩn của tập lệnh và áp dụng lý do cho nó. Điều này rẻ hơn và đáng tin cậy hơn so với việc để đại lý tự tìm nạp.
Kiểm tra bằng /cron run. Trước khi chờ lịch kích hoạt, hãy sử dụng /cron run <job_id> để thực thi ngay lập tức và xác minh rằng kết quả đầu ra có vẻ đúng.
Lên lịch biểu thức. Các định dạng mà con người có thể đọc được như every 2h, 30m và daily at 9am đều hoạt động cùng với các biểu thức cron tiêu chuẩn như 0 9 * * *.
Để có tài liệu tham khảo cron đầy đủ — tất cả các tham số, trường hợp biên và phần bên trong — hãy xem Tác vụ đã lên lịch (Cron).