clawhub: 前缀。
要求
- 使用 Node 22.19 或更高版本,以及
npm或pnpm之类的包管理器。 - 熟悉 TypeScript ESM 模块。
- 对于仓库内打包插件开发,请克隆仓库并运行
pnpm install。 源码检出的插件开发仅支持 pnpm,因为 OpenClaw 会从extensions/*工作区包加载打包后的插件。
选择插件形态
Channel plugin
将 OpenClaw 连接到消息平台。
Provider plugin
添加模型、媒体、搜索、获取、语音或实时提供方。
CLI backend plugin
通过 OpenClaw 模型回退运行本地 AI CLI。
Tool plugin
注册代理工具。
快速开始
通过注册一个必需的代理工具来构建一个最小工具插件。这是 最短且有用的插件形态,并展示了包、清单、入口点和 本地验证。测试运行时
对于已安装或外部插件,请检查加载后的运行时:如果插件注册了 CLI 命令,也请运行该命令。例如,
一个演示命令应具有类似
openclaw demo-plugin ping 的执行证明。对于本仓库中的打包插件,OpenClaw 会从 extensions/* 工作区中发现源码检出的
插件包。运行最接近的定向测试:注册工具
工具可以是必需的或可选的。启用插件时,必需工具始终可用。 可选工具需要用户选择启用。api.registerTool(...) 注册的每个工具也必须在插件清单中声明:
tools.allow 进行选择启用:
parameters 的工具描述符,也会以同样方式被跳过并报告。
已注册的工具是模型在策略和允许列表检查通过后可以调用的类型化函数。
工具工厂会接收一个运行时提供的上下文对象。当工具需要记录、显示或根据当前轮次的活动模型进行适配时,请使用 ctx.activeModel。
该对象可能包含 provider、modelId 和 modelRef。
请将其视为信息性的运行时元数据,而不是对本地操作员、已安装插件代码或被修改过的 OpenClaw 运行时的安全边界。
敏感的本地工具仍应要求明确的插件或操作员选择启用,并在缺少活动模型元数据或其不合适时安全失败。
清单负责声明所有权和发现;执行时仍会调用实际已注册的工具实现。
请将 toolMetadata.<tool>.optional: true 与 api.registerTool(..., { optional: true })
保持一致,这样 OpenClaw 才能在该工具未被显式允许列表收录前避免加载该插件运行时。
导入约定
从聚焦的 SDK 子路径导入:api.ts 和
runtime-api.ts。不要通过 SDK 路径导入你自己的插件。特定于 provider 的辅助函数应保留在 provider 包中,除非该边界确实是通用的。
自定义 Gateway RPC 方法是高级入口点。请为其保留插件专用前缀;像 config.*、
exec.approvals.*、operator.admin.*、wizard.* 和 update.* 这样的核心管理命名空间保持保留,
并解析到 operator.admin。openclaw/plugin-sdk/gateway-method-runtime
桥接仅保留给声明了 contracts.gatewayMethodDispatch: ["authenticated-request"]
的插件 HTTP 路由。
完整导入映射请参见 Plugin SDK 概览。
提交前检查清单
package.json 具有正确的
openclaw 元数据openclaw.plugin.json 清单文件存在且有效
入口点使用
defineChannelPluginEntry 或 definePluginEntry所有导入都使用聚焦的
plugin-sdk/<subpath> 路径内部导入使用本地模块,而不是 SDK 自导入
测试通过(
pnpm test -- <bundled-plugin-root>/my-plugin/)pnpm check 通过(适用于仓库内插件)测试 beta 版本
- 关注 openclaw/openclaw 上的 GitHub 发布标签,并通过
Watch>Releases订阅。Beta 标签看起来像v2026.3.N-beta.1。你也可以为 OpenClaw 官方 X 账号 @openclaw 启用通知,以便及时获知发布公告。 - 一旦出现 beta 标签,立即用它测试你的插件。正式版发布前的窗口通常只有几个小时。
- 测试完成后,在你插件的
plugin-forumDiscord 主题中回复all good,或说明出现了什么问题。如果你还没有主题,请创建一个。 - 如果存在问题,请创建或更新一个标题为
Beta blocker: <plugin-name> - <summary>的 issue,并添加beta-blocker标签。将该 issue 链接放到你的主题中。 - 针对
main创建一个标题为fix(<plugin-id>): beta blocker - <summary>的 PR,并在 PR 和你的 Discord 主题中都附上 issue 链接。贡献者不能给 PR 添加标签,因此标题是维护者和自动化识别 PR 侧信号的方式。有 PR 的 blocker 会被合并;没有 PR 的 blocker 仍然可能随版本发布。维护者会在 beta 测试期间关注这些主题。 - 沉默即表示通过。如果你错过了这个窗口,你的修复很可能会在下一个周期才落地。
后续步骤
Channel 插件
构建消息通道插件
Provider 插件
构建模型 provider 插件
CLI 后端插件
注册本地 AI CLI 后端
SDK 概览
导入映射和注册 API 参考
运行时辅助工具
通过 api.runtime 使用 TTS、搜索和子代理
测试
测试工具和模式
插件清单
完整的清单 schema 参考