14.3 工具权限与策略

生成模型:Claude Opus 4.6 (anthropic/claude-opus-4-6) Token 消耗:输入 ~900k tokens,输出 ~85k tokens(本章合计)


OpenClaw 的工具权限系统是其安全架构的关键组成部分。不同的用户、不同的场景、不同的 Agent 可能需要截然不同的工具集。本节详解 ToolPolicy 配置体系及其层级过滤机制。


14.3.1 ToolPolicy 配置体系

策略的基本结构

工具策略由 allow(允许列表)和 deny(拒绝列表)两个维度组成:

// src/agents/pi-tools.policy.ts
type SandboxToolPolicy = {
  allow?: string[];    // 允许的工具(白名单模式)
  deny?: string[];     // 拒绝的工具(黑名单模式)
};

评估规则:

  1. 如果工具名在 deny 中 → 拒绝

  2. 如果 allow 为空 → 允许(无白名单等于全部允许)

  3. 如果工具名在 allow 中 → 允许

  4. 否则 → 拒绝

工具组(Tool Groups)

为了简化配置,OpenClaw 定义了一组工具组,可以在 allow/deny 中通过组名引用一批工具:

配置示例:

工具配置档案(Tool Profiles)

OpenClaw 预定义了四个配置档案,覆盖常见使用场景:

使用方式:

alsoAllow 是一个巧妙的设计——它允许在 profile 基础上追加工具,而不需要完全覆盖 allow 列表。

模式匹配

工具名支持 * 通配符,由编译后的正则表达式匹配:

这让配置变得非常灵活:


14.3.2 按发送者身份控制工具权限

Owner-Only 工具

某些敏感工具只允许"所有者"(Owner)使用:

这里使用了双重保护:即使工具因某种原因没被过滤掉(例如 LLM 缓存了旧的工具列表),execute 也会拒绝执行。

群组场景的发送者控制

在群组聊天中,不同发送者可能有不同的工具权限。这通过 resolveChannelGroupToolsPolicy() 实现:

配置示例:


14.3.3 多层策略级联

策略应用顺序

OpenClaw 的工具策略系统最精巧的设计在于多层策略级联。策略从上到下逐层过滤,每层进一步收窄工具集:

在源码中,这个级联清晰可见:

按 Provider 差异化策略

不同模型提供者可能有不同的工具需求。例如,某些工具在使用 OpenAI 模型时不可用:

策略解析时会按 provider/modelprovider 的顺序查找最具体的匹配:

插件工具的特殊处理

allow 列表中只包含插件工具名(没有任何核心工具名)时,OpenClaw 会认为这是配置错误——用户可能只是想额外添加插件工具,而不是禁用所有核心工具:

这个保护机制避免了一个常见陷阱:用户在 tools.allow 中只写了 ["memory_search"],结果意外禁用了所有内置工具。正确做法是使用 tools.alsoAllow


本节小结

  1. 工具策略由 allow(白名单)和 deny(黑名单)组成,deny 优先级高于 allow。支持工具组(group:fs)和通配符(discord_*)简化配置。

  2. 四个预定义 Profile 覆盖常见场景:minimal(仅状态查看)、coding(开发场景)、messaging(纯消息)、full(无限制)。alsoAllow 支持在 Profile 基础上追加工具。

  3. Owner-Only 机制使用双重保护(移除工具 + 替换 execute),敏感工具只对所有者可用。群组场景支持按发送者 ID 精确控制工具权限。

  4. 10 层策略级联从 Owner-Only 到子 Agent 策略逐层过滤,支持按 Provider/Model 差异化配置。插件工具有特殊的安全保护,防止意外禁用核心工具。

Last updated