Skip to main content

Plugins

Plugins extend OpenClaw with new capabilities: channels, model providers, tools, skills, speech, image generation, and more. Some plugins are core (shipped with OpenClaw), others are external (published on npm by the community).

Quick start

1

See what is loaded

openclaw plugins list 
2

Install a plugin

# From npm openclaw plugins install @openclaw/voice-call  # From a local directory or archive openclaw plugins install ./my-plugin openclaw plugins install ./my-plugin.tgz 
3

Restart the Gateway

openclaw gateway restart 
Then configure under plugins.entries.\<id\>.config in your config file.

Plugin types

OpenClaw recognizes two plugin formats:
FormatHow it worksExamples
Nativeopenclaw.plugin.json + runtime module; executes in-processOfficial plugins, community npm packages
BundleCodex/Claude/Cursor-compatible layout; mapped to OpenClaw features.codex-plugin/, .claude-plugin/, .cursor-plugin/
Both show up under openclaw plugins list. See Plugin Bundles for bundle details.

Official plugins

Installable (npm)

PluginPackageDocs
Matrix@openclaw/matrixMatrix
Microsoft Teams@openclaw/msteamsMicrosoft Teams
Nostr@openclaw/nostrNostr
Voice Call@openclaw/voice-callVoice Call
Zalo@openclaw/zaloZalo
Zalo Personal@openclaw/zalouserZalo Personal

Core (shipped with OpenClaw)

anthropic, byteplus, cloudflare-ai-gateway, github-copilot, google, huggingface, kilocode, kimi-coding, minimax, mistral, modelstudio, moonshot, nvidia, openai, opencode, opencode-go, openrouter, qianfan, qwen-portal-auth, synthetic, together, venice, vercel-ai-gateway, volcengine, xiaomi, zai
  • memory-core — bundled memory search (default via plugins.slots.memory)
  • memory-lancedb — install-on-demand long-term memory with auto-recall/capture (set plugins.slots.memory = "memory-lancedb")
elevenlabs, microsoft
  • copilot-proxy — VS Code Copilot Proxy bridge (disabled by default)
Looking for third-party plugins? See Community Plugins.

Configuration

{  plugins: {  enabled: true,  allow: ["voice-call"],  deny: ["untrusted-plugin"],  load: { paths: ["~/Projects/oss/voice-call-extension"] },  entries: {  "voice-call": { enabled: true, config: { provider: "twilio" } },  },  }, } 
FieldDescription
enabledMaster toggle (default: true)
allowPlugin allowlist (optional)
denyPlugin denylist (optional; deny wins)
load.pathsExtra plugin files/directories
slotsExclusive slot selectors (e.g. memory, contextEngine)
entries.\<id\>Per-plugin toggles + config
Config changes require a gateway restart.
  • Disabled: plugin exists but enablement rules turned it off. Config is preserved.
  • Missing: config references a plugin id that discovery did not find.
  • Invalid: plugin exists but its config does not match the declared schema.

Discovery and precedence

OpenClaw scans for plugins in this order (first match wins):
1

Config paths

plugins.load.paths — explicit file or directory paths.
2

Workspace extensions

\<workspace\>/.openclaw/extensions/*.ts and \<workspace\>/.openclaw/extensions/*/index.ts.
3

Global extensions

~/.openclaw/extensions/*.ts and ~/.openclaw/extensions/*/index.ts.
4

Bundled plugins

Shipped with OpenClaw. Many are enabled by default (model providers, speech). Others require explicit enablement.

Enablement rules

  • plugins.enabled: false disables all plugins
  • plugins.deny always wins over allow
  • plugins.entries.\<id\>.enabled: false disables that plugin
  • Workspace-origin plugins are disabled by default (must be explicitly enabled)
  • Bundled plugins follow the built-in default-on set unless overridden
  • Exclusive slots can force-enable the selected plugin for that slot

Plugin slots (exclusive categories)

Some categories are exclusive (only one active at a time):
{  plugins: {  slots: {  memory: "memory-core", // or "none" to disable  contextEngine: "legacy", // or a plugin id  },  }, } 
SlotWhat it controlsDefault
memoryActive memory pluginmemory-core
contextEngineActive context enginelegacy (built-in)

CLI reference

openclaw plugins list # compact inventory openclaw plugins inspect <id> # deep detail openclaw plugins inspect <id> --json # machine-readable openclaw plugins status # operational summary openclaw plugins doctor # diagnostics  openclaw plugins install <npm-spec> # install from npm openclaw plugins install <path> # install from local path openclaw plugins install -l <path> # link (no copy) for dev openclaw plugins update <id> # update one plugin openclaw plugins update --all # update all  openclaw plugins enable <id> openclaw plugins disable <id> 
See openclaw plugins CLI reference for full details.

Plugin API overview

Plugins export either a function or an object with register(api):
export default definePluginEntry({  id: "my-plugin",  name: "My Plugin",  register(api) {  api.registerProvider({  /* ... */  });  api.registerTool({  /* ... */  });  api.registerChannel({  /* ... */  });  }, }); 
Common registration methods:
MethodWhat it registers
registerProviderModel provider (LLM)
registerChannelChat channel
registerToolAgent tool
registerHook / on(...)Lifecycle hooks
registerSpeechProviderText-to-speech / STT
registerMediaUnderstandingProviderImage/audio analysis
registerImageGenerationProviderImage generation
registerWebSearchProviderWeb search
registerHttpRouteHTTP endpoint
registerCommand / registerCliCLI commands
registerContextEngineContext engine
registerServiceBackground service