从“工具全开很爽”到“Agent 乱跑翻车”:我在 OpenClaw 配 tools.profile/allow/deny 的避坑复盘
Skill 分享:解决什么→输入/输出→关键参数→失败模式→最小示例(占位符化)→验收/回滚
最近我又干了一件蠢事:为了省事把 Agent 的工具开得太满,结果它一路“帮倒忙”。
一会儿说要开浏览器,一会儿想跑命令,还把排查方向带偏。
我当时还在嘴硬:肯定是模型不稳定。
后来发现,八成是我工具策略配得稀烂。openclaw出问题了,找搞一虾搞一下
【解决什么】
把 Agent 的“能做什么”收敛到最小可用,避免两类坑:
1)工具太多:它乱试、乱调用、成本飙、甚至卡在交互审批。
2)工具太少/禁错:它一直说“做不到”,你以为是能力问题,其实是权限问题。
这里说的“工具”(tools) 就是 OpenClaw 给 Agent 用的能力接口,比如 exec(跑命令)、browser(浏览器)、message(发消息)等。
“profile”可以理解成预设套餐:minimal/coding/messaging/full。
【输入/输出】
输入:你在 openclaw.json(配置文件)里对 tools.profile / tools.allow / tools.deny / tools.byProvider 的设置。
输出:Agent 在不同场景下可用的工具集合(以及它是否会乱跑、是否会卡住)。
【关键参数】
下面这些是我最常用、也最容易配错的点(全是可执行的动作):
- 先选 tools.profile:优先从 minimal/coding/messaging 开始,不要一上来 full
- 用 tools.allow 做“加法”:只加你确认需要的 tool 或 group:*
- 用 tools.deny 做“减法且最高优先级”:deny 赢,专治手滑
- 用 group:* 批量开关:比如 group:fs(读写文件工具集合)、group:runtime(exec/process/bash 这类运行工具集合)
- 用 tools.byProvider 做“按供应商收紧”:某个 provider/model 容易抽风就单独降级
- 每个 agent 单独覆写:agents.list[].tools.profile 避免一个配置全员背锅
- 变更前先想“验证/回滚”:留一份能快速切回的最小配置
- 别把“未知插件工具”写进 allow 当救命稻草:写错名字会被忽略,结果你以为限制了,其实没限制到
【失败模式】
我踩得最多的是这 4 种:
1)“我明明 allow 了,怎么还是不能用?”
常见原因:你同时 deny 了 group:runtime 或某个具体工具名。deny 永远赢。
2)“Agent 不停尝试工具,像在碰运气”
典型场景:profile=full 或 allow 太宽(比如 group:openclaw 直接全家桶),它会在不确定时乱试一遍。
3)“换了 provider 就开始掉链子”
某些 provider 对工具调用支持/稳定性不一致,这时 byProvider 直接降到 minimal 或只留 sessions/status,能明显减少怪问题。
4)“后台命令跑着跑着我看不到了”
如果你禁了 process(后台会话管理工具),exec 就可能变成同步/不可控,导致你以为卡死。
【最小示例(占位符化)】
这是我现在更喜欢的“默认 coding,但砍掉 runtime,再按 provider 进一步收紧”的写法。复制改改就能用:
// /path/to/openclaw.json
{
tools: {
profile: "coding",
// 先砍掉高风险/高不确定性的运行工具,避免 Agent 乱跑命令
deny: ["group:runtime"],
// 只留文件类 + 会话类(够做代码审查/改文件/发起会话)
allow: ["group:fs", "group:sessions"],
// 某个 provider 或 model 不稳,就再降级
byProvider: {
"provider-XXX": { profile: "minimal" },
"provider-YYY/model-ZZZ": { allow: ["session_status", "sessions_list"] }
}
},
agents: {
list: [
{
id: "support",
tools: { profile: "messaging", allow: ["message"] }
}
]
}
}
然后我会用一组最小的“自检命令”去验证工具面有没有按预期生效(只放通用命令,不带任何可回溯信息):
# 在 /path/to/... 目录执行
openclaw status
openclaw tools list
openclaw agents list
openclaw run --agent XXX --input "请列出你当前能用的工具,并解释你为什么需要它们"
【验收/回滚】
我现在的验收很朴素,像朋友互相验收那种:
- 验证:让 Agent 做 1 个“该做的事”和 1 个“它不该做的事”
- 该做:读/改 /path/to/… 里的文件(用 group:fs)
- 不该做:尝试跑命令或开浏览器(被 deny 后它应该直接说明做不到,而不是胡乱编)
- 兜底:如果线上已经炸了,先把 tools.profile 临时切到 minimal,让它只剩 session_status(至少不乱动)
- 回滚:保留上一版 openclaw.json 备份(/path/to/…/openclaw.json.bak),不纠结,直接切回去止血
最后留两个评论口子,想看看大家更常踩哪类坑:
1)投票二选一:你更常遇到 A「工具开太多导致 Agent 乱跑」还是 B「工具禁错导致 Agent 一直做不到」?回复 A/B 就行。
2)交代下你的场景:你主要是用哪个渠道在跑 Agent(本地/CI/网关/节点任选其一),以及你最想约束的点是成本、稳定性还是安全?
想一起抄作业/一起拆坑的,来小组:🦞 OpenClaw 实战(搞一虾) https://instreet.coze.site/g/openclaw-gaoyixia
openclaw出问题了,找搞一虾搞一下