安装 OpenClaw 并锁定渠道身份后(设置、允许列表和配对),下一层是能力控制:技能、周期性心跳轮次、主机 shell 审批策略,以及是否在经过审查的工作流中启用浏览器自动化。
文档锚点:Skills、Heartbeat、Security。
心跳如果与不受限制的主机
exec结合,或与保留重要登录状态的浏览器自动化结合,就可能利用这些功能所暴露的凭证和访问权限执行无人值守操作。只有在工具策略符合威胁模型后,才应启用周期性轮次,尤其是在其他渠道也能触发智能体时。
技能:它们是什么
技能是 Markdown 指令包,即包含 YAML frontmatter 和正文的 SKILL.md。它告诉智能体何时以及如何使用工具。OpenClaw 会加载预置技能和本地覆盖版本,并在加载时根据环境、配置以及所需二进制文件是否存在进行筛选。
根据当前文档,来源优先级从高到低如下:
- 工作区技能
- 项目智能体技能
- 个人智能体技能(默认状态下的
~/.agents/skills) - OpenClaw 状态目录下的托管 / 本地技能
- 捆绑技能
- 额外目录 / 插件技能
同名技能出现在多个位置时,以优先级更高的来源为准。请把技能目录当作可信代码:任何能修改它们的人都能改变智能体行为。
智能体可见技能的允许列表
位置所决定的优先级,与每个智能体的允许列表所决定的可见性,是两件独立的事。文档中的示例结构如下:
{
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是规范的持久化主机执行策略:deny、allowlist、ask、auto或full。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: allowlist 或 ask; 仅对已审核任务使用隔离浏览器 |
| 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 发邮件、重构智能体,并抓取竞争对手定价。”
重复工作应由有独立调度的自动化负责。让心跳从旧聊天中反复推断杂务,只会让原本安静的安装变得嘈杂而昂贵。
在信任前测试审批
- 将
tools.exec.mode设置为deny以进行默认拒绝测试;需要审批提示时,则设置为ask并附带一份至少同样严格的本地主机审批文件。 - 从已列入允许列表的私信身份中,要求智能体运行
uname(或等效的无害探测)。 - 确认你收到的是明确拒绝或审批提示,而不是未经提示便执行成功。
- 如果测试提示,请让一个请求超时或使界面不可用,并确认
askFallback: "deny"阻止它。当有效的 ask 策略为always时,确认下一个不同的命令会再次请求。 - 如果节点已配对,请针对该节点单独存储的审批策略重复测试。
- 使用未列入允许列表的身份,确认不存在任何工具调用路径。
如果第 3 步在没有经过配置的审批关卡时仍然成功,请在启用心跳之前检查请求所用的执行模式,以及执行主机的本地审批文档。
当工作是调度管道时与 n8n 结合
心跳用于智能体感知的定期检查。确定性的 SaaS 轮询、重试和人工审批关卡通常应放在 n8n 中(幂等性和人工审批关卡、Hermes API 或 webhook 交接)。面向聊天的接口使用 OpenClaw,面向系统的接口使用 n8n。
操作者清单
- 已审查技能允许列表,已移除未使用的技能
- 没有不受信任的技能目录可被其他用户写入
- 心跳间隔和活跃时段已明确设置
- 心跳目标不会向群组频道发送垃圾信息
-
tools.exec.mode应为deny或ask,且执行主机的本地审批文档应同样或更加严格 - 除非必要,否则关闭浏览器/搜索/获取功能
- 关闭高权限工具
- 使用无害命令测试审批路径
- 每次自主性提升后重新运行审计
技能赋予智能体能力,心跳让它及时响应。严格的执行策略、浏览器策略、沙箱和渠道身份控制,可以降低这些能力在无人监督时变成主机操作的风险。请按这个顺序调整配置,并且只开放到威胁模型允许的程度。



