构建插件
插件通过新功能扩展 OpenClaw:频道、模型提供商、语音、图像生成、网络搜索、代理工具或其任意组合。 你无需将插件添加到 OpenClaw 仓库中。发布到 ClawHub 或 npm,用户即可使用openclaw plugins install <package-name> 安装。OpenClaw 会首先尝试 ClawHub,并自动回退到 npm。
先决条件
- Node >= 22 和一个包管理器(npm 或 pnpm)
- 熟悉 TypeScript (ESM)
- 对于仓库内插件:已克隆仓库并完成
pnpm install
哪种类型的插件?
Channel plugin
将 OpenClaw 连接到消息平台(Discord、IRC 等)
Provider plugin
添加模型提供商(LLM、代理或自定义端点)
Tool / hook plugin
注册代理工具、事件钩子或服务 —— 继续阅读下方内容
快速开始:工具插件
本演练将创建一个注册代理工具的最小化插件。频道和提供商插件有上方链接的专门指南。Create the package and manifest
测试并发布
插件功能
单个插件可以通过api 对象注册任意数量的功能:
| 功能 | 注册方法 | 详细指南 |
|---|---|---|
| 文本推理 (LLM) | api.registerProvider(...) | 提供商插件 |
| 渠道 / 消息传递 | api.registerChannel(...) | 渠道插件 |
| 语音 (TTS/STT) | api.registerSpeechProvider(...) | 提供商插件 |
| 媒体理解 | api.registerMediaUnderstandingProvider(...) | 提供商插件 |
| 图像生成 | api.registerImageGenerationProvider(...) | 提供商插件 |
| 网络搜索 | api.registerWebSearchProvider(...) | 提供商插件 |
| 代理工具 | api.registerTool(...) | 下方 |
| 自定义命令 | api.registerCommand(...) | 入口点 |
| 事件钩子 | api.registerHook(...) | 入口点 |
| HTTP 路由 | api.registerHttpRoute(...) | 内部原理 |
| CLI 子命令 | api.registerCli(...) | 入口点 |
before_tool_call:{ block: true }是终止的,并停止低优先级的处理程序。before_tool_call:{ block: false }被视为未作决定。message_sending:{ cancel: true }是终止的,并停止低优先级的处理程序。message_sending{ cancel: false }被视为未作决定。
注册代理工具
工具是 LLM 可以调用的类型化函数。它们可以是必需的(始终可用)或可选的(用户选择加入):- 工具名称不得与核心工具冲突(冲突将被跳过)
- 对于具有副作用或额外二进制要求的工具,请使用
optional: true - 用户可以通过将插件 ID 添加到
tools.allow来启用插件中的所有工具
导入约定
始终从特定的openclaw/plugin-sdk/<subpath> 路径导入:
api.ts、runtime-api.ts)进行内部导入——切勿通过其 SDK 路径导入您自己的插件。
提交前检查清单
package. 具有正确的
openclaw 元数据openclaw.plugin. 清单存在且有效
入口点使用
defineChannelPluginEntry 或 definePluginEntry所有导入都使用特定的
plugin-sdk/<subpath> 路径内部导入使用本地模块,而不是 SDK 自导入
测试通过 (
pnpm test -- extensions/my-plugin/)pnpm check 通过(仓库内插件)后续步骤
渠道插件
构建消息渠道插件
Provider Plugins
构建模型提供商插件
SDK Overview
导入映射和注册API参考
Runtime Helpers
通过 api.runtime 进行 TTS、搜索、子代理
Testing
测试工具和模式
Plugin Manifest
完整清单架构参考
本页面源自 openclaw/openclaw,由 BeaversLab 翻译,遵循 MIT 协议 发布。