ORANGE BOOK · HERMES AGENT

第八章 定时任务与自动化


一、为什么定时任务是 Hermes 的"杀手锏"

ChatGPT 是被动的——你不问它就不说话。

Hermes 不一样。它内置了一个调度器(Cron Scheduler),可以:

  • 每天早 7 点自动给你做一份个性化早报
  • 每周五 17:00 自动起草周报
  • 每 5 秒自动盯一次抢票网站
  • 每月 1 号自动整理桌面、备份记忆
  • 凌晨 3 点自动跑数据报表,早上你打开邮箱就能看到

这意味着 Hermes 不再只是"工具",而是一个24 小时为你工作的数字员工——你在睡觉的时候它在干活,你在开会的时候它在干活,你完全不知道它的存在的时候它在干活。

二、Hermes Cron 简介

如果你用过 Linux 的 crontab,会觉得 Hermes Cron 像是它的"自然语言版本"。 如果你没用过,没关系——Hermes 让你**用普通话告诉它"什么时候做什么"**就行。

2.1 用自然语言创建任务

最简单的方式:

hermes schedule "每天早 8 点把昨天收到的邮件汇总一下,结果推到我的 Telegram"

Hermes 会自动理解时间、动作、推送目标,并创建一个 Cron 任务。完成后会告诉你:

✓ 已创建定时任务
  ID: cron-7e3b
  时间: 每天 08:00
  动作: 邮件汇总(用 mail-daily-digest skill)
  推送: Telegram (chat_id: 123456789)
  下次运行: 2026-04-20 08:00

2.2 标准 Cron 表达式

如果你已经懂 Cron 表达式,也可以直接写:

hermes schedule --cron "0 8 * * *" --task "汇总昨日邮件"
hermes schedule --cron "*/5 * * * *" --task "盯一下 ACME 客户官网,有变动通知我"
hermes schedule --cron "0 0 1 * *" --task "月度账单分析"

不熟悉 Cron 表达式?这里有几个常用的:

表达式 含义
0 8 * * * 每天 8:00
30 9 * * 1-5 周一到周五 9:30
0 */2 * * * 每 2 小时
*/5 * * * * 每 5 分钟
0 0 1 * * 每月 1 号 0:00
0 22 * * 0 每周日 22:00
0 7 1 1 * 每年 1 月 1 日 7:00

2.3 任务管理命令

# 列出所有定时任务
hermes schedule list

# 查看某个任务详情
hermes schedule show cron-7e3b

# 暂停某个任务
hermes schedule pause cron-7e3b

# 恢复
hermes schedule resume cron-7e3b

# 删除
hermes schedule remove cron-7e3b

# 查看历史执行记录
hermes schedule history cron-7e3b

# 立即手动跑一次(不影响下次定时)
hermes schedule run cron-7e3b

三、11 个开箱即用模板

下面 11 个模板是普通人最常用的,全部可以直接复制用。

模板 1:每日早报

hermes schedule "每天早 7:00,做一份'今日早报':
1. 今日天气和我所在城市的空气质量
2. 我日历里今天的所有日程
3. 微信里值得我看的 3 条消息(如果接通了 wechat gateway)
4. 邮箱里需要今天回复的邮件
5. 昨天我布置给团队的待办,哪些今天到期
6. 一句话新闻摘要(科技 + 财经,各 3 条)

7:30 前推送到我的 Telegram。"

模板 2:每周五周报草稿

hermes schedule "每周五 17:00,跑 weekly-report skill。完成后通过 Slack DM 发草稿给我"

模板 3:月度账单分析

hermes schedule "每月 5 号上午 9:00,跑 monthly-bill-checkup skill(账单 CSV 在 ~/Desktop/账单/<本月>/)。结果推送到 Notion"

模板 4:竞品监控

hermes schedule "每天早 8:00,检查我配置的 5 个竞品页面有没有变。变更日报发到 #竞品 Slack 频道"

模板 5:抢票/限量监控

hermes schedule "白天每 60 秒、夜里每 5 分钟,监控 ~/.hermes/configs/ticket-watch.yaml 里的所有目标。出票立即推送 + 截图保存"

模板 6:数据备份

hermes schedule "每周日 23:00,把 ~/.hermes 全部打包,加密上传到 ~/Dropbox/hermes-backup/<日期>.tar.gz.enc"

模板 7:桌面 / 下载夹整理

hermes schedule "每月 1 号 22:00,跑 desktop-monthly-cleanup(先列计划不执行),结果发邮件给我审批"

模板 8:服务器健康巡检

hermes schedule "每天早 6:00,SSH 到我配的所有服务器跑 ./scripts/healthcheck.sh,
异常立即告警到 Telegram,正常时静默"

模板 9:个人代码仓库摘要

hermes schedule "每周一上午 10:00,整理我 GitHub 上所有 active 仓库的本周活动:
- commit 数 / PR 数 / issue 数
- 哪些 PR 等我 review
- 哪些 issue 提到了我但我还没回
推到我邮箱"

模板 10:父母关爱提醒

hermes schedule "每周三晚 21:00,提醒我'这周给爸妈打电话了吗?'。
如果我说还没,问我'我帮你预约一个 30 分钟的视频通话提醒?'"

模板 11:个人复盘

hermes schedule "每周日晚 22:00,做一份本周个人复盘:
- 这周 Hermes 帮我做了哪些事(按类别统计)
- 我最满意的 3 件事(基于我的笔记)
- 我没做完的 3 件事(基于 Things 3)
- 下周建议的优先级
推送到我的 Notion【周记】页面"

四、组合工作流:让一件事触发另一件事

定时任务只是触发方式之一。Hermes 还支持事件触发的工作流——一件事完成后自动触发下一件事。

4.1 简单链式触发

# ~/.hermes/workflows/morning-routine.yaml
name: 早晨例行
trigger:
  type: cron
  cron: "0 7 * * *"
steps:
  - id: weather
    skill: get-weather-and-air
    
  - id: calendar
    skill: today-calendar
    
  - id: emails
    skill: mail-digest
    parallel: true              # 与 calendar 并行跑
    
  - id: digest
    skill: compose-morning-brief
    inputs:
      weather: "{{ steps.weather.output }}"
      calendar: "{{ steps.calendar.output }}"
      emails: "{{ steps.emails.output }}"
    
  - id: send
    skill: telegram-send
    inputs:
      chat_id: 123456789
      content: "{{ steps.digest.output }}"

启用:

hermes workflow enable morning-routine

4.2 条件触发(只有 X 时才做 Y)

name: 客户反馈快速响应
trigger:
  type: webhook
  endpoint: /feedback-incoming
steps:
  - id: classify
    skill: classify-feedback
    
  - id: urgent_alert
    when: "{{ steps.classify.output.priority == 'urgent' }}"
    skill: telegram-alert
    inputs:
      chat_id: 123456789
      content: "🚨 紧急反馈:{{ trigger.data.content }}"
  
  - id: route
    skill: assign-to-team
    inputs:
      category: "{{ steps.classify.output.category }}"

4.3 错误处理

工作流里任何一步出错都可以指定回退:

steps:
  - id: send_via_email
    skill: mail-send
    on_error:
      - id: send_via_telegram
        skill: telegram-send       # 邮件挂了就发 Telegram
      - id: log_failure
        skill: log-to-file

五、跨平台联动:让结果出现在你需要的地方

光在终端跑没意义——你看不到。真正的价值是让 Hermes 把结果送到你能立刻看到的地方

场景 推送到哪里 怎么配
我在公司不想看终端 Slack DM gateway.slack.dm_user_id
我下班路上 Telegram gateway.telegram.chat_id
我在床上 iMessage gateway.imessage
我开车 语音播报 + Apple Watch 通知 voice + apple_watch
我开会不能看手机 老婆的微信(紧急时) gateway.wechat.partner
完全不在线 留言机:明天早上推 delay_until

5.1 推送配置示例

~/.hermes/notify.yaml

channels:
  - name: telegram
    type: telegram
    chat_id: 123456789
    token_env: TELEGRAM_BOT_TOKEN
    
  - name: slack-dm
    type: slack
    workspace: my-company
    user_id: U12345
    token_env: SLACK_BOT_TOKEN
    
  - name: imessage
    type: imessage
    contact: "+8613800138000"
    
  - name: voice
    type: voice
    device: macbook-speaker
    
  - name: email
    type: email
    to: me@example.com

# 路由规则:什么场景推哪里
rules:
  - match: "priority == 'urgent'"
    channels: ["telegram", "imessage"]
    
  - match: "type == 'morning_brief'"
    channels: ["telegram", "voice"]
    
  - match: "type == 'report'"
    channels: ["email"]
    
  - default:
    channels: ["telegram"]

六、调试:任务跑了没?跑得对不对?

6.1 查看历史

hermes schedule history cron-7e3b --last 10

会输出最近 10 次执行记录:

2026-04-19 08:00:01  ✓ 12.4s  使用 deepseek-chat,2,341 tokens,¥0.04
2026-04-18 08:00:01  ✓ 11.8s  
2026-04-17 08:00:01  ⚠ 35.2s  邮件接口超时,重试 3 次成功
2026-04-16 08:00:01  ✗ 1.2s   API key 过期,已通知你
...

6.2 实时日志

hermes logs tail --follow                # 看全局日志
hermes logs tail --schedule cron-7e3b    # 只看某个任务的

6.3 测试任务(不修改任何东西)

hermes schedule run cron-7e3b --dry-run

会模拟执行所有步骤但不真的写文件、发消息,只输出"如果真跑,会做哪些事"。

6.4 设置告警

# 任务失败时给自己发警报
alerts:
  on_failure:
    channel: imessage
    message: "🚨 定时任务 {{ schedule.name }} 失败:{{ error }}"
  
  on_slow:               # 跑得比正常慢 3 倍以上
    threshold: 3x
    channel: telegram

七、避免"任务自动化变事故"的 5 条铁律

定时任务一旦跑歪,可能在你睡觉时不停烧 API、刷你网银、或把重要文件覆盖掉。请遵守下面 5 条:

铁律 1:所有"花钱""动文件""动账户"的任务,必须 dry_run

新建任务后第一周,先用 --dry-run 跑几次,看看它到底想做什么。确认无误再切到真跑。

铁律 2:硬性预算上限(再说一遍)

第三章讲过,但太重要再强调:

budget:
  per_schedule_daily_usd: 0.50    # 单个任务每天最多 0.5 美元
  total_daily_usd: 5.00           # 全部任务每天总上限

铁律 3:失败有兜底告警

如果任务连续 3 次失败,必须有方式让你知道。

铁律 4:定期 review 任务清单

每月看一次 hermes schedule list。停掉那些"我已经不需要了"的任务——它们在你不知道的地方烧 API。

铁律 5:对外操作必须先经你确认

如果任务最终会"对外发邮件""下单付款""改数据库"——加一道人工审批。

steps:
  - id: send_invoice
    skill: send-email
    require_approval: true              # Hermes 会先发个"是否批准"
    approval_channel: telegram
    approval_timeout: 30m               # 30 分钟没批就放弃

八、一个完整的"个人 OS"工作流

把上面所有东西串起来,你可以打造一个属于自己的"个人 OS"。

下面是一个真实用户的配置(脱敏):

┌──────────── 我的一天,全自动 ─────────────┐
│                                          │
│  06:50  Hermes 提前 10 分钟做早报准备    │
│  07:00  推早报到 Telegram + 智能音箱     │
│  07:30  邮件简报到桌面                   │
│  08:30  我到公司开始工作                 │
│  09:30  Hermes 检查竞品                  │
│  10:00  自动同步 GitHub PR 到我的 Things │
│  12:00  Hermes 提醒"该吃饭了"            │
│  12:30  自动汇总半天的客户反馈           │
│  17:00  写周报草稿 + 推送                │
│  18:00  Hermes 提醒"该下班了"            │
│  21:00  问我"今天读书了吗?"             │
│  23:00  备份当日数据 + 写周日复盘草稿    │
│                                          │
│  全部加起来:每月 ¥80 API 费用           │
│              每天为我节省 3~5 小时       │
└──────────────────────────────────────────┘

本章一图回顾

┌──────────── Hermes 自动化金字塔 ─────────────┐
│                                              │
│           ┌──────────────────┐              │
│           │   组合工作流     │              │
│           │ workflow.yaml    │              │
│           └────────┬─────────┘              │
│                    │                         │
│      ┌─────────────┴─────────────┐          │
│      │   定时任务 (Cron)         │          │
│      │   schedule              │          │
│      └─────────────┬─────────────┘          │
│                    │                         │
│      ┌─────────────┴─────────────┐          │
│      │   Skills(自学习的步骤)  │          │
│      └─────────────┬─────────────┘          │
│                    │                         │
│      ┌─────────────┴─────────────┐          │
│      │   工具 + MCP(手脚)      │          │
│      └───────────────────────────┘          │
│                                              │
└──────────────────────────────────────────────┘

下章预告

定时任务让 Hermes "在你电脑里 24 小时干活"。但如果你只用 CLI 看,体验会大打折扣。 第九章 多平台网关 会教你怎么把 Hermes 接到 Telegram、Discord、Slack、企业微信、邮件——让你在哪个 App 都能找到同一个 Hermes