Skip to content

通过 openclaw approvals 可以独立控制本地、Gateway 和 Node 上的命令执行(Exec)审批规则,决定哪些命令需要弹窗确认或自动放行。openclaw exec-policy 提供了本地的一步式策略同步(仅限本机),远程目标必须用 --gateway--node 参数。YOLO 模式可将审批完全跳过,但建议只在沙盒或容器中使用。

openclaw approvalsexec-policy:Exec 执行审批与策略配置

管理 本地主机Gateway 主机Node 主机上的 exec 审批。 默认情况下,命令作用于磁盘上的本地审批文件。使用 --gateway 指向 Gateway,或使用 --node 指向特定节点。

别名:openclaw exec-approvals

相关文档:

openclaw exec-policy

openclaw exec-policy 是一个本地便捷命令,用于将请求的 tools.exec.* 配置与本地主机审批文件一键对齐。适合需要:

  • 检查本地请求策略、主机批准文件以及合并后的有效策略
  • 应用本地预设(如 YOLO 或 deny-all)
  • 同步本地 tools.exec.*~/.openclaw/exec-approvals.json

示例:

bash
openclaw exec-policy show
openclaw exec-policy show --json

openclaw exec-policy preset yolo
openclaw exec-policy preset cautious --json

openclaw exec-policy set --host gateway --security full --ask off --ask-fallback full

输出模式:

  • 不加 --json:打印人可读的表格视图
  • --json:打印机器可读的结构化输出

当前限制:

  • exec-policy 仅作用于本地机器
  • 它同时更新本地配置文件与本地审批文件
  • 不会将策略推送到 Gateway 或 Node 主机
  • --host node 在此命令中被拒绝,因为 Node 的 exec 审批在运行时从 Node 获取,必须使用 Node 相关的 approvals 命令来管理
  • openclaw exec-policy show 会将 host=node 的范围标记为 node 在运行时管理,而不是从本地批准文件推导有效策略

如果你需要直接编辑远程主机审批,继续使用 openclaw approvals set --gatewayopenclaw approvals set --node <id|name|ip>

常用命令

bash
openclaw approvals get
openclaw approvals get --node <id|name|ip>
openclaw approvals get --gateway

openclaw approvals get 现在会显示本地、Gateway 和 Node 目标的有效 exec 策略:

  • 请求的 tools.exec 策略
  • 主机审批文件策略
  • 应用优先级规则后的有效结果

优先级规则的用意:

  • 主机审批文件是可执行的唯一真实来源
  • 请求的 tools.exec 策略可以缩窄或扩宽意图,但有效结果仍从主机规则派生
  • --node 结合了 Node 主机审批文件和 Gateway 的 tools.exec 策略,因为两者在运行时都适用
  • 如果 Gateway 配置不可用,CLI 会回退到 Node 审批快照,并注明无法计算最终运行时策略

从文件替换审批配置

bash
openclaw approvals set --file ./exec-approvals.json
openclaw approvals set --stdin <<'EOF'
{ version: 1, defaults: { security: "full", ask: "off" } }
EOF
openclaw approvals set --node <id|name|ip> --file ./exec-approvals.json
openclaw approvals set --gateway --file ./exec-approvals.json

set 接受 JSON5,不仅限于标准 JSON。使用 --file--stdin,不能同时使用。

免审批(YOLO)配置示例

对于永远不需要暂停 exec 审批的主机,将主机审批默认值设为 full + off

bash
openclaw approvals set --stdin <<'EOF'
{
  version: 1,
  defaults: {
    security: "full",
    ask: "off",
    askFallback: "full"
  }
}
EOF

Node 版本:

bash
openclaw approvals set --node <id|name|ip> --stdin <<'EOF'
{
  version: 1,
  defaults: {
    security: "full",
    ask: "off",
    askFallback: "full"
  }
}
EOF

这只修改主机审批文件。要保持请求的 OpenClaw 策略一致,还需设置:

bash
openclaw config set tools.exec.host gateway
openclaw config set tools.exec.security full
openclaw config set tools.exec.ask off

为什么使用 tools.exec.host=gateway

  • host=auto 表示"有沙盒时使用沙盒,否则使用 Gateway"。
  • YOLO 控制的是审批,不是路由。
  • 如果你希望即使配置了沙盒也使用主机 exec,请用 gateway/exec host=gateway 显式指定。

本地快捷方式:

bash
openclaw exec-policy preset yolo

该本地快捷方式会同时更新本地的 tools.exec.* 配置和本地审批默认值,与上述手动两步操作意图一致,但仅适用于本机。

白名单辅助命令

bash
openclaw approvals allowlist add "~/Projects/**/bin/rg"
openclaw approvals allowlist add --agent main --node <id|name|ip> "/usr/bin/uptime"
openclaw approvals allowlist add --agent "*" "/usr/bin/uname"

openclaw approvals allowlist remove "~/Projects/**/bin/rg"

通用选项

getsetallowlist add|remove 都支持:

  • --node <id|name|ip>
  • --gateway
  • 共享 Node RPC 选项:--url--token--timeout--json

目标说明:

  • 无目标标志表示磁盘上的本地审批文件
  • --gateway 针对 Gateway 主机审批文件
  • --node 在解析 id、name、IP 或 id 前缀后针对单个 Node 主机

allowlist add|remove 还支持:

  • --agent &lt;id&gt;(默认为 *

注意事项

  • --node 使用与 openclaw nodes 相同的解析器(id、name、IP 或 id 前缀)。
  • --agent 默认为 "*",适用于所有 agent。
  • Node 主机必须暴露 system.execApprovals.get/set(macOS 应用或无头 Node 主机)。
  • 审批文件按主机存储于 ~/.openclaw/exec-approvals.json

参考文档

常见问题

为什么设置了 tools.exec.ask=off 依然会弹审批窗?

主机的 exec-approvals.json 文件才是权限放行的最终裁判。客户端配置(tools.exec.ask=off)只是客户端请求意图,如果宿主机上的审批文件要求弹窗拦截,该命令仍会被拦截。必须用 openclaw approvals set 同步更新宿主机端的配置。

YOLO 模式下是否可能执行危险命令(如 rm -rf /)?

可以。YOLO 模式下 OpenClaw 完全放权给大模型,模型给出的任何命令都会被直接传递给 Shell 执行。这非常危险,请绝对不要在你个人的工作电脑或存有重要数据的宿主机上开启 YOLO 模式,建议仅在沙盒(Sandbox)或随用随抛的容器内使用。

如何批量添加多条白名单路径?

目前 allowlist add 每次只能添加一条路径。可编写脚本循环调用 openclaw approvals allowlist add 来批量添加。若需一次性替换整个白名单,可使用 openclaw approvals set --file 导入包含 allowlist 字段的完整 JSON5 审批文件。