Plugins

Quick Start

Plugins are just small code modules that extend OpenClaw with additional functionality (commands, tools, and Gateway RPC). Most of the time, you'll use plugins when you want a feature that isn't built into the core OpenClaw yet (or you want to keep optional features out of the main installation). Quick path:

  1. See what's loaded:
  1. Install official plugin (e.g., Voice Call):
  1. Restart Gateway, then configure under plugins.entries.<id>.config.

Available Plugins (Official)

OpenClaw plugins are TypeScript modules loaded at runtime via jiti. Configuration validation does not execute plugin code; it uses the plugin manifest and JSON Schema. See Plugin Manifest. Plugins can register:

Plugins run in the same process as Gateway, so treat them as trusted code. Tool writing guide: Plugin Agent Tools.

Runtime Helpers

Plugins can access selected core helpers via api.runtime. For telephony TTS:

Notes:

Discovery and Priority

OpenClaw scans in order:

  1. Configuration paths
  1. Workspace extensions
  1. Global extensions
  1. Bundled extensions (shipped with OpenClaw, disabled by default)

Bundled plugins must be explicitly enabled via plugins.entries.<id>.enabled or openclaw plugins enable <id>. Installed plugins are enabled by default but can be disabled the same way. Each plugin must contain an openclaw.plugin.json file in its root directory. If the path points to a file, the plugin root is the file's directory and must contain the manifest. If multiple plugins resolve to the same id, the first match in the above order wins, and lower-priority duplicates are ignored.

Package Collections

Plugin directories can contain a package.json with openclaw.extensions:

Each entry becomes a plugin. If a package lists multiple extensions, the plugin id becomes name/<fileBase>. If your plugin imports npm dependencies, install them in that directory so node_modules is available (npm install / pnpm install).

Channel Directory Metadata

Channel plugins can broadcast onboarding metadata via openclaw.channel and installation hints via openclaw.install. This keeps the core directory data-free. Example:

OpenClaw can also merge external channel directories (e.g., MPM registry exports). Place JSON files at one of:

Or set OPENCLAW_PLUGIN_CATALOG_PATHS (or OPENCLAW_MPM_CATALOG_PATHS) to one or more JSON files (comma/semicolon/PATH separated). Each file should contain { "entries": [ { "name": "@scope/pkg", "openclaw": { "channel": {...}, "install": {...} } } ] }.

Plugin IDs

Default plugin id:

If a plugin exports id, OpenClaw will use it but will warn if it doesn't match the configured id.

Configuration

Fields:

Configuration changes require Gateway restart. Validation rules (strict):

Plugin Slots (Exclusive Categories)

Some plugin categories are exclusive (only one active at a time). Use plugins.slots to choose which plugin owns the slot:

If multiple plugins declare kind: "memory", only the selected one loads. Others are disabled with diagnostics.

Control Interface (Schema + Labels)

Control interfaces use config.schema (JSON Schema + uiHints) to render better forms. OpenClaw enhances uiHints at runtime based on discovered plugins:

If you want plugin configuration fields to display good labels/placeholders (and mark secrets as sensitive), provide uiHints and JSON Schema in your plugin manifest. Example:

CLI

plugins update only works for npm installations tracked under plugins.installs. Plugins can also register their own top-level commands (e.g., openclaw voicecall).

Plugin API (Overview)

Plugins export one of:

Plugin Hooks

Plugins can ship with hooks and register them at runtime. This lets plugins bundle event-driven automation without needing to install a separate hooks package.

Example

Notes:

Provider Plugins (Model Authentication)

Plugins can register model provider authentication flows so users can run OAuth or API key setup within OpenClaw (without external scripts). Register providers via api.registerProvider(...). Each provider exposes one or more authentication methods (OAuth, API key, device code, etc.). These methods drive:

Example:

Notes:

Registering Message Channels

Plugins can register channel plugins, which behave like built-in channels (WhatsApp, Telegram, etc.). Channel configuration lives under channels.<id> and is validated by your channel plugin code.

Notes:

Writing New Message Channels (Step-by-Step)

Use this when you want a new chat interface ("message channel") rather than a model provider. Model provider documentation is under /providers/*.

  1. Choose id + configuration structure
  1. Define channel metadata
  1. Implement required adapters
  1. Add optional adapters as needed
  1. Register channel in plugin

Minimal configuration example:

Load the plugin (extensions directory or plugins.load.paths), restart Gateway, then configure channels.<id> in your configuration.

Agent Tools

See dedicated guide: Plugin Agent Tools.

Registering Gateway RPC Methods

Registering CLI Commands

Registering Auto-Reply Commands

Plugins can register custom slash commands that execute without calling the AI agent. This is useful for toggle commands, status checks, or quick operations that don't need LLM processing.

Command handler context:

Command options:

Example with authorization and arguments:

Notes:

Registering Background Services

Naming Conventions

Skills

Plugins can ship with Skills in their repo (skills/<name>/SKILL.md). Enable it using plugins.entries.<id>.enabled (or other configuration gating) and ensure it exists in your workspace/hosted Skills location.

Distribution (npm)

Recommended packaging:

Publishing contract:

Example Plugin: Voice Call

This repo contains a voice call plugin (Twilio or log fallback):

See Voice Call and extensions/voice-call/README.md for setup and usage.

Security Considerations

Plugins run in the same process as Gateway. Treat them as trusted code:

Testing Plugins

Plugins can (and should) ship with tests:

For more plugin content, refer to: Plugins - OpenClaw