Plugins розширюють OpenClaw новими можливостями: каналами, провайдерами моделей, мовленням, транскрипцією в реальному часі, голосом у реальному часі, розумінням медіа, генерацією зображень, генерацією відео, web fetch, web search, інструментами агентів або будь-якою комбінацією. Вам не потрібно додавати свій plugin до репозиторію OpenClaw. Опублікуйте його в ClawHub, і користувачі встановлять його за допомогою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.
openclaw plugins install clawhub:<package-name>. Прості специфікації пакетів усе ще
встановлюються з npm під час перехідного запуску.
Передумови
- Node >= 22 і менеджер пакетів (npm або pnpm)
- Знайомство з TypeScript (ESM)
- Для plugins у репозиторії: репозиторій клоновано, а
pnpm installвиконано. Розробка plugin з checkout вихідного коду підтримується лише через pnpm, оскільки OpenClaw завантажує bundled plugins з пакетів workspaceextensions/*.
Який тип plugin?
Channel plugin
Під’єднайте OpenClaw до платформи обміну повідомленнями (Discord, IRC тощо)
Provider plugin
Додайте провайдера моделей (LLM, proxy або користувацький endpoint)
CLI backend plugin
Зіставте локальний AI CLI з текстовим fallback runner OpenClaw
Tool / hook plugin
Зареєструйте інструменти агентів, event hooks або сервіси - продовжуйте нижче
createOptionalChannelSetupSurface(...) з
openclaw/plugin-sdk/channel-setup. Він створює пару setup adapter + wizard,
яка повідомляє про вимогу встановлення і fail closed під час реальних записів конфігурації,
доки plugin не буде встановлено.
Швидкий старт: tool plugin
Цей покроковий посібник створює мінімальний plugin, який реєструє інструмент агента. Для channel і provider plugins є окремі посібники за посиланнями вище.Створіть пакет і manifest
contracts.tools, щоб OpenClaw міг виявити plugin-власник
без завантаження runtime кожного plugin. Plugins також мають свідомо оголошувати
activation.onStartup. У цьому прикладі для нього встановлено true. Повну схему див.
у Manifest. Канонічні фрагменти публікації ClawHub
розміщені в docs/snippets/plugin-publish/.Напишіть entry point
definePluginEntry призначений для plugins, які не є каналами. Для каналів використовуйте
defineChannelPluginEntry - див. Channel Plugins.
Повні параметри entry point див. у Entry Points.Перевірте й опублікуйте
Зовнішні plugins: перевірте й опублікуйте за допомогою ClawHub, потім установіть:Голі специфікації пакетів, як-от
@myorg/openclaw-my-plugin, установлюються з npm під час
переходу на запуск. Використовуйте clawhub:, коли потрібне розв’язання через ClawHub.Plugin у репозиторії: розмістіть під деревом робочого простору bundled plugin - виявляється автоматично.Можливості Plugin
Один plugin може зареєструвати будь-яку кількість можливостей через об’єктapi:
| Можливість | Метод реєстрації | Докладний посібник |
|---|---|---|
| Текстовий інференс (LLM) | api.registerProvider(...) | Provider Plugins |
| Бекенд інференсу CLI | api.registerCliBackend(...) | CLI Backend Plugins |
| Канал / обмін повідомленнями | api.registerChannel(...) | Channel Plugins |
| Мовлення (TTS/STT) | api.registerSpeechProvider(...) | Provider Plugins |
| Транскрипція в реальному часі | api.registerRealtimeTranscriptionProvider(...) | Provider Plugins |
| Голос у реальному часі | api.registerRealtimeVoiceProvider(...) | Provider Plugins |
| Розуміння медіа | api.registerMediaUnderstandingProvider(...) | Provider Plugins |
| Генерація зображень | api.registerImageGenerationProvider(...) | Provider Plugins |
| Генерація музики | api.registerMusicGenerationProvider(...) | Provider Plugins |
| Генерація відео | api.registerVideoGenerationProvider(...) | Provider Plugins |
| Отримання даних з вебу | api.registerWebFetchProvider(...) | Provider Plugins |
| Вебпошук | api.registerWebSearchProvider(...) | Provider Plugins |
| Middleware для результатів інструментів | api.registerAgentToolResultMiddleware(...) | Огляд SDK |
| Інструменти агента | api.registerTool(...) | Нижче |
| Користувацькі команди | api.registerCommand(...) | Точки входу |
| Хуки Plugin | api.on(...) | Хуки Plugin |
| Внутрішні хуки подій | api.registerHook(...) | Точки входу |
| HTTP-маршрути | api.registerHttpRoute(...) | Внутрішні механізми |
| Підкоманди CLI | api.registerCli(...) | Точки входу |
api.registerAgentToolResultMiddleware(...), коли їм
потрібне асинхронне переписування результату інструмента до того, як модель побачить вивід. Оголосіть
цільові середовища виконання в contracts.agentToolResultMiddleware, наприклад
["pi", "codex"]. Це довірений seam для bundled plugin; зовнішнім
plugins варто надавати перевагу звичайним хукам Plugin OpenClaw, якщо OpenClaw не додасть
явну політику довіри для цієї можливості.
Якщо ваш plugin реєструє користувацькі RPC-методи Gateway, тримайте їх під
префіксом, специфічним для plugin. Основні адміністративні простори імен (config.*,
exec.approvals.*, wizard.*, update.*) залишаються зарезервованими й завжди розв’язуються в
operator.admin, навіть якщо plugin просить вужчу область дії.
Семантика захисту хуків, яку слід мати на увазі:
before_tool_call:{ block: true }є термінальним і зупиняє обробники з нижчим пріоритетом.before_tool_call:{ block: false }трактується як відсутність рішення.before_tool_call:{ requireApproval: true }призупиняє виконання агента й запитує схвалення користувача через оверлей схвалення exec, кнопки Telegram, взаємодії Discord або команду/approveу будь-якому каналі.before_install:{ block: true }є термінальним і зупиняє обробники з нижчим пріоритетом.before_install:{ block: false }трактується як відсутність рішення.message_sending:{ cancel: true }є термінальним і зупиняє обробники з нижчим пріоритетом.message_sending:{ cancel: false }трактується як відсутність рішення.message_received: надавайте перевагу типізованому полюthreadId, коли потрібна маршрутизація вхідного ланцюжка/теми. Залишайтеmetadataдля специфічних для каналу додаткових даних.message_sending: надавайте перевагу типізованим полям маршрутизаціїreplyToId/threadIdзамість специфічних для каналу ключів metadata.
/approve обробляє як exec-схвалення, так і схвалення plugin з обмеженим резервним варіантом: коли id exec-схвалення не знайдено, OpenClaw повторює спробу з тим самим id через схвалення plugin. Пересилання схвалень plugin можна налаштувати незалежно через approvals.plugin у конфігурації.
Якщо користувацькі механізми схвалення мають виявляти той самий випадок обмеженого резервного варіанта,
надавайте перевагу isApprovalNotFoundError з openclaw/plugin-sdk/error-runtime
замість ручного зіставлення рядків про завершення строку дії схвалення.
Приклади та довідник хуків див. у хуках Plugin.
Реєстрація інструментів агента
Інструменти - це типізовані функції, які може викликати LLM. Вони можуть бути обов’язковими (завжди доступні) або необов’язковими (користувач увімкне самостійно):ctx.activeModel, коли інструменту потрібно журналювати, показувати або адаптуватися до активної
моделі для поточного ходу. Об’єкт може містити provider, modelId і
modelRef. Сприймайте його як інформаційні runtime-метадані, а не як межу безпеки
проти локального оператора, встановленого коду plugin або модифікованого
runtime OpenClaw. Для чутливих локальних інструментів зберігайте явне підтвердження від plugin або оператора
та відмовляйте за замовчуванням, коли метадані активної моделі відсутні або невідповідні.
Кожен інструмент, зареєстрований через api.registerTool(...), також має бути оголошений у
маніфесті plugin:
description або дані схеми в маніфесті. Контракт
маніфесту лише оголошує власність і виявлення; виконання все одно викликає
живу зареєстровану реалізацію інструмента.
Установіть toolMetadata.<tool>.optional: true для інструментів, зареєстрованих через
api.registerTool(..., { optional: true }), щоб OpenClaw міг не завантажувати
runtime цього plugin, доки інструмент явно не буде внесено до списку дозволених.
Користувачі вмикають необов’язкові інструменти в конфігурації:
- Назви інструментів не мають конфліктувати з інструментами ядра (конфлікти пропускаються)
- Інструменти з некоректно сформованими об’єктами реєстрації, зокрема без
parameters, пропускаються й повідомляються в діагностиці plugin замість того, щоб зривати запуски агентів - Використовуйте
optional: trueдля інструментів із побічними ефектами або додатковими вимогами до бінарних файлів - Користувачі можуть увімкнути всі інструменти з plugin, додавши id plugin до
tools.allow
Реєстрація команд CLI
Plugins можуть додавати кореневі групи командopenclaw за допомогою api.registerCli. Надайте
descriptors для кожного кореня команди верхнього рівня, щоб OpenClaw міг показувати й маршрутизувати
команду без завчасного завантаження runtime кожного plugin.
Угоди щодо імпортів
Завжди імпортуйте зі сфокусованих шляхівopenclaw/plugin-sdk/<subpath>:
api.ts, runtime-api.ts) для
внутрішніх імпортів - ніколи не імпортуйте власний plugin через його SDK-шлях.
Для provider plugins тримайте специфічні для провайдера helpers у цих barrel-файлах кореня пакета,
якщо seam не є справді універсальним. Поточні вбудовані приклади:
- Anthropic: обгортки Claude stream і helpers
service_tier/ beta - OpenAI: конструктори провайдера, helpers моделей за замовчуванням, realtime-провайдери
- OpenRouter: конструктор провайдера та helpers onboarding/конфігурації
openclaw/plugin-sdk/*.
Деякі згенеровані helper seams openclaw/plugin-sdk/<bundled-id> усе ще існують для
обслуговування вбудованих plugins, коли вони мають відстежене використання власником. Вважайте їх
зарезервованими поверхнями, а не типовим шаблоном для нових сторонніх plugins.
Контрольний список перед поданням
package.json має коректні метадані
openclawМаніфест openclaw.plugin.json присутній і валідний
Точка входу використовує
defineChannelPluginEntry або definePluginEntryУсі імпорти використовують сфокусовані шляхи
plugin-sdk/<subpath>Внутрішні імпорти використовують локальні модулі, а не самоімпорти SDK
Тести проходять (
pnpm test -- <bundled-plugin-root>/my-plugin/)pnpm check проходить (для plugins у репозиторії)Тестування beta-релізу
- Стежте за тегами релізів GitHub на openclaw/openclaw і підпишіться через
Watch>Releases. Beta-теги мають виглядv2026.3.N-beta.1. Також можна ввімкнути сповіщення для офіційного X-акаунта OpenClaw @openclaw, щоб отримувати оголошення про релізи. - Протестуйте свій plugin із beta-тегом одразу після його появи. Вікно перед stable зазвичай становить лише кілька годин.
- Напишіть у треді свого plugin у Discord-каналі
plugin-forumпісля тестування: абоall good, або що зламалося. Якщо у вас ще немає треду, створіть його. - Якщо щось ламається, відкрийте або оновіть issue з назвою
Beta blocker: <plugin-name> - <summary>і застосуйте міткуbeta-blocker. Додайте посилання на issue у свій тред. - Відкрийте PR до
mainіз назвоюfix(<plugin-id>): beta blocker - <summary>і додайте посилання на issue як у PR, так і у ваш Discord-тред. Contributors не можуть ставити мітки на PR, тому назва є сигналом на стороні PR для maintainers і автоматизації. Blockers із PR буде змерджено; blockers без PR можуть бути випущені попри це. Maintainers стежать за цими тредами під час beta-тестування. - Мовчання означає зелений статус. Якщо ви пропустите вікно, ваше виправлення, ймовірно, потрапить у наступний цикл.
Наступні кроки
Channel Plugins
Створіть plugin каналу повідомлень
Provider Plugins
Створіть plugin провайдера моделей
CLI Backend Plugins
Зареєструйте локальний бекенд AI CLI
Огляд SDK
Мапа імпортів і довідник API реєстрації
Runtime Helpers
TTS, пошук, subagent через api.runtime
Тестування
Утиліти й шаблони тестування
Маніфест Plugin
Повний довідник схеми маніфесту
Пов’язане
- Архітектура Plugin - глибокий огляд внутрішньої архітектури
- Огляд SDK - довідник Plugin SDK
- Маніфест - формат маніфесту plugin
- Channel Plugins - створення channel plugins
- Provider Plugins - створення provider plugins