自动化机制选择指南
OpenClaw 提供了五种自动化机制,适用于不同场景。先看一张决策表,帮你快速选择: | 机制 | 触发方式 | 精度 | 适用场景 | 复杂度 | |------|----------|------|----------|--------| | Cron | 精确定时 | 分钟级 | 每天 9 点发报告、每周一清理日志 | ⭐⭐ | | Heartbeat | 近似周期 | ~30 分钟 | 定期检查收件箱、监控通知 | ⭐ | | Hooks | 事件驱动 | 实时 | 新会话初始化、会话压缩后处理 | ⭐⭐⭐ | | Standing Orders | 持久指令 | 每次会话 | "每次回答都用中文"、"总是先搜索再回答" | ⭐ | | Task Flow | 多步骤编排 | 按步骤 | 复杂工作流、需要修订跟踪的任务 | ⭐⭐⭐⭐ | 简单来说: - 需要精确时间触发 → 用 Cron - 需要定期巡检但不要求精确 → 用 Heartbeat - 需要响应特定事件 → 用 Hooks - 需要永久生效的行为规则 → 用 Standing Orders - 需要多步骤复杂流程 → 用 Task FlowCron 定时任务
Cron 是最直观的定时机制,让智能体在指定时间自动执行任务。基本用法
``bash
添加一个定时任务
openclaw cron add "每天早上 9 点给我发天气预报" --schedule "0 9 * * *"
查看所有定时任务
openclaw cron list
删除定时任务
openclaw cron remove
`
Cron 表达式速查
`
┌───────────── 分钟 (0-59)
│ ┌───────────── 小时 (0-23)
│ │ ┌───────────── 日 (1-31)
│ │ │ ┌───────────── 月 (1-12)
│ │ │ │ ┌───────────── 星期 (0-7, 0和7都是周日)
│ │ │ │ │
* * * * *
`
常用表达式:
| 表达式 | 含义 |
|--------|------|
| 0 9 * * * | 每天早上 9:00 |
| 0 9 * * 1 | 每周一早上 9:00 |
| 0 9,18 * * * | 每天 9:00 和 18:00 |
| */30 * * * * | 每 30 分钟 |
| 0 0 1 * * | 每月 1 号 0:00 |
| 0 9 * * 1-5 | 工作日每天 9:00 |
一次性提醒
如果只需要一次性提醒(不是周期性的),使用 --at 参数:
`bash
明天下午 3 点提醒我开会
openclaw cron add "提醒我下午 3 点有产品评审会议" --at "2025-01-16 15:00"
`
输出到渠道或 Webhook
定时任务的输出可以发送到指定渠道:
`bash
输出到 Telegram
openclaw cron add "检查服务器状态并报告" --schedule "0 */6 * * *" --channel telegram
输出到 Webhook
openclaw cron add "生成日报" --schedule "0 18 * * 1-5" --webhook "https://hooks.example.com/daily"
`
Heartbeat 周期检查
Heartbeat 是一种"近似周期"机制,默认每 30 分钟触发一次。它不像 Cron 那样精确,但更适合"定期巡检"类任务。
工作原理
1. Gateway 每隔约 30 分钟触发一次 Heartbeat
2. 智能体读取 HEARTBEAT.md 文件中的检查清单
3. 逐项执行检查任务
4. 将结果汇总或发送通知
配置 HEARTBEAT.md
在工作区中创建 HEARTBEAT.md:
`markdown
Heartbeat 检查清单
收件箱检查
检查邮箱是否有新邮件,如果有重要邮件,通过 Telegram 通知我。
日历提醒
检查接下来 2 小时内是否有会议,如果有,提前提醒我。
通知汇总
检查 GitHub 通知,汇总未读的 PR 评审请求。
`
调整 Heartbeat 间隔
在 openclaw.json 中配置:
`json
{
"heartbeat": {
"interval": 1800,
"enabled": true
}
}
`
interval 单位为秒,默认 1800(30 分钟)。
适用场景
- 收件箱监控:定期检查邮件,汇总重要信息
- 日历提醒:提前通知即将到来的会议
- 通知聚合:批量处理 GitHub/GitLab 通知
- 状态巡检:定期检查服务器或服务状态
Hooks 事件脚本
Hooks 是事件驱动的自动化机制,当特定事件发生时自动执行脚本。
支持的事件类型
| 事件 | 触发时机 | 典型用途 |
|------|----------|----------|
| /new | 新会话创建 | 初始化会话、加载上下文 |
| /reset | 会话重置 | 清理临时数据 |
| /stop | 会话结束 | 保存会话摘要 |
| compaction | 会话压缩完成 | 压缩后处理、更新记忆 |
| gateway.start | Gateway 启动 | 初始化检查、发送上线通知 |
| message.pre | 消息处理前 | 消息预处理、过滤 |
| message.post | 消息处理后 | 日志记录、统计 |
| tool.pre | 工具调用前 | 权限检查、参数验证 |
| tool.post | 工具调用后 | 结果处理、审计日志 |
Hook 文件结构
Hooks 存放在工作区的 hooks/ 目录下:
`
~/.openclaw/workspace/
└── hooks/
├── on-new-session.md # /new 事件
├── on-compaction.md # 压缩事件
└── on-gateway-start.md # Gateway 启动事件
`
创建第一个 Hook
创建一个新会话初始化 Hook:
`markdown
---
event: /new
---
新会话初始化
当新会话开始时:
1. 读取 MEMORY.md 中的用户偏好
2. 检查今天的日历安排
3. 用一句话问候用户,提及今天的重要事项
`
按事件类型过滤
一个 Hook 文件可以监听多个事件:
`markdown
---
event:
- /new
- /reset
---
会话初始化/重置
无论是新会话还是重置会话,都执行以下初始化步骤...
`
CLI 管理命令
`bash
列出所有 Hooks
openclaw hooks list
查看 Hook 详情
openclaw hooks show on-new-session
测试触发 Hook
openclaw hooks trigger on-new-session
`
Standing Orders 持久指令
Standing Orders 是写在 AGENTS.md 中的永久指令,每次会话都会生效。它不是"定时"触发,而是"始终"生效。
使用方式
在 AGENTS.md 中添加持久指令:
`markdown
Standing Orders
语言规则
- 始终使用中文回答
- 技术术语保留英文原文
- 代码注释用中文
行为规则
- 回答问题前先搜索最新信息
- 涉及文件操作时先确认路径
- 执行危险命令前必须征求确认
输出格式
- 代码块标注语言类型
- 长回答使用标题分段
- 列表不超过 10 项
`
与 Hooks 的区别
| 对比 | Standing Orders | Hooks |
|------|----------------|-------|
| 生效时机 | 每次会话的每条消息 | 特定事件触发时 |
| 定义位置 | AGENTS.md | hooks/ 目录下的独立文件 |
| 执行方式 | 作为系统提示词注入 | 作为独立任务执行 |
| 适用场景 | 行为规则、输出格式 | 初始化、清理、通知 |
Task Flow 多步骤编排
Task Flow 适用于需要多个步骤、可能跨越多次对话的复杂任务。
基本概念
Task Flow 将一个大任务拆分为多个步骤,每个步骤可以:
- 依赖前一步的输出
- 需要人工确认后继续
- 自动跟踪修订历史
创建 Task Flow
`bash
创建一个新的 Task Flow
openclaw tasks create "部署新版本"
`
Task Flow 文件示例:
`markdown
部署新版本
步骤 1:代码检查
- [ ] 运行测试套件
- [ ] 检查 lint 错误
- [ ] 确认版本号已更新
步骤 2:构建
- [ ] 执行生产构建
- [ ] 验证构建产物
步骤 3:部署
- [ ] 备份当前版本
- [ ] 上传新版本到服务器
- [ ] 重启服务
步骤 4:验证
- [ ] 检查服务状态
- [ ] 运行冒烟测试
- [ ] 通知团队部署完成
`
修订跟踪
Task Flow 自动记录每个步骤的执行时间和结果,方便回溯:
`bash
查看 Task Flow 历史
openclaw tasks history "部署新版本"
查看某个步骤的详情
openclaw tasks show "部署新版本" --step 3
`
常用场景示例
每日报告
使用 Cron 每天下班前自动生成工作日报:
`bash
openclaw cron add "汇总今天的工作内容,生成日报发送到 Telegram" \
--schedule "0 18 * * 1-5" \
--channel telegram
`
收件箱监控
使用 Heartbeat 定期检查邮箱:
`markdown
HEARTBEAT.md
邮件检查
每次 Heartbeat 时检查 Gmail 收件箱:
- 如果有标记为"紧急"的邮件,立即通过 WhatsApp 通知我
- 其他新邮件汇总为列表,等我主动询问时再报告
`
日历提醒
使用 Cron 在会议前提醒:
`bash
每天早上 8:30 检查今天的日程
openclaw cron add "检查今天的日历,列出所有会议和截止日期" \
--schedule "30 8 * * *"
`
PR 审查通知
使用 Heartbeat 监控 GitHub PR:
`markdown
HEARTBEAT.md
GitHub PR 监控
检查我负责审查的 PR:
- 新的 PR 请求 → 通知我
- 已审查的 PR 有新提交 → 提醒我重新查看
- 超过 48 小时未审查的 PR → 发送紧急提醒
`
Gateway 启动通知
使用 Hook 在 Gateway 启动时发送通知:
`markdown
---
event: gateway.start
---
Gateway 启动通知
Gateway 启动后:
1. 检查所有渠道连接状态
2. 如果有渠道未连接,通过可用渠道通知我
3. 报告当前运行的智能体列表
`
组合使用
实际场景中,多种自动化机制经常组合使用:
`
Standing Orders(始终生效)
↓ 定义基本行为规则
Hooks(事件触发)
↓ 处理会话生命周期事件
Heartbeat(周期巡检)
↓ 定期检查外部状态
Cron(精确定时)
↓ 在特定时间执行任务
Task Flow(复杂编排)
↓ 管理多步骤工作流
``
比如一个完整的"每日工作助手"配置:
- Standing Orders:始终用中文回答,优先使用搜索工具
- Hook(/new):新会话时自动加载今天的待办事项
- Heartbeat:每 30 分钟检查邮箱和日历
- Cron:每天 9:00 发送今日计划,18:00 发送日报
- Task Flow:管理周报编写流程