yahboom
HomeLearn
Solution
Blog
Online Store
About Us
EN/中文
Jetson Orin NX SUPER📖
01.Get started
  • 01. Learning route
  • 02. Get started quickly
  • 03. System Update Notes
  • 04.Disabling automatic updates and troubleshooting issues
02.Jetson basic course
  • 01.Jetson board introduction
  • 02.Write Jetson original system
  • 03.Installing Jetson environment
  • 04.Backup SSD system
  • 05.Restore initial image system
  • 06.Upgrade to SUPER version
  • 07.Write SUPER boot
  • 08.SSD expansion
  • 09.Jetpack old system upgraded to Yahboom SUPER factory system
  • 10.Write the system onto your own solid-state drive
03.Basic setting course
  • 01.Basic knowledge
  • 02.Network configuration
  • 03.SSH remote login
  • 04.VNC remote control
  • 05.Remote file transfer
  • 06.Jtop tool
  • 07.Exchange space expansion
  • 08.Use VSCode
  • 09.Use VMware
04.GPIO control course
  • 01.GPIO description
  • 02.GPIO library installation
  • 03.GPIO reading
  • 04.GPIO output
  • 05.Serial communication
  • 06.I2C communication
05.Vision basic course
  • 01.CSI camera preview
  • 02.USB camera preview
  • 03.Use Jupyter Lab
  • 04.Use JetCam
06.OpenCV basic course
  • 01.Image reading
  • 02.Image saving
  • 03.Image modification
  • 04.Image scaling
  • 05.Image cropping
  • 06.Image translation
  • 07.Image mirroring
  • 08.Image grayscale conversion
  • 09.Image binarization
  • 10.Image edge detection
  • 11.Add line segments
  • 12.Add rectangles
  • 13.Add circular shape
  • 14.Add ellipses
  • 15.Add polygons
  • 16.Add Text
  • 17.Preview USB camera image
  • 18.Preview CSI camera image
07.Vision advanced course
01.Environment construction
  • 01.TensorFlow
  • 02.PyTorch
  • 03.Torchvision
02.DeepStream development
  • 01.DeepStream environment
  • 02.Four types of detection(traffic)
03.YOLO11 development
  • 01.YOLO environment construction
  • 02.CLI use
  • 03.Object detection
  • 04.Instance segmentation
  • 05.Pose estimation
  • 06.Image classification
  • 07.Oriented object detection
  • 08.Model conversion
  • 09.Dataset annotation
  • 10.Model training conversion
  • 11.Model prediction
04.Mediapipe development
  • 01.Mediapipe environment
  • 02.Hand detection
  • 03.Face detection
  • 04.Face effects
  • 05.3D object recognition
  • 06.Virtual brush
  • 07.Gesture recognition
  • 08.Finger control
  • 09.Posture estimation
  • 10.Face mask
  • 11.Overall detection
  • 12.Green scene removal(Human)
05.QR code recognition
  • 01.QR code recognition
06.YOLO26 development
  • 01.YOLO environment constructionnew
  • 02.CLI usenew
  • 03.Object detectionnew
  • 04.Instance segmentationnew
  • 05.Pose estimationnew
  • 06.Image classificationnew
  • 07.Oriented object detectionnew
  • 08.Model conversionnew
  • 09.Dataset annotationnew
  • 10.Model training conversionnew
  • 11.Model predictionnew
08.Docker basic course
  • 01.Docker introduction
  • 02.Docker installation
  • 03.Docker command
  • 04.Docker usage
  • 05.Docker interaction
09.ROS1-Melodic
01.ROS1 basic course
  • 01. Introduction to ROS
  • 02. Project file structure
  • 03. Common commands and tools
  • 04. Publisher
  • 05. Subscribers
  • 06. Customize topic messages and use
  • 07. Client
  • 08. Server
  • 09. Customize service messages and usage
  • 10. TF release and monitoring
02.ROS1 vision course
  • 00.Must read before running
  • 01.Camera preview
  • 02.QR code
  • 03.Human posture estimation
  • 04.Target detection
  • 05.AR vision
  • 06.Opencv application
  • 07.ROS+Opencv basics
  • 08.Mediapipe development
10.ROS2-Humble
01.ROS2 basic course
  • 01.Introduction to ROS2
  • 02.ROS2 install Humble
  • 03.ROS2 development environment
  • 04.ROS2 workspace
  • 05.ROS2 function package
  • 06.ROS2 node
  • 07.ROS2 topic communication
  • 08.ROS2 service communication
  • 09.ROS2 action communication
  • 10.ROS2 custom interface message
  • 11.ROS2 parameter service case
  • 12.ROS2 meta-function package
  • 13.ROS2 distributed communication
  • 14.ROS2 DDS
  • 15.ROS2 time related API
  • 16.ROS2 common command tools
  • 17.ROS2 rviz2 use
  • 18.ROS2 rqt toolbox
  • 19.ROS2 Launch startup file configuration
  • 20.ROS2 recording and playback tool
  • 21.ROS2 URDF model
  • 22.ROS2 Gazebo simulation platform
  • 23.ROS2 TF2 coordinate transformation
02.ROS2 vision course
  • 01.Camera preview (USB)
  • 02.Camera preview (CSI)
  • 03.Camera calibration (USB)
  • 04.Camera calibration (CSI)
  • 05.AR vision (USB)
  • 06.AR vision (CSI)
11.Offline AI model coursenew
Offline large model (Text Interaction)
  • 1.AI large model environment deployment
  • 2.Install large model dialogue platform
  • 3.Meta Al Llama3.2 model
  • 4.Alibaba Cloud Qwen3 model
  • 5.Microsoft Phi-4-mini model
  • 6.DeepSeek DeepSeek-R1 model
  • 7.Alibaba Cloud Qwen2.5v visual multimodal large model
  • 8.Google Gemma3 visual multimodal large model
  • 9.Lava visual multimodal large model
  • 10.MiniCPM-V visual multimodal large model
  • 11.Multimodal visual understand application
  • 12.Multimodal text image application
  • 13.Multimodal video analysis application
  • 14.Multi module visual position application
  • 15.Multimodal table scanning application
  • 16.Multimodal autonomous agent application
Offline large model (Voice Interaction)
  • 0.Voice interaction hardware connection (ReadMe)
  • 1.Offline speech to text (ASR)
  • 2.Offline text to speech (TTS)
  • 3.AI large model voice interaction
  • 4.Multimodal visual understand speech interaction
  • 5.Multimodal text and graphics application
  • 6.Multimodal video analysis application
  • 7.Multi module visual position application
  • 8.Multimodal table scanning application
  • 9.Multimodal autonomous proxy application
  • 10.AI large model offline voice assistant
12.Online AI model coursenew
Online large model (Text Interaction)
  • 1.OpenRouter large model API aggregation platform
  • 2.Multimodal visual understand application
  • 3.Multimodal visual localization application
  • 4.Multimodal table scanning application
  • 5.Multimodal autonomous proxy application
Online large model (Voice Interaction)
  • 0.Voice interaction hardware connection (ReadMe)
  • 1.Online speech to text (ASR)
  • 2.Online text to speech (TTS)
  • 3.AI large model voice interaction
  • 4.Multimodal visual understand speech interaction
  • 5.Multi module visual position application
  • 6.Multimodal table scanning application
  • 7.Multimodal autonomous proxy application
  • 8.AI large model online voice assistant
13.NVIDIA lsaac ROS coursenew
  • 1.Build lsaac ROS environment
  • 2.Deep segmentation
  • 3.DNN stereoscopic depth
  • 4.Free space segmentation
  • 5.Image distortion processing
  • 6.Image segmentation
  • 7.3D scene reconstruction and mapping
  • 8.Object detection
  • 9.3D attitude estimation
  • 10.Visual SLAM
14.OpenClaw Deployment and Basic Usagenew
  • 01.OpenClaw Quick Start on Jetson Platform
  • 02.OpenClaw Deployment
  • 03.OpenClaw WhatsApp Plugin Application
  • 04.OpenClaw WebChat Interaction
  • 05.OpenClaw TUI Interaction
  • 06.OpenClaw Tools Introduction
  • 07.OpenClawGate Gateway User Manual
  • 08.OpenClaw Features Overview
  • 09.OpenClawHub Introduction (Skill Installation)
  • 10.OpenClaw Application - File Management
  • 11.OpenClaw Application - Camera
  • 12.OpenClaw Application - Browser Control
  • 13.OpenClaw Application - Script Execution
  • 14.OpenClaw Application - AI Programming (Peripheral & GPIO Control)
  • 15.OpenClaw Application - Dedicated AI Assistant
  • 16.OpenClaw Web Search Capability Configuration
15.OpenClaw Advanced Developmentnew
1.Preparation Before Use
  • 1. Peripheral Hardware Configuration
  • 2. OpenClaw API Key Configuration
  • 3. OpenClaw Model Switching
  • 4. OpenClaw Prompts
  • 5. AI Voice Interaction Configuration
  • 6. Three Dialogue Configuration Tests
2.OpenClaw AI Programming Peripheral Control
  • 1. Servo Control
  • 2. RGB Strip
  • 3. OLED Display
  • 4. Temperature and Humidity Sensor
  • 5. Camera Application
  • 6. AI Script Peripheral Control
3.OpenClaw Peripheral Integration Applications
  • 1. Plant Care Assistant
  • 2. AI Calorie Estimation
  • 3. AI Rock Paper Scissors Game
  • 4. AI Pet
  • 5. AI Weather Station
  • 6. Temperature and Humidity Dashboard
  • 7. Scheduled Tasks
Download
  • System_File
  • VM_File
  • 3D_Model_File
  • Data_Sheet_File
  • Software_Tools
  • Code
  • Instruction_Manual
  • ROS2_Basic_VM
Download ZIP

Welcome to Jetson Orin NX SUPER repository

当製品の日本語版マニュアル資料は、こちらからご取得ください。

08.OpenClaw Features Overview

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:
openclaw plugins list
  1. Install an official plugin (e.g., Voice Call):
xxxxxxxxxx
openclaw plugins install @openclaw/voice-call
  1. Restart the Gateway, then configure the plugin under plugins.entries.<id>.config.

 

Available Plugins (Official)

  • As of January 15, 2026, Microsoft Teams is available exclusively as a plugin; if you use Teams, please install @openclaw/msteams. - Memory (Core) — Bundled memory search plugin (enabled by default via plugins.slots.memory)
  • Memory (LanceDB) — Bundled long-term memory plugin (automatic recall/capture; set plugins.slots.memory = "memory-lancedb")
  • Voice Call — @openclaw/voice-call
  • Zalo Personal — @openclaw/zalouser
  • Matrix — @openclaw/matrix
  • Nostr — @openclaw/nostr
  • Zalo — @openclaw/zalo
  • Microsoft Teams — @openclaw/msteams
  • Google Antigravity OAuth (Provider Authentication) — Bundled as google-antigravity-auth (disabled by default)
  • Gemini CLI OAuth (Provider Authentication) — Bundled as google-gemini-cli-auth (disabled by default)
  • Qwen OAuth (Provider Authentication) — Bundled as qwen-portal-auth (disabled by default)
  • Copilot Proxy (Provider Authentication) — Local VS Code Copilot Proxy bridge; distinct from the built-in github-copilot device login (bundled, disabled by default)

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:

  • Gateway RPC methods
  • Gateway HTTP handlers
  • Agent tools
  • CLI commands
  • Background services
  • Optional configuration validation
  • Skills (by listing the skills directory in the plugin manifest)
  • Auto-reply commands (executed without invoking the AI ​​agent)

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:

xxxxxxxxxx
const result = await api.runtime.tts.textToSpeechTelephony({
text: "Hello from OpenClaw",
cfg: api.config,
});

Notes:

  • Uses the core messages.tts configuration (OpenAI or ElevenLabs).
  • Returns a PCM audio buffer + sample rate. Plugins must handle resampling/encoding for the specific provider.
  • Edge TTS does not support telephony.

Discovery and Priority

OpenClaw scans in the following order:

  1. Configuration Paths
  • plugins.load.paths (files or directories)
  1. Workspace Extensions
  • <workspace>/.openclaw/extensions/*.ts
  • <workspace>/.openclaw/extensions/*/index.ts
  1. Global Extensions
  • ~/.openclaw/extensions/*.ts
  • ~/.openclaw/extensions/*/index.ts
  1. Bundled Extensions (shipped with OpenClaw; disabled by default)
  • <openclaw>/extensions/*

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:

xxxxxxxxxx
{
  "name": "my-pack",
  "openclaw": {
    "extensions": ["./src/safety.ts", "./src/tools.ts"]
  }
}

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:

xxxxxxxxxx
{
  "name": "@openclaw/nextcloud-talk",
  "openclaw": {
    "extensions": ["./index.ts"],
    "channel": {
      "id": "nextcloud-talk",
      "label": "Nextcloud Talk",
      "selectionLabel": "Nextcloud Talk (self-hosted)",
      "docsPath": "/channels/nextcloud-talk",
      "docsLabel": "nextcloud-talk",
      "blurb": "Self-hosted chat via Nextcloud Talk webhook bots.",
      "order": 65,
      "aliases": ["nc-talk", "nc"]
    },
    "install": {
      "npmSpec": "@openclaw/nextcloud-talk",
      "localPath": "extensions/nextcloud-talk",
      "defaultChoice": "npm"
    }
  }
}

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

  • ~/.openclaw/mpm/plugins.json
  • ~/.openclaw/mpm/catalog.json
  • ~/.openclaw/plugins/catalog.json

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:

  • Package Collection: The name field in package.json
  • Standalone File: The file's base name (~/.../voice-call.ts → voice-call)

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

xxxxxxxxxx
{
  plugins: {
    enabled: true,
    allow: ["voice-call"],
    deny: ["untrusted-plugin"],
    load: { paths: ["~/Projects/oss/voice-call-extension"] },
    entries: {
      "voice-call": { enabled: true, config: { provider: "twilio" } },
    },
  },
}

Fields:

  • enabled: Master switch (Default: true)
  • allow: Allowlist (Optional)
  • deny: Denylist (Optional; deny takes precedence)
  • load.paths: Additional plugin files/directories
  • entries.<id>: Per-plugin switch + configuration

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

  • Unknown plugin IDs within entries, allow, deny, or slots constitute an error.
  • Unknown channels.<id> keys constitute an error, unless the plugin manifest declares the channel ID.
  • Plugin configurations are validated using the JSON Schema embedded within openclaw.plugin.json (configSchema).
  • If a plugin is disabled, its configuration is retained, and a warning is issued.

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:

xxxxxxxxxx
{
  plugins: {
    slots: {
      memory: "memory-core", // or "none" to disable memory plugins
    },
  },
}

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:

  • It adds per-plugin labels for plugins.entries.<id>, .enabled, and .config.
  • It merges optional configuration field hints provided by plugins at the following locations: plugins.entries.<id>.config.<field>.

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:

xxxxxxxxxx
{
  "id": "my-plugin",
  "configSchema": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "apiKey": { "type": "string" },
      "region": { "type": "string" }
    }
  },
  "uiHints": {
    "apiKey": { "label": "API Key", "sensitive": true },
    "region": { "label": "Region", "placeholder": "us-east-1" }
  }
}

CLI

xxxxxxxxxx
openclaw plugins list
openclaw plugins info <id>
openclaw plugins install <path>                 # copy a local file/dir into ~/.openclaw/extensions/<id>
openclaw plugins install ./extensions/voice-call # relative path ok
openclaw plugins install ./plugin.tgz           # install from a local tarball
openclaw plugins install ./plugin.zip           # install from a local zip
openclaw plugins install -l ./extensions/voice-call # link (no copy) for dev
openclaw plugins install @openclaw/voice-call # install from npm
openclaw plugins update <id>
openclaw plugins update --all
openclaw plugins enable <id>
openclaw plugins disable <id>
openclaw plugins doctor

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:

  • A function: (api) => { ... }
  • An object: { id, name, configSchema, register(api) { ... } }

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

​x
import { registerPluginHooksFromDir } from "openclaw/plugin-sdk";
​
export default function register(api) {
  registerPluginHooksFromDir(api, "./hooks");
}

Notes:

  • Hook directories follow the standard hook structure (HOOK.md + handler.ts).
  • Hook eligibility rules still apply (OS/binary/environment/configuration requirements).
  • Hooks managed by plugins appear as plugin:<id> in the openclaw hooks list output.
  • You cannot enable or disable plugin-managed hooks directly via openclaw hooks; instead, you enable or disable the plugin itself.

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:

  • openclaw models auth login --provider <id> [--method <id>]

Example:

xxxxxxxxxx
api.registerProvider({
  id: "acme",
  label: "AcmeAI",
  auth: [
    {
      id: "oauth",
      label: "OAuth",
      kind: "oauth",
      run: async (ctx) => {
        // Run OAuth flow and return auth profiles.
        return {
          profiles: [
            {
              profileId: "acme:default",
              credential: {
                type: "oauth",
                provider: "acme",
                access: "...",
                refresh: "...",
                expires: Date.now() + 3600 * 1000,
              },
            },
          ],
          defaultModel: "acme/opus-1",
        };
      },
    },
  ],
});

Notes:

  • run receives a ProviderAuthContext containing the prompter, runtime, openUrl, and oauth.createVpsAwareHandlers utility helpers.
  • Return a configPatch when you need to add default model or provider configurations.
  • Return a defaultModel so that --set-default can update the Agent's default values.

-

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.

xxxxxxxxxx
const myChannel = {
  id: "acmechat",
  meta: {
    id: "acmechat",
    label: "AcmeChat",
    selectionLabel: "AcmeChat (API)",
    docsPath: "/channels/acmechat",
    blurb: "demo channel plugin.",
    aliases: ["acme"],
  },
  capabilities: { chatTypes: ["direct"] },
  config: {
    listAccountIds: (cfg) => Object.keys(cfg.channels?.acmechat?.accounts ?? {}),
    resolveAccount: (cfg, accountId) =>
      cfg.channels?.acmechat?.accounts?.[accountId ?? "default"] ?? {
        accountId,
      },
  },
  outbound: {
    deliveryMode: "direct",
    sendText: async () => ({ ok: true }),
  },
};
​
export default function (api) {
  api.registerChannel({ plugin: myChannel });
}

Important Notes:

  • Place your configuration under channels.<id> (rather than plugins.entries).
  • meta.label is used for the labels displayed in CLI/UI lists.
  • meta.aliases adds alternative IDs used for normalization and CLI input.
  • meta.preferOver lists the IDs of channels to be skipped for auto-activation when both are configured.
  • meta.detailLabel and meta.systemImage allow the UI to display richer channel labels and icons.

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
  • All channel configurations reside under channels.<id>.
  • For multi-account setups, prioritize using channels.<id>.accounts.<accountId>.
  1. Define Channel Metadata
  • meta.label, meta.selectionLabel, meta.docsPath, and meta.blurb control how the channel appears in CLI/UI lists.
  • meta.docsPath should point to a documentation page, such as /channels/<id>.
  • meta.preferOver allows your plugin to supersede another channel (ensuring it is automatically selected first).
  • meta.detailLabel and meta.systemImage are used by the UI for displaying detailed text and icons.
  1. Implement Required Adapters
  • config.listAccountIds + config.resolveAccount
  • capabilities (chat types, media support, threading, etc.)
  • outbound.deliveryMode + outbound.sendText (for basic message sending)
  1. Add Optional Adapters as Needed
  • setup (setup wizards), security (private messaging policies), status (health/diagnostics)
  • gateway (start/stop/login), mentions, threading, streaming
  • actions (message actions), commands (native command behaviors)
  1. Register the Channel within the Plugin
  • api.registerChannel({ plugin })

Minimal Configuration Example:

xxxxxxxxxx
{
  channels: {
    acmechat: {
      accounts: {
        default: { token: "ACME_TOKEN", enabled: true },
      },
    },
  },
}

Minimum Channels Plugin (Outbound Only):

xxxxxxxxxx
const plugin = {
  id: "acmechat",
  meta: {
    id: "acmechat",
    label: "AcmeChat",
    selectionLabel: "AcmeChat (API)",
    docsPath: "/channels/acmechat",
    blurb: "AcmeChat messaging channel.",
    aliases: ["acme"],
  },
  capabilities: { chatTypes: ["direct"] },
  config: {
    listAccountIds: (cfg) => Object.keys(cfg.channels?.acmechat?.accounts ?? {}),
    resolveAccount: (cfg, accountId) =>
      cfg.channels?.acmechat?.accounts?.[accountId ?? "default"] ?? {
        accountId,
      },
  },
  outbound: {
    deliveryMode: "direct",
    sendText: async ({ text }) => {
      // deliver `text` to your channel here
      return { ok: true };
    },
  },
};
​
export default function (api) {
  api.registerChannel({ plugin });
}

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

xxxxxxxxxx
export default function (api) {
  api.registerGatewayMethod("myplugin.status", ({ respond }) => {
    respond(true, { ok: true });
  });
}

Register CLI Commands

xxxxxxxxxx
export default function (api) {
  api.registerCli(
    ({ program }) => {
      program.command("mycmd").action(() => {
        console.log("Hello");
      });
    },
    { commands: ["mycmd"] },
  );
}

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.

xxxxxxxxxx
export default function (api) {
  api.registerCommand({
    name: "mystatus",
    description: "Show plugin status",
    handler: (ctx) => ({
      text: `Plugin is running! Channel: ${ctx.channel}`,
    }),
  });
}

Command Handler Context:

  • senderId: The sender's ID (if available)
  • channel: The channel where the command was sent
  • isAuthorizedSender: Whether the sender is an authorized user
  • args: Arguments passed after the command (if acceptsArgs: true)
  • commandBody: The full text of the command
  • config: The current OpenClaw configuration

Command Options:

  • name: The command name (without the leading /)
  • description: The help text displayed in the command list
  • acceptsArgs: Whether the command accepts arguments (Default: false). If false and arguments are provided, the command will not match, and the message will be passed to other handlers.
  • requireAuth: Whether the sender must be authorized (Default: true)
  • handler: A function that returns { text: string } (can be asynchronous)

Example with Authorization and Arguments:

xxxxxxxxxx
api.registerCommand({
  name: "setmode",
  description: "Set plugin mode",
  acceptsArgs: true,
  requireAuth: true,
  handler: async (ctx) => {
    const mode = ctx.args?.trim() || "default";
    await saveMode(mode);
    return { text: `Mode set to: ${mode}` };
  },
});

Important Notes:

  • Plugin commands are processed before built-in commands and AI agents.
  • Commands are registered globally and apply to all channels.
  • Command names are case-insensitive (/MyStatus matches /mystatus).
  • Command names must begin with a letter and may only contain letters, numbers, hyphens, and underscores.
  • Reserved command names (e.g., help, status, reset, etc.) cannot be overridden by plugins.
  • Duplicate command registrations across different plugins will fail and display a diagnostic error.
  • Registering Background Services
xxxxxxxxxx
export default function (api) {
  api.registerService({
    id: "my-service",
    start: () => api.logger.info("ready"),
    stop: () => api.logger.info("bye"),
  });
}

Naming Conventions

  • Gateway Methods: pluginId.action (e.g., voicecall.status)
  • Tools: snake_case (e.g., voice_call)
  • CLI Commands: kebab-case or camelCase, but avoid conflicts with core commands.

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:

  • Core Package: openclaw (this repository)
  • Plugins: Independent npm packages under the @openclaw/* scope (e.g., @openclaw/voice-call)

Publishing Contract:

  • A plugin's package.json must include an openclaw.extensions field specifying one or more entry files.
  • Entry files may be either .js or .ts (jiti is used to load TypeScript files at runtime).
  • The openclaw plugins install <npm-spec> command executes npm pack, extracts the package contents to ~/.openclaw/extensions/<id>/, and automatically enables the plugin within the configuration.
  • Configuration Key Stability: Scoped packages are normalized to an unscoped ID for use within the plugins.entries.* configuration keys. ## Example Plugin: Voice Call

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

  • Source Code: extensions/voice-call
  • Skills: skills/voice-call
  • CLI: openclaw voicecall start|status
  • Tool: voice_call
  • RPC: voicecall.start, voicecall.status
  • Configuration (Twilio): provider: "twilio" + twilio.accountSid/authToken/from (optional: statusCallbackUrl, twimlUrl)
  • Configuration (Dev): provider: "log" (offline mode)

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:

  • Only install plugins that you trust.
  • Prioritize using the plugins.allow allowlist.
  • Restart the Gateway after making changes.

Testing Plugins

Plugins can (and should) be accompanied by tests:

  • Plugins located within this repository can keep their Vitest tests under src/** (e.g., src/plugins/voice-call.plugin.test.ts).
  • Independently published plugins should run their own CI (lint/build/test) and verify that openclaw.extensions points to the built entry point (dist/index.js).

 

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

OpenClawGate Gateway User Manual
OpenClawHub Introduction (Skill Installation)

COMPANY

  • About us
  • Team Style
  • Blog

LEARNING & EXPLORATION

  • Tutorials
  • Edge AI hardware
  • Educational robots
  • Embedded intelligent hardware

WHERE TO BUY

  • Yahboom Online Store
  • Amazon
  • Alibaba
  • AliExpress
  • Mercado

TECHNOLOGY SUPPORT

  • Email: support@yahboom.com

BE A DISTRIBUTOR

  • Email: sales@yahboom.com
QR Code
QR Code

Copyright © 2017-2026 Yahboom. All Rights Reserved.

EN/中文