周红伟:OpenClaw Tools 深度解析:20+ 工具 × 3 层防护,让你的小龙虾安全地“动手动脚“

OpenClaw Tools 体系全貌
图1:OpenClaw Tools 体系全貌
💡 为什么叫"小龙虾"?OpenClaw 的 Claw 意为"钳子",像极了小龙虾的大钳子,故得此名。
从一个真实的开发场景说起
上周有个需求:每天早上自动抓取竞争对手网站的价格变动,生成报告发到公司群。传统做法是写个 Python 脚本,配合 Selenium + 定时任务。但我当时就想——这种重复性工作,为什么不能让 AI 直接搞定?
当我用 OpenClaw 配置完整个流程后,说实话有点意外:整个过程没写一行代码,只是用自然语言描述了需求,AI 就自己打开浏览器、抓数据、发消息。更关键的是,它能处理登录、验证码这些我原本以为会卡住的环节。
这让我开始好奇:OpenClaw 的 Tools 体系到底是怎么设计的?为什么 AI 能如此顺畅地操作浏览器、执行命令?它的安全机制靠谱吗?带着这些问题,我翻阅了大量官方文档和源码,整理了这篇文章。
Tools 是什么?AI 智能体的能力层

Tools 架构图
图2:Tools 在 OpenClaw 体系中的位置
一句话定义:Tools 是 OpenClaw 智能体直接操作外部世界的标准化接口。
传统 AI 助手的能力很有限——你问它问题,它只能给你文本回答。但 OpenClaw 的智能体不一样,它能:
- 打开浏览器、点击按钮、填写表单
- 在你的电脑上执行命令
- 搜索网络、抓取网页内容
- 读写文件、发送消息
- 控制外部设备(摄像头、打印机、扫地机器人...)
这些能力的实现,都依赖于 Tools 体系。
Tools vs Skills:能力与知识
很多开发者会混淆 Tools 和 Skills,这里说清楚:
|
概念 |
作用 |
类比 |
|---|---|---|
|
Tools |
智能体能调用的功能单元 |
程序员的"工具箱" |
|
Skills |
指导智能体如何使用工具的提示词 |
程序员的"操作手册" |
举个栗子:browser 是一个 Tool,它提供了打开标签页、截图、点击等能力。但智能体怎么知道"购物网站需要先登录再下单"?这些操作流程的指导,就是通过 Skills 配置的。
类型化设计:告别 Shell 注入
OpenClaw 的 Tools 有个关键设计:所有工具都是强类型的。
代码语言:javascript
AI代码解释
// 传统方式(危险):通过 shell 调用
// 容易被注入攻击
exec(`git commit -m "${message}"`)
// OpenClaw 方式(安全):类型化工具调用
{
"tool": "exec",
"params": {
"command": "git commit -m {{message}}",
"security": "allowlist"
}
}
这个设计解决了两个问题:
- 安全性:参数经过类型校验,避免命令注入
- 可预测性:每个工具的输入输出都有明确的结构定义
10 大工具组:从文件操作到设备控制
OpenClaw 把工具分为 10 大组,每组负责一类任务:

10 大工具组分类
图3:10 大工具组分类概览
|
工具组 |
包含工具 |
典型场景 |
|---|---|---|
|
group:runtime |
exec, bash, process |
执行 Shell 命令、管理后台进程 |
|
group:fs |
read, write, edit, apply_patch |
文件读写、代码编辑 |
|
group:sessions |
sessions_spawn, sessions_send |
子智能体生成、会话管理 |
|
group:memory |
memory_search, memory_get |
智能体记忆检索 |
|
group:web |
web_search, web_fetch |
网络搜索、网页抓取 |
|
group:ui |
browser, canvas |
浏览器自动化、Canvas 渲染 |
|
group:automation |
cron, gateway |
定时任务、网关管理 |
|
group:messaging |
message |
跨平台消息发送 |
|
group:nodes |
nodes |
外部设备控制 |
|
group:openclaw |
所有内置工具 |
完整工具集 |
说实话,第一次看到这个分类时,我被 group:nodes 吸引了——它竟然能控制扫地机器人、空气净化器这些 IoT 设备。后面会细说这个能力。
工具配置文件(Profiles)
不是所有智能体都需要全部工具。OpenClaw 提供了 4 种预设配置:
|
Profile |
包含工具 |
适用场景 |
|---|---|---|
|
minimal |
仅会话状态 |
最小权限,只读 |
|
coding |
fs + runtime + sessions + memory |
编程助手 |
|
messaging |
messaging + sessions |
消息机器人 |
|
full |
所有工具 |
完全访问 |
代码语言:javascript
AI代码解释
// 给智能体配置 coding profile
{
tools: {
profile: "coding",
deny: ["gateway", "cron"], // 禁止网关和定时任务
}
}
Browser 工具:浏览器自动化的正确姿势

Browser 工作流程
图4:Browser 工具的推荐工作流程
browser 是 OpenClaw 最强大的工具之一,也是我踩坑最多的部分。
推荐的使用流程
官方文档推荐的工作流程是这样的:
代码语言:javascript
AI代码解释
// 1. 检查/启动浏览器
browser → status / start
// 2. 获取页面快照(关键!)
snapshot (ai 或 aria)
// 3. 执行 UI 操作
act (click/type/press)
// 4. 可选:视觉确认
screenshot
踩坑记录:我最开始直接用坐标点击(click(x=100, y=200)),结果页面布局一变,脚本就废了。后来才知道应该先用 snapshot 获取元素引用,再用 ref 点击:
代码语言:javascript
AI代码解释
// 错误方式(脆弱)
{ "tool": "browser", "action": "click", "x": 100, "y": 200 }
// 正确方式(稳定)
// 1. 先获取快照
{ "tool": "browser", "action": "snapshot", "mode": "ai" }
// 返回:<button ref="12">提交</button>
// 2. 用 ref 点击
{ "tool": "browser", "action": "click", "ref": "12" }
多配置文件:隔离你的浏览器
OpenClaw 默认使用一个独立的浏览器配置(openclaw),不会污染你个人的 Chrome:
代码语言:javascript
AI代码解释
{
browser: {
enabled: true,
defaultProfile: "openclaw",
profiles: {
openclaw: {
cdpPort: 18800, // 独立端口
color: "#FF4500" // 橙色标识,一眼识别
},
work: {
cdpPort: 18801,
color: "#0066CC"
},
},
}
}
这个设计很贴心:你可以同时运行多个浏览器实例,一个用于测试,一个用于生产。
快照系统:AI 如何"看懂"网页
快照是 browser 工具的核心能力。有两种模式:
- AI 快照(默认):返回带数字引用的文本,如
ref="12" - 角色快照:返回基于角色的元素树,如
ref=e12
代码语言:javascript
AI代码解释
// AI 快照示例
{
"tool": "browser",
"action": "snapshot",
"mode": "ai"
}
// 返回结果(简化版)
/*
[1] <input ref="1" type="text" placeholder="搜索">
[2] <button ref="2">搜索</button>
[3] <div ref="3">热门推荐</div>
...
*/
快照的好处是:智能体能理解页面结构,而不是盲目点击。不过说实话,有些复杂页面(比如表格嵌套)的快照会很大,可能需要调整 depth 参数。
Exec 工具:命令执行的安全边界

Exec 安全机制
图5:Exec 工具的多层安全检查流程
exec 是另一个核心工具,让智能体能在你的电脑上执行命令。但这也带来了安全风险——如果 AI 随便执行 rm -rf / 怎么办?
OpenClaw 的解决方案是 Exec Approvals。
安全检查流程
当你让智能体执行命令时,系统会依次检查:
代码语言:javascript
AI代码解释
1. 工具策略(allow/deny)
↓
2. 执行目标(sandbox/gateway/node)
↓
3. 安全模式(deny/allowlist/full)
↓
4. 审批配置(ask: off/on-miss/always)
用白话解释:
- deny 模式:直接拒绝所有命令
- allowlist 模式:只有白名单里的命令能执行
- full 模式:完全信任(危险,慎用)
白名单配置
这是我推荐的配置方式:
代码语言:javascript
AI代码解释
{
defaults: {
security: "allowlist",
ask: "on-miss", // 不在白名单时询问
askFallback: "deny", // 无法询问时拒绝
},
agents: {
main: {
allowlist: [
{ pattern: "~/Projects/**/bin/rg" }, // 允许特定目录的 rg
{ pattern: "~/.local/bin/*" }, // 允许 ~/.local/bin 下所有命令
],
},
},
}
实际效果:智能体想执行 npm install,不在白名单,系统会弹窗问我是否允许。我说"这次允许,以后记住",它就会被加入临时白名单。
沙箱隔离
对于高风险场景,可以启用 Docker 沙箱:
代码语言:javascript
AI代码解释
{
agents: {
defaults: {
sandbox: {
enabled: true, // 启用沙箱
image: "node:20", // 使用 Node 20 镜像
workdir: "/workspace", // 工作目录
},
},
},
}
沙箱模式下,命令在容器里执行,不会影响宿主机。缺点是启动稍慢,但对安全要求高的场景很有必要。
安全机制:多层防护体系
除了 Exec Approvals,OpenClaw 还有几层安全机制:
1. 工具策略(Tool Policy)
三级配置:全局 → 智能体 → 提供商
代码语言:javascript
AI代码解释
{
tools: {
profile: "coding",
deny: ["group:runtime"], // 全局禁止运行时工具
byProvider: {
"google-antigravity": {
profile: "minimal" // 特定模型用最小权限
},
},
},
}
2. 循环检测
防止智能体陷入无限工具调用:
代码语言:javascript
AI代码解释
{
tools: {
loopDetection: {
enabled: true,
warningThreshold: 10, // 10 次重复时警告
criticalThreshold: 20, // 20 次时阻止
},
},
}
说实话,这个功能我遇到过:智能体在尝试修复代码时,不断重复相同的编辑操作。循环检测帮我及时发现了这个问题。
3. 拒绝 PATH 覆盖
防止二进制劫持:
代码语言:javascript
AI代码解释
# 这些环境变量会被拒绝
export PATH=/malicious/path:$PATH
export LD_LIBRARY_PATH=/malicious/lib
与 Skills 系统的协作
Tools 提供能力,Skills 提供知识。两者配合才能让智能体真正"聪明"。
Skills 的作用
Skills 是 AgentSkills 兼容的 SKILL.md 文件,用于:
- 教会智能体使用工具:告诉它什么时候用
browser,什么时候用exec - 注入领域知识:比如"处理电商订单时,先检查库存"
- 配置环境变量:API 密钥、服务器地址等
代码语言:javascript
AI代码解释
# SKILL.md 示例
## 使用 browser 工具的正确方式
1. 先用 snapshot 获取元素引用
2. 用 ref 而不是坐标点击
3. 复杂操作前先截图确认
## 环境变量
- OPENAI_API_KEY: 用于 web_search
- GITHUB_TOKEN: 用于仓库操作
ClawHub:技能市场
OpenClaw 有个公共技能市场 ClawHub,类似 npm 之于 Node.js。
你可以直接使用社区贡献的 Skills:
代码语言:javascript
AI代码解释
# 安装一个 skill
openclaw skill install github-pr-reviewer
# 查看已安装的 skills
openclaw skill list
扩展性:插件和自定义工具
插件系统
插件可以注册额外的工具和 CLI 命令:
代码语言:javascript
AI代码解释
// openclaw.plugin.json
{
name: "my-custom-tools",
tools: [
{
name: "slack_notify",
description: "发送 Slack 通知",
params: {
channel: "string",
message: "string"
}
}
]
}
自定义工具组
除了内置的 group:*,你也可以定义自己的工具组:
代码语言:javascript
AI代码解释
{
tools: {
groups: {
"custom:devops": ["exec", "web_fetch", "message"]
}
}
}
最佳实践
用了一段时间后,我总结了几个建议:
1. 最小权限原则
不要给智能体超过必要的权限:
代码语言:javascript
AI代码解释
// 代码助手配置
{
tools: {
profile: "coding",
deny: ["gateway", "cron", "group:nodes"] // 禁止网关和设备控制
}
}
2. 使用白名单而非黑名单
代码语言:javascript
AI代码解释
// 推荐:明确允许什么
{
exec: {
security: "allowlist",
allowlist: ["npm", "git", "rg"]
}
}
// 不推荐:猜测可能危险的命令
{
exec: {
security: "full",
deny: ["rm", "sudo", "chmod"] // 永远猜不全
}
}
3. 开启审批模式
代码语言:javascript
AI代码解释
{
defaults: {
ask: "on-miss", // 不在白名单时询问
}
}
这会稍微降低效率,但能避免意外。
4. 浏览器操作的最佳实践
代码语言:javascript
AI代码解释
// 1. 总是先获取快照
await browser.snapshot({ mode: "ai" })
// 2. 用 ref 而非坐标
await browser.click({ ref: "12" })
// 3. 关键操作后截图确认
await browser.screenshot()
5. 复杂任务拆分
如果一个任务需要多个工具配合,考虑用子智能体:
代码语言:javascript
AI代码解释
{
"tool": "sessions_spawn",
"prompt": "帮我分析这个网页的内容,总结要点",
"context": {
"url": "https://example.com/article"
}
}
子智能体有独立的工具权限,不会相互干扰。
总结
OpenClaw 的 Tools 体系给我最大的感受是:它在安全性和易用性之间找到了平衡。
从技术角度:
- 类型化设计:避免了 shell 注入等安全问题
- 多层安全机制:exec approvals、沙箱、工具策略
- 灵活配置:三级权限、预设 profile、自定义工具组
- 生态友好:Skills 系统、ClawHub 市场
从使用角度:
- 我可以放心让 AI 操作浏览器,因为它是隔离环境
- 我可以控制它能执行什么命令,不会担心
rm -rf - 我可以随时查看审计日志,知道它做了什么
更多推荐




所有评论(0)