什么是工具
在 OpenClaw 中,工具(Tools)是智能体与外部世界交互的"手"。智能体本身只能思考和生成文本,而工具让它能够执行命令、读写文件、浏览网页、发送消息等实际操作。 你可以把工具理解为智能体的能力扩展——没有工具的智能体只是一个聊天机器人,有了工具的智能体才是真正的 AI 助手。内置工具分类
OpenClaw 内置了丰富的工具,按功能可以分为以下几大类: | 工具 | 功能 | 说明 | |------|------|------| |exec | 执行 Shell 命令 | 运行终端命令,如 ls、git、npm 等 |
| browser | 浏览器控制 | 控制 Chromium 浏览器,导航、点击、截图 |
| web_search | 网页搜索 | 搜索互联网内容 |
| read | 读取文件 | 读取本地文件内容 |
| write | 写入文件 | 创建或修改本地文件 |
| image | 图像处理 | 生成、分析和处理图像 |
| message | 发送消息 | 主动向用户发送消息 |
| cron | 定时任务 | 创建和管理定时任务 |
| gateway | Gateway 管理 | 查看和管理 Gateway 状态 |
| memory_search | 记忆搜索 | 语义搜索长期记忆 |
| memory_get | 记忆读取 | 读取记忆文件内容 |
| process | 进程管理 | 管理后台运行的进程 |
| code_execution | 代码执行 | 在沙箱中运行 Python 代码 |
每个工具都有明确的职责边界,智能体会根据用户的请求自动选择合适的工具来完成任务。
工具、技能与插件的三层关系
OpenClaw 的能力扩展体系分为三个层级,理解它们的关系很重要: ``
插件(Plugins)
└── 提供底层能力(渠道连接、模型接入、语音通话等)
└── 需要重启 Gateway 生效
技能(Skills)
└── 提供高层指令(Markdown 文件,指导智能体如何完成特定任务)
└── 热加载,无需重启
工具(Tools)
└── 提供原子操作(执行命令、读写文件、浏览网页等)
└── 内置于 OpenClaw,开箱即用
`
简单来说:
- 工具是最底层的原子能力,比如"执行一条命令"、"读取一个文件"
- 技能是基于工具的高层指令,比如"帮我写一个 React 组件"——技能文件会告诉智能体该用哪些工具、按什么步骤完成
- 插件是系统级扩展,比如"连接 WhatsApp"、"接入语音通话"——插件可以引入全新的工具和能力
工具权限控制
默认情况下,OpenClaw 会根据安全策略限制某些工具的使用。你可以通过 tools.allow 和 tools.deny 来精确控制智能体可以使用哪些工具。
允许列表(allow)
明确允许智能体使用的工具:
`json5
{
"tools": {
"allow": ["read", "write", "exec", "browser"]
}
}
`
设置 allow 后,智能体只能使用列表中的工具,其他工具全部禁用。
拒绝列表(deny)
明确禁止智能体使用的工具:
`json5
{
"tools": {
"deny": ["exec", "browser"]
}
}
`
设置 deny 后,智能体可以使用除列表之外的所有工具。
优先级规则
- 如果同时设置了 allow 和 deny,deny 优先
- 如果只设置了 allow,未列出的工具全部禁用
- 如果只设置了 deny,未列出的工具全部可用
- 如果都不设置,使用默认的工具配置文件(tools.profile)
工具配置文件(tools.profile)
tools.profile 是一种快捷方式,可以一键设置工具权限的预设方案:
| Profile | 包含的工具 | 适用场景 |
|---------|-----------|----------|
| full | 所有工具 | 完全信任的环境,最大能力 |
| coding | read、write、exec、browser、web_search | 编程开发场景 |
| messaging | message、web_search、memory_search | 纯聊天场景,不操作文件 |
| minimal | read、web_search | 最小权限,只读 + 搜索 |
在配置文件中设置:
`json5
{
"tools": {
"profile": "coding"
}
}
`
你也可以在 profile 基础上用 allow / deny 做微调:
`json5
{
"tools": {
"profile": "coding",
"deny": ["browser"] // 在 coding 基础上禁用浏览器
}
}
`
常用工具分组
OpenClaw 提供了工具分组(group)的概念,方便你按类别批量管理工具权限:
| 分组 | 包含的工具 | 说明 |
|------|-----------|------|
| group:fs | read、write | 文件系统操作 |
| group:web | browser、web_search | 网络相关 |
| group:runtime | exec、code_execution、process | 代码执行相关 |
| group:ui | message、image | 用户界面交互 |
| group:sessions | memory_search、memory_get | 会话和记忆 |
在权限配置中可以直接使用分组名:
`json5
{
"tools": {
"allow": ["group:fs", "group:web"]
// 等同于 allow: ["read", "write", "browser", "web_search"]
}
}
`
分组让权限管理更简洁,特别是当你需要按场景快速切换工具集时。
浏览器工具
浏览器工具(browser)让智能体能够控制一个真实的 Chromium 浏览器实例,执行网页操作。
基本能力
- 导航:打开指定 URL
- 点击:点击页面元素
- 输入:在表单中填写内容
- 截图:对当前页面截图并分析
- 提取:获取页面文本内容
启用浏览器工具
浏览器工具默认可能未启用,需要在配置中添加:
`json5
{
"tools": {
"allow": ["browser"]
}
}
`
或者使用 full 或 coding profile,它们默认包含浏览器工具。
使用场景
浏览器工具适合以下场景:
- 网页信息抓取:让智能体打开网页,提取你需要的信息
- 表单自动填写:自动登录、提交表单
- 页面截图分析:截取页面截图,让智能体分析页面内容或布局
- Web 应用测试:自动化测试 Web 应用的功能
登录保持
浏览器工具支持登录状态保持(browser-login)。你可以先手动登录某个网站,浏览器会保存 Cookie 和会话信息,之后智能体就可以在已登录状态下操作该网站。
`bash
打开浏览器进行手动登录
openclaw browser-login
`
登录完成后关闭浏览器窗口,登录状态会被保存。下次智能体使用浏览器工具访问同一网站时,会自动使用已保存的登录状态。
注意事项
- 浏览器工具需要系统安装了 Chromium 或 Chrome
- Linux 服务器环境可能需要安装额外的依赖(apt install chromium-browser)
- WSL2 环境下需要配置远程 CDP(Chrome DevTools Protocol)连接到 Windows 上的 Chrome
代码执行工具
OpenClaw 提供了两种代码执行方式,适用于不同场景。
exec 工具
exec 是最常用的命令执行工具,可以运行任意 Shell 命令:
`
用户:帮我查看当前目录下的文件
智能体:(使用 exec 工具执行 ls -la)
`
exec 工具的特点:
- 直接在宿主机上执行命令
- 可以访问所有系统资源
- 适合日常开发和系统管理任务
code_execution 工具
code_execution 是一个沙箱化的 Python 执行环境,适合数据分析和计算任务:
`
用户:帮我分析这份 CSV 数据
智能体:(使用 code_execution 工具运行 Python 脚本)
`
code_execution 的特点:
- 在隔离的沙箱中运行
- 预装了常用的数据分析库(pandas、numpy、matplotlib 等)
- 适合数据处理、图表生成、数学计算
执行审批机制
为了安全,OpenClaw 支持命令执行审批(exec-approvals)。你可以配置哪些命令需要用户确认才能执行:
`json5
{
"tools": {
"exec": {
"approvals": {
"mode": "allow", // allow: 白名单模式, deny: 黑名单模式
"commands": [
"ls", "cat", "echo", "git status", "git log"
]
}
}
}
}
`
在 allow 模式下,只有白名单中的命令可以直接执行,其他命令需要用户确认。这在生产环境中特别有用,可以防止智能体误执行危险命令。
命令白名单配置
推荐的安全配置是使用白名单模式,只允许安全的只读命令自动执行:
`json5
{
"tools": {
"exec": {
"approvals": {
"mode": "allow",
"commands": [
// 文件查看
"ls", "cat", "head", "tail", "wc",
// 版本控制
"git status", "git log", "git diff",
// 系统信息
"whoami", "pwd", "date", "uname"
]
}
}
}
}
`
其他命令(如 rm、mv、npm install 等)执行前会弹出确认提示,你可以选择允许或拒绝。
工具使用最佳实践
1. 最小权限原则
只给智能体它需要的工具权限。如果你只需要智能体帮你写代码,用 coding profile 就够了,不需要给 full 权限。
2. 生产环境用审批
在生产服务器上运行智能体时,一定要配置 exec 审批机制,防止误操作。
3. 善用工具分组
用 group:fs、group:web 等分组来管理权限,比逐个列出工具名更清晰、更不容易遗漏。
4. 按智能体配置
如果你运行多个智能体(多智能体模式),可以为每个智能体配置不同的工具权限:
`json5
{
"agents": {
"coder": {
"tools": { "profile": "coding" }
},
"assistant": {
"tools": { "profile": "messaging" }
}
}
}
``
这样编程智能体有完整的开发工具,而聊天助手只有消息和搜索能力。