defineToolPlugin створює плагін, який лише додає інструменти, доступні для виклику агентом: без
каналу, постачальника моделей, перехоплювача, служби чи серверної частини налаштування. Він генерує
метадані маніфесту, потрібні OpenClaw для виявлення інструментів без завантаження
коду середовища виконання плагіна.
Для плагінів постачальників, каналів, перехоплювачів, служб або плагінів зі змішаними можливостями натомість почніть із
Створення плагінів, Плагіни каналів
або Плагіни постачальників.
Вимоги
- Node 22.22.3+, Node 24.15+ або Node 25.9+.
- Вивід пакета TypeScript ESM.
typeboxуdependencies(не лише вdevDependencies— згенерований плагін імпортує його під час виконання).openclaw >=2026.5.17, перша версія, що експортуєopenclaw/plugin-sdk/tool-plugin.- Корінь пакета, що постачається з
dist/,openclaw.plugin.jsonіpackage.json.
Швидкий початок
plugins init створює каркас:
npm run plugin:build запускає npm run build (tsc), а потім
openclaw plugins build --entry ./dist/index.js. npm run plugin:validate
повторно збирає та запускає openclaw plugins validate --entry ./dist/index.js.
Успішна перевірка виводить:
openclaw plugins init <id>:
Написання інструмента
defineToolPlugin приймає ідентифікаційні дані плагіна, необов’язкову схему конфігурації та
статичний список інструментів. Типи параметрів і конфігурації виводяться зі
схем TypeBox.
Необов’язкові інструменти та фабрики інструментів
Установітьoptional: true, якщо користувачі мають явно додати інструмент до списку дозволених, перш ніж його
буде надіслано моделі. openclaw plugins build записує відповідний
запис маніфесту toolMetadata.<tool>.optional, щоб OpenClaw міг визначити, що
інструмент є необов’язковим, без завантаження коду середовища виконання плагіна.
factory, коли інструменту потрібен контекст інструмента середовища виконання до його
створення — щоб відмовитися від участі в конкретному запуску, перевірити стан пісочниці або прив’язати
допоміжні засоби середовища виконання. Метадані залишаються статичними, хоча конкретний інструмент створюється
під час виконання.
definePluginEntry
безпосередньо, коли плагін динамічно обчислює назви інструментів або поєднує інструменти
з перехоплювачами, службами, постачальниками чи командами.
Повернені значення
defineToolPlugin обгортає звичайні повернені значення у формат результату інструмента
OpenClaw:
- Поверніть рядок, якщо модель має побачити саме цей текст.
- Поверніть JSON-сумісне значення, якщо потрібно, щоб модель побачила форматований JSON,
а OpenClaw зберіг початкове значення в
details.
AgentToolResult або коли потрібно повторно використати
наявну реалізацію api.registerTool.
Конфігурація
configSchema є необов’язковим. Якщо його пропустити, OpenClaw застосовує сувору схему порожнього об’єкта;
згенерований маніфест усе одно містить configSchema.
configSchema тип другого аргументу execute виводиться з нього:
Згенеровані метадані
OpenClaw має прочитати маніфест плагіна до імпорту коду його середовища виконання.defineToolPlugin надає для цього статичні метадані, а
openclaw plugins build записує їх у пакет. Повторно запускайте генератор після
зміни ідентифікатора, назви, опису, схеми конфігурації, активації або назв
інструментів плагіна:
contracts.tools є важливим контрактом виявлення: він повідомляє OpenClaw, якому
плагіну належить кожен інструмент, без завантаження середовища виконання кожного встановленого плагіна.
Застарілий маніфест може призвести до відсутності інструмента у виявленні або до того, що помилку
реєстрації буде помилково приписано іншому плагіну.
Метадані пакета
openclaw plugins build також узгоджує package.json з вибраною точкою входу
середовища виконання:
./dist/index.js), а не точку входу вихідного коду TypeScript.
Точки входу вихідного коду працюють лише для локальної розробки в робочому просторі.
Перевірка в CI
plugins build --check завершується помилкою без перезаписування файлів, якщо згенеровані метадані
застаріли:
plugins validate перевіряє, що:
openclaw.plugin.jsonіснує та успішно проходить звичайний завантажувач маніфесту.- Поточна точка входу експортує метадані
defineToolPlugin. - Поля згенерованого маніфесту відповідають метаданим точки входу.
contracts.toolsвідповідає оголошеним назвам інструментів.package.jsonспрямовуєopenclaw.extensionsна вибрану точку входу середовища виконання.
Локальне встановлення та перевірка
З окремого репозиторію OpenClaw або встановленого CLI установіть пакет за шляхом:Публікація
Коли пакет буде готовий, опублікуйте його через ClawHub.clawhub package publish
приймає джерело: локальну папку, репозиторій GitHub (owner/repo[@ref]) або
URL-адресу tar-архіву.
Усунення несправностей
plugin entry not found: ./dist/index.js
Вибраного файла точки входу не існує. Запустіть npm run build, а потім повторно запустіть
openclaw plugins build --entry ./dist/index.js або
openclaw plugins validate --entry ./dist/index.js.
plugin entry does not expose defineToolPlugin metadata
Точка входу не експортувала значення, створене за допомогою defineToolPlugin. Переконайтеся, що
експорт модуля за замовчуванням є результатом defineToolPlugin(...), або передайте
правильну точку входу за допомогою --entry.
openclaw.plugin.json generated metadata is stale
Маніфест більше не відповідає метаданим точки входу. Запустіть:
openclaw.plugin.json, так і в package.json.
package.json openclaw.extensions must include ./dist/index.js
Метадані пакета вказують на іншу точку входу середовища виконання. Запустіть
openclaw plugins build --entry ./dist/index.js, щоб генератор узгодив
метадані пакета з точкою входу, яку потрібно постачати.
Cannot find package 'typebox'
Зібраний плагін імпортує typebox під час виконання. Залиште його в dependencies,
повторно встановіть залежності, перебудуйте та повторно запустіть перевірку.
Інструмент не відображається після встановлення
Перевірте наведене нижче в такому порядку:openclaw plugins inspect <plugin-id> --runtimeopenclaw plugins validate --root <plugin-root> --entry ./dist/index.jsopenclaw.plugin.jsonмаєcontracts.toolsз очікуваними назвами інструментів.package.jsonмаєopenclaw.extensions: ["./dist/index.js"].- Gateway було перезапущено або перезавантажено після встановлення плагіна.