惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Hackread – Cybersecurity News, Data Breaches, AI and More
C
Check Point Blog
Hacker News: Ask HN
Hacker News: Ask HN
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
WordPress大学
WordPress大学
P
Proofpoint News Feed
V
Visual Studio Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
N
Netflix TechBlog - Medium
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 聂微东
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
博客园 - 叶小钗
Cisco Talos Blog
Cisco Talos Blog
S
Schneier on Security
T
Threat Research - Cisco Blogs
腾讯CDC
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
The Hacker News
The Hacker News
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
GbyAI
GbyAI
N
News | PayPal Newsroom
L
LINUX DO - 最新话题
酷 壳 – CoolShell
酷 壳 – CoolShell
P
Palo Alto Networks Blog
T
Tenable Blog
S
Secure Thoughts
T
Threatpost
V2EX - 技术
V2EX - 技术
大猫的无限游戏
大猫的无限游戏
Martin Fowler
Martin Fowler
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Vercel News
Vercel News
罗磊的独立博客
P
Privacy & Cybersecurity Law Blog
Engineering at Meta
Engineering at Meta
小众软件
小众软件
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
Y
Y Combinator Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Cybersecurity and Infrastructure Security Agency CISA
P
Proofpoint News Feed
L
Lohrmann on Cybersecurity
P
Privacy International News Feed
H
Heimdal Security Blog
量子位
B
Blog

博客园 - 我才是银古

第16章:常见问题、排错与最佳实践 第15章:扩展生态、MCAD 与外部集成 第12章:实战案例:机械结构与 3D 打印零件 第14章:构建、测试、调试与贡献流程 第13章:OpenSCAD 源码架构与核心执行流程 第11章:预览、渲染、网格精度与性能优化 第09章:列表推导、递归与算法建模 第08章:参数化零件库与复用设计 第10章:导入导出、命令行与自动化 第06章:CSG 布尔建模方法 第07章:二维图形、拉伸、旋转与投影 第05章:基础几何、坐标系与变换 第04章:参数、变量、函数、模块与作用域 OpenSCAD 教程目录 第03章:OpenSCAD 语言基础 第02章:安装、环境配置与开发工作流 第01章:OpenSCAD 项目全景与学习路线 第02章:源码获取、编译与开发环境配置 第01章:OCCT项目全景与学习路线 第18章:二次开发实战与综合案例 第17章:与 Qt VTK Python pythonOCC 生态集成 第18章:综合实战案例 第17章:数据交换与协同 第16章:源码架构与二次开发 第15章:插件与自定义工作台开发 第14章:Python脚本宏与自动化 第13章:FEM仿真分析 第12章:CAM数控加工 第11章:SurfaceMesh与逆向工程 第10章:Draft二维绘图与BIM建筑 第09章:工程图TechDraw 第07章:参数化表达式与Spreadsheet 第08章:装配设计Assembly 第06章:Part工作台与几何内核 第05章:PartDesign实体特征建模 第04章:草图Sketcher约束建模 第02章:安装版本与工作环境配置 第03章:界面工作台与基础操作 第01章:项目全景与学习路线 第十二章:插件开发、研究功能与最佳实践 第七章:技能、记忆与自学习闭环 第八章:MCP 集成与上下文文件 第六章:工具系统与终端后端 第五章:模型供应商与配置体系 Hermes Agent 教程目录 第十一章:语音、视觉、浏览器与子代理协作 第四章:CLI/TUI 与会话管理 第十二章:学习路线、实战方案与最佳实践 第十一章:源码结构、开发调试与插件开发 第十章:自动化、远程访问、日志与排障 第九章:Control UI、节点、Canvas 与语音能力 第七章:工具、技能、插件与能力扩展 第八章:安全模型、访问控制与沙箱实践 第六章:Agent 工作区、会话与多智能体路由 第五章:多通道消息接入与聊天平台配置 第四章:配置体系、模型接入与认证管理 第三章:Gateway 架构、协议与运行机制 第二章:安装、环境准备与快速上手 第一章:OpenClaw 项目概览与核心定位 oh-my-openagent 教程目录 09-命令模型回退与配置参考 10-实战案例最佳实践与故障排除 05-工作模式-Ultrawork-Prometheus-Atlas 08-Hooks与MCP系统 06-Category与Skill系统 07-核心工具链 04-智能体全景详解 03-安装与环境配置 02-整体架构与多模型编排机制 01-项目简介与核心理念 01-项目概览与学习路线 02-安装部署与工具适配 03-Skill机制与using-superpowers 05-TDD系统化调试与完成前验证 04-需求澄清方案设计与计划编写 07-并行智能体子智能体与Git-Worktree 第六章:代码审查、反馈处理与分支收尾 08-中国特色Skills与本土团队落地 09-MCP构建工作流执行与自定义Skill 第23章:FreeCAD-Python-API Clipper2 C# 源码解读教程 第19章:PolyTree 多边形树结构 第20章:实际应用与最佳实践 第18章:Minkowski 和与差 第17章:RectClip 矩形裁剪优化 第16章:ClipperOffset 偏移类详解 第15章:填充规则详解 第14章:布尔运算执行流程 第13章:ClipperD 浮点裁剪类 第11章:OutRec 与 OutPt 输出结构 第9章:Active 活动边结构 第10章:Vertex 顶点与 LocalMinima 局部极小值 第12章:Clipper64 裁剪类详解 第7章:高精度运算与128位整数 第8章:ClipperBase 基类详解 第5章:枚举类型与常量定义 第6章:InternalClipper 内部工具类 第2章:核心数据结构 - Point64、PointD 第3章:路径与多边形表示 - Path64、PathD、Paths64、PathsD 第4章:矩形边界 - Rect64、RectD
第十章:定时任务与自动化(Cron)
我才是银古 · 2026-05-04 · via 博客园 - 我才是银古

第十章:定时任务与自动化(Cron)

Hermes 不只是"问答"——它内置完整的 cron 调度器 与一组让自动化"既灵活又安全"的工程能力,让你可以用自然语言或标准 cron 表达式安排任意周期 / 一次性任务,并把结果投递到任意平台。本章把 cron 的所有玩法、与技能 / Webhook / Kanban 的协作模式、以及若干"开箱即用"的自动化模板讲清。

10.1 Cron 是什么

Hermes 的 cron 不是简单的"每隔多久跑一条命令"。它的核心抽象是:

一个 cronjob = 一个调度规则 + 一个新的 Agent 会话 + 一组可选技能 + 一个或多个投递目标

每次到点:

  1. Hermes 创建一个 fresh agent session(独立上下文、独立 task_id);
  2. 加载该 job 关联的技能(可 0 个或 N 个);
  3. 按你的 prompt 让 Agent 自由决策;
  4. 把最终回复(含附件)投递到指定目标:原始对话、Telegram、Discord、Slack、企业微信、飞书、邮件、本地文件等;
  5. 记录运行历史到 ~/.hermes/hermes.db

⚠ Cron 内部的 Agent 不能再创建 cron 任务——cronjob 工具会被禁用,避免失控的递归调度。

10.2 创建 cron 的三种方式

10.2.1 在 TUI 用 /cron

/cron add 30m "30 分钟后提醒我去检查构建"
/cron add "every 2h" "每 2 小时检查一次服务器状态"
/cron add "every 1h" "总结新的 RSS 内容" --skill blogwatcher
/cron add "0 9 * * *" "每天早 9 点把昨日 Hacker News 顶 5 条发我 Telegram"
/cron list
/cron pause <id>
/cron resume <id>
/cron run <id>      # 立即触发一次
/cron edit <id>
/cron remove <id>

10.2.2 用 hermes cron 命令行

hermes cron create "every 2h" "Check server status"
hermes cron create "every 1h" "Summarize new feed items" --skill blogwatcher
hermes cron create "every 1h" "Use both skills" --skill blogwatcher --skill maps --name "Combo job"
hermes cron list
hermes cron pause <id>
hermes cron remove <id>

10.2.3 自然语言驱动

最爽的方式——让 Hermes 自己去理解:

我希望每个工作日早 9:30,你帮我把昨晚的 GitHub PR 评审提醒整理一下,发到我企业微信。

Hermes 会调用 cronjob 工具自动创建 job、绑定技能、设置投递目标。你可以接着说"换成早 9 点"就会改。

10.3 调度表达式

支持以下几类:

  • 相对时间30m2h3d90s;表示"X 之后跑一次(一次性任务)"。
  • every 表达式every 1hevery 30mevery 2 days;周期性。
  • 标准 cron0 9 * * **/15 * * * *,5 字段(分时日月周)。
  • 自然语言every workday at 9:30each Monday morningweekdays at 18:00,由模型解析后写成 cron。

时区默认跟随系统;可以全局指定:

cron:
  timezone: Asia/Shanghai

或单 job:/cron add "every day 9:00" --tz Asia/Shanghai "..."

10.4 把技能挂上 cron

任意 cron job 可以挂 0 / 1 / N 个技能。技能在每次执行前作为 Level-1 注入,效果等同于"用户在那次会话中执行了 /skill-name"。

/cron add "every 1h" "刷一遍我关注的博客并总结" --skill blogwatcher --skill maps

适合:日常巡检、复杂工作流(让模型不用每次都重新"理解"流程)。

10.5 投递目标(Delivery Targets)

每个 job 可以指定结果发到哪。常见目标:

URI 含义
origin 原始对话(你创建 job 的会话)
telegram://<chat_id> Telegram 用户 / 群
discord://<channel_id> Discord 频道
slack://<channel> Slack
wecom://group:<name> / wecom://user:<userid> 企业微信
feishu://group:<id> 飞书
dingtalk://group:<id> 钉钉
email://<to@example.com> 邮件(用 subject: 字段)
file:///abs/path 写本地文件
webhook://<url> POST 到 URL
console 仅打印到 Gateway 日志

例:

/cron add "every day 9:00" "把昨晚 PR 列表整理成一份 Markdown" \
  --skill github-pr-workflow \
  --target email://me@example.com \
  --target file:///tmp/daily-pr.md

10.6 配置文件中的 cron

也可以纯 YAML:

cron:
  timezone: Asia/Shanghai
  jobs:
    - name: morning-brief
      schedule: "0 9 * * 1-5"
      prompt: |
        请扫一下昨晚(按 Asia/Shanghai 计算)的:
          - GitHub @myorg 的 open PR
          - HackerNews 前 5 条 AI 相关
          - X(Twitter) @AnthropicAI 最新 5 条
        汇总成 200 字以内的简报,附原文链接。
      skills:
        - blogwatcher
        - github-pr-workflow
      toolsets:
        - web
        - file
        - github-mcp
      targets:
        - telegram://1234567890
        - email://me@example.com
        - file:///home/me/briefs/{{date}}.md

{{date}} 是 Hermes 内置变量,cron 上下文里还能用 {{datetime}}{{job_name}}{{run_id}} 等。

10.7 失败重试与降级

cron:
  retries: 3
  retry_backoff_seconds: 60
  on_failure:
    deliver_to: telegram://12345    # 失败时单独发我
    skill: incident-summarizer

10.8 与 Webhook 的协作:事件触发 vs 时间触发

第九章介绍过 Webhook。Cron 是时间触发,Webhook 是事件触发——二者经常配合:

gateway:
  webhooks:
    - name: github-pr-opened
      path: /webhooks/github-pr
      secret_env: GITHUB_WEBHOOK_SECRET
      action:
        prompt: |
          PR {{ json.pull_request.number }} 已开启:{{ json.pull_request.title }}.
          请按 AGENTS.md 评审,给 reviewer 留 3-5 条建议。
        toolsets: [web, file, github-mcp]
        deliver_to: slack://eng-reviews

事件层负责"立刻有反应",cron 层负责"批量回顾 / 周期总结"。

10.9 Kanban:复杂多步流的"持久任务板"

delegate_task 适合"父代理同步等结果";cron 适合"我自己定时跑"。当你需要的是 跨多个代理、可恢复、可被人介入、跨数天/周 的工作流时,用 Kanban

/kanban
hermes kanban create --board ops "本周巡检:pg 慢查询 / nginx 错误率 / 磁盘"
hermes kanban list
hermes kanban claim <task-id> --as reviewer
hermes kanban complete <task-id>
hermes kanban block <task-id> --reason "等 ops 提供 db 凭据"

模型这一侧通过 kanban_* 工具读写:kanban_showkanban_completekanban_blockkanban_heartbeatkanban_commentkanban_createkanban_link

典型工作流:

  • dispatcher profile 把 epic 拆成 task;
  • researcher profile 拿一个 task 调研,附上结论;
  • writer profile 拿调研稿写成报告;
  • reviewer profile 评审,必要时把任务 block 给人;
  • 完成后 cron 触发 publisher profile 把成稿发邮件。

每个 profile 都是一个独立 Hermes 进程,共享 ~/.hermes/kanban.db。详见 user-guide/features/kanban.mdkanban-tutorial.md

10.10 自动化模板(开箱即用)

下面给一组日常很有用的模板,照抄即可。

10.10.1 每日早报(个人)

- name: daily-brief
  schedule: "0 8 * * *"
  prompt: |
    给我一份 200 字以内的早报:
      - 我关注的 GitHub PR/Issue 状态变化
      - HackerNews / Reddit r/MachineLearning 顶 5 条
      - 我订阅的 RSS(见 ~/.hermes/feeds.txt)新增 5 条
    最后用一句话挑出"今天最值得我做的一件事"。
  skills: [blogwatcher, github-pr-workflow]
  targets:
    - telegram://${MY_CHAT_ID}
    - file:///home/me/briefs/{{date}}.md

10.10.2 PR Review 机器人

Webhook 触发,配合 GitHub MCP:

gateway:
  webhooks:
    - name: pr-review
      path: /webhooks/pr-review
      secret_env: GITHUB_WEBHOOK_SECRET
      action:
        prompt: |
          PR #{{ json.pull_request.number }} ({{ json.pull_request.title }}) 在 {{ json.repository.full_name }} 已开启。
          按仓库根 AGENTS.md 的评审清单进行评审,输出:
            - 总体结论(approve / request_changes / comment)
            - 3-7 条具体建议
            - 任何安全 / 性能 / 可维护性的隐患
        toolsets: [web, file, github-mcp]
        deliver_to: slack://eng-reviews

10.10.3 服务器巡检

- name: server-health
  schedule: "*/15 * * * *"
  prompt: |
    用 ssh 连到 ops.example.com 检查:
      - df -h(>80% 报警)
      - 最近 200 条 nginx error.log(异常率 >0.5% 报警)
      - systemctl is-active myapp
    一切正常时**不发任何消息**;有异常时给出诊断与建议。
  toolsets: [terminal, file]
  targets:
    - telegram://${OPS_GROUP}

10.10.4 周度知识库整理

- name: weekly-knowledge
  schedule: "0 18 * * 5"
  prompt: |
    搜索本周(7 天内)我所有会话,挑出 5 条值得长期记住的经验或决定,
    以"标题 + 100 字摘要"的方式整理;
    然后调用 memory 工具决定哪些加入 MEMORY.md。
  toolsets: [session_search, memory, file]
  targets:
    - email://me@example.com

10.10.5 定时备份与同步

- name: backup-hermes-home
  schedule: "0 3 * * *"
  prompt: |
    用 rsync 把 ~/.hermes/{memories,skills,SOUL.md,config.yaml} 同步到 backup-server:/srv/hermes-backup/{{date}}/
    然后压缩为 tar.zst 并保留最近 14 天。
  toolsets: [terminal]
  targets:
    - file:///var/log/hermes-backup.log

10.10.6 IM 群定时播报

- name: standup-reminder
  schedule: "30 9 * * 1-5"
  prompt: |
    根据 Kanban 板上"今日待办"任务,给团队拼一段 Markdown 播报:
      - 每个人各自负责的任务(按 Kanban claim 字段)
      - 是否有 blocker
    最后 @ 每个有未完成任务的人。
  toolsets: [kanban, web]
  targets:
    - wecom://group:engineering

10.10.7 Web 监控 + 通知

- name: rss-watch
  schedule: "*/30 * * * *"
  prompt: |
    抓取 https://example.com/blog/feed.xml;与上次结果比对,
    如有新条目,把每条做 100 字总结后发 Telegram。
    把已知条目 ID 保存在 ~/.hermes/state/rss.json 里,避免重复推送。
  toolsets: [web, file]
  targets:
    - telegram://${MY_CHAT_ID}

10.11 Cron + Skills + Memory 的化学反应

把三件事打通会让 Hermes 真正有"工作员"的感觉:

  1. Skill 写"做某件事的 SOP";
  2. Cron 把 SOP 周期化;
  3. Memory 让每次执行都借鉴上次的教训。

例如"巡检"技能里加一段:

## Pitfalls
- 上次发现 80% 阈值会误报:临时容量峰值。改用"连续 3 次 >80%"再报警。

下一次巡检,这条经验会自然进入决策。运行多了,Memory 还会反馈到 cron prompt 上:"最近一周磁盘没问题,可减少巡检频率到每小时一次"——你只需点头同意。

10.12 安全与配额

cron 与 webhook 是"代理替你 24×7 干活"的入口,安全要点:

  1. 永远在 Docker / Daytona / Modal 后端跑非可信任务

  2. cron job 启用 --toolsets 只挑必要 toolset;

  3. approval.require_confirmation 锁住"破坏性操作",让 Agent 撞到时主动 DM 你;

  4. 给每个 job 设 max_runtime_seconds

    cron:
      defaults:
        max_runtime_seconds: 600
        max_iterations: 30
    
  5. 给 Provider 设月度预算告警(OpenRouter、Anthropic 都有),cron 跑飞了能及时止损。

10.13 排错

症状 排查
到点不跑 hermes gateway status cron 是否启用;cron.timezone 是否对;hermes cron list --verbose 看 next_run
跑了但什么也没发 投递目标没配;gateway logs 看出站日志
跑两次 多个 Hermes profile 共享同一份 cron 文件——切到不同 profile 或加锁
提示 "cron tool disabled" 你试图在 cron 内创建 cron——禁用是有意为之
Webhook 401 secret 校验失败;hash 算法对齐

10.14 本章小结

  • Cron + Skill + Memory + Webhook + Kanban 五件套构成 Hermes 的"自动化操作系统";
  • 自然语言、every 表达式、5 字段 cron、自然语言时间,全支持;
  • 投递目标可以是任意平台或本地文件;
  • Webhook 负责"事件触发",cron 负责"时间触发",Kanban 负责"跨代理、可恢复、长流程";
  • 安全上:默认沙箱、按平台收紧 toolset、审批列表、超时与预算上限。

下一章我们打开几扇"高级感"的窗户:语音、视觉、浏览器与子代理协作。