Plugin SDK reference
Маніфест Plugin
Ця сторінка призначена лише для нативного маніфесту Plugin OpenClaw.
Сумісні схеми пакетів див. у розділі Пакети Plugin.
Сумісні формати пакетів використовують інші файли маніфестів:
- Пакет Codex:
.codex-plugin/plugin.json - Пакет Claude:
.claude-plugin/plugin.jsonабо типова схема компонентів Claude без маніфесту - Пакет Cursor:
.cursor-plugin/plugin.json
OpenClaw також автоматично виявляє ці схеми пакетів, але їх не перевіряють
за схемою openclaw.plugin.json, описаною тут.
Для сумісних пакетів OpenClaw наразі читає метадані пакета, а також оголошені
корені навичок, корені команд Claude, типові значення settings.json пакета
Claude, типові значення LSP пакета Claude і підтримувані пакети хуків, коли
схема відповідає очікуванням середовища виконання OpenClaw.
Кожен нативний Plugin OpenClaw має постачати файл openclaw.plugin.json у
корені Plugin. OpenClaw використовує цей маніфест для перевірки конфігурації
без виконання коду Plugin. Відсутні або недійсні маніфести вважаються
помилками Plugin і блокують перевірку конфігурації.
Див. повний посібник із системи Plugin: Plugin. Про нативну модель можливостей і поточні настанови щодо зовнішньої сумісності: Модель можливостей.
Що робить цей файл
openclaw.plugin.json — це метадані, які OpenClaw читає до завантаження коду
вашого Plugin. Усе нижче має бути достатньо дешевим для перевірки без запуску
середовища виконання Plugin.
Використовуйте його для:
- ідентифікації Plugin, перевірки конфігурації та підказок інтерфейсу конфігурації
- метаданих автентифікації, адаптації та налаштування (псевдонім, автоматичне ввімкнення, змінні середовища провайдера, варіанти автентифікації)
- підказок активації для поверхонь площини керування
- скороченого володіння сімейством моделей
- статичних знімків володіння можливостями (
contracts) - метаданих засобу виконання QA, які може перевіряти спільний хост
openclaw qa - метаданих конфігурації для окремих каналів, об’єднаних у каталог і поверхні перевірки
Не використовуйте його для: реєстрації поведінки під час виконання, оголошення точок входу коду
або метаданих встановлення npm. Вони належать до коду вашого Plugin і 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 |
Канонічний id Plugin. Це id, що використовується в plugins.entries.<id>. |
configSchema |
Так | object |
Вбудована JSON Schema для конфігурації цього Plugin. |
requiresPlugins |
Ні | string[] |
Id Plugin, які також мають бути встановлені, щоб цей Plugin мав ефект. Виявлення залишає Plugin доступним для завантаження, але попереджає, якщо бракує будь-якого обов’язкового Plugin. |
enabledByDefault |
Ні | true |
Позначає вбудований Plugin як увімкнений за замовчуванням. Опустіть це поле або встановіть будь-яке значення, відмінне від true, щоб залишити Plugin вимкненим за замовчуванням. |
enabledByDefaultOnPlatforms |
Ні | string[] |
Позначає вбудований Plugin як увімкнений за замовчуванням лише на перелічених платформах Node.js, наприклад ["darwin"]. Явна конфігурація все одно має пріоритет. |
legacyPluginIds |
Ні | string[] |
Застарілі id, які нормалізуються до цього канонічного id Plugin. |
autoEnableWhenConfiguredProviders |
Ні | string[] |
Id провайдерів, які мають автоматично вмикати цей Plugin, коли auth, config або посилання на моделі згадують їх. |
kind |
Ні | "memory" | "context-engine" |
Оголошує ексклюзивний тип Plugin, що використовується plugins.slots.*. |
channels |
Ні | string[] |
Id каналів, якими володіє цей Plugin. Використовується для виявлення та перевірки конфігурації. |
providers |
Ні | string[] |
Id провайдерів, якими володіє цей Plugin. |
providerCatalogEntry |
Ні | string |
Полегшений шлях до модуля каталогу провайдерів, відносний до кореня Plugin, для метаданих каталогу провайдерів у межах маніфесту, які можна завантажити без активації повного runtime Plugin. |
modelSupport |
Ні | object |
Скорочені метадані сімейства моделей, якими володіє маніфест, що використовуються для автоматичного завантаження Plugin перед runtime. |
modelCatalog |
Ні | object |
Декларативні метадані каталогу моделей для провайдерів, якими володіє цей Plugin. Це контракт control plane для майбутнього read-only переліку, onboarding, вибору моделей, псевдонімів і придушення без завантаження runtime Plugin. |
modelPricing |
Ні | object |
Політика зовнішнього пошуку цін, якою володіє провайдер. Використовуйте її, щоб виключити локальних/self-hosted провайдерів із віддалених каталогів цін або зіставити посилання провайдерів з id каталогів OpenRouter/LiteLLM без hardcoding id провайдерів у core. |
modelIdNormalization |
Ні | object |
Очищення псевдонімів/префіксів id моделей, яким володіє провайдер і яке має виконуватися до завантаження runtime провайдера. |
providerEndpoints |
Ні | object[] |
Метадані endpoint host/baseUrl, якими володіє маніфест, для маршрутів провайдерів, які core має класифікувати до завантаження runtime провайдера. |
providerRequest |
Ні | object |
Дешеві метадані сімейства провайдера та сумісності запитів, що використовуються загальною політикою запитів до завантаження runtime провайдера. |
secretProviderIntegrations |
Ні | Record<string, object> |
Декларативні presets для SecretRef exec provider, які setup або поверхні встановлення можуть пропонувати без hardcoding інтеграцій, специфічних для провайдера, у core. |
cliBackends |
Ні | string[] |
Id backend для CLI inference, якими володіє цей Plugin. Використовується для автоматичної активації під час запуску з явних посилань конфігурації. |
syntheticAuthRefs |
Ні | string[] |
Посилання на провайдера або CLI backend, для яких synthetic auth hook, що належить Plugin, має перевірятися під час холодного виявлення моделей до завантаження runtime. |
nonSecretAuthMarkers |
Ні | string[] |
Placeholder-значення API key, якими володіє вбудований Plugin і які представляють несекретний локальний, OAuth або ambient стан облікових даних. |
commandAliases |
Ні | object[] |
Імена команд, якими володіє цей Plugin і які мають створювати конфігурацію з урахуванням Plugin та діагностику CLI до завантаження runtime. |
providerAuthEnvVars |
Ні | Record<string, string[]> |
Застарілі метадані env сумісності для пошуку auth/status провайдера. Для нових Plugin надавайте перевагу setup.providers[].envVars; OpenClaw усе ще читає це під час періоду deprecation. |
providerAuthAliases |
Ні | Record<string, string> |
Id провайдерів, які мають повторно використовувати інший id провайдера для пошуку auth, наприклад coding provider, що спільно використовує API key базового провайдера та профілі auth. |
channelEnvVars |
Ні | Record<string, string[]> |
Дешеві метадані env каналу, які OpenClaw може перевіряти без завантаження коду Plugin. Використовуйте це для налаштування каналу через env або auth surfaces, які мають бачити загальні startup/config helpers. |
providerAuthChoices |
Ні | object[] |
Дешеві метадані auth-choice для onboarding pickers, preferred-provider resolution і простого підключення CLI flags. |
activation |
Ні | object |
Дешеві метадані планувальника активації для запуску, провайдера, команди, каналу, маршруту та завантаження, спричиненого capability. Лише метадані; runtime Plugin усе ще володіє фактичною поведінкою. |
setup |
Ні | object |
Дешеві descriptors для setup/onboarding, які discovery та setup surfaces можуть перевіряти без завантаження runtime Plugin. |
qaRunners |
Ні | object[] |
Дешеві descriptors QA runner, що використовуються спільним хостом openclaw qa до завантаження runtime Plugin. |
contracts |
Ні | object |
Статичний snapshot володіння capability для external auth hooks, embeddings, speech, realtime transcription, realtime voice, media-understanding, image-generation, music-generation, video-generation, web-fetch, web search і володіння tools. |
mediaUnderstandingProviderMetadata |
Ні | Record<string, object> |
Дешеві defaults для media-understanding для id провайдерів, оголошених у contracts.mediaUnderstandingProviders. |
imageGenerationProviderMetadata |
Ні | Record<string, object> |
Дешеві auth metadata для image-generation для id провайдерів, оголошених у contracts.imageGenerationProviders, включно з auth aliases і base-url guards, якими володіє провайдер. |
videoGenerationProviderMetadata |
Ні | Record<string, object> |
Дешеві auth metadata для video-generation для id провайдерів, оголошених у contracts.videoGenerationProviders, включно з auth aliases і base-url guards, якими володіє провайдер. |
musicGenerationProviderMetadata |
Ні | Record<string, object> |
Дешеві auth metadata для music-generation для id провайдерів, оголошених у contracts.musicGenerationProviders, включно з auth aliases і base-url guards, якими володіє провайдер. |
toolMetadata |
Ні | Record<string, object> |
Легкі метадані доступності для інструментів, що належать плагіну й оголошені в contracts.tools. Використовуйте їх, коли інструмент не має завантажувати середовище виконання, якщо немає доказів конфігурації, env або auth. |
channelConfigs |
Ні | Record<string, object> |
Метадані конфігурації каналу, що належать маніфесту й об’єднуються з поверхнями виявлення та валідації до завантаження середовища виконання. |
skills |
Ні | string[] |
Каталоги Skills для завантаження, відносно кореня плагіна. |
name |
Ні | string |
Зручна для людини назва плагіна. |
description |
Ні | string |
Короткий підсумок, що відображається на поверхнях плагіна. |
icon |
Ні | string |
URL зображення HTTPS для карток marketplace/каталогу. ClawHub приймає будь-який дійсний URL https:// і повертається до стандартної іконки плагіна, коли його пропущено або він недійсний. |
version |
Ні | string |
Інформаційна версія плагіна. |
uiHints |
Ні | Record<string, object> |
UI-мітки, заповнювачі та підказки щодо чутливості для полів конфігурації. |
Довідник метаданих постачальників генерації
Поля метаданих постачальника генерації описують статичні сигнали автентифікації для
постачальників, оголошених у відповідному списку 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 |
Dot path до об’єкта конфігурації, що належить плагіну, який потрібно перевірити, наприклад plugins.entries.example.config. |
overlayPath |
Ні | string |
Dot path усередині кореневої конфігурації, об’єкт якого має накластися на кореневий об’єкт перед оцінюванням сигналу. Використовуйте це для конфігурації, специфічної для можливості, як-от image, video або music. |
overlayMapPath |
Ні | string |
Dot path усередині кореневої конфігурації, значення об’єкта якого мають кожне накластися на кореневий об’єкт. Використовуйте це для іменованих мап облікових записів, як-от accounts, де будь-який налаштований обліковий запис має підходити. |
required |
Ні | string[] |
Dot paths усередині ефективної конфігурації, які мають мати налаштовані значення. Рядки мають бути непорожніми; об’єкти й масиви не мають бути порожніми. |
requiredAny |
Ні | string[] |
Dot paths усередині ефективної конфігурації, де принаймні один має мати налаштоване значення. |
mode |
Ні | object |
Необов’язкова перевірка рядкового режиму всередині ефективної конфігурації. Використовуйте це, коли доступність лише з конфігурації застосовується лише до одного режиму. |
Кожна перевірка mode підтримує:
| Поле | Обов’язкове | Тип | Що означає |
|---|---|---|---|
path |
Ні | string |
Dot path усередині ефективної конфігурації. За замовчуванням 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, OpenClaw зберігає наявну поведінку та
завантажує плагін-власник, коли контракт інструмента відповідає політиці. Для інструментів
гарячого шляху, фабрика яких залежить від автентифікації/конфігурації, автори плагінів мають оголошувати
toolMetadata замість того, щоб змушувати core імпортувати середовище виконання для запиту.
Довідник providerAuthChoices
Кожен запис providerAuthChoices описує один вибір для онбордингу або автентифікації.
OpenClaw читає це до завантаження середовища виконання постачальника.
Списки налаштування постачальників використовують ці вибори маніфесту, варіанти налаштування,
отримані з дескриптора, і метадані каталогу встановлення без завантаження середовища виконання постачальника.
| Поле | Обов’язково | Тип | Що це означає |
|---|---|---|---|
provider |
Так | string |
Ідентифікатор провайдера, якому належить цей вибір. |
method |
Так | string |
Ідентифікатор методу автентифікації, до якого потрібно виконати dispatch. |
choiceId |
Так | string |
Стабільний ідентифікатор вибору автентифікації, який використовують потоки onboarding і CLI. |
choiceLabel |
Ні | string |
Видима користувачу мітка. Якщо не вказано, OpenClaw використовує choiceId як fallback. |
choiceHint |
Ні | string |
Короткий допоміжний текст для засобу вибору. |
assistantPriority |
Ні | number |
Менші значення сортуються раніше в інтерактивних засобах вибору, керованих асистентом. |
assistantVisibility |
Ні | "visible" | "manual-only" |
Приховує вибір із засобів вибору асистента, водночас дозволяючи ручний вибір у CLI. |
deprecatedChoiceIds |
Ні | string[] |
Застарілі ідентифікатори вибору, які мають переспрямовувати користувачів до цього вибору-заміни. |
groupId |
Ні | string |
Необов’язковий ідентифікатор групи для групування пов’язаних виборів. |
groupLabel |
Ні | string |
Видима користувачу мітка для цієї групи. |
groupHint |
Ні | string |
Короткий допоміжний текст для групи. |
optionKey |
Ні | string |
Внутрішній ключ опції для простих потоків автентифікації з одним прапорцем. |
cliFlag |
Ні | string |
Назва прапорця CLI, наприклад --openrouter-api-key. |
cliOption |
Ні | string |
Повна форма опції CLI, наприклад --openrouter-api-key <key>. |
cliDescription |
Ні | string |
Опис, який використовується в довідці CLI. |
onboardingScopes |
Ні | Array<"text-inference" | "image-generation" | "music-generation"> |
У яких поверхнях onboarding має з’являтися цей вибір. Якщо не вказано, типове значення — ["text-inference"]. |
Довідник commandAliases
Використовуйте commandAliases, коли Plugin володіє назвою runtime-команди, яку користувачі можуть
помилково додати в plugins.allow або спробувати запустити як кореневу команду CLI. OpenClaw
використовує ці метадані для діагностики без імпортування runtime-коду Plugin.
{ "commandAliases": [ { "name": "dreaming", "kind": "runtime-slash", "cliCommand": "memory" } ]}| Поле | Обов’язково | Тип | Що це означає |
|---|---|---|---|
name |
Так | string |
Назва команди, що належить цьому Plugin. |
kind |
Ні | "runtime-slash" |
Позначає псевдонім як slash-команду чату, а не як кореневу команду CLI. |
cliCommand |
Ні | string |
Пов’язана коренева команда CLI, яку варто запропонувати для CLI-операцій, якщо вона існує. |
Довідник activation
Використовуйте activation, коли Plugin може дешево оголосити, які події control-plane
мають включати його в план активації/завантаження.
Цей блок є метаданими планувальника, а не lifecycle API. Він не реєструє
runtime-поведінку, не замінює register(...) і не обіцяє, що
код Plugin уже виконано. Планувальник активації використовує ці поля, щоб
звузити кандидатні Plugins перед fallback до наявних метаданих володіння в маніфесті,
як-от providers, channels, commandAliases, setup.providers,
contracts.tools і hooks.
Віддавайте перевагу найвужчим метаданим, які вже описують володіння. Використовуйте
providers, channels, commandAliases, дескриптори setup або contracts,
коли ці поля виражають зв’язок. Використовуйте activation для додаткових підказок
планувальнику, які неможливо представити цими полями володіння.
Використовуйте top-level cliBackends для псевдонімів runtime CLI, як-от claude-cli,
my-cli або google-gemini-cli; activation.onAgentHarnesses призначено лише для
вбудованих ідентифікаторів agent harness, які ще не мають поля володіння.
Цей блок містить лише метадані. Він не реєструє runtime-поведінку та не
замінює register(...), setupEntry або інші runtime/Plugin entrypoints.
Поточні споживачі використовують його як звужувальну підказку перед ширшим завантаженням Plugin, тому
відсутні метадані активації не для startup зазвичай впливають лише на продуктивність; це
не має змінювати коректність, доки існують fallback механізми володіння з маніфесту.
Кожен Plugin має встановлювати activation.onStartup навмисно. Встановіть його в true
лише тоді, коли Plugin має запускатися під час startup Gateway. Встановіть його в false, коли
Plugin інертний під час startup і має завантажуватися лише за вужчими тригерами.
Пропуск onStartup більше не виконує startup-завантаження Plugin неявно; використовуйте явні
метадані активації для startup, channel, config, agent-harness, memory або
інших вужчих тригерів активації.
{ "activation": { "onStartup": false, "onProviders": ["openai"], "onCommands": ["models"], "onChannels": ["web"], "onRoutes": ["gateway-webhook"], "onConfigPaths": ["browser"], "onCapabilities": ["provider", "tool"] }}| Поле | Обов’язково | Тип | Що це означає |
|---|---|---|---|
onStartup |
Ні | boolean |
Явна startup-активація Gateway. Кожен Plugin має встановлювати це поле. true імпортує Plugin під час startup; false зберігає його лінивим під час startup, якщо інший відповідний тригер не потребує завантаження. |
onProviders |
Ні | string[] |
Ідентифікатори провайдерів, які мають включати цей Plugin у плани активації/завантаження. |
onAgentHarnesses |
Ні | string[] |
Ідентифікатори runtime вбудованих agent harness, які мають включати цей Plugin у плани активації/завантаження. Використовуйте top-level cliBackends для псевдонімів backend CLI. |
onCommands |
Ні | string[] |
Ідентифікатори команд, які мають включати цей Plugin у плани активації/завантаження. |
onChannels |
Ні | string[] |
Ідентифікатори каналів, які мають включати цей Plugin у плани активації/завантаження. |
onRoutes |
Ні | string[] |
Типи маршрутів, які мають включати цей Plugin у плани активації/завантаження. |
onConfigPaths |
Ні | string[] |
Шляхи конфігурації відносно кореня, які мають включати цей Plugin у плани startup/завантаження, коли шлях присутній і не вимкнений явно. |
onCapabilities |
Ні | Array<"provider" | "channel" | "tool" | "hook"> |
Широкі підказки про можливості, які використовуються плануванням активації control-plane. За можливості віддавайте перевагу вужчим полям. |
Поточні live-споживачі:
- Планування startup Gateway використовує
activation.onStartupдля явного startup імпорту - Планування CLI, ініційоване командою, виконує fallback до застарілих
commandAliases[].cliCommandабоcommandAliases[].name - Планування startup agent-runtime використовує
activation.onAgentHarnessesдля вбудованих harness і top-levelcliBackends[]для псевдонімів runtime CLI - Планування setup/channel, ініційоване каналом, виконує fallback до застарілого володіння
channels[], коли явні метадані активації каналу відсутні - Планування Plugin під час startup використовує
activation.onConfigPathsдля неканальних кореневих поверхонь config, як-от блокbrowserу bundled browser Plugin - Планування setup/runtime, ініційоване провайдером, виконує fallback до застарілого
володіння
providers[]і top-levelcliBackends[], коли явні метадані активації провайдера відсутні
Діагностика планувальника може відрізняти явні підказки активації від fallback
володіння з маніфесту. Наприклад, activation-command-hint означає, що
activation.onCommands збігся, тоді як manifest-command-alias означає, що
планувальник натомість використав володіння commandAliases. Ці мітки причин призначені для
діагностики host і тестів; автори Plugin мають продовжувати оголошувати метадані,
які найкраще описують володіння.
Довідник qaRunners
Використовуйте qaRunners, коли Plugin додає один або кілька transport runners під
спільним коренем openclaw qa. Зберігайте ці метадані дешевими й статичними; runtime Plugin
усе ще володіє фактичною реєстрацією CLI через легку
поверхню runtime-api.ts, яка експортує qaRunnerCliRegistrations.
{ "qaRunners": [ { "commandName": "matrix", "description": "Run the Docker-backed Matrix live QA lane against a disposable homeserver" } ]}| Поле | Обов’язкове | Тип | Що це означає |
|---|---|---|---|
commandName |
Так | string |
Підкоманда, змонтована під openclaw qa, наприклад matrix. |
description |
Ні | string |
Резервний довідковий текст, коли спільному хосту потрібна заглушка команди. |
Довідник 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 local credentials" } ] } ], "cliBackends": ["openai-cli"], "configMigrations": ["legacy-openai-auth"], "requiresRuntime": false }}Верхньорівневий cliBackends залишається чинним і далі описує бекенди виведення
CLI. setup.cliBackends є специфічною для налаштування поверхнею дескрипторів для
потоків керування/налаштування, які мають залишатися лише метаданими.
За наявності setup.providers і setup.cliBackends є пріоритетною
поверхнею пошуку спочатку за дескрипторами для виявлення налаштування. Якщо дескриптор лише
звужує кандидатний Plugin, а налаштуванню все ще потрібні багатші runtime-хуки під час налаштування,
встановіть requiresRuntime: true і залиште setup-api як
резервний шлях виконання.
OpenClaw також включає setup.providers[].envVars у загальні перевірки автентифікації провайдера та
змінних середовища. providerAuthEnvVars залишається підтримуваним через адаптер сумісності
протягом періоду вилучення, але не вбудовані plugins, які все ще його використовують,
отримують діагностику маніфесту. Нові plugins мають розміщувати метадані середовища для налаштування/статусу
в setup.providers[].envVars.
OpenClaw також може виводити прості варіанти налаштування з setup.providers[].authMethods,
коли запис налаштування відсутній або коли setup.requiresRuntime: false
оголошує runtime для налаштування непотрібним. Явні записи providerAuthChoices залишаються
пріоритетними для власних міток, прапорців CLI, області первинного налаштування та метаданих асистента.
Встановлюйте requiresRuntime: false лише тоді, коли цих дескрипторів достатньо для
поверхні налаштування. OpenClaw трактує явне false як контракт лише на дескрипторах
і не виконуватиме setup-api або openclaw.setupEntry для пошуку налаштування. Якщо
Plugin лише з дескрипторами все ще постачає один із цих runtime-записів налаштування,
OpenClaw повідомляє додаткову діагностику й далі ігнорує його. Пропущений
requiresRuntime зберігає застарілу резервну поведінку, щоб наявні plugins, які додали
дескриптори без цього прапорця, не ламалися.
Оскільки пошук налаштування може виконувати код setup-api, що належить Plugin, нормалізовані
значення setup.providers[].id і setup.cliBackends[] мають залишатися унікальними серед
виявлених plugins. Неоднозначне володіння завершується закритою відмовою замість вибору
переможця за порядком виявлення.
Коли runtime налаштування виконується, діагностика реєстру налаштування повідомляє про дрейф дескрипторів,
якщо setup-api реєструє провайдера або бекенд CLI, який дескриптори маніфесту
не оголошують, або якщо дескриптор не має відповідної runtime-реєстрації.
Ці діагностики є додатковими й не відхиляють застарілі plugins.
Довідник setup.providers
| Поле | Обов’язкове | Тип | Що це означає |
|---|---|---|---|
id |
Так | string |
Ідентифікатор провайдера, відкритий під час налаштування або первинного налаштування. Тримайте нормалізовані ідентифікатори глобально унікальними. |
authMethods |
Ні | string[] |
Ідентифікатори методів налаштування/автентифікації, які цей провайдер підтримує без завантаження повного runtime. |
envVars |
Ні | string[] |
Змінні середовища, які загальні поверхні налаштування/статусу можуть перевіряти до завантаження runtime Plugin. |
authEvidence |
Ні | object[] |
Дешеві локальні перевірки доказів автентифікації для провайдерів, які можуть автентифікуватися через несекретні маркери. |
authEvidence призначено для локальних маркерів облікових даних, що належать провайдеру й можуть бути
перевірені без завантаження runtime-коду. Ці перевірки мають залишатися дешевими й локальними:
без мережевих викликів, без читання keychain або менеджера секретів, без shell-команд і без
проб 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 — це мапа від назв полів конфігурації до невеликих підказок рендерингу.
{ "uiHints": { "apiKey": { "label": "API key", "help": "Used for OpenRouter requests", "placeholder": "sk-or-v1-...", "sensitive": true } }}Кожна підказка поля може містити:
| Поле | Тип | Що це означає |
|---|---|---|
label |
string |
Звернена до користувача мітка поля. |
help |
string |
Короткий допоміжний текст. |
tags |
string[] |
Необов’язкові теги UI. |
advanced |
boolean |
Позначає поле як розширене. |
sensitive |
boolean |
Позначає поле як секретне або чутливе. |
placeholder |
string |
Текст заповнювача для полів форми. |
Довідник contracts
Використовуйте contracts лише для статичних метаданих володіння можливостями, які OpenClaw може
читати без імпорту runtime 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"], "webFetchProviders": ["firecrawl"], "webSearchProviders": ["gemini"], "migrationProviders": ["hermes"], "gatewayMethodDispatch": ["authenticated-request"], "tools": ["firecrawl_search", "firecrawl_scrape"] }}Кожен список є необов’язковим:
| Поле | Тип | Що це означає |
|---|---|---|
embeddedExtensionFactories |
string[] |
Ідентифікатори фабрик розширень app-server Codex, наразі codex-app-server. |
agentToolResultMiddleware |
string[] |
Ідентифікатори середовищ виконання, для яких цей plugin може реєструвати middleware результатів інструментів. |
trustedToolPolicies |
string[] |
Локальні для plugin ідентифікатори довірених політик перед інструментами, які встановлений plugin може реєструвати. Вбудовані plugins можуть реєструвати політики без цього поля. |
externalAuthProviders |
string[] |
Ідентифікатори провайдерів, чиїм hook профілю зовнішньої автентифікації володіє цей plugin. |
embeddingProviders |
string[] |
Ідентифікатори загальних провайдерів embedding, якими володіє цей plugin для повторно використовуваних vector embedding, зокрема пам’яті. |
speechProviders |
string[] |
Ідентифікатори провайдерів мовлення, якими володіє цей plugin. |
realtimeTranscriptionProviders |
string[] |
Ідентифікатори провайдерів realtime-transcription, якими володіє цей plugin. |
realtimeVoiceProviders |
string[] |
Ідентифікатори провайдерів realtime-voice, якими володіє цей plugin. |
memoryEmbeddingProviders |
string[] |
Застарілі ідентифікатори провайдерів embedding, специфічних для пам’яті, якими володіє цей plugin. |
mediaUnderstandingProviders |
string[] |
Ідентифікатори провайдерів media-understanding, якими володіє цей plugin. |
transcriptSourceProviders |
string[] |
Ідентифікатори провайдерів джерел transcript, якими володіє цей plugin. |
imageGenerationProviders |
string[] |
Ідентифікатори провайдерів image-generation, якими володіє цей plugin. |
videoGenerationProviders |
string[] |
Ідентифікатори провайдерів video-generation, якими володіє цей plugin. |
webFetchProviders |
string[] |
Ідентифікатори провайдерів web-fetch, якими володіє цей plugin. |
webSearchProviders |
string[] |
Ідентифікатори провайдерів web-search, якими володіє цей plugin. |
migrationProviders |
string[] |
Ідентифікатори провайдерів імпорту, якими володіє цей plugin для openclaw migrate. |
gatewayMethodDispatch |
string[] |
Зарезервоване право для автентифікованих HTTP-маршрутів plugin, які диспетчеризують методи Gateway всередині процесу. |
tools |
string[] |
Назви інструментів агента, якими володіє цей plugin. |
contracts.embeddedExtensionFactories збережено для вбудованих фабрик розширень
Codex, призначених лише для app-server. Вбудовані трансформації результатів
інструментів натомість мають оголошувати contracts.agentToolResultMiddleware
і реєструватися через api.registerAgentToolResultMiddleware(...). Встановлені
plugins можуть використовувати ту саму точку інтеграції middleware лише коли це
явно ввімкнено і лише для середовищ виконання, які вони оголошують у
contracts.agentToolResultMiddleware.
Встановлені plugins, яким потрібен довірений хостом рівень політик перед
інструментами, мають оголошувати кожен зареєстрований локальний ідентифікатор у
contracts.trustedToolPolicies і бути явно ввімкненими. Вбудовані plugins
зберігають наявний шлях довірених політик, але встановлені plugins із
неоголошеними ідентифікаторами політик відхиляються до реєстрації.
Ідентифікатори політик обмежені plugin, що їх реєструє, тому два plugins можуть
обидва оголосити й зареєструвати workflow-budget; один plugin не може
зареєструвати той самий локальний ідентифікатор двічі.
Реєстрації api.registerTool(...) у середовищі виконання мають відповідати
contracts.tools. Виявлення інструментів використовує цей список, щоб
завантажувати лише ті середовища виконання plugin, які можуть володіти
запитаними інструментами.
Provider plugins, що реалізують resolveExternalAuthProfiles, мають оголошувати
contracts.externalAuthProviders; неоголошені hooks зовнішньої автентифікації
ігноруються.
Загальні провайдери embedding мають оголошувати contracts.embeddingProviders
для кожного адаптера, зареєстрованого через api.registerEmbeddingProvider(...).
Використовуйте загальний контракт для повторно використовуваної генерації
векторів, зокрема для провайдерів, які споживає пошук у пам’яті.
contracts.memoryEmbeddingProviders є застарілою специфічною для пам’яті
сумісністю і залишається лише доки наявні провайдери мігрують на загальну точку
інтеграції провайдерів embedding.
contracts.gatewayMethodDispatch наразі приймає
"authenticated-request". Це запобіжник чистоти API для нативних HTTP-маршрутів
plugin, які навмисно диспетчеризують методи площини керування Gateway всередині
процесу, а не sandbox проти зловмисних нативних plugins. Використовуйте його
лише для ретельно перевірених вбудованих/операторських поверхонь, які вже
вимагають HTTP-автентифікації Gateway.
Довідник mediaUnderstandingProviderMetadata
Використовуйте mediaUnderstandingProviderMetadata, коли провайдер
media-understanding має стандартні моделі, пріоритет fallback автоматичної
автентифікації або нативну підтримку документів, потрібну загальним core
helpers до завантаження середовища виконання. Ключі також мають бути оголошені в
contracts.mediaUnderstandingProviders.
{ "contracts": { "mediaUnderstandingProviders": ["example"] }, "mediaUnderstandingProviderMetadata": { "example": { "capabilities": ["image", "audio"], "defaultModels": { "image": "example-vision-latest", "audio": "example-transcribe-latest" }, "autoPriority": { "image": 40 }, "nativeDocumentInputs": ["pdf"] } }}Кожен запис провайдера може містити:
| Поле | Тип | Що це означає |
|---|---|---|
capabilities |
("image" | "audio" | "video")[] |
Медіаможливості, які надає цей провайдер. |
defaultModels |
Record<string, string> |
Стандартні зіставлення capability-to-model, що використовуються, коли config не задає модель. |
autoPriority |
Record<string, number> |
Менші числа сортуються раніше для автоматичного fallback провайдера на основі облікових даних. |
nativeDocumentInputs |
"pdf"[] |
Нативні вхідні документи, які підтримує провайдер. |
Довідник channelConfigs
Використовуйте channelConfigs, коли channel plugin потребує дешевих метаданих
config до завантаження середовища виконання. Read-only виявлення setup/status
каналу може використовувати ці метадані безпосередньо для налаштованих зовнішніх
каналів, коли запис setup недоступний, або коли setup.requiresRuntime: false
оголошує, що середовище виконання setup не потрібне.
channelConfigs — це метадані маніфесту plugin, а не новий top-level розділ
користувацького config. Користувачі й надалі налаштовують екземпляри каналів у
channels.<channel-id>. OpenClaw читає метадані маніфесту, щоб вирішити, який
plugin володіє цим налаштованим каналом, до виконання коду середовища виконання
plugin.
Для channel plugin configSchema і channelConfigs описують різні шляхи:
configSchemaперевіряєplugins.entries.<plugin-id>.configchannelConfigs.<channel-id>.schemaперевіряєchannels.<channel-id>
Non-bundled plugins, які оголошують channels[], також мають оголошувати
відповідні записи channelConfigs. Без них OpenClaw усе ще може завантажити
plugin, але cold-path схема config, setup і поверхні Control UI не можуть знати
форму параметрів, якими володіє канал, доки не виконається середовище виконання
plugin.
channelConfigs.<channel-id>.commands.nativeCommandsAutoEnabled і
nativeSkillsAutoEnabled можуть оголошувати статичні стандартні значення auto
для перевірок config команд, які виконуються до завантаження середовища
виконання каналу. Вбудовані канали також можуть публікувати ті самі стандартні
значення через package.json#openclaw.channel.commands разом з іншими
метаданими каталогу каналів, якими володіє їхній package.
{ "channelConfigs": { "matrix": { "schema": { "type": "object", "additionalProperties": false, "properties": { "homeserverUrl": { "type": "string" } } }, "uiHints": { "homeserverUrl": { "label": "Homeserver URL", "placeholder": "https://matrix.example.com" } }, "label": "Matrix", "description": "Matrix homeserver connection", "commands": { "nativeCommandsAutoEnabled": true, "nativeSkillsAutoEnabled": true }, "preferOver": ["matrix-legacy"] } }}Кожен запис каналу може містити:
| Поле | Тип | Що це означає |
|---|---|---|
schema |
object |
JSON Schema для channels.<id>. Обов’язкова для кожного оголошеного запису config каналу. |
uiHints |
Record<string, object> |
Необов’язкові UI labels/placeholders/sensitive hints для цього розділу config каналу. |
label |
string |
Позначка каналу, що об’єднується з picker і поверхнями inspect, коли метадані середовища виконання ще не готові. |
description |
string |
Короткий опис каналу для поверхонь inspect і catalog. |
commands |
object |
Статичні auto-defaults для нативних команд і native skill для перевірок config до запуску середовища виконання. |
preferOver |
string[] |
Ідентифікатори legacy або нижчопріоритетних plugins, які цей канал має випереджати в поверхнях вибору. |
Заміна іншого channel plugin
Використовуйте preferOver, коли ваш plugin є бажаним власником для
ідентифікатора каналу, який також може надавати інший plugin. Типові випадки —
перейменований ідентифікатор plugin, standalone plugin, що замінює вбудований
plugin, або підтримуваний fork, який зберігає той самий ідентифікатор каналу для
сумісності config.
{ "id": "acme-chat", "channels": ["chat"], "channelConfigs": { "chat": { "schema": { "type": "object", "additionalProperties": false, "properties": { "webhookUrl": { "type": "string" } } }, "preferOver": ["chat"] } }}Коли channels.chat налаштовано, OpenClaw розглядає і ідентифікатор каналу, і
ідентифікатор бажаного plugin. Якщо нижчопріоритетний plugin було вибрано лише
тому, що він вбудований або ввімкнений за замовчуванням, OpenClaw вимикає його в
ефективному config середовища виконання, щоб один plugin володів каналом і його
інструментами. Явний вибір користувача все ще має перевагу: якщо користувач явно
вмикає обидва plugins, OpenClaw зберігає цей вибір і повідомляє діагностику
дубльованих каналів/інструментів замість того, щоб мовчки змінювати запитаний
набір plugins.
Обмежуйте preferOver ідентифікаторами plugins, які справді можуть надавати той
самий канал. Це не загальне поле пріоритету, і воно не перейменовує ключі
користувацького config.
Довідник modelSupport
Використовуйте modelSupport, коли OpenClaw має визначати ваш Plugin провайдера з
коротких ідентифікаторів моделей на кшталт gpt-5.5 або claude-sonnet-4.6 до
завантаження середовища виконання Plugin.
{ "modelSupport": { "modelPrefixes": ["gpt-", "o1", "o3", "o4"], "modelPatterns": ["^computer-use-preview"] }}OpenClaw застосовує такий пріоритет:
- явні посилання
provider/modelвикористовують метадані маніфестуprovidersвласника modelPatternsмають перевагу надmodelPrefixes- якщо збігаються один невбудований Plugin і один вбудований Plugin, перемагає невбудований Plugin
- решта неоднозначностей ігнорується, доки користувач або конфігурація не вкаже провайдера
Поля:
| Поле | Тип | Що це означає |
|---|---|---|
modelPrefixes |
string[] |
Префікси, які зіставляються через startsWith із короткими ідентифікаторами моделей. |
modelPatterns |
string[] |
Джерела regex, які зіставляються з короткими ідентифікаторами моделей після видалення суфікса профілю. |
Записи modelPatterns компілюються через compileSafeRegex, який відхиляє
шаблони з вкладеним повторенням (наприклад, (a+)+$). Шаблони, що не проходять
перевірку безпеки, тихо пропускаються, так само як синтаксично недійсний regex.
Тримайте шаблони простими й уникайте вкладених квантифікаторів.
Довідка 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": "not available on Azure OpenAI Responses" } ], "discovery": { "openai": "static" } }}Поля верхнього рівня:
| Поле | Тип | Що це означає |
|---|---|---|
providers |
Record<string, object> |
Рядки каталогу для ідентифікаторів провайдерів, власником яких є цей Plugin. Ключі також мають бути в providers верхнього рівня. |
aliases |
Record<string, object> |
Псевдоніми провайдерів, які мають зіставлятися з власним провайдером для планування каталогу або приглушення. |
suppressions |
object[] |
Рядки моделей з іншого джерела, які цей Plugin приглушує з причини, специфічної для провайдера. |
discovery |
Record<string, "static" | "refreshable" | "runtime"> |
Чи каталог провайдера можна прочитати з метаданих маніфесту, оновити в кеш, чи він потребує середовища виконання. |
runtimeAugment |
boolean |
Установлюйте true лише тоді, коли середовище виконання провайдера має додавати рядки каталогу після планування маніфесту/конфігурації. |
aliases бере участь у пошуку власника провайдера для планування каталогу моделей.
Цілі псевдонімів мають бути провайдерами верхнього рівня, власником яких є той самий Plugin. Коли
відфільтрований за провайдером список використовує псевдонім, OpenClaw може прочитати маніфест власника та
застосувати перевизначення API/base URL псевдоніма без завантаження середовища виконання провайдера.
Псевдоніми не розгортають нефільтровані списки каталогу; широкі списки виводять лише рядки
канонічного провайдера-власника.
suppressions замінює старий hook середовища виконання провайдера suppressBuiltInModel.
Записи приглушення враховуються лише тоді, коли провайдер належить Plugin або
оголошений як ключ modelCatalog.aliases, що вказує на власний провайдер. Hooks приглушення
середовища виконання більше не викликаються під час розв'язання моделі.
Поля провайдера:
| Поле | Тип | Що це означає |
|---|---|---|
baseUrl |
string |
Необов'язковий базовий URL за замовчуванням для моделей у цьому каталозі провайдера. |
api |
ModelApi |
Необов'язковий адаптер API за замовчуванням для моделей у цьому каталозі провайдера. |
headers |
Record<string, string> |
Необов'язкові статичні заголовки, що застосовуються до цього каталогу провайдера. |
models |
object[] |
Обов'язкові рядки моделей. Рядки без id ігноруються. |
Поля моделі:
| Поле | Тип | Що це означає |
|---|---|---|
id |
string |
Локальний для провайдера ідентифікатор моделі, без префікса provider/. |
name |
string |
Необов'язкова відображувана назва. |
api |
ModelApi |
Необов'язкове перевизначення API для окремої моделі. |
baseUrl |
string |
Необов'язкове перевизначення базового URL для окремої моделі. |
headers |
Record<string, string> |
Необов'язкові статичні заголовки для окремої моделі. |
input |
Array<"text" | "image" | "document" | "audio" | "video"> |
Модальності, які приймає модель. |
reasoning |
boolean |
Чи модель надає поведінку reasoning. |
contextWindow |
number |
Нативне контекстне вікно провайдера. |
contextTokens |
number |
Необов'язкове ефективне обмеження контексту під час виконання, якщо воно відрізняється від contextWindow. |
maxTokens |
number |
Максимальна кількість вихідних токенів, якщо відома. |
cost |
object |
Необов'язкова ціна в USD за мільйон токенів, включно з необов'язковим tieredPricing. |
compat |
object |
Необов'язкові прапорці сумісності, що відповідають сумісності конфігурації моделі OpenClaw. |
status |
"available" | "preview" | "deprecated" | "disabled" |
Статус у списку. Приглушуйте лише тоді, коли рядок взагалі не має з'являтися. |
statusReason |
string |
Необов'язкова причина, що показується зі статусом, відмінним від available. |
replaces |
string[] |
Старі локальні для провайдера ідентифікатори моделей, які ця модель замінює. |
replacedBy |
string |
Локальний для провайдера ідентифікатор моделі-заміни для застарілих рядків. |
tags |
string[] |
Стабільні теги, які використовуються засобами вибору та фільтрами. |
Поля приглушення:
| Поле | Тип | Що це означає |
|---|---|---|
provider |
string |
Ідентифікатор провайдера для upstream-рядка, який треба приглушити. Має належати цьому Plugin або бути оголошеним як власний псевдонім. |
model |
string |
Локальний для провайдера ідентифікатор моделі, який треба приглушити. |
reason |
string |
Необов'язкове повідомлення, що показується, коли приглушений рядок запитують напряму. |
when.baseUrlHosts |
string[] |
Необов'язковий список ефективних хостів базового URL провайдера, потрібних для застосування приглушення. |
when.providerConfigApiIn |
string[] |
Необов'язковий список точних значень api конфігурації провайдера, потрібних для застосування приглушення. |
Не розміщуйте в modelCatalog дані, призначені лише для середовища виконання. Використовуйте static лише тоді, коли рядки маніфесту
достатньо повні, щоб поверхні списку й вибору, відфільтровані за провайдером, могли пропустити
виявлення через реєстр/середовище виконання. Використовуйте refreshable, коли рядки маніфесту є корисними
початковими або додатковими рядками для списку, але оновлення/кеш може додати більше рядків пізніше;
рядки refreshable самі по собі не є авторитетними. Використовуйте runtime, коли OpenClaw
має завантажити середовище виконання провайдера, щоб знати список.
Довідка modelIdNormalization
Використовуйте modelIdNormalization для дешевого, керованого провайдером очищення ідентифікатора моделі, яке має
відбутися до завантаження середовища виконання провайдера. Це зберігає псевдоніми, як-от короткі назви
моделей, локальні для провайдера застарілі ідентифікатори та правила префіксів проксі, у маніфесті Plugin
власника, а не в таблицях вибору моделей ядра.
{ "providers": ["anthropic", "openrouter"], "modelIdNormalization": { "providers": { "anthropic": { "aliases": { "sonnet-4.6": "claude-sonnet-4-6" } }, "openrouter": { "prefixWhenBare": "openrouter" } } }}Поля провайдера:
| Поле | Тип | Що це означає |
|---|---|---|
aliases |
Record<string,string> |
Точні псевдоніми ідентифікаторів моделей без урахування регістру. Значення повертаються як записано. |
stripPrefixes |
string[] |
Префікси, які треба видалити перед пошуком псевдоніма; корисно для застарілого дублювання provider/model. |
prefixWhenBare |
string |
Префікс, який треба додати, коли нормалізований ідентифікатор моделі ще не містить /. |
prefixWhenBareAfterAliasStartsWith |
object[] |
Умовні правила префікса для bare-id після пошуку псевдоніма, ключовані за modelPrefix і prefix. |
Довідка providerEndpoints
Використовуйте providerEndpoints для класифікації endpoint, яку загальна політика запитів
має знати до завантаження середовища виконання провайдера. Ядро досі володіє значенням кожного
endpointClass; маніфести Plugin володіють метаданими хоста та базового URL.
Поля кінцевої точки:
| Поле | Тип | Що це означає |
|---|---|---|
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 для дешевих метаданих сумісності запитів, які потрібні загальній
політиці запитів без завантаження runtime постачальника. Залишайте переписування payload, специфічне
для поведінки, у runtime-хуках постачальника або спільних допоміжних функціях сімейства постачальників.
{ "providers": ["vllm"], "providerRequest": { "providers": { "vllm": { "family": "vllm", "openAICompletions": { "supportsStreamingUsage": true } } } }}Поля постачальника:
| Поле | Тип | Що це означає |
|---|---|---|
family |
string |
Мітка сімейства постачальника, яку використовують загальні рішення сумісності запитів і діагностика. |
compatibilityFamily |
"moonshot" |
Необов’язковий бакет сумісності сімейства постачальників для спільних допоміжних функцій запитів. |
openAICompletions |
object |
Прапорці запитів completions, сумісних з OpenAI; наразі supportsStreamingUsage. |
Довідка secretProviderIntegrations
Використовуйте secretProviderIntegrations, коли plugin може опублікувати повторно використовуваний
попередньо налаштований exec-постачальник SecretRef. OpenClaw читає ці метадані до завантаження
runtime plugin, зберігає належність plugin у secrets.providers.<alias>.pluginIntegration і
залишає фактичне розв’язання секретів runtime SecretRef.
Попередні налаштування доступні лише для вбудованих plugins і встановлених plugins, виявлених
із керованих коренів встановлення plugin, як-от встановлення з git і ClawHub.
{ "secretProviderIntegrations": { "secret-store": { "providerAlias": "team-secrets", "displayName": "Team secrets", "source": "exec", "command": "${node}", "args": ["./bin/resolve-secrets.mjs"] } }}Ключ мапи — це id інтеграції. Якщо providerAlias пропущено, OpenClaw використовує
id інтеграції як alias постачальника SecretRef. Alias постачальників мають відповідати
звичайному шаблону alias постачальника SecretRef, наприклад team-secrets або
onepassword-work.
Коли оператор вибирає попереднє налаштування, OpenClaw записує посилання на постачальника такого вигляду:
{ "secrets": { "providers": { "team-secrets": { "source": "exec", "pluginIntegration": { "pluginId": "acme-secrets", "integrationId": "secret-store" } } } }}Під час запуску або перезавантаження OpenClaw розв’язує цього постачальника, завантажуючи поточні
метадані маніфесту plugin, перевіряючи, що plugin-власник встановлений і активний, та
матеріалізуючи exec-команду з маніфесту. Вимкнення або видалення
plugin відкликає постачальника для активних SecretRefs. Оператори, яким потрібна автономна
exec-конфігурація, все ще можуть напряму записувати ручних постачальників command/args.
Наразі підтримуються лише попередні налаштування source: "exec". command має бути
${node}, а args[0] має бути скриптом-розв’язувачем відносно кореня plugin з префіксом ./.
OpenClaw матеріалізує його під час запуску або перезавантаження в поточний виконуваний файл Node і
абсолютний шлях до скрипта всередині plugin. Параметри Node, як-от --require, --import,
--loader, --env-file, --eval і --print, не є частиною контракту попереднього налаштування
маніфесту. Оператори, яким потрібні команди не на Node, можуть напряму налаштувати автономних
ручних exec-постачальників.
OpenClaw виводить trustedDirs для попередніх налаштувань маніфесту з кореня plugin і,
для попередніх налаштувань ${node}, з каталогу поточного виконуваного файла Node. Задані в маніфесті
trustedDirs ігноруються. Інші параметри exec-постачальника, як-от timeoutMs,
maxOutputBytes, jsonOnly, env, passEnv і allowInsecurePath, передаються
до звичайної конфігурації exec-постачальника SecretRef.
Довідка modelPricing
Використовуйте modelPricing, коли постачальнику потрібна поведінка pricing у площині керування до
завантаження runtime. Pricing-кеш Gateway читає ці метадані без імпорту
runtime-коду постачальника.
{ "providers": ["ollama", "openrouter"], "modelPricing": { "providers": { "ollama": { "external": false }, "openrouter": { "openRouter": { "passthroughProviderModel": true }, "liteLLM": false } } }}Поля постачальника:
| Поле | Тип | Що це означає |
|---|---|---|
external |
boolean |
Установіть false для локальних або self-hosted постачальників, які ніколи не мають отримувати pricing OpenRouter або LiteLLM. |
openRouter |
false | object |
Зіставлення для пошуку pricing OpenRouter. false вимикає пошук OpenRouter для цього постачальника. |
liteLLM |
false | object |
Зіставлення для пошуку pricing LiteLLM. false вимикає пошук LiteLLM для цього постачальника. |
Поля джерела:
| Поле | Тип | Що це означає |
|---|---|---|
provider |
string |
id постачальника зовнішнього каталогу, коли він відрізняється від id постачальника OpenClaw, наприклад z-ai для постачальника zai. |
passthroughProviderModel |
boolean |
Розглядати id моделей зі скісною рискою як вкладені посилання постачальник/модель, корисно для proxy-постачальників, як-от OpenRouter. |
modelIdTransforms |
"version-dots"[] |
Додаткові варіанти id моделей зовнішнього каталогу. version-dots пробує id версій із крапками, як-от claude-opus-4.6. |
Індекс постачальників OpenClaw
Індекс постачальників OpenClaw — це належні OpenClaw preview-метадані для постачальників, чиї plugins можуть ще не бути встановлені. Він не є частиною маніфесту plugin. Маніфести plugins залишаються авторитетним джерелом для встановлених plugins. Індекс постачальників — це внутрішній fallback-контракт, який майбутні поверхні встановлюваних постачальників і вибору моделей до встановлення споживатимуть, коли plugin постачальника не встановлений.
Порядок авторитетності каталогу:
- Конфігурація користувача.
- Маніфест встановленого plugin
modelCatalog. - Кеш каталогу моделей з явного оновлення.
- Preview-рядки Індексу постачальників OpenClaw.
Індекс постачальників не має містити секретів, увімкненого стану, runtime-хуків або
live-даних моделей, специфічних для облікового запису. Його preview-каталоги використовують таку саму
форму рядка постачальника modelCatalog, як і маніфести plugins, але мають лишатися обмеженими
стабільними display-метаданими, якщо поля runtime-адаптера, як-от api,
baseUrl, pricing або прапорці сумісності, не підтримуються навмисно узгодженими з
маніфестом встановленого plugin. Постачальники з live-виявленням /models мають
записувати оновлені рядки через явний шлях кешу каталогу моделей замість того, щоб
звичайний listing або onboarding викликав API постачальника.
Записи Індексу постачальників також можуть містити метадані встановлюваного plugin для постачальників, чий plugin було винесено з ядра або який інакше ще не встановлений. Ці метадані віддзеркалюють шаблон каталогу каналів: назви пакета, npm install spec, очікуваної цілісності та дешевих міток вибору автентифікації достатньо, щоб показати варіант встановлюваного налаштування. Щойно plugin встановлено, його маніфест перемагає, а запис Індексу постачальників ігнорується для цього постачальника.
Застарілі ключі можливостей верхнього рівня deprecated. Використовуйте openclaw doctor --fix, щоб
перемістити speechProviders, realtimeTranscriptionProviders,
realtimeVoiceProviders, mediaUnderstandingProviders,
imageGenerationProviders, videoGenerationProviders,
webFetchProviders і webSearchProviders під contracts; звичайне
завантаження маніфесту більше не розглядає ці поля верхнього рівня як володіння
можливостями.
Маніфест і package.json
Ці два файли виконують різні завдання:
| Файл | Для чого використовувати |
|---|---|
openclaw.plugin.json |
Виявлення, валідація конфігурації, метадані вибору автентифікації та підказки UI, які мають існувати до запуску коду plugin |
package.json |
npm-метадані, встановлення залежностей і блок openclaw, який використовується для entrypoints, install gating, setup або метаданих каталогу |
Якщо ви не впевнені, де має бути частина метаданих, скористайтеся цим правилом:
- якщо OpenClaw має знати це до завантаження коду plugin, помістіть це в
openclaw.plugin.json - якщо це стосується пакування, entry-файлів або поведінки npm install, помістіть це в
package.json
Поля package.json, які впливають на виявлення
Деякі pre-runtime метадані plugin навмисно живуть у package.json під
блоком openclaw, а не в openclaw.plugin.json.
openclaw.bundle і openclaw.bundle.json не є контрактами plugin OpenClaw;
native plugins мають використовувати openclaw.plugin.json плюс підтримувані
поля package.json#openclaw нижче.
Важливі приклади:
| Поле | Що воно означає |
|---|---|
openclaw.extensions |
Оголошує нативні точки входу плагіна. Має залишатися всередині каталогу пакета плагіна. |
openclaw.runtimeExtensions |
Оголошує зібрані точки входу середовища виконання JavaScript для встановлених пакетів. Має залишатися всередині каталогу пакета плагіна. |
openclaw.setupEntry |
Легка точка входу лише для налаштування, що використовується під час початкового налаштування, відкладеного запуску каналу та виявлення статусу каналу/SecretRef лише для читання. Має залишатися всередині каталогу пакета плагіна. |
openclaw.runtimeSetupEntry |
Оголошує зібрану точку входу налаштування JavaScript для встановлених пакетів. Потребує setupEntry, має існувати й має залишатися всередині каталогу пакета плагіна. |
openclaw.channel |
Дешеві метадані каталогу каналів, як-от мітки, шляхи документації, псевдоніми та текст для вибору. |
openclaw.channel.commands |
Статичні метадані нативних команд і автоматичних стандартних значень нативних Skills, що використовуються конфігурацією, аудитом і поверхнями списку команд до завантаження середовища виконання каналу. |
openclaw.channel.configuredState |
Легкі метадані перевірки налаштованого стану, які можуть відповісти на запитання «чи вже існує налаштування лише через env?» без завантаження повного середовища виконання каналу. |
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, які мають матеріалізуватися, коли їхні платформні обмеження lockfile відповідають поточному хосту. |
openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen |
Дозволяє поверхням каналу середовища виконання налаштування завантажуватися перед початком прослуховування, а потім відкладає повний налаштований плагін каналу до активації після прослуховування. |
Метадані маніфесту визначають, які варіанти провайдера/каналу/налаштування з’являються в
початковому налаштуванні до завантаження середовища виконання. package.json#openclaw.install повідомляє
початковому налаштуванню, як отримати або ввімкнути цей плагін, коли користувач вибирає один із цих
варіантів. Не переносіть підказки встановлення в openclaw.plugin.json.
openclaw.install.minHostVersion застосовується під час встановлення та завантаження реєстру
маніфестів для невбудованих джерел плагінів. Недійсні значення відхиляються;
новіші, але дійсні значення пропускають зовнішні плагіни на старіших хостах. Вбудовані вихідні
плагіни вважаються співверсійними з checkout хоста.
openclaw.install.requiredPlatformPackages призначений для пакетів npm, які надають
потрібні нативні бінарні файли через опціональні платформні псевдоніми. Укажіть
просту назву пакета npm для кожного підтримуваного платформного псевдоніма. Під час встановлення npm
OpenClaw перевіряє лише оголошений псевдонім, чиї обмеження lockfile відповідають
поточному хосту. Якщо 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-tags, для сумісності. Діагностика каталогу може
розрізняти точні, плаваючі, закріплені цілісністю, без цілісності, з невідповідністю назви пакета
та недійсні джерела стандартного вибору. Вона також попереджає, коли
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, статусу або наявності лише для читання потрібна дешева перевірка автентифікації так/ні до завантаження повного плагіна каналу. Збережений стан автентифікації не є налаштованим станом каналу: не використовуйте ці метадані для автоматичного ввімкнення плагінів, відновлення залежностей середовища виконання або рішення, чи має завантажуватися середовище виконання каналу. Цільовий export має бути невеликою функцією, яка читає лише збережений стан; не маршрутизуйте її через повний barrel середовища виконання каналу.
openclaw.channel.configuredState має таку саму форму для дешевих перевірок налаштованості
лише через env:
{ "openclaw": { "channel": { "id": "telegram", "configuredState": { "specifier": "./configured-state", "exportName": "hasTelegramConfiguredState" } } }}Використовуйте його, коли канал може відповісти про налаштований стан з env або інших крихітних
нерuntime-вхідних даних. Якщо перевірці потрібне повне розв’язання конфігурації або справжнє
середовище виконання каналу, залиште цю логіку в хуку плагіна config.hasConfiguredState.
Пріоритет виявлення (дублікати ідентифікаторів плагінів)
OpenClaw виявляє плагіни з кількох коренів. Сирий порядок сканування файлової системи
див. у Порядок сканування плагінів. Якщо два виявлення
мають той самий id, зберігається лише маніфест із найвищим пріоритетом;
дублікати з нижчим пріоритетом відкидаються замість завантаження поруч із ним.
Пріоритет, від найвищого до найнижчого:
- Вибраний конфігурацією — шлях, явно закріплений у
plugins.entries.<id> - Вбудований — плагіни, що постачаються з OpenClaw
- Глобальне встановлення — плагіни, встановлені в глобальний корінь плагінів OpenClaw
- Робочий простір — плагіни, виявлені відносно поточного робочого простору
Наслідки:
- Форкнута або застаріла копія вбудованого плагіна, що лежить у робочому просторі, не затінятиме вбудовану збірку.
- Щоб справді перевизначити вбудований плагін локальним, закріпіть його через
plugins.entries.<id>, щоб він переміг за пріоритетом, а не покладайтеся на виявлення в робочому просторі. - Відкидання дублікатів журналюється, щоб Doctor і діагностика запуску могли вказати на відкинуту копію.
- Перевизначення дублікатів, вибрані конфігурацією, формулюються в діагностиці як явні перевизначення, але все одно попереджають, щоб застарілі форки й випадкові затінення залишалися видимими.
Вимоги JSON Schema
- Кожен Plugin має постачатися з JSON-схемою, навіть якщо він не приймає конфігурацію.
- Порожня схема прийнятна (наприклад,
{ "type": "object", "additionalProperties": false }). - Схеми перевіряються під час читання/запису конфігурації, а не під час виконання.
- Під час розширення або форку вбудованого Plugin новими ключами конфігурації одночасно оновіть
configSchemaуopenclaw.plugin.jsonцього Plugin. Схеми вбудованих Plugin є строгими, тому додаванняplugins.entries.<id>.config.myNewKeyу конфігурацію користувача без додаванняmyNewKeyдоconfigSchema.propertiesбуде відхилено до завантаження середовища виконання Plugin.
Приклад розширення схеми:
{ "configSchema": { "type": "object", "additionalProperties": false, "properties": { "myNewKey": { "type": "string" } } }}Поведінка перевірки
- Невідомі ключі
channels.*є помилками, якщо ідентифікатор каналу не оголошено в маніфесті Plugin. plugins.entries.<id>,plugins.allow,plugins.denyіplugins.slots.*мають посилатися на доступні для виявлення ідентифікатори Plugin. Невідомі ідентифікатори є помилками.- Якщо 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,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>).