Install and use plugins
Руководство для конечных пользователей по добавлению, включению и устранению неполадок плагинов.
Building plugins
Руководство по первому плагину с минимальным рабочим манифестом.
Channel plugins
Создайте плагин канала сообщений.
Provider plugins
Создайте плагин поставщика моделей.
SDK overview
Справочник по карте импортов и API регистрации.
Публичная модель возможностей
Возможности — это публичная модель нативных плагинов внутри OpenClaw. Каждый нативный плагин OpenClaw регистрируется для одного или нескольких типов возможностей:| Возможность | Метод регистрации | Примеры плагинов |
|---|---|---|
| Текстовый инференс | api.registerProvider(...) | openai, anthropic |
| Бэкенд инференса CLI | api.registerCliBackend(...) | openai, anthropic |
| Эмбеддинги | api.registerEmbeddingProvider(...) | Векторные плагины, принадлежащие поставщику |
| Речь | api.registerSpeechProvider(...) | elevenlabs, microsoft |
| Транскрипция в реальном времени | api.registerRealtimeTranscriptionProvider(...) | openai |
| Голос в реальном времени | api.registerRealtimeVoiceProvider(...) | openai |
| Понимание медиа | api.registerMediaUnderstandingProvider(...) | openai, google |
| Источник транскриптов | api.registerTranscriptSourceProvider(...) | discord |
| Генерация изображений | api.registerImageGenerationProvider(...) | openai, google, fal, minimax |
| Генерация музыки | api.registerMusicGenerationProvider(...) | google, minimax |
| Генерация видео | api.registerVideoGenerationProvider(...) | qwen |
| Получение данных из Web | api.registerWebFetchProvider(...) | firecrawl |
| Поиск в Web | api.registerWebSearchProvider(...) | google |
| Канал / обмен сообщениями | api.registerChannel(...) | msteams, matrix |
| Обнаружение Gateway | api.registerGatewayDiscoveryService(...) | bonjour |
Плагин, который не регистрирует ни одной возможности, но предоставляет хуки, инструменты, службы обнаружения или фоновые службы, является устаревшим плагином только с хуками. Этот паттерн по-прежнему полностью поддерживается.
Позиция по внешней совместимости
Модель возможностей уже включена в ядро и сегодня используется встроенными/нативными плагинами, но совместимость внешних плагинов всё еще требует более строгого критерия, чем «это экспортируется, значит, это заморожено».| Ситуация с плагином | Рекомендация |
|---|---|
| Существующие внешние плагины | Сохраняйте работоспособность интеграций на основе хуков; это базовый уровень совместимости. |
| Новые встроенные/нативные плагины | Предпочитайте явную регистрацию возможностей вместо обращений к вендор-специфичным внутренним деталям или новых решений только на хуках. |
| Внешние плагины, переходящие на регистрацию возможностей | Разрешено, но считайте вспомогательные поверхности для конкретных возможностей развивающимися, если документация не помечает их как стабильные. |
Формы плагинов
OpenClaw классифицирует каждый загруженный плагин по форме на основе его фактического поведения регистрации, а не только статических метаданных:plain-capability
plain-capability
Регистрирует ровно один тип возможности (например, плагин только поставщика, такой как
mistral).hybrid-capability
hybrid-capability
Регистрирует несколько типов возможностей (например,
openai владеет текстовым инференсом, речью, пониманием медиа и генерацией изображений).hook-only
hook-only
Регистрирует только хуки (типизированные или пользовательские), без возможностей, инструментов, команд или служб.
non-capability
non-capability
Регистрирует инструменты, команды, службы или маршруты, но без возможностей.
openclaw plugins inspect <id>, чтобы увидеть форму плагина и разбивку его возможностей. Подробности см. в справочнике CLI.
Устаревшие хуки
Хукbefore_agent_start остается поддерживаемым как путь совместимости для плагинов только с хуками. Устаревшие реальные плагины всё еще зависят от него.
Направление:
- поддерживать его работоспособность
- документировать его как устаревший
- предпочитать
before_model_resolveдля работы с переопределением модели/поставщика - предпочитать
before_prompt_buildдля работы с изменением промпта - удалять только после снижения реального использования и подтверждения безопасности миграции покрытием фикстур
Сигналы совместимости
При запускеopenclaw doctor или openclaw plugins inspect <id> вы можете увидеть одну из этих меток:
| Сигнал | Значение |
|---|---|
| config valid | Конфигурация успешно разбирается, а плагины разрешаются |
| compatibility advisory | Плагин использует поддерживаемый, но более старый паттерн (например, hook-only) |
| legacy warning | Плагин использует before_agent_start, который объявлен устаревшим |
| hard error | Конфигурация недействительна или плагин не загрузился |
hook-only, ни before_agent_start сегодня не сломают ваш плагин: hook-only носит рекомендательный характер, а before_agent_start только вызывает предупреждение. Эти сигналы также появляются в openclaw status --all и openclaw plugins doctor.
Обзор архитектуры
Система плагинов OpenClaw состоит из четырех уровней:Manifest + discovery
OpenClaw находит кандидаты в плагины из настроенных путей, корней рабочих областей, глобальных корней плагинов и встроенных плагинов. Обнаружение сначала читает нативные манифесты
openclaw.plugin.json, а также поддерживаемые манифесты бандлов.Enablement + validation
Ядро решает, будет ли обнаруженный плагин включен, отключен, заблокирован или выбран для эксклюзивного слота, такого как память.
Runtime loading
Нативные плагины OpenClaw загружаются внутри процесса и регистрируют возможности в центральном реестре. Упакованный JavaScript загружается через нативный
require; сторонний локальный исходный TypeScript использует аварийный fallback Jiti. Совместимые бандлы нормализуются в записи реестра без импорта runtime-кода.- метаданные времени разбора поступают из
registerCli(..., { descriptors: [...] }) - настоящий модуль CLI плагина может оставаться ленивым и регистрироваться при первом вызове
- проверка манифеста/конфигурации должна работать на основе метаданных манифеста/схемы без выполнения кода плагина
- обнаружение нативных возможностей может загружать доверенный входной код плагина, чтобы построить неактивирующий снимок реестра
- нативное runtime-поведение поступает из пути
register(api)модуля плагина сapi.registrationMode === "full"
Снимок метаданных плагинов и таблица поиска
При запуске Gateway строит одинPluginMetadataSnapshot для текущего снимка конфигурации. Снимок содержит только метаданные: он хранит индекс установленных плагинов, реестр манифестов, диагностику манифестов, карты владельцев, нормализатор id плагинов и записи манифестов. Он не содержит загруженные модули плагинов, SDK поставщиков, содержимое пакетов или runtime-экспорты.
Проверка конфигурации с учетом плагинов, автоматическое включение при запуске и начальная загрузка плагинов Gateway используют этот снимок вместо независимой повторной сборки метаданных манифеста/индекса. PluginLookUpTable выводится из того же снимка и добавляет план запуска плагинов для текущей runtime-конфигурации.
После запуска Gateway хранит текущий снимок метаданных как заменяемый runtime-продукт. Повторное runtime-обнаружение поставщиков может заимствовать этот снимок вместо реконструкции установленного индекса и реестра манифестов для каждого прохода каталога поставщиков. Снимок очищается или заменяется при завершении работы Gateway, изменениях конфигурации/инвентаря плагинов и записях установленного индекса; вызывающие стороны возвращаются к холодному пути манифеста/индекса, когда совместимого текущего снимка нет. Проверки совместимости должны включать корни обнаружения плагинов, такие как plugins.load.paths, и рабочую область агента по умолчанию, потому что плагины рабочей области входят в область метаданных.
Снимок и таблица поиска удерживают повторяющиеся решения запуска на быстром пути:
- владение каналом
- отложенный запуск канала
- id плагинов запуска
- владение поставщиком и бэкендом CLI
- владение поставщиком настройки, псевдонимом команды, поставщиком каталога моделей и контрактом манифеста
- проверка схемы конфигурации плагина и схемы конфигурации канала
- решения автоматического включения при запуске
PluginLookUpTable от Gateway. Теперь этот путь реконструирует реестр по требованию; предпочитайте передавать текущую таблицу поиска или явный реестр манифестов через runtime-потоки, когда вызывающая сторона уже располагает одним из них.
Планирование активации
Планирование активации является частью плоскости управления. Вызывающие стороны могут запросить, какие плагины релевантны конкретной команде, поставщику, каналу, маршруту, harness агента или возможности, до загрузки более широких runtime-реестров. Планировщик сохраняет совместимость с текущим поведением манифестов:- поля
activation.*являются явными подсказками планировщику providers,channels,commandAliases,setup.providers,contracts.toolsи хуки остаются резервным механизмом владения на уровне манифеста- API планировщика только с идентификаторами остается доступным для существующих вызывающих сторон
- API плана сообщает метки причин, чтобы диагностика могла отличать явные подсказки от резервного механизма владения
Канальные плагины и общий инструмент сообщений
Канальным плагинам не нужно регистрировать отдельный инструмент отправки, редактирования или реакции для обычных действий чата. OpenClaw хранит один общий инструментmessage в ядре, а канальные плагины владеют специфичными для канала обнаружением и выполнением за ним.
Текущая граница такова:
- ядро владеет хостом общего инструмента
message, подключением промпта, учетом сессий/тредов и диспетчеризацией выполнения - канальные плагины владеют обнаружением действий в области видимости, обнаружением возможностей и любыми специфичными для канала фрагментами схемы
- канальные плагины владеют грамматикой разговоров сессий, специфичной для провайдера, например тем, как идентификаторы разговоров кодируют идентификаторы тредов или наследуются от родительских разговоров
- канальные плагины выполняют итоговое действие через свой адаптер действий
ChannelMessageActionAdapter.describeMessageTool(...). Этот унифицированный вызов обнаружения позволяет плагину вернуть видимые действия, возможности и вклады в схему вместе, чтобы эти части не расходились.
Когда специфичный для канала параметр инструмента сообщений несет медиаисточник, например локальный путь или удаленный URL медиа, плагин также должен вернуть mediaSourceParams из describeMessageTool(...). Ядро использует этот явный список, чтобы применять нормализацию путей песочницы и подсказки для исходящего доступа к медиа без жестко заданных имен параметров, принадлежащих плагину. Предпочитайте там карты в области действия, а не один плоский список на весь канал, чтобы параметр медиа только для профиля не нормализовался в несвязанных действиях вроде send.
Ядро передает область видимости времени выполнения в этот шаг обнаружения. Важные поля включают:
accountIdcurrentChannelIdcurrentThreadTscurrentMessageIdsessionKeysessionIdagentId- доверенный входящий
requesterSenderId
message.
Именно поэтому изменения маршрутизации встроенного раннера все еще являются работой плагина: раннер отвечает за передачу текущей идентичности чата/сессии в границу обнаружения плагина, чтобы общий инструмент message показывал правильную поверхность, принадлежащую каналу, для текущего хода.
Для принадлежащих каналу вспомогательных средств выполнения встроенные плагины должны держать среду выполнения внутри собственных модулей расширения. Ядро больше не владеет средами выполнения действий сообщений Discord, Slack, Telegram или WhatsApp в src/agents/tools. Мы не публикуем отдельные подпути plugin-sdk/*-action-runtime, и встроенные плагины должны импортировать собственный локальный код среды выполнения напрямую из модулей, принадлежащих их расширению.
Та же граница в целом применяется к именованным по провайдерам швам SDK: ядро не должно импортировать специфичные для канала вспомогательные баррели для Slack, Discord, Signal, WhatsApp или похожих расширений. Если ядру нужно поведение, оно должно либо использовать собственный баррель встроенного плагина api.ts / runtime-api.ts, либо продвинуть потребность в узкую универсальную возможность в общем SDK.
Встроенные плагины следуют тому же правилу. runtime-api.ts встроенного плагина не должен реэкспортировать собственный брендированный фасад openclaw/plugin-sdk/<plugin-id>. Эти брендированные фасады остаются совместимыми прокладками для внешних плагинов и старых потребителей, но встроенные плагины должны использовать локальные экспорты плюс узкие универсальные подпути SDK, такие как openclaw/plugin-sdk/channel-policy, openclaw/plugin-sdk/runtime-store или openclaw/plugin-sdk/webhook-ingress. Новый код не должен добавлять специфичные для идентификатора плагина фасады SDK, если этого не требует граница совместимости для существующей внешней экосистемы.
Для опросов конкретно есть два пути выполнения:
outbound.sendPoll— общий базовый вариант для каналов, которые подходят под общую модель опросовactions.handleAction("poll")— предпочтительный путь для специфичной для канала семантики опросов или дополнительных параметров опроса
Модель владения возможностями
OpenClaw рассматривает нативный плагин как границу владения для компании или функции, а не как набор несвязанных интеграций. Это означает:- плагин компании обычно должен владеть всеми поверхностями этой компании, обращенными к OpenClaw
- плагин функции обычно должен владеть всей поверхностью функции, которую он вводит
- каналы должны использовать общие возможности ядра вместо ситуативной повторной реализации поведения провайдера
Мультивозможности поставщика
Мультивозможности поставщика
openai владеет текстовым выводом, речью, голосом в реальном времени, пониманием медиа и генерацией изображений. google владеет текстовым выводом, а также пониманием медиа, генерацией изображений и веб-поиском. qwen владеет текстовым выводом, а также пониманием медиа и генерацией видео.Одна возможность поставщика
Одна возможность поставщика
elevenlabs и microsoft владеют речью; firecrawl владеет веб-загрузкой; minimax / mistral / moonshot / zai владеют бэкендами понимания медиа.Функциональный плагин
Функциональный плагин
voice-call владеет транспортом вызовов, инструментами, CLI, маршрутами и мостом медиапотока Twilio, но использует общие возможности речи, транскрипции в реальном времени и голоса в реальном времени вместо прямого импорта плагинов поставщиков.- OpenAI живет в одном плагине, даже если он охватывает текстовые модели, речь, изображения и будущее видео
- другой поставщик может сделать то же самое для собственной области поверхности
- каналам не важно, какой плагин поставщика владеет провайдером; они используют общий контракт возможности, предоставляемый ядром
- плагин = граница владения
- возможность = контракт ядра, который несколько плагинов могут реализовывать или использовать
Это сохраняет явное владение и при этом избегает поведения ядра, зависящего от одного поставщика или разового специфичного для плагина пути кода.
Слоение возможностей
Используйте эту ментальную модель при решении, где должен находиться код:- Слой возможностей ядра
- Слой плагина поставщика
- Слой канального/функционального плагина
Общая оркестрация, политика, резервный механизм, правила слияния конфигурации, семантика доставки и типизированные контракты.
- ядро владеет политикой TTS во время ответа, порядком резервирования, предпочтениями и доставкой канала
openai,elevenlabsиmicrosoftвладеют реализациями синтезаvoice-callиспользует вспомогательное средство среды выполнения TTS для телефонии
Пример плагина компании с несколькими возможностями
Плагин компании должен ощущаться целостным снаружи. Если у OpenClaw есть общие контракты для моделей, речи, транскрипции в реальном времени, голоса в реальном времени, понимания медиа, генерации изображений, генерации видео, веб-загрузки и веб-поиска, поставщик может владеть всеми своими поверхностями в одном месте:- один плагин владеет поверхностью поставщика
- ядро по-прежнему владеет контрактами возможностей
- каналы и функциональные плагины используют вспомогательные средства
api.runtime.*, а не код поставщика - контрактные тесты могут утверждать, что плагин зарегистрировал возможности, которыми заявляет, что владеет
Пример возможности: понимание видео
OpenClaw уже рассматривает понимание изображений/аудио/видео как одну общую возможность. Там применяется та же модель владения:Плагины поставщиков регистрируются
Плагины поставщиков регистрируют
describeImage, transcribeAudio и describeVideo по применимости.api.registerVideoGenerationProvider(...) для него.
Нужен конкретный контрольный список внедрения? См. Кулинарную книгу возможностей.
Контракты и принудительное соблюдение
Поверхность API плагинов намеренно типизирована и централизована вOpenClawPluginApi. Этот контракт определяет поддерживаемые точки регистрации и вспомогательные средства среды выполнения, на которые может полагаться плагин.
Почему это важно:
- авторы плагинов получают один стабильный внутренний стандарт
- ядро может отклонять дублирующееся владение, например регистрацию одного и того же идентификатора провайдера двумя плагинами
- запуск может показывать действенную диагностику для некорректной регистрации
- контрактные тесты могут обеспечивать владение встроенными плагинами и предотвращать незаметный дрейф
Принудительная проверка регистрации во время выполнения
Принудительная проверка регистрации во время выполнения
Реестр плагинов проверяет регистрации при загрузке плагинов. Примеры: повторяющиеся идентификаторы провайдеров, повторяющиеся идентификаторы речевых провайдеров и некорректно сформированные регистрации создают диагностику плагинов вместо неопределенного поведения.
Контрактные тесты
Контрактные тесты
Встроенные плагины фиксируются в контрактных реестрах во время тестовых запусков, чтобы OpenClaw мог явно проверять владение. Сейчас это используется для провайдеров моделей, речевых провайдеров, провайдеров веб-поиска и владения встроенными регистрациями.
Что входит в контракт
- Хорошие контракты
- Плохие контракты
- типизированные
- небольшие
- специфичные для возможности
- принадлежащие ядру
- переиспользуемые несколькими плагинами
- потребляемые каналами/функциями без знания поставщика
Модель выполнения
Нативные плагины OpenClaw выполняются внутри процесса вместе с Gateway. Они не изолированы в песочнице. Загруженный нативный плагин имеет ту же границу доверия на уровне процесса, что и код ядра. Совместимые пакеты по умолчанию безопаснее, потому что OpenClaw сейчас рассматривает их как пакеты метаданных/контента. В текущих выпусках это в основном означает встроенные Skills. Используйте списки разрешений и явные пути установки/загрузки для невстроенных плагинов. Рассматривайте плагины рабочей области как код для разработки, а не как производственные значения по умолчанию. Для имен встроенных пакетов рабочей области сохраняйте привязку идентификатора плагина к имени npm:@openclaw/<id> по умолчанию или утвержденный типизированный суффикс, например -provider, -plugin, -speech, -sandbox или -media-understanding, когда пакет намеренно предоставляет более узкую роль плагина.
Примечание о доверии:
plugins.allow доверяет идентификаторам плагинов, а не происхождению источника. Плагин рабочей области с тем же идентификатором, что и встроенный плагин, намеренно замещает встроенную копию, когда этот плагин рабочей области включен/добавлен в список разрешений. Это нормально и полезно для локальной разработки, тестирования патчей и срочных исправлений. Доверие к встроенному плагину определяется по снимку источника — манифесту и коду на диске во время загрузки, — а не по метаданным установки. Поврежденная или подмененная запись установки не может незаметно расширить поверхность доверия встроенного плагина сверх того, что заявляет фактический источник.Граница экспорта
OpenClaw экспортирует возможности, а не удобства реализации. Сохраняйте регистрацию возможностей публичной. Убирайте вспомогательные экспорты, не являющиеся контрактами:- вспомогательные подпути, специфичные для встроенного плагина
- подпути runtime-инфраструктуры, не предназначенные как публичный API
- вспомогательные функции для удобства, специфичные для поставщика
- вспомогательные функции настройки/онбординга, являющиеся деталями реализации
plugin-sdk/gateway-runtime, plugin-sdk/security-runtime и plugin-sdk/plugin-config-runtime.