1. 为什么你的 OpenClaw Agent 需要一套工具策略
刚接触 OpenClaw 的开发者常遇到一个尴尬场景:Agent 明明只是帮你整理文档,却突然调用exec跑了一条 shell 命令;或者你只想让它查资料,它却顺手把本地文件改了。问题不在模型,而在工具边界没设好。
OpenClaw 的工具策略系统就是解决这件事的。它允许你通过config.toml精细控制哪些工具可用、哪些禁用,支持 Profile 预设、Allow/Deny 双向过滤、Provider 特定策略三层机制。简单说,它决定了「模型能看到哪些工具」,被过滤掉的工具根本不会发送给 Provider,从源头掐断误调用。
这套机制适合三类人:一是刚跑通 OpenClaw、想给 Agent 加安全护栏的新手;二是需要针对不同模型(比如 GPT 和 Claude)设置不同权限的团队;三是做多 Agent 协作、要给每个 Agent 分配不同工具集的开发者。下面我从配置骨架讲到生效验证,一步步把边界搭起来。
2. TaoToken 前置:把 Provider 调用通道准备好
OpenClaw 的工具策略最终作用在 Provider 调用上,所以你得先有一个能正常发起模型请求的通道。我用的是 TaoToken,它提供 OpenAI 兼容接口,接入 OpenClaw 只需要改 base_url 和 api_key 两处。
先到控制台创建一个 API Key,地址是 https://taotoken.net/api-keys ,创建后复制保存,页面只显示一次。然后在 OpenClaw 的 Provider 配置里填入:
[providers.taotoken] type = "openai-compatible" base_url = "https://taotoken.net/api" api_key = "sk-你的key" default_model = "gpt-4o-mini"这里base_url用https://taotoken.net/api,不要加多余路径。type选openai-compatible是因为 TaoToken 的接口协议与 OpenAI 一致,OpenClaw 能直接识别。
如果你还没决定用哪个模型,可以先到模型对话页 https://taotoken.net/models 试几条请求,确认通道通畅再写进配置。长期跑编码类 Agent 的话,Coding Plan 页面 https://taotoken.net/coding-plan 有更细的额度说明,按需选即可。
注意:Provider 配置和工具策略是两个独立层。Provider 决定「请求发到哪」,工具策略决定「请求里带哪些工具」。先把 Provider 跑通,再叠加策略,排障时能快速定位是哪一层的问题。
3. 可复制的 config.toml 策略骨架
下面这份配置是我实测能直接跑的骨架,覆盖 Profile、Allow/Deny、byProvider 和 Agent 级覆盖四个层级。你可以整段复制后按注释改。
# ============ 全局工具策略 ============ [tools] # 基础工具集:coding 包含 fs/runtime/sessions/memory/image profile = "coding" # 在 Profile 基础上额外放行 web 工具组 allow = ["group:web"] # 但禁用 runtime 组(exec/bash/process 这类危险命令) deny = ["group:runtime"] # 针对特定 Provider 进一步收窄 [tools.byProvider] # 这个 Provider 只能用最小工具集 "taotoken/gpt-4o-mini" = { profile = "minimal" } # 这个 Provider 只保留文件系统和会话列表 "taotoken/claude-3-5-sonnet" = { allow = ["group:fs", "sessions_list"] } # 循环检测,防止 Agent 反复调用同一工具 [tools.loopDetection] enabled = true warningThreshold = 10 criticalThreshold = 20 # ============ Agent 级覆盖 ============ [[agents.list]] id = "support" [agents.list.tools] profile = "messaging" allow = ["slack"] [[agents.list]] id = "coder" [agents.list.tools] deny = ["group:automation"]几个关键点解释一下。profile = "coding"是基础盘,它自带group:fs、group:runtime、group:sessions、group:memory和image。我在allow里加了group:web,所以最终可用工具是 coding 全集加上 web 组。但deny里的group:runtime优先级最高,会把 exec、bash、process 三个工具全部剔除。
byProvider的键支持两种写法:provider或provider/model。我上面用的是taotoken/gpt-4o-mini这种精确到模型的格式,这样同一个 Provider 下不同模型可以有不同策略。Provider 策略在 Profile 之后、Allow/Deny 之前应用,所以它只能缩小范围,不能扩大——这点很重要,别指望用 byProvider 去放行 Profile 里没有的工具。
Agent 级覆盖是最后一道。support这个 Agent 完全走 messaging 路线,coder则禁掉了自动化工具。注意 Agent 级配置会重新走一遍上述规则,不是简单叠加。
4. 验证 Allow/Deny 是否真的生效
配置写完不代表生效,得实际发一次请求看工具列表。OpenClaw 提供了tools list子命令,可以打印当前生效的工具集。
openclaw tools list --agent coder --provider taotoken/gpt-4o-mini预期输出类似:
Active profile: coding Provider override: taotoken/gpt-4o-mini -> minimal Allowed groups: group:fs, group:sessions, group:memory, image Denied tools: exec, bash, process Final tool count: 9如果Final tool count和你预期不符,说明某一层策略没按你想的走。我踩过的坑是deny写成了denied,配置静默忽略,工具照样发出去。所以验证这一步不能省。
再做一个反向验证:临时把deny里的group:runtime注释掉,重新跑一次tools list,应该能看到exec、bash、process出现在可用列表里。确认后再改回来。这样你就亲眼看到 Allow/Deny 的开关效果了。
如果你想直接看模型实际收到的工具定义,可以加--verbose:
openclaw tools list --agent coder --verbose它会打印每个工具的 name、description 和参数 schema。被 deny 的工具不会出现在这里,因为它们在发送前就被过滤了。
5. 本篇常见错排查
报错一:unknown profile "coding"
说明 Profile 名称拼错了,或者你的 OpenClaw 版本不支持该 Profile。可用值只有minimal、coding、messaging、full四个,大小写不敏感但拼写要对。检查config.toml里profile字段的值。
报错二:工具数量比预期多
最常见原因是deny和allow同时写了同一个工具,你以为 deny 会赢,但实际上如果 allow 用的是工具组、deny 用的是单个工具名,匹配可能不完整。比如allow = ["group:fs"]加deny = ["read"],read 确实会被禁,但write、edit还在。建议 deny 也用组名,或者用*通配符先全禁再放行。
报错三:byProvider 不生效
检查键的格式。"taotoken"和"taotoken/gpt-4o-mini"是两种不同粒度,写错粒度会导致匹配不上。另外确认 Provider 名称和你在[providers.xxx]里定义的一致,大小写敏感。
报错四:Agent 级配置被全局覆盖
Agent 级策略是在全局之后应用的,但它不能突破全局的 deny。如果全局deny = ["group:runtime"],Agent 级再写allow = ["group:runtime"]也没用,deny 优先级最高。要放行就得改全局配置。
报错五:改了配置没重启
OpenClaw 的工具策略在启动时加载,改完config.toml需要重启进程。如果你用openclaw serve起的服务,Ctrl+C后重新跑一次即可。
6. 把策略接进你的工作流
工具策略配好之后,下一步是让它跟你的实际调用链配合起来。如果你主要做模型验证和调试,可以直接在模型对话页发请求,观察不同策略下模型的行为差异:https://taotoken.net/models 。如果你要长期跑编码类 Agent,建议把策略写进项目级的config.toml,配合 Coding Plan 的额度一起管理:https://taotoken.net/coding-plan 。
接入文档里有完整的配置字段说明和更多示例,遇到本篇没覆盖的字段可以去查:https://taotoken.net/doc 。API Key 管理在控制台:https://taotoken.net/api-keys 。Claude Code 相关的接入配置参考:https://taotoken.net/claude-code 。
最后留一个实用技巧:把tools list的输出存成文件,每次改策略后 diff 一下,能快速看出哪一层动了。工具策略这东西,改一次验证一次,比事后排查省事得多。