同一工具如何按场景控制权限,OpenClaw 的工具策略管道如何分层?
未标记
考查重点:策略作用域与组合规则。用不同身份和场景调用同一命令工具,说明各层策略怎样合成最终允许范围,以及执行时怎样复核对象和参数
本题目录
参考答案
OpenClawTypeScript
核心回答
同一工具的权限应由可信的身份和场景决定:先限制这次任务允许使用哪些工具,再在执行时检查具体参数、资源和调用者权限。 模型可以提出调用,但不能通过填写“我是管理员”给自己授权。
OpenClaw 把工具策略分成基础工具集、全局与 Agent 配置、渠道会话与发送者、沙箱与子 Agent 等层,逐层过滤候选工具。普通策略中 deny 优先,各层允许范围共同约束结果;后层写了 allow,不会恢复前层已经移除的工具。owner 权限还会作用于当轮执行,模型看见工具定义,不等于本轮能够调用。
例如,本地开发者可以用 exec 调试,群聊助手则可通过群组策略禁止 exec、process 以及文件修改工具。这里解决的是工具准入;命令在哪运行、能写哪些目录,以及业务接口能操作哪个对象,仍分别由执行环境和具体工具检查。
工具策略管道怎样分层?
固定版本的 buildDefaultToolPolicyPipelineSteps() 按以下顺序使用已经解析好的策略:
- 基础工具集:
profilePolicy、providerProfilePolicy,分别对应通用和模型供应方的工具 profile。 - 全局与 Agent:
globalPolicy、globalProviderPolicy、agentPolicy、agentProviderPolicy。 - 当前会话与发送者:
groupPolicy、senderPolicy。同一个 Agent 在不同群组、不同发送者的请求下,可以得到不同工具范围。
会话管道随后追加 sandboxPolicy、subagentPolicy、按需要纳入的 runtimeToolPolicy,以及 inheritedToolPolicy。未配置的层跳过;已配置的层继续收窄当前候选。沙箱层只在相应沙箱场景生效,子 Agent 层与继承限制也不是每次普通聊天都凭空产生。默认层次、会话附加层。
applyToolPolicyPipeline() 保存当前工具数组,每经过一层,就对上层结果执行 filterToolsByPolicy()。匹配器先检查拒绝规则,再检查允许规则,支持工具组和通配模式。alsoAllow 是向相应层已有允许集合补充条目,不是跨层的授权通行证。逐层过滤、名称匹配。
渠道、插件与子 Agent 各影响什么?
渠道策略约束请求所处的对话。 群组、账号与发送者信息应由宿主解析,不能信任模型自报的身份。当前实现通过请求者策略解析群组和发送者范围;子 Agent 还会携带持久化的继承限制,不能换一个会话就丢掉来源约束。请求者策略解析。
插件扩展工具来源,不自动扩大权限。 管道按插件元数据把插件 ID、group:plugins 展开成具体工具名,再应用策略。已加载插件的工具仍可能被全局、发送者或沙箱层排除;配置了 MCP 服务,也不代表当前沙箱会话可以调用它。插件工具组展开。
子 Agent 另受子任务限制与继承范围约束。 例如控制平面、直接跨会话投递等工具存在额外限制。显式的跨 Agent 工具委派是运维配置授予的能力,不能由模型在 sessions_spawn 参数里自行声明;普通 allow 也不能消除其它来源的拒绝。子 Agent 工具策略。
owner 权限为什么不能只靠隐藏工具?
这个版本会区分提供给模型的工具定义与当轮真正可调用的工具。resolveTurnToolSurface() 对未获 owner 权限或超出当轮请求者权限的工具,保留定义并包装执行入口;调用会被拒绝,同时从本轮 callableTools 和后代继承的 exportedTools 中排除。这既保持会话工具前缀稳定,也避免把“定义仍在”当成有效授权。具体工具仍可以拥有动作级和对象级检查。当轮工具权限处理。
工具策略能保证什么,不能替代什么?
工具策略回答“允许调用哪个工具”,沙箱回答“工具在哪里运行、能接触什么”。允许 exec 后,即使拒绝 write、edit,命令仍可能修改文件,因此不能据此宣称整个 Agent 只读。elevated 也不增加工具集合,不能绕过已经拒绝的 exec。
对同一个被允许的工具,执行层仍应依据真实身份检查目标、参数和当前状态。例如允许调用发消息工具,不等于可以向任意群组投递;允许执行命令,也不等于获得所有主机或目录的访问权。实际系统需要把工具准入、具体动作授权与执行隔离分别落实。沙箱、工具策略与 elevated 的区别。
对应教程
- 17-Tools工具调用:回看模型提出工具调用、应用代码校验和执行的职责划分;OpenClaw 的具体策略顺序与当轮权限机制按上述源码展开。
参考资料
- 国内:JavaGuide:Harness Engineering:采用模型负责生成、宿主负责工具和约束的分工,说明权限不能仅由提示词决定。
- 国内:JavaGuide:Agent 项目面试指南:采用参数格式、业务条件与资源权限分别检查的划分,说明允许工具名之后仍要检查本次动作。
- 国内:WeThinkIn:Agent Harness 工程高频考点:采用任务允许动作与运行环境分别定义的方式,解释同一命令工具的准入范围和执行环境需要分别配置。
- 国内:WeThinkIn:工具权限、沙箱和人工审批如何协同:采用可信身份、资源所有权和服务端授权的解释,说明模型参数不能成为权限凭证。
- 国外:OpenClaw:Configuration — tool policy:依据工具 profile、插件选择和沙箱附加准入的约定,区分工具已安装、工具被提供与本轮获准执行。
- 国外:OpenClaw:Sandbox vs tool policy vs elevated:依据工具策略只控制工具名、允许命令仍可能写文件,以及 elevated 不绕过工具拒绝的规则,解释各层保障的边界。