Плагины (SDK)

Система плагинов OpenClaw позволяет расширять функциональность: добавлять каналы, провайдеры моделей, инструменты, голос и многое другое. Плагины — это npm-пакеты, которые не нужно добавлять в репозиторий OpenClaw. Публикуйте в ClawHub или npm, пользователи устанавливают одной командой.

Что можно сделать с плагином

Возможность Метод регистрации Примеры
Текстовый LLM api.registerProvider(...) openai, anthropic
CLI inference backend api.registerCliBackend(...) openai, anthropic
Канал/мессенджинг api.registerChannel(...) msteams, matrix
Голос (TTS/STT) api.registerSpeechProvider(...) elevenlabs, microsoft
Realtime транскрипция api.registerRealtimeTranscriptionProvider(...) openai
Realtime голос api.registerRealtimeVoiceProvider(...) openai
Медиа-понимание api.registerMediaUnderstandingProvider(...) openai, google
Генерация изображений api.registerImageGenerationProvider(...) openai, google, fal
Генерация видео api.registerVideoGenerationProvider(...) qwen
Web fetch api.registerWebFetchProvider(...) firecrawl
Web search api.registerWebSearchProvider(...) google
Инструменты агента api.registerTool(...) любые
Кастомные команды api.registerCommand(...) любые
HTTP routes api.registerHttpRoute(...) любые
CLI подкоманды api.registerCli(...) любые
Plugin hooks api.on(...) любые

Быстрый старт: создание tool-плагина

1. package.json + манифест


{
  "name": "@myorg/openclaw-my-plugin",
  "version": "1.0.0",
  "type": "module",
  "openclaw": {
    "extensions": ["./index.ts"],
    "compat": {
      "pluginApi": ">=2026.3.24-beta.2",
      "minGatewayVersion": "2026.3.24-beta.2"
    }
  }
}

{
  "id": "my-plugin",
  "name": "My Plugin",
  "description": "Adds a custom tool to OpenClaw",
  "configSchema": {
    "type": "object",
    "additionalProperties": false
  }
}

Манифест нужен всегда, даже без конфига.

2. Точка входа (index.ts)


import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
import { Type } from "@sinclair/typebox";

export default definePluginEntry({
  id: "my-plugin",
  name: "My Plugin",
  description: "Adds a custom tool to OpenClaw",
  register(api) {
    api.registerTool({
      name: "my_tool",
      description: "Do a thing",
      parameters: Type.Object({ input: Type.String() }),
      async execute(_id, params) {
        return { content: [{ type: "text", text: `Got: ${params.input}` }] };
      },
    });
  },
});

Для каналов — defineChannelPluginEntry. Для провайдеров — defineSingleProviderPluginEntry.

3. Тестирование и публикация


# Тест (dry-run)
clawhub package publish your-org/your-plugin --dry-run
# Публикация
clawhub package publish your-org/your-plugin
# Установка
openclaw plugins install clawhub:@myorg/openclaw-my-plugin

OpenClaw проверяет ClawHub перед npm. Bare package specs тоже работают.

Обязательные и опциональные инструменты


register(api) {
  // Обязательный — всегда доступен
  api.registerTool({
    name: "my_tool",
    description: "Always available",
    parameters: Type.Object({ input: Type.String() }),
    async execute(_id, params) {
      return { content: [{ type: "text", text: params.input }] };
    },
  });

  // Опциональный — пользователь должен включить в allowlist
  api.registerTool(
    {
      name: "workflow_tool",
      description: "Run a workflow",
      parameters: Type.Object({ pipeline: Type.String() }),
      async execute(_id, params) {
        return { content: [{ type: "text", text: params.pipeline }] };
      },
    },
    { optional: true },
  );
}

Пользователи включают опциональные инструменты:


{
  "tools": { "allow": ["workflow_tool"] }
}

Все инструменты плагина сразу: "tools": { "allow": ["my-plugin"] }.

Импорты

Всегда импортируйте из конкретных подпутей:


// ✅ Правильно
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
import { createPluginRuntimeStore } from "openclaw/plugin-sdk/runtime-store";

// ❌ Неправильно (deprecated)
import { ... } from "openclaw/plugin-sdk";

Внутри плагина — локальные barrel-файлы (api.ts, runtime-api.ts). Не импортируйте свой плагин через SDK-путь.

Plugin hooks

Хуки позволяют перехватывать события:

Хук Что делает Блокировка
before_tool_call Перед вызовом инструмента { block: true } — стоп, { requireApproval: true } — запрос одобрения
before_install Перед установкой плагина { block: true } — стоп
message_sending Перед отправкой сообщения { cancel: true } — отмена
message_received При получении сообщения

/approve обрабатывает exec и plugin approvals. Если exec approval id не найден — retry через plugin approvals.

Архитектура

Плагиновая система имеет 4 слоя:

  • Manifest + discovery — поиск плагинов в настроенных путях, workspace, глобальных директориях и bundled
  • Enablement + validation — решение: включён, отключён, заблокирован или выбран для exclusive slot
  • Runtime loading — загрузка через jiti, регистрация capabilities в реестре
  • Surface consumption — остальной OpenClaw читает реестр для exposing tools, channels, providers, hooks, routes, commands, services
  • Plugin shapes

    Shape Что регистрирует
    plain-capability Ровно одну capability (например, mistral — только provider)
    hybrid-capability Несколько capabilities (например, openai — text + speech + images)
    hook-only Только хуки, без capabilities
    non-capability Tools, commands, services, но не capabilities

    Проверить: openclaw plugins inspect

    Каналы и shared message tool

    Каналам не нужно регистрировать отдельный send/edit/react tool. OpenClaw держит один общий message tool в core, а каналы владеют channel-specific discovery и execution.

  • Core владеет: shared message tool, prompt wiring, session/thread bookkeeping
  • Каналы владеют: scoped action discovery, capability discovery, channel-specific schema
  • Установка плагинов

    
    openclaw plugins install 
    openclaw plugins list
    openclaw plugins inspect 
    openclaw plugins doctor
    

    OpenClaw проверяет ClawHub, потом npm. Если установка падает с package.json missing openclaw.extensions — плагин использует старый формат. Нужно добавить openclaw.extensions в package.json и указать на built файлы.

    Чеклист перед публикацией

  • package.json содержит правильные openclaw metadata
  • openclaw.plugin.json манифест валидный
  • Точка входа использует definePluginEntry или defineChannelPluginEntry
  • Все импорты через plugin-sdk/
  • Внутренние импорты через локальные модули
  • Тесты проходят
  • 📦 Бандлы плагинов (подробно)

    OpenClaw может устанавливать плагины из трёх внешних экосистем: Codex, Claude и Cursor. Это так называемые бандлы — пакеты контента и метаданных, которые OpenClaw маппит в нативные фичи: навыки, хуки и MCP-инструменты.

    Бандлы — это не то же самое, что нативные плагины OpenClaw. Нативные плагины работают in-process и могут регистрировать любые возможности. Бандлы — это контентные пакеты с выборочным маппингом фич и более узкой границей доверия.

    Зачем существуют бандлы

    Многие полезные плагины публикуются в формате Codex, Claude или Cursor. Вместо того чтобы требовать от авторов переписывать их как нативные — OpenClaw обнаруживает эти форматы и маппит поддерживаемый контент в нативный набор фич. Вы можете установить пакет команд Claude или бандл навыков Codex и использовать его сразу.

    Установка бандла

    Шаг 1. Установите из директории, архива или marketplace.

    # Локальная директория
    openclaw plugins install ./my-bundle
    
    # Архив
    openclaw plugins install ./my-bundle.tgz
    
    # Claude marketplace
    openclaw plugins marketplace list <marketplace-name>
    openclaw plugins install <plugin-name>@<marketplace-name>

    Шаг 2. Проверьте обнаружение.

    openclaw plugins list
    openclaw plugins inspect <id>

    Бандлы показываются как Format: bundle с подтипом codex, claude или cursor.

    Шаг 3. Перезапустите и используйте.

    openclaw gateway restart

    Маппированные фичи (навыки, хуки, MCP-инструменты, LSP-настройки) доступны в следующей сессии.

    Что OpenClaw маппит из бандлов

    Поддерживается сейчас

    Фича Как маппится Форматы
    Навыки Корни навыков бандла загружаются как обычные навыки OpenClaw Все
    Команды commands/ и .cursor/commands/ — как корни навыков Claude, Cursor
    Hook packs OpenClaw-style HOOK.md + handler.ts Codex
    MCP tools MCP-конфиг бандла мержится в embedded Pi; stdio и HTTP серверы загружаются Все
    LSP servers .lsp.json и lspServers из манифеста мержятся в LSP defaults Claude
    Settings settings.json импортируется как defaults для embedded Pi Claude

    Навыки

    • Корни навыков бандла загружаются как обычные корни навыков OpenClaw
    • Claude commands — дополнительные корни навыков
    • Cursor .cursor/commands — дополнительные корни навыков

    Hook packs

    Работают только при использовании стандартного layout hook-pack OpenClaw. Сегодня это в основном Codex-совместимый случай: HOOK.md + handler.ts или handler.js.

    MCP для Pi

    • Включённые бандлы могут предоставлять MCP-конфиг
    • OpenClaw мержит MCP-конфиг бандла в effective embedded Pi settings как mcpServers
    • Поддерживаемые stdio и HTTP серверы запускаются автоматически
    • Локальные настройки Pi перекрывают defaults бандла
    • Каталоги MCP-инструментов сортируются детерминированно для стабильности кеша

    Транспорты:

    • Stdio — запускает дочерний процесс (command + args + env)
    • HTTP — подключается к MCP-серверу через sse (по умолчанию) или streamable-http
    • transport: "streamable-http" или "sse" (по умолчанию)
    • URL только http: и https:
    • headers поддерживают интерполяцию ${ENV_VAR}
    • Запись с command и url одновременно отклоняется
    • URL-креды редактируются из описаний инструментов и логов
    • connectionTimeoutMs переопределяет 30-секундный таймаут

    Именование инструментов:

    MCP-инструменты бандла регистрируются в формате serverName__toolName. Например, сервер "vigil-harbor" с инструментом memory_searchvigil-harbor__memory_search.

    • Символы вне A-Za-z0-9_- заменяются на -
    • Префиксы серверов — до 30 символов
    • Полные имена — до 64 символов
    • Коллизии санитизированных имён разрешаются числовыми суффиксами

    Embedded Pi Settings

    Claude settings.json импортируется как defaults для embedded Pi. Ключи переопределения shell санитизируются: shellPath, shellCommandPrefix.

    Embedded Pi LSP

    Включённые Claude-бандлы могут предоставлять LSP-конфиг. OpenClaw загружает .lsp.json и lspServers из манифеста.

    Обнаружено, но не выполняется

    Эти фичи распознаются и показываются в диагностике, но OpenClaw их не запускает:

    • Claude agents, hooks.json automation, outputStyles
    • Cursor .cursor/agents, .cursor/hooks.json, .cursor/rules
    • Codex inline/app metadata за пределами capability reporting

    Форматы бандлов

    Codex-бандлы

    Маркеры: .codex-plugin/plugin.json

    Опциональный контент: skills/, hooks/, .mcp.json, .app.json

    Лучше всего работают с корнями навыков и OpenClaw-style hook-pack директориями (HOOK.md + handler.ts).

    Claude-бандлы

    Два режима обнаружения:

    • На манифесте: .claude-plugin/plugin.json
    • Без манифеста: стандартный layout Claude (skills/, commands/, agents/, hooks/, .mcp.json, .lsp.json, settings.json)

    Особенности: commands/ — как навыки; settings.json — в embedded Pi; .mcp.json — stdio tools для Pi; hooks/hooks.json — только обнаружение.

    Cursor-бандлы

    Маркеры: .cursor-plugin/plugin.json

    Опциональный контент: skills/, .cursor/commands/, .cursor/agents/, .cursor/rules/, .cursor/hooks.json, .mcp.json

    .cursor/commands/ — как навыки. Остальное — только обнаружение.

    Приоритет обнаружения

    OpenClaw сначала проверяет нативный формат плагина:

    1. openclaw.plugin.json или валидный package.json с openclaw.extensionsнативный плагин
    2. Маркеры бандлов (.codex-plugin/, .claude-plugin/ или стандартный layout) — бандл

    Если директория содержит оба формата — используется нативный путь.

    Безопасность

    Бандлы имеют более узкую границу доверия, чем нативные плагины:

    • OpenClaw не загружает произвольные runtime-модули бандлов in-process
    • Пути навыков и hook-pack должны быть внутри корня плагина (boundary-checked)
    • Файлы настроек читаются с теми же проверками границ
    • Поддерживаемые stdio MCP-серверы могут запускаться как подпроцессы

    Отладка

    Бандл обнаружен, но фичи не работают

    Запустите openclaw plugins inspect <id>. Если фича перечислена, но помечена как not wired — это ограничение продукта, а не сломанная установка.

    Claude command-файлы не появляются

    Убедитесь, что бандл включён и markdown-файлы находятся внутри обнаруженного commands/ или skills/ корня.

    Claude settings не применяются

    Поддерживаются только embedded Pi settings из settings.json. OpenClaw не treats bundle settings как raw config patches.

    Claude hooks не выполняются

    hooks/hooks.json — только обнаружение. Для запускаемых хуков используйте OpenClaw hook-pack layout или нативный плагин.

    Что дальше

  • Каналы: обзор — подключённые мессенджеры
  • Провайдеры и модели — настройка LLM
  • Инструменты: обзор — встроенные инструменты