Exec 许可是用于让一个沙箱化 agent 在真实主机(Documentation Index
Fetch the complete documentation index at: https://openclaw.zhcndoc.com/llms.txt
Use this file to discover all available pages before exploring further.
gateway 或 node)上运行命令的 配套应用 / node 主机护栏。这是一个安全联锁:只有当策略 + 允许列表 +(可选)用户许可都一致时,命令才会被允许。Exec 许可会在工具策略和 elevated gating 之上叠加(除非 elevated 被设置为 full,这会跳过许可)。
生效策略取
tools.exec.* 与许可默认值中更严格的那个;如果某个许可字段被省略,则使用 tools.exec 的值。Host exec 还会使用该机器上的本地许可状态——即使 session 或 config 默认请求的是 ask: "on-miss",~/.openclaw/exec-approvals.json 中主机本地的 ask: "always" 仍会持续提示。检查生效策略
| 命令 | 显示内容 |
|---|---|
openclaw approvals get / --gateway / --node <id|name|ip> | 请求的策略、主机策略来源,以及最终生效结果。 |
openclaw exec-policy show | 本地机器的合并视图。 |
openclaw exec-policy set / preset | 一步将本地请求策略与本地主机许可文件同步。 |
host=node 时,exec-policy show 会在运行时将该作用域报告为由 node 管理,而不是假装本地许可文件就是权威来源。
如果配套应用 UI 不可用,任何通常会触发提示的请求都会由ask fallback 处理(默认:deny)。
适用范围
Exec 许可在执行主机本地强制执行:- Gateway 主机 → gateway 机器上的
openclaw进程。 - Node 主机 → node 运行器(macOS 配套应用或无头 node 主机)。
信任模型
- 通过 Gateway 身份验证的调用方是该 Gateway 的受信任操作员。
- 已配对的 nodes 将这种受信任操作员能力扩展到 node 主机上。
- Exec 许可可降低误执行风险,但不是按用户划分的身份验证边界。
- 已批准的 node-host 运行会绑定规范化执行上下文:规范化 cwd、精确 argv、存在时的 env 绑定,以及在适用时固定的可执行文件路径。
- 对于 shell 脚本和直接解释器/运行时文件调用,OpenClaw 还会尽量绑定一个具体的本地文件操作数。如果该已绑定文件在批准后、执行前发生变化,则运行会被拒绝,而不会执行漂移后的内容。
- 文件绑定有意采用尽力而为的方式,不是对每条解释器/运行时加载路径的完整语义模型。如果审批模式无法识别出恰好一个可绑定的具体本地文件,它会拒绝生成基于许可的运行,而不是假装完全覆盖。
macOS 拆分
- node host service 会通过本地 IPC 将
system.run转发给 macOS app。 - macOS app 负责强制执行许可并在 UI 上下文中执行命令。
设置与存储
许可存放在执行主机上的一个本地 JSON 文件中:策略开关
exec.security
deny— 阻止所有 host exec 请求。allowlist— 仅允许允许列表中的命令。full— 允许一切(等同于 elevated)。
exec.ask
off— 从不提示。on-miss— 仅当允许列表未匹配时才提示。always— 每条命令都提示。即使有效 ask 模式是always,allow-always的持久信任也不会抑制提示。
askFallback
当需要提示但无法到达任何 UI 时的处理方式。
deny— 阻止。allowlist— 仅当允许列表匹配时才允许。full— 允许。
tools.exec.strictInlineEval
当为
true 时,OpenClaw 会将内联代码求值形式视为仅可通过许可的操作,即使解释器二进制本身已在允许列表中也是如此。用于防御那些无法干净映射到单一稳定文件操作数的解释器加载器。python -cnode -e,node --eval,node -pruby -eperl -e,perl -Ephp -rlua -eosascript -e
allow-always 不会自动为它们持久化新的允许列表条目。
YOLO 模式(无许可)
如果你希望 host exec 在没有许可提示的情况下运行,你必须同时打开两层策略:OpenClaw 配置中的请求 exec 策略(tools.exec.*)以及 ~/.openclaw/exec-approvals.json 中的主机本地许可策略。
YOLO 是默认的主机行为,除非你显式收紧它:
| 层 | YOLO 设置 |
|---|---|
tools.exec.security | gateway/node 上为 full |
tools.exec.ask | off |
主机 askFallback | full |
--permission-mode bypassPermissions。可通过 agents.defaults.cliBackends.claude-cli.args / resumeArgs 下的显式 Claude 参数覆盖该后端行为——例如 --permission-mode default、acceptEdits 或 bypassPermissions。
如果你想要更保守的配置,可以将任一层收紧回 allowlist / on-miss 或 deny。
持久化 gateway-host“永不提示”设置
本地快捷方式
- 本地
tools.exec.host/security/ask。 - 本地
~/.openclaw/exec-approvals.json默认值。
openclaw approvals set --gateway 或 openclaw approvals set --node <id|name|ip>。
Node host
对于 node host,请在该 node 上应用相同的许可文件:仅限本地的限制:
openclaw exec-policy不会同步 node 许可。openclaw exec-policy set --host node会被拒绝。- Node exec 许可会在运行时从 node 获取,因此面向 node 的更新必须使用
openclaw approvals --node ...。
仅会话快捷方式
/exec security=full ask=off只会更改当前会话。/elevated full是一个紧急开关快捷方式,也会为该会话跳过 exec 许可。
允许列表(按 agent)
允许列表是按 agent划分的。如果存在多个 agent,请在 macOS app 中切换到你正在编辑的那个 agent。模式采用 glob 匹配。 模式可以是可解析的二进制路径 glob,或裸命令名 glob。裸名称只匹配通过PATH 调用的命令,因此当命令是 rg 时,rg 可以匹配 /opt/homebrew/bin/rg,但不能匹配 ./rg 或 /tmp/rg。如果你想信任某个特定二进制位置,请使用路径 glob。
旧版 agents.default 条目会在加载时迁移到 agents.main。像 echo ok && pwd 这样的 shell 链仍然需要每个顶层段都满足允许列表规则。
示例:
rg~/Projects/**/bin/peekaboo~/.local/bin/*/opt/homebrew/bin/rg
| 字段 | 含义 |
|---|---|
id | 用于 UI 标识的稳定 UUID |
lastUsedAt | 上次使用时间戳 |
lastUsedCommand | 上次匹配的命令 |
lastResolvedPath | 上次解析出的二进制路径 |
自动允许技能 CLI
当启用 自动允许技能 CLI 时,已知技能引用的可执行文件会在节点上(macOS 节点或无头节点主机)被视为已加入允许名单。这会通过 Gateway RPC 使用skills.bins 获取技能 bin 列表。如果你想要严格的手动允许名单,请关闭此功能。
安全 bin 与审批转发
关于安全 bin(仅 stdin 的快速路径)、解释器绑定细节,以及如何将审批提示转发到 Slack/Discord/Telegram(或将其作为原生审批客户端运行),请参见 Exec approvals — advanced。控制 UI 编辑
使用 Control UI → Nodes → Exec approvals 卡片来编辑默认值、按代理覆盖项以及允许名单。选择一个范围(Defaults 或某个代理),调整策略,添加/移除允许名单模式,然后点击 Save。UI 会显示每个模式最近使用的元数据,方便你保持列表整洁。 目标选择器可选择 Gateway(本地审批)或 Node。节点必须公开system.execApprovals.get/set(macOS 应用或无头节点主机)。如果某个节点尚未公开 exec approvals,请直接编辑其本地的 ~/.openclaw/exec-approvals.json。
CLI:openclaw approvals 支持 gateway 或 node 编辑 —— 参见
Approvals CLI。
审批流程
当需要提示时,gateway 会向操作员客户端广播exec.approval.requested。Control UI 和 macOS 应用通过 exec.approval.resolve 处理它,然后 gateway 将已批准的请求转发到节点主机。
对于 host=node,审批请求会包含规范化的 systemRunPlan
负载。gateway 会使用该计划作为转发已批准的 system.run
请求时权威的命令/cwd/session 上下文。
这对异步审批延迟很重要:
- 节点执行路径会预先准备一个规范化计划。
- 审批记录会存储该计划及其绑定元数据。
- 一旦批准,最终转发的
system.run调用会重用已存储的计划,而不是信任后续调用者的编辑。 - 如果调用者在审批请求创建后更改了
command、rawCommand、cwd、agentId或sessionKey,gateway 会将转发运行拒绝为审批不匹配。
系统事件
Exec 生命周期会作为系统消息显示:Exec running(仅当命令超过运行提示阈值时)。Exec finished。Exec denied。
runId,便于关联。
拒绝审批行为
当异步 exec 审批被拒绝时,OpenClaw 会阻止代理在会话中复用同一命令任何更早一次运行的输出。拒绝原因会连同明确指引一起传递,说明没有可用的命令输出,这样可阻止代理声称有新的输出,或使用之前成功运行的过期结果重复被拒绝的命令。影响
full很强大;在可能时优先使用允许名单。ask让你保持在流程中,同时仍允许快速审批。- 按代理的允许名单可防止一个代理的审批泄漏到其他代理中。
- 审批只适用于来自授权发送者的主机 exec 请求。未授权发送者不能发出
/exec。 /exec security=full是面向授权操作员的会话级便捷方式,并且按设计会跳过审批。若要强制阻止主机 exec,请将审批安全级别设为deny,或通过工具策略拒绝exec工具。
相关内容
Exec approvals — advanced
安全 bin、解释器绑定,以及将审批转发到聊天。
Exec tool
Shell 命令执行工具。
Elevated mode
也会跳过审批的紧急突破路径。
Sandboxing
沙箱模式和工作区访问。
Security
安全模型和加固。
Sandbox vs tool policy vs elevated
何时使用每种控制。
Skills
基于技能的自动允许行为。