跳转至

openclaw approvals

管理本地主机、网关主机或节点主机的 exec 审批。不带目标标志时,命令会在共享的 SQLite 状态中读写本地审批文档。使用 --gateway 指定网关,或使用 --node <id|name|ip> 指定特定节点。

别名:openclaw exec-approvals

相关:Exec 审批,节点

常用命令

openclaw approvals get
openclaw approvals get --node <id|name|ip>
openclaw approvals get --gateway
openclaw approvals pending
openclaw approvals resolve <id> <allow-once|allow-always|deny>

get 显示目标的有效 exec 策略:所请求的 tools.exec 策略、主机审批文件策略,以及合并后的有效结果。具有主机原生策略(如 Windows 配套应用)的节点直接显示该策略,而不应用 OpenClaw 审批文件策略计算。

对于基于文件的节点,合并视图需要主机解析后的策略快照。旧版节点会将有效策略显示为不可用,而不是假定网关请求的策略也适用于主机。

Note

每会话的 /exec 覆盖不包括在内。请在相关会话中运行 /exec 以查看其当前默认值。

优先级:

  • 主机审批文档是可强制执行的事实来源。
  • 所请求的 tools.exec 策略可以收窄或放宽意图,但有效结果由主机规则推导得出。
  • --node 结合节点主机审批文档与网关的 tools.exec 策略(两者在运行时均生效)。
  • 如果网关配置不可用,CLI 会回退到节点审批快照,并注明无法计算最终的运行时策略。

待处理审批

列出网关中待处理的 exec、插件和 OpenClaw 系统智能体审批:

openclaw approvals pending
openclaw approvals pending --json

完整的枚举以及对应的、覆盖所有操作员的 resolve 流程会使用 operator.admin,因为不这样做,审批记录会继续按请求者/审核者进行筛选。resolve 操作还会请求专用的 operator.approvals 权限范围。标准 CLI 操作员授权同时包含这两个权限范围;受限的第三方客户端不应仅仅为了模仿此命令而请求 admin。

人类可读输出显示审批类型、智能体/会话归属、请求时长、到期剩余时间、缩短的命令或摘要,以及一个与 shell 无关的 id64_<base64url> ID 令牌。紧凑表格之后总会跟随一个 Full request text 块,其中包含每个完整令牌和一个无损转义的请求,因此,终端宽度限制导致的缩短不会隐藏后缀或解析所需的令牌。请将完整令牌复制到 resolve 中。其他字段中的不安全终端字符会显示为可见的 Unicode 转义。JSON 输出在 approvals 下返回规范化条目,为脚本保留原始的 id、summary、createdAtMs 和 expiresAtMs;原始 ID 仍可被 resolve 接受,除非它们使用了保留的 id64_ 显示令牌前缀。

如果提供的 id64_ 值同时匹配字面原始 ID 和另一条审批的解码显示令牌,CLI 会将其视为歧义而拒绝,而不是冒险解析错误的请求。

按完整 ID 解析一条审批:

openclaw approvals resolve <id> allow-once
openclaw approvals resolve <id> allow-always
openclaw approvals resolve <id> deny --reason "Not expected during maintenance"

对于 exec 请求,allow-always 表示在此处始终允许:生成的授权与命令的确切参数和当前工作目录绑定。同一命令从另一目录执行时需要单独的审批。

对于自动化(cron)运行提出的审批,allow-always 会生成一个限定范围的常驻授权,而不是创建 JSON 允许列表条目(参见自动化的常驻授权)。默认情况下,该授权一直有效,直到被撤销;--expires-in-days <n> 固定一个明确的有效期,而不是使用配置的 tools.exec.grantExpiryDays 默认值:

openclaw approvals resolve <id> allow-always --expires-in-days 30

常驻授权

由 allow-always 在自动化审批上生成的常驻授权,可在同一命令组中列出和撤销:

openclaw approvals grants list
openclaw approvals grants list --json
openclaw approvals grants revoke <grant-id>

该列表显示所属自动化、确切命令、使用次数,以及每个授权的状态(直至撤销、N 天后过期、已过期或已撤销)。撤销操作是幂等的,并在下一次运行实例的 spawn 边界生效——该次运行会再次提示审批。编辑或删除自动化会使其授权失效,而无需显式撤销。

CLI 会读取统一审批记录以确定其类型,将请求的决策与该记录允许的决策进行比对,然后调用统一的解析器。首次成功的决策以 0 退出。重复提交已记录的决策同样以 0 退出,并报告 already resolved (same decision)。冲突的决策、缺失的审批、已过期的审批,或该审批类型不支持的决策,都会打印清晰的错误并以非零状态退出。

--reason 会在 CLI 确认信息中添加一条本地备注。当前网关审批记录没有自由文本的解析原因字段,因此该备注不会被持久化,也不会发送到其他审批界面。

从文件替换审批

openclaw approvals set --file ./exec-approvals.json
openclaw approvals set --stdin <<'EOF'
{ version: 1, defaults: { security: "full", ask: "off", askFallback: "full" } }
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 中的一种,不要同时使用两者。

具有主机原生策略的 Windows 节点使用自己的策略结构:

openclaw approvals set --node <id|name|ip> --stdin <<'EOF'
{
  defaultAction: "deny",
  rules: [{ pattern: "hostname", action: "allow" }]
}
EOF

CLI 会先读取节点的当前哈希,并在更新时一并发送,因此并发的本地编辑会被拒绝,而不是被覆盖。rules 是必需的,因为该操作会替换节点的完整规则列表;defaultAction 是可选的。如果节点报告其原生策略处于禁用状态,则无法远程配置该节点;请先在该主机上启用或配置策略。主机原生策略不支持 allowlist add|remove 辅助命令。

“永不提示” / YOLO 示例

对于不应在 exec 审批上停止的主机,将主机审批默认值设置为 full + off:

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

对于公开 OpenClaw 审批文档的节点,使用相同的请求体,并通过 openclaw approvals set --node <id|name|ip> --stdin 发送。主机原生节点需要使用上面所示的其所有者特定格式。

此操作仅更改 主机审批文档。为使所请求的 OpenClaw 策略保持一致,请同时设置:

openclaw config set tools.exec.host gateway
openclaw config set tools.exec.mode full

这里显式使用 tools.exec.host=gateway,因为 host=auto 仍然表示“有沙箱时使用沙箱,否则使用 gateway”:YOLO 关注的是审批,而不是路由。即使已配置沙箱,若希望使用主机 exec,请使用 gateway(或 /exec host=gateway)。

省略 askFallback 时,默认值为 deny。当升级一个无 UI 的主机且需要保持永不提示行为时,请显式设置 askFallback: "full"。

仅在本地机器上,用于相同意图的本地快捷方式:

openclaw exec-policy preset yolo

允许列表辅助命令

openclaw approvals allowlist add "~/path/to/**/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 "~/path/to/**/bin/rg"

添加已存在的模式或删除不存在的模式会成功,但不会写入。 使用 --json 时,这些命令会返回未更改的、已脱敏的审批快照。

常用选项

get、set 和 allowlist add|remove 均支持:

  • --node <id|name|ip>(解析 id、名称、IP 或 id 前缀;与 openclaw nodes 使用相同的解析器)
  • --gateway
  • 共享节点 RPC 选项:--url、--token、--timeout、--json

未指定目标标志时,表示共享状态数据库中的本地审批行。

allowlist add|remove 还支持 --agent <id>(默认为 "*",应用于所有 agent)。

pending 和 resolve 始终使用 Gateway,因为待处理请求是实时的 Gateway 状态。它们支持共享的 Gateway 连接选项 --url、--token 和 --timeout;pending 还支持 --json。

openclaw exec-policy

openclaw exec-policy show 会解释某个 agent 的终端工具策略,并单独显示命令审批。检查操作绝不会更改权限。preset 和 set 会将所请求的 tools.exec.* 配置与本地主机审批文档同步。

openclaw exec-policy show
openclaw exec-policy show --agent main
openclaw exec-policy show --session agent:main:main
openclaw exec-policy show --agent main --verbose
openclaw exec-policy show --agent main --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

检查终端访问

未使用 --session 时,show 可离线工作。它会报告来自本地工具配置文件和策略的明确排除项。本地允许的工具的执行访问状态为 未验证;模型、通道、沙箱、会话和运行时限制仍可能影响可用性。

报告以 agent 和终端访问状态开头,随后是配置文件继承、exec 和 process 的发现、本地命令审批以及下一步。agent 配置文件会覆盖全局配置文件。例如,即使 tools.profile 为 "full",agents.entries.main.tools.profile: "messaging" 也会排除终端工具。命令审批设置不会授予工具访问权限。有意限制性的配置文件是有效配置。

  • --agent <id> 选择要检查的 agent。未使用 --session 时,该 agent 必须在本地配置。如果只配置了一个 agent,则自动选择。如果存在多个 agent,未指定目标的报告会要求你先选择一个 agent 或带 agent 限定的会话键,然后再检查工具可用性。如果没有配置任何 agent,它会说明如何添加一个。这两种情况仍会显示所有本地命令审批范围的简明摘要。
  • --session <key> 通过 Gateway 从已保存的设置中获取一个 现有 会话的只读工具预览。请使用完整的会话键;对于 global 等共享键,Gateway 会解析其 agent;当 Gateway 需要显式选择时,请传入 --agent。该 agent 不必存在于 CLI 机器的配置中。冲突的 agent 和会话目标会被拒绝。
  • --verbose 会添加策略来源,以及所有范围的完整请求/主机/生效审批表。
  • --json 会保留所有审批字段和范围。选择 agent 后,它会添加 toolAccess,将 local 发现与可选的 live 结果分开。当 agent 未在 CLI 机器上配置时,会省略 local。如果失败的会话检查无法解析 agent,也会省略 agentId。未指定目标的多 agent 或空名册报告则会添加 toolAccessSelectionRequired,其中包含 agentIds 和 hint;它不会做出任何工具可用性声明。

会话预览支持共享的 Gateway 连接选项(--url、--port、--token、--password、--timeout)。如果无法检查 Gateway 或会话,报告会显示 UNVERIFIED,并保留任何可用的本地发现。缺失的本地工具策略会被标记为不可用,而绝不会被标记为允许。不可用的检查不是工具被允许或被拒绝的证据。

成功获取会报告 PREVIEW,除非已检查的策略确立了排除项。包含的工具不保证会执行,预览中缺失的工具也不一定被禁用。预览可能被缓存;保存的更改可能需要时间才会显示,并且活动运行可能使用不同的权限、凭据、发现或策略。在运行中验证执行;命令审批仍然适用。

JSON 保留传输名称 live、checked: "live-session" 以及工具状态 available/unavailable。这些描述所获取的会话预览。live.status: "verified" 表示预览已成功获取,而不是执行已验证。excluded 标识已检查的策略排除项;单独的 unavailable 不能确立排除项。CLI 将旧版 Gateway 的显式 deniedBySession 标志转换为带有 session 原因的 excluded。

命令审批仍标记为 local,包括在会话检查期间。它们不描述远程主机审批或按会话的 /exec 覆盖。对于这些主机策略,请使用 openclaw approvals get --gateway 或 --node <id|name|ip>,并在会话中使用 /exec 查看其当前默认值。

当向 alsoAllow 添加终端工具能够解决已检查的限制时,报告会建议确切的配置路径和工具名称。将它们追加到现有条目;保留命令审批要求。如果其他策略仍阻止访问,请在启用工具前查看报告的排除项。仅从预览中缺失的工具不会提示 alsoAllow 配方。更改使用现有配置命令或代理的工具面板和保存控件。检查更新后的预览,并在运行中验证执行。

同步本地命令审批

预设(yolo、cautious、deny-all)会同时应用 host、security、ask 和 askFallback。set 仅应用你传入的标志;每个接受的值都会经过验证(--host auto|sandbox|gateway|node、--security deny|allowlist|full、--ask off|on-miss|always、--ask-fallback deny|allowlist|full)。

show、preset 和 set 接受 --json,并将请求的、主机的和生效的命令审批事实作为一个 JSON 对象返回。preset 和 set 不会更改工具配置或工具允许/拒绝规则。

范围:

  • 同时更新本地配置文件和本地审批文档;不会将策略推送到网关或节点主机。
  • 拒绝 --host node:节点执行审批在运行时从节点获取,因此本地 exec-policy 无法同步它们。请改用 openclaw approvals set --node <id|name|ip>。
  • exec-policy show 在运行时将 host=node 作用域标记为节点管理,而不是从本地审批文档推导生效策略。

对于远程主机审批,请直接使用 openclaw approvals set --gateway 或 openclaw approvals set --node <id|name|ip>。

备注

  • 节点主机必须通告 system.execApprovals.get/set(macOS 应用、无头节点主机或 Windows 伴侣应用)。
  • 生成的授权在 2026.8.1 中变为目录绑定。从 2026.7.1 或更早版本升级后,如果更新尚未执行,请运行 openclaw doctor --fix。Doctor 仅移除不活动的生成授权;手动允许列表规则保持不变。重新运行受影响的工作流,以在预期目录中批准它们。
  • 审批按主机存储在 $OPENCLAW_STATE_DIR/state/openclaw.sqlite#exec_approvals_config 中,或者在变量未设置时存储在 ~/.openclaw/state/openclaw.sqlite#exec_approvals_config 中。后缀标识单例 SQLite 行。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw