Cron 内部机制
Hermes 的定时任务功能主要在以下文件中实现:
cron/jobs.pycron/scheduler.pytools/cronjob_tools.pygateway/run.pyhermes_cli/cron.py
调度模型
Hermes 支持:
- 一次性延迟任务
- 间隔任务
- cron 表达式
- 明确的时间戳
面向模型的接口是一个单一的 cronjob 工具,提供操作风格的动作:
createlistupdatepauseresumerunremove
任务存储
定时任务存储在 Hermes 管理的本地状态中(~/.hermes/cron/jobs.json),具有原子写入语义。
每个任务可以包含:
- 提示词
- 调度元数据
- 重复计数器
- 交付目标
- 生命周期状态(
scheduled、paused、completed等) - 零个、一个或多个附加技能
对于仅存储了旧的单一 skill 字段或没有新生命周期字段的旧任务,系统保持了向后兼容性。
运行时行为
调度器会:
- 加载任务
- 计算到期任务
- 在新的代理会话中执行任务
- 可选择在提示词前注入一个或多个技能
- 处理重复计数器
- 更新下次运行元数据和状态
在网关模式下,定时任务调度被集成到长期运行的网关循环中。
基于技能的任务
一个定时任务可以附加多个技能。在运行时,Hermes 会按顺序加载这些技能,然后将任务提示词作为任务指令附加在后面。
这使得定时任务可以复用指导内容,而无需用户将完整的技能内容粘贴到定时任务的提示词中。
递归防护
由定时任务启动的会话会禁用 cronjob 工具集。这可以防止一个定时任务递归地创建或修改更多定时任务,从而意外地激增令牌使用量或调度器负载。
交付模型
定时任务可以交付到:
- 原始聊天
- 本地文件
- 平台的主频道
- 明确的平台/聊天 ID
锁定机制
Hermes 使用基于锁的保护机制,确保重叠的调度器周期不会重复执行同一批到期任务。