Plugins
Створення бекенд-Plugin для CLI
Плагіни бекенду CLI дають OpenClaw змогу викликати локальний AI CLI як бекенд текстового виведення. Бекенд відображається як префікс провайдера в посиланнях на моделі:
acme-cli/acme-large
Використовуйте бекенд CLI, коли upstream-інтеграція вже доступна як локальна команда, коли CLI володіє локальним станом входу, або коли CLI є корисним резервним варіантом, якщо API-провайдери недоступні.
За що відповідає плагін
Плагін бекенду CLI має три контракти:
| Контракт | Файл | Призначення |
|---|---|---|
| Точка входу пакета | package.json |
Вказує OpenClaw на модуль середовища виконання плагіна |
| Володіння маніфестом | openclaw.plugin.json |
Оголошує ідентифікатор бекенду до завантаження runtime |
| Реєстрація runtime | index.ts |
Викликає api.registerCliBackend(...) з типовими командами |
Маніфест — це метадані виявлення. Він не виконує CLI і не
реєструє поведінку runtime. Поведінка runtime починається, коли точка входу плагіна викликає
api.registerCliBackend(...).
Мінімальний плагін бекенду
Створіть метадані пакета
{
"name": "@acme/openclaw-acme-cli",
"version": "1.0.0",
"type": "module",
"openclaw": {
"extensions": ["./index.ts"],
"compat": {
"pluginApi": ">=2026.3.24-beta.2",
"minGatewayVersion": "2026.3.24-beta.2"
},
"build": {
"openclawVersion": "2026.3.24-beta.2",
"pluginSdkVersion": "2026.3.24-beta.2"
}
},
"dependencies": {
"openclaw": "^2026.3.24"
},
"devDependencies": {
"typescript": "^5.9.0"
}
}
Опубліковані пакети мають постачати зібрані файли JavaScript runtime. Якщо ваша вихідна
точка входу — ./src/index.ts, додайте openclaw.runtimeExtensions, що вказує на
відповідний зібраний JavaScript-файл. Див. Точки входу.
Оголосіть володіння бекендом
{
"id": "acme-cli",
"name": "Acme CLI",
"description": "Run Acme's local AI CLI through OpenClaw",
"cliBackends": ["acme-cli"],
"setup": {
"cliBackends": ["acme-cli"],
"requiresRuntime": false
},
"activation": {
"onStartup": false
},
"configSchema": {
"type": "object",
"additionalProperties": false
}
}
cliBackends — це список володіння runtime. Він дає OpenClaw змогу автоматично завантажувати
плагін, коли конфігурація або вибір моделі згадує acme-cli/....
setup.cliBackends — це поверхня налаштування за принципом descriptor-first. Додайте її, коли
виявлення моделей, onboarding або статус мають розпізнавати бекенд без
завантаження runtime плагіна. Використовуйте requiresRuntime: false лише тоді, коли цих статичних
дескрипторів достатньо для налаштування.
Зареєструйте бекенд
import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
import {
CLI_FRESH_WATCHDOG_DEFAULTS,
CLI_RESUME_WATCHDOG_DEFAULTS,
type CliBackendPlugin,
} from "openclaw/plugin-sdk/cli-backend";
function buildAcmeCliBackend(): CliBackendPlugin {
return {
id: "acme-cli",
liveTest: {
defaultModelRef: "acme-cli/acme-large",
defaultImageProbe: false,
defaultMcpProbe: false,
docker: {
npmPackage: "@acme/acme-cli",
binaryName: "acme",
},
},
config: {
command: "acme",
args: ["chat", "--json"],
output: "json",
input: "stdin",
modelArg: "--model",
sessionArg: "--session",
sessionMode: "existing",
sessionIdFields: ["session_id", "conversation_id"],
systemPromptFileArg: "--system-file",
systemPromptWhen: "first",
imageArg: "--image",
imageMode: "repeat",
reliability: {
watchdog: {
fresh: { ...CLI_FRESH_WATCHDOG_DEFAULTS },
resume: { ...CLI_RESUME_WATCHDOG_DEFAULTS },
},
},
serialize: true,
},
};
}
export default definePluginEntry({
id: "acme-cli",
name: "Acme CLI",
description: "Run Acme's local AI CLI through OpenClaw",
register(api) {
api.registerCliBackend(buildAcmeCliBackend());
},
});
Ідентифікатор бекенду має збігатися із записом cliBackends у маніфесті. Зареєстрована
config є лише типовою; користувацька конфігурація в
agents.defaults.cliBackends.acme-cli об’єднується з нею під час виконання.
Форма конфігурації
CliBackendConfig описує, як OpenClaw має запускати й розбирати CLI:
| Поле | Використання |
|---|---|
command |
Ім’я бінарного файла або абсолютний шлях до команди |
args |
Базовий argv для нових запусків |
resumeArgs |
Альтернативний argv для відновлених сесій; підтримує {sessionId} |
output / resumeOutput |
Парсер: json, jsonl або text |
input |
Транспорт підказки: arg або stdin |
modelArg |
Прапорець, що використовується перед ідентифікатором моделі |
modelAliases |
Зіставляє ідентифікатори моделей OpenClaw з нативними ідентифікаторами CLI |
sessionArg / sessionArgs |
Як передавати ідентифікатор сесії |
sessionMode |
always, existing або none |
sessionIdFields |
JSON-поля, які OpenClaw читає з виводу CLI |
systemPromptArg / systemPromptFileArg |
Транспорт системної підказки |
systemPromptWhen |
first, always або never |
imageArg / imageMode |
Підтримка шляхів до зображень |
serialize |
Зберігати порядок запусків того самого бекенду |
reliability.watchdog |
Налаштування тайм-ауту без виводу |
Надавайте перевагу найменшій статичній конфігурації, що відповідає CLI. Додавайте callback-и плагіна лише для поведінки, яка справді належить бекенду.
Розширені хуки бекенду
CliBackendPlugin також може визначати:
| Хук | Використання |
|---|---|
normalizeConfig(config, context) |
Переписати застарілу користувацьку конфігурацію після об’єднання |
resolveExecutionArgs(ctx) |
Додати прапорці в межах запиту, наприклад thinking effort |
prepareExecution(ctx) |
Створити тимчасові мости auth або конфігурації перед запуском |
transformSystemPrompt(ctx) |
Застосувати фінальне CLI-специфічне перетворення системної підказки |
textTransforms |
Двонапрямні заміни підказок/виводу |
defaultAuthProfileId |
Надавати перевагу конкретному профілю auth OpenClaw |
authEpochMode |
Вирішувати, як зміни auth інвалідовують збережені сесії CLI |
nativeToolMode |
Оголосити, чи CLI має завжди ввімкнені нативні інструменти |
bundleMcp / bundleMcpMode |
Увімкнути міст інструментів loopback MCP OpenClaw |
Зберігайте ці хуки у власності провайдера. Не додавайте CLI-специфічні гілки до core, коли хук бекенду може виразити поведінку.
Міст інструментів MCP
Бекенди CLI типово не отримують інструменти OpenClaw. Якщо CLI може споживати конфігурацію MCP, увімкніть це явно:
return {
id: "acme-cli",
bundleMcp: true,
bundleMcpMode: "codex-config-overrides",
config: {
command: "acme",
args: ["chat", "--json"],
output: "json",
},
};
Підтримувані режими мосту:
| Режим | Використання |
|---|---|
claude-config-file |
CLI, що приймають файл конфігурації MCP |
codex-config-overrides |
CLI, що приймають перевизначення конфігурації в argv |
gemini-system-settings |
CLI, що читають налаштування MCP зі свого каталогу системних налаштувань |
Увімкніть міст лише тоді, коли CLI справді може його споживати. Якщо CLI має
власний вбудований шар інструментів, який не можна вимкнути, встановіть nativeToolMode: "always-on", щоб OpenClaw міг відмовляти закрито, коли викликач вимагає відсутності нативних інструментів.
Користувацька конфігурація
Користувачі можуть перевизначити будь-яке типове значення бекенду:
{
agents: {
defaults: {
cliBackends: {
"acme-cli": {
command: "/opt/acme/bin/acme",
args: ["chat", "--json", "--profile", "work"],
modelAliases: {
large: "acme-large-2026",
},
},
},
model: {
primary: "openai/gpt-5.5",
fallbacks: ["acme-cli/large"],
},
},
},
}
Документуйте мінімальне перевизначення, яке, ймовірно, знадобиться користувачам. Зазвичай це лише
command, коли бінарний файл розташований поза PATH.
Перевірка
Для вбудованих плагінів додайте сфокусований тест для builder і реєстрації налаштування, а потім запустіть цільову тестову лінію плагіна:
pnpm test extensions/acme-cli
Для локальних або встановлених плагінів перевірте виявлення й один реальний запуск моделі:
openclaw plugins inspect acme-cli --runtime --json
openclaw agent --message "reply exactly: backend ok" --model acme-cli/acme-large
Якщо бекенд підтримує зображення або MCP, додайте live smoke, що доводить ці шляхи з реальним CLI. Не покладайтеся на статичну інспекцію для поведінки підказок, зображень, MCP або відновлення сесій.
Контрольний список
OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s
package.json має openclaw.extensions і зібрані runtime-точки входу для опублікованих пакетів
OPENCLAW_DOCS_MARKER:calloutClose:
OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s
openclaw.plugin.json оголошує cliBackends і навмисне activation.onStartup
OPENCLAW_DOCS_MARKER:calloutClose:
OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s
setup.cliBackends присутній, коли налаштування/виявлення моделей має бачити бекенд холодним
OPENCLAW_DOCS_MARKER:calloutClose:
OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s
api.registerCliBackend(...) використовує той самий ідентифікатор бекенду, що й маніфест
OPENCLAW_DOCS_MARKER:calloutClose:
OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s
Користувацькі перевизначення в agents.defaults.cliBackends.<id> усе ще мають пріоритет
OPENCLAW_DOCS_MARKER:calloutClose: