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
If you prefer chat-native control, enable
commands.plugins: true and use:
clawhub:<pkg>, or bare package spec (ClawHub first, then npm fallback).
If config is invalid, install normally fails closed and points you at
openclaw doctor --fix. The only recovery exception is a narrow bundled-plugin
reinstall path for plugins that opt into
openclaw.install.allowInvalidConfigRecovery.
Plugin types
OpenClaw recognizes two plugin formats:| Format | How it works | Examples |
|---|---|---|
| Native | openclaw.plugin.json + runtime module; executes in-process | Official plugins, community npm packages |
| Bundle | Codex/Claude/Cursor-compatible layout; mapped to OpenClaw features | .codex-plugin/, .claude-plugin/, .cursor-plugin/ |
openclaw plugins list. See Plugin Bundles for bundle details.
If you are writing a native plugin, start with Building Plugins
and the Plugin SDK Overview.
Official plugins
Installable (npm)
| Plugin | Package | Docs |
|---|---|---|
| Matrix | @openclaw/matrix | Matrix |
| Microsoft Teams | @openclaw/msteams | Microsoft Teams |
| Nostr | @openclaw/nostr | Nostr |
| Voice Call | @openclaw/voice-call | Voice Call |
| Zalo | @openclaw/zalo | Zalo |
| Zalo Personal | @openclaw/zalouser | Zalo Personal |
Core (shipped with OpenClaw)
Model providers (enabled by default)
Model providers (enabled by default)
anthropic, byteplus, cloudflare-ai-gateway, github-copilot, google,
huggingface, kilocode, kimi-coding, minimax, mistral, modelstudio,
moonshot, nvidia, openai, opencode, opencode-go, openrouter,
qianfan, synthetic, together, venice,
vercel-ai-gateway, volcengine, xiaomi, zaiMemory plugins
Memory plugins
memory-core— bundled memory search (default viaplugins.slots.memory)memory-lancedb— install-on-demand long-term memory with auto-recall/capture (setplugins.slots.memory = "memory-lancedb")
Speech providers (enabled by default)
Speech providers (enabled by default)
elevenlabs, microsoftOther
Other
browser— bundled browser plugin for the browser tool,openclaw browserCLI,browser.requestgateway method, browser runtime, and default browser control service (enabled by default; disable before replacing it)copilot-proxy— VS Code Copilot Proxy bridge (disabled by default)
Configuration
| Field | Description |
|---|---|
enabled | Master toggle (default: true) |
allow | Plugin allowlist (optional) |
deny | Plugin denylist (optional; deny wins) |
load.paths | Extra plugin files/directories |
slots | Exclusive slot selectors (e.g. memory, contextEngine) |
entries.\<id\> | Per-plugin toggles + config |
openclaw gateway path), that
restart is usually performed automatically a moment after the config write lands.
Plugin states: disabled vs missing vs invalid
Plugin states: disabled vs missing vs invalid
- 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):Workspace extensions
\<workspace\>/.openclaw/<plugin-root>/*.ts and \<workspace\>/.openclaw/<plugin-root>/*/index.ts.Enablement rules
plugins.enabled: falsedisables all pluginsplugins.denyalways wins over allowplugins.entries.\<id\>.enabled: falsedisables 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):| Slot | What it controls | Default |
|---|---|---|
memory | Active memory plugin | memory-core |
contextEngine | Active context engine | legacy (built-in) |
CLI reference
openclaw plugins enable <id>.
--force overwrites an existing installed plugin or hook pack in place.
It is not supported with --link, which reuses the source path instead of
copying over a managed install target.
--pin is npm-only. It is not supported with --marketplace, because
marketplace installs persist marketplace source metadata instead of an npm spec.
--dangerously-force-unsafe-install is a break-glass override for false
positives from the built-in dangerous-code scanner. It allows plugin installs
and plugin updates to continue past built-in critical findings, but it still
does not bypass plugin before_install policy blocks or scan-failure blocking.
This CLI flag applies to plugin install/update flows only. Gateway-backed skill
dependency installs use the matching dangerouslyForceUnsafeInstall request
override instead, while openclaw skills install remains the separate ClawHub
skill download/install flow.
Compatible bundles participate in the same plugin list/inspect/enable/disable
flow. Current runtime support includes bundle skills, Claude command-skills,
Claude settings.json defaults, Claude .lsp.json and manifest-declared
lspServers defaults, Cursor command-skills, and compatible Codex hook
directories.
openclaw plugins inspect <id> also reports detected bundle capabilities plus
supported or unsupported MCP and LSP server entries for bundle-backed plugins.
Marketplace sources can be a Claude known-marketplace name from
~/.claude/plugins/known_marketplaces.json, a local marketplace root or
marketplace.json path, a GitHub shorthand like owner/repo, a GitHub repo
URL, or a git URL. For remote marketplaces, plugin entries must stay inside the
cloned marketplace repo and use relative path sources only.
See openclaw plugins CLI reference for full details.
Plugin API overview
Native plugins export an entry object that exposesregister(api). Older
plugins may still use activate(api) as a legacy alias, but new plugins should
use register.
register(api) during plugin
activation. The loader still falls back to activate(api) for older plugins,
but bundled plugins and new external plugins should treat register as the
public contract.
Common registration methods:
| Method | What it registers |
|---|---|
registerProvider | Model provider (LLM) |
registerChannel | Chat channel |
registerTool | Agent tool |
registerHook / on(...) | Lifecycle hooks |
registerSpeechProvider | Text-to-speech / STT |
registerMediaUnderstandingProvider | Image/audio analysis |
registerImageGenerationProvider | Image generation |
registerWebSearchProvider | Web search |
registerHttpRoute | HTTP endpoint |
registerCommand / registerCli | CLI commands |
registerContextEngine | Context engine |
registerService | Background service |
before_tool_call:{ block: true }is terminal; lower-priority handlers are skipped.before_tool_call:{ block: false }is a no-op and does not clear an earlier block.before_install:{ block: true }is terminal; lower-priority handlers are skipped.before_install:{ block: false }is a no-op and does not clear an earlier block.message_sending:{ cancel: true }is terminal; lower-priority handlers are skipped.message_sending:{ cancel: false }is a no-op and does not clear an earlier cancel.
Related
- Building Plugins — create your own plugin
- Plugin Bundles — Codex/Claude/Cursor bundle compatibility
- Plugin Manifest — manifest schema
- Registering Tools — add agent tools in a plugin
- Plugin Internals — capability model and load pipeline
- Community Plugins — third-party listings