Plugin SDK reference
Маніфест Plugin
Ця сторінка описує маніфест нативного плагіна OpenClaw, openclaw.plugin.json. Відомості про сумісні структури пакетів (Codex, Claude, Cursor) див. у розділі Пакети плагінів.
Сумісні формати пакетів натомість використовують власні файли маніфестів:
- Пакет Codex:
.codex-plugin/plugin.json - Пакет Claude:
.claude-plugin/plugin.jsonабо типова структура компонентів Claude без маніфесту - Пакет Cursor:
.cursor-plugin/plugin.json
OpenClaw автоматично виявляє ці структури, але не перевіряє їх за наведеною нижче схемою openclaw.plugin.json. Для сумісного пакета OpenClaw зчитує метадані пакета, оголошені кореневі каталоги навичок, кореневі каталоги команд Claude, типові значення Claude settings.json, типові значення LSP Claude і підтримувані набори хуків, якщо структура відповідає вимогам середовища виконання OpenClaw.
Кожен нативний плагін OpenClaw повинен містити openclaw.plugin.json у кореневому каталозі плагіна. OpenClaw зчитує його для перевірки конфігурації без виконання коду плагіна. Відсутній або недійсний маніфест блокує перевірку конфігурації та вважається помилкою плагіна.
Повний посібник із системи плагінів див. у розділі Плагіни, а опис нативної моделі можливостей і поточні рекомендації щодо зовнішньої сумісності — у розділі Модель можливостей.
Призначення цього файлу
openclaw.plugin.json — це метадані, які OpenClaw зчитує до завантаження коду вашого плагіна. Усе в ньому має бути достатньо легким для перевірки без запуску середовища виконання плагіна.
Використовуйте його для:
- ідентифікації плагіна, перевірки конфігурації та підказок інтерфейсу конфігурації
- метаданих автентифікації, початкового налаштування та конфігурування (псевдонім, автоматичне ввімкнення, змінні середовища постачальника, варіанти автентифікації)
- підказок щодо активації для поверхонь площини керування
- скороченого визначення належності сімейств моделей
- статичних знімків належності можливостей (
contracts) - метаданих засобу запуску QA, доступних для перевірки спільному хосту
openclaw qa - метаданих конфігурації для окремих каналів, об’єднаних із каталогом і поверхнями перевірки
Не використовуйте його для: реєстрації поведінки під час виконання, оголошення точок входу коду або метаданих установлення npm. Вони мають міститися в коді вашого плагіна та package.json.
Мінімальний приклад
{ "id": "voice-call", "configSchema": { "type": "object", "additionalProperties": false, "properties": {} }}Розширений приклад
{ "id": "openrouter", "name": "OpenRouter", "description": "OpenRouter provider plugin", "version": "1.0.0", "providers": ["openrouter"], "modelSupport": { "modelPrefixes": ["router-"] }, "modelIdNormalization": { "providers": { "openrouter": { "prefixWhenBare": "openrouter" } } }, "providerEndpoints": [ { "endpointClass": "openrouter", "hostSuffixes": ["openrouter.ai"] } ], "providerRequest": { "providers": { "openrouter": { "family": "openrouter" } } }, "cliBackends": ["openrouter-cli"], "syntheticAuthRefs": ["openrouter-cli"], "setup": { "providers": [ { "id": "openrouter", "envVars": ["OPENROUTER_API_KEY"] } ] }, "providerAuthAliases": { "openrouter-coding": "openrouter" }, "channelEnvVars": { "openrouter-chatops": ["OPENROUTER_CHATOPS_TOKEN"] }, "providerAuthChoices": [ { "provider": "openrouter", "method": "api-key", "choiceId": "openrouter-api-key", "choiceLabel": "OpenRouter API key", "groupId": "openrouter", "groupLabel": "OpenRouter", "optionKey": "openrouterApiKey", "cliFlag": "--openrouter-api-key", "cliOption": "--openrouter-api-key <key>", "cliDescription": "OpenRouter API key", "onboardingScopes": ["text-inference"] } ], "uiHints": { "apiKey": { "label": "API key", "placeholder": "sk-or-v1-...", "sensitive": true } }, "configSchema": { "type": "object", "additionalProperties": false, "properties": { "apiKey": { "type": "string" } } }}Довідник полів верхнього рівня
| Поле | Обов’язкове | Тип | Значення |
|---|---|---|---|
id |
Так | string |
Канонічний ідентифікатор плагіна. Цей ідентифікатор використовується в plugins.entries.<id>. |
configSchema |
Так | object |
Вбудована JSON Schema для конфігурації цього плагіна. |
requiresPlugins |
Ні | string[] |
Ідентифікатори плагінів, які також мають бути встановлені, щоб цей плагін діяв. Механізм виявлення залишає плагін доступним для завантаження, але попереджає про відсутність будь-якого обов’язкового плагіна. |
enabledByDefault |
Ні | true |
Позначає вбудований плагін як увімкнений за замовчуванням. Не вказуйте це поле або задайте будь-яке значення, відмінне від true, щоб плагін за замовчуванням залишався вимкненим. |
enabledByDefaultOnPlatforms |
Ні | string[] |
Позначає вбудований плагін як увімкнений за замовчуванням лише на перелічених платформах Node.js, наприклад ["darwin"]. Явна конфігурація все одно має пріоритет. |
legacyPluginIds |
Ні | string[] |
Застарілі ідентифікатори, які нормалізуються до цього канонічного ідентифікатора плагіна. |
autoEnableWhenConfiguredProviders |
Ні | string[] |
Ідентифікатори провайдерів, за згадування яких у даних автентифікації, конфігурації або посиланнях на моделі цей плагін має автоматично вмикатися. |
kind |
Ні | PluginKind | PluginKind[] |
Оголошує один або кілька взаємовиключних типів плагінів ("memory", "context-engine"), які використовує plugins.slots.*. Плагін, що володіє обома слотами, оголошує обидва типи в одному масиві. |
channels |
Ні | string[] |
Ідентифікатори каналів, якими володіє цей плагін. Використовуються для виявлення та перевірки конфігурації. |
providers |
Ні | string[] |
Ідентифікатори провайдерів, якими володіє цей плагін. |
providerCatalogEntry |
Ні | string |
Шлях до полегшеного модуля каталогу провайдерів відносно кореня плагіна для метаданих каталогу провайдерів, обмежених маніфестом, які можна завантажити без активації повного середовища виконання плагіна. |
modelSupport |
Ні | object |
Належні маніфесту скорочені метадані сімейства моделей, які використовуються для автоматичного завантаження плагіна до запуску середовища виконання. |
modelCatalog |
Ні | object |
Декларативні метадані каталогу моделей для провайдерів, якими володіє цей плагін. Це контракт площини керування для майбутнього переліку лише для читання, початкового налаштування, засобів вибору моделей, псевдонімів і приховування без завантаження середовища виконання плагіна. |
modelPricing |
Ні | object |
Належна провайдеру політика зовнішнього пошуку цін. Використовуйте її, щоб виключити локальних або самостійно розміщених провайдерів із віддалених каталогів цін або зіставити посилання на провайдерів з ідентифікаторами каталогів OpenRouter/LiteLLM без жорстко заданих ідентифікаторів провайдерів у ядрі. |
modelIdNormalization |
Ні | object |
Належне провайдеру очищення псевдонімів або префіксів ідентифікаторів моделей, яке має виконуватися до завантаження середовища виконання провайдера. |
providerEndpoints |
Ні | object[] |
Належні маніфесту метадані хоста кінцевої точки або baseUrl для маршрутів провайдера, які ядро має класифікувати до завантаження середовища виконання провайдера. |
providerRequest |
Ні | object |
Спрощені метадані сімейства провайдерів і сумісності запитів, які використовує загальна політика запитів до завантаження середовища виконання провайдера. |
secretProviderIntegrations |
Ні | Record<string, object> |
Декларативні попередньо налаштовані конфігурації провайдерів виконання SecretRef, які інтерфейси налаштування або встановлення можуть пропонувати без жорстко заданих інтеграцій, специфічних для провайдерів, у ядрі. |
cliBackends |
Ні | string[] |
Ідентифікатори серверних механізмів інференсу CLI, якими володіє цей плагін. Використовуються для автоматичної активації під час запуску за явними посиланнями в конфігурації. |
syntheticAuthRefs |
Ні | string[] |
Посилання на провайдери або серверні механізми CLI, для яких під час холодного виявлення моделей до завантаження середовища виконання слід перевірити належний плагіну хук синтетичної автентифікації. |
nonSecretAuthMarkers |
Ні | string[] |
Належні вбудованому плагіну значення-заповнювачі ключів API, які позначають несекретний стан локальних облікових даних, OAuth або облікових даних середовища. |
commandAliases |
Ні | object[] |
Назви команд, якими володіє цей плагін і для яких до завантаження середовища виконання слід створювати діагностику конфігурації та CLI з урахуванням плагіна. |
providerAuthEnvVars |
Ні | Record<string, string[]> |
Застарілі метадані змінних середовища для сумісності під час пошуку автентифікації або стану провайдера. Для нових плагінів віддавайте перевагу setup.providers[].envVars; OpenClaw продовжує зчитувати ці дані протягом періоду припинення підтримки. |
providerUsageAuthEnvVars |
Ні | Record<string, string[]> |
Облікові дані провайдера лише для використання або виставлення рахунків. OpenClaw використовує ці назви для виявлення даних про використання й очищення секретів, але ніколи — для автентифікації інференсу. |
providerAuthAliases |
Ні | Record<string, string> |
Ідентифікатори провайдерів, які мають повторно використовувати інший ідентифікатор провайдера для пошуку автентифікаційних даних, наприклад провайдер програмування, що використовує той самий ключ API базового провайдера та профілі автентифікації. |
channelEnvVars |
Ні | Record<string, string[]> |
Спрощені метадані змінних середовища каналу, які OpenClaw може перевіряти без завантаження коду плагіна. Використовуйте їх для керованого змінними середовища налаштування каналу або інтерфейсів автентифікації, які мають бути доступні загальним допоміжним засобам запуску чи конфігурації. |
providerAuthChoices |
Ні | object[] |
Спрощені метадані вибору автентифікації для засобів вибору під час початкового налаштування, визначення пріоритетного провайдера та простого підключення прапорців CLI. |
activation |
Ні | object |
Спрощені метадані планувальника активації для завантаження, ініційованого запуском, провайдером, командою, каналом, маршрутом або можливістю. Лише метадані; фактичною поведінкою й надалі керує середовище виконання плагіна. |
setup |
Ні | object |
Спрощені дескриптори налаштування або початкового налаштування, які інтерфейси виявлення та налаштування можуть перевіряти без завантаження середовища виконання плагіна. |
qaRunners |
Ні | object[] |
Спрощені дескриптори засобу запуску QA, які спільний хост openclaw qa використовує до завантаження середовища виконання плагіна. |
contracts |
Ні | object |
Статичний знімок належності можливостей для зовнішніх хуків автентифікації, векторних представлень, мовлення, транскрибування в реальному часі, голосового зв’язку в реальному часі, розуміння медіаданих, генерування зображень, відео та музики, отримання вебресурсів, вебпошуку, провайдерів воркерів, видобування вмісту документів і вебсторінок, а також належності інструментів. |
configContracts |
Ні | object |
Належна маніфесту поведінка конфігурації, яку використовують загальні допоміжні засоби ядра: виявлення небезпечних прапорців, цільові розташування міграції SecretRef і звуження застарілих шляхів конфігурації. Див. довідку про configContracts. |
mediaUnderstandingProviderMetadata |
Ні | Record<string, object> |
Легкі стандартні налаштування розпізнавання медіаданих для ідентифікаторів провайдерів, оголошених у contracts.mediaUnderstandingProviders. |
imageGenerationProviderMetadata |
Ні | Record<string, object> |
Легкі метадані автентифікації для генерування зображень для ідентифікаторів провайдерів, оголошених у contracts.imageGenerationProviders, зокрема належні провайдеру псевдоніми автентифікації та перевірки базової URL-адреси. |
videoGenerationProviderMetadata |
Ні | Record<string, object> |
Легкі метадані автентифікації для генерування відео для ідентифікаторів провайдерів, оголошених у contracts.videoGenerationProviders, зокрема належні провайдеру псевдоніми автентифікації та перевірки базової URL-адреси. |
musicGenerationProviderMetadata |
Ні | Record<string, object> |
Легкі метадані автентифікації для генерування музики для ідентифікаторів провайдерів, оголошених у contracts.musicGenerationProviders, зокрема належні провайдеру псевдоніми автентифікації та перевірки базової URL-адреси. |
toolMetadata |
Ні | Record<string, object> |
Легкі метадані доступності для належних плагіну інструментів, оголошених у contracts.tools. Використовуйте їх, коли інструмент не повинен завантажувати середовище виконання за відсутності підтверджень із конфігурації, змінних середовища або автентифікації. |
channelConfigs |
Ні | Record<string, object> |
Належні маніфесту метадані конфігурації каналу, об’єднані з поверхнями виявлення та перевірки до завантаження середовища виконання. |
skills |
Ні | string[] |
Каталоги Skills для завантаження, відносно кореневого каталогу плагіна. |
name |
Ні | string |
Зрозуміла для людини назва плагіна. |
description |
Ні | string |
Короткий опис, що відображається в інтерфейсах плагіна. |
catalog |
Ні | object |
Необов’язкові підказки щодо представлення для інтерфейсів каталогу плагінів. Ці метадані не встановлюють і не вмикають плагін та не надають йому довіри. |
icon |
Ні | string |
URL-адреса зображення HTTPS для карток маркетплейсу або каталогу. ClawHub приймає будь-яку дійсну URL-адресу https:// і використовує стандартну піктограму плагіна, якщо її не вказано або вона недійсна. |
version |
Ні | string |
Інформаційна версія плагіна. |
uiHints |
Ні | Record<string, object> |
Мітки інтерфейсу, заповнювачі та позначки чутливості для полів конфігурації. |
Довідник каталогу
catalog надає необов’язкові підказки щодо відображення для засобів перегляду плагінів. Хости можуть ігнорувати ці підказки. Вони ніколи не встановлюють і не вмикають плагін, а також не змінюють його поведінку під час виконання чи рівень довіри.
{ "catalog": { "featured": true, "order": 10 }}| Поле | Тип | Значення |
|---|---|---|
featured |
boolean |
Чи мають поверхні каталогу виділяти цей плагін. |
order |
number |
Підказка щодо порядку відображення серед відібраних плагінів за зростанням; менші значення відображаються раніше. |
Довідник метаданих постачальника генерування
Поля метаданих постачальника генерування описують статичні сигнали автентифікації для постачальників, оголошених у відповідному списку contracts.*GenerationProviders. OpenClaw зчитує ці поля до завантаження середовища виконання постачальника, щоб основні інструменти могли визначити доступність постачальника генерування без імпорту кожного плагіна постачальника.
Використовуйте ці поля лише для простих декларативних фактів, перевірка яких не потребує значних ресурсів. Транспорт, перетворення запитів, оновлення токенів, перевірка облікових даних і фактична поведінка генерування залишаються в середовищі виконання плагіна.
{ "contracts": { "imageGenerationProviders": ["example-image"] }, "imageGenerationProviderMetadata": { "example-image": { "aliases": ["example-image-oauth"], "authProviders": ["example-image"], "configSignals": [ { "rootPath": "plugins.entries.example-image.config", "overlayPath": "image", "mode": { "path": "mode", "default": "local", "allowed": ["local"] }, "requiredAny": ["workflow", "workflowPath"], "required": ["promptNodeId"] } ], "authSignals": [ { "provider": "example-image" }, { "provider": "example-image-oauth", "providerBaseUrl": { "provider": "example-image", "defaultBaseUrl": "https://api.example.com/v1", "allowedBaseUrls": ["https://api.example.com/v1"] } } ] } }}Кожен запис метаданих підтримує:
| Поле | Обов’язкове | Тип | Значення |
|---|---|---|---|
aliases |
Ні | string[] |
Додаткові ідентифікатори постачальників, які слід вважати статичними псевдонімами автентифікації для постачальника генерування. |
authProviders |
Ні | string[] |
Ідентифікатори постачальників, налаштовані профілі автентифікації яких слід вважати автентифікацією для цього постачальника генерування. |
configSignals |
Ні | object[] |
Прості сигнали доступності лише з конфігурації для локальних або самостійно розміщених постачальників, яких можна налаштувати без профілів автентифікації чи змінних середовища. |
authSignals |
Ні | object[] |
Явні сигнали автентифікації. Якщо вони наявні, то замінюють стандартний набір сигналів з ідентифікатора постачальника, aliases та authProviders. |
referenceAudioInputs |
Ні | boolean |
Лише для генерування відео. Установіть значення true, якщо постачальник приймає еталонні аудіоресурси; інакше video_generate приховує параметри еталонного аудіо. |
Кожен запис configSignals підтримує:
| Поле | Обов’язкове | Тип | Значення |
|---|---|---|---|
rootPath |
Так | string |
Шлях із компонентами, розділеними крапками, до об’єкта конфігурації, що належить плагіну та має бути перевірений, наприклад plugins.entries.example.config. |
overlayPath |
Ні | string |
Шлях із компонентами, розділеними крапками, усередині кореневої конфігурації до об’єкта, який слід накласти на кореневий об’єкт перед оцінюванням сигналу. Використовуйте це для конфігурації, специфічної для можливості, як-от image, video або music. |
overlayMapPath |
Ні | string |
Шлях із компонентами, розділеними крапками, усередині кореневої конфігурації до об’єкта, значення якого слід по черзі накладати на кореневий об’єкт. Використовуйте це для мап іменованих облікових записів, як-от accounts, де достатньо будь-якого налаштованого облікового запису. |
required |
Ні | string[] |
Шляхи з компонентами, розділеними крапками, усередині ефективної конфігурації, які повинні мати налаштовані значення. Рядки мають бути непорожніми; об’єкти та масиви також не повинні бути порожніми. |
requiredAny |
Ні | string[] |
Шляхи з компонентами, розділеними крапками, усередині ефективної конфігурації, серед яких принаймні один повинен мати налаштоване значення. |
mode |
Ні | object |
Необов’язкова перевірка рядкового режиму всередині ефективної конфігурації. Використовуйте її, коли доступність лише на основі конфігурації застосовується тільки до одного режиму. |
Кожна перевірка mode підтримує:
| Поле | Обов’язкове | Тип | Значення |
|---|---|---|---|
path |
Ні | string |
Шлях із компонентами, розділеними крапками, усередині ефективної конфігурації. Типове значення — mode. |
default |
Ні | string |
Значення режиму, яке слід використовувати, коли шлях відсутній у конфігурації. |
allowed |
Ні | string[] |
Якщо поле наявне, сигнал проходить лише тоді, коли ефективний режим є одним із цих значень. |
disallowed |
Ні | string[] |
Якщо поле наявне, сигнал не проходить, коли ефективний режим є одним із цих значень. |
Кожен запис authSignals підтримує:
| Поле | Обов’язкове | Тип | Значення |
|---|---|---|---|
provider |
Так | string |
Ідентифікатор постачальника, який слід перевірити в налаштованих профілях автентифікації. |
providerBaseUrl |
Ні | object |
Необов’язкова перевірка, завдяки якій сигнал враховується лише тоді, коли зазначений налаштований постачальник використовує дозволену базову URL-адресу. Використовуйте це, якщо псевдонім автентифікації дійсний лише для певних API. |
Кожна перевірка providerBaseUrl підтримує:
| Поле | Обов’язкове | Тип | Значення |
|---|---|---|---|
provider |
Так | string |
Ідентифікатор конфігурації постачальника, у якому слід перевірити baseUrl. |
defaultBaseUrl |
Ні | string |
Базова URL-адреса, яку слід використовувати, коли baseUrl відсутня в конфігурації постачальника. |
allowedBaseUrls |
Так | string[] |
Дозволені базові URL-адреси для цього сигналу автентифікації. Сигнал ігнорується, якщо налаштована або стандартна базова URL-адреса не збігається з жодним із цих нормалізованих значень. |
Довідник метаданих інструментів
toolMetadata використовує ті самі форми configSignals та authSignals, що й метадані постачальника генерування, із ключами за назвою інструмента. contracts.tools оголошує належність. toolMetadata оголошує просте свідчення доступності, щоб OpenClaw міг не імпортувати середовище виконання плагіна лише для того, щоб його фабрика інструментів повернула null.
{ "setup": { "providers": [ { "id": "example", "envVars": ["EXAMPLE_API_KEY"] } ] }, "contracts": { "tools": ["example_search"] }, "toolMetadata": { "example_search": { "authSignals": [ { "provider": "example" } ], "configSignals": [ { "rootPath": "plugins.entries.example.config", "overlayPath": "search", "required": ["apiKey"] } ] } }}Записи toolMetadata також приймають optional (позначає інструмент як необов’язковий для активації плагіна) та replaySafe (позначає виконання інструмента як безпечне для повторення після незавершеного ходу моделі), на додачу до спільних полів configSignals/authSignals, наведених вище.
Якщо інструмент не має toolMetadata, OpenClaw зберігає наявну поведінку та завантажує плагін-власник, коли контракт інструмента відповідає політиці. Для інструментів критичного шляху, фабрика яких залежить від автентифікації або конфігурації, автори плагінів мають оголошувати toolMetadata, замість того щоб змушувати ядро імпортувати середовище виконання для перевірки.
Довідник providerAuthChoices
Кожен запис providerAuthChoices описує один варіант початкового налаштування або автентифікації. OpenClaw зчитує його до завантаження середовища виконання постачальника. Списки налаштування постачальників використовують ці варіанти з маніфесту, варіанти налаштування, отримані з дескрипторів, і метадані каталогу встановлення без завантаження середовища виконання постачальника.
| Поле | Обов’язкове | Тип | Що це означає |
|---|---|---|---|
provider |
Так | string |
Ідентифікатор провайдера, якому належить цей варіант. |
method |
Так | string |
Ідентифікатор методу автентифікації, якому слід передати обробку. |
choiceId |
Так | string |
Стабільний ідентифікатор варіанта автентифікації, що використовується під час початкового налаштування та у потоках CLI. |
choiceLabel |
Ні | string |
Мітка для користувача. Якщо її не вказано, OpenClaw використовує choiceId. |
choiceHint |
Ні | string |
Короткий допоміжний текст для засобу вибору. |
assistantPriority |
Ні | number |
Варіанти з меншими значеннями відображаються раніше в інтерактивних засобах вибору, керованих асистентом. |
assistantVisibility |
Ні | "visible" | "manual-only" |
Приховує варіант у засобах вибору асистента, але залишає можливість вибрати його вручну через CLI. |
deprecatedChoiceIds |
Ні | string[] |
Ідентифікатори застарілих варіантів, з яких користувачів слід перенаправляти на цей варіант-заміну. |
groupId |
Ні | string |
Необов’язковий ідентифікатор групи для об’єднання пов’язаних варіантів. |
groupLabel |
Ні | string |
Мітка цієї групи для користувача. |
groupHint |
Ні | string |
Короткий допоміжний текст для групи. |
onboardingFeatured |
Ні | boolean |
Відображає цю групу на рівні рекомендованих варіантів інтерактивного засобу вибору початкового налаштування перед пунктом "More...". |
optionKey |
Ні | string |
Внутрішній ключ параметра для простих потоків автентифікації з одним прапорцем. |
cliFlag |
Ні | string |
Назва прапорця CLI, наприклад --openrouter-api-key. |
cliOption |
Ні | string |
Повна форма параметра CLI, наприклад --openrouter-api-key <key>. |
cliDescription |
Ні | string |
Опис, що використовується в довідці CLI. |
appGuidedSecret |
Ні | boolean |
Для налаштування за допомогою застосунку достатньо одного вставленого секрету та стандартних параметрів провайдера. |
appGuidedDiscovery |
Ні | boolean |
Відповідний метод автентифікації середовища виконання відповідає за локальне виявлення лише для читання через appGuidedSetup. |
appGuidedAuth |
Ні | "oauth" | "device-code" |
Інтерактивний вхід, яким керує провайдер і який нативні клієнти налаштування можуть відображати універсально. |
onboardingScopes |
Ні | Array<"text-inference" | "image-generation" | "music-generation"> |
Визначає, на яких поверхнях початкового налаштування має відображатися цей варіант. Якщо не вказано, типовим значенням є ["text-inference"]. |
Коли appGuidedDiscovery має значення true, відповідний метод автентифікації провайдера повинен надавати
appGuidedSetup.detect і appGuidedSetup.prepare. Виявлення має виконуватися
лише для читання: без входу, отримання моделі, завантаження чи запису конфігурації. Підготовка повторно перевіряє
точно вибрану модель і повертає пропозицію конфігурації; OpenClaw виконує оперативне тестування цієї
пропозиції ізольовано та фіксує її лише після успішного завершення.
Довідка щодо commandAliases
Використовуйте commandAliases, коли Plugin володіє назвою команди середовища виконання, яку користувачі можуть помилково вказати в plugins.allow або спробувати запустити як кореневу команду CLI. OpenClaw використовує ці метадані для діагностики без імпорту коду середовища виконання Plugin.
{ "commandAliases": [ { "name": "dreaming", "kind": "runtime-slash", "cliCommand": "memory" } ]}| Поле | Обов’язкове | Тип | Що це означає |
|---|---|---|---|
name |
Так | string |
Назва команди, що належить цьому Plugin. |
kind |
Ні | "runtime-slash" |
Позначає псевдонім як слеш-команду чату, а не як кореневу команду CLI. |
cliCommand |
Ні | string |
Пов’язана коренева команда CLI, яку слід запропонувати для операцій CLI, якщо така існує. |
Довідка щодо activation
Використовуйте activation, коли Plugin може без значних витрат оголосити, які події площини керування мають включати його до плану активації/завантаження.
Цей блок є метаданими планувальника, а не API життєвого циклу. Він не реєструє поведінку середовища виконання, не замінює register(...) і не гарантує, що код Plugin уже виконано. Планувальник активації використовує ці поля, щоб звузити перелік кандидатів Plugin, перш ніж повернутися до наявних метаданих володіння маніфесту, як-от providers, channels, commandAliases, setup.providers, contracts.tools і хуки.
Надавайте перевагу найвужчим метаданим, які вже описують володіння. Використовуйте providers, channels, commandAliases, дескриптори налаштування або contracts, коли ці поля виражають зв’язок. Використовуйте activation для додаткових підказок планувальнику, які неможливо подати за допомогою цих полів володіння. Використовуйте cliBackends верхнього рівня для псевдонімів середовища виконання CLI, як-от claude-cli, my-cli або google-gemini-cli; activation.onAgentHarnesses призначено лише для вбудованих ідентифікаторів середовища агента, для яких ще немає поля володіння.
Кожен Plugin має задавати activation.onStartup свідомо. Установлюйте для нього true лише тоді, коли Plugin повинен запускатися під час запуску Gateway. Установлюйте для нього false, коли Plugin неактивний під час запуску й має завантажуватися лише за вужчими тригерами. Відсутність onStartup більше не спричиняє неявне завантаження Plugin під час запуску; використовуйте явні метадані активації для запуску, каналу, конфігурації, середовища агента, пам’яті чи інших вужчих тригерів активації.
{ "activation": { "onStartup": false, "onProviders": ["openai"], "onCommands": ["models"], "onChannels": ["web"], "onRoutes": ["gateway-webhook"], "onConfigPaths": ["browser"], "onCapabilities": ["provider", "tool"] }}| Поле | Обов’язкове | Тип | Що це означає |
|---|---|---|---|
onStartup |
Ні | boolean |
Явна активація під час запуску Gateway. Кожен Plugin має задавати це поле. true імпортує Plugin під час запуску; false залишає його відкладеним під час запуску, якщо завантаження не потрібне через інший відповідний тригер. |
onProviders |
Ні | string[] |
Ідентифікатори провайдерів, які мають включати цей Plugin до планів активації/завантаження. |
onAgentHarnesses |
Ні | string[] |
Ідентифікатори середовища виконання вбудованого агента, які мають включати цей Plugin до планів активації/завантаження. Для псевдонімів серверної частини CLI використовуйте cliBackends верхнього рівня. |
onCommands |
Ні | string[] |
Ідентифікатори команд, які мають включати цей Plugin до планів активації/завантаження. |
onChannels |
Ні | string[] |
Ідентифікатори каналів, які мають включати цей Plugin до планів активації/завантаження. |
onRoutes |
Ні | string[] |
Типи маршрутів, які мають включати цей Plugin до планів активації/завантаження. |
onConfigPaths |
Ні | string[] |
Шляхи конфігурації відносно кореня, які мають включати цей Plugin до планів запуску/завантаження, коли шлях присутній і не вимкнений явно. |
onCapabilities |
Ні | Array<"provider" | "channel" | "tool" | "hook"> |
Загальні підказки щодо можливостей, які використовуються для планування активації площини керування. За можливості надавайте перевагу вужчим полям. |
Поточні активні споживачі:
- Планування запуску Gateway використовує
activation.onStartupдля явного імпорту під час запуску. - Планування CLI, ініційоване командою, повертається до застарілого
commandAliases[].cliCommandабоcommandAliases[].name. - Планування запуску середовища виконання агента використовує
activation.onAgentHarnessesдля вбудованих інфраструктур тестування таcliBackends[]верхнього рівня для псевдонімів середовища виконання CLI. - Планування налаштування або каналу, ініційоване каналом, повертається до застарілого володіння
channels[], коли немає явних метаданих активації каналу. - Планування Plugin під час запуску використовує
activation.onConfigPathsдля поверхонь кореневої конфігурації, не пов’язаних із каналами, як-от блокbrowserвбудованого Plugin браузера. - Планування налаштування або середовища виконання, ініційоване постачальником, повертається до застарілого володіння
providers[]іcliBackends[]верхнього рівня, коли немає явних метаданих активації постачальника.
Діагностика планувальника може відрізняти явні підказки активації від резервного визначення за володінням у маніфесті. Наприклад, activation-command-hint означає, що збігся activation.onCommands, тоді як manifest-command-alias означає, що планувальник натомість використав володіння commandAliases. Ці мітки причин призначені для діагностики хоста й тестів; авторам Plugin слід і надалі оголошувати метадані, які найкраще описують володіння.
Довідник qaRunners
Використовуйте qaRunners, коли Plugin надає один або кілька транспортних засобів запуску під
спільним коренем openclaw qa. Ці метадані мають залишатися легкими та статичними; середовище
виконання Plugin усе одно відповідає за фактичну реєстрацію CLI через легку
поверхню runtime-api.ts, яка експортує відповідні qaRunnerCliRegistrations. Необов’язковий
adapterFactory надає транспорт спільним сценаріям контролю якості, не
змінюючи засіб запуску зареєстрованої команди.
{ "qaRunners": [ { "commandName": "matrix", "description": "Запустити підтримуваний Docker інтерактивний маршрут контролю якості Matrix із тимчасовим домашнім сервером" } ]}| Поле | Обов’язкове | Тип | Значення |
|---|---|---|---|
commandName |
Так | string |
Підкоманда, підключена під openclaw qa, наприклад matrix. |
description |
Ні | string |
Резервний текст довідки, коли спільному хосту потрібна команда-заглушка. |
Ідентифікатор adapterFactory має відповідати commandName. Не експортуйте реєстрації
для команд, яких немає в маніфесті.
Довідник setup
Використовуйте setup, коли поверхням налаштування та початкової конфігурації потрібні легкі метадані, якими володіє Plugin, ще до завантаження середовища виконання.
{ "setup": { "providers": [ { "id": "openai", "authMethods": ["api-key"], "envVars": ["OPENAI_API_KEY"], "authEvidence": [ { "type": "local-file-with-env", "fileEnvVar": "OPENAI_CREDENTIALS_FILE", "requiresAllEnv": ["OPENAI_PROJECT"], "credentialMarker": "openai-local-credentials", "source": "локальні облікові дані openai" } ] } ], "cliBackends": ["openai-cli"], "configMigrations": ["legacy-openai-auth"], "requiresRuntime": false }}cliBackends верхнього рівня залишається чинним і надалі описує серверні модулі виведення CLI. setup.cliBackends — це спеціальна для налаштування поверхня дескрипторів для процесів площини керування та налаштування, яка має залишатися лише на рівні метаданих.
Коли вони наявні, setup.providers і setup.cliBackends є пріоритетною поверхнею пошуку на основі дескрипторів для виявлення налаштувань. Якщо дескриптор лише звужує вибір Plugin-кандидата, а налаштуванню все ще потрібні розширені перехоплювачі середовища виконання під час налаштування, установіть requiresRuntime: true і залиште setup-api як резервний шлях виконання.
OpenClaw також включає setup.providers[].envVars до загальних пошуків автентифікації постачальника та змінних середовища. providerAuthEnvVars залишається підтримуваним через адаптер сумісності протягом періоду припинення підтримки, але невбудовані Plugin, які досі його використовують, отримують діагностичне повідомлення маніфесту. Нові Plugin мають розміщувати метадані змінних середовища для налаштування та стану в setup.providers[].envVars.
Використовуйте providerUsageAuthEnvVars, коли облікові дані для білінгу або на рівні організації мають активувати resolveUsageAuth, не стаючи обліковими даними для виведення. Ці назви додаються до блокування dotenv робочого простору, вилучення з дочірніх процесів ACP, фільтрування секретів у пісочниці та загального очищення секретів. Середовище виконання постачальника все одно читає та класифікує значення всередині resolveUsageAuth.
OpenClaw також може виводити прості варіанти налаштування з setup.providers[].authMethods, коли запис налаштування відсутній або коли setup.requiresRuntime: false оголошує середовище виконання налаштування непотрібним. Явні записи providerAuthChoices залишаються пріоритетними для власних міток, прапорців CLI, області початкової конфігурації та метаданих асистента.
Установлюйте requiresRuntime: false лише тоді, коли цих дескрипторів достатньо для поверхні налаштування. OpenClaw сприймає явний false як контракт лише на основі дескрипторів і не виконуватиме setup-api або openclaw.setupEntry для пошуку налаштувань. Якщо Plugin, що працює лише на основі дескрипторів, усе ж постачає один із цих записів середовища виконання налаштування, OpenClaw повідомляє додаткове діагностичне повідомлення й надалі ігнорує його. Якщо requiresRuntime пропущено, зберігається застаріла резервна поведінка, щоб наявні Plugin, які додали дескриптори без цього прапорця, не перестали працювати.
Оскільки пошук налаштувань може виконувати код setup-api, яким володіє Plugin, нормалізовані значення setup.providers[].id і setup.cliBackends[] мають залишатися унікальними серед виявлених Plugin. За неоднозначного володіння система безпечно завершує роботу помилкою, а не вибирає переможця за порядком виявлення.
Коли середовище виконання налаштування все ж виконується, діагностика реєстру налаштувань повідомляє про розбіжність дескрипторів, якщо setup-api реєструє постачальника або серверний модуль CLI, якого не оголошують дескриптори маніфесту, або якщо дескриптор не має відповідної реєстрації в середовищі виконання. Ці діагностичні повідомлення є додатковими й не відхиляють застарілі Plugin.
Довідник setup.providers
| Поле | Обов’язкове | Тип | Значення |
|---|---|---|---|
id |
Так | string |
Ідентифікатор постачальника, доступний під час налаштування або початкової конфігурації. Нормалізовані ідентифікатори мають бути глобально унікальними. |
authMethods |
Ні | string[] |
Ідентифікатори методів налаштування або автентифікації, які підтримує цей постачальник без завантаження повного середовища виконання. |
envVars |
Ні | string[] |
Змінні середовища, які загальні поверхні налаштування або стану можуть перевірити до завантаження середовища виконання Plugin. |
authEvidence |
Ні | object[] |
Легкі локальні перевірки ознак автентифікації для постачальників, які можуть автентифікуватися через несекретні маркери. |
authEvidence призначено для локальних маркерів облікових даних, якими володіє постачальник і які можна перевірити без завантаження коду середовища виконання. Ці перевірки мають залишатися легкими й локальними: без мережевих викликів, читання сховища ключів або диспетчера секретів, команд оболонки та запитів до API постачальника.
Підтримувані записи ознак:
| Поле | Обов’язкове | Тип | Значення |
|---|---|---|---|
type |
Так | string |
Наразі local-file-with-env. |
fileEnvVar |
Ні | string |
Змінна середовища, що містить явний шлях до файлу облікових даних. |
fallbackPaths |
Ні | string[] |
Шляхи до локальних файлів облікових даних, які перевіряються, коли fileEnvVar відсутній або порожній. Підтримує ${HOME} і ${APPDATA}. |
requiresAnyEnv |
Ні | string[] |
Принаймні одна з указаних змінних середовища має бути непорожньою, щоб ознака була чинною. |
requiresAllEnv |
Ні | string[] |
Усі вказані змінні середовища мають бути непорожніми, щоб ознака була чинною. |
credentialMarker |
Так | string |
Несекретний маркер, що повертається за наявності ознаки. |
source |
Ні | string |
Видима користувачеві мітка джерела для виведення автентифікації або стану. |
Поля setup
| Поле | Обов’язкове | Тип | Значення |
|---|---|---|---|
providers |
Ні | object[] |
Дескриптори налаштування постачальників, доступні під час налаштування та початкової конфігурації. |
cliBackends |
Ні | string[] |
Ідентифікатори серверних модулів часу налаштування, що використовуються для пошуку налаштувань насамперед за дескрипторами. Нормалізовані ідентифікатори мають бути глобально унікальними. |
configMigrations |
Ні | string[] |
Ідентифікатори міграцій конфігурації, якими володіє поверхня налаштування цього Plugin. |
requiresRuntime |
Ні | boolean |
Чи потрібне налаштуванню виконання setup-api після пошуку за дескриптором. |
Довідник uiHints
uiHints — це відображення назв полів конфігурації на невеликі підказки щодо відтворення. Ключі можуть містити крапки для вкладених полів конфігурації, але жоден сегмент шляху не може бути __proto__, constructor або prototype; налаштування відхиляє такі назви.
{ "uiHints": { "apiKey": { "label": "Ключ API", "help": "Використовується для запитів OpenRouter", "placeholder": "sk-or-v1-...", "sensitive": true } }}Кожна підказка поля може містити:
| Поле | Тип | Значення |
|---|---|---|
label |
string |
Видима користувачеві мітка поля. |
help |
string |
Короткий допоміжний текст. |
tags |
string[] |
Необов’язкові теги інтерфейсу. |
advanced |
boolean |
Позначає поле як розширене. |
sensitive |
boolean |
Позначає поле як секретне або чутливе. |
placeholder |
string |
Текст-заповнювач для полів форми. |
Довідник contracts
Використовуйте contracts лише для статичних метаданих володіння можливостями, які OpenClaw може прочитати без імпорту середовища виконання Plugin.
{ "contracts": { "agentToolResultMiddleware": ["openclaw", "codex"], "trustedToolPolicies": ["workflow-budget"], "externalAuthProviders": ["acme-ai"], "embeddingProviders": ["openai-compatible"], "speechProviders": ["openai"], "realtimeTranscriptionProviders": ["openai"], "realtimeVoiceProviders": ["openai"], "memoryEmbeddingProviders": ["local"], "mediaUnderstandingProviders": ["openai"], "imageGenerationProviders": ["openai"], "videoGenerationProviders": ["qwen"], "musicGenerationProviders": ["stability-audio"], "documentExtractors": ["example-docs"], "webContentExtractors": ["firecrawl"], "webFetchProviders": ["firecrawl"], "webSearchProviders": ["gemini"], "workerProviders": ["example-worker"], "usageProviders": ["acme-ai"], "migrationProviders": ["hermes"], "gatewayMethodDispatch": ["authenticated-request"], "tools": ["firecrawl_search", "firecrawl_scrape"] }}Кожен список необов’язковий:
| Поле | Тип | Що це означає |
|---|---|---|
embeddedExtensionFactories |
string[] |
Ідентифікатори фабрик розширень сервера застосунків Codex, наразі codex-app-server. |
agentToolResultMiddleware |
string[] |
Ідентифікатори середовищ виконання, для яких цей плагін може реєструвати проміжне ПЗ для результатів інструментів. |
trustedToolPolicies |
string[] |
Локальні для плагіна ідентифікатори довірених політик перед запуском інструментів, які може реєструвати встановлений плагін. Вбудовані плагіни можуть реєструвати політики без цього поля. |
externalAuthProviders |
string[] |
Ідентифікатори провайдерів, чиї обробники зовнішніх профілів автентифікації належать цьому плагіну. |
embeddingProviders |
string[] |
Ідентифікатори провайдерів вбудовувань загального призначення, які належать цьому плагіну для повторно використовуваного векторного вбудовування, зокрема для пам’яті. |
speechProviders |
string[] |
Ідентифікатори провайдерів мовлення, які належать цьому плагіну. |
realtimeTranscriptionProviders |
string[] |
Ідентифікатори провайдерів транскрибування в реальному часі, які належать цьому плагіну. |
realtimeVoiceProviders |
string[] |
Ідентифікатори провайдерів голосового зв’язку в реальному часі, які належать цьому плагіну. |
memoryEmbeddingProviders |
string[] |
Застарілі ідентифікатори провайдерів вбудовувань для пам’яті, які належать цьому плагіну. |
mediaUnderstandingProviders |
string[] |
Ідентифікатори провайдерів розпізнавання медіа, які належать цьому плагіну. |
transcriptSourceProviders |
string[] |
Ідентифікатори провайдерів джерел транскриптів, які належать цьому плагіну. |
documentExtractors |
string[] |
Ідентифікатори провайдерів видобування даних із документів (наприклад, PDF), які належать цьому плагіну. |
imageGenerationProviders |
string[] |
Ідентифікатори провайдерів генерування зображень, які належать цьому плагіну. |
videoGenerationProviders |
string[] |
Ідентифікатори провайдерів генерування відео, які належать цьому плагіну. |
musicGenerationProviders |
string[] |
Ідентифікатори провайдерів генерування музики, які належать цьому плагіну. |
webContentExtractors |
string[] |
Ідентифікатори провайдерів видобування вмісту вебсторінок, які належать цьому плагіну. |
webFetchProviders |
string[] |
Ідентифікатори провайдерів отримання даних із вебу, які належать цьому плагіну. |
webSearchProviders |
string[] |
Ідентифікатори провайдерів вебпошуку, які належать цьому плагіну. |
workerProviders |
string[] |
Ідентифікатори провайдерів хмарних виконавців, які належать цьому плагіну для підготовки ресурсів і керування життєвим циклом оренди на основі профілю. |
usageProviders |
string[] |
Ідентифікатори провайдерів, чиї обробники автентифікації використання та знімків використання належать цьому плагіну. |
migrationProviders |
string[] |
Ідентифікатори провайдерів імпорту, які належать цьому плагіну для openclaw migrate. |
gatewayMethodDispatch |
string[] |
Зарезервоване право для автентифікованих HTTP-маршрутів плагіна, які диспетчеризують методи Gateway у межах процесу. |
tools |
string[] |
Назви агентських інструментів, які належать цьому плагіну. |
contracts.embeddedExtensionFactories збережено для вбудованих фабрик розширень, призначених лише для сервера застосунків Codex. Натомість вбудовані перетворювачі результатів інструментів мають оголошувати contracts.agentToolResultMiddleware і реєструватися через api.registerAgentToolResultMiddleware(...). Встановлені плагіни можуть використовувати той самий механізм проміжного ПЗ лише за явного ввімкнення і лише для середовищ виконання, оголошених ними в contracts.agentToolResultMiddleware.
Встановлені плагіни, яким потрібен довірений хостом рівень політик перед запуском інструментів, мають оголосити кожен зареєстрований локальний ідентифікатор у contracts.trustedToolPolicies і бути явно ввімкненими. Вбудовані плагіни зберігають наявний шлях довірених політик, але встановлені плагіни з неоголошеними ідентифікаторами політик відхиляються до реєстрації. Ідентифікатори політик обмежені областю плагіна, який їх реєструє, тому два плагіни можуть оголосити й зареєструвати workflow-budget; один плагін не може двічі зареєструвати той самий локальний ідентифікатор.
Реєстрації середовища виконання api.registerTool(...) мають відповідати contracts.tools. Виявлення інструментів використовує цей список, щоб завантажувати лише ті середовища виконання плагінів, яким можуть належати запитані інструменти.
Плагіни провайдерів, які реалізують resolveExternalAuthProfiles, мають оголошувати contracts.externalAuthProviders; неоголошені обробники зовнішньої автентифікації ігноруються.
Плагіни провайдерів, які реалізують і resolveUsageAuth, і fetchUsageSnapshot, мають оголошувати кожен автоматично виявлений ідентифікатор провайдера в contracts.usageProviders. Виявлення використання читає цей контракт до завантаження коду середовища виконання, а потім перевіряє обидва обробники після завантаження лише оголошених власників.
Провайдери вбудовувань загального призначення мають оголошувати contracts.embeddingProviders для кожного адаптера, зареєстрованого через api.registerEmbeddingProvider(...). Використовуйте загальний контракт для повторно використовуваного генерування векторів, зокрема для провайдерів, які використовує пошук у пам’яті. contracts.memoryEmbeddingProviders — це застарілий механізм сумісності, специфічний для пам’яті, який зберігається лише на час переходу наявних провайдерів до загального механізму провайдерів вбудовувань.
Провайдери виконавців мають оголошувати кожен ідентифікатор api.registerWorkerProvider(...) у contracts.workerProviders. Ядро зберігає довготривалий намір до виклику provision; провайдери перевіряють свої налаштування до зовнішнього виділення ресурсів, а повторні виклики з тим самим ідентифікатором операції мають приймати ту саму оренду. Ядро також зберігає цей перевірений знімок налаштувань і передає його разом із leaseId до inspect({ leaseId, profile }) та destroy({ leaseId, profile }), зокрема після зміни або видалення зазначеного профілю. Знищення є ідемпотентним, інспектування повертає закрите об’єднання станів active / destroyed / unknown, а матеріал приватного ключа SSH зазначається лише через SecretRef. Підготовлені кінцеві точки SSH також мають містити відкритий hostKey із довіреного результату підготовки ресурсів точно у вигляді algorithm base64, без імені хоста чи коментаря, щоб ядро могло закріпити хост до підключення. Провайдери, які створюють динамічні посилання на ідентичності, можуть реалізувати авторитетний resolveSshIdentity({ leaseId, profile, keyRef }); провайдери без нього використовують загальний засіб розв’язання секретів ядра. Авторитетний unknown переводить активний локальний запис у стан покинутого; після збереженого запиту на знищення він підтверджує демонтаж.
contracts.gatewayMethodDispatch наразі приймає "authenticated-request". Це запобіжний механізм гігієни API для нативних HTTP-маршрутів плагінів, які навмисно диспетчеризують методи площини керування Gateway у межах процесу, а не пісочниця проти зловмисних нативних плагінів. Використовуйте його лише для ретельно перевірених вбудованих або операторських поверхонь, які вже потребують HTTP-автентифікації Gateway. Маршрут із таким правом залишається доступним, коли допуск кореневих завдань Gateway закритий, лише якщо він також оголошує auth: "gateway" і специфічний для маршруту gatewayRuntimeScopeSurface: "trusted-operator"; звичайні сусідні маршрути того самого плагіна залишаються за межею допуску. Завдяки цьому стан призупинення та відновлення залишаються доступними без надання всьому плагіну права обходити допуск. Обмежуйте синтаксичний аналіз і формування відповіді поза диспетчеризацією; істотна робота або робота зі зміною стану має виконуватися через диспетчеризацію методів Gateway, яка відповідає за допуск і дотримання областей доступу.
Довідник configContracts
Використовуйте configContracts для поведінки конфігурації, якою володіє маніфест і яка потрібна загальним допоміжним засобам ядра без імпорту середовища виконання плагіна: виявлення небезпечних прапорців, цілі міграції SecretRef і звуження застарілих шляхів конфігурації.
{ "configContracts": { "compatibilityMigrationPaths": ["legacyProvider"], "compatibilityRuntimePaths": ["legacyProvider.webhook"], "dangerousFlags": [ { "path": "accounts.*.allowUnverifiedSenders", "equals": true } ], "secretInputs": { "bundledDefaultEnabled": false, "paths": [ { "path": "apiKey", "expected": "string" } ] } }}| Поле | Обов’язкове | Тип | Що це означає |
|---|---|---|---|
compatibilityMigrationPaths |
Ні | string[] |
Шляхи конфігурації відносно кореня, які вказують, що можуть застосовуватися міграції сумісності цього плагіна під час налаштування. Дає змогу загальним операціям читання конфігурації середовища виконання пропускати всі поверхні налаштування плагіна, якщо конфігурація ніколи не посилається на нього. |
compatibilityRuntimePaths |
Ні | string[] |
Шляхи сумісності відносно кореня, які цей плагін може обслуговувати під час виконання до повної активації коду плагіна. Використовуйте це для застарілих поверхонь, які мають звужувати набори вбудованих кандидатів без імпорту кожного сумісного середовища виконання плагіна. |
dangerousFlags |
Ні | object[] |
Літеральні значення конфігурації, які openclaw doctor має позначати як небезпечні або такі, що створюють ризик, коли їх увімкнено. Див. нижче. |
secretInputs |
Ні | object |
Шляхи конфігурації в межах plugins.entries.<id>.config, які реєстр цілей міграції та аудиту SecretRef має розглядати як рядки у формі секретів. Див. нижче. |
Кожен запис dangerousFlags підтримує:
| Поле | Обов’язкове | Тип | Що це означає |
|---|---|---|---|
path |
Так | string |
Шлях конфігурації, розділений крапками, відносно plugins.entries.<id>.config. Підтримує символи узагальнення * для сегментів мапи або масиву. |
equals |
Так | string | number | boolean | null |
Точне літеральне значення, яке позначає це значення конфігурації як небезпечне. |
secretInputs підтримує:
| Поле | Обов’язкове | Тип | Значення |
|---|---|---|---|
bundledDefaultEnabled |
Ні | boolean |
Перевизначає типове ввімкнення вбудованого Plugin під час визначення, чи активна ця поверхня SecretRef. Використовуйте це, коли Plugin вбудований, але поверхня має залишатися неактивною, доки її явно не ввімкнено в конфігурації. |
paths |
Так | object[] |
Шляхи конфігурації із секретними даними, кожен із path (розділений крапками, відносний до plugins.entries.<id>.config, підтримує символи узагальнення *) і необов’язковим expected (наразі лише "string"). |
Довідка щодо mediaUnderstandingProviderMetadata
Використовуйте mediaUnderstandingProviderMetadata, коли постачальник розпізнавання медіа має типові моделі, пріоритет автоматичного резервного вибору автентифікації або вбудовану підтримку документів, які потрібні загальним допоміжним засобам ядра до завантаження середовища виконання. Ключі також мають бути оголошені в contracts.mediaUnderstandingProviders.
{ "contracts": { "mediaUnderstandingProviders": ["example"] }, "mediaUnderstandingProviderMetadata": { "example": { "capabilities": ["image", "audio"], "defaultModels": { "image": "example-vision-latest", "audio": "example-transcribe-latest" }, "autoPriority": { "image": 40 }, "nativeDocumentInputs": ["pdf"], "documentModels": { "pdf": { "textExtraction": "example-doc-text-latest", "image": "example-doc-vision-latest" } } } }}Кожен запис постачальника може містити:
| Поле | Тип | Значення |
|---|---|---|
capabilities |
("image" | "audio" | "video")[] |
Можливості роботи з медіа, які надає цей постачальник. |
defaultModels |
Record<string, string> |
Типові зіставлення можливостей із моделями, які використовуються, коли модель не вказана в конфігурації. |
autoPriority |
Record<string, number> |
Менші числа розташовуються раніше під час автоматичного резервного вибору постачальника на основі облікових даних. |
nativeDocumentInputs |
"pdf"[] |
Вбудовані типи вхідних документів, які підтримує постачальник. |
documentModels |
{ pdf?: { textExtraction?: string; image?: string | false } } |
Перевизначення моделей для кожного типу документа. Установіть image: false, щоб вимкнути видобування на основі зображень для цього типу документа. |
Довідка щодо channelConfigs
Використовуйте channelConfigs, коли плагіну каналу потрібні легкодоступні метадані конфігурації до завантаження середовища виконання. Виявлення налаштування й стану каналу в режимі лише читання може використовувати ці метадані безпосередньо для налаштованих зовнішніх каналів, коли запис налаштування недоступний або коли setup.requiresRuntime: false оголошує, що середовище виконання налаштування не потрібне.
channelConfigs — це метадані маніфесту Plugin, а не новий розділ користувацької конфігурації верхнього рівня. Користувачі й надалі налаштовують екземпляри каналів у channels.<channel-id>. OpenClaw читає метадані маніфесту, щоб визначити, який Plugin володіє налаштованим каналом, до виконання коду середовища виконання Plugin.
Для плагіна каналу configSchema і channelConfigs описують різні шляхи:
configSchemaперевіряєplugins.entries.<plugin-id>.configchannelConfigs.<channel-id>.schemaперевіряєchannels.<channel-id>
Невбудовані плагіни, що оголошують channels[], також мають оголошувати відповідні записи channelConfigs. Без них OpenClaw усе одно може завантажити Plugin, але схема конфігурації холодного шляху, налаштування та поверхні Control UI не можуть визначити форму параметрів, якими володіє канал, доки не виконається середовище виконання Plugin.
channelConfigs.<channel-id>.commands.nativeCommandsAutoEnabled і nativeSkillsAutoEnabled можуть оголошувати статичні типові значення auto для перевірок конфігурації команд, що виконуються до завантаження середовища виконання каналу. Вбудовані канали також можуть публікувати ті самі типові значення через package.json#openclaw.channel.commands разом з іншими метаданими каталогу каналів, якими володіє їхній пакет.
{ "channelConfigs": { "matrix": { "schema": { "type": "object", "additionalProperties": false, "properties": { "homeserverUrl": { "type": "string" } } }, "uiHints": { "homeserverUrl": { "label": "URL домашнього сервера", "placeholder": "https://matrix.example.com" } }, "label": "Matrix", "description": "Підключення до домашнього сервера Matrix", "commands": { "nativeCommandsAutoEnabled": true, "nativeSkillsAutoEnabled": true }, "preferOver": ["matrix-legacy"] } }}Кожен запис каналу може містити:
| Поле | Тип | Значення |
|---|---|---|
schema |
object |
Схема JSON для channels.<id>. Обов’язкова для кожного оголошеного запису конфігурації каналу. |
uiHints |
Record<string, object> |
Необов’язкові підписи інтерфейсу, заповнювачі й позначки конфіденційності для цього розділу конфігурації каналу. |
label |
string |
Підпис каналу, що додається до поверхонь вибору й перевірки, коли метадані середовища виконання ще не готові. |
description |
string |
Короткий опис каналу для поверхонь перевірки й каталогу. |
commands |
object |
Статичні типові значення автоматичного ввімкнення вбудованих команд і вбудованих навичок для перевірок конфігурації до запуску середовища виконання. |
preferOver |
string[] |
Ідентифікатори застарілих або менш пріоритетних плагінів, які цей канал має випереджати на поверхнях вибору. |
Заміна іншого плагіна каналу
Використовуйте preferOver, коли ваш Plugin є бажаним власником ідентифікатора каналу, який також може надавати інший Plugin. Поширені випадки: перейменований ідентифікатор Plugin, окремий Plugin, що замінює вбудований Plugin, або підтримуване відгалуження, яке зберігає той самий ідентифікатор каналу для сумісності конфігурації.
{ "id": "acme-chat", "channels": ["chat"], "channelConfigs": { "chat": { "schema": { "type": "object", "additionalProperties": false, "properties": { "webhookUrl": { "type": "string" } } }, "preferOver": ["chat"] } }}Коли налаштовано channels.chat, OpenClaw враховує як ідентифікатор каналу, так і ідентифікатор бажаного Plugin. Якщо Plugin із нижчим пріоритетом було вибрано лише тому, що він вбудований або ввімкнений типово, OpenClaw вимикає його в ефективній конфігурації середовища виконання, щоб каналом і його інструментами володів один Plugin. Явний вибір користувача все одно має перевагу: якщо користувач явно вмикає обидва плагіни (через plugins.allow або змістовну конфігурацію plugins.entries), OpenClaw зберігає цей вибір і повідомляє діагностичні відомості про дублювання каналу чи інструментів замість непомітної зміни запитаного набору плагінів.
Обмежуйте preferOver ідентифікаторами плагінів, які справді можуть надавати той самий канал. Це не загальне поле пріоритету, і воно не перейменовує ключі користувацької конфігурації.
Довідка щодо modelSupport
Використовуйте modelSupport, коли OpenClaw має визначати ваш Plugin постачальника за скороченими ідентифікаторами моделей, як-от gpt-5.6-sol або claude-sonnet-4.6, до завантаження середовища виконання Plugin.
{ "modelSupport": { "modelPrefixes": ["gpt-", "o1", "o3", "o4"], "modelPatterns": ["^computer-use-preview"] }}OpenClaw застосовує такий порядок пріоритету:
- явні посилання
provider/modelвикористовують метадані маніфесту власникаproviders modelPatternsмають перевагу надmodelPrefixes- якщо відповідність є одночасно в одного невбудованого й одного вбудованого Plugin, перемагає невбудований Plugin
- решта неоднозначностей ігнорується, доки користувач або конфігурація не вкаже постачальника
Поля:
| Поле | Тип | Значення |
|---|---|---|
modelPrefixes |
string[] |
Префікси, що зіставляються за допомогою startsWith зі скороченими ідентифікаторами моделей. |
modelPatterns |
string[] |
Джерела регулярних виразів, що зіставляються зі скороченими ідентифікаторами моделей після видалення суфікса профілю. |
Записи modelPatterns компілюються через compileSafeRegex, який відхиляє шаблони з вкладеним повторенням (наприклад, (a+)+$). Шаблони, які не проходять перевірку безпеки, непомітно пропускаються, так само як синтаксично недійсні регулярні вирази. Використовуйте прості шаблони й уникайте вкладених квантифікаторів.
Довідка щодо modelCatalog
Використовуйте modelCatalog, коли OpenClaw має знати метадані моделей постачальника до завантаження середовища виконання Plugin. Це джерело під керуванням маніфесту для фіксованих рядків каталогу, псевдонімів постачальників, правил приховування та режиму виявлення. Оновлення під час виконання й надалі належить коду середовища виконання постачальника, але маніфест повідомляє ядру, коли середовище виконання необхідне.
{ "providers": ["openai"], "modelCatalog": { "providers": { "openai": { "baseUrl": "https://api.openai.com/v1", "api": "openai-responses", "models": [ { "id": "gpt-5.4", "name": "GPT-5.4", "input": ["text", "image"], "reasoning": true, "contextWindow": 256000, "maxTokens": 128000, "cost": { "input": 1.25, "output": 10, "cacheRead": 0.125 }, "status": "available", "tags": ["default"] } ] } }, "aliases": { "azure-openai-responses": { "provider": "openai", "api": "azure-openai-responses" } }, "suppressions": [ { "provider": "azure-openai-responses", "model": "gpt-5.3-codex-spark", "reason": "недоступно в Azure OpenAI Responses" } ], "discovery": { "openai": "static" } }}Поля верхнього рівня:
| Поле | Тип | Що означає |
|---|---|---|
providers |
Record<string, object> |
Рядки каталогу для ідентифікаторів провайдерів, що належать цьому плагіну. Ключі також мають бути присутні у верхньорівневому providers. |
aliases |
Record<string, object> |
Псевдоніми провайдерів, які мають зіставлятися з належним плагіну провайдером під час планування каталогу або приховування. |
suppressions |
object[] |
Рядки моделей з іншого джерела, які цей плагін приховує з причини, специфічної для провайдера. |
discovery |
Record<string, "static" | "refreshable" | "runtime"> |
Чи можна прочитати каталог провайдера з метаданих маніфесту, оновити його в кеші, чи для цього потрібне середовище виконання. |
runtimeAugment |
boolean |
Установлюйте значення true лише тоді, коли середовище виконання провайдера має додати рядки каталогу після планування маніфесту/конфігурації. |
aliases бере участь у пошуку власника провайдера під час планування каталогу моделей. Цілі псевдонімів мають бути верхньорівневими провайдерами, що належать тому самому плагіну. Коли відфільтрований за провайдером список використовує псевдонім, OpenClaw може прочитати маніфест власника та застосувати перевизначення API/базової URL-адреси псевдоніма без завантаження середовища виконання провайдера. Псевдоніми не розширюють невідфільтровані списки каталогу; загальні списки містять лише канонічні рядки провайдера-власника.
suppressions замінює старий хук середовища виконання провайдера suppressBuiltInModel. Записи приховування враховуються лише тоді, коли провайдер належить плагіну або оголошений як ключ modelCatalog.aliases, що вказує на належного плагіну провайдера. Хуки приховування середовища виконання більше не викликаються під час визначення моделі.
Поля провайдера:
| Поле | Тип | Що означає |
|---|---|---|
baseUrl |
string |
Необов’язкова базова URL-адреса за замовчуванням для моделей у каталозі цього провайдера. |
api |
ModelApi |
Необов’язковий адаптер API за замовчуванням для моделей у каталозі цього провайдера. |
headers |
Record<string, string> |
Необов’язкові статичні заголовки, що застосовуються до каталогу цього провайдера. |
defaultUtilityModel |
string |
Необов’язковий рекомендований провайдером ідентифікатор малої моделі для коротких внутрішніх службових завдань (заголовки, опис перебігу виконання). Використовується, коли agents.defaults.utilityModel не задано й цей провайдер обслуговує основну модель агента. |
models |
object[] |
Обов’язкові рядки моделей. Рядки без id ігноруються. |
Поля моделі:
| Поле | Тип | Що означає |
|---|---|---|
id |
string |
Локальний для провайдера ідентифікатор моделі без префікса provider/. |
name |
string |
Необов’язкова відображувана назва. |
api |
ModelApi |
Необов’язкове перевизначення API для окремої моделі. |
baseUrl |
string |
Необов’язкове перевизначення базової URL-адреси для окремої моделі. |
headers |
Record<string, string> |
Необов’язкові статичні заголовки для окремої моделі. |
input |
Array<"text" | "image" | "document"> |
Модальності, які приймає модель. Інші значення непомітно відкидаються. |
reasoning |
boolean |
Чи надає модель можливості міркування. |
contextWindow |
number |
Власне контекстне вікно провайдера. |
contextTokens |
number |
Необов’язкове фактичне обмеження контексту середовища виконання, якщо воно відрізняється від contextWindow. |
maxTokens |
number |
Максимальна кількість токенів виведення, якщо відома. |
thinkingLevelMap |
Record<string, string | null> |
Необов’язкові перевизначення ідентифікатора моделі або параметрів для кожного рівня мислення. |
cost |
object |
Необов’язкова вартість у доларах США за мільйон токенів, включно з необов’язковим tieredPricing. |
compat |
object |
Необов’язкові прапорці сумісності, що відповідають сумісності конфігурації моделей OpenClaw. |
mediaInput |
object |
Необов’язкова конфігурація введення для кожної модальності, наразі лише для зображень. |
status |
"available" | "preview" | "deprecated" | "disabled" |
Статус у списку. Приховуйте лише тоді, коли рядок взагалі не має відображатися. |
statusReason |
string |
Необов’язкова причина, що відображається для статусу недоступності. |
replaces |
string[] |
Старіші локальні для провайдера ідентифікатори моделей, які ця модель замінює. |
replacedBy |
string |
Локальний для провайдера ідентифікатор моделі-замінника для застарілих рядків. |
tags |
string[] |
Стабільні теги, які використовують засоби вибору та фільтри. |
Поля приховування:
| Поле | Тип | Що означає |
|---|---|---|
provider |
string |
Ідентифікатор провайдера для рядка з первинного джерела, який потрібно приховати. Має належати цьому плагіну або бути оголошеним як належний йому псевдонім. |
model |
string |
Локальний для провайдера ідентифікатор моделі, який потрібно приховати. |
reason |
string |
Необов’язкове повідомлення, що відображається, коли прихований рядок запитують безпосередньо. |
when.baseUrlHosts |
string[] |
Необов’язковий список хостів фактичних базових URL-адрес провайдера, потрібних для застосування приховування. |
when.providerConfigApiIn |
string[] |
Необов’язковий список точних значень api конфігурації провайдера, потрібних для застосування приховування. |
Не розміщуйте в modelCatalog дані, доступні лише в середовищі виконання. Використовуйте static лише тоді, коли рядки маніфесту достатньо повні, щоб списки, відфільтровані за провайдером, і засоби вибору могли пропустити виявлення реєстру/середовища виконання. Використовуйте refreshable, коли рядки маніфесту є корисними доступними для переліку початковими даними або доповненнями, але оновлення/кеш згодом може додати інші рядки; оновлювані рядки самі по собі не є авторитетними. Використовуйте runtime, коли OpenClaw має завантажити середовище виконання провайдера, щоб отримати список.
Довідка modelIdNormalization
Використовуйте modelIdNormalization для нескладного очищення ідентифікаторів моделей, що належать провайдеру, яке має відбутися до завантаження середовища виконання провайдера. Завдяки цьому такі псевдоніми, як короткі назви моделей, застарілі локальні ідентифікатори провайдера та правила префіксів проксі, зберігаються в маніфесті плагіна-власника, а не в основних таблицях вибору моделей.
{ "providers": ["anthropic", "openrouter"], "modelIdNormalization": { "providers": { "anthropic": { "aliases": { "sonnet-4.6": "claude-sonnet-4-6" } }, "openrouter": { "prefixWhenBare": "openrouter" } } }}Поля провайдера:
| Поле | Тип | Що означає |
|---|---|---|
aliases |
Record<string,string> |
Точні псевдоніми ідентифікаторів моделей без урахування регістру. Значення повертаються у записаному вигляді. |
stripPrefixes |
string[] |
Префікси, які потрібно видалити перед пошуком псевдоніма; корисно для усунення застарілого дублювання провайдера/моделі. |
prefixWhenBare |
string |
Префікс, який потрібно додати, якщо нормалізований ідентифікатор моделі ще не містить /. |
prefixWhenBareAfterAliasStartsWith |
object[] |
Умовні правила додавання префікса до ідентифікатора без префікса після пошуку псевдоніма, індексовані за modelPrefix і prefix. |
Довідка providerEndpoints
Використовуйте providerEndpoints для класифікації кінцевих точок, яку загальна політика запитів має знати до завантаження середовища виконання провайдера. Ядро й надалі визначає значення кожного endpointClass; маніфести плагінів визначають метадані хоста й базової URL-адреси.
Офіційно винесені в зовнішні модулі плагіни провайдерів виключені з основного дистрибутива, тому
їхні маніфести невидимі до встановлення. Їхні providerEndpoints також мають
бути віддзеркалені в scripts/lib/official-external-provider-catalog.json, щоб
класифікація кінцевих точок продовжувала працювати без плагіна; контрактний тест
забезпечує відповідність віддзеркалення.
Поля кінцевої точки:
| Поле | Тип | Що це означає |
|---|---|---|
endpointClass |
string |
Відомий клас основної кінцевої точки, як-от openrouter, moonshot-native або google-vertex. |
hosts |
string[] |
Точні імена хостів, що відповідають класу кінцевої точки. |
hostSuffixes |
string[] |
Суфікси хостів, що відповідають класу кінцевої точки. Додайте префікс ., щоб зіставляти лише за суфіксом домену. |
baseUrls |
string[] |
Точні нормалізовані базові URL-адреси HTTP(S), що відповідають класу кінцевої точки. |
googleVertexRegion |
string |
Статичний регіон Google Vertex для точних глобальних хостів. |
googleVertexRegionHostSuffix |
string |
Суфікс, який потрібно вилучити з відповідних хостів, щоб отримати префікс регіону Google Vertex. |
Довідка щодо providerRequest
Використовуйте providerRequest для недорогих метаданих сумісності запитів, потрібних загальній політиці запитів без завантаження середовища виконання постачальника. Переписування корисного навантаження, специфічне для поведінки, залишайте в перехоплювачах середовища виконання постачальника або спільних допоміжних засобах сімейства постачальників.
{ "providerRequest": { "providers": { "vllm": { "family": "vllm", "openAICompletions": { "supportsStreamingUsage": true } } } }}Поля постачальника:
| Поле | Тип | Що це означає |
|---|---|---|
family |
string |
Мітка сімейства постачальника, яку використовують загальні рішення щодо сумісності запитів і діагностика. |
compatibilityFamily |
"moonshot" |
Необов’язкова категорія сумісності сімейства постачальників для спільних допоміжних засобів запитів. |
openAICompletions |
object |
Прапорці запитів завершення, сумісних з OpenAI; наразі supportsStreamingUsage. |
Довідка щодо secretProviderIntegrations
Використовуйте secretProviderIntegrations, коли плагін може опублікувати багаторазово використовуваний попередньо налаштований exec-постачальник SecretRef. OpenClaw зчитує ці метадані до завантаження середовища виконання плагіна, зберігає належність плагіну в secrets.providers.<alias>.pluginIntegration і залишає фактичне отримання секретів середовищу виконання SecretRef. Попередні налаштування доступні лише для вбудованих плагінів і встановлених плагінів, виявлених у керованих кореневих каталогах установлення плагінів, як-от установлення з git і ClawHub.
{ "secretProviderIntegrations": { "secret-store": { "providerAlias": "team-secrets", "displayName": "Team secrets", "source": "exec", "command": "${node}", "args": ["./bin/resolve-secrets.mjs"] } }}Ключ мапи — це ідентифікатор інтеграції. Якщо providerAlias пропущено, OpenClaw використовує ідентифікатор інтеграції як псевдонім постачальника SecretRef. Псевдоніми постачальників мають відповідати звичайному шаблону псевдонімів постачальників SecretRef, наприклад team-secrets або onepassword-work.
Коли оператор вибирає попереднє налаштування, OpenClaw записує посилання на постачальника такого вигляду:
{ "secrets": { "providers": { "team-secrets": { "source": "exec", "pluginIntegration": { "pluginId": "acme-secrets", "integrationId": "secret-store" } } } }}Під час запуску або перезавантаження OpenClaw визначає цього постачальника, завантажуючи поточні метадані маніфесту плагіна, перевіряючи, що плагін-власник встановлений і активний, та формуючи exec-команду з маніфесту. Вимкнення або видалення плагіна відкликає постачальника для активних SecretRef. Оператори, яким потрібна автономна конфігурація exec, як і раніше можуть безпосередньо записувати постачальників command/args вручну.
Наразі підтримуються лише попередні налаштування source: "exec". command має бути ${node}, а args[0] — сценарієм визначення ./ із шляхом відносно кореневого каталогу плагіна. Під час запуску або перезавантаження OpenClaw перетворює їх на поточний виконуваний файл Node та абсолютний шлях до сценарію всередині плагіна. Параметри Node, як-от --require, --import, --loader, --env-file, --eval і --print, не є частиною контракту попереднього налаштування маніфесту. Оператори, яким потрібні команди не на основі Node, можуть безпосередньо налаштувати автономні exec-постачальники вручну.
OpenClaw визначає trustedDirs для попередніх налаштувань маніфесту з кореневого каталогу плагіна, а для попередніх налаштувань ${node} — з каталогу поточного виконуваного файла Node. Задані в маніфесті trustedDirs ігноруються. Інші параметри exec-постачальника, як-от timeoutMs, noOutputTimeoutMs, maxOutputBytes, jsonOnly, env, passEnv і allowInsecurePath, передаються до звичайної конфігурації exec-постачальника SecretRef без змін.
Довідка щодо modelPricing
Використовуйте modelPricing, коли постачальнику потрібно керувати ціноутворенням на рівні керування до завантаження середовища виконання. Кеш цін Gateway зчитує ці метадані без імпорту коду середовища виконання постачальника.
{ "providers": ["ollama", "openrouter"], "modelPricing": { "providers": { "ollama": { "external": false }, "openrouter": { "openRouter": { "passthroughProviderModel": true }, "liteLLM": false } } }}Поля постачальника:
| Поле | Тип | Що це означає |
|---|---|---|
external |
boolean |
Установіть false для локальних постачальників або постачальників із власним хостингом, які ніколи не повинні отримувати ціни OpenRouter або LiteLLM. |
openRouter |
false | object |
Зіставлення для пошуку цін OpenRouter. false вимикає пошук OpenRouter для цього постачальника. |
liteLLM |
false | object |
Зіставлення для пошуку цін LiteLLM. false вимикає пошук LiteLLM для цього постачальника. |
Поля джерела:
| Поле | Тип | Що це означає |
|---|---|---|
provider |
string |
Ідентифікатор постачальника в зовнішньому каталозі, якщо він відрізняється від ідентифікатора постачальника OpenClaw, наприклад z-ai для постачальника zai. |
passthroughProviderModel |
boolean |
Розглядати ідентифікатори моделей із косою рискою як вкладені посилання постачальник/модель; корисно для проксі-постачальників, як-от OpenRouter. |
modelIdTransforms |
"version-dots"[] |
Додаткові варіанти ідентифікаторів моделей у зовнішньому каталозі. version-dots перевіряє ідентифікатори версій із крапками, як-от claude-opus-4.6. |
Індекс постачальників OpenClaw
Індекс постачальників OpenClaw — це належні OpenClaw попередні метадані для постачальників, плагіни яких, можливо, ще не встановлено. Він не є частиною маніфесту плагіна. Маніфести плагінів залишаються авторитетним джерелом для встановлених плагінів. Індекс постачальників — це внутрішній резервний контракт, який використовуватимуть майбутні інтерфейси встановлюваних постачальників і засобу вибору моделей перед установленням, коли плагін постачальника не встановлено.
Порядок пріоритетності каталогів:
- Конфігурація користувача.
- Маніфест установленого плагіна
modelCatalog. - Кеш каталогу моделей після явного оновлення.
- Рядки попереднього перегляду Індексу постачальників OpenClaw.
Індекс постачальників не повинен містити секретів, стану ввімкнення, перехоплювачів середовища виконання або актуальних даних моделей, пов’язаних із конкретним обліковим записом. Його каталоги попереднього перегляду використовують ту саму форму рядка постачальника modelCatalog, що й маніфести плагінів, але мають обмежуватися стабільними метаданими відображення, якщо тільки поля адаптера середовища виконання, як-от api, baseUrl, ціни або прапорці сумісності, навмисно не узгоджуються з маніфестом установленого плагіна. Постачальники з динамічним виявленням /models мають записувати оновлені рядки через явний шлях кешу каталогу моделей, а не викликати API постачальника під час звичайного формування списку або початкового налаштування.
Записи Індексу постачальників також можуть містити метадані встановлюваного плагіна для постачальників, чий плагін перенесено з ядра або ще не встановлено з іншої причини. Ці метадані наслідують шаблон каталогу каналів: назви пакета, специфікації встановлення npm, очікуваної цілісності та коротких міток варіантів автентифікації достатньо, щоб показати доступний для встановлення варіант налаштування. Після встановлення плагіна пріоритет має його маніфест, а запис Індексу постачальників для цього постачальника ігнорується.
openclaw doctor --fix переносить невеликий закритий набір застарілих ключів можливостей верхнього рівня маніфесту до contracts.*: speechProviders, mediaUnderstandingProviders, imageGenerationProviders і tools. Жоден із них (як і будь-який інший список можливостей) більше не зчитується як поле верхнього рівня маніфесту; звичайне завантаження маніфесту розпізнає їх лише в contracts.
Маніфест і package.json
Ці два файли виконують різні завдання:
| Файл | Для чого його використовувати |
|---|---|
openclaw.plugin.json |
Виявлення, перевірка конфігурації, метадані варіантів автентифікації та підказки інтерфейсу, які мають бути доступні до запуску коду плагіна |
package.json |
Метадані npm, установлення залежностей і блок openclaw, що використовується для точок входу, обмеження встановлення, налаштування або метаданих каталогу |
Якщо не впевнені, де мають міститися певні метадані, скористайтеся таким правилом:
- якщо OpenClaw має знати їх до завантаження коду плагіна, помістіть їх у
openclaw.plugin.json - якщо вони стосуються пакування, файлів входу або поведінки встановлення npm, помістіть їх у
package.json
Поля package.json, що впливають на виявлення
Деякі метадані плагіна, потрібні до запуску, навмисно містяться в package.json у блоці openclaw, а не в openclaw.plugin.json. openclaw.bundle і openclaw.bundle.json не є контрактами плагінів OpenClaw; нативні плагіни мають використовувати openclaw.plugin.json разом із підтримуваними полями package.json#openclaw, наведеними нижче.
Важливі приклади:
| Поле | Що це означає |
|---|---|
openclaw.extensions |
Оголошує нативні точки входу плагіна. Вони мають залишатися в каталозі пакета плагіна. |
openclaw.runtimeExtensions |
Оголошує точки входу зібраного середовища виконання JavaScript для встановлених пакетів. Вони мають залишатися в каталозі пакета плагіна. |
openclaw.setupEntry |
Полегшена точка входу лише для налаштування, яка використовується під час початкового налаштування, відкладеного запуску каналу та виявлення стану каналу/SecretRef у режимі лише для читання. Вона має залишатися в каталозі пакета плагіна. |
openclaw.runtimeSetupEntry |
Оголошує точку входу зібраного JavaScript для налаштування встановлених пакетів. Потребує setupEntry, має існувати та залишатися в каталозі пакета плагіна. |
openclaw.channel |
Легкі метадані каталогу каналів, як-от мітки, шляхи до документації, псевдоніми та текст для вибору. |
openclaw.channel.commands |
Статичні метадані автоматичних значень за замовчуванням для нативних команд і нативних навичок, які використовуються конфігурацією, аудитом і поверхнями списків команд до завантаження середовища виконання каналу. |
openclaw.channel.configuredState |
Метадані полегшеної перевірки налаштованого стану, яка може відповісти на запитання «чи вже існує налаштування лише через змінні середовища?» без завантаження повного середовища виконання каналу. |
openclaw.channel.persistedAuthState |
Метадані полегшеної перевірки збереженої автентифікації, яка може відповісти на запитання «чи вже виконано вхід до будь-якого облікового запису?» без завантаження повного середовища виконання каналу. |
openclaw.install.clawhubSpec / openclaw.install.npmSpec / openclaw.install.localPath |
Підказки щодо встановлення/оновлення для вбудованих і опублікованих зовнішньо плагінів. |
openclaw.install.defaultChoice |
Бажаний шлях встановлення, коли доступно кілька джерел встановлення. |
openclaw.install.minHostVersion |
Мінімальна підтримувана версія хоста OpenClaw із використанням нижньої межі semver, як-от >=2026.3.22 або >=2026.5.1-beta.1. |
openclaw.compat.pluginApi |
Мінімальний діапазон API плагінів OpenClaw, потрібний цьому пакету, із використанням нижньої межі semver, як-от >=2026.5.27. |
openclaw.install.expectedIntegrity |
Очікуваний рядок цілісності дистрибутива npm, як-от sha512-...; процеси встановлення й оновлення перевіряють за ним отриманий артефакт. |
openclaw.install.allowInvalidConfigRecovery |
Дозволяє вузько спрямований шлях відновлення перевстановлення вбудованого плагіна, коли конфігурація недійсна. |
openclaw.install.requiredPlatformPackages |
Псевдоніми пакетів npm, які мають матеріалізуватися, коли їхні платформні обмеження у файлі блокування відповідають поточному хосту. |
openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen |
Дає змогу поверхням каналу середовища виконання налаштування завантажуватися до початку прослуховування, а потім відкладає повністю налаштований плагін каналу до активації після початку прослуховування. |
Метадані маніфесту визначають, які варіанти постачальника/каналу/налаштування з’являються під час початкового налаштування до завантаження середовища виконання. package.json#openclaw.install повідомляє процесу початкового налаштування, як отримати або ввімкнути цей плагін, коли користувач вибирає один із цих варіантів. Не переміщуйте підказки щодо встановлення до openclaw.plugin.json.
openclaw.install.minHostVersion перевіряється під час встановлення та завантаження реєстру маніфестів для джерел невбудованих плагінів. Недійсні значення відхиляються; новіші, але дійсні значення призводять до пропуску зовнішніх плагінів на старіших хостах. Вважається, що вихідні вбудовані плагіни мають ту саму версію, що й робоча копія хоста.
openclaw.install.requiredPlatformPackages призначено для пакетів npm, які надають необхідні нативні двійкові файли через необов’язкові платформні псевдоніми. Укажіть базове ім’я пакета npm для кожного підтримуваного платформного псевдоніма. Під час встановлення через npm OpenClaw перевіряє лише оголошений псевдонім, обмеження якого у файлі блокування відповідають поточному хосту. Якщо npm повідомляє про успіх, але не додає цей псевдонім, OpenClaw повторює спробу один раз із новим кешем і відкочує встановлення, якщо псевдонім усе ще відсутній.
openclaw.compat.pluginApi перевіряється під час установлення пакета для джерел невбудованих плагінів. Використовуйте його як нижню межу API SDK/середовища виконання плагінів OpenClaw, для якої було зібрано пакет. Він може бути суворішим за minHostVersion, якщо пакету плагіна потрібен новіший API, але для інших процесів він усе ще зберігає нижчу підказку щодо встановлення. Офіційна синхронізація випусків OpenClaw за замовчуванням підвищує наявні нижні межі API офіційних плагінів до версії випуску OpenClaw, але випуски лише плагіна можуть зберігати нижчу межу, якщо пакет навмисно підтримує старіші хости. Не використовуйте лише версію пакета як контракт сумісності. peerDependencies.openclaw залишається метаданими пакета npm; OpenClaw використовує контракт openclaw.compat.pluginApi для ухвалення рішень щодо сумісності встановлення.
Офіційні метадані встановлення на вимогу мають використовувати clawhubSpec, коли плагін опубліковано в ClawHub; процес початкового налаштування вважає його бажаним віддаленим джерелом і після встановлення записує відомості про артефакт ClawHub. npmSpec залишається резервним варіантом сумісності для пакетів, які ще не перенесено до ClawHub.
Точна фіксація версії npm уже міститься в npmSpec, наприклад "npmSpec": "@wecom/wecom-openclaw-plugin@1.2.3". Офіційні записи зовнішнього каталогу мають поєднувати точні специфікації з expectedIntegrity, щоб процеси оновлення завершувалися відмовою, якщо отриманий артефакт npm більше не відповідає зафіксованому випуску. Інтерактивне початкове налаштування для сумісності й надалі пропонує довірені специфікації npm із реєстру, зокрема базові імена пакетів і dist-теги. Діагностика каталогу може розрізняти точні, плаваючі, зафіксовані за цілісністю, без цілісності, з невідповідністю імені пакета та недійсні джерела вибору за замовчуванням. Вона також попереджає, коли наявний expectedIntegrity, але немає дійсного джерела npm, яке він може зафіксувати. Коли наявний expectedIntegrity, процеси встановлення/оновлення забезпечують його дотримання; коли його пропущено, результат визначення з реєстру записується без фіксації цілісності.
Плагіни каналів мають надавати openclaw.setupEntry, коли перевіркам стану, списку каналів або SecretRef потрібно визначати налаштовані облікові записи без завантаження повного середовища виконання. Точка входу налаштування має надавати метадані каналу, а також безпечні для налаштування адаптери конфігурації, стану й секретів; мережеві клієнти, слухачі Gateway і транспортні середовища виконання слід залишати в основній точці входу розширення.
Поля точок входу середовища виконання не скасовують перевірки меж пакета для полів вихідних точок входу. Наприклад, openclaw.runtimeExtensions не може зробити доступним для завантаження шлях openclaw.extensions, який виходить за межі пакета.
openclaw.install.allowInvalidConfigRecovery навмисно має вузьку сферу застосування. Він не робить довільні пошкоджені конфігурації придатними для встановлення. Наразі він лише дає процесам встановлення змогу відновлюватися після певних помилок оновлення застарілих вбудованих плагінів, як-от відсутній шлях вбудованого плагіна або застарілий запис channels.<id> для того самого вбудованого плагіна. Непов’язані помилки конфігурації й надалі блокують встановлення та спрямовують операторів до openclaw doctor --fix.
openclaw.channel.persistedAuthState — це метадані пакета для невеликого модуля перевірки:
{ "openclaw": { "channel": { "id": "whatsapp", "persistedAuthState": { "specifier": "./auth-presence", "exportName": "hasAnyWhatsAppAuth" } } }}Використовуйте його, коли процесам налаштування, doctor, стану або перевірки наявності в режимі лише для читання потрібна швидка перевірка автентифікації з відповіддю «так/ні» до завантаження повного плагіна каналу. Збережений стан автентифікації не є налаштованим станом каналу: не використовуйте ці метадані для автоматичного ввімкнення плагінів, виправлення залежностей середовища виконання або визначення того, чи має завантажуватися середовище виконання каналу. Цільовий експорт має бути невеликою функцією, яка читає лише збережений стан; не спрямовуйте його через повний модуль експорту середовища виконання каналу.
openclaw.channel.configuredState підтримує швидкі перевірки налаштованості. Надавайте перевагу декларативним метаданим середовища, коли змінних середовища достатньо:
{ "openclaw": { "channel": { "id": "telegram", "configuredState": { "env": { "allOf": ["TELEGRAM_BOT_TOKEN"] } } } }}Використовуйте env.allOf, коли потрібна кожна перелічена змінна, і env.anyOf, коли достатньо будь-якої однієї непорожньої змінної. Якщо невелика перевірка без середовища виконання потребує більше, ніж метадані середовища, використовуйте specifier разом із exportName, як показано для persistedAuthState; коли наявний env, OpenClaw використовує його без завантаження цього модуля. Якщо перевірка потребує повного визначення конфігурації або справжнього середовища виконання каналу, залиште цю логіку в хуку config.hasConfiguredState плагіна.
Пріоритет виявлення (повторювані ідентифікатори плагінів)
OpenClaw виявляє плагіни з трьох кореневих каталогів, які перевіряються в такому порядку: вбудовані плагіни, що постачаються з OpenClaw, глобальний корінь установлення (~/.openclaw/extensions) і корінь поточного робочого простору (<workspace>/.openclaw/extensions), а також усі явні записи plugins.load.paths.
Якщо два виявлені об’єкти мають однаковий id, зберігається лише маніфест із найвищим пріоритетом; дублікати з нижчим пріоритетом відкидаються, а не завантажуються разом із ним. Пріоритет від найвищого до найнижчого:
- Вибраний конфігурацією — шлях, явно зафіксований у
plugins.entries.<id> - Глобальне встановлення, що відповідає відстежуваному запису встановлення — плагін, установлений через
openclaw plugin install/openclaw plugin update, який механізм відстеження встановлень OpenClaw розпізнає для того самого ідентифікатора, навіть якщо цей ідентифікатор також належить вбудованому плагіну - Вбудований — плагіни, що постачаються з OpenClaw
- Робочий простір — плагіни, виявлені відносно поточного робочого простору
- Будь-який інший виявлений кандидат
Наслідки:
- Відгалужена або застаріла копія вбудованого плагіна, яка не відстежується й розташована в робочому просторі або глобальному корені, не замінить вбудовану збірку.
- Щоб перевизначити вбудований плагін, або виконайте
openclaw plugin installдля цього ідентифікатора, щоб відстежуване глобальне встановлення мало вищий пріоритет за вбудовану копію, або зафіксуйте конкретний шлях черезplugins.entries.<id>, щоб він переміг завдяки пріоритету вибраного конфігурацією шляху. - Відкидання дублікатів записуються в журнал, щоб Doctor і діагностика запуску могли вказати на відкинуту копію.
- Перевизначення дублікатів, вибрані конфігурацією, у діагностиці описуються як явні перевизначення, але все одно супроводжуються попередженням, щоб застарілі відгалуження й випадкові затінення залишалися видимими.
Вимоги JSON Schema
- Кожен plugin повинен містити JSON Schema, навіть якщо він не приймає конфігурацію.
- Порожня схема є допустимою (наприклад,
{ "type": "object", "additionalProperties": false }). - Схеми перевіряються під час читання/запису конфігурації, а не під час виконання.
- Розширюючи або створюючи форк вбудованого plugin із новими ключами конфігурації, одночасно оновіть
openclaw.plugin.jsonconfigSchemaцього plugin. Схеми вбудованих plugin є строгими, тому додаванняplugins.entries.<id>.config.myNewKeyдо конфігурації користувача без додаванняmyNewKeyдоconfigSchema.propertiesбуде відхилено до завантаження середовища виконання plugin.
Приклад розширення схеми:
{ "configSchema": { "type": "object", "additionalProperties": false, "properties": { "myNewKey": { "type": "string" } } }}Поведінка перевірки
- Невідомі ключі
channels.*є помилками, якщо ідентифікатор каналу не оголошено в маніфесті plugin. Якщо той самий ідентифікатор також є вplugins.allow,plugins.entriesабоplugins.installs(plugin, на який є посилання, але який наразі неможливо виявити), OpenClaw натомість знижує рівень цієї проблеми до попередження. plugins.entries.<id>,plugins.allowтаplugins.deny, які посилаються на невідомі ідентифікатори plugin, є попередженнями («застарілий запис конфігурації проігноровано»), а не помилками, тому оновлення та видалені/перейменовані plugin не блокують запуск Gateway.plugins.slots.memory, що посилається на невідомий ідентифікатор plugin, є помилкою, за винятком відомого офіційного зовнішнього pluginmemory-lancedb, для якого натомість виводиться попередження.- Якщо plugin установлено, але його маніфест чи схема пошкоджені або відсутні, перевірка завершується невдало, а Doctor повідомляє про помилку plugin.
- Якщо конфігурація plugin існує, але plugin вимкнено, конфігурація зберігається, а в Doctor і журналах відображається попередження.
Повну схему plugins.* наведено в довіднику з конфігурації.
Примітки
- Маніфест обов’язковий для нативних plugin OpenClaw, включно із завантаженням із локальної файлової системи. Середовище виконання однаково завантажує модуль plugin окремо; маніфест призначений лише для виявлення та перевірки.
- Нативні маніфести аналізуються як JSON5, тому коментарі, кінцеві коми та ключі без лапок дозволені, якщо кінцеве значення все одно є об’єктом.
- Завантажувач маніфестів читає лише документовані поля маніфесту. Уникайте власних ключів верхнього рівня.
channels,providers,cliBackendsтаskillsможна не вказувати, якщо вони не потрібні plugin.providerCatalogEntryмає залишатися легковаговим і не повинен імпортувати великий обсяг коду середовища виконання; використовуйте його для статичних метаданих каталогу провайдера або вузькоспеціалізованих дескрипторів виявлення, а не для виконання під час обробки запитів.- Взаємовиключні типи plugin вибираються через
plugins.slots.*:kind: "memory"черезplugins.slots.memory(типове значення —memory-core),kind: "context-engine"черезplugins.slots.contextEngine(типове значення —legacy). - Оголошуйте взаємовиключний тип plugin у цьому маніфесті.
OpenClawPluginDefinition.kindу точці входу середовища виконання застарів і залишається лише як резервний механізм сумісності для старіших plugin. - Метадані змінних середовища (
setup.providers[].envVars, застарілийproviderAuthEnvVarsіchannelEnvVars) мають лише декларативний характер. Статус, аудит, перевірка доставки cron та інші поверхні лише для читання однаково застосовують політику довіри до plugin і політику фактичної активації, перш ніж вважати змінну середовища налаштованою. - Метадані майстра середовища виконання, які потребують коду провайдера, описано в розділі Хуки середовища виконання провайдера.
- Якщо ваш plugin залежить від нативних модулів, задокументуйте кроки збирання та всі вимоги до списку дозволів менеджера пакетів (наприклад, pnpm
allow-build-scripts+pnpm rebuild <package>).