Установлення та використання плагінів
Посібник для кінцевих користувачів із додавання, увімкнення та усунення несправностей плагінів.
Створення плагінів
Посібник зі створення першого плагіна з найменшим працездатним маніфестом.
Плагіни каналів
Створення плагіна каналу обміну повідомленнями.
Плагіни провайдерів
Створення плагіна провайдера моделей.
Огляд SDK
Довідник із карти імпортів та API реєстрації.
Загальнодоступна модель можливостей
Можливості — це загальнодоступна модель нативних плагінів в OpenClaw. Кожен нативний плагін OpenClaw реєструється для одного або кількох типів можливостей:Плагін, який не реєструє жодної можливості, але надає перехоплювачі, інструменти, служби виявлення або фонові служби, є застарілим плагіном лише з перехоплювачами. Цей шаблон досі повністю підтримується.
Позиція щодо зовнішньої сумісності
Модель можливостей уже впроваджено в ядро, і нині її використовують вбудовані та нативні плагіни, але для сумісності зовнішніх плагінів потрібен суворіший критерій, ніж «якщо це експортовано, то це незмінне».
Реєстрація можливостей — це цільовий напрям розвитку. Під час переходу застарілі перехоплювачі залишаються найбезпечнішим шляхом без порушення сумісності для зовнішніх плагінів. Не всі експортовані допоміжні підшляхи рівноцінні — віддавайте перевагу вузьким документованим контрактам, а не випадковим допоміжним експортам.
Форми плагінів
OpenClaw класифікує кожен завантажений плагін за формою відповідно до його фактичної поведінки під час реєстрації, а не лише за статичними метаданими:plain-capability
plain-capability
Реєструє рівно один тип можливостей (наприклад, плагін лише провайдера на кшталт
arcee або chutes).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>, openclaw status --all і openclaw plugins doctor відображають такі сповіщення про сумісність:
Жоден із рекомендаційних сигналів або попереджень наразі не порушує роботу вашого плагіна. Ці сигнали також відображаються в
openclaw status --all і openclaw plugins doctor.
Огляд архітектури
Система плагінів OpenClaw складається з чотирьох рівнів:1
Маніфест і виявлення
OpenClaw знаходить потенційні плагіни у налаштованих шляхах, коренях робочих просторів, глобальних коренях плагінів і серед вбудованих плагінів. Під час виявлення спочатку зчитуються маніфести нативних плагінів
openclaw.plugin.json і підтримувані маніфести пакетів.2
Увімкнення та перевірка
Ядро визначає, чи виявлений плагін увімкнено, вимкнено, заблоковано або вибрано для ексклюзивного слота, наприклад пам’яті.
3
Завантаження під час виконання
Нативні плагіни OpenClaw завантажуються всередині процесу та реєструють можливості в центральному реєстрі. Пакетний JavaScript завантажується через нативний
require; локальний вихідний код TypeScript сторонніх розробників використовує Jiti як аварійний резервний варіант. Сумісні пакети нормалізуються в записи реєстру без імпорту коду середовища виконання.4
Використання поверхонь
Решта OpenClaw зчитує реєстр, щоб надавати інструменти, канали, налаштування провайдерів, перехоплювачі, маршрути HTTP, команди CLI та служби.
- метадані під час аналізу надходять із
registerCli(..., { descriptors: [...] }) - фактичний модуль CLI плагіна може залишатися відкладеним і реєструватися під час першого виклику
- перевірка маніфесту й конфігурації має працювати на основі метаданих маніфесту та схеми без виконання коду плагіна
- виявлення нативних можливостей може завантажувати код точки входу довіреного плагіна, щоб створити неактивувальний знімок реєстру
- нативна поведінка під час виконання походить зі шляху
register(api)модуля плагіна, колиapi.registrationMode === "full"
Знімок метаданих плагінів і таблиця пошуку
Під час запуску Gateway створює одинPluginMetadataSnapshot для поточного знімка конфігурації. Цей знімок містить лише метадані: індекс установлених плагінів, реєстр маніфестів, діагностичні дані маніфестів, карти власників, нормалізатор ідентифікаторів плагінів і записи маніфестів. Він не містить завантажених модулів плагінів, SDK провайдерів, вмісту пакетів або експортів середовища виконання.
Перевірка конфігурації з урахуванням плагінів, автоматичне ввімкнення під час запуску та початкова ініціалізація плагінів Gateway використовують цей знімок замість незалежного повторного створення метаданих маніфестів та індексу. PluginLookUpTable утворюється з того самого знімка й додає план запуску плагінів для поточної конфігурації середовища виконання.
Після запуску Gateway зберігає поточний знімок метаданих як замінний продукт середовища виконання. Повторне виявлення провайдерів під час виконання може використовувати цей знімок замість повторного створення індексу встановлених компонентів і реєстру маніфестів для кожного проходу каталогу провайдерів. Знімок очищається або замінюється під час завершення роботи Gateway, зміни конфігурації чи переліку плагінів, а також запису індексу встановлених компонентів; якщо сумісного поточного знімка немає, виклики повертаються до холодного шляху маніфесту й індексу. Перевірки сумісності мають охоплювати корені виявлення плагінів, як-от plugins.load.paths і типовий робочий простір агента, оскільки плагіни робочого простору входять до області метаданих.
Знімок і таблиця пошуку зберігають повторювані рішення під час запуску на швидкому шляху:
- володіння каналами
- відкладений запуск каналів
- ідентифікатори плагінів запуску
- володіння провайдерами та серверами CLI
- володіння провайдером налаштування, псевдонімами команд, провайдером каталогу моделей і контрактами маніфестів
- перевірка схеми конфігурації плагінів і схеми конфігурації каналів
- рішення щодо автоматичного ввімкнення під час запуску
PluginLookUpTable від Gateway. Тепер цей шлях створює реєстр на вимогу; якщо виклик уже має поточну таблицю пошуку або явний реєстр маніфестів, віддавайте перевагу їх передаванню через потоки середовища виконання.
Планування активації
Планування активації є частиною площини керування. Викликачі можуть запитувати, які плагіни стосуються конкретної команди, постачальника, каналу, маршруту, середовища агента або можливості, перш ніж завантажувати ширші реєстри середовища виконання. Планувальник зберігає сумісність із поточною поведінкою маніфесту:- поля
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: ядро не повинно імпортувати специфічні для каналу зручні агрегувальні модулі для Discord, Signal, Slack, 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 поверхні цієї компанії
- плагін функції зазвичай має відповідати за всю поверхню функції, яку він додає
- канали мають використовувати спільні можливості ядра, а не повторно реалізовувати поведінку постачальника ситуативно
Постачальник із багатьма можливостями
Постачальник із багатьма можливостями
google відповідає за текстовий інференс, бекенд CLI, вбудовування, мовлення, голос у реальному часі, розуміння медіаданих, генерування зображень, музики й відео та вебпошук. openai відповідає за текстовий інференс, вбудовування, мовлення, транскрибування в реальному часі, голос у реальному часі, розуміння медіаданих, генерування зображень і відео. minimax відповідає за текстовий інференс, а також розуміння медіаданих, мовлення, генерування зображень, музики й відео та вебпошук.Постачальник з однією можливістю
Постачальник з однією можливістю
arcee і chutes відповідають лише за текстовий інференс; microsoft відповідає лише за мовлення. Плагін постачальника може залишатися настільки вузьким, доки йому не знадобиться охопити більшу частину поверхні цього постачальника.Плагін функції
Плагін функції
voice-call відповідає за транспорт викликів, інструменти, CLI, маршрути та з’єднання медіапотоків Twilio, але використовує спільні можливості мовлення, транскрибування в реальному часі та голосу в реальному часі замість прямого імпорту плагінів постачальників.- орієнтована на OpenClaw поверхня постачальника міститься в одному плагіні, навіть якщо вона охоплює текстові моделі, мовлення, зображення та відео
- інші постачальники можуть робити те саме для власної області поверхні
- каналам неважливо, якому плагіну постачальника належить постачальник; вони використовують спільний контракт можливостей, наданий ядром
- плагін = межа володіння
- можливість = контракт ядра, який можуть реалізовувати або використовувати кілька плагінів
1
Визначте можливість
Визначте відсутню можливість у ядрі.
2
Надайте через SDK
Надайте її через API або середовище виконання плагіна типізованим способом.
3
Підключіть споживачів
Підключіть канали й функції до цієї можливості.
4
Реалізації постачальників
Дозвольте плагінам постачальників реєструвати реалізації.
Рівні можливостей
Використовуйте цю ментальну модель, вирішуючи, де має міститися код:- Рівень можливостей ядра
- Рівень плагіна постачальника
- Рівень плагіна каналу або функції
Спільна оркестрація, політика, резервні механізми, правила об’єднання конфігурації, семантика доставлення та типізовані контракти.
- ядро відповідає за політику TTS під час відповіді, порядок резервування, налаштування та доставлення каналом
elevenlabs,google,microsoftіopenaiвідповідають за реалізації синтезуvoice-callвикористовує допоміжний засіб середовища виконання TTS для телефонії
Приклад плагіна компанії з багатьма можливостями
Плагін компанії має сприйматися ззовні як цілісний. Якщо OpenClaw має спільні контракти для моделей, мовлення, транскрибування в реальному часі, голосу в реальному часі, розуміння медіаданих, генерування зображень, генерування відео, отримання вебресурсів і вебпошуку, постачальник може відповідати за всі свої поверхні в одному місці:- один плагін відповідає за поверхню постачальника
- ядро й надалі відповідає за контракти можливостей
- канали та плагіни функцій використовують допоміжні засоби
api.runtime.*, а не код постачальника - тести контрактів можуть перевіряти, що плагін зареєстрував можливості, за які заявляє відповідальність
Приклад можливості: розуміння відео
OpenClaw уже розглядає розуміння зображень, аудіо та відео як одну спільну можливість. Там застосовується та сама модель володіння:1
Ядро визначає контракт
Ядро визначає контракт розуміння медіаданих.
2
Плагіни постачальників реєструються
Плагіни постачальників реєструють
describeImage, transcribeAudio і describeVideo, коли це застосовно.3
Споживачі використовують спільну поведінку
Канали та плагіни функцій використовують спільну поведінку ядра замість прямого підключення до коду постачальника.
api.registerVideoGenerationProvider(...).
Потрібен конкретний контрольний список упровадження? Див. Посібник із можливостей.
Контракти та забезпечення дотримання
Поверхня API Plugin навмисно типізована й централізована вOpenClawPluginApi. Цей контракт визначає підтримувані точки реєстрації та допоміжні засоби середовища виконання, на які може покладатися Plugin.
Чому це важливо:
- автори плагінів отримують єдиний стабільний внутрішній стандарт
- ядро може відхиляти дублювання володіння, наприклад коли два плагіни реєструють однаковий ідентифікатор постачальника
- під час запуску можуть відображатися дієві діагностичні повідомлення щодо некоректної реєстрації
- контрактні тести можуть забезпечувати дотримання володіння вбудованими плагінами та запобігати непомітному розходженню
Забезпечення дотримання під час реєстрації в середовищі виконання
Забезпечення дотримання під час реєстрації в середовищі виконання
Реєстр плагінів перевіряє реєстрації під час завантаження плагінів. Наприклад, дублікати ідентифікаторів постачальників, дублікати ідентифікаторів постачальників синтезу мовлення та некоректні реєстрації спричиняють діагностичні повідомлення плагіна замість невизначеної поведінки.
Контрактні тести
Контрактні тести
Під час тестових запусків вбудовані плагіни фіксуються в контрактних реєстрах, щоб OpenClaw міг явно перевіряти володіння. Наразі це використовується для постачальників моделей, постачальників синтезу мовлення, постачальників вебпошуку та володіння вбудованими реєстраціями.
Що має входити до контракту
- Належні контракти
- Неналежні контракти
- типізовані
- невеликі
- орієнтовані на конкретну можливість
- належать ядру
- придатні для повторного використання кількома плагінами
- можуть використовуватися каналами й функціями без знань про конкретного постачальника
Модель виконання
Нативні плагіни OpenClaw виконуються у процесі разом із Gateway. Вони не ізольовані в пісочниці. Завантажений нативний Plugin має ту саму межу довіри на рівні процесу, що й код ядра. Сумісні пакети за замовчуванням безпечніші, оскільки OpenClaw наразі розглядає їх як пакети метаданих і вмісту. У поточних випусках це переважно означає вбудовані Skills. Використовуйте списки дозволених елементів і явні шляхи встановлення та завантаження для невбудованих плагінів. Сприймайте плагіни робочого простору як код для розробки, а не як стандартний варіант для виробничого середовища. Для назв пакетів вбудованого робочого простору зберігайте ідентифікатор плагіна прив’язаним до назви npm: за замовчуванням@openclaw/<id> або затверджений типізований суфікс, наприклад -provider, -plugin, -speech, -sandbox чи -media-understanding, коли пакет навмисно надає вужчу роль плагіна.
Примітка щодо довіри:
plugins.allow надає довіру ідентифікаторам плагінів, а не походженню джерела. Plugin робочого простору з таким самим ідентифікатором, що й вбудований Plugin, навмисно заміщує вбудовану копію, коли цей Plugin робочого простору ввімкнено або додано до списку дозволених. Це нормальна й корисна поведінка для локальної розробки, тестування виправлень і термінових виправлень. Довіра до вбудованого плагіна визначається за знімком джерела — маніфестом і кодом на диску під час завантаження, — а не за метаданими встановлення. Пошкоджений або підмінений запис про встановлення не може непомітно розширити довірену поверхню вбудованого плагіна понад те, що заявляє фактичне джерело.Межа експорту
OpenClaw експортує можливості, а не зручні деталі реалізації. Зберігайте реєстрацію можливостей загальнодоступною. Скоротіть експорт допоміжних засобів, що не входять до контракту:- допоміжні підшляхи, специфічні для вбудованих плагінів
- підшляхи внутрішньої інфраструктури середовища виконання, не призначені для загальнодоступного API
- допоміжні засоби для зручності, специфічні для постачальника
- допоміжні засоби налаштування й початкового налаштування, які є деталями реалізації
plugin-sdk/gateway-runtime, plugin-sdk/security-runtime і plugin-sdk/plugin-config-runtime.