Plugins

Quick Start

A plugin is simply a small code module that extends OpenClaw with additional functionality (commands, tools, and Gateway RPCs). Most of the time, you will use plugins when you require a feature that is not yet built into the core OpenClaw system (or when you wish to keep optional features separate from the main installation). Quick steps:

  1. Check what is currently loaded:
  1. Install an official plugin (e.g., Voice Call):
  1. Restart the Gateway, then configure the plugin 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 relies on the plugin manifest and JSON Schema. See Plugin Manifest. Plugins can register:

Plugins run within the same process as the Gateway; therefore, treat them as trusted code. Tool Authoring Guide: Plugin Agent Tools.

Runtime Helpers

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

Notes:

Discovery and Priority

OpenClaw scans in the following 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 in the same manner. Each plugin must include an openclaw.plugin.json file in its root directory. If a path points to a specific file, the plugin's root directory is the directory containing that file, which must also contain the manifest. If multiple plugins resolve to the same ID, the first match encountered in the order listed above takes precedence, and lower-priority duplicates are ignored.

Package Collections

A plugin directory can contain a package.json file featuring an openclaw.extensions field:

Each entry in this list becomes a distinct plugin. If a package lists multiple extensions, the plugin ID takes the format name/<fileBase>. If your plugins import npm dependencies, please install them within that directory to ensure the node_modules are available (npm install / pnpm install).

Channel Directory Metadata

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

OpenClaw can also merge external channel catalogs (e.g., MPM registry exports). Place the JSON file in one of the following locations:

Alternatively, set OPENCLAW_PLUGIN_CATALOG_PATHS (or OPENCLAW_MPM_CATALOG_PATHS) to point to one or more JSON files (separated by commas, semicolons, or PATH separators). Each file should contain { "entries": [ { "name": "@scope/pkg", "openclaw": { "channel": {...}, "install": {...} } } ] }.

Plugin ID

Default Plugin ID:

If a plugin exports an id, OpenClaw will use it; however, it will issue a warning if this ID does not match the configured ID.

Configuration

Fields:

Configuration changes require a Gateway restart. Validation Rules (Strict):

Plugin Slots (Exclusive Categories)

Certain plugin categories are exclusive (only one can be active at a time). Use plugins.slots to select which plugin occupies a given slot:

If multiple plugins declare kind: "memory", only the selected one is loaded. The others are disabled and accompanied by diagnostic information.

Control Interface (Schema + Labels)

The control interface utilizes config.schema (JSON Schema + uiHints) to render enhanced forms. At runtime, OpenClaw augments the uiHints based on the plugins it discovers:

If you wish for your plugin's configuration fields to display user-friendly labels and placeholders (and to mark specific keys as sensitive), please provide both uiHints and a JSON Schema within your plugin manifest. Example:

CLI

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

Plugin API (Overview)

Plugins export one of the following:

Plugin Hooks

Plugins can include hooks and register them at runtime. This allows plugins to bundle event-driven automations without the need to install separate hook packages.

Example

Notes:

Provider Plugins (Model Authentication)

Plugins can register model provider authentication workflows, allowing users to complete OAuth or API key setup directly within OpenClaw (without the need for external scripts). Providers are registered via api.registerProvider(...). Each provider exposes one or more authentication methods (OAuth, API keys, device codes, etc.). These methods power the following command:

Example:

Notes:

-

Registering Message Channels

Plugins can register channel plugins, which behave similarly to built-in channels (WhatsApp, Telegram, etc.). Channel configurations are located under channels.<id> and are validated by your channel plugin code.

Important Notes:

Creating a New Messaging Channel (Step-by-Step Guide)

Use this method when you want to create a new chat interface ("messaging channel") rather than a model provider. Documentation for model providers can be found under /providers/*.

  1. Select an ID + Configuration Structure
  1. Define Channel Metadata
  1. Implement Required Adapters
  1. Add Optional Adapters as Needed
  1. Register the Channel within the Plugin

Minimal Configuration Example:

Minimum Channels Plugin (Outbound Only):

Load the plugin (from the extensions directory or plugins.load.paths), restart the Gateway, and then configure channels.<id> within the configuration settings.

Agent Tools

Refer to the dedicated guide: Plugin Agent Tools.

Register Gateway RPC Methods

Register CLI Commands

Registering Automated Response Commands

Plugins can register custom slash commands that execute without invoking an AI agent. This is useful for toggle commands, status checks, or quick actions that do not require LLM processing.

Command Handler Context:

Command Options:

Example with Authorization and Arguments:

Important Notes:

Naming Conventions

Skills

Plugins may ship with associated Skills located within their repository (skills/<name>/SKILL.md). Enable them using plugins.entries.<id>.enabled (or other configuration toggles), and ensure that the Skill file is present in your workspace or designated Skills directory.

Distribution (npm)

Recommended Packaging Strategy:

Publishing Contract:

This repository contains a voice call plugin (supporting Twilio or a log-based fallback):

Refer to Voice Call and extensions/voice-call/README.md for setup and usage instructions.

Security Considerations

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

Testing Plugins

Plugins can (and should) be accompanied by tests:

 

For more information regarding plugins, please refer to: Tools and Plugins - OpenClaw