Technical Guide
15. Plugins:OpenClaw 的扩展机制
理解 OpenClaw 插件系统:extensions、plugin-sdk、资源包和内置能力如何解耦。
这篇解决什么问题
OpenClaw 不把所有能力都塞进 core。
它有 extensions/、src/plugins/、src/plugin-sdk/,还在 package manifest 里支持声明 OpenClaw resources。
这说明 OpenClaw 的扩展机制是一等公民。
先看哪些目录
extensions/
src/plugins/
src/plugin-sdk/
src/plugin-state/
src/plugins/runtime/
package.json 的 files 里也能看到很多官方 extension,例如 discord、feishu、matrix、slack、whatsapp、qwen、deepseek、perplexity 等。
manifest 里能声明什么
官方 agent runtime architecture 文档给了资源包示例:
{
"openclaw": {
"extensions": ["extensions/index.ts"],
"skills": ["skills/*.md"],
"prompts": ["prompts/*.md"],
"themes": ["themes/*.json"]
}
}
也就是说,一个包不只可以提供代码扩展,还可以提供 skills、prompts、themes。
插件解决什么问题
插件适合:
新增 channel
新增 provider
新增工具能力
新增资源包
把某个外部系统接入 OpenClaw
把能力分发给其他用户
如果只是本地的一次性流程,写 Skill 可能更合适。
插件和 core 的边界
官方架构文档强调:插件使用 documented openclaw/plugin-sdk/* entrypoints,不应该 import src/** internals。
这点很重要。
src/** 是内部实现,可能变化。
plugin-sdk 才是插件稳定契约。
如果你要写插件
先问:
这个能力是否要复用/分发?
是否需要代码执行而不只是流程说明?
是否要接平台/API/provider?
是否需要保存插件状态?
是否应该通过 plugin-sdk 暴露?
如果答案是是,再走插件。
实践:插件边界核对
从 extensions/ 任选一个已有扩展,用 3—5 分钟查看它的 package manifest 和导入入口:确认它声明了哪些 OpenClaw resources,并检查代码是否通过 openclaw/plugin-sdk/* 使用稳定契约。只读检查,不改扩展。
完成标准
- 找到一个真实 extension;
- 能说出它提供 channel、provider、tool 或 resource 中的哪类能力;
- 找到其 manifest 或入口;
- 未把直接导入
src/**当作推荐做法。
多走一步
将这个扩展与一个纯 Skill 对比,写下一条“为什么这里需要代码”的理由。
下一篇看什么
下一篇看 MCP。插件是 OpenClaw 自己的扩展体系,MCP 是外部工具协议。