Skip to content

Hermes Cron 与后台系统

定时任务系统

text
cron/
├── jobs.py               # Job 存储管理(1,539 行)
├── scheduler.py          # 调度器
└── scheduler_provider.py # Gateway 内嵌调度

Job 存储

json
// ~/.hermes/cron/jobs.json
{
  "id": "abc123",
  "name": "天气播报",
  "prompt": "查询北京今天的天气...",
  "schedule": "0 8 * * *",
  "skills": ["weather"],
  "model": {"provider": "custom", "model": "gpt-5.6-sol"},
  "enabled": true,
  "deliver": "telegram",
  "script": null,
  "no_agent": false
}

Job 执行周期

Ticker (每 60s)

load_jobs()

for job in due_jobs:
    mark_job_starting()
    spawn_agent(job)        # 在隔离线程中
    agent.run_conversation(job.prompt)
    save_output()           # ~/.hermes/cron/output/{job_id}/{timestamp}.md
    deliver()               # 推送到指定平台
    mark_job_completed()
    advance_next_run()

两种执行模式

LLM-Driven(默认)

python
# job 的 prompt/skills 交给 LLM
# agent 自己决定用什么工具、怎么回答

Script-Only(no_agent=True)

python
# 执行 script,stdout 作为消息直接推送
# 无 LLM 参与,零 token 消耗
# 适合:磁盘预警、进程监控、心跳检测

Job 链

python
# cronjobs 支持 job 之间的上下文传递
job_b = {
    "prompt": "分析数据",
    "context_from": ["job_a_id"]  # 注入 job_a 的最近输出
}

Safety

机制说明
Cross-process lockfcntl.flock 防止并发写入 jobs.json
Immutable ID创建后不可改,防止路径穿越
Ticker heartbeatticker_heartbeat 文件,status 检查调度器存活
Success heartbeatticker_last_success 文件,区分"活着但失败"
One-shot grace一次性任务有 120s 宽限期

Pi / OpenCode 有没有 Cron?

项目Cron
Pi❌ 无
OpenCode❌ 无(可在外部 cron 调用 CLI)
Hermes✅ 核心功能,内嵌调度器

Hermes 的 cron 是它区别于 coding agent 框架的最大差异之一——它体现了 Hermes 作为"个人 AI 操作系统"的取向。

Powered by VitePress