Plugin maintainer reference
Внутрішня будова Plugin
Це поглиблений довідник з архітектури системи плагінів OpenClaw. Практичне ознайомлення варто почати з однієї з наведених нижче тематичних сторінок.
Посібник для кінцевих користувачів із додавання, увімкнення та усунення несправностей плагінів.
Посібник зі створення першого плагіна з найменшим працездатним маніфестом.
Створення плагіна каналу обміну повідомленнями.
Створення плагіна провайдера моделей.
Довідник із карти імпортів та API реєстрації.
Загальнодоступна модель можливостей
Можливості — це загальнодоступна модель нативних плагінів в OpenClaw. Кожен нативний плагін OpenClaw реєструється для одного або кількох типів можливостей:
| Можливість | Метод реєстрації | Приклади плагінів |
|---|---|---|
| Текстове виведення | api.registerProvider(...) |
anthropic, openai |
| Сервер виведення CLI | api.registerCliBackend(...) |
anthropic, openai |
| Векторні подання | api.registerEmbeddingProvider(...) |
Векторні плагіни провайдерів |
| Мовлення | api.registerSpeechProvider(...) |
elevenlabs, microsoft |
| Транскрибування наживо | api.registerRealtimeTranscriptionProvider(...) |
openai |
| Голосовий зв’язок наживо | api.registerRealtimeVoiceProvider(...) |
google, openai |
| Розуміння медіаданих | api.registerMediaUnderstandingProvider(...) |
google, openai |
| Джерело транскриптів | api.registerTranscriptSourceProvider(...) |
discord |
| Генерування зображень | api.registerImageGenerationProvider(...) |
fal, google, openai |
| Генерування музики | api.registerMusicGenerationProvider(...) |
fal, google, minimax |
| Генерування відео | api.registerVideoGenerationProvider(...) |
fal, google, qwen |
| Отримання вебвмісту | api.registerWebFetchProvider(...) |
firecrawl |
| Вебпошук | api.registerWebSearchProvider(...) |
brave, firecrawl, google |
| Канал / обмін повідомленнями | api.registerChannel(...) |
matrix, msteams |
| Виявлення Gateway | api.registerGatewayDiscoveryService(...) |
bonjour |
Позиція щодо зовнішньої сумісності
Модель можливостей уже впроваджено в ядро, і нині її використовують вбудовані та нативні плагіни, але для сумісності зовнішніх плагінів потрібен суворіший критерій, ніж «якщо це експортовано, то це незмінне».
| Ситуація з плагіном | Рекомендація |
|---|---|
| Наявні зовнішні плагіни | Підтримуйте працездатність інтеграцій на основі перехоплювачів; це базовий рівень сумісності. |
| Нові вбудовані та нативні плагіни | Віддавайте перевагу явній реєстрації можливостей замість звернень до внутрішніх компонентів конкретного постачальника або нових рішень лише з перехоплювачами. |
| Зовнішні плагіни, що впроваджують реєстрацію можливостей | Це дозволено, але вважайте допоміжні поверхні для конкретних можливостей такими, що розвиваються, якщо документація не позначає їх як стабільні. |
Реєстрація можливостей — це цільовий напрям розвитку. Під час переходу застарілі перехоплювачі залишаються найбезпечнішим шляхом без порушення сумісності для зовнішніх плагінів. Не всі експортовані допоміжні підшляхи рівноцінні — віддавайте перевагу вузьким документованим контрактам, а не випадковим допоміжним експортам.
Форми плагінів
OpenClaw класифікує кожен завантажений плагін за формою відповідно до його фактичної поведінки під час реєстрації, а не лише за статичними метаданими:
plain-capability
Реєструє рівно один тип можливостей (наприклад, плагін лише провайдера на кшталт arcee або chutes).
hybrid-capability
Реєструє кілька типів можливостей (наприклад, openai відповідає за текстове виведення, мовлення, розуміння медіаданих і генерування зображень).
hook-only
Реєструє лише перехоплювачі (типізовані або спеціальні), без можливостей, інструментів, команд чи служб.
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 відображають такі сповіщення про сумісність:
| Сигнал | Значення |
|---|---|
| конфігурація дійсна | Конфігурація успішно аналізується, а плагіни розпізнаються |
| лише перехоплювачі (інформація) | Плагін реєструє лише перехоплювачі; цей шлях підтримується, але ще не перенесений на реєстрацію можливостей |
застарілий before_agent_start (попередження) |
Плагін використовує застарілий перехоплювач before_agent_start замість before_model_resolve/before_prompt_build |
| застарілий API векторних подань пам’яті (попередження) | Невбудований плагін використовує старий API провайдера векторних подань для пам’яті замість registerEmbeddingProvider |
| критична помилка | Конфігурація недійсна або плагін не вдалося завантажити |
Жоден із рекомендаційних сигналів або попереджень наразі не порушує роботу вашого плагіна. Ці сигнали також відображаються в openclaw status --all і openclaw plugins doctor.
Огляд архітектури
Система плагінів OpenClaw складається з чотирьох рівнів:
Маніфест і виявлення
OpenClaw знаходить потенційні плагіни у налаштованих шляхах, коренях робочих просторів, глобальних коренях плагінів і серед вбудованих плагінів. Під час виявлення спочатку зчитуються маніфести нативних плагінів openclaw.plugin.json і підтримувані маніфести пакетів.
Увімкнення та перевірка
Ядро визначає, чи виявлений плагін увімкнено, вимкнено, заблоковано або вибрано для ексклюзивного слота, наприклад пам’яті.
Завантаження під час виконання
Нативні плагіни OpenClaw завантажуються всередині процесу та реєструють можливості в центральному реєстрі. Пакетний JavaScript завантажується через нативний require; локальний вихідний код TypeScript сторонніх розробників використовує Jiti як аварійний резервний варіант. Сумісні пакети нормалізуються в записи реєстру без імпорту коду середовища виконання.
Використання поверхонь
Решта OpenClaw зчитує реєстр, щоб надавати інструменти, канали, налаштування провайдерів, перехоплювачі, маршрути HTTP, команди CLI та служби.
Зокрема для CLI плагінів виявлення кореневих команд розділено на два етапи:
- метадані під час аналізу надходять із
registerCli(..., { descriptors: [...] }) - фактичний модуль CLI плагіна може залишатися відкладеним і реєструватися під час першого виклику
Завдяки цьому код CLI, що належить плагіну, залишається всередині плагіна, а OpenClaw усе одно може зарезервувати назви кореневих команд до початку аналізу.
Важлива межа проєктування:
- перевірка маніфесту й конфігурації має працювати на основі метаданих маніфесту та схеми без виконання коду плагіна
- виявлення нативних можливостей може завантажувати код точки входу довіреного плагіна, щоб створити неактивувальний знімок реєстру
- нативна поведінка під час виконання походить зі шляху
register(api)модуля плагіна, колиapi.registrationMode === "full"
Такий поділ дає OpenClaw змогу перевіряти конфігурацію, пояснювати відсутність або вимкнення плагінів і створювати підказки для інтерфейсу та схем до активації повного середовища виконання.
Знімок метаданих плагінів і таблиця пошуку
Під час запуску Gateway створює один PluginMetadataSnapshot для поточного знімка конфігурації. Цей знімок містить лише метадані: індекс установлених плагінів, реєстр маніфестів, діагностичні дані маніфестів, карти власників, нормалізатор ідентифікаторів плагінів і записи маніфестів. Він не містить завантажених модулів плагінів, SDK провайдерів, вмісту пакетів або експортів середовища виконання.
Перевірка конфігурації з урахуванням плагінів, автоматичне ввімкнення під час запуску та початкова ініціалізація плагінів Gateway використовують цей знімок замість незалежного повторного створення метаданих маніфестів та індексу. PluginLookUpTable утворюється з того самого знімка й додає план запуску плагінів для поточної конфігурації середовища виконання.
Після запуску Gateway зберігає поточний знімок метаданих як замінний продукт середовища виконання. Повторне виявлення провайдерів під час виконання може використовувати цей знімок замість повторного створення індексу встановлених компонентів і реєстру маніфестів для кожного проходу каталогу провайдерів. Знімок очищається або замінюється під час завершення роботи Gateway, зміни конфігурації чи переліку плагінів, а також запису індексу встановлених компонентів; якщо сумісного поточного знімка немає, виклики повертаються до холодного шляху маніфесту й індексу. Перевірки сумісності мають охоплювати корені виявлення плагінів, як-от plugins.load.paths і типовий робочий простір агента, оскільки плагіни робочого простору входять до області метаданих.
Знімок і таблиця пошуку зберігають повторювані рішення під час запуску на швидкому шляху:
- володіння каналами
- відкладений запуск каналів
- ідентифікатори плагінів запуску
- володіння провайдерами та серверами CLI
- володіння провайдером налаштування, псевдонімами команд, провайдером каталогу моделей і контрактами маніфестів
- перевірка схеми конфігурації плагінів і схеми конфігурації каналів
- рішення щодо автоматичного ввімкнення під час запуску
Межею безпеки є заміна знімка, а не його зміна. Повторно створюйте знімок, коли змінюються конфігурація, перелік плагінів, записи встановлення або збережена політика індексу. Не використовуйте його як широкий змінний глобальний реєстр і не зберігайте необмежену кількість історичних знімків. Завантаження плагінів під час виконання залишається відокремленим від знімків метаданих, щоб застарілий стан середовища виконання не можна було приховати за кешем метаданих.
Правило кешування задокументовано у внутрішній архітектурі плагінів: метадані маніфестів і виявлення є актуальними, якщо виклик не утримує явний знімок, таблицю пошуку або реєстр маніфестів для поточного потоку. Приховані кеші метаданих і TTL за системним часом не є частиною завантаження плагінів. Після фактичного завантаження коду або встановлених артефактів можуть зберігатися лише кеші завантажувача середовища виконання, модулів і артефактів залежностей.
Деякі виклики холодного шляху досі створюють реєстри маніфестів безпосередньо зі збереженого індексу встановлених плагінів замість отримання PluginLookUpTable від Gateway. Тепер цей шлях створює реєстр на вимогу; якщо виклик уже має поточну таблицю пошуку або явний реєстр маніфестів, віддавайте перевагу їх передаванню через потоки середовища виконання.
Планування активації
Планування активації є частиною площини керування. Викликачі можуть запитувати, які плагіни стосуються конкретної команди, постачальника, каналу, маршруту, середовища агента або можливості, перш ніж завантажувати ширші реєстри середовища виконання.
Планувальник зберігає сумісність із поточною поведінкою маніфесту:
- поля
activation.*є явними підказками для планувальника providers,channels,commandAliases,setup.providers,contracts.toolsі хуки залишаються резервним джерелом даних про володіння з маніфесту- API планувальника, що повертає лише ідентифікатори, залишається доступним для наявних викликачів
- API плану повідомляє мітки причин, щоб діагностика могла відрізняти явні підказки від резервного визначення за володінням
Плагіни каналів і спільний інструмент повідомлень
Плагінам каналів не потрібно реєструвати окремий інструмент надсилання, редагування або реакцій для звичайних дій у чаті. OpenClaw зберігає один спільний інструмент message у ядрі, а плагіни каналів відповідають за специфічні для каналу виявлення та виконання, що стоять за ним.
Поточна межа відповідальності:
- ядро відповідає за хост спільного інструмента
message, підключення до промпту, облік сеансів і гілок, а також диспетчеризацію виконання - плагіни каналів відповідають за виявлення дій у межах області, виявлення можливостей і будь-які специфічні для каналу фрагменти схеми
- плагіни каналів відповідають за специфічну для постачальника граматику розмов сеансу, зокрема за те, як ідентифікатори розмов кодують ідентифікатори гілок або успадковуються від батьківських розмов
- плагіни каналів виконують остаточну дію через свій адаптер дій
Для плагінів каналів поверхнею SDK є 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 поверхня постачальника міститься в одному плагіні, навіть якщо вона охоплює текстові моделі, мовлення, зображення та відео
- інші постачальники можуть робити те саме для власної області поверхні
- каналам неважливо, якому плагіну постачальника належить постачальник; вони використовують спільний контракт можливостей, наданий ядром
Ось ключова відмінність:
- плагін = межа володіння
- можливість = контракт ядра, який можуть реалізовувати або використовувати кілька плагінів
Отже, якщо OpenClaw додає нову предметну область, як-от відео, перше запитання — не «який постачальник має жорстко закодувати оброблення відео?». Перше запитання — «яким є контракт основної можливості відео?». Коли цей контракт існує, плагіни постачальників можуть реєструватися для нього, а плагіни каналів і функцій — використовувати його.
Якщо можливості ще не існує, правильний підхід зазвичай такий:
Визначте можливість
Визначте відсутню можливість у ядрі.
Надайте через SDK
Надайте її через API або середовище виконання плагіна типізованим способом.
Підключіть споживачів
Підключіть канали й функції до цієї можливості.
Реалізації постачальників
Дозвольте плагінам постачальників реєструвати реалізації.
Це зберігає явне володіння та водночас запобігає появі в ядрі поведінки, залежної від одного постачальника або одноразового специфічного для плагіна шляху коду.
Рівні можливостей
Використовуйте цю ментальну модель, вирішуючи, де має міститися код:
Рівень можливостей ядра
Спільна оркестрація, політика, резервні механізми, правила об’єднання конфігурації, семантика доставлення та типізовані контракти.
Рівень плагіна постачальника
Специфічні для постачальника API, автентифікація, каталоги моделей, синтез мовлення, генерування зображень, відеобекенди та кінцеві точки використання.
Рівень плагіна каналу або функції
Інтеграція Discord, Slack, голосових викликів тощо, яка використовує можливості ядра та надає їх на певній поверхні.
Наприклад, TTS відповідає цій структурі:
- ядро відповідає за політику TTS під час відповіді, порядок резервування, налаштування та доставлення каналом
elevenlabs,google,microsoftіopenaiвідповідають за реалізації синтезуvoice-callвикористовує допоміжний засіб середовища виконання TTS для телефонії
Такій самій моделі слід віддавати перевагу для майбутніх можливостей.
Приклад плагіна компанії з багатьма можливостями
Плагін компанії має сприйматися ззовні як цілісний. Якщо OpenClaw має спільні контракти для моделей, мовлення, транскрибування в реальному часі, голосу в реальному часі, розуміння медіаданих, генерування зображень, генерування відео, отримання вебресурсів і вебпошуку, постачальник може відповідати за всі свої поверхні в одному місці:
describeImageWithModel, transcribeOpenAiCompatibleAudio,} from "openclaw/plugin-sdk/media-understanding"; const plugin: OpenClawPluginDefinition = { id: "exampleai", name: "ExampleAI", register(api) { api.registerProvider({ id: "exampleai", // auth/model catalog/runtime hooks }); api.registerSpeechProvider({ id: "exampleai", // vendor speech config — implement the SpeechProviderPlugin interface directly }); api.registerMediaUnderstandingProvider({ id: "exampleai", capabilities: ["image", "audio", "video"], async describeImage(req) { return describeImageWithModel({ ...req, provider: "exampleai", }); }, async transcribeAudio(req) { return transcribeOpenAiCompatibleAudio({ ...req, provider: "exampleai", }); }, }); api.registerWebSearchProvider( createPluginBackedWebSearchProvider({ id: "exampleai-search", // credential + fetch logic }), ); },}; export default plugin;Важливі не точні назви допоміжних засобів, а структура:
- один плагін відповідає за поверхню постачальника
- ядро й надалі відповідає за контракти можливостей
- канали та плагіни функцій використовують допоміжні засоби
api.runtime.*, а не код постачальника - тести контрактів можуть перевіряти, що плагін зареєстрував можливості, за які заявляє відповідальність
Приклад можливості: розуміння відео
OpenClaw уже розглядає розуміння зображень, аудіо та відео як одну спільну можливість. Там застосовується та сама модель володіння:
Ядро визначає контракт
Ядро визначає контракт розуміння медіаданих.
Плагіни постачальників реєструються
Плагіни постачальників реєструють describeImage, transcribeAudio і describeVideo, коли це застосовно.
Споживачі використовують спільну поведінку
Канали та плагіни функцій використовують спільну поведінку ядра замість прямого підключення до коду постачальника.
Це запобігає вбудовуванню в ядро припущень одного постачальника щодо відео. Плагін відповідає за поверхню постачальника; ядро — за контракт можливостей і резервну поведінку.
Генерування відео вже використовує ту саму послідовність: ядро відповідає за типізований контракт можливості та допоміжний засіб середовища виконання, а плагіни постачальників реєструють для нього реалізації api.registerVideoGenerationProvider(...).
Потрібен конкретний контрольний список упровадження? Див. Посібник із можливостей.
Контракти та забезпечення дотримання
Поверхня API Plugin навмисно типізована й централізована в OpenClawPluginApi. Цей контракт визначає підтримувані точки реєстрації та допоміжні засоби середовища виконання, на які може покладатися Plugin.
Чому це важливо:
- автори плагінів отримують єдиний стабільний внутрішній стандарт
- ядро може відхиляти дублювання володіння, наприклад коли два плагіни реєструють однаковий ідентифікатор постачальника
- під час запуску можуть відображатися дієві діагностичні повідомлення щодо некоректної реєстрації
- контрактні тести можуть забезпечувати дотримання володіння вбудованими плагінами та запобігати непомітному розходженню
Існує два рівні забезпечення дотримання:
Забезпечення дотримання під час реєстрації в середовищі виконання
Реєстр плагінів перевіряє реєстрації під час завантаження плагінів. Наприклад, дублікати ідентифікаторів постачальників, дублікати ідентифікаторів постачальників синтезу мовлення та некоректні реєстрації спричиняють діагностичні повідомлення плагіна замість невизначеної поведінки.
Контрактні тести
Під час тестових запусків вбудовані плагіни фіксуються в контрактних реєстрах, щоб OpenClaw міг явно перевіряти володіння. Наразі це використовується для постачальників моделей, постачальників синтезу мовлення, постачальників вебпошуку та володіння вбудованими реєстраціями.
Практичний наслідок полягає в тому, що OpenClaw заздалегідь знає, який Plugin володіє якою поверхнею. Завдяки цьому ядро й канали можуть безперешкодно поєднуватися, оскільки володіння оголошене, типізоване й придатне до тестування, а не неявне.
Що має входити до контракту
Належні контракти
- типізовані
- невеликі
- орієнтовані на конкретну можливість
- належать ядру
- придатні для повторного використання кількома плагінами
- можуть використовуватися каналами й функціями без знань про конкретного постачальника
Неналежні контракти
- політика конкретного постачальника, прихована в ядрі
- одноразові обхідні механізми плагіна, що обходять реєстр
- код каналу, який безпосередньо звертається до реалізації конкретного постачальника
- спеціально створені об’єкти середовища виконання, які не є частиною
OpenClawPluginApiабоapi.runtime
У разі сумнівів підвищуйте рівень абстракції: спочатку визначте можливість, а потім дозвольте плагінам підключатися до неї.
Модель виконання
Нативні плагіни OpenClaw виконуються у процесі разом із Gateway. Вони не ізольовані в пісочниці. Завантажений нативний Plugin має ту саму межу довіри на рівні процесу, що й код ядра.
Сумісні пакети за замовчуванням безпечніші, оскільки OpenClaw наразі розглядає їх як пакети метаданих і вмісту. У поточних випусках це переважно означає вбудовані Skills.
Використовуйте списки дозволених елементів і явні шляхи встановлення та завантаження для невбудованих плагінів. Сприймайте плагіни робочого простору як код для розробки, а не як стандартний варіант для виробничого середовища.
Для назв пакетів вбудованого робочого простору зберігайте ідентифікатор плагіна прив’язаним до назви npm: за замовчуванням @openclaw/<id> або затверджений типізований суфікс, наприклад -provider, -plugin, -speech, -sandbox чи -media-understanding, коли пакет навмисно надає вужчу роль плагіна.
Межа експорту
OpenClaw експортує можливості, а не зручні деталі реалізації.
Зберігайте реєстрацію можливостей загальнодоступною. Скоротіть експорт допоміжних засобів, що не входять до контракту:
- допоміжні підшляхи, специфічні для вбудованих плагінів
- підшляхи внутрішньої інфраструктури середовища виконання, не призначені для загальнодоступного API
- допоміжні засоби для зручності, специфічні для постачальника
- допоміжні засоби налаштування й початкового налаштування, які є деталями реалізації
Зарезервовані допоміжні підшляхи вбудованих плагінів вилучено зі згенерованої мапи експорту SDK. Зберігайте допоміжні засоби, специфічні для власника, у пакеті відповідного плагіна; переносіть до загальних контрактів SDK лише придатну для повторного використання поведінку хоста, наприклад plugin-sdk/gateway-runtime, plugin-sdk/security-runtime і plugin-sdk/plugin-config-runtime.
Внутрішня будова та довідкові матеріали
Відомості про конвеєр завантаження, модель реєстру, перехоплювачі середовища виконання постачальника, HTTP-маршрути Gateway, схеми інструментів повідомлень, визначення цілей каналів, каталоги постачальників, плагіни рушія контексту та посібник із додавання нової можливості див. у розділі Внутрішня будова архітектури плагінів.