2026-01-11 12:11:12 +00:00
---
2026-03-20 11:20:36 -07:00
summary: "Install, configure, and manage OpenClaw plugins"
2026-01-11 12:11:12 +00:00
read_when:
2026-03-20 10:54:48 -07:00
- Installing or configuring plugins
- Understanding plugin discovery and load rules
2026-03-15 16:08:30 -07:00
- Working with Codex/Claude-compatible plugin bundles
2026-01-31 16:04:03 -05:00
title: "Plugins"
2026-03-20 10:54:48 -07:00
sidebarTitle: "Install and Configure"
2026-01-11 12:11:12 +00:00
---
2026-01-31 18:31:49 +09:00
2026-03-20 10:54:48 -07:00
# Plugins
2026-01-11 12:11:12 +00:00
2026-03-20 11:20:36 -07:00
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).
2026-03-18 15:44:08 -07:00
## Quick start
2026-01-12 01:27:05 +00:00
2026-03-20 11:20:36 -07:00
<Steps>
<Step title="See what is loaded">
```bash
openclaw plugins list
` ``
</Step>
2026-03-15 16:08:30 -07:00
2026-03-20 11:20:36 -07:00
<Step title="Install a plugin">
` ``bash
# From npm
openclaw plugins install @openclaw/voice-call
2026-03-15 16:08:30 -07:00
2026-03-20 11:20:36 -07:00
# From a local directory or archive
openclaw plugins install ./my-plugin
openclaw plugins install ./my-plugin.tgz
` ``
2026-01-12 01:27:05 +00:00
2026-03-20 11:20:36 -07:00
</Step>
2026-01-12 01:27:05 +00:00
2026-03-20 11:20:36 -07:00
<Step title="Restart the Gateway">
` ``bash
openclaw gateway restart
` ``
2026-01-12 01:27:05 +00:00
2026-03-20 11:20:36 -07:00
Then configure under ` plugins.entries.\<id\>.config` in your config file.
2026-01-12 01:27:05 +00:00
2026-03-20 11:20:36 -07:00
</Step>
</Steps>
2026-01-12 01:27:05 +00:00
2026-03-23 00:18:47 -07:00
If you prefer chat-native control, enable ` commands.plugins: true` and use:
` ``text
/plugin install clawhub:@openclaw/voice-call
/plugin show voice-call
/plugin enable voice-call
` ``
The install path uses the same resolver as the CLI: local path/archive, explicit
` clawhub:<pkg>`, or bare package spec (ClawHub first, then npm fallback).
2026-03-20 11:20:36 -07:00
## Plugin types
2026-02-14 14:07:07 +01:00
2026-03-20 11:20:36 -07:00
OpenClaw recognizes two plugin formats:
2026-01-12 01:27:05 +00:00
2026-03-20 11:20:36 -07:00
| 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/` |
2026-03-15 16:08:30 -07:00
2026-03-20 11:20:36 -07:00
Both show up under ` openclaw plugins list`. See [Plugin Bundles](/plugins/bundles) for bundle details.
2026-03-15 16:08:30 -07:00
2026-03-22 08:50:43 -07:00
If you are writing a native plugin, start with [Building Plugins](/plugins/building-plugins)
and the [Plugin SDK Overview](/plugins/sdk-overview).
2026-03-20 11:20:36 -07:00
## Official plugins
2026-01-12 01:27:05 +00:00
2026-03-20 11:20:36 -07:00
### Installable (npm)
2026-03-18 00:47:46 +00:00
2026-03-20 12:56:32 +05:30
| Plugin | Package | Docs |
| --------------- | ---------------------- | ------------------------------------ |
| Matrix | ` @openclaw/matrix ` | [Matrix](/channels/matrix) |
2026-03-20 12:24:47 +05:30
| Microsoft Teams | ` @openclaw/msteams ` | [Microsoft Teams](/channels/msteams) |
2026-03-20 12:56:32 +05:30
| Nostr | ` @openclaw/nostr ` | [Nostr](/channels/nostr) |
| Voice Call | ` @openclaw/voice -call` | [Voice Call](/plugins/voice-call) |
| Zalo | ` @openclaw/zalo ` | [Zalo](/channels/zalo) |
| Zalo Personal | ` @openclaw/zalouser ` | [Zalo Personal](/plugins/zalouser) |
2026-03-18 00:47:46 +00:00
2026-03-20 11:20:36 -07:00
### Core (shipped with OpenClaw)
2026-03-19 03:36:57 +00:00
2026-03-20 11:20:36 -07:00
<AccordionGroup>
<Accordion title="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`,
2026-03-26 16:32:34 +08:00
` qianfan`, ` synthetic`, ` together`, ` venice`,
2026-03-20 11:20:36 -07:00
` vercel-ai-gateway`, ` volcengine`, ` xiaomi`, ` zai`
</Accordion>
2026-03-16 22:21:11 -07:00
2026-03-20 11:20:36 -07:00
<Accordion title="Memory plugins">
- ` 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"`)
</Accordion>
2026-03-16 22:21:11 -07:00
2026-03-20 11:20:36 -07:00
<Accordion title="Speech providers (enabled by default)">
` elevenlabs`, ` microsoft`
</Accordion>
2026-03-16 22:21:11 -07:00
2026-03-20 11:20:36 -07:00
<Accordion title="Other">
2026-03-26 22:18:41 +00:00
- ` browser` — bundled browser plugin for the browser tool, ` openclaw browser` CLI, ` browser.request` gateway method, browser runtime, and default browser control service (enabled by default; disable before replacing it)
2026-03-20 11:20:36 -07:00
- ` copilot-proxy` — VS Code Copilot Proxy bridge (disabled by default)
</Accordion>
</AccordionGroup>
2026-03-16 22:21:11 -07:00
2026-03-20 11:20:36 -07:00
Looking for third-party plugins? See [Community Plugins](/plugins/community).
2026-03-16 20:24:07 -07:00
2026-03-20 11:20:36 -07:00
## Configuration
2026-03-17 10:51:48 -07:00
2026-03-18 15:44:08 -07:00
` ``json5
{
plugins: {
enabled: true,
allow: ["voice-call"],
deny: ["untrusted-plugin"],
load: { paths: ["~/Projects/oss/voice-call-extension"] },
entries: {
"voice-call": { enabled: true, config: { provider: "twilio" } },
2026-03-15 15:17:54 -07:00
},
},
2026-03-18 15:44:08 -07:00
}
2026-03-05 17:05:21 -05:00
` ``
2026-03-20 11:20:36 -07:00
| 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 |
2026-03-05 23:07:13 -06:00
2026-03-22 23:32:48 -07:00
Config changes **require a gateway restart**. If the Gateway is running with config
watch + in-process restart enabled (the default ` openclaw gateway` path), that
restart is usually performed automatically a moment after the config write lands.
2026-03-05 23:07:13 -06:00
2026-03-20 11:20:36 -07:00
<Accordion title="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.
</Accordion>
2026-03-03 22:07:03 -05:00
2026-03-18 15:44:08 -07:00
## Discovery and precedence
2026-01-11 12:11:12 +00:00
2026-03-20 11:20:36 -07:00
OpenClaw scans for plugins in this order (first match wins):
2026-01-31 18:31:49 +09:00
2026-03-20 11:20:36 -07:00
<Steps>
<Step title="Config paths">
` plugins.load.paths` — explicit file or directory paths.
</Step>
2026-01-17 09:33:56 +00:00
2026-03-20 11:20:36 -07:00
<Step title="Workspace extensions">
2026-03-29 09:09:56 +01:00
` \<workspace\>/.openclaw/<plugin-root>/*.ts` and ` \<workspace\>/.openclaw/<plugin-root>/*/index.ts`.
2026-03-20 11:20:36 -07:00
</Step>
2026-03-04 02:31:44 -05:00
2026-03-20 11:20:36 -07:00
<Step title="Global extensions">
2026-03-29 09:09:56 +01:00
` ~/.openclaw/<plugin-root>/*.ts` and ` ~/.openclaw/<plugin-root>/*/index.ts`.
2026-03-20 11:20:36 -07:00
</Step>
2026-03-19 00:04:50 +00:00
2026-03-20 11:20:36 -07:00
<Step title="Bundled plugins">
Shipped with OpenClaw. Many are enabled by default (model providers, speech).
Others require explicit enablement.
</Step>
</Steps>
2026-01-11 12:11:12 +00:00
2026-03-12 22:24:28 +00:00
### Enablement rules
- ` plugins.enabled: false` disables all plugins
2026-03-20 11:20:36 -07:00
- ` 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
2026-03-12 22:24:28 +00:00
2026-01-18 02:12:01 +00:00
## Plugin slots (exclusive categories)
2026-03-20 11:20:36 -07:00
Some categories are exclusive (only one active at a time):
2026-01-18 02:12:01 +00:00
` ``json5
{
plugins: {
slots: {
2026-03-20 11:20:36 -07:00
memory: "memory-core", // or "none" to disable
contextEngine: "legacy", // or a plugin id
2026-01-31 18:31:49 +09:00
},
},
2026-01-18 02:12:01 +00:00
}
` ``
2026-03-20 11:20:36 -07:00
| Slot | What it controls | Default |
| --------------- | --------------------- | ------------------- |
| ` memory` | Active memory plugin | ` memory-core` |
| ` contextEngine` | Active context engine | ` legacy` (built-in) |
2026-01-12 01:16:46 +00:00
2026-03-20 11:20:36 -07:00
## CLI reference
2026-01-12 01:16:46 +00:00
2026-03-18 15:44:08 -07:00
` ``bash
2026-03-20 11:20:36 -07:00
openclaw plugins list # compact inventory
openclaw plugins inspect <id> # deep detail
openclaw plugins inspect <id> --json # machine-readable
openclaw plugins doctor # diagnostics
2026-03-22 11:58:01 -07:00
openclaw plugins install <package> # install (ClawHub first, then npm)
openclaw plugins install clawhub:<pkg> # install from ClawHub only
2026-04-03 18:09:14 -04:00
openclaw plugins install <spec> --force # overwrite existing install
2026-03-20 11:20:36 -07:00
openclaw plugins install <path> # install from local path
openclaw plugins install -l <path> # link (no copy) for dev
2026-03-31 23:16:01 +09:00
openclaw plugins install <spec> --dangerously-force-unsafe-install
2026-03-20 11:20:36 -07:00
openclaw plugins update <id> # update one plugin
2026-04-03 00:20:16 -04:00
openclaw plugins update <id> --dangerously-force-unsafe-install
2026-03-20 11:20:36 -07:00
openclaw plugins update --all # update all
2026-04-04 07:38:55 +01:00
openclaw plugins uninstall <id> # remove config/install records
openclaw plugins uninstall <id> --keep-files
openclaw plugins marketplace list <source>
2026-01-11 12:11:12 +00:00
2026-01-30 03:15:10 +01:00
openclaw plugins enable <id>
openclaw plugins disable <id>
2026-01-11 12:11:12 +00:00
` ``
2026-04-04 07:38:55 +01:00
Bundled plugins ship with OpenClaw. Many are enabled by default (for example
bundled model providers, bundled speech providers, and the bundled browser
plugin). Other bundled plugins still need ` openclaw plugins enable <id>`.
2026-04-03 18:09:14 -04:00
` --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.
2026-03-31 23:16:01 +09:00
` --dangerously-force-unsafe-install` is a break-glass override for false
2026-04-03 00:20:16 -04:00
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.
2026-03-31 23:27:10 +09:00
2026-03-20 11:20:36 -07:00
See [` openclaw plugins` CLI reference](/cli/plugins) for full details.
## Plugin API overview
2026-04-04 07:40:08 +01:00
Native plugins export an entry object that exposes ` register(api)`. Older
plugins may still use ` activate(api)` as a legacy alias, but new plugins should
use ` register`.
2026-03-20 11:20:36 -07:00
` ``typescript
export default definePluginEntry({
id: "my-plugin",
name: "My Plugin",
register(api) {
api.registerProvider({
/* ... */
});
api.registerTool({
/* ... */
});
api.registerChannel({
/* ... */
});
},
});
` ``
2026-01-12 01:16:46 +00:00
2026-04-04 07:40:08 +01:00
OpenClaw loads the entry object and calls ` 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.
2026-03-20 11:20:36 -07:00
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 |
2026-03-25 00:11:13 -05:00
Hook guard behavior for typed lifecycle hooks:
- ` 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.
2026-03-29 10:17:37 -07:00
- ` 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.
2026-03-25 00:11:13 -05:00
- ` 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.
For full typed hook behavior, see [SDK Overview ](/plugins/sdk-overview#hook-decision-semantics ).
2026-03-20 11:20:36 -07:00
## Related
- [Building Plugins ](/plugins/building-plugins ) — create your own plugin
- [Plugin Bundles ](/plugins/bundles ) — Codex/Claude/Cursor bundle compatibility
- [Plugin Manifest ](/plugins/manifest ) — manifest schema
2026-03-20 19:08:27 +00:00
- [Registering Tools ](/plugins/building-plugins#registering-agent-tools ) — add agent tools in a plugin
2026-03-20 11:20:36 -07:00
- [Plugin Internals ](/plugins/architecture ) — capability model and load pipeline
- [Community Plugins ](/plugins/community ) — third-party listings