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

Маніфест плагіна (openclaw.plugin.json)

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

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

openclaw.plugin.json — це метадані, які OpenClaw зчитує до того, як завантажить код вашого плагіна. Використовуйте його для:
  • ідентичності плагіна
  • валідації конфігурації
  • метаданих автентифікації та онбордингу, які мають бути доступні без запуску середовища виконання плагіна
  • метаданих псевдонімів і автоувімкнення, які мають визначатися до завантаження середовища виконання плагіна
  • скорочених метаданих про належність до сімейства моделей, які мають автоматично активувати плагін до завантаження середовища виконання
  • статичних знімків належності можливостей, що використовуються для вбудованої compat-wiring і покриття контрактів
  • метаданих конфігурації каналу, які мають об’єднуватися в поверхні каталогу та валідації без завантаження середовища виконання
  • підказок UI для конфігурації
Не використовуйте його для:
  • реєстрації поведінки середовища виконання
  • оголошення entrypoint коду
  • метаданих встановлення npm
Це має бути у коді вашого плагіна та package.json.

Мінімальний приклад

{
  "id": "voice-call",
  "configSchema": {
    "type": "object",
    "additionalProperties": false,
    "properties": {}
  }
}

Розширений приклад

{
  "id": "openrouter",
  "name": "OpenRouter",
  "description": "OpenRouter provider plugin",
  "version": "1.0.0",
  "providers": ["openrouter"],
  "modelSupport": {
    "modelPrefixes": ["router-"]
  },
  "providerAuthEnvVars": {
    "openrouter": ["OPENROUTER_API_KEY"]
  },
  "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"
      }
    }
  }
}

Довідник полів верхнього рівня

FieldRequiredTypeWhat it means
idТакstringКанонічний id плагіна. Це id, який використовується в plugins.entries.<id>.
configSchemaТакobjectВбудована JSON Schema для конфігурації цього плагіна.
enabledByDefaultНіtrueПозначає вбудований плагін як увімкнений типово. Опустіть це поле або встановіть будь-яке значення, відмінне від true, щоб плагін залишався вимкненим типово.
legacyPluginIdsНіstring[]Застарілі id, які нормалізуються до цього канонічного id плагіна.
autoEnableWhenConfiguredProvidersНіstring[]Id провайдерів, які мають автоматично вмикати цей плагін, коли в автентифікації, конфігурації чи посиланнях на моделі згадано їх.
kindНі"memory" | "context-engine"Оголошує ексклюзивний тип плагіна, що використовується plugins.slots.*.
channelsНіstring[]Id каналів, якими володіє цей плагін. Використовуються для виявлення та валідації конфігурації.
providersНіstring[]Id провайдерів, якими володіє цей плагін.
modelSupportНіobjectСкорочені метадані про сімейство моделей, якими володіє маніфест і які використовуються для автоматичного завантаження плагіна до завантаження середовища виконання.
providerAuthEnvVarsНіRecord<string, string[]>Недорогі метадані env для автентифікації провайдера, які OpenClaw може перевіряти без завантаження коду плагіна.
providerAuthChoicesНіobject[]Недорогі метадані варіантів автентифікації для онбординг-піків, визначення бажаного провайдера і простого зв’язування CLI-прапорців.
contractsНіobjectСтатичний знімок можливостей вбудованих плагінів для speech, realtime transcription, realtime voice, media-understanding, image-generation, video-generation, web-fetch, web search і належності інструментів.
channelConfigsНіRecord<string, object>Метадані конфігурації каналу, що належать маніфесту та об’єднуються з поверхнями виявлення й валідації до завантаження середовища виконання.
skillsНіstring[]Каталоги Skills для завантаження, відносно кореня плагіна.
nameНіstringЛюдинозрозуміла назва плагіна.
descriptionНіstringКороткий опис, що показується на поверхнях плагіна.
versionНіstringІнформаційна версія плагіна.
uiHintsНіRecord<string, object>Мітки UI, плейсхолдери та підказки щодо чутливості для полів конфігурації.

Довідник providerAuthChoices

Кожен запис providerAuthChoices описує один варіант онбордингу або автентифікації. OpenClaw зчитує це до завантаження середовища виконання провайдера.
FieldRequiredTypeWhat it means
providerТакstringId провайдера, до якого належить цей варіант.
methodТакstringId методу автентифікації, до якого слід диспетчеризувати.
choiceIdТакstringСтабільний id варіанта автентифікації, який використовується в онбордингу та CLI-потоках.
choiceLabelНіstringМітка для користувача. Якщо опущено, OpenClaw використовує choiceId.
choiceHintНіstringКороткий допоміжний текст для пікера.
assistantPriorityНіnumberМенші значення сортуються раніше в інтерактивних пікерах, керованих асистентом.
assistantVisibilityНі"visible" | "manual-only"Приховує варіант з пікерів асистента, але все одно дозволяє ручний вибір через CLI.
deprecatedChoiceIdsНіstring[]Застарілі id варіантів, які мають перенаправляти користувачів на цей варіант-заміну.
groupIdНіstringНеобов’язковий id групи для групування пов’язаних варіантів.
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"].

Довідник uiHints

uiHints — це мапа від назв полів конфігурації до невеликих підказок рендерингу.
{
  "uiHints": {
    "apiKey": {
      "label": "API key",
      "help": "Used for OpenRouter requests",
      "placeholder": "sk-or-v1-...",
      "sensitive": true
    }
  }
}
Кожна підказка поля може містити:
FieldTypeWhat it means
labelstringМітка поля для користувача.
helpstringКороткий допоміжний текст.
tagsstring[]Необов’язкові теги UI.
advancedbooleanПозначає поле як розширене.
sensitivebooleanПозначає поле як секретне або чутливе.
placeholderstringТекст плейсхолдера для полів форми.

Довідник contracts

Використовуйте contracts лише для статичних метаданих про належність можливостей, які OpenClaw може зчитати без імпорту середовища виконання плагіна.
{
  "contracts": {
    "speechProviders": ["openai"],
    "realtimeTranscriptionProviders": ["openai"],
    "realtimeVoiceProviders": ["openai"],
    "mediaUnderstandingProviders": ["openai", "openai-codex"],
    "imageGenerationProviders": ["openai"],
    "videoGenerationProviders": ["qwen"],
    "webFetchProviders": ["firecrawl"],
    "webSearchProviders": ["gemini"],
    "tools": ["firecrawl_search", "firecrawl_scrape"]
  }
}
Кожен список необов’язковий:
FieldTypeWhat it means
speechProvidersstring[]Id провайдерів speech, якими володіє цей плагін.
realtimeTranscriptionProvidersstring[]Id провайдерів realtime transcription, якими володіє цей плагін.
realtimeVoiceProvidersstring[]Id провайдерів realtime voice, якими володіє цей плагін.
mediaUnderstandingProvidersstring[]Id провайдерів media-understanding, якими володіє цей плагін.
imageGenerationProvidersstring[]Id провайдерів image-generation, якими володіє цей плагін.
videoGenerationProvidersstring[]Id провайдерів video-generation, якими володіє цей плагін.
webFetchProvidersstring[]Id провайдерів web-fetch, якими володіє цей плагін.
webSearchProvidersstring[]Id провайдерів web search, якими володіє цей плагін.
toolsstring[]Назви інструментів агента, якими володіє цей плагін для перевірок контрактів вбудованих плагінів.

Довідник channelConfigs

Використовуйте channelConfigs, коли плагіну каналу потрібні недорогі метадані конфігурації до завантаження середовища виконання.
{
  "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",
      "preferOver": ["matrix-legacy"]
    }
  }
}
Кожен запис каналу може містити:
FieldTypeWhat it means
schemaobjectJSON Schema для channels.<id>. Обов’язкова для кожного оголошеного запису конфігурації каналу.
uiHintsRecord<string, object>Необов’язкові мітки UI/плейсхолдери/підказки щодо чутливості для цього розділу конфігурації каналу.
labelstringМітка каналу, що об’єднується з поверхнями пікера та inspect, коли метадані середовища виконання ще не готові.
descriptionstringКороткий опис каналу для inspect і поверхонь каталогу.
preferOverstring[]Застарілі або менш пріоритетні id плагінів, які цей канал має перевершувати на поверхнях вибору.

Довідник modelSupport

Використовуйте modelSupport, коли OpenClaw має виводити ваш плагін провайдера з скорочених id моделей, як-от gpt-5.4 або claude-sonnet-4.6, до завантаження середовища виконання плагіна.
{
  "modelSupport": {
    "modelPrefixes": ["gpt-", "o1", "o3", "o4"],
    "modelPatterns": ["^computer-use-preview"]
  }
}
OpenClaw застосовує такий пріоритет:
  • явні посилання provider/model використовують метадані маніфесту providers, що визначають власника
  • modelPatterns мають пріоритет над modelPrefixes
  • якщо збігаються один невбудований і один вбудований плагін, перемагає невбудований плагін
  • решта неоднозначностей ігнорується, доки користувач або конфігурація не вкаже провайдера
Поля:
FieldTypeWhat it means
modelPrefixesstring[]Префікси, що зіставляються через startsWith зі скороченими id моделей.
modelPatternsstring[]Джерела regex, що зіставляються зі скороченими id моделей після видалення суфікса профілю.
Застарілі ключі можливостей верхнього рівня не рекомендуються до використання. Використовуйте openclaw doctor --fix, щоб перемістити speechProviders, realtimeTranscriptionProviders, realtimeVoiceProviders, mediaUnderstandingProviders, imageGenerationProviders, videoGenerationProviders, webFetchProviders і webSearchProviders до contracts; звичайне завантаження маніфесту більше не розглядає ці поля верхнього рівня як належність можливостей.

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

Ці два файли виконують різні завдання:
FileUse it for
openclaw.plugin.jsonВиявлення, валідація конфігурації, метадані варіантів автентифікації та підказки UI, які мають існувати до запуску коду плагіна
package.jsonМетадані npm, встановлення залежностей і блок openclaw, який використовується для entrypoint, керування встановленням, налаштування або метаданих каталогу
Якщо ви не впевнені, де має бути певний фрагмент метаданих, користуйтеся таким правилом:
  • якщо OpenClaw має знати це до завантаження коду плагіна, помістіть це в openclaw.plugin.json
  • якщо це стосується пакування, entry-файлів або поведінки npm install, помістіть це в package.json

Поля package.json, що впливають на виявлення

Деякі метадані плагіна до запуску середовища виконання навмисно зберігаються в package.json у блоці openclaw, а не в openclaw.plugin.json. Важливі приклади:
FieldWhat it means
openclaw.extensionsОголошує власні entrypoint плагіна.
openclaw.setupEntryПолегшений entrypoint лише для налаштування, що використовується під час онбордингу й відкладеного запуску каналу.
openclaw.channelНедорогі метадані каталогу каналу, такі як мітки, шляхи до документації, псевдоніми та текст вибору.
openclaw.install.npmSpec / openclaw.install.localPathПідказки встановлення/оновлення для вбудованих і зовнішньо опублікованих плагінів.
openclaw.install.defaultChoiceБажаний шлях встановлення, коли доступно кілька джерел встановлення.
openclaw.install.minHostVersionМінімальна підтримувана версія хоста OpenClaw із semver-нижньою межею на кшталт >=2026.3.22.
openclaw.install.allowInvalidConfigRecoveryДозволяє вузький шлях відновлення перевстановлення вбудованого плагіна, коли конфігурація невалідна.
openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListenДозволяє поверхням каналу лише для налаштування завантажуватися до повного плагіна каналу під час запуску.
openclaw.install.minHostVersion перевіряється під час встановлення та завантаження реєстру маніфестів. Некоректні значення відхиляються; новіші, але коректні значення пропускають плагін на старіших хостах. openclaw.install.allowInvalidConfigRecovery навмисно вузький. Він не робить довільно зламані конфігурації придатними до встановлення. Наразі він лише дозволяє потокам встановлення відновлюватися після певних застарілих збоїв оновлення вбудованих плагінів, таких як відсутній шлях до вбудованого плагіна або застарілий запис channels.<id> для цього ж вбудованого плагіна. Непов’язані помилки конфігурації й надалі блокують встановлення і спрямовують операторів до openclaw doctor --fix.

Вимоги до JSON Schema

  • Кожен плагін має постачатися з JSON Schema, навіть якщо він не приймає конфігурацію.
  • Порожня schema допустима (наприклад, { "type": "object", "additionalProperties": false }).
  • Schema проходять валідацію під час читання/запису конфігурації, а не під час виконання.

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

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

Примітки

  • Маніфест обов’язковий для власних плагінів OpenClaw, зокрема при локальному завантаженні з файлової системи.
  • Середовище виконання й надалі завантажує модуль плагіна окремо; маніфест використовується лише для виявлення + валідації.
  • Власні маніфести розбираються за допомогою JSON5, тож коментарі, кінцеві коми й ключі без лапок допускаються, якщо кінцеве значення все ще є об’єктом.
  • Завантажувач маніфесту зчитує лише документовані поля маніфесту. Не додавайте сюди власні ключі верхнього рівня.
  • providerAuthEnvVars — це недорогий шлях метаданих для перевірок автентифікації, валідації env-маркерів та подібних поверхонь автентифікації провайдера, які не повинні запускати середовище виконання плагіна лише для перевірки назв env.
  • providerAuthChoices — це недорогий шлях метаданих для пікерів варіантів автентифікації, визначення --auth-choice, мапінгу бажаного провайдера та простої реєстрації CLI-прапорців онбордингу до завантаження середовища виконання провайдера. Для метаданих майстра середовища виконання, які потребують коду провайдера, див. Хуки середовища виконання провайдера.
  • Ексклюзивні типи плагінів вибираються через plugins.slots.*.
    • kind: "memory" вибирається через plugins.slots.memory.
    • kind: "context-engine" вибирається через plugins.slots.contextEngine (типово: вбудований legacy).
  • channels, providers і skills можна опускати, якщо плагіну вони не потрібні.
  • Якщо ваш плагін залежить від native modules, задокументуйте кроки збирання та всі вимоги до allowlist менеджера пакетів (наприклад, pnpm allow-build-scripts
    • pnpm rebuild <package>).

Пов’язане