Встановлення та використання Plugin-ів
Посібник для кінцевих користувачів із додавання, увімкнення та усунення проблем із Plugin-ами.
Створення Plugin-ів
Навчальний матеріал для першого Plugin-а з найменшим робочим маніфестом.
Plugin-и каналів
Створіть Plugin каналу обміну повідомленнями.
Plugin-и провайдерів
Створіть Plugin провайдера моделі.
Огляд SDK
Довідник з карти імпортів і API реєстрації.
Публічна модель можливостей
Можливості — це публічна модель нативного Plugin-а всередині OpenClaw. Кожен нативний Plugin OpenClaw реєструється для одного або кількох типів можливостей:| Можливість | Метод реєстрації | Приклади Plugin-ів |
|---|---|---|
| Текстовий інференс | api.registerProvider(...) | openai, anthropic |
| Backend інференсу CLI | api.registerCliBackend(...) | openai, anthropic |
| Embeddings | api.registerEmbeddingProvider(...) | Plugin-и векторів, що належать провайдерам |
| Мовлення | 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 fetch | api.registerWebFetchProvider(...) | firecrawl |
| Web search | api.registerWebSearchProvider(...) | google |
| Канал / обмін повідомленнями | api.registerChannel(...) | msteams, matrix |
| Виявлення Gateway | api.registerGatewayDiscoveryService(...) | bonjour |
Plugin, який реєструє нуль можливостей, але надає hooks, інструменти, служби виявлення або фонові служби, є застарілим Plugin-ом лише з hooks. Цей шаблон досі повністю підтримується.
Позиція щодо зовнішньої сумісності
Модель можливостей уже інтегрована в core і сьогодні використовується вбудованими/нативними Plugin-ами, але сумісність зовнішніх Plugin-ів досі потребує суворішої планки, ніж «це експортовано, отже це заморожено».| Ситуація з Plugin-ом | Рекомендації |
|---|---|
| Наявні зовнішні Plugin-и | Зберігайте працездатність інтеграцій на основі hooks; це базова лінія сумісності. |
| Нові вбудовані/нативні Plugin-и | Віддавайте перевагу явній реєстрації можливостей замість vendor-specific reach-ins або нових дизайнів лише на hooks. |
| Зовнішні Plugin-и, що впроваджують реєстрацію можливостей | Дозволено, але вважайте допоміжні поверхні, специфічні для можливостей, такими, що розвиваються, якщо документація не позначає їх стабільними. |
Форми Plugin-ів
OpenClaw класифікує кожен завантажений Plugin за формою на основі його фактичної поведінки реєстрації (а не лише статичних метаданих):plain-capability
plain-capability
Реєструє рівно один тип можливості (наприклад, Plugin лише провайдера, як
mistral).hybrid-capability
hybrid-capability
Реєструє кілька типів можливостей (наприклад,
openai володіє текстовим інференсом, мовленням, розумінням медіа та генерацією зображень).hook-only
hook-only
Реєструє лише hooks (типізовані або custom), без можливостей, інструментів, команд чи служб.
non-capability
non-capability
Реєструє інструменти, команди, служби або routes, але без можливостей.
openclaw plugins inspect <id>, щоб побачити форму Plugin-а та розбивку можливостей. Див. довідник CLI для деталей.
Застарілі hooks
Hookbefore_agent_start залишається підтримуваним як шлях сумісності для Plugin-ів лише з hooks. Застарілі реальні Plugin-и досі залежать від нього.
Напрям:
- підтримувати його працездатність
- документувати його як застарілий
- віддавати перевагу
before_model_resolveдля роботи з перевизначенням моделі/провайдера - віддавати перевагу
before_prompt_buildдля роботи зі зміною prompt - видаляти лише після того, як реальне використання зменшиться, а покриття fixtures доведе безпечність міграції
Сигнали сумісності
Коли ви запускаєтеopenclaw doctor або openclaw plugins inspect <id>, ви можете побачити одну з цих міток:
| Сигнал | Значення |
|---|---|
| config valid | Config коректно розбирається, а Plugin-и resolve |
| compatibility advisory | Plugin використовує підтримуваний, але старіший шаблон (наприклад, hook-only) |
| legacy warning | Plugin використовує before_agent_start, який є deprecated |
| hard error | Config недійсний або Plugin не вдалося завантажити |
hook-only, ані before_agent_start сьогодні не зламають ваш Plugin: hook-only є рекомендаційним сигналом, а before_agent_start лише викликає попередження. Ці сигнали також з’являються в openclaw status --all і openclaw plugins doctor.
Огляд архітектури
Система Plugin-ів OpenClaw має чотири шари:Маніфест + виявлення
OpenClaw знаходить кандидатні Plugin-и з налаштованих шляхів, коренів workspace, глобальних коренів Plugin-ів і вбудованих Plugin-ів. Виявлення спочатку читає нативні маніфести
openclaw.plugin.json плюс підтримувані bundle-маніфести.Увімкнення + валідація
Core вирішує, чи виявлений Plugin увімкнений, вимкнений, заблокований або вибраний для ексклюзивного slot, наприклад memory.
Завантаження runtime
Нативні Plugin-и OpenClaw завантажуються в процесі та реєструють можливості в центральному registry. Упакований JavaScript завантажується через нативний
require; сторонній локальний TypeScript source є аварійним fallback Jiti. Сумісні bundles нормалізуються в записи registry без імпорту runtime-коду.- metadata під час parsing надходять з
registerCli(..., { descriptors: [...] }) - справжній модуль CLI Plugin-а може залишатися lazy та реєструватися під час першого виклику
- валідація manifest/config має працювати з metadata manifest/schema без виконання коду Plugin-а
- нативне виявлення можливостей може завантажувати trusted entry-код Plugin-а, щоб побудувати registry snapshot без активації
- нативна runtime-поведінка походить зі шляху
register(api)модуля Plugin-а зapi.registrationMode === "full"
Snapshot метаданих Plugin-а і lookup table
Під час запуску Gateway створює одинPluginMetadataSnapshot для поточного snapshot config. Snapshot містить лише metadata: він зберігає installed plugin index, manifest registry, manifest diagnostics, owner maps, нормалізатор id Plugin-а та manifest records. Він не містить завантажених модулів Plugin-ів, SDK провайдерів, вмісту package або runtime exports.
Валідація config, що враховує Plugin-и, startup auto-enable і bootstrap Plugin-ів Gateway використовують цей snapshot замість незалежної перебудови metadata manifest/index. PluginLookUpTable виводиться з того самого snapshot і додає startup plugin plan для поточної runtime config.
Після запуску Gateway зберігає поточний metadata snapshot як замінний runtime-продукт. Повторне runtime-виявлення провайдерів може запозичувати цей snapshot замість реконструкції installed index і manifest registry для кожного provider-catalog pass. Snapshot очищується або замінюється під час shutdown Gateway, змін config/plugin inventory та записів installed index; callers повертаються до холодного шляху manifest/index, коли немає сумісного поточного snapshot. Перевірки сумісності мають включати корені виявлення Plugin-ів, такі як plugins.load.paths і default agent workspace, оскільки workspace Plugin-и є частиною metadata scope.
Snapshot і lookup table утримують повторювані startup-рішення на fast path:
- ownership каналів
- deferred channel startup
- startup plugin ids
- ownership провайдерів і backend CLI
- ownership setup provider, command alias, model catalog provider і manifest contract
- валідація plugin config schema і channel config schema
- startup auto-enable decisions
PluginLookUpTable. Цей шлях тепер реконструює registry on demand; віддавайте перевагу передаванню поточної lookup table або explicit manifest registry через runtime flows, коли caller уже має один із них.
Планування активації
Планування активації є частиною control plane. Callers можуть запитувати, які Plugin-и релевантні для конкретної команди, провайдера, каналу, route, agent harness або можливості, перш ніж завантажувати ширші runtime registries. Planner зберігає сумісність поточної manifest-поведінки:- поля
activation.*є явними підказками планувальника providers,channels,commandAliases,setup.providers,contracts.toolsі хуки залишаються резервним механізмом володіння маніфестом- API планувальника лише з ids залишається доступним для наявних викликачів
- API плану повідомляє мітки причин, щоб діагностика могла відрізняти явні підказки від резервного механізму володіння
Канальні плагіни та спільний інструмент повідомлень
Канальним плагінам не потрібно реєструвати окремий інструмент надсилання/редагування/реакцій для звичайних дій чату. OpenClaw тримає один спільний інструментmessage у ядрі, а канальні плагіни володіють специфічними для каналу виявленням і виконанням за ним.
Поточна межа така:
- ядро володіє хостом спільного інструмента
message, підключенням до промпта, обліком сесій/тредів і диспетчеризацією виконання - канальні плагіни володіють виявленням дій у межах області, виявленням можливостей і будь-якими специфічними для каналу фрагментами схеми
- канальні плагіни володіють специфічною для провайдера граматикою розмов сесії, наприклад тим, як id розмов кодують id тредів або успадковуються від батьківських розмов
- канальні плагіни виконують фінальну дію через свій адаптер дій
ChannelMessageActionAdapter.describeMessageTool(...). Цей уніфікований виклик виявлення дає плагіну змогу повертати видимі дії, можливості та внески до схеми разом, щоб ці частини не розходилися.
Коли специфічний для каналу параметр інструмента повідомлень несе джерело медіа, наприклад локальний шлях або URL віддаленого медіа, плагін також має повертати mediaSourceParams із describeMessageTool(...). Ядро використовує цей явний список, щоб застосовувати нормалізацію шляхів пісочниці та підказки вихідного доступу до медіа без жорсткого кодування назв параметрів, якими володіє плагін. Надавайте перевагу мапам у межах дії, а не одному пласкому списку на весь канал, щоб параметр медіа лише для профілю не нормалізувався для непов’язаних дій на кшталт send.
Ядро передає область виконання в цей крок виявлення. Важливі поля включають:
accountIdcurrentChannelIdcurrentThreadTscurrentMessageIdsessionKeysessionIdagentId- довірений вхідний
requesterSenderId
message.
Саме тому зміни маршрутизації вбудованого раннера все ще є роботою плагіна: раннер відповідає за пересилання поточної ідентичності чату/сесії в межу виявлення плагіна, щоб спільний інструмент message відкривав правильну поверхню, якою володіє канал, для поточного ходу.
Для допоміжних засобів виконання, якими володіє канал, вбудовані плагіни мають тримати runtime виконання всередині власних модулів розширення. Ядро більше не володіє runtime дій повідомлень Discord, Slack, Telegram або WhatsApp під src/agents/tools. Ми не публікуємо окремі підшляхи plugin-sdk/*-action-runtime, а вбудовані плагіни мають імпортувати власний локальний runtime-код безпосередньо зі своїх модулів, якими володіє розширення.
Та сама межа загалом застосовується до названих за провайдером швів SDK: ядро не має імпортувати специфічні для каналу зручні барелі для Slack, Discord, Signal, WhatsApp або подібних розширень. Якщо ядру потрібна поведінка, воно має або споживати власний барель api.ts / runtime-api.ts вбудованого плагіна, або просунути потребу у вузьку загальну можливість у спільному SDK.
Вбудовані плагіни дотримуються того самого правила. runtime-api.ts вбудованого плагіна не має реекспортувати власний брендований фасад openclaw/plugin-sdk/<plugin-id>. Ці брендовані фасади залишаються shim-сумісністю для зовнішніх плагінів і старіших споживачів, але вбудовані плагіни мають використовувати локальні експорти плюс вузькі загальні підшляхи SDK, такі як openclaw/plugin-sdk/channel-policy, openclaw/plugin-sdk/runtime-store або openclaw/plugin-sdk/webhook-ingress. Новий код не має додавати специфічні для plugin-id фасади SDK, якщо цього не вимагає межа сумісності для наявної зовнішньої екосистеми.
Зокрема для опитувань є два шляхи виконання:
outbound.sendPoll— спільна базова лінія для каналів, що відповідають загальній моделі опитуванняactions.handleAction("poll")— бажаний шлях для специфічної для каналу семантики опитувань або додаткових параметрів опитування
Модель володіння можливостями
OpenClaw розглядає нативний плагін як межу володіння для компанії або функції, а не як набір непов’язаних інтеграцій. Це означає:- плагін компанії зазвичай має володіти всіма поверхнями цієї компанії, зверненими до OpenClaw
- плагін функції зазвичай має володіти повною поверхнею функції, яку він вводить
- канали мають споживати спільні можливості ядра замість спеціально повторно реалізовувати поведінку провайдера
Vendor multi-capability
Vendor multi-capability
openai володіє текстовим інференсом, мовленням, голосом у реальному часі, розумінням медіа та генерацією зображень. google володіє текстовим інференсом плюс розумінням медіа, генерацією зображень і вебпошуком. qwen володіє текстовим інференсом плюс розумінням медіа та генерацією відео.Vendor single-capability
Vendor single-capability
elevenlabs і microsoft володіють мовленням; firecrawl володіє web-fetch; minimax / mistral / moonshot / zai володіють бекендами розуміння медіа.Feature plugin
Feature plugin
voice-call володіє транспортом дзвінків, інструментами, CLI, маршрутами та мостом медіапотоків Twilio, але споживає спільні можливості мовлення, транскрипції в реальному часі та голосу в реальному часі замість прямого імпорту плагінів постачальників.- OpenAI живе в одному плагіні, навіть якщо охоплює текстові моделі, мовлення, зображення та майбутнє відео
- інший постачальник може зробити те саме для власної поверхні
- каналам байдуже, який плагін постачальника володіє провайдером; вони споживають спільний контракт можливості, відкритий ядром
- плагін = межа володіння
- можливість = контракт ядра, який кілька плагінів можуть реалізовувати або споживати
Це зберігає явне володіння, уникаючи поведінки ядра, яка залежить від одного постачальника або одноразового специфічного для плагіна шляху коду.
Шарування можливостей
Використовуйте цю ментальну модель, коли вирішуєте, де має бути код:- Core capability layer
- Vendor plugin layer
- Channel/feature plugin layer
Спільна оркестрація, політика, резервний механізм, правила злиття конфігурації, семантика доставки та типізовані контракти.
- ядро володіє політикою TTS під час відповіді, порядком резервування, налаштуваннями та доставкою в канал
openai,elevenlabsіmicrosoftволодіють реалізаціями синтезуvoice-callспоживає runtime-помічник TTS для телефонії
Приклад плагіна компанії з кількома можливостями
Плагін компанії має сприйматися цілісним ззовні. Якщо OpenClaw має спільні контракти для моделей, мовлення, транскрипції в реальному часі, голосу в реальному часі, розуміння медіа, генерації зображень, генерації відео, отримання вебданих і вебпошуку, постачальник може володіти всіма своїми поверхнями в одному місці:- один плагін володіє поверхнею постачальника
- ядро все ще володіє контрактами можливостей
- канали та функціональні плагіни споживають помічники
api.runtime.*, а не код постачальника - контрактні тести можуть перевіряти, що плагін зареєстрував можливості, якими заявляє, що володіє
Приклад можливості: розуміння відео
OpenClaw уже розглядає розуміння зображень/аудіо/відео як одну спільну можливість. Та сама модель володіння застосовується і там:Vendor plugins register
Плагіни постачальників реєструють
describeImage, transcribeAudio і describeVideo, коли застосовно.api.registerVideoGenerationProvider(...) відповідно до нього.
Потрібен конкретний контрольний список розгортання? Див. Кулінарну книгу можливостей.
Контракти та примусове забезпечення
Поверхня API плагінів навмисно типізована й централізована вOpenClawPluginApi. Цей контракт визначає підтримувані точки реєстрації та runtime-помічники, на які може покладатися плагін.
Чому це важливо:
- автори плагінів отримують один стабільний внутрішній стандарт
- ядро може відхиляти дубльоване володіння, наприклад два плагіни, що реєструють той самий id провайдера
- запуск може показувати діагностику з діями для неправильних реєстрацій
- контрактні тести можуть забезпечувати володіння вбудованих плагінів і запобігати тихому розходженню
Примусове дотримання реєстрації під час виконання
Примусове дотримання реєстрації під час виконання
Реєстр плагінів перевіряє реєстрації під час завантаження плагінів. Приклади: дублікати ідентифікаторів провайдерів, дублікати ідентифікаторів мовленнєвих провайдерів і неправильно сформовані реєстрації створюють діагностику плагінів замість невизначеної поведінки.
Контрактні тести
Контрактні тести
Вбудовані плагіни фіксуються в контрактних реєстрах під час тестових запусків, щоб OpenClaw міг явно перевіряти власність. Сьогодні це використовується для провайдерів моделей, мовленнєвих провайдерів, провайдерів вебпошуку та власності на вбудовані реєстрації.
Що має входити до контракту
- Хороші контракти
- Погані контракти
- типізовані
- малі
- специфічні для можливості
- належать ядру
- повторно використовуються кількома плагінами
- споживаються каналами/функціями без знання постачальника
Модель виконання
Нативні плагіни OpenClaw працюють у процесі разом із Gateway. Вони не ізольовані в пісочниці. Завантажений нативний плагін має ту саму межу довіри на рівні процесу, що й код ядра. Сумісні пакети безпечніші за замовчуванням, бо OpenClaw наразі розглядає їх як пакети метаданих/контенту. У поточних релізах це здебільшого означає вбудовані Skills. Використовуйте списки дозволених і явні шляхи встановлення/завантаження для невбудованих плагінів. Розглядайте плагіни робочої області як код для часу розробки, а не як продукційні значення за замовчуванням. Для назв вбудованих пакетів робочої області тримайте ідентифікатор плагіна прив’язаним до npm-назви:@openclaw/<id> за замовчуванням або схвалений типізований суфікс, як-от -provider, -plugin, -speech, -sandbox чи -media-understanding, коли пакет навмисно надає вужчу роль плагіна.
Примітка щодо довіри:
plugins.allow довіряє ідентифікаторам плагінів, а не походженню джерела. Плагін робочої області з тим самим ідентифікатором, що й вбудований плагін, навмисно заміщує вбудовану копію, коли цей плагін робочої області ввімкнено/додано до списку дозволених. Це нормально й корисно для локальної розробки, тестування патчів і термінових виправлень. Довіра до вбудованого плагіна визначається зі знімка джерела — маніфесту й коду на диску під час завантаження, — а не з метаданих встановлення. Пошкоджений або підмінений запис встановлення не може непомітно розширити поверхню довіри вбудованого плагіна понад те, що заявляє фактичне джерело.Межа експорту
OpenClaw експортує можливості, а не зручності реалізації. Залишайте реєстрацію можливостей публічною. Скорочуйте експорти допоміжних засобів, що не є контрактами:- допоміжні підшляхи, специфічні для вбудованого плагіна
- підшляхи інфраструктури часу виконання, не призначені як публічний API
- зручні допоміжні засоби, специфічні для постачальника
- допоміжні засоби налаштування/онбордингу, які є деталями реалізації
plugin-sdk/gateway-runtime, plugin-sdk/security-runtime і plugin-sdk/plugin-config-runtime.