ARTICLE · 1056850
做一个基于openclaw 的hello world插件
对任何系统级应用而言,插件是必不可少的模块。通过插件可以在第三方的协助下大大增强系统的可用性,这就像操作系统需要各种应用才能实现其最大功能,本节我们看看openclaw插件系统的设计原理。
对openclaw而言,首先我们要了解它是如何规定插件的定义和结构,我们以Browser这个插件分析一下openclaw插件的结构。插件在文件组织上分为三部分,分别为插件的“简历”,插件的“档案”和插件的“代码”。
插件的简历用来说明插件的基本信息,通常包括“我是谁”,“我在什么情况下执行”,“我具备什么能力”,“简历”通过json格式来体现(extensions/browser/openclaw.plugin.json),例如下面browser插件的简历内容如下:
{
"id": "browser",
enabledByDefault": true,
"activation": { "onStartup": true, "onConfigPaths": ["browser"] },
"contracts": { "tools": ["browser"] },
"commandAliases": [{ "name": "browser" }],
skills": ["./skills"],
"configSchema": { "type": "object", "additionalProperties": false, "properties": {} }
}
上面简历各个字段的作用如下: id:是插件的身份证 configSchema:用于说明配置信息的格式,上面字段的内容说明browser这个插件的配置信息以js object的格式进行组织 enabledByDefault:是否在用户没有明确说明的情况下启用 activation.onStartup:gateway进程启动时是否运行插件 activation.onConfigPaths:在系统配置中,有哪些字段设置上时启动插件 contracts.tools:插件提供哪些功能 commandAliases:插件提供哪些命令行命令 skills:插件附带哪些技能
接下来我们看看插件的“档案”(extensions/browser/openclaw.plugin.json),这里主要告知插件的代码入口文件所在位置:
"openclaw": { "extensions": ["index.ts"] }
上面内容告诉openclaw系统,要运行插件应该去哪里加载它的启动代码,上面内容说明要运行browser插件,那么就在当前目录下找到index.ts这个代码文件,然后加载并运行该文件的代码即可。
接下来我看看插件代码的内容(index.ts):
import { definePluginEntry } from"openclaw/plugin-sdk/plugin-entry";
import { browserPluginNodeHostCommands, browserPluginReload,
browserSecurityAuditCollectors, registerBrowserPlugin } from"./plugin-registration.js";
exportdefault definePluginEntry({
id: "browser",
name: "Browser",
description: "Default browser tool plugin",
reload: browserPluginReload,
nodeHostCommands: browserPluginNodeHostCommands securityAuditCollectors: [...browserSecurityAuditCollectors],
register: registerBrowserPlugin,
});
注意它不做任何事——没有顶层副作用,只导出一张"报到表"。真正的行为在 register 字段指向的函数里plugin-registration.ts:99):
exportfunctionregisterBrowserPlugin(api: OpenClawPluginApi) {
api.registerTool(...); // ① 往菜单登记一个工具(browser 控制)
api.registerCli(...); // ② 登记 CLI 命令(openclaw browser ...)
api.registerGatewayMethod(...); // ③ 登记一个 RPC 方法(browser.request)
api.registerService(...); // 登记一个后台服务(browser-control)
}
基于上面的内容,我们动手做一个hello world插件看看。首先插件目录都需要上面说明的三种文件,问题在于我们可以把插件目录放置在任何位置,不一定要放在Opencclaw的extension目录,只有我们在配置文件里告诉openclaw插件在哪里即可。
首先我们选定一个目录,然后创建“hello-world-plugin”文件夹,在该文件夹下面先创建插件的简历,于是在目录下创建文件openclaw.plugin.json,该文件对应内容如下:
{
"id": "hello-world",
"name": "Hello World",
"description": "教学示例插件:弹出 hello world 对话框",
"activation": { "onStartup": true },
"configSchema": { "type": "object", "additionalProperties": false }
}
id、`configSchema:必填,没商量; activation.onStartup: true:我们要它出现在 gateway 启动名单里 不写 contracts.tools我们不注册工具,写了就是撒谎(契约要求 registerTool 的名字必须能在 manifest 里对上); enabledByDefault 省略:config 源(load.paths)插件默认启用,不需要它
接着创建插件的“档案”,也就是package.json文件,对应内容如下:
{
"name": "-world-plugin",
"version": "0.0.1",
"private": true,
"type": "module",
"openclaw": { "extensions": ["./index.ts"] }
}
"type": "module"必须写(仓库是 ESM only);openclaw.extensions 指向入口。
最后创建插件的入口文件代码index.ts,内容如下:
import { spawn } from"node:child_process";
import { definePluginEntry } from"openclaw/plugin-sdk/plugin-entry";
functionshowHelloDialog(): void{
spawn(
"powershell.exe",
[
"-NoProfile",
"-Command",
"Add-Type -AssemblyName PresentationFramework; " +
"[System.Windows.MessageBox]::Show('Hello world!','OpenClaw')",
],
{ detached: true, stdio: "ignore" },
).unref();
}
exportdefault definePluginEntry({
id: "hello-world",
name: "Hello World",
description: "教学示例插件:弹出 hello world 对话框",
register(api) {
api.registerCli(
({ program }) => {
program
.command("hello")
.description("Pop a hello world dialog")
.action(() => {
console.log("hello world! 对话框已弹出");
showHelloDialog();
});
},
{
commands: ["hello"],
descriptors: [
{ name: "hello", description: "Pop a hello world dialog", hasSubcommands: false },
],
},
);
},
});
对于上面代码的逻辑我们先不深究,它的作用是在控制台显示“Hello world!”字符串,后续我们在深入插件代码的逻辑和框架。完成上面三个文件后,我们在openclaw.json(我本地目录为C:\Users\OseasyVM.openclaw) 的 plugins.load.path中加入我们上面插件文件夹所在路径:
"load": {
"paths": [
"C:/Users/OseasyVM/hello-world-plugin"
]
完成上面工作后,我们先在openclaw代码根目录下执行如下命令,查看一下当前插件都有哪些: node --import tsx src/entry.ts plugins list 上面命令执行后得到如下结果:
OpenClaw 2026.5.20 (bde07dd) — I've survived more breaking changes than your last three relationships.
Plugins (72/125 enabled)
Source roots:
stock: C:\Users\OseasyVM\Documents\openclaw\dist\extensions
┌──────────────┬──────────┬──────────┬──────────┬────────────────────────────────────────────────┬───────────┐
│ Name │ ID │ Format │ Status │ Source │ Version │
├──────────────┼──────────┼──────────┼──────────┼────────────────────────────────────────────────┼───────────┤
│ Hello World │ hello- │ openclaw │ enabled │ ~\hello-world-plugin\index.ts │ 0.0.1 │
│ │ world │ │ │ 教学示例插件:弹出 hello world 对话框 │ │
│ ACPX Runtime │ acpx │ openclaw │ enabled │ stock:acpx/index.js │ 2026.5.20 │
│ │ │ │ │ Embedded ACP runtime backend with plugin- │ │
│ │ │ │ │ owned session and transport management. │ │
│ Active │ active- │ openclaw │ disabled │ stock:active-memory/index.js │ │
│ Memory │ memory │ │ │ Runs a bounded blocking memory sub-agent │ │
│ │ │ │ │ before eligible conversational replies and │ │
│ │ │ │ │ injects relevant memory into prompt context. │ │
│ @openclaw/ │ admin- │ openclaw │ disabled │ stock:admin-http-rpc/index.js │ 2026.5.20 │
│ admin-http- │ http-rpc │ │ │ │ │
│ rpc │ │ │ │ │ │
│ @openclaw/ │ alibaba │ openclaw │ enabled │ stock:alibaba/index.js │ 2026.5.20 │
│ alibaba- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ anthropi │ openclaw │ enabled │ stock:anthropic/index.js │ 2026.5.20 │
│ anthropic- │ c │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ arcee │ openclaw │ enabled │ stock:arcee/index.js │ 2026.5.20 │
│ arcee- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ Azure Speech │ azure- │ openclaw │ enabled │ stock:azure-speech/index.js │ 2026.5.20 │
│ │ speech │ │ │ Azure AI Speech text-to-speech (MP3, native │ │
│ │ │ │ │ Ogg/Opus voice notes, PCM telephony). │ │
│ Bonjour │ bonjour │ openclaw │ disabled │ stock:bonjour/index.js │ 2026.5.20 │
│ Gateway │ │ │ │ Advertise the local OpenClaw gateway over │ │
│ Discovery │ │ │ │ Bonjour/mDNS. │ │
│ @openclaw/ │ brave │ openclaw │ disabled │ stock:brave/index.js │ 2026.5.20 │
│ brave-plugin │ │ │ │ │ │
│ @openclaw/ │ browser │ openclaw │ enabled │ stock:browser/index.js │ 2026.5.20 │
│ browser- │ │ │ │ │ │
│ plugin │ │ │ │ │ │
│ @openclaw/ │ byteplus │ openclaw │ enabled │ stock:byteplus/index.js │ 2026.5.20 │
│ byteplus- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ Canvas │ canvas │ openclaw │ enabled │ stock:canvas/index.js │ 2026.5.20 │
│ │ │ │ │ Experimental Canvas control and A2UI │ │
│ │ │ │ │ rendering surfaces for paired nodes. │ │
│ @openclaw/ │ cerebras │ openclaw │ enabled │ stock:cerebras/index.js │ 2026.5.20 │
│ cerebras- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ chutes │ openclaw │ enabled │ stock:chutes/index.js │ 2026.5.20 │
│ chutes- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ clickcla │ openclaw │ enabled │ stock:clickclack/index.js │ 2026.5.20 │
│ clickclack │ ck │ │ │ │ │
│ @openclaw/ │ cloudfla │ openclaw │ enabled │ stock:cloudflare-ai-gateway/index.js │ 2026.5.20 │
│ cloudflare- │ re-ai- │ │ │ │ │
│ ai-gateway- │ gateway │ │ │ │ │
│ provider │ │ │ │ │ │
│ Codex │ codex │ openclaw │ disabled │ stock:codex/index.js │ 2026.5.20 │
│ │ │ │ │ Codex app-server harness and Codex-managed │ │
│ │ │ │ │ GPT model catalog. │ │
│ @openclaw/ │ comfy │ openclaw │ enabled │ stock:comfy/index.js │ 2026.5.20 │
│ comfy- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ copilot- │ openclaw │ enabled │ stock:copilot-proxy/index.js │ 2026.5.20 │
│ copilot- │ proxy │ │ │ │ │
│ proxy │ │ │ │ │ │
│ @openclaw/ │ deepgram │ openclaw │ enabled │ stock:deepgram/index.js │ 2026.5.20 │
│ deepgram- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ deepinfr │ openclaw │ enabled │ stock:deepinfra/index.js │ 2026.5.20 │
│ deepinfra- │ a │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ deepseek │ openclaw │ enabled │ stock:deepseek/index.js │ 2026.5.20 │
│ deepseek- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ Device │ device- │ openclaw │ enabled │ stock:device-pair/index.js │ │
│ Pairing │ pair │ │ │ Generate setup codes and approve device │ │
│ │ │ │ │ pairing requests. │ │
│ @openclaw/ │ diagnost │ openclaw │ disabled │ stock:diagnostics-otel/index.js │ 2026.5.20 │
│ diagnostics- │ ics-otel │ │ │ │ │
│ otel │ │ │ │ │ │
│ @openclaw/ │ diagnost │ openclaw │ disabled │ stock:diagnostics-prometheus/index.js │ 2026.5.20 │
│ diagnostics- │ ics- │ │ │ │ │
│ prometheus │ promethe │ │ │ │ │
│ │ us │ │ │ │ │
│ Diffs │ diffs │ openclaw │ disabled │ stock:diffs/index.js │ 2026.5.20 │
│ │ │ │ │ Read-only diff viewer and file renderer for │ │
│ │ │ │ │ agents. │ │
│ @openclaw/ │ discord │ openclaw │ disabled │ stock:discord/index.js │ 2026.5.20 │
│ discord │ │ │ │ │ │
│ Document │ document │ openclaw │ enabled │ stock:document-extract/index.js │ 2026.5.20 │
│ Extraction │ -extract │ │ │ Extract text and fallback page images from │ │
│ │ │ │ │ local document attachments. │ │
│ @openclaw/ │ duckduck │ openclaw │ disabled │ stock:duckduckgo/index.js │ 2026.5.20 │
│ duckduckgo- │ go │ │ │ │ │
│ plugin │ │ │ │ │ │
│ @openclaw/ │ elevenla │ openclaw │ enabled │ stock:elevenlabs/index.js │ 2026.5.20 │
│ elevenlabs- │ bs │ │ │ │ │
│ speech │ │ │ │ │ │
│ @openclaw/ │ exa │ openclaw │ disabled │ stock:exa/index.js │ 2026.5.20 │
│ exa-plugin │ │ │ │ │ │
│ @openclaw/ │ fal │ openclaw │ enabled │ stock:fal/index.js │ 2026.5.20 │
│ fal-provider │ │ │ │ │ │
│ @openclaw/ │ feishu │ openclaw │ enabled │ ~\.openclaw\npm\node_ │ 2026.5.22 │
│ feishu │ │ │ │ modules\@openclaw\feishu\dist\index.js │ │
│ File │ file- │ openclaw │ enabled │ stock:file-transfer/index.js │ 2026.5.20 │
│ Transfer │ transfer │ │ │ Fetch, list, and write files on paired nodes │ │
│ │ │ │ │ via dedicated node commands. Bypasses bash │ │
│ │ │ │ │ stdout truncation by using base64 over node. │ │
│ │ │ │ │ invoke for binaries up to 16 MB. │ │
│ @openclaw/ │ firecraw │ openclaw │ disabled │ stock:firecrawl/index.js │ 2026.5.20 │
│ firecrawl- │ l │ │ │ │ │
│ plugin │ │ │ │ │ │
│ @openclaw/ │ firework │ openclaw │ enabled │ stock:fireworks/index.js │ 2026.5.20 │
│ fireworks- │ s │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ github- │ openclaw │ enabled │ stock:github-copilot/index.js │ 2026.5.20 │
│ github- │ copilot │ │ │ │ │
│ copilot- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ google │ openclaw │ enabled │ stock:google/index.js │ 2026.5.20 │
│ google- │ │ │ │ │ │
│ plugin │ │ │ │ │ │
│ Google Meet │ google- │ openclaw │ disabled │ stock:google-meet/index.js │ 2026.5.20 │
│ │ meet │ │ │ Join Google Meet calls through Chrome or │ │
│ │ │ │ │ Twilio transports. │ │
│ @openclaw/ │ googlech │ openclaw │ disabled │ stock:googlechat/index.js │ 2026.5.20 │
│ googlechat │ at │ │ │ │ │
│ @openclaw/ │ gradium │ openclaw │ disabled │ stock:gradium/index.js │ 2026.5.20 │
│ gradium- │ │ │ │ │ │
│ speech │ │ │ │ │ │
│ @openclaw/ │ groq │ openclaw │ enabled │ stock:groq/index.js │ 2026.5.20 │
│ groq- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ huggingf │ openclaw │ enabled │ stock:huggingface/index.js │ 2026.5.20 │
│ huggingface- │ ace │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ imessage │ openclaw │ disabled │ stock:imessage/index.js │ 2026.5.20 │
│ imessage │ │ │ │ │ │
│ Inworld │ inworld │ openclaw │ enabled │ stock:inworld/index.js │ 2026.5.20 │
│ │ │ │ │ Inworld streaming text-to-speech (MP3, OGG_ │ │
│ │ │ │ │ OPUS, PCM telephony). │ │
│ @openclaw/ │ irc │ openclaw │ disabled │ stock:irc/index.js │ 2026.5.20 │
│ irc │ │ │ │ │ │
│ @openclaw/ │ kilocode │ openclaw │ enabled │ stock:kilocode/index.js │ 2026.5.20 │
│ kilocode- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ kimi │ openclaw │ enabled │ stock:kimi-coding/index.js │ 2026.5.20 │
│ kimi- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ line │ openclaw │ disabled │ stock:line/index.js │ 2026.5.20 │
│ line │ │ │ │ │ │
│ @openclaw/ │ litellm │ openclaw │ enabled │ stock:litellm/index.js │ 2026.5.20 │
│ litellm- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ LLM Task │ llm-task │ openclaw │ disabled │ stock:llm-task/index.js │ 2026.5.20 │
│ │ │ │ │ Generic JSON-only LLM tool for structured │ │
│ │ │ │ │ tasks callable from workflows. │ │
│ @openclaw/ │ lmstudio │ openclaw │ enabled │ stock:lmstudio/index.js │ 2026.5.20 │
│ lmstudio- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ Lobster │ lobster │ openclaw │ disabled │ stock:lobster/index.js │ 2026.5.20 │
│ │ │ │ │ Typed workflow tool with resumable approvals. │ │
│ @openclaw/ │ matrix │ openclaw │ disabled │ stock:matrix/index.js │ 2026.5.20 │
│ matrix │ │ │ │ │ │
│ @openclaw/ │ mattermo │ openclaw │ disabled │ stock:mattermost/index.js │ 2026.5.20 │
│ mattermost │ st │ │ │ │ │
│ @openclaw/ │ memory- │ openclaw │ enabled │ stock:memory-core/index.js │ 2026.5.20 │
│ memory-core │ core │ │ │ │ │
│ @openclaw/ │ memory- │ openclaw │ disabled │ stock:memory-lancedb/index.js │ 2026.5.20 │
│ memory- │ lancedb │ │ │ │ │
│ lancedb │ │ │ │ │ │
│ Memory Wiki │ memory- │ openclaw │ disabled │ stock:memory-wiki/index.js │ 2026.5.20 │
│ │ wiki │ │ │ Persistent wiki compiler and Obsidian- │ │
│ │ │ │ │ friendly knowledge vault for OpenClaw. │ │
│ @openclaw/ │ microsof │ openclaw │ enabled │ stock:microsoft/index.js │ 2026.5.20 │
│ microsoft- │ t │ │ │ │ │
│ speech │ │ │ │ │ │
│ @openclaw/ │ microsof │ openclaw │ enabled │ stock:microsoft-foundry/index.js │ 2026.5.20 │
│ microsoft- │ t- │ │ │ │ │
│ foundry │ foundry │ │ │ │ │
│ Claude │ migrate- │ openclaw │ disabled │ stock:migrate-claude/index.js │ 2026.5.20 │
│ Migration │ claude │ │ │ Imports Claude Code and Claude Desktop │ │
│ │ │ │ │ instructions, MCP servers, skills, and safe │ │
│ │ │ │ │ configuration into OpenClaw. │ │
│ Hermes │ migrate- │ openclaw │ disabled │ stock:migrate-hermes/index.js │ 2026.5.20 │
│ Migration │ hermes │ │ │ Imports Hermes configuration, memories, │ │
│ │ │ │ │ skills, and supported credentials into │ │
│ │ │ │ │ OpenClaw. │ │
│ @openclaw/ │ minimax │ openclaw │ enabled │ stock:minimax/index.js │ 2026.5.20 │
│ minimax- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ mistral │ openclaw │ enabled │ stock:mistral/index.js │ 2026.5.20 │
│ mistral- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ moonshot │ openclaw │ enabled │ stock:moonshot/index.js │ 2026.5.20 │
│ moonshot- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ msteams │ openclaw │ disabled │ stock:msteams/index.js │ 2026.5.20 │
│ msteams │ │ │ │ │ │
│ @openclaw/ │ nextclou │ openclaw │ disabled │ stock:nextcloud-talk/index.js │ 2026.5.20 │
│ nextcloud- │ d-talk │ │ │ │ │
│ talk │ │ │ │ │ │
│ @openclaw/ │ nostr │ openclaw │ disabled │ stock:nostr/index.js │ 2026.5.20 │
│ nostr │ │ │ │ │ │
│ @openclaw/ │ nvidia │ openclaw │ enabled │ stock:nvidia/index.js │ 2026.5.20 │
│ nvidia- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ OC Path │ oc-path │ openclaw │ disabled │ stock:oc-path/index.js │ 2026.5.20 │
│ │ │ │ │ Adds the openclaw path CLI for oc:// │ │
│ │ │ │ │ workspace file addressing. │ │
│ @openclaw/ │ ollama │ openclaw │ enabled │ stock:ollama/index.js │ 2026.5.20 │
│ ollama- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ OpenProse │ open- │ openclaw │ disabled │ stock:open-prose/index.js │ 2026.5.20 │
│ │ prose │ │ │ OpenProse VM skill pack with a /prose slash │ │
│ │ │ │ │ command. │ │
│ @openclaw/ │ openai │ openclaw │ enabled │ stock:openai/index.js │ 2026.5.20 │
│ openai- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ opencode │ openclaw │ enabled │ stock:opencode/index.js │ 2026.5.20 │
│ opencode- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ opencode │ openclaw │ enabled │ stock:opencode-go/index.js │ 2026.5.20 │
│ opencode-go- │ -go │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ openrout │ openclaw │ enabled │ stock:openrouter/index.js │ 2026.5.20 │
│ openrouter- │ er │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ perplexi │ openclaw │ disabled │ stock:perplexity/index.js │ 2026.5.20 │
│ perplexity- │ ty │ │ │ │ │
│ plugin │ │ │ │ │ │
│ Phone │ phone- │ openclaw │ enabled │ stock:phone-control/index.js │ │
│ Control │ control │ │ │ Arm/disarm high-risk phone node commands │ │
│ │ │ │ │ (camera/screen/writes) with an optional auto- │ │
│ │ │ │ │ expiry. │ │
│ Policy │ policy │ openclaw │ disabled │ stock:policy/index.js │ 2026.5.20 │
│ │ │ │ │ Adds policy-backed doctor checks for │ │
│ │ │ │ │ workspace conformance. │ │
│ @openclaw/ │ qianfan │ openclaw │ enabled │ stock:qianfan/index.js │ 2026.5.20 │
│ qianfan- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ qwen │ openclaw │ enabled │ stock:qwen/index.js │ 2026.5.20 │
│ qwen- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ runway │ openclaw │ enabled │ stock:runway/index.js │ 2026.5.20 │
│ runway- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ searxng │ openclaw │ disabled │ stock:searxng/index.js │ 2026.5.20 │
│ searxng- │ │ │ │ │ │
│ plugin │ │ │ │ │ │
│ @openclaw/ │ senseaud │ openclaw │ enabled │ stock:senseaudio/index.js │ 2026.5.20 │
│ senseaudio- │ io │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ sglang │ openclaw │ enabled │ stock:sglang/index.js │ 2026.5.20 │
│ sglang- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ signal │ openclaw │ disabled │ stock:signal/index.js │ 2026.5.20 │
│ signal │ │ │ │ │ │
│ Skill │ skill- │ openclaw │ disabled │ stock:skill-workshop/index.js │ 2026.5.20 │
│ Workshop │ workshop │ │ │ Captures repeatable workflows as workspace │ │
│ │ │ │ │ skills, with pending review, safe writes, and │ │
│ │ │ │ │ skill prompt refresh. │ │
│ @openclaw/ │ stepfun │ openclaw │ enabled │ stock:stepfun/index.js │ 2026.5.20 │
│ stepfun- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ synology │ openclaw │ disabled │ stock:synology-chat/index.js │ 2026.5.20 │
│ synology- │ -chat │ │ │ │ │
│ chat │ │ │ │ │ │
│ @openclaw/ │ syntheti │ openclaw │ enabled │ stock:synthetic/index.js │ 2026.5.20 │
│ synthetic- │ c │ │ │ │ │
│ provider │ │ │ │ │ │
│ Talk Voice │ talk- │ openclaw │ enabled │ stock:talk-voice/index.js │ │
│ │ voice │ │ │ Manage Talk voice selection (list/set). │ │
│ @openclaw/ │ tavily │ openclaw │ disabled │ stock:tavily/index.js │ 2026.5.20 │
│ tavily- │ │ │ │ │ │
│ plugin │ │ │ │ │ │
│ @openclaw/ │ telegram │ openclaw │ disabled │ stock:telegram/index.js │ 2026.5.20 │
│ telegram │ │ │ │ │ │
│ @openclaw/ │ tencent │ openclaw │ enabled │ stock:tencent/index.js │ 2026.5.20 │
│ tencent- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ Thread │ thread- │ openclaw │ disabled │ stock:thread-ownership/index.js │ │
│ Ownership │ ownershi │ │ │ Prevents multiple agents from responding in │ │
│ │ p │ │ │ the same Slack thread. Uses HTTP calls to the │ │
│ │ │ │ │ slack-forwarder ownership API. │ │
│ @openclaw/ │ tlon │ openclaw │ disabled │ stock:tlon/index.js │ 2026.5.20 │
│ tlon │ │ │ │ │ │
│ @openclaw/ │ together │ openclaw │ enabled │ stock:together/index.js │ 2026.5.20 │
│ together- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ tokenjuice │ │ openclaw │ disabled │ stock:tokenjuice/index.js │ 2026.5.20 │
│ │ │ │ │ Compacts exec and bash tool results with │ │
│ │ │ │ │ tokenjuice reducers. │ │
│ @openclaw/ │ tts- │ openclaw │ enabled │ stock:tts-local-cli/index.js │ 2026.5.20 │
│ tts-local- │ local- │ │ │ │ │
│ cli │ cli │ │ │ │ │
│ @openclaw/ │ twitch │ openclaw │ disabled │ stock:twitch/index.js │ 2026.5.20 │
│ twitch │ │ │ │ │ │
│ @openclaw/ │ venice │ openclaw │ enabled │ stock:venice/index.js │ 2026.5.20 │
│ venice- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ vercel- │ openclaw │ enabled │ stock:vercel-ai-gateway/index.js │ 2026.5.20 │
│ vercel-ai- │ ai- │ │ │ │ │
│ gateway- │ gateway │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ vllm │ openclaw │ enabled │ stock:vllm/index.js │ 2026.5.20 │
│ vllm- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ voice- │ openclaw │ disabled │ stock:voice-call/index.js │ 2026.5.20 │
│ voice-call │ call │ │ │ │ │
│ @openclaw/ │ volcengi │ openclaw │ enabled │ stock:volcengine/index.js │ 2026.5.20 │
│ volcengine- │ ne │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ voyage │ openclaw │ enabled │ stock:voyage/index.js │ 2026.5.20 │
│ voyage- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ vydra │ openclaw │ enabled │ stock:vydra/index.js │ 2026.5.20 │
│ vydra- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ Web │ web- │ openclaw │ enabled │ stock:web-readability/index.js │ 2026.5.20 │
│ Readability │ readabil │ │ │ Extract readable article content from local │ │
│ Extraction │ ity │ │ │ HTML web fetch responses. │ │
│ Webhooks │ webhooks │ openclaw │ disabled │ stock:webhooks/index.js │ 2026.5.20 │
│ │ │ │ │ Authenticated inbound webhooks that bind │ │
│ │ │ │ │ external automation to OpenClaw TaskFlows. │ │
│ @openclaw/ │ xai │ openclaw │ enabled │ stock:xai/index.js │ 2026.5.20 │
│ xai-plugin │ │ │ │ │ │
│ @openclaw/ │ xiaomi │ openclaw │ enabled │ stock:xiaomi/index.js │ 2026.5.20 │
│ xiaomi- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ zai │ openclaw │ enabled │ stock:zai/index.js │ 2026.5.20 │
│ zai-provider │ │ │ │ │ │
│ @openclaw/ │ zalo │ openclaw │ disabled │ stock:zalo/index.js │ 2026.5.20 │
│ zalo │ │ │ │ │ │
│ @openclaw/ │ zalouser │ openclaw │ disabled │ stock:zalouser/index.js │ 2026.5.20 │
│ zalouser │ │ │ │ │ │
│ @openclaw/ │ amazon- │ openclaw │ enabled │ ~\Documents\openclaw\extensions\amazon- │ 2026.5.20 │
│ amazon- │ bedrock │ │ │ bedrock\index.ts │ │
│ bedrock- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ amazon- │ openclaw │ enabled │ ~\Documents\openclaw\extensions\amazon- │ 2026.5.20 │
│ amazon- │ bedrock- │ │ │ bedrock-mantle\index.ts │ │
│ bedrock- │ mantle │ │ │ │ │
│ mantle- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ @openclaw/ │ anthropi │ openclaw │ enabled │ ~\Documents\openclaw\extensions\anthropic- │ 2026.5.20 │
│ anthropic- │ c-vertex │ │ │ vertex\index.ts │ │
│ vertex- │ │ │ │ │ │
│ provider │ │ │ │ │ │
│ OpenShell │ openshel │ openclaw │ disabled │ ~\Documents\openclaw\extensions\openshell\inde │ 2026.5.20 │
│ Sandbox │ l │ │ │ x.ts │ │
│ │ │ │ │ Sandbox backend powered by OpenShell with │ │
│ │ │ │ │ mirrored local workspaces and SSH-based │ │
│ │ │ │ │ command execution. │ │
│ @openclaw/ │ qa- │ openclaw │ disabled │ ~\Documents\openclaw\extensions\qa- │ 2026.5.20 │
│ qa-channel │ channel │ │ │ channel\index.ts │ │
│ @openclaw/ │ qa-lab │ openclaw │ disabled │ ~\Documents\openclaw\extensions\qa-lab\index. │ 2026.5.20 │
│ qa-lab │ │ │ │ ts │ │
│ QA Matrix │ qa- │ openclaw │ disabled │ ~\Documents\openclaw\extensions\qa- │ 2026.5.20 │
│ │ matrix │ │ │ matrix\index.ts │ │
│ │ │ │ │ Matrix QA transport runner and substrate │ │
│ @openclaw/ │ qqbot │ openclaw │ enabled │ ~\Documents\openclaw\extensions\qqbot\index.ts │ 2026.5.20 │
│ qqbot │ │ │ │ │ │
│ @openclaw/ │ slack │ openclaw │ disabled │ ~\Documents\openclaw\extensions\slack\index.ts │ 2026.5.20 │
│ slack │ │ │ │ │ │
│ @openclaw/ │ whatsapp │ openclaw │ disabled │ ~\Documents\openclaw\extensions\whatsapp\index │ 2026.5.20 │
│ whatsapp │ │ │ │ .ts │ │
└──────────────┴──────────┴──────────┴──────────┴────────────────────────────────────────────────┴───────────┘
然后我们运行前面创建的插件,注意要使用管理员权限来执行如下命令,或者使用管理员权限打开控制台,然后执行如下命令: node --import tsx src/entry.ts hello
然后应该能看到如下对话框:

最后在执行前面命令的控制台可以看到如下输出:
$ node --import tsx src/entry.ts hello
│
◇
🦞 OpenClaw 2026.5.20 (bde07dd)
If you're lost, run doctor; if you're brave, run prod; if you're wise, run tests.
hello world! 对话框已弹出
本节我们先对Openclaw的插件有初步认识,下一节我们在深入分析openclaw对插件的加载逻辑