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

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

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

Для чого потрібен цей файл

openclaw.plugin.json — це метадані, які OpenClaw читає до завантаження коду вашого плагіна. Використовуйте його для:
  • ідентичності плагіна
  • валідації конфігурації
  • метаданих автентифікації та онбордингу, які мають бути доступні без запуску середовища виконання плагіна
  • легких підказок активації, які поверхні control-plane можуть перевіряти до завантаження середовища виконання
  • легких дескрипторів налаштування, які поверхні налаштування/онбордингу можуть перевіряти до завантаження середовища виконання
  • метаданих псевдонімів і автоувімкнення, які мають визначатися до завантаження середовища виконання плагіна
  • скорочених метаданих належності до сімейства моделей, які мають автоматично активувати плагін до завантаження середовища виконання
  • статичних знімків належності можливостей, що використовуються для сумісної обв’язки bundled-плагінів і покриття контрактів
  • метаданих конфігурації каналу, специфічних для каналу, які мають зливатися в поверхні каталогу та валідації без завантаження середовища виконання
  • підказок 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-"]
  },
  "cliBackends": ["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Канонічний id плагіна. Це id, який використовується в plugins.entries.<id>.
configSchemaТакobjectВбудована JSON Schema для конфігурації цього плагіна.
enabledByDefaultНіtrueПозначає bundled-плагін як увімкнений типово. Пропустіть це поле або встановіть будь-яке значення, відмінне від true, щоб залишити плагін вимкненим типово.
legacyPluginIdsНіstring[]Застарілі id, які нормалізуються до цього канонічного id плагіна.
autoEnableWhenConfiguredProvidersНіstring[]Id провайдерів, які мають автоматично вмикати цей плагін, коли автентифікація, конфігурація або посилання на моделі згадують їх.
kindНі"memory" | "context-engine"Оголошує винятковий вид плагіна, який використовується plugins.slots.*.
channelsНіstring[]Id каналів, якими володіє цей плагін. Використовується для виявлення та валідації конфігурації.
providersНіstring[]Id провайдерів, якими володіє цей плагін.
modelSupportНіobjectСкорочені метадані сімейства моделей, якими володіє маніфест, що використовуються для автоматичного завантаження плагіна до середовища виконання.
cliBackendsНіstring[]Id backend у CLI, якими володіє цей плагін. Використовується для автоактивації під час запуску з явних посилань у конфігурації.
commandAliasesНіobject[]Назви команд, якими володіє цей плагін, що мають створювати діагностику конфігурації й CLI з урахуванням плагіна до завантаження середовища виконання.
providerAuthEnvVarsНіRecord<string, string[]>Легкі метадані env для автентифікації провайдера, які OpenClaw може перевіряти без завантаження коду плагіна.
providerAuthAliasesНіRecord<string, string>Id провайдерів, які мають повторно використовувати інший id провайдера для пошуку автентифікації, наприклад coding-провайдер, що ділить API key і профілі автентифікації з базовим провайдером.
channelEnvVarsНіRecord<string, string[]>Легкі метадані env каналу, які OpenClaw може перевіряти без завантаження коду плагіна. Використовуйте це для налаштування каналу через env або поверхонь автентифікації, які мають бачити типові помічники запуску/конфігурації.
providerAuthChoicesНіobject[]Легкі метадані варіантів автентифікації для picker онбордингу, визначення бажаного провайдера та простого зв’язування прапорців CLI.
activationНіobjectЛегкі підказки активації для завантаження, що запускається провайдером, командою, каналом, маршрутом і можливістю. Лише метадані; фактична поведінка як і раніше належить середовищу виконання плагіна.
setupНіobjectЛегкі дескриптори налаштування/онбордингу, які поверхні виявлення та налаштування можуть перевіряти без завантаження середовища виконання плагіна.
contractsНіobjectСтатичний bundled-знімок можливостей для speech, realtime transcription, realtime voice, media-understanding, image-generation, music-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, placeholders і підказки чутливості для полів конфігурації.

Довідка щодо providerAuthChoices

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

Довідка щодо commandAliases

Використовуйте commandAliases, коли плагін володіє назвою runtime-команди, яку користувачі можуть помилково помістити в plugins.allow або спробувати запустити як кореневу команду CLI. OpenClaw використовує ці метадані для діагностики без імпорту коду середовища виконання плагіна.
{
  "commandAliases": [
    {
      "name": "dreaming",
      "kind": "runtime-slash",
      "cliCommand": "memory"
    }
  ]
}
ПолеОбов’язковеТипЩо це означає
nameТакstringНазва команди, яка належить цьому плагіну.
kindНі"runtime-slash"Позначає псевдонім як slash-команду чату, а не як кореневу команду CLI.
cliCommandНіstringПов’язана коренева команда CLI, яку слід запропонувати для операцій CLI, якщо вона існує.

Довідка щодо activation

Використовуйте activation, коли плагін може дешево оголосити, які події control-plane мають активувати його пізніше. Цей блок містить лише метадані. Він не реєструє поведінку під час виконання і не замінює register(...), setupEntry чи інші entrypoint runtime/плагіна.
{
  "activation": {
    "onProviders": ["openai"],
    "onCommands": ["models"],
    "onChannels": ["web"],
    "onRoutes": ["gateway-webhook"],
    "onCapabilities": ["provider", "tool"]
  }
}
ПолеОбов’язковеТипЩо це означає
onProvidersНіstring[]Id провайдерів, які мають активувати цей плагін за запитом.
onCommandsНіstring[]Id команд, які мають активувати цей плагін.
onChannelsНіstring[]Id каналів, які мають активувати цей плагін.
onRoutesНіstring[]Види маршрутів, які мають активувати цей плагін.
onCapabilitiesНіArray<"provider" | "channel" | "tool" | "hook">Загальні підказки щодо можливостей, які використовуються в плануванні активації control-plane.

Довідка щодо setup

Використовуйте setup, коли поверхням налаштування та онбордингу потрібні дешеві метадані, якими володіє плагін, до завантаження середовища виконання.
{
  "setup": {
    "providers": [
      {
        "id": "openai",
        "authMethods": ["api-key"],
        "envVars": ["OPENAI_API_KEY"]
      }
    ],
    "cliBackends": ["openai-cli"],
    "configMigrations": ["legacy-openai-auth"],
    "requiresRuntime": false
  }
}
Поле верхнього рівня cliBackends залишається валідним і надалі описує backend інференсу CLI. setup.cliBackends — це поверхня дескриптора, специфічна для налаштування, для потоків control-plane/налаштування, яка має залишатися лише метаданими.

Довідка щодо setup.providers

ПолеОбов’язковеТипЩо це означає
idТакstringId провайдера, який показується під час налаштування або онбордингу.
authMethodsНіstring[]Id методів налаштування/автентифікації, які цей провайдер підтримує без завантаження повного runtime.
envVarsНіstring[]Env vars, які типові поверхні налаштування/статусу можуть перевіряти до завантаження runtime плагіна.

Поля setup

ПолеОбов’язковеТипЩо це означає
providersНіobject[]Дескриптори налаштування провайдерів, які показуються під час налаштування та онбордингу.
cliBackendsНіstring[]Id backend, доступних під час налаштування без повної активації runtime.
configMigrationsНіstring[]Id міграцій конфігурації, якими володіє поверхня налаштування цього плагіна.
requiresRuntimeНіbooleanЧи потребує налаштування виконання runtime плагіна після пошуку дескриптора.

Довідка щодо 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Текст placeholder для полів форми.

Довідка щодо contracts

Використовуйте contracts лише для статичних метаданих належності можливостей, які OpenClaw може читати без імпорту runtime плагіна.
{
  "contracts": {
    "speechProviders": ["openai"],
    "realtimeTranscriptionProviders": ["openai"],
    "realtimeVoiceProviders": ["openai"],
    "mediaUnderstandingProviders": ["openai", "openai-codex"],
    "imageGenerationProviders": ["openai"],
    "videoGenerationProviders": ["qwen"],
    "webFetchProviders": ["firecrawl"],
    "webSearchProviders": ["gemini"],
    "tools": ["firecrawl_search", "firecrawl_scrape"]
  }
}
Кожен список є необов’язковим:
ПолеТипЩо це означає
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[]Назви інструментів агента, якими володіє цей плагін, для bundled-перевірок контрактів.

Довідка щодо channelConfigs

Використовуйте channelConfigs, коли плагіну каналу потрібні дешеві метадані конфігурації до завантаження runtime.
{
  "channelConfigs": {
    "matrix": {
      "schema": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "homeserverUrl": { "type": "string" }
        }
      },
      "uiHints": {
        "homeserverUrl": {
          "label": "Homeserver URL",
          "placeholder": "https://matrix.example.com"
        }
      },
      "label": "Matrix",
      "description": "Підключення до homeserver Matrix",
      "preferOver": ["matrix-legacy"]
    }
  }
}
Кожен запис каналу може містити:
ПолеТипЩо це означає
schemaobjectJSON Schema для channels.<id>. Обов’язкова для кожного оголошеного запису конфігурації каналу.
uiHintsRecord<string, object>Необов’язкові мітки UI/placeholders/підказки чутливості для цього розділу конфігурації каналу.
labelstringМітка каналу, що зливається в поверхні picker та inspect, коли метадані runtime ще не готові.
descriptionstringКороткий опис каналу для поверхонь inspect і каталогу.
preferOverstring[]Id застарілих або нижчопріоритетних плагінів, які цей канал має випереджати в поверхнях вибору.

Довідка щодо modelSupport

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

Маніфест і package.json

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

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

Частина метаданих плагіна до runtime навмисно зберігається в package.json у блоці openclaw, а не в openclaw.plugin.json. Важливі приклади:
ПолеЩо це означає
openclaw.extensionsОголошує entrypoint власних плагінів.
openclaw.setupEntryЛегкий entrypoint лише для налаштування, який використовується під час онбордингу та відкладеного запуску каналу.
openclaw.channelЛегкі метадані каталогу каналів, такі як мітки, шляхи до документації, псевдоніми та текст для вибору.
openclaw.channel.configuredStateЛегкі метадані перевірки налаштованого стану, які можуть відповісти на запитання «чи вже існує налаштування лише через env?» без завантаження повного runtime каналу.
openclaw.channel.persistedAuthStateЛегкі метадані перевірки збереженого стану автентифікації, які можуть відповісти на запитання «чи вже щось увійшло в систему?» без завантаження повного runtime каналу.
openclaw.install.npmSpec / openclaw.install.localPathПідказки встановлення/оновлення для bundled-плагінів і зовнішньо опублікованих плагінів.
openclaw.install.defaultChoiceБажаний шлях встановлення, коли доступно кілька джерел встановлення.
openclaw.install.minHostVersionМінімальна підтримувана версія хоста OpenClaw із нижньою межею semver, наприклад >=2026.3.22.
openclaw.install.allowInvalidConfigRecoveryДозволяє вузький шлях відновлення перевстановлення bundled-плагіна, коли конфігурація невалідна.
openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListenДозволяє завантажувати поверхні каналу лише для налаштування до повного плагіна каналу під час запуску.
openclaw.install.minHostVersion перевіряється під час встановлення та завантаження реєстру маніфестів. Невалідні значення відхиляються; новіші, але валідні значення пропускають плагін на старіших хостах. openclaw.install.allowInvalidConfigRecovery навмисно має вузьке застосування. Воно не робить довільно зламані конфігурації придатними до встановлення. Наразі воно лише дозволяє потокам встановлення відновлюватися після певних застарілих збоїв оновлення bundled-плагінів, наприклад відсутнього шляху до bundled-плагіна або застарілого запису channels.<id> для того самого bundled-плагіна. Непов’язані помилки конфігурації все одно блокують встановлення та спрямовують операторів до openclaw doctor --fix. openclaw.channel.persistedAuthState — це метадані пакета для маленького модуля перевірки:
{
  "openclaw": {
    "channel": {
      "id": "whatsapp",
      "persistedAuthState": {
        "specifier": "./auth-presence",
        "exportName": "hasAnyWhatsAppAuth"
      }
    }
  }
}
Використовуйте це, коли потокам налаштування, doctor або configured-state потрібна дешева перевірка автентифікації так/ні до завантаження повного плагіна каналу. Цільовий експорт має бути невеликою функцією, що лише читає збережений стан; не спрямовуйте її через повний barrel runtime каналу. openclaw.channel.configuredState має таку саму форму для дешевих перевірок налаштованого стану лише через env:
{
  "openclaw": {
    "channel": {
      "id": "telegram",
      "configuredState": {
        "specifier": "./configured-state",
        "exportName": "hasTelegramConfiguredState"
      }
    }
  }
}
Використовуйте це, коли канал може визначити налаштований стан за env або іншими невеликими не-runtime входами. Якщо перевірка потребує повного визначення конфігурації або реального runtime каналу, залиште цю логіку в хуку плагіна config.hasConfiguredState.

Вимоги до JSON Schema

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

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

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

Примітки

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

Пов’язане