Перейти до основного вмісту

Documentation Index

Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

Ця сторінка стосується лише нативного маніфесту Plugin OpenClaw. Сумісні макети пакетів див. у пакетах Plugin. Сумісні формати пакетів використовують інші файли маніфесту:
  • Пакет Codex: .codex-plugin/plugin.json
  • Пакет Claude: .claude-plugin/plugin.json або стандартний макет компонентів Claude без маніфесту
  • Пакет Cursor: .cursor-plugin/plugin.json
OpenClaw також автоматично виявляє ці макети пакетів, але вони не перевіряються за схемою openclaw.plugin.json, описаною тут. Для сумісних пакетів OpenClaw наразі читає метадані пакета, а також оголошені корені skill, корені команд Claude, стандартні значення settings.json пакета Claude, стандартні значення LSP пакета Claude та підтримувані набори hook, коли макет відповідає очікуванням runtime OpenClaw. Кожен нативний Plugin OpenClaw обов’язково має постачати файл openclaw.plugin.json у корені Plugin. OpenClaw використовує цей маніфест, щоб перевіряти конфігурацію без виконання коду Plugin. Відсутні або недійсні маніфести вважаються помилками Plugin і блокують перевірку конфігурації. Див. повний посібник із системи Plugin: Plugins. Про нативну модель можливостей і поточні настанови щодо зовнішньої сумісності: Модель можливостей.

Що робить цей файл

openclaw.plugin.json — це метадані, які OpenClaw читає до завантаження вашого коду Plugin. Усе нижче має бути достатньо дешевим для перевірки без запуску runtime Plugin. Використовуйте його для:
  • ідентичності Plugin, перевірки конфігурації та підказок UI конфігурації
  • метаданих auth, onboarding і setup (alias, auto-enable, provider env vars, auth choices)
  • підказок активації для поверхонь control-plane
  • скороченого володіння сімействами моделей
  • статичних знімків володіння можливостями (contracts)
  • метаданих QA runner, які може перевіряти спільний хост openclaw qa
  • метаданих конфігурації для конкретних каналів, об’єднаних у catalog і поверхні validation
Не використовуйте його для: реєстрації поведінки runtime, оголошення code entrypoints або метаданих npm install. Вони належать до вашого коду 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"],
  "providerAuthEnvVars": {
    "openrouter": ["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Канонічний ідентифікатор Plugin. Це ідентифікатор, що використовується в plugins.entries.<id>.
configSchemaТакobjectВбудована JSON Schema для конфігурації цього Plugin.
enabledByDefaultНіtrueПозначає вбудований Plugin як увімкнений за замовчуванням. Пропустіть це поле або задайте будь-яке значення, відмінне від true, щоб залишити Plugin вимкненим за замовчуванням.
enabledByDefaultOnPlatformsНіstring[]Позначає вбудований Plugin як увімкнений за замовчуванням лише на перелічених платформах Node.js, наприклад ["darwin"]. Явна конфігурація все одно має пріоритет.
legacyPluginIdsНіstring[]Застарілі ідентифікатори, що нормалізуються до цього канонічного ідентифікатора Plugin.
autoEnableWhenConfiguredProvidersНіstring[]Ідентифікатори провайдерів, які мають автоматично вмикати цей Plugin, коли автентифікація, конфігурація або посилання на моделі згадують їх.
kindНі"memory" | "context-engine"Оголошує ексклюзивний тип Plugin, що використовується plugins.slots.*.
channelsНіstring[]Ідентифікатори каналів, якими володіє цей Plugin. Використовується для виявлення та перевірки конфігурації.
providersНіstring[]Ідентифікатори провайдерів, якими володіє цей Plugin.
providerCatalogEntryНіstringШлях до легкого модуля каталогу провайдера відносно кореня Plugin для метаданих каталогу провайдера в межах маніфесту, які можна завантажити без активації повного runtime Plugin.
modelSupportНіobjectСкорочені метадані сімейств моделей, що належать маніфесту й використовуються для автоматичного завантаження Plugin перед runtime.
modelCatalogНіobjectДекларативні метадані каталогу моделей для провайдерів, якими володіє цей Plugin. Це контракт площини керування для майбутнього спискування лише для читання, онбордингу, вибору моделей, псевдонімів і пригнічення без завантаження runtime Plugin.
modelPricingНіobjectПолітика зовнішнього пошуку цін, що належить провайдеру. Використовуйте її, щоб виключити локальних або self-hosted провайдерів із віддалених каталогів цін або зіставити посилання провайдерів з ідентифікаторами каталогів OpenRouter/LiteLLM без жорсткого кодування ідентифікаторів провайдерів у core.
modelIdNormalizationНіobjectОчищення псевдонімів і префіксів ідентифікаторів моделей, що належить провайдеру та має виконуватися до завантаження runtime провайдера.
providerEndpointsНіobject[]Метадані хоста/baseUrl кінцевої точки, що належать маніфесту, для маршрутів провайдера, які core має класифікувати до завантаження runtime провайдера.
providerRequestНіobjectДешеві метадані сімейства провайдера та сумісності запитів, що використовуються загальною політикою запитів до завантаження runtime провайдера.
cliBackendsНіstring[]Ідентифікатори backend-ів CLI inference, якими володіє цей Plugin. Використовується для автоматичної активації під час запуску з явних посилань у конфігурації.
syntheticAuthRefsНіstring[]Посилання на провайдера або backend CLI, для яких синтетичний хук автентифікації, що належить Plugin, слід перевіряти під час холодного виявлення моделей до завантаження runtime.
nonSecretAuthMarkersНіstring[]Значення-заповнювачі API-ключів, що належать вбудованому Plugin і представляють несекретний локальний, OAuth або навколишній стан облікових даних.
commandAliasesНіobject[]Назви команд, якими володіє цей Plugin і які мають створювати діагностику конфігурації та CLI з урахуванням Plugin до завантаження runtime.
providerAuthEnvVarsНіRecord<string, string[]>Застарілі сумісні метадані env для пошуку автентифікації/стану провайдера. Для нових Plugins віддавайте перевагу setup.providers[].envVars; OpenClaw усе ще читає це поле протягом періоду deprecation.
providerAuthAliasesНіRecord<string, string>Ідентифікатори провайдерів, які мають повторно використовувати інший ідентифікатор провайдера для пошуку автентифікації, наприклад провайдер для кодування, що спільно використовує API-ключ і профілі автентифікації базового провайдера.
channelEnvVarsНіRecord<string, string[]>Дешеві env-метадані каналу, які OpenClaw може перевіряти без завантаження коду Plugin. Використовуйте це для налаштування каналу на основі env або поверхонь автентифікації, які мають бачити загальні помічники запуску/конфігурації.
providerAuthChoicesНіobject[]Дешеві метадані вибору автентифікації для засобів вибору під час онбордингу, визначення бажаного провайдера та простого підключення прапорців CLI.
activationНіobjectДешеві метадані планувальника активації для завантаження, спричиненого запуском, провайдером, командою, каналом, маршрутом і можливістю. Лише метадані; runtime Plugin усе одно володіє фактичною поведінкою.
setupНіobjectДешеві дескриптори налаштування/онбордингу, які поверхні виявлення та налаштування можуть перевіряти без завантаження runtime Plugin.
qaRunnersНіobject[]Дешеві дескриптори QA runner, що використовуються спільним хостом openclaw qa до завантаження runtime Plugin.
contractsНіobjectСтатичний знімок володіння можливостями для зовнішніх хуків автентифікації, мовлення, транскрипції в реальному часі, голосу в реальному часі, розуміння медіа, генерації зображень, генерації музики, генерації відео, web-fetch, вебпошуку та володіння інструментами.
mediaUnderstandingProviderMetadataНіRecord<string, object>Дешеві типові значення розуміння медіа для ідентифікаторів провайдерів, оголошених у contracts.mediaUnderstandingProviders.
imageGenerationProviderMetadataНіRecord<string, object>Дешеві метадані автентифікації генерації зображень для ідентифікаторів провайдерів, оголошених у contracts.imageGenerationProviders, включно з псевдонімами автентифікації та обмежувачами base-url, що належать провайдеру.
videoGenerationProviderMetadataНіRecord<string, object>Дешеві метадані автентифікації генерації відео для ідентифікаторів провайдерів, оголошених у contracts.videoGenerationProviders, включно з псевдонімами автентифікації та обмежувачами base-url, що належать провайдеру.
musicGenerationProviderMetadataНіRecord<string, object>Дешеві метадані автентифікації генерації музики для ідентифікаторів провайдерів, оголошених у contracts.musicGenerationProviders, включно з псевдонімами автентифікації та обмежувачами base-url, що належать провайдеру.
toolMetadataНіRecord<string, object>Дешеві метадані доступності для інструментів, що належать Plugin і оголошені в contracts.tools. Використовуйте це, коли інструмент не повинен завантажувати runtime, якщо немає доказів конфігурації, env або автентифікації.
channelConfigsНіRecord<string, object>Метадані конфігурації каналу, що належать маніфесту й об’єднуються з поверхнями виявлення та перевірки до завантаження runtime.
skillsНіstring[]Каталоги Skills для завантаження, відносно кореня Plugin.
nameНіstringЗрозуміла для людини назва Plugin.
descriptionНіstringКороткий опис, що показується в поверхнях Plugin.
versionНіstringІнформаційна версія Plugin.
uiHintsНіRecord<string, object>Мітки інтерфейсу, заповнювачі та підказки щодо чутливості для полів конфігурації.

Довідник метаданих провайдера генерації

Поля метаданих провайдера генерації описують статичні сигнали автентифікації для провайдерів, оголошених у відповідному списку contracts.*GenerationProviders. OpenClaw читає ці поля до завантаження середовища виконання провайдера, щоб основні інструменти могли визначити, чи доступний провайдер генерації, без імпорту кожного Plugin провайдера. Використовуйте ці поля лише для дешевих декларативних фактів. Транспорт, перетворення запитів, оновлення токенів, перевірка облікових даних і фактична поведінка генерації залишаються в середовищі виконання Plugin.
{
  "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.
Кожен запис configSignals підтримує:
ПолеОбов’язковеТипЩо це означає
rootPathТакstringШлях через крапку до об’єкта конфігурації, що належить Plugin, який потрібно перевірити, наприклад plugins.entries.example.config.
overlayPathНіstringШлях через крапку всередині кореневої конфігурації, об’єкт якого має накладатися на кореневий об’єкт перед оцінюванням сигналу. Використовуйте це для конфігурації, специфічної для можливості, як-от image, video або music.
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 міг уникати імпорту середовища виконання Plugin лише для того, щоб фабрика інструмента повернула null.
{
  "providerAuthEnvVars": {
    "example": ["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 зберігає наявну поведінку й завантажує Plugin-власника, коли контракт інструмента відповідає політиці. Для інструментів гарячого шляху, чия фабрика залежить від автентифікації/конфігурації, автори Plugin мають оголошувати toolMetadata, а не змушувати core імпортувати середовище виконання, щоб запитати.

Довідник 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Короткий допоміжний текст для групи.
optionKeyНіstringВнутрішній ключ параметра для простих потоків автентифікації з одним прапорцем.
cliFlagНіstringНазва прапорця CLI, наприклад --openrouter-api-key.
cliOptionНіstringПовна форма параметра CLI, наприклад --openrouter-api-key <key>.
cliDescriptionНіstringОпис, який використовується в довідці CLI.
onboardingScopesНіArray<"text-inference" | "image-generation">Поверхні онбордингу, у яких має з’являтися цей варіант. Якщо пропущено, типове значення — ["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 може дешево оголосити, які події площини керування мають включати його до плану активації/завантаження. Цей блок є метаданими планувальника, а не lifecycle API. Він не реєструє runtime-поведінку, не замінює register(...) і не гарантує, що код Plugin уже виконано. Планувальник активації використовує ці поля, щоб звузити список кандидатів Plugin перед поверненням до наявних метаданих володіння в маніфесті, таких як providers, channels, commandAliases, setup.providers, contracts.tools і хуки. Надавайте перевагу найвужчим метаданим, які вже описують володіння. Використовуйте providers, channels, commandAliases, дескриптори setup або contracts, коли ці поля виражають зв’язок. Використовуйте activation для додаткових підказок планувальнику, які не можна представити цими полями володіння. Використовуйте верхньорівневий cliBackends для runtime-псевдонімів CLI, таких як claude-cli, codex-cli або google-gemini-cli; activation.onAgentHarnesses призначений лише для вбудованих ідентифікаторів agent harness, які ще не мають поля володіння. Цей блок містить лише метадані. Він не реєструє runtime-поведінку та не замінює register(...), setupEntry або інші runtime/Plugin точки входу. Поточні споживачі використовують його як підказку для звуження перед ширшим завантаженням Plugin, тому відсутні метадані активації не для запуску зазвичай лише впливають на продуктивність; це не має змінювати коректність, доки fallback-и володіння з маніфесту все ще існують. Кожен Plugin має задавати activation.onStartup навмисно. Установіть його в true лише тоді, коли Plugin має запускатися під час старту Gateway. Установіть його в false, коли Plugin інертний під час старту й має завантажуватися лише за вужчими тригерами. Пропуск onStartup більше не завантажує Plugin під час старту неявно; використовуйте явні метадані активації для старту, каналу, конфігурації, agent-harness, пам’яті або інших вужчих тригерів активації.
{
  "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[]Ідентифікатори provider, які мають включати цей Plugin до планів активації/завантаження.
onAgentHarnessesНіstring[]Runtime-ідентифікатори вбудованих agent harness, які мають включати цей Plugin до планів активації/завантаження. Використовуйте верхньорівневий cliBackends для псевдонімів CLI backend.
onCommandsНіstring[]Ідентифікатори команд, які мають включати цей Plugin до планів активації/завантаження.
onChannelsНіstring[]Ідентифікатори каналів, які мають включати цей Plugin до планів активації/завантаження.
onRoutesНіstring[]Види маршрутів, які мають включати цей Plugin до планів активації/завантаження.
onConfigPathsНіstring[]Шляхи конфігурації відносно кореня, які мають включати цей Plugin до планів старту/завантаження, коли шлях присутній і не вимкнений явно.
onCapabilitiesНіArray<"provider" | "channel" | "tool" | "hook">Широкі підказки щодо можливостей, які використовуються плануванням активації площини керування. За можливості надавайте перевагу вужчим полям.
Поточні live-споживачі:
  • планування старту Gateway використовує activation.onStartup для явного імпорту під час старту
  • планування CLI, запущене командою, повертається до застарілих commandAliases[].cliCommand або commandAliases[].name
  • планування старту agent-runtime використовує activation.onAgentHarnesses для вбудованих harness і верхньорівневий cliBackends[] для runtime-псевдонімів CLI
  • планування setup/каналу, запущене каналом, повертається до застарілого володіння channels[], коли явні метадані активації каналу відсутні
  • планування Plugin під час старту використовує activation.onConfigPaths для неканальних кореневих поверхонь конфігурації, таких як блок browser вбудованого browser Plugin
  • планування setup/runtime, запущене provider, повертається до застарілого володіння providers[] і верхньорівневого cliBackends[], коли явні метадані активації provider відсутні
Діагностика планувальника може відрізняти явні підказки активації від fallback володіння з маніфесту. Наприклад, activation-command-hint означає, що збігся activation.onCommands, тоді як manifest-command-alias означає, що планувальник використав володіння commandAliases натомість. Ці reason-мітки призначені для діагностики хоста й тестів; автори Plugin мають і надалі оголошувати метадані, які найкраще описують володіння.

довідник qaRunners

Використовуйте qaRunners, коли Plugin додає один або кілька transport runner під спільний корінь 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НіstringFallback-текст довідки, який використовується, коли спільному хосту потрібна команда-заглушка.

довідник setup

Використовуйте setup, коли поверхням setup і onboarding потрібні дешеві метадані, якими володіє Plugin, до завантаження runtime.
{
  "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 залишається чинним і надалі описує backend-и CLI inference. setup.cliBackends є специфічною для setup поверхнею дескрипторів для потоків площини керування/setup, які мають залишатися лише метаданими. Коли setup.providers і setup.cliBackends присутні, вони є пріоритетною поверхнею lookup за принципом descriptor-first для виявлення setup. Якщо дескриптор лише звужує кандидатний Plugin, а setup все ще потребує багатших runtime-хуків під час setup, установіть requiresRuntime: true і залиште setup-api як fallback-шлях виконання. OpenClaw також включає setup.providers[].envVars до загальних lookup для auth provider і env-var. providerAuthEnvVars лишається підтримуваним через адаптер сумісності під час періоду вилучення, але невбудовані Plugin, які все ще його використовують, отримують діагностику маніфесту. Нові Plugin мають розміщувати env-метадані setup/status у setup.providers[].envVars. OpenClaw також може виводити прості варіанти setup з setup.providers[].authMethods, коли немає доступного setup entry або коли setup.requiresRuntime: false оголошує, що runtime setup не потрібен. Явні записи providerAuthChoices залишаються пріоритетними для користувацьких міток, CLI-прапорів, області onboarding і метаданих assistant. Установлюйте requiresRuntime: false лише тоді, коли цих дескрипторів достатньо для поверхні setup. OpenClaw розглядає явне false як descriptor-only контракт і не виконуватиме setup-api або openclaw.setupEntry для lookup setup. Якщо descriptor-only Plugin усе ще постачає один із цих runtime entry для setup, OpenClaw повідомляє additive-діагностику й продовжує ігнорувати його. Пропущений requiresRuntime зберігає застарілу fallback-поведінку, щоб наявні Plugin, які додали дескриптори без прапора, не ламалися. Оскільки lookup setup може виконувати код setup-api, яким володіє Plugin, нормалізовані значення setup.providers[].id і setup.cliBackends[] мають залишатися унікальними серед виявлених Plugin. Неоднозначне володіння завершується закрито замість вибору переможця за порядком виявлення. Коли runtime setup виконується, діагностика registry setup повідомляє про drift дескрипторів, якщо setup-api реєструє provider або CLI backend, які дескриптори маніфесту не оголошують, або якщо дескриптор не має відповідної runtime-реєстрації. Ці діагностики additive й не відхиляють застарілі Plugin.

довідник setup.providers

ПолеОбов’язковеТипЩо це означає
idТакstringІдентифікатор provider, доступний під час setup або onboarding. Тримайте нормалізовані ідентифікатори глобально унікальними.
authMethodsНіstring[]Ідентифікатори методів setup/auth, які цей provider підтримує без завантаження повного runtime.
envVarsНіstring[]Env vars, які загальні поверхні setup/status можуть перевіряти до завантаження runtime Plugin.
authEvidenceНіobject[]Дешеві локальні перевірки auth evidence для provider, які можуть автентифікуватися через несекретні маркери.
authEvidence призначено для локальних маркерів облікових даних, що належать провайдеру й можуть бути перевірені без завантаження коду середовища виконання. Ці перевірки мають залишатися дешевими та локальними: без мережевих викликів, без читання 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
    }
  }
}
Кожна підказка поля може містити:
ПолеТипЩо це означає
labelstringВидима користувачу мітка поля.
helpstringКороткий допоміжний текст.
tagsstring[]Необов’язкові UI-теги.
advancedbooleanПозначає поле як розширене.
sensitivebooleanПозначає поле як секретне або чутливе.
placeholderstringТекст-заповнювач для полів форми.

довідник contracts

Використовуйте contracts лише для статичних метаданих володіння можливостями, які OpenClaw може прочитати без імпортування середовища виконання Plugin.
{
  "contracts": {
    "agentToolResultMiddleware": ["pi", "codex"],
    "externalAuthProviders": ["acme-ai"],
    "speechProviders": ["openai"],
    "realtimeTranscriptionProviders": ["openai"],
    "realtimeVoiceProviders": ["openai"],
    "memoryEmbeddingProviders": ["local"],
    "mediaUnderstandingProviders": ["openai", "openai-codex"],
    "imageGenerationProviders": ["openai"],
    "videoGenerationProviders": ["qwen"],
    "webFetchProviders": ["firecrawl"],
    "webSearchProviders": ["gemini"],
    "migrationProviders": ["hermes"],
    "tools": ["firecrawl_search", "firecrawl_scrape"]
  }
}
Кожен список необов’язковий:
ПолеТипЩо це означає
embeddedExtensionFactoriesstring[]Ідентифікатори фабрик розширень сервера застосунку Codex, наразі codex-app-server.
agentToolResultMiddlewarestring[]Ідентифікатори середовища виконання, для яких вбудований Plugin може реєструвати проміжне ПЗ результатів інструментів.
externalAuthProvidersstring[]Ідентифікатори провайдерів, чий hook зовнішнього профілю автентифікації належить цьому Plugin.
speechProvidersstring[]Ідентифікатори провайдерів мовлення, що належать цьому Plugin.
realtimeTranscriptionProvidersstring[]Ідентифікатори провайдерів транскрипції в реальному часі, що належать цьому Plugin.
realtimeVoiceProvidersstring[]Ідентифікатори голосових провайдерів реального часу, що належать цьому Plugin.
memoryEmbeddingProvidersstring[]Ідентифікатори провайдерів embedding пам’яті, що належать цьому Plugin.
mediaUnderstandingProvidersstring[]Ідентифікатори провайдерів розуміння медіа, що належать цьому Plugin.
imageGenerationProvidersstring[]Ідентифікатори провайдерів генерації зображень, що належать цьому Plugin.
videoGenerationProvidersstring[]Ідентифікатори провайдерів генерації відео, що належать цьому Plugin.
webFetchProvidersstring[]Ідентифікатори провайдерів web-fetch, що належать цьому Plugin.
webSearchProvidersstring[]Ідентифікатори провайдерів web-search, що належать цьому Plugin.
migrationProvidersstring[]Ідентифікатори провайдерів імпорту, що належать цьому Plugin для openclaw migrate.
toolsstring[]Назви інструментів агента, що належать цьому Plugin.
contracts.embeddedExtensionFactories збережено для вбудованих фабрик розширень Codex, призначених лише для сервера застосунку. Вбудовані перетворення результатів інструментів мають оголошувати contracts.agentToolResultMiddleware і реєструватися через api.registerAgentToolResultMiddleware(...) натомість. Зовнішні plugins не можуть реєструвати проміжне ПЗ результатів інструментів, оскільки ця точка інтеграції може переписувати високодовірений вивід інструмента до того, як модель його побачить. Реєстрації середовища виконання api.registerTool(...) мають відповідати contracts.tools. Виявлення інструментів використовує цей список, щоб завантажувати лише ті середовища виконання Plugin, які можуть володіти запитаними інструментами. Plugins провайдерів, які реалізують resolveExternalAuthProfiles, мають оголошувати contracts.externalAuthProviders. Plugins без цього оголошення все ще проходять через застарілий резервний шлях сумісності, але цей шлях повільніший і буде видалений після вікна міграції. Вбудовані провайдери embedding пам’яті мають оголошувати contracts.memoryEmbeddingProviders для кожного ідентифікатора адаптера, який вони надають, включно з вбудованими адаптерами, такими як local. Автономні шляхи CLI використовують цей контракт маніфесту, щоб завантажити лише Plugin-власник до того, як повне середовище виконання Gateway зареєструє провайдерів.

довідник mediaUnderstandingProviderMetadata

Використовуйте mediaUnderstandingProviderMetadata, коли провайдер розуміння медіа має моделі за замовчуванням, пріоритет резервного auto-auth або нативну підтримку документів, які загальним допоміжним засобам ядра потрібні до завантаження середовища виконання. Ключі також мають бути оголошені в 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")[]Можливості медіа, які надає цей провайдер.
defaultModelsRecord<string, string>Типові значення відповідності можливості до моделі, що використовуються, коли конфігурація не задає модель.
autoPriorityRecord<string, number>Менші числа сортуються раніше для автоматичного резервного вибору провайдера на основі облікових даних.
nativeDocumentInputs"pdf"[]Нативні вхідні документи, які підтримує провайдер.

довідник channelConfigs

Використовуйте channelConfigs, коли Plugin каналу потребує дешевих метаданих конфігурації до завантаження середовища виконання. Виявлення налаштування/статусу каналу лише для читання може використовувати ці метадані напряму для налаштованих зовнішніх каналів, коли запис налаштування недоступний, або коли setup.requiresRuntime: false оголошує, що середовище виконання налаштування не потрібне. channelConfigs — це метадані маніфесту Plugin, а не новий розділ користувацької конфігурації верхнього рівня. Користувачі все ще налаштовують екземпляри каналів у channels.<channel-id>. OpenClaw читає метадані маніфесту, щоб визначити, який Plugin володіє цим налаштованим каналом до виконання коду середовища виконання Plugin. Для Plugin каналу configSchema і channelConfigs описують різні шляхи:
  • configSchema перевіряє plugins.entries.<plugin-id>.config
  • channelConfigs.<channel-id>.schema перевіряє channels.<channel-id>
Невбудовані plugins, які оголошують 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": "Homeserver URL",
          "placeholder": "https://matrix.example.com"
        }
      },
      "label": "Matrix",
      "description": "Matrix homeserver connection",
      "commands": {
        "nativeCommandsAutoEnabled": true,
        "nativeSkillsAutoEnabled": true
      },
      "preferOver": ["matrix-legacy"]
    }
  }
}
Кожен запис каналу може містити:
ПолеТипЩо це означає
schemaobjectJSON Schema для channels.<id>. Обов’язкова для кожного оголошеного запису конфігурації каналу.
uiHintsRecord<string, object>Необов’язкові UI-мітки/заповнювачі/підказки про чутливі дані для цього розділу конфігурації каналу.
labelstringМітка каналу, що додається до поверхонь вибору та перегляду, коли runtime-метадані ще не готові.
descriptionstringКороткий опис каналу для поверхонь перегляду та каталогу.
commandsobjectСтатична нативна команда та автоматичні стандартні значення нативної навички для перевірок до runtime.
preferOverstring[]Ідентифікатори застарілих або нижчопріоритетних plugin, які цей канал має випереджати в поверхнях вибору.

Заміна іншого plugin каналу

Використовуйте 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 вимикає його в ефективній runtime-конфігурації, щоб один plugin володів каналом і його інструментами. Явний вибір користувача все одно має перевагу: якщо користувач явно вмикає обидва plugin, OpenClaw зберігає цей вибір і повідомляє діагностику дублікатів каналу/інструмента замість тихої зміни запитаного набору plugin. Обмежуйте preferOver ідентифікаторами plugin, які справді можуть надавати той самий канал. Це не загальне поле пріоритету й воно не перейменовує ключі конфігурації користувача.

Довідник modelSupport

Використовуйте modelSupport, коли OpenClaw має виводити ваш provider plugin із скорочених ідентифікаторів моделей, як-от gpt-5.5 або claude-sonnet-4.6, до завантаження plugin runtime.
{
  "modelSupport": {
    "modelPrefixes": ["gpt-", "o1", "o3", "o4"],
    "modelPatterns": ["^computer-use-preview"]
  }
}
OpenClaw застосовує такий пріоритет:
  • явні посилання provider/model використовують метадані маніфесту providers, що належить власнику
  • modelPatterns мають перевагу над modelPrefixes
  • якщо збігаються один невбудований plugin і один вбудований plugin, перемагає невбудований plugin
  • решта неоднозначностей ігнорується, доки користувач або конфігурація не вкаже provider
Поля:
ПолеТипЩо це означає
modelPrefixesstring[]Префікси, що зіставляються через startsWith зі скороченими ідентифікаторами моделей.
modelPatternsstring[]Джерела regex, що зіставляються зі скороченими ідентифікаторами моделей після вилучення суфікса профілю.

Довідник modelCatalog

Використовуйте modelCatalog, коли OpenClaw має знати метадані моделей provider до завантаження plugin runtime. Це джерело, що належить маніфесту, для фіксованих рядків каталогу, псевдонімів provider, правил придушення та режиму виявлення. Runtime-оновлення все ще належить коду runtime provider, але маніфест повідомляє core, коли потрібен runtime.
{
  "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"
    }
  }
}
Поля верхнього рівня:
ПолеТипЩо це означає
providersRecord<string, object>Рядки каталогу для ідентифікаторів provider, що належать цьому plugin. Ключі також мають бути в providers верхнього рівня.
aliasesRecord<string, object>Псевдоніми provider, які мають розв’язуватися в належний provider для планування каталогу або придушення.
suppressionsobject[]Рядки моделей з іншого джерела, які цей plugin придушує з причини, специфічної для provider.
discoveryRecord<string, "static" | "refreshable" | "runtime">Чи можна прочитати каталог provider з метаданих маніфесту, оновити в кеш або чи він потребує runtime.
aliases бере участь у пошуку власника provider для планування каталогу моделей. Цілі псевдонімів мають бути provider верхнього рівня, що належать тому самому plugin. Коли список, відфільтрований за provider, використовує псевдонім, OpenClaw може прочитати маніфест власника та застосувати перевизначення API/base URL псевдоніма без завантаження runtime provider. Псевдоніми не розгортають нефільтровані списки каталогу; широкі списки виводять лише рядки канонічного provider-власника. suppressions замінює старий runtime-хук provider suppressBuiltInModel. Записи придушення враховуються лише тоді, коли provider належить plugin або оголошений як ключ modelCatalog.aliases, що вказує на належний provider. Runtime-хуки придушення більше не викликаються під час розв’язання моделі. Поля provider:
ПолеТипЩо це означає
baseUrlstringНеобов’язковий базовий URL за замовчуванням для моделей у цьому каталозі provider.
apiModelApiНеобов’язковий API-адаптер за замовчуванням для моделей у цьому каталозі provider.
headersRecord<string, string>Необов’язкові статичні заголовки, що застосовуються до цього каталогу provider.
modelsobject[]Обов’язкові рядки моделей. Рядки без id ігноруються.
Поля моделі:
ПолеТипЩо це означає
idstringЛокальний для provider ідентифікатор моделі, без префікса provider/.
namestringНеобов’язкова відображувана назва.
apiModelApiНеобов’язкове перевизначення API для окремої моделі.
baseUrlstringНеобов’язкове перевизначення базового URL для окремої моделі.
headersRecord<string, string>Необов’язкові статичні заголовки для окремої моделі.
inputArray<"text" | "image" | "document" | "audio" | "video">Модальності, які приймає модель.
reasoningbooleanЧи надає модель поведінку reasoning.
contextWindownumberНативне контекстне вікно provider.
contextTokensnumberНеобов’язкова ефективна runtime-межа контексту, коли вона відрізняється від contextWindow.
maxTokensnumberМаксимальна кількість вихідних токенів, якщо відома.
costobjectНеобов’язкова ціна в USD за мільйон токенів, включно з необов’язковим tieredPricing.
compatobjectНеобов’язкові прапорці сумісності, що відповідають сумісності конфігурації моделі OpenClaw.
status"available" | "preview" | "deprecated" | "disabled"Статус у списку. Придушуйте лише тоді, коли рядок узагалі не має з’являтися.
statusReasonstringНеобов’язкова причина, що показується зі статусом, відмінним від available.
replacesstring[]Старіші локальні для provider ідентифікатори моделей, які ця модель замінює.
replacedBystringЛокальний для provider ідентифікатор моделі-заміни для застарілих рядків.
tagsstring[]Стабільні теги, що використовуються засобами вибору та фільтрами.
Поля придушення:
ПолеТипЩо це означає
providerstringІдентифікатор provider для upstream-рядка, який потрібно придушити. Має належати цьому plugin або бути оголошеним як належний псевдонім.
modelstringЛокальний для provider ідентифікатор моделі, який потрібно придушити.
reasonstringНеобов’язкове повідомлення, що показується, коли придушений рядок запитується напряму.
when.baseUrlHostsstring[]Необов’язковий список ефективних хостів базового URL provider, потрібних перед застосуванням придушення.
when.providerConfigApiInstring[]Необов’язковий список точних значень api у конфігурації provider, потрібних перед застосуванням придушення.
Не розміщуйте дані лише для runtime у modelCatalog. Використовуйте static лише тоді, коли рядки маніфесту достатньо повні, щоб поверхні списку та вибору з фільтрацією за провайдером могли пропускати виявлення через registry/runtime. Використовуйте refreshable, коли рядки маніфесту корисні як придатні до списку початкові дані або доповнення, але refresh/cache може додати більше рядків пізніше; рядки refreshable самі по собі не є авторитетними. Використовуйте runtime, коли OpenClaw має завантажити provider runtime, щоб дізнатися список.

Довідник modelIdNormalization

Використовуйте modelIdNormalization для дешевого очищення model-id, яке належить провайдеру й має відбутися до завантаження provider runtime. Це тримає aliases, як-от короткі назви моделей, локальні legacy ids провайдера та правила proxy prefix, у маніфесті власного plugin, а не в основних таблицях вибору моделей.
{
  "providers": ["anthropic", "openrouter"],
  "modelIdNormalization": {
    "providers": {
      "anthropic": {
        "aliases": {
          "sonnet-4.6": "claude-sonnet-4-6"
        }
      },
      "openrouter": {
        "prefixWhenBare": "openrouter"
      }
    }
  }
}
Поля провайдера:
ПолеТипЩо це означає
aliasesRecord<string,string>Точні aliases model-id без урахування регістру. Значення повертаються як записано.
stripPrefixesstring[]Prefixes, які потрібно видалити перед пошуком alias; корисно для legacy дублювання provider/model.
prefixWhenBarestringPrefix, який додається, коли нормалізований model id ще не містить /.
prefixWhenBareAfterAliasStartsWithobject[]Умовні правила bare-id prefix після пошуку alias, keyed by modelPrefix and prefix.

Довідник providerEndpoints

Використовуйте providerEndpoints для класифікації endpoint, яку generic request policy має знати до завантаження provider runtime. Core усе ще володіє значенням кожного endpointClass; маніфести plugin володіють metadata host і base URL. Поля endpoint:
ПолеТипЩо це означає
endpointClassstringВідомий core endpoint class, як-от openrouter, moonshot-native або google-vertex.
hostsstring[]Точні hostnames, які відповідають endpoint class.
hostSuffixesstring[]Host suffixes, які відповідають endpoint class. Додавайте . на початку для збігу лише за domain suffix.
baseUrlsstring[]Точні нормалізовані HTTP(S) base URLs, які відповідають endpoint class.
googleVertexRegionstringСтатичний регіон Google Vertex для точних global hosts.
googleVertexRegionHostSuffixstringSuffix, який потрібно відкинути з matching hosts, щоб показати prefix регіону Google Vertex.

Довідник providerRequest

Використовуйте providerRequest для дешевої metadata сумісності запитів, потрібної generic request policy без завантаження provider runtime. Тримайте переписування payload, специфічне для поведінки, у runtime hooks провайдера або спільних provider-family helpers.
{
  "providers": ["vllm"],
  "providerRequest": {
    "providers": {
      "vllm": {
        "family": "vllm",
        "openAICompletions": {
          "supportsStreamingUsage": true
        }
      }
    }
  }
}
Поля провайдера:
ПолеТипЩо це означає
familystringМітка provider family, яку використовують generic request compatibility decisions і diagnostics.
compatibilityFamily"moonshot"Необов’язковий provider-family compatibility bucket для спільних request helpers.
openAICompletionsobjectOpenAI-compatible completions request flags, наразі supportsStreamingUsage.

Довідник modelPricing

Використовуйте modelPricing, коли провайдеру потрібна поведінка ціноутворення control-plane до завантаження runtime. Pricing cache Gateway читає цю metadata без імпорту коду provider runtime.
{
  "providers": ["ollama", "openrouter"],
  "modelPricing": {
    "providers": {
      "ollama": {
        "external": false
      },
      "openrouter": {
        "openRouter": {
          "passthroughProviderModel": true
        },
        "liteLLM": false
      }
    }
  }
}
Поля провайдера:
ПолеТипЩо це означає
externalbooleanУстановіть false для локальних/self-hosted провайдерів, які ніколи не мають отримувати pricing OpenRouter або LiteLLM.
openRouterfalse | objectMapping для пошуку pricing OpenRouter. false вимикає пошук OpenRouter для цього провайдера.
liteLLMfalse | objectMapping для пошуку pricing LiteLLM. false вимикає пошук LiteLLM для цього провайдера.
Поля джерела:
ПолеТипЩо це означає
providerstringExternal catalog provider id, коли він відрізняється від provider id OpenClaw, наприклад z-ai для провайдера zai.
passthroughProviderModelbooleanОбробляйте model ids зі slash як вкладені refs provider/model; корисно для proxy providers, таких як OpenRouter.
modelIdTransforms"version-dots"[]Додаткові external catalog model-id variants. version-dots пробує dotted version ids, як-от claude-opus-4.6.

OpenClaw Provider Index

OpenClaw Provider Index — це preview metadata, що належить OpenClaw, для провайдерів, plugins яких можуть ще не бути встановлені. Він не є частиною маніфесту plugin. Маніфести plugin залишаються авторитетним джерелом для встановлених plugins. Provider Index — це внутрішній fallback contract, який майбутні поверхні installable-provider і pre-install model picker використовуватимуть, коли provider plugin не встановлено. Порядок авторитетності каталогу:
  1. Конфігурація користувача.
  2. modelCatalog маніфесту встановленого plugin.
  3. Model catalog cache з explicit refresh.
  4. Preview rows OpenClaw Provider Index.
Provider Index не має містити secrets, enabled state, runtime hooks або live account-specific model data. Його preview catalogs використовують таку саму форму provider row modelCatalog, що й маніфести plugin, але мають залишатися обмеженими stable display metadata, якщо runtime adapter fields, як-от api, baseUrl, pricing або compatibility flags, не підтримуються навмисно узгодженими з маніфестом встановленого plugin. Провайдери з live /models discovery мають записувати refreshed rows через explicit model catalog cache path замість того, щоб нормальний listing або onboarding викликав provider APIs. Записи Provider Index також можуть містити metadata installable-plugin для провайдерів, plugin яких переміщено з core або ще не встановлено з іншої причини. Ця metadata віддзеркалює channel catalog pattern: package name, npm install spec, expected integrity і дешеві auth-choice labels достатні, щоб показати installable setup option. Після встановлення plugin його маніфест має пріоритет, а запис Provider Index для цього провайдера ігнорується. Legacy top-level capability keys застаріли. Використовуйте openclaw doctor --fix, щоб перемістити speechProviders, realtimeTranscriptionProviders, realtimeVoiceProviders, mediaUnderstandingProviders, imageGenerationProviders, videoGenerationProviders, webFetchProviders і webSearchProviders під contracts; normal manifest loading більше не розглядає ці top-level fields як capability ownership.

Маніфест проти package.json

Ці два файли виконують різні завдання:
ФайлДля чого використовувати
openclaw.plugin.jsonDiscovery, config validation, auth-choice metadata та UI hints, які мають існувати до запуску коду plugin
package.jsonnpm metadata, dependency installation і блок openclaw, який використовується для entrypoints, install gating, setup або catalog metadata
Якщо ви не впевнені, де має бути metadata, користуйтеся цим правилом:
  • якщо OpenClaw має знати це до завантаження коду plugin, розмістіть це в openclaw.plugin.json
  • якщо це стосується packaging, entry files або поведінки npm install, розмістіть це в package.json

Поля package.json, які впливають на discovery

Частина pre-runtime plugin metadata навмисно живе в package.json у блоці openclaw, а не в openclaw.plugin.json. openclaw.bundle і openclaw.bundle.json не є plugin contracts OpenClaw; native plugins мають використовувати openclaw.plugin.json плюс підтримувані поля package.json#openclaw нижче. Важливі приклади:
ПолеЩо це означає
openclaw.extensionsОголошує нативні точки входу Plugin. Має залишатися всередині каталогу пакета Plugin.
openclaw.runtimeExtensionsОголошує зібрані точки входу JavaScript runtime для встановлених пакетів. Має залишатися всередині каталогу пакета Plugin.
openclaw.setupEntryЛегка точка входу лише для налаштування, що використовується під час onboarding, відкладеного запуску каналу та виявлення статусу каналу/SecretRef у режимі лише для читання. Має залишатися всередині каталогу пакета Plugin.
openclaw.runtimeSetupEntryОголошує зібрану точку входу налаштування JavaScript для встановлених пакетів. Потребує setupEntry, має існувати та має залишатися всередині каталогу пакета Plugin.
openclaw.channelНедорогі метадані каталогу каналів, як-от мітки, шляхи документації, псевдоніми та текст вибору.
openclaw.channel.commandsСтатичні метадані нативних команд і автоматичних типових значень нативних Skills, що використовуються config, audit і поверхнями списку команд до завантаження runtime каналу.
openclaw.channel.configuredStateЛегкі метадані перевірки налаштованого стану, які можуть відповісти на запитання “чи вже існує налаштування лише через env?” без завантаження повного runtime каналу.
openclaw.channel.persistedAuthStateЛегкі метадані перевірки збереженого стану автентифікації, які можуть відповісти на запитання “чи вже хтось увійшов?” без завантаження повного runtime каналу.
openclaw.install.clawhubSpec / openclaw.install.npmSpec / openclaw.install.localPathПідказки встановлення/оновлення для вбудованих і зовнішньо опублікованих plugins.
openclaw.install.defaultChoiceБажаний шлях встановлення, коли доступно кілька джерел встановлення.
openclaw.install.minHostVersionМінімальна підтримувана версія хоста OpenClaw з використанням нижньої межі semver на кшталт >=2026.3.22 або >=2026.5.1-beta.1.
openclaw.install.expectedIntegrityОчікуваний рядок цілісності npm dist, наприклад sha512-...; потоки встановлення й оновлення перевіряють отриманий артефакт за ним.
openclaw.install.allowInvalidConfigRecoveryДозволяє вузький шлях відновлення перевстановлення вбудованого Plugin, коли config є недійсною.
openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListenДозволяє поверхням каналу лише для налаштування завантажуватися перед повним Plugin каналу під час запуску.
Метадані manifest визначають, які варіанти provider/channel/setup з’являються в onboarding до завантаження runtime. package.json#openclaw.install повідомляє onboarding, як отримати або ввімкнути цей Plugin, коли користувач вибирає один із цих варіантів. Не переносіть підказки встановлення в openclaw.plugin.json. openclaw.install.minHostVersion застосовується під час встановлення та завантаження реєстру manifest для невбудованих джерел Plugin. Недійсні значення відхиляються; новіші, але дійсні значення пропускають зовнішні plugins на старіших хостах. Вбудовані вихідні plugins вважаються співверсійними з checkout хоста. Офіційні метадані встановлення на вимогу мають використовувати clawhubSpec, коли Plugin опубліковано на ClawHub; onboarding трактує це як бажане віддалене джерело та записує факти артефакта ClawHub після встановлення. npmSpec залишається сумісним fallback для пакетів, які ще не перейшли на ClawHub. Точне закріплення версії npm уже міститься в npmSpec, наприклад "npmSpec": "@wecom/wecom-openclaw-plugin@1.2.3". Офіційні зовнішні записи каталогу мають поєднувати точні specs з expectedIntegrity, щоб потоки оновлення завершувалися закрито, якщо отриманий артефакт npm більше не відповідає закріпленому релізу. Інтерактивний onboarding і далі пропонує довірені specs npm registry, включно з голими назвами пакетів і dist-tags, для сумісності. Діагностика каталогу може розрізняти точні, плаваючі, integrity-pinned, missing-integrity, package-name mismatch і недійсні джерела default-choice. Вона також попереджає, коли expectedIntegrity наявний, але немає дійсного джерела npm, яке він може закріпити. Коли expectedIntegrity наявний, потоки встановлення/оновлення застосовують його; коли його опущено, розв’язання registry записується без закріплення цілісності. Plugins каналів мають надавати openclaw.setupEntry, коли status, список каналів або сканування SecretRef мають визначати налаштовані облікові записи без завантаження повного runtime. Точка входу налаштування має відкривати метадані каналу плюс setup-safe config, status і secrets adapters; тримайте мережеві clients, gateway listeners і transport runtimes в основній точці входу extension. Поля точки входу runtime не перевизначають перевірки меж пакета для полів вихідної точки входу. Наприклад, openclaw.runtimeExtensions не може зробити шлях openclaw.extensions, що виходить за межі, придатним до завантаження. openclaw.install.allowInvalidConfigRecovery навмисно вузький. Він не робить довільні зламані configs придатними для встановлення. Сьогодні він лише дозволяє потокам встановлення відновлюватися після конкретних застарілих збоїв оновлення вбудованого Plugin, як-от відсутній шлях вбудованого Plugin або застарілий запис channels.<id> для того самого вбудованого Plugin. Непов’язані помилки config усе ще блокують встановлення та спрямовують операторів до openclaw doctor --fix. openclaw.channel.persistedAuthState — це метадані пакета для крихітного модуля перевірки:
{
  "openclaw": {
    "channel": {
      "id": "whatsapp",
      "persistedAuthState": {
        "specifier": "./auth-presence",
        "exportName": "hasAnyWhatsAppAuth"
      }
    }
  }
}
Використовуйте його, коли setup, doctor, status або потоки read-only presence потребують дешевої перевірки автентифікації yes/no до завантаження повного Plugin каналу. Збережений стан автентифікації не є налаштованим станом каналу: не використовуйте ці метадані для автоматичного ввімкнення plugins, відновлення runtime dependencies або вирішення, чи має завантажуватися runtime каналу. Цільовий export має бути маленькою функцією, яка читає лише збережений стан; не спрямовуйте його через повний barrel runtime каналу. openclaw.channel.configuredState має таку саму форму для дешевих перевірок налаштованого стану лише через env:
{
  "openclaw": {
    "channel": {
      "id": "telegram",
      "configuredState": {
        "specifier": "./configured-state",
        "exportName": "hasTelegramConfiguredState"
      }
    }
  }
}
Використовуйте його, коли канал може відповісти про налаштований стан з env або інших крихітних не-runtime входів. Якщо перевірці потрібне повне розв’язання config або справжній runtime каналу, залиште цю логіку в hook Plugin config.hasConfiguredState.

Пріоритет виявлення (дублікати id Plugin)

OpenClaw виявляє plugins з кількох коренів (вбудований, глобальне встановлення, workspace, явні шляхи, вибрані config). Якщо два виявлення мають однаковий id, зберігається лише manifest із найвищим пріоритетом; дублікати з нижчим пріоритетом відкидаються замість завантаження поруч із ним. Пріоритет, від найвищого до найнижчого:
  1. Вибраний config — шлях, явно закріплений у plugins.entries.<id>
  2. Вбудований — plugins, що постачаються з OpenClaw
  3. Глобальне встановлення — plugins, встановлені в глобальний корінь plugins OpenClaw
  4. Workspace — plugins, виявлені відносно поточного workspace
Наслідки:
  • Fork або застаріла копія вбудованого Plugin у workspace не затінятиме вбудовану збірку.
  • Щоб фактично перевизначити вбудований Plugin локальним, закріпіть його через plugins.entries.<id>, щоб він переміг за пріоритетом, а не покладайтеся на виявлення workspace.
  • Відкидання дублікатів логуються, щоб Doctor і діагностика запуску могли вказати на відкинуту копію.
  • Перевизначення дублікатів, вибрані config, формулюються в діагностиці як явні перевизначення, але все одно попереджають, щоб застарілі forks і випадкові shadow залишалися видимими.

Вимоги JSON Schema

  • Кожен Plugin має постачати JSON Schema, навіть якщо він не приймає config.
  • Порожня schema допустима (наприклад, { "type": "object", "additionalProperties": false }).
  • Schemas перевіряються під час читання/запису config, а не під час runtime.
  • Розширюючи або форкаючи вбудований Plugin з новими config keys, одночасно оновіть configSchema цього Plugin у openclaw.plugin.json. Schemas вбудованих plugins строгі, тому додавання plugins.entries.<id>.config.myNewKey до user config без додавання myNewKey до configSchema.properties буде відхилено до завантаження runtime Plugin.
Приклад розширення schema:
{
  "configSchema": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
      "myNewKey": {
        "type": "string"
      }
    }
  }
}

Поведінка валідації

  • Невідомі ключі channels.* є помилками, якщо id каналу не оголошено manifest Plugin.
  • plugins.entries.<id>, plugins.allow, plugins.deny і plugins.slots.* мають посилатися на виявлювані id Plugin. Невідомі ids є помилками.
  • Якщо Plugin встановлено, але він має зламаний або відсутній manifest чи schema, валідація завершується невдачею, а Doctor повідомляє про помилку Plugin.
  • Якщо config Plugin існує, але Plugin вимкнено, config зберігається, а попередження показується в Doctor і logs.
Див. Довідник конфігурації для повної schema plugins.*.

Примітки

  • Маніфест обов’язковий для нативних plugins OpenClaw, зокрема для завантажень із локальної файлової системи. Runtime усе ще завантажує модуль plugin окремо; маніфест потрібен лише для виявлення + перевірки.
  • Нативні маніфести обробляються за допомогою JSON5, тому коментарі, кінцеві коми та ключі без лапок приймаються, якщо підсумкове значення все одно є об’єктом.
  • Завантажувач маніфестів читає лише задокументовані поля маніфесту. Уникайте власних ключів верхнього рівня.
  • channels, providers, cliBackends і skills можна не вказувати, якщо plugin їх не потребує.
  • providerCatalogEntry має залишатися легким і не повинен імпортувати широкий runtime-код; використовуйте його для статичних метаданих каталогу provider або вузьких дескрипторів виявлення, а не для виконання під час запиту. providerDiscoveryEntry — це застаріле написання, яке все ще працює для наявних plugins.
  • Ексклюзивні типи plugin вибираються через plugins.slots.*: kind: "memory" через plugins.slots.memory, kind: "context-engine" через plugins.slots.contextEngine (типово legacy).
  • Оголошуйте ексклюзивний тип plugin у цьому маніфесті. OpenClawPluginDefinition.kind у runtime-точці входу застарів і зберігається лише як резерв сумісності для старіших plugins.
  • Метадані змінних середовища (setup.providers[].envVars, застаріле providerAuthEnvVars і channelEnvVars) є лише декларативними. Статус, аудит, перевірка доставки Cron та інші поверхні лише для читання все одно застосовують довіру до plugin і політику ефективної активації, перш ніж вважати змінну середовища налаштованою.
  • Для runtime-метаданих майстра, які потребують коду provider, див. runtime-хуки provider.
  • Якщо ваш plugin залежить від нативних модулів, задокументуйте кроки збирання та всі вимоги до allowlist менеджера пакетів (наприклад, pnpm allow-build-scripts + pnpm rebuild <package>).

Пов’язане

Створення plugins

Початок роботи з plugins.

Архітектура plugin

Внутрішня архітектура та модель capability.

Огляд SDK

Довідник SDK для plugin та імпорти subpath.