课程大纲
课程大纲系列主页
学习进度已完成 0/12

自动化、多 Agent 与高级执行(核心生产力)

高级进行中

适用版本: OpenClaw v2026.4.11(stable) 验证日期: 2026-04-12 目标读者: 想让 OpenClaw 从被动应答变成主动执行的用户 难度: ⭐⭐⭐⭐ 高级 适合首次阅读: 否——建议先完成第 7 篇《生产级记忆架构与自动化记忆维护》的生产基线

⚠️ 本篇面向已经跑稳 workspace + 记忆系统的用户。 如果你的 SOUL.md / MEMORY.md / HEARTBEAT.md 还没就位,请先完成第 6 篇《记忆系统、SOUL 与个性化进化》和第 7 篇《生产级记忆架构与自动化记忆维护》

目标

让 OpenClaw 从「我问它答」进化到「它主动替我做」。三个生产力杠杆:

  1. Cron / Heartbeat — 定时执行和持续巡检
  2. Multi-Agent — 不同任务路由给不同专长的 Agent
  3. Tool Use / MCP — 调用外部工具不翻车的执行纪律

前置条件

第一次只做这一个自动化

如果你赶时间,先只配 1 个 cron + 1 个 heartbeat,10 分钟跑通核心机制:

json5
// 在 openclaw.json 中添加(JSON5 格式)
{
  cron: {
    jobs: [
      {
        name: "daily-briefing",
        schedule: "0 9 * * *",
        timezone: "Asia/Shanghai",  // ⚠️ 请替换:换成你的时区
        prompt: "生成今日简报:天气、日历、未读邮件摘要",
        delivery: {
          channel: "telegram",  // ⚠️ 请替换:换成你实际使用的渠道
          chatId: "me",
        },
      },
    ],
  },
  heartbeat: {
    enabled: true,
    interval: "5m",
    quiet_hours: ["22:00", "08:00"],
    profile: "lean",
  },
}

验证:

bash
# 确认 cron 任务已注册
openclaw cron list

# 手动触发一次(不等调度器)
openclaw cron trigger daily-briefing

# 确认 heartbeat 在跑
openclaw heartbeat status

跑通了再往下扩展。

让 OpenClaw 帮你配置自动化

不想手动写 JSON?直接把下面的 prompt 发给你的 OpenClaw,让它按你的需求生成配置:

💡 一键配置 prompt(点击展开,复制发给 Bot)
text
帮我配置 OpenClaw 的自动化任务。按步骤来,每步确认后再进下一步:

[第 1 步:信息收集]
一次性问我:
- 我需要哪些定时任务(早报、邮件检查、周报、备份...)
- 每个任务的触发时间和频率
- 结果投递到哪个渠道(Telegram / Slack / Discord)
- 是否需要 heartbeat 持续巡检(磁盘、服务、记忆维护)
- 是否需要多 Agent(还是全用 main Agent)

[第 2 步:生成 cron 配置]
根据收集的信息,生成 openclaw.json 的 cron.jobs 数组。
每个 job 包含 name / schedule / timezone / prompt / delivery。
用 diff 展示给我确认。

[第 3 步:生成 heartbeat 配置]
如果需要 heartbeat,生成 HEARTBEAT.md 检查项和 openclaw.json 的 heartbeat 配置。
用 diff 展示给我确认。

[第 4 步:生成多 Agent 配置](如果需要)
根据任务类型建议 Agent 分工,生成 agents.list 配置。
每个 Agent 包含 id / workspace / model / skills / sandbox。
用 diff 展示给我确认。

[第 5 步:写入并验证]
确认后写入 openclaw.json 和 HEARTBEAT.md。
运行 openclaw cron list 确认任务注册成功。
手动触发第一个 cron 任务,把输出展示给我。

任何一步失败就停,不要跳过。不要一口气跑完所有步骤。

一、自动化基础(Cron × Heartbeat)

Cron vs Heartbeat

维度CronHeartbeat
触发方式按绝对时间表按相对间隔 + 状态机
适用场景定点任务:早报、周报、备份持续巡检:健康监控、漂移检测
状态感知无状态(每次独立)有状态(双次确认才告警)
告警默认输出所有默认静默,仅异常才响

一句话分法: 有确定时间点 → Cron。有持续监控需求 → Heartbeat。

Cron 任务三种写法

📖 以下是 OpenClaw 的真实配置语法。示例中的 namepromptdelivery 等值是示意内容,不是必须长成这样——按你的实际需求填写。

标准 cron 表达式(推荐生产使用):

json5
{
  name: "daily-briefing",
  schedule: "0 9 * * *",      // 分 时 日 月 周
  timezone: "Asia/Shanghai",
  prompt: "生成今日早报",
  delivery: { channel: "telegram", chatId: "me" },
}

every 间隔语法(简单周期):

json5
{ name: "inbox-check", every: "30m", prompt: "检查未读邮件,只通知重要的" }

at 一次性触发(执行后自动禁用):

json5
{
  name: "meeting-reminder",
  // ⚠️ 请替换:换成你实际的提醒时间
  at: "2026-04-15T13:55:00+08:00",
  prompt: "提醒我 14:00 的产品评审",
}

Cron 进阶字段

字段作用
agent指定由哪个子 Agent 执行(默认 main)
profile启动时加载哪个 context profile
timeout_seconds强制超时,防止任务挂死
retry失败重试策略(max_attempts + backoff_ms
on_failure失败时的降级动作(通知 / fallback prompt)
stagger分散投递时间,避免多个任务同时刷屏或打爆 API

💡 建议: 第一次写 cron 时先把 schedule 设成 every: "2m",确认 prompt 和 delivery 都对了,再改回真正的时间表。

让 cron 更可靠 🔬 进阶可选

思路来源: 借鉴 Hermes agent 的 fresh instance + execution stagger 设计——每次 cron 触发全新实例、避免上次状态残留;多任务错峰启动、避免 API 峰值限流。

Isolated session(独立会话): OpenClaw 支持两种 cron 执行模式:

模式行为适用场景
sessionTarget: "main"(默认)把事件注入你的主会话,Agent 带完整上下文处理需要对话感的任务(生活助手式早报)
sessionTarget: "isolated"独立会话、全新 context、跑完即销毁后台自动化任务(备份、监控、日报)

生产级 cron 建议用 isolated 避免上次运行残留污染本次:

json5
{
  name: "daily-briefing",
  schedule: "0 9 * * *",
  sessionTarget: "isolated",  // 每次全新会话
  prompt: "生成今日早报",
}

⚠️ 版本说明: Isolated session 的具体行为(session key 复用规则、日志归档)随版本有变化。2026 年的多个 Issue 讨论过"isolated 是否真的每次全新",以你实际使用版本的行为为准。

Per-Agent 路由(agentId):agent 字段把 cron 绑定到特定 Agent,和主 Agent 完全隔离 workspace 和记忆:

json5
{
  name: "ops-health-check",
  schedule: "*/30 * * * *",
  sessionTarget: "isolated",
  agent: "ops-bot",              // 路由到专用 Agent
  prompt: "检查所有服务健康状态",
}

这样 ops-bot 的运维决策不会污染 main Agent 的对话记忆。配合第二章 Multi-Agent 的配置使用。

错峰触发: 多个 cron 如果都定在整点(0 9 * * *),会同时向 LLM API 发起请求,容易触发限流。解决方式:把时间错开几分钟。

json5
{ name: "task-a", schedule: "0 9 * * *" },    // 9:00
{ name: "task-b", schedule: "3 9 * * *" },    // 9:03
{ name: "task-c", schedule: "7 9 * * *" },    // 9:07

💡 建议: 3 个以上同时段 cron 必做错峰。单个用户不需要用到分散秒数的复杂 stagger 字段——错开几分钟就够了,可预测、可调试。

Heartbeat 机制

Heartbeat 是 OpenClaw 的被动自检循环:每 N 分钟读 HEARTBEAT.md → 执行该跑的检查 → 异常连续两次才告警 → 无异常返回 HEARTBEAT_OK(静默)。

HEARTBEAT.md 定义检查项(对应第 6 篇《记忆系统、SOUL 与个性化进化》模板包中的那份):

markdown
# HEARTBEAT.md

## Recurring Checks

- check disk and memory usage on the main host
- check that the main OpenClaw service is running
- review memory/ for notes worth promoting

## Memory Maintenance Checks

- verify last memory-sync-daily ran within 25 hours
- check MEMORY.md line count < 200 (warn) / < 300 (critical)

## Rules

- Stay quiet during quiet hours (22:00-08:00)
- Two consecutive failures before escalating
- Track state in memory/heartbeat-state.json

以上是示例内容,按你的运维需求增删检查项。

🔧 聊天里总是出现"如果有 HEARTBEAT.md 就读..."这段文字怎么办?(点击展开)

这是 2026 年最常见的 heartbeat 踩坑之一。看到类似下面的内容出现在聊天记录:

如果有 HEARTBEAT.md 就读(工作区上下文)。严格遵守。不要推断或重复之前聊天中的旧任务。如果没有需要注意的内容,请回复 HEARTBEAT_OK...

那是 OpenClaw 内部注入给模型的心跳唤醒提示词,本来应该是后台调用、不该暴露到聊天里。常见原因有三种:

  1. 心跳跑在主会话里 — 没开 isolatedSession: true,每次心跳都在主会话留下一条合成消息
  2. target 配置错 — 应该 "none"(静默)却设成了会投递的值
  3. 模型返回超过 ackMaxChars — 本应返回纯 HEARTBEAT_OK,但 Agent 多说了几句,超过 300 字符就不会被丢弃

标准修复:在 openclaw.json 加四个字段

json5
{
  agents: {
    defaults: {
      heartbeat: {
        every: "30m",
        target: "none",           // 静默执行,不投递
        lightContext: true,       // 只注入 HEARTBEAT.md,不加载整个 workspace
        isolatedSession: true,    // 每次心跳用全新会话,不污染主会话
        directPolicy: "block",    // 禁止 DM 投递
        ackMaxChars: 300,         // 默认值,短 OK 回复会被自动丢弃
      },
    },
  },
}

改完重启生效:

bash
openclaw daemon restart

验证修复

bash
# 手动触发一次心跳
openclaw heartbeat trigger

# 观察主聊天窗口,应该不再出现唤醒提示词
# 日志里可以看到心跳执行,但会话记录保持干净
openclaw logs --follow

参考: 官方文档 Heartbeat Configuration · 相关 Issue #43168 / #12186

⚠️ 版本说明: isolatedSession / lightContext / ackMaxChars 是 OpenClaw 2026.3+ 的 heartbeat 字段。旧版本字段名可能不同,以你实际使用版本的 openclaw heartbeat --help 输出为准。

任务调试

bash
# 查看任务注册(schedule、next run、last run)
openclaw cron list

# 手动触发
openclaw cron trigger daily-briefing
openclaw heartbeat trigger

# 查看日志
openclaw logs --follow
症状原因修复
next_run 显示 nullcron 表达式错误检查 5 字段格式
任务没触发daemon 没运行或时区错误openclaw daemon status + 确认 timezone
任务超时没配 timeout_seconds加超时或换更快的模型

二、Multi-Agent 协作

为什么需要多个 Agent

一个 main Agent 什么都干时,SOUL.md 会越写越长、技能越装越多、上下文越来越臃肿。Multi-Agent 的核心思路:不同任务路由给不同专长的 Agent,每个 Agent 有独立的 workspace、模型、工具权限。

配置多 Agent

openclaw.jsonagents.list 中定义:

json5
{
  agents: {
    defaults: {
      model: { primary: "anthropic/claude-sonnet-4-6" },
    },
    list: [
      {
        id: "researcher",
        // ⚠️ 以下是示例配置,按你的实际需求调整
        workspace: "~/.openclaw/agents/researcher",
        model: { primary: "anthropic/claude-opus-4-6" },
        skills: ["summarize", "web-browse", "obsidian"],
        sandbox: { mode: "all" },
      },
      {
        id: "executor",
        workspace: "~/.openclaw/agents/executor",
        model: { primary: "anthropic/claude-sonnet-4-6" },
        skills: ["github", "bash-runner"],
        sandbox: { mode: "non-main" },
      },
      {
        id: "reviewer",
        workspace: "~/.openclaw/agents/reviewer",
        model: { primary: "anthropic/claude-opus-4-6" },
        skills: ["code-review", "summarize"],
        sandbox: { mode: "all" },
      },
    ],
  },
}

每个 Agent 有独立的 workspacemodelskills 允许列表和 sandbox 策略。

最小骨架:Researcher / Executor / Reviewer

三角色是社区最常见的 Multi-Agent 模式:

角色职责模型建议工具策略
Researcher搜索、阅读、总结强模型(Opus)只读工具,全沙箱
Executor写代码、跑命令、操作文件快模型(Sonnet)读写工具,受限沙箱
Reviewer审查 Executor 的输出、检查质量强模型(Opus)只读工具,全沙箱

在 cron 中指定 Agent:

json5
{
  name: "weekly-research",
  schedule: "0 18 * * 0",
  agent: "researcher",  // 路由给 researcher Agent
  prompt: "基于过去一周的 daily log 生成周报",
}

按渠道绑定 Agent

不同渠道可以绑定不同 Agent,实现「工作渠道用严格 Agent,个人渠道用宽松 Agent」:

json5
{
  agents: {
    list: [
      {
        id: "work-agent",
        // 绑定到 Slack 的特定频道
        channels: { slack: { chatIds: ["C01WORK"] } },
        sandbox: { mode: "all" },
      },
      {
        id: "personal-agent",
        channels: { telegram: { chatIds: ["me"] } },
        sandbox: { mode: "off" },
      },
    ],
  },
}

💡 建议: 先只加 1 个子 Agent(比如 researcher),确认路由和隔离正常后再扩展。不要一上来就配 5 个 Agent——调试复杂度是指数级的。


三、Tool Use / MCP / 执行纪律

MCP 工具集成

OpenClaw 通过 MCP(Model Context Protocol)集成外部工具。从 Agent 角度看,MCP 工具和内置工具没有区别。

三层集成方式:

层级方式适用场景
全局openclaw.json 的 MCP servers 配置所有 Agent 共享的工具
Per-Agentagents.list[].mcpServers特定 Agent 专属的工具
Per-SkillSKILL.md 指令中引用技能调用时按需使用

执行纪律操作清单

📖 以下是让 Agent 可靠调用工具的实操规则,不是理论宣言。

写进 AGENTS.md 或 SOUL.md 的规则:

  • 破坏性命令(rmdropforce pushreset)必须先确认再执行
  • 外部可见操作(发消息、发邮件、创建 PR)必须先确认
  • 文件写入前先读取当前内容,避免覆盖
  • 命令执行失败时报告错误,不要假装成功
  • 长任务设置 timeout_seconds,防止挂死
  • 工具调用结果写入日志,方便事后审计

在 Agent 配置中强制执行:

json5
{
  agents: {
    defaults: {
      sandbox: {
        mode: "non-main",  // 非 main Agent 默认沙箱
        scope: "session",
      },
    },
  },
}

sandbox.mode 三个值:

模式行为
off不沙箱(仅限你完全信任的 main Agent)
non-main非 main Agent 沙箱化
all所有 Agent 都沙箱化(最安全)

Per-Agent 工具允许/拒绝列表:

json5
{
  id: "researcher",
  skills: ["summarize", "web-browse"],  // 只允许这些技能
  // 这个 Agent 无法调用 bash、文件写入等危险工具
}

💡 建议: Researcher 和 Reviewer 角色用 sandbox: { mode: "all" },只给只读工具。Executor 用 sandbox: { mode: "non-main" },给受控的读写权限。安全策略的完整体系见第 9 篇《安全最佳实践(重磅章节)》


验证清单

bash
# 1. cron 任务注册
openclaw cron list

# 2. 手动触发 cron 成功
openclaw cron trigger daily-briefing

# 3. heartbeat 运行中
openclaw heartbeat status

# 4. 多 Agent 路由(如果配了)
openclaw agents list
# 应该看到你定义的 Agent 列表

# 5. 查看日志确认执行
openclaw logs --follow

常见问题

Q: Cron 任务和 Heartbeat 有什么区别?

Cron 按时间表触发(每天 9 点),无状态。Heartbeat 按间隔巡检(每 5 分钟),有状态(双次确认才告警)。Cron 负责"开始工作",Heartbeat 负责"持续监控"。

Q: 多 Agent 之间能共享记忆吗?

默认各 Agent 有独立 workspace。如果需要共享,可以让多个 Agent 指向同一份 MEMORY.md(只读),但写入建议隔离——否则会出现记忆冲突。

Q: cron 任务每次都创建新的会话实例吗?

是的,OpenClaw 默认每次 cron 触发都启动新的会话实例(fresh instance),不继承上次的上下文。这是防止状态残留和上下文污染的关键设计。不要为了"省 token"把 cron 绑到长期 session 上。

Q: 怎么控制 cron 的 token 消耗?

三个手段:精简 prompt、用 lean profile 启动(减少注入的记忆文件)、给简单任务指定低成本模型。先跑一周看实际用量再优化。

Q: MCP server 怎么加?

openclaw.json 中配置 MCP servers。详见 OpenClaw MCP 文档。Per-Agent MCP 路由写在 agents.list[].mcpServers 里。


下一步

自动化和多 Agent 就位后,你的 OpenClaw 已经是一个真正的「主动同事」了。接下来去第 9 篇《安全最佳实践(重磅章节)》,给这套系统加上安全防线。

自动化、多 Agent 与高级执行(核心生产力) | 资讯狗 | Zixungou