工具是 Agent 的手和眼

OpenClaw Agent 生成文字只是第一步,真正让它"做事"的是工具(Tools)。工具是 Agent 调用外部系统的接口——读写文件、运行命令、控制浏览器、搜索网页、发送消息,都通过工具完成。

理解 OpenClaw 的工具系统,是掌握 Agent 自动化能力的关键。

三层架构:工具 / Skills / 插件

OpenClaw 的工具体系分为三个相互配合的层次:

工具(Tool)= Agent 具体能调用的函数
Skills = 什么时候、怎么用这些工具的指导手册
插件(Plugin)= 打包工具和 Skills 的分发单元

工具层:Agent 直接调用的函数

工具是 Agent API 层面的函数定义。当 Agent 需要"做某事"时,LLM 会生成一个工具调用请求,OpenClaw 执行对应函数后把结果返回给 Agent。

工具的定义包含:

  • 名称(如 execbrowserread
  • 参数 schema(参数类型和约束)
  • 执行函数(实际运行的代码)
  • 权限要求(是否需要 elevated 权限)

Skills 层:教 Agent 怎么用工具

Skill 是一份 Markdown 指导文件(SKILL.md),在 Agent 启动时被注入到 system prompt 里,告诉它某个工具在什么场景下如何使用、有哪些坑要避开。

举例:一个 xianyu-automation Skill 会告诉 Agent:

  • 闲鱼发布页的 CSS selector 是什么
  • 图片上传的正确流程(不能用 setInputFiles,要用 upload)
  • 遇到验证弹窗怎么处理

Skill 存放在:

  • ~/.openclaw/workspace/skills/(用户自定义)
  • 插件包内(第三方 Skill)
  • OpenClaw 内置 Skill

插件层:工具和 Skills 的打包单元

插件是一个 npm 包,可以注册任意组合的:频道、模型提供商、工具、Skills、语音、图像生成能力。

OpenClaw 自身是一个插件体系,核心功能通过内置插件提供,扩展功能由社区插件提供。

内置工具详解

OpenClaw 开箱即提供以下内置工具:

文件操作工具

工具 功能
read 读取文件内容,支持大文件分片
write 覆盖写入文件
edit 精确替换文件中一段文本
apply_patch 应用多段补丁

典型使用场景:

  • 读取配置文件、分析日志
  • 写入脚本、生成文章
  • 批量修改代码

执行工具

工具 功能
exec 运行 shell 命令,支持 PTY
process 管理后台进程
# 运行命令并获取输出
exec(command="ls -la ~/Desktop", timeout=30)

浏览器工具

工具 功能
browser 控制 Chromium 浏览器(导航、点击、截图)
canvas 控制 Node Canvas(展示、截图)

这是闲鱼自动化的核心工具。典型流程:

browser.navigate("https://www.xianyu.com")
browser.click("发布按钮的 selector")
browser.snapshot()  # 获取当前页面元素状态
browser.type("textarea", "商品描述文字")
browser.upload({ paths: ["/tmp/product.jpg"] })

网络工具

工具 功能
web_search 搜索网页获取信息
x_search 搜索 X(Twitter)帖子
web_fetch 抓取页面内容为 Markdown

消息工具

工具 功能
message 跨所有已配置频道发送消息
agent-send 向指定 Agent 发送消息

会话管理工具

工具 功能
sessions_spawn 创建新的 SubAgent 会话
sessions_send 向指定会话发送消息
sessions_list 列出所有活跃会话
agents_list 列出所有可用的 SubAgent

其他工具

工具 功能
image 分析图片内容
image_generate 生成或编辑图片
cron 管理定时任务
gateway 重启 Gateway、查看状态
nodes 发现和定位配对设备

工具权限控制

工具默认按配置的 tools.allowtools.deny 列表进行过滤。常见的权限配置:

完全关闭 exec(最安全)

{
  tools: {
    allow: ["read", "write", "web_search", "web_fetch", "browser"]
    deny: ["exec", "process"]
  }
}

只允许只读操作

{
  tools: {
    allow: ["read", "web_search", "web_fetch"]
    deny: ["write", "exec", "browser"]
  }
}

只允许浏览器自动化

{
  tools: {
    allow: ["browser", "read", "write"]
    deny: ["exec"]
  }
}

插件工具生态

OpenClaw 社区有大量插件扩展工具能力:

polymarket 插件

交易预测市场的专业工具,可以查询市场数据、下单、管理仓位。

openclaw skill install polymarket

tavily-search 插件

AI 优化的搜索引擎,比普通搜索更精准地获取高质量信息源。

浏览器相关插件

browser-useagent-browser:提供更高级的浏览器自动化能力,支持复杂表单填写、验证码处理、多标签页管理。

如何编写自己的工具

OpenClaw 支持通过插件注册自定义工具。以一个简单工具为例:

// my-plugin/tools/hello.js
export const helloTool = {
  name: "hello",
  description: "向指定用户打招呼",
  parameters: {
    properties: {
      name: { type: "string", description: "用户名" }
    },
    required: ["name"]
  },
  async run({ name }) {
    return `你好,${name}!我是 OpenClaw Agent。`;
  }
};

注册到插件的 index.js

import { helloTool } from "./tools/hello.js";
export default {
  tools: [helloTool]
};

安装插件后,Agent 就能在对话中调用 hello 工具了。

工具与 Skills 的配合

工具决定了 Agent"能做什么",Skills 决定了 Agent"什么时候做、怎么做"。

举一个完整的例子:闲鱼自动化的 Skill 会告诉 Agent:

当用户要求"帮我上架商品"时:
1. 用 browser 导航到发布页面
2. 用 snapshot 获取"添加图片"按钮的 selector
3. 用 browser.upload 上传图片(不能用 setInputFiles)
4. 用 type 逐字输入商品描述(slowly=true 防检测)
5. 用 click 选择成色分类
6. 用 snapshot 确认商品已发布

没有 Skill,Agent 不知道闲鱼的特殊上传流程;有了 Skill,Agent 每次都能正确执行。

总结

OpenClaw 的工具系统三层配合:

  • 工具是执行器:提供真实世界交互能力
  • Skills是教练:告诉 Agent 在什么场景用什么工具、怎么用
  • 插件是生态:社区贡献工具和 Skills,扩展系统能力

掌握这套体系,你就能把 OpenClaw 打造成任何场景的自动化助手——从网页操作到文件处理,从消息发送到定时监控,工具系统提供了无限扩展的可能性。