Skip to content
广告 · 本站推荐广告

插件系统

OpenClaw 插件是 TypeScript 模块,用于扩展核心功能,包括命令、工具和 RPC 方法。插件在 Gateway 进程内运行,通过 jiti 加载。

命令

管理 Gateway 插件/扩展(进程内加载):

  • openclaw plugins list — 列出所有已安装的插件
  • openclaw plugins info <id> — 显示插件详细信息
  • openclaw plugins install <npm-spec> — 安装插件(仅支持 npm 包)
  • openclaw plugins enable <id> — 启用插件
  • openclaw plugins disable <id> — 禁用插件
  • openclaw plugins uninstall <id> — 卸载插件
  • openclaw plugins doctor — 诊断插件问题
  • openclaw plugins update — 更新已安装的插件

说明:

  • 捆绑插件随 OpenClaw 发布,但默认处于禁用状态。
  • 所有插件必须附带 openclaw.plugin.json 文件及内联 JSON Schema。
  • npm 规范仅限注册表;Git/URL/文件规范会被拒绝。
  • 使用 --link 可避免复制本地目录。
  • uninstall 会移除插件记录。对于活跃的内存插件,内存槽位会重置。
  • 更新仅适用于从 npm 安装的插件。

配置

插件在 plugins.entries 中配置,并通过 openclaw.plugin.json 中定义的 JSON Schema 进行验证。独占类别(槽位)如 memory 使用 plugins.slots

json5
{
  plugins: {
    entries: {
      "my-plugin": {
        enabled: true,
        config: {
          // 插件特定配置
        },
      },
    },
    slots: {
      memory: "my-memory-plugin",
    },
  },
}

说明:

  • 配置更改需要 Gateway 重启。
  • 插件配置在读写时通过 JSON Schema 验证,而非运行时。
  • 如果插件配置存在但插件被禁用,配置会保留并在 Doctor + 日志中显示警告

插件清单

每个插件必须插件根目录下附带一个 openclaw.plugin.json 文件。OpenClaw 使用此清单在不执行插件代码的情况下验证配置。缺失或无效的清单会被视为插件错误并阻止配置验证。

必需字段

json
{
  "id": "voice-call",
  "configSchema": {
    "type": "object",
    "additionalProperties": false,
    "properties": {}
  }
}

必需的键:

  • id(string):规范插件 ID。
  • configSchema(object):插件配置的 JSON Schema(内联)。

可选的键:

  • kind(string):插件类型(例如:"memory")。
  • channels(array):此插件注册的频道 ID(例如:["matrix"])。
  • providers(array):此插件注册的提供商 ID。
  • skills(array):要加载的技能目录(相对于插件根目录)。
  • name(string):插件的显示名称。
  • description(string):插件简短摘要。
  • uiHints(object):用于 UI 渲染的配置字段标签/占位符/敏感标志。
  • version(string):插件版本(信息性)。

JSON Schema 要求

  • 每个插件都必须附带 JSON Schema,即使它不接受任何配置。
  • 空 Schema 是可接受的(例如 { "type": "object", "additionalProperties": false })。
  • Schema 在配置读写时验证,而非运行时。

验证行为

  • 未知的 channels.** 键是错误,除非频道 ID 由插件清单声明。
  • plugins.entries.*plugins.allowplugins.denyplugins.slots.** 必须引用可发现的插件 ID。未知 ID 是错误
  • 如果插件已安装但清单或 Schema 损坏或缺失,验证失败且 Doctor 会报告插件错误。
  • 清单对所有插件都是必需的,包括本地文件系统加载。

开发

项目结构

插件必须包含 openclaw.plugin.json

API

插件导出一个函数或带有 register(api) 方法的对象。

能力

插件可以注册:

  • HTTP 路由
  • Gateway RPC 方法
  • CLI 命令
  • 代理工具(JSON Schema 函数,暴露给 LLM)
  • 后台服务

代理工具

OpenClaw 插件可以注册代理工具(JSON Schema 函数),暴露给 LLM。工具可以是必需的或可选的。

生命周期钩子

支持的生命周期钩子包括 before_prompt_buildbefore_model_resolve 等。

频道

插件可以定义新的消息频道,包含元数据和出站适配器。

安全

插件是受信任的代码。请仅安装你信任的插件。

  • 安装使用 npm install --ignore-scripts
  • 路径遍历和全局可写目录会被阻止。
  • 优先使用固定版本。
  • 将插件安装视为运行代码。
  • 如果你的插件依赖原生模块,请记录构建步骤和任何包管理器允许列表要求(例如 pnpm allow-build-scripts + pnpm rebuild)。

槽位系统

独占类别使用 plugins.slots。这确保同一时间只有一个插件占据特定的功能槽位(如内存)。

json5
{
  plugins: {
    slots: {
      memory: "my-memory-plugin",
    },
  },
}

相关文档

基于MIT协议开源 | 内容翻译自 官方文档,同步更新