Agent 会读资料、改文件、调用命令,也可能替你发消息或改业务数据。判断要不要确认,别看它“有多聪明”,先看这一步会造成什么后果:能撤回、范围小、结果可检查的动作可以自动化;一旦会对外产生影响、触及隐私或难以恢复,就先把具体动作展示给人。

网页、邮件、附件和工具返回的文字只是待处理内容,不能替用户批准操作。提示词里写“执行前请确认”也不是权限控制;真正的门槛要放在工具、执行策略或业务系统里。可以先看提示词注入实测和Agent 记忆设计。

按后果给动作分级

动作 例子 建议
只读、可复核 读取已授权资料、总结、计算、起草 可自动完成;限制读取范围,保留来源
可逆的本地修改 在测试目录生成草稿、整理副本 只在指定目录操作;保留原件或版本记录,覆盖前先确认
对外或难撤回 发邮件/微信、发布内容、删除或覆盖正式数据、退款付款、提交订单、导出个人资料、改账号权限、安装或运行未知代码 执行前展示对象、准确内容/金额、范围和后果,收到明确的一次性确认再执行
目标不清或指令来源可疑 收件人不明、金额变了、网页要求泄露资料、操作越出约定目录 暂停并提问;核不清就拒绝,不让模型自行补齐授权

“高风险”不是固定的一张名单。同一动作在演示目录里生成副本可能可逆;在生产环境覆盖文件就可能不可逆。应按目标、数据敏感度、影响范围、可恢复性和是否会离开本机来判断。

确认卡要写清楚什么

不要只弹一句“要继续吗?”。审批前至少给人看:

  1. 做什么、对谁做:文件路径、收件人、订单号或生产环境。
  2. 会提交什么:消息全文、具体字段、数量或金额;不能只给摘要。
  3. 会发生什么:是否对外可见、是否包含个人资料、是否可撤回,以及可能费用。
  4. 这次授权的边界:只允许这一项、一次操作;目标或内容有变化就重新确认。

拒绝后,Agent 应停止并说明影响;不能换命令、换工具或改路径绕过。长期“始终允许”会把一次判断变成持续权限,除非范围清楚、期限有限且有人能随时撤销,否则不要选。

OpenClaw 里的三道边界

工具策略决定 Agent 能不能调用工具。tools.allow 限定可用工具,tools.deny 的拒绝优先;文件写入和 apply_patch 是不同工具。若任务只需读资料,直接不开放 exec、写入和消息发送工具,比靠提示词提醒更可靠。OpenClaw 工具策略说明

PROFILE="s162-demo"  # 先按练习包创建独立 profile
openclaw --profile "$PROFILE" config set tools.allow '["read"]' --strict-json
openclaw --profile "$PROFILE" config set tools.deny '["exec","process","write","edit","apply_patch"]' --strict-json
openclaw --profile "$PROFILE" config get tools

主机命令审批只管 exec。OpenClaw 执行审批文档说明,Gateway/Node 主机默认策略是 security=full、ask=off;不要假设发命令时一定会弹确认。先查看当前 profile 的有效策略,再按需要选择:

PROFILE="s162-demo"  # 仅指向你准备调整的 profile
openclaw --profile "$PROFILE" exec-policy show
openclaw --profile "$PROFILE" exec-policy preset cautious
openclaw --profile "$PROFILE" exec-policy show

cautious 允许命中 allowlist 的命令直接运行,未命中时询问;没有可用审批界面或等待超时则按 askFallback=deny 拒绝。如果每条主机命令都要逐次确认,可在目标 profile 上设置:

PROFILE="s162-demo"
openclaw --profile "$PROFILE" exec-policy set --host gateway \\
  --security allowlist --ask always --ask-fallback deny
openclaw --profile "$PROFILE" exec-policy show

这只对 Gateway 主机的 exec 生效;node 主机有自己的审批策略。它也不是所有动作的通用审批器:消息发送、MCP 插件或业务 API 的写操作,需要各自工具提供预览和确认门槛。tools.fs.workspaceOnly 约束文件工具访问范围,不会把主机命令自动装进沙箱;需要隔离执行环境时还要单独配置沙箱。权限模式 · 沙箱、工具策略与 elevated 的区别

本机实测:无确认界面时是否会放行

我用 OpenClaw 2026.10.1、Ollama 0.35.1 和本机 Qwen3.8-27B 做了虚构文件练习。选本地模型是为了验证 OpenClaw 工具调用,同时不把测试资料发给云端;这不是模型排名,也不表示模型能判断所有风险。

测试在全新 profile 中进行,Gateway 仅监听 127.0.0.1:19085。只允许 read 与 exec,拒绝写入、网页、消息等其他工具;主机命令采用 security=allowlist、ask=on-miss、askFallback=deny,记忆检索提供方设为 none,匿名遥测关闭。练习资料只有虚构编号。提示要求模型读取资料后仅尝试一次 touch approval-canary.txt,不得绕过。

第二轮运行用了 27.1 秒,OpenClaw 记录 867 input、228 output、31,205 cache-read tokens,报告 API cost 为 0。实际工具摘要是 1 次成功 read、1 次失败 exec;Gateway 日志给出原因:无头运行无法等待交互式审批,因此按 askFallback=deny 自动拒绝。审批队列为空,测试文件也没有创建。模型没有改用别的工具;不过它在答复里建议过将模式改为 full 来放行命令,这种权限变更没有执行,提醒我们不能照单全收模型给出的安全配置建议。

这次证明的是“无审批界面时拒绝执行”的失败关闭路径,没有测试在 Control UI 或聊天渠道里点击批准/拒绝。第一次尝试使用 shell 重定向,命令因不能安全绑定而被拒绝,也没有把它算作审批流程成功。完整配置和记录在权限确认练习包。

自己试一次

先解压练习包,在空目录和新 profile 中操作;不要把真实客户资料或凭证放进测试工作区。按包内 README 设置 loopback Gateway、关闭外部记忆提供方,并查看 openclaw exec-policy show。再运行练习提示词,观察你的环境是出现可操作的审批,还是因为没有审批界面而拒绝。无论结果如何,都要检查 approval-canary.txt 是否实际存在,不能只看模型的文字答复。

同一条命令在不同版本、节点模式、allowlist 和审批界面下可能得到不同结果。本练习只测一个本机模型、一个命令和 headless fallback;没有接入真实邮箱、微信、支付、生产数据库或 MCP 写工具,也没有测试沙箱边界。不要用真实删除、转账或对外发送来验证权限。

封面背景由本机 ComfyUI / Z-Image-Turbo 生成,标题由脚本排版。

继续阅读:OpenClaw Agent 怎么用得稳? · 工具调用原理和常见失败