OpenClaw 技能、心跳自治与审批关卡
中级10 分钟阅读自动化

OpenClaw 技能、心跳自治与审批关卡

了解 OpenClaw 如何加载技能、心跳周期性轮次如何运行、如何限制主机 shell 执行,以及如何通过严格的浏览器策略和经过审查的工作流确认来约束浏览器自动化。

您应该能够做到的事情

技能教智能体如何工作,心跳让它周期性运行。Exec 策略限制主机 shell 访问;浏览器策略、profile 隔离和工作流确认共同约束浏览器操作。

仅在此浏览器中保存。
本文内容

安装 OpenClaw 并锁定渠道身份后(设置允许列表和配对),下一层是能力控制:技能、周期性心跳轮次、主机 shell 审批策略,以及是否在经过审查的工作流中启用浏览器自动化。

文档锚点:SkillsHeartbeatSecurity

心跳如果与不受限制的主机 exec 结合,或与保留重要登录状态的浏览器自动化结合,就可能利用这些功能所暴露的凭证和访问权限执行无人值守操作。只有在工具策略符合威胁模型后,才应启用周期性轮次,尤其是在其他渠道也能触发智能体时。

技能:它们是什么

技能是 Markdown 指令包,即包含 YAML frontmatter 和正文的 SKILL.md。它告诉智能体何时以及如何使用工具。OpenClaw 会加载预置技能和本地覆盖版本,并在加载时根据环境、配置以及所需二进制文件是否存在进行筛选。

根据当前文档,来源优先级从高到低如下:

  1. 工作区技能
  2. 项目智能体技能
  3. 个人智能体技能(默认状态下的 ~/.agents/skills
  4. OpenClaw 状态目录下的托管 / 本地技能
  5. 捆绑技能
  6. 额外目录 / 插件技能

同名技能出现在多个位置时,以优先级更高的来源为准。请把技能目录当作可信代码:任何能修改它们的人都能改变智能体行为。

智能体可见技能的允许列表

位置所决定的优先级,与每个智能体的允许列表所决定的可见性,是两件独立的事。文档中的示例结构如下:

{
  agents: {
    defaults: {
      skills: ['github', 'weather'],
    },
    list: [
      { id: 'writer' },
      { id: 'docs', skills: ['docs-search'] },
      { id: 'locked-down', skills: [] },
    ],
  },
}

只有在明确需要扩大暴露面时,才省略默认技能列表。个人网关应从最小集合开始:只允许你已读过、与已安装二进制文件匹配,并且实际工作确实需要的技能。

社区技能和插件属于供应链的一部分。安装它们可能会运行代码并扩展工具。优先选择官方文档和你已审查的技能;如果要由操作者在主机侧实施允许或阻止决策,请使用 security.installPolicy

节点托管的技能仅在配对节点连接时出现。它们的文件、引用路径和二进制文件保留在该节点上,执行使用 exec host=node node=<node-id>。初始节点角色配对批准技能发布;后续技能更改需要节点重启,而不是重新配对。智能体的执行策略和节点的主机本地审批策略仍然控制执行。

心跳:脉搏,而非第二个大脑

心跳会在主会话中运行周期性智能体轮次,让模型在不过度打扰你的情况下报告需要关注的事项。它是按计划触发的主会话轮次,不是后台任务记录。

默认(在你的版本上核实):

  • 间隔通常为 30m(Anthropic OAuth/令牌设置在未设置时可能默认更高;文档中描述了该情况下 1h
  • 设置 agents.defaults.heartbeat.every(使用 0m 禁用)
  • 默认提示词要求智能体遵循心跳监控暂存区中的内容,不要从旧对话中自行推断重复任务;无事可做时回复 HEARTBEAT_OK

示例:

{
  agents: {
    defaults: {
      heartbeat: {
        every: '30m',
        target: 'none',
        lightContext: true,
        isolatedSession: true,
        // activeHours: { start: "08:00", end: "22:00" },
      },
    },
  },
}

实用指导:

  • 保持 target: "none",直到你准备接收通知;只有在你愿意让通知发送到最近联系的渠道时,才设置 target: "last"
  • 使用 activeHours,避免在你所在时区的夜间发送心跳通知。
  • 把重复工作放入自动化 / 定时任务,不要依靠心跳暂存内容中的非正式约定;心跳文档明确强调了这种区分。
  • 计划的心跳需要启用自动化;如果定时任务被禁用,计划的心跳将不会运行。

响应契约:出现在开头或结尾的 HEARTBEAT_OK 会被视为确认;如果其余内容很短,则不会发送。真正的告警不应包含 HEARTBEAT_OK,只返回告警文本。

心跳轮次仍可使用智能体有权访问的任何工具。即使只是“无害签到”,只要允许 exec,记忆或抓取页面中的提示注入内容就可能借机请求执行 shell 操作。应为心跳配套配置工具拒绝或询问策略。

Shell 与浏览器的审批关卡

OpenClaw 的安全模型把 exec 审批视为确认操作者意图的护栏,而不是面向敌对多租户的隔离边界。即便如此,对于个人网关,它决定了系统是“先问我”还是“直接执行”。

执行

来自当前 执行批准参考 的相关控制项:请在安装版本附带的 schema 中确认这些内容。

  • tools.exec.mode 是规范的持久化主机执行策略:denyallowlistaskautofull
  • auto 会先把缺少审批的请求交给 OpenClaw 内置审查器,再在需要时回退到人工审批。这是一条便利路径,不能证明命令本身安全。
  • 网关和节点执行还会参考执行主机上的本地批准文档。有效的策略是配置和该主机本地文档中更严格的那一个。
  • 当需要提示但无法访问 UI 或超时时,askFallback 会生效。其默认值为 deny;请保持该设置,以防止批准路径丢失导致访问范围扩大。
  • 允许列表是按智能体设置的。在适当情况下使用范围受限的可执行路径和 argPattern;当解释器被允许时,strictInlineEval 可提供纵深防御。
  • 当沙箱处于活动状态时,tools.exec.host: "auto" 会指向沙箱;否则指向网关。节点执行需要配对的节点及其自身的本地批准状态。

tools.exec.mode: "deny" 开始;需要审批提示时,可使用 mode: "ask",并配套至少同样严格的主机本地审批文档。高权限工具应保持关闭。Gateway 和节点主机执行默认可能为 full,而沙箱主机执行默认拒绝。在渠道、技能或心跳扩大影响范围之前,先收紧主机策略。

配对 Mac 上的 Node system.run 是对该 Mac 的远程代码执行。配对不等于逐条命令审批;网关的节点命令策略和节点自身的 exec 审批共同构成执行边界。要禁用远程 shell 执行,请将请求的执行模式设置为 deny,并保持节点的主机本地审批策略严格;如果不需要配对,也可以移除节点角色和配对关系。

浏览器

浏览器控制属于操作者级接口,可以导航、读取页面和执行页面脚本。远程浏览器或 CDP 暴露应按操作者访问来保护:只使用回环地址或专门加固的私有路径,不要公开 CDP 或控制端点。使用与日常浏览器配置隔离的专用 openclaw 浏览器配置文件,并且只在经过审查的任务需要时启用浏览器插件或工具。exec 审批不会形成逐次点击的浏览器审批边界;在提交、购买、发布或修改账户等有实际后果的操作前,工作流必须要求人工确认。

抓取页面带来的提示注入是必须正视的主要风险。工具允许/拒绝策略、浏览器配置文件隔离、明确的工作流确认和沙箱可以缩小影响范围,但无法消除对渠道允许列表的需要。

高权限工具

tools.elevated 可以越过沙箱边界。请严格限制 allowFrom,不要为陌生人或覆盖面很广的渠道受众启用高权限模式。

审慎的自主程度阶梯

阶段技能心跳执行 / 浏览器
0: 仅聊天无 / 消息配置文件关闭 (0m)mode: deny
1: 协助模式少量已审核的技能关闭mode: ask; 浏览器关闭
2: 轻量脉冲相同三十分钟至一小时,target: none,活跃时段mode: ask; 浏览器关闭
3: 运维协助允许列表中的技能仅向你发送告警mode: allowlistask; 仅对已审核任务使用隔离浏览器
4: 广泛自主仅在有审计时仅在沙箱 + 拒绝列表时启用mode: full 仅对单个操作者且无开放私信时使用

只有在 openclaw security audit 通过,并且保留了足够多的运行记录来覆盖正常工作、拒绝路径、审批超时和恢复时,才可升级阶段。固定天数并不能证明安全性。

写一个小内部技能

最小有用技能是含 SKILL.md 的文件夹:

---
name: disk-check
description: 当用户询问磁盘或容量时,检查网关主机的磁盘使用情况。
---

当用户询问此主机的磁盘空间时:

1. 仅运行执行策略允许且已列入允许列表的 `df` 调用。
2. 用三个要点概括各文件系统的使用情况。
3. 不要安装软件包或删除文件。

保持描述具体,让智能体知道_何时_应使用该技能。为技能配置范围收窄的执行模式、按智能体审查过的命令与参数规则、strictInlineEval,并结合沙箱或操作系统隔离。这些控制能缩小命令暴露面,但不能证明获准的解释器或辅助程序无法执行破坏性操作。优先使用你控制的工作区技能,不要安装所有看起来方便的 ClawHub 包。

心跳暂存区里放什么(以及不放什么)

将心跳暂存区(openclaw cron scratch <jobId> --set "...")用作简短的检查清单,而不是第二个任务数据库:

好:“若网关主机磁盘 > 90%,通知。若无事,HEARTBEAT_OK。” 坏:“记得完成 Q3 路线图、给 Alice 发邮件、重构智能体,并抓取竞争对手定价。”

重复工作应由有独立调度的自动化负责。让心跳从旧聊天中反复推断杂务,只会让原本安静的安装变得嘈杂而昂贵。

在信任前测试审批

  1. tools.exec.mode 设置为 deny 以进行默认拒绝测试;需要审批提示时,则设置为 ask 并附带一份至少同样严格的本地主机审批文件。
  2. 从已列入允许列表的私信身份中,要求智能体运行 uname(或等效的无害探测)。
  3. 确认你收到的是明确拒绝或审批提示,而不是未经提示便执行成功。
  4. 如果测试提示,请让一个请求超时或使界面不可用,并确认 askFallback: "deny" 阻止它。当有效的 ask 策略为 always 时,确认下一个不同的命令会再次请求。
  5. 如果节点已配对,请针对该节点单独存储的审批策略重复测试。
  6. 使用未列入允许列表的身份,确认不存在任何工具调用路径。

如果第 3 步在没有经过配置的审批关卡时仍然成功,请在启用心跳之前检查请求所用的执行模式,以及执行主机的本地审批文档。

当工作是调度管道时与 n8n 结合

心跳用于智能体感知的定期检查。确定性的 SaaS 轮询、重试和人工审批关卡通常应放在 n8n 中(幂等性和人工审批关卡Hermes API 或 webhook 交接)。面向聊天的接口使用 OpenClaw,面向系统的接口使用 n8n。

操作者清单

  • 已审查技能允许列表,已移除未使用的技能
  • 没有不受信任的技能目录可被其他用户写入
  • 心跳间隔和活跃时段已明确设置
  • 心跳目标不会向群组频道发送垃圾信息
  • tools.exec.mode 应为 denyask,且执行主机的本地审批文档应同样或更加严格
  • 除非必要,否则关闭浏览器/搜索/获取功能
  • 关闭高权限工具
  • 使用无害命令测试审批路径
  • 每次自主性提升后重新运行审计

技能赋予智能体能力,心跳让它及时响应。严格的执行策略、浏览器策略、沙箱和渠道身份控制,可以降低这些能力在无人监督时变成主机操作的风险。请按这个顺序调整配置,并且只开放到威胁模型允许的程度。

继续阅读

通过下一篇文章继续沿着相同的学习路径进行学习。