OpenClaw 101|06|Tools Skills Plugins

OpenClaw 的能力系统分三层:Tools 负责行动,Skills 负责方法,Plugins 负责运行时扩展。混在一起就会失去边界。

OpenClaw 101|06|Tools Skills Plugins

OpenClaw 101 是一组面向 Agent Engineering 的系统拆解文章。它不把 OpenClaw 当成单一聊天产品,而是把它当作一个长期运行的 Personal Agent OS 来观察。

这一篇讲 Tools Skills Plugins。Agent 能力不是“把所有函数都丢给模型”。一个成熟系统需要区分动作、方法和运行时扩展。

Tools Skills Plugins diagram

读完本文,你应该能回答

  • 什么时候应该写 tool,什么时候写 skill,什么时候写 plugin?
  • 工具暴露面为什么影响安全、成本和模型行为?
  • skills 为什么是方法包装,而不是普通文档?
  • plugins 如何扩展 runtime 而不把 core 写死?

本篇在系列中的位置

能力系统篇,区分行动、方法和运行时扩展。OpenClaw 101 的主线是:先看控制面,再看执行面和状态边界,再进入上下文、能力系统、长期记忆、自动化、真实设备、扩展和 QA。下一篇进入 Channels and Messages,看能力如何通过真实消息渠道暴露给用户。

贯穿案例

后文会反复使用同一个任务来落地抽象机制:用户在手机上对 OpenClaw 说:“帮我看一下这个 repo 的测试为什么失败;如果需要跑命令就先做,修好后在聊天里提醒我。”

在本篇中,重点观察这个任务在 Tools Skills Plugins 这一层会遇到的边界:谁接收它,谁拥有状态,谁能触发工具,谁记录结果,以及失败后从哪里恢复。

能力边界表

环节 读者应该抓住的问题
Tool 执行一个受控动作,例如读文件、发消息、调用外部 API
Skill 把一类任务的方法、约束和坑封装给 Agent
Plugin 注册运行时能力、命令、工具或渠道集成
Policy 决定谁能用、何时能用、在哪个 channel 能用
Runtime 实际执行、记录事件、返回结果

核心判断

Tool 是可调用动作;Skill 是工作方法;Plugin 是能力提供者和生命周期边界。

如果只看表面,很多 Agent 框架都像是“模型 + 工具 + UI”。但真正决定系统稳定性的,是这些边界如何被拆开:谁拥有状态,谁能触发副作用,谁负责恢复,谁暴露观察面,谁承担长期维护成本。

在 OpenClaw 里,Tools Skills Plugins 不是一个孤立模块,而是 Gateway、Session、Context、Tools、Plugins、Memory 之间的连接点。理解这个连接点,比记住某个命令或配置项更重要。

运行路径

一条真实消息进入系统后,大致会经过这些步骤:

  • 内置工具提供文件、命令、浏览器、web、消息、session、media 等动作。
  • Tool policy 根据 profile、allow/deny、provider restriction、sandbox、channel permission 裁剪工具。
  • Skills 以轻量目录暴露给模型,按需读取完整 SKILL.md。
  • Plugin manifest 提供 discovery、config schema、capability ownership 和 activation hints。
  • Runtime loading 只在真正执行能力时发生。
  • Plugin hooks 可以介入 model resolve、prompt build、tool call、message sending、session lifecycle。

这些步骤看起来很多,但它们解决的是同一个问题:让 Agent 的行为从“模型临场发挥”变成“系统可控制、可观察、可恢复的运行过程”。

可迁移伪实现:Tools Skills Plugins

下面的伪代码是机制抽象,不对应 OpenClaw 的真实 API 或文件结构。

if (need === "act now") exposeTool(descriptor)
if (need === "teach workflow") loadSkillMetadata(skill)
if (need === "new runtime capability") installPlugin(manifest)

const visibleTools = policy.filter({
  profile, provider, sandbox, channel, pluginState,
})

这段伪代码的重点不是函数名,而是边界:输入先被标准化,状态通过明确的 store 或 lane 管理,副作用通过 runtime 或 policy 执行,结果再回到 transcript、event stream 或 delivery target。

设计取舍

  • 把 workflow 写成 tool 会让执行和指导混杂;写成 skill 更便宜也更透明。
  • 把 provider/channel 私有逻辑写进 core 会破坏扩展性。
  • manifest-first 牺牲一些动态灵活性,换来冷启动和诊断稳定性。

这些取舍解释了 OpenClaw 为什么不像一个最小 demo。最小 demo 追求路径短,长期系统追求边界清晰。路径短会让第一个 demo 很快跑起来;边界清晰才会让系统在多渠道、长会话、多人入口、插件扩展和自动化场景下不崩。

评估清单

评估任何 Agent 框架的 Tools Skills Plugins 设计,可以看这几个问题:

  • 这个层级是否有明确 owner,还是散落在多个客户端或插件里?
  • 它是否把状态、权限、运行时副作用和展示逻辑分开?
  • 它是否能被观测、被调试、被回放?
  • 它失败时是否有恢复路径,而不是只给用户一个模型错误?
  • 它是否避免把 provider/channel/tool 的私有细节写死进 core?

如果这些问题没有答案,系统一旦从单用户 demo 走向真实使用,很快就会在上下文污染、重复副作用、权限失控、长任务丢失和调试困难中付出代价。

下一篇

下一篇继续拆 Channels and Messages。OpenClaw 101 的主线会继续沿着 Personal Agent OS 的边界往下走:从运行时,到状态,到能力系统,再到安全、扩展和 QA。

References

  • Tools overview
  • Skills
  • Plugin internals
  • Gateway configuration