Plugins
Plugins
Plugins extend RemoteClaw with new capabilities: channels, model providers, tools, skills, speech, image generation, and more. Some plugins are core (shipped with RemoteClaw), others are external (published on npm by the community).
Quick start
# From a local directory or archiveremoteclaw plugins install ./my-pluginremoteclaw plugins install ./my-plugin.tgz```Then configure under `plugins.entries.\<id\>.config` in your config file.If you prefer chat-native control, enable commands.plugins: true and use:
/plugin install clawhub:@remoteclaw/voice-call/plugin show voice-call/plugin enable voice-callThe install path uses the same resolver as the CLI: local path/archive, explicit
clawhub:<pkg>, or bare package spec (ClawHub first, then npm fallback).
Plugin types
RemoteClaw recognizes two plugin formats:
| Format | How it works | Examples |
|---|---|---|
| Native | remoteclaw.plugin.json + runtime module; executes in-process | Official plugins, community npm packages |
| Bundle | Codex/Claude/Cursor-compatible layout; mapped to RemoteClaw features | .codex-plugin/, .claude-plugin/, .cursor-plugin/ |
Both show up under remoteclaw 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 | @remoteclaw/matrix | Matrix |
| Microsoft Teams | @remoteclaw/msteams | Microsoft Teams |
| Nostr | @remoteclaw/nostr | Nostr |
| Voice Call | @remoteclaw/voice-call | Voice Call |
| Zalo | @remoteclaw/zalo | Zalo |
| Zalo Personal | @remoteclaw/zalouser | Zalo Personal |
Core (shipped with RemoteClaw)
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" } }, }, },}| 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 |
Config changes require a gateway restart. If the Gateway is running with config
watch + in-process restart enabled (the default remoteclaw gateway path), that
restart is usually performed automatically a moment after the config write lands.
Discovery and precedence
RemoteClaw scans for plugins in this order (first match wins):
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):
{ plugins: { slots: { memory: "memory-core", // or "none" to disable contextEngine: "legacy", // or a plugin id }, },}| Slot | What it controls | Default |
|---|---|---|
memory | Active memory plugin | memory-core |
contextEngine | Active context engine | legacy (built-in) |
CLI reference
remoteclaw plugins list # compact inventoryremoteclaw plugins inspect <id> # deep detailremoteclaw plugins inspect <id> --json # machine-readableremoteclaw plugins status # operational summaryremoteclaw plugins doctor # diagnostics
remoteclaw plugins install <package> # install (ClawHub first, then npm)remoteclaw plugins install clawhub:<pkg> # install from ClawHub onlyremoteclaw plugins install <path> # install from local pathremoteclaw plugins install -l <path> # link (no copy) for devremoteclaw plugins update <id> # update one pluginremoteclaw plugins update --all # update all
remoteclaw plugins enable <id>remoteclaw plugins disable <id>See remoteclaw 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:
| 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 |
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