Маніфест плагіна (openclaw.plugin.json)
Ця сторінка стосується лише власного маніфесту плагіна OpenClaw.
Сумісні макети пакетів описано в Пакети плагінів.
Сумісні формати пакетів використовують інші файли маніфесту:
- Пакет Codex:
.codex-plugin/plugin.json - Пакет Claude:
.claude-plugin/plugin.jsonабо стандартний макет компонента Claude без маніфесту - Пакет Cursor:
.cursor-plugin/plugin.json
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 | Так | 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 | Так | string | Id провайдера, до якого належить цей варіант. |
method | Так | string | Id методу автентифікації, до якого слід спрямувати запит. |
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
використовує ці метадані для діагностики без імпорту коду середовища виконання плагіна.
| Поле | Обов’язкове | Тип | Що це означає |
|---|---|---|---|
name | Так | string | Назва команди, яка належить цьому плагіну. |
kind | Ні | "runtime-slash" | Позначає псевдонім як slash-команду чату, а не як кореневу команду CLI. |
cliCommand | Ні | string | Пов’язана коренева команда CLI, яку слід запропонувати для операцій CLI, якщо вона існує. |
Довідка щодо activation
Використовуйте activation, коли плагін може дешево оголосити, які події control-plane
мають активувати його пізніше.
Цей блок містить лише метадані. Він не реєструє поведінку під час виконання і
не замінює register(...), setupEntry чи інші entrypoint runtime/плагіна.
| Поле | Обов’язкове | Тип | Що це означає |
|---|---|---|---|
onProviders | Ні | string[] | Id провайдерів, які мають активувати цей плагін за запитом. |
onCommands | Ні | string[] | Id команд, які мають активувати цей плагін. |
onChannels | Ні | string[] | Id каналів, які мають активувати цей плагін. |
onRoutes | Ні | string[] | Види маршрутів, які мають активувати цей плагін. |
onCapabilities | Ні | Array<"provider" | "channel" | "tool" | "hook"> | Загальні підказки щодо можливостей, які використовуються в плануванні активації control-plane. |
Довідка щодо setup
Використовуйте setup, коли поверхням налаштування та онбордингу потрібні дешеві метадані, якими володіє плагін,
до завантаження середовища виконання.
cliBackends залишається валідним і надалі описує backend інференсу CLI.
setup.cliBackends — це поверхня дескриптора, специфічна для налаштування,
для потоків control-plane/налаштування, яка має залишатися лише метаданими.
Довідка щодо setup.providers
| Поле | Обов’язкове | Тип | Що це означає |
|---|---|---|---|
id | Так | string | Id провайдера, який показується під час налаштування або онбордингу. |
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 — це мапа від назв полів конфігурації до невеликих підказок рендерингу.
| Поле | Тип | Що це означає |
|---|---|---|
label | string | Мітка поля для користувача. |
help | string | Короткий допоміжний текст. |
tags | string[] | Необов’язкові теги UI. |
advanced | boolean | Позначає поле як розширене. |
sensitive | boolean | Позначає поле як секретне або чутливе. |
placeholder | string | Текст placeholder для полів форми. |
Довідка щодо contracts
Використовуйте contracts лише для статичних метаданих належності можливостей, які OpenClaw може
читати без імпорту runtime плагіна.
| Поле | Тип | Що це означає |
|---|---|---|
speechProviders | string[] | Id speech-провайдерів, якими володіє цей плагін. |
realtimeTranscriptionProviders | string[] | Id провайдерів realtime transcription, якими володіє цей плагін. |
realtimeVoiceProviders | string[] | Id провайдерів realtime voice, якими володіє цей плагін. |
mediaUnderstandingProviders | string[] | Id провайдерів media-understanding, якими володіє цей плагін. |
imageGenerationProviders | string[] | Id провайдерів image-generation, якими володіє цей плагін. |
videoGenerationProviders | string[] | Id провайдерів video-generation, якими володіє цей плагін. |
webFetchProviders | string[] | Id провайдерів web-fetch, якими володіє цей плагін. |
webSearchProviders | string[] | Id провайдерів web search, якими володіє цей плагін. |
tools | string[] | Назви інструментів агента, якими володіє цей плагін, для bundled-перевірок контрактів. |
Довідка щодо channelConfigs
Використовуйте channelConfigs, коли плагіну каналу потрібні дешеві метадані конфігурації
до завантаження runtime.
| Поле | Тип | Що це означає |
|---|---|---|
schema | object | JSON Schema для channels.<id>. Обов’язкова для кожного оголошеного запису конфігурації каналу. |
uiHints | Record<string, object> | Необов’язкові мітки UI/placeholders/підказки чутливості для цього розділу конфігурації каналу. |
label | string | Мітка каналу, що зливається в поверхні picker та inspect, коли метадані runtime ще не готові. |
description | string | Короткий опис каналу для поверхонь inspect і каталогу. |
preferOver | string[] | Id застарілих або нижчопріоритетних плагінів, які цей канал має випереджати в поверхнях вибору. |
Довідка щодо modelSupport
Використовуйте modelSupport, коли OpenClaw має визначати ваш плагін провайдера з
коротких id моделей, таких як gpt-5.4 або claude-sonnet-4.6, до завантаження runtime плагіна.
- явні посилання
provider/modelвикористовують метадані маніфесту власникаproviders modelPatternsмають пріоритет надmodelPrefixes- якщо збігаються один не-bundled плагін і один bundled-плагін, перемагає не-bundled плагін
- решта неоднозначностей ігнорується, доки користувач або конфігурація не вкажуть провайдера
| Поле | Тип | Що це означає |
|---|---|---|
modelPrefixes | string[] | Префікси, які зіставляються через startsWith із короткими id моделей. |
modelPatterns | string[] | Джерела 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.configuredState має таку саму форму для дешевих перевірок
налаштованого стану лише через env:
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-scriptspnpm rebuild <package>).
Пов’язане
- Створення плагінів — початок роботи з плагінами
- Архітектура плагінів — внутрішня архітектура
- Огляд SDK — довідник Plugin SDK