Якщо вищестоящий сервіс надає звичайний HTTP API моделей, натомість напишіть
плагін провайдера. Якщо вищестояще середовище виконання володіє повними сесіями агентів, подіями інструментів, compaction або станом фонових завдань, використовуйте agent harness.
Чим володіє плагін
Плагін бекенду CLI має три контракти:| Контракт | Файл | Призначення |
|---|---|---|
| Точка входу пакета | package.json | Вказує OpenClaw на модуль середовища виконання плагіна |
| Володіння маніфестом | openclaw.plugin.json | Оголошує ідентифікатор бекенду до завантаження runtime |
| Реєстрація runtime | index.ts | Викликає api.registerCliBackend(...) з типовими командами |
api.registerCliBackend(...).
Мінімальний плагін бекенду
Create package metadata
package.json
./src/index.ts, додайте openclaw.runtimeExtensions, що вказує на відповідний зібраний JavaScript-файл. Див. Точки входу.Declare backend ownership
openclaw.plugin.json
cliBackends — це список володіння runtime. Він дає OpenClaw змогу автоматично завантажувати плагін, коли конфігурація або вибір моделі згадує acme-cli/....setup.cliBackends — це поверхня налаштування, що спершу використовує дескриптор. Додайте її, коли виявлення моделей, onboarding або статус мають розпізнавати бекенд без завантаження runtime плагіна. Використовуйте requiresRuntime: false лише тоді, коли цих статичних дескрипторів достатньо для налаштування.Форма конфігурації
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 | Налаштування тайм-ауту без виводу |
Розширені хуки бекенду
CliBackendPlugin також може визначати:
| Хук | Використання |
|---|---|
normalizeConfig(config, context) | Переписує застарілу користувацьку конфігурацію після об’єднання |
resolveExecutionArgs(ctx) | Додає прапорці в межах запиту, як-от thinking effort або ізоляцію побічного питання |
prepareExecution(ctx) | Створює тимчасові мости автентифікації або конфігурації перед запуском |
transformSystemPrompt(ctx) | Застосовує фінальне перетворення системного промпта, специфічне для CLI |
textTransforms | Двонапрямні заміни промпта/виводу |
defaultAuthProfileId | Надає перевагу конкретному профілю автентифікації OpenClaw |
authEpochMode | Визначає, як зміни автентифікації інвалідовують збережені сесії CLI |
nativeToolMode | Оголошує, чи CLI має завжди ввімкнені нативні інструменти |
sideQuestionToolMode | Оголошує вимкнені нативні інструменти для побічних питань /btw |
bundleMcp / bundleMcpMode | Вмикає міст OpenClaw для інструментів MCP через loopback |
ownsNativeCompaction | Бекенд володіє власним compaction — OpenClaw відкладає |
ctx.executionMode має значення "agent" для звичайних ходів і "side-question" для ефемерних викликів /btw. Використовуйте його, коли CLI потребує різних одноразових прапорців, як-от вимкнення нативних інструментів, збереження сесії або поведінки відновлення для BTW. Якщо бекенд зазвичай має nativeToolMode: "always-on", але його argv для побічних питань надійно вимикає ці інструменти, також задайте sideQuestionToolMode: "disabled"; інакше OpenClaw fail closed, коли BTW потребує запуску CLI без інструментів.
ownsNativeCompaction: відмова від compaction OpenClaw
Якщо ваш бекенд запускає агента, який стискає власний transcript, задайте ownsNativeCompaction: true, щоб захисний summarizer OpenClaw ніколи не запускався для його сесій — життєвий цикл compaction CLI повертає no-op, і хід продовжується. claude-cli оголошує це, бо Claude Code стискає внутрішньо без endpoint harness. Сесії native-harness, як-от Codex, натомість продовжують маршрутизуватися до свого endpoint compaction harness.
Оголошуйте це лише тоді, коли виконуються всі наведені нижче умови, інакше відкладена сесія, що перевищує бюджет, може залишитися понад бюджетом або застаріти (OpenClaw більше не рятує її):
- бекенд надійно стискає або обмежує власний transcript, коли він наближається до свого вікна;
- він зберігає відновлювану сесію, щоб стиснений стан переживав ходи
(наприклад,
--resume/--session-id); - це не сесія compaction native-harness — сесії з відповідним
agentHarnessIdнатомість маршрутизуються до endpoint harness.
Міст інструментів MCP
Бекенди CLI за замовчуванням не отримують інструменти OpenClaw. Якщо CLI може споживати конфігурацію MCP, увімкніть це явно:| Режим | Використання |
|---|---|
claude-config-file | CLI, які приймають файл конфігурації MCP |
codex-config-overrides | CLI, які приймають перевизначення конфігурації в argv |
gemini-system-settings | CLI, які читають налаштування MCP зі свого каталогу системних налаштувань |
nativeToolMode: "always-on", щоб OpenClaw міг fail closed, коли викликач потребує відсутності нативних інструментів.
Користувацька конфігурація
Користувачі можуть перевизначити будь-яке типове значення бекенду:command, коли бінарний файл розташований поза PATH.
Перевірка
Для вбудованих плагінів додайте сфокусований тест для builder і реєстрації setup, а потім запустіть цільову тестову лінію плагіна:Контрольний список
package.json має openclaw.extensions і зібрані runtime-записи для опублікованих пакетівopenclaw.plugin.json оголошує cliBackends і навмисний activation.onStartupsetup.cliBackends присутній, коли setup/виявлення моделі має бачити бекенд у холодному станіapi.registerCliBackend(...) використовує той самий id бекенда, що й маніфестПеревизначення користувача в
agents.defaults.cliBackends.<id> все ще мають пріоритетНалаштування сесії, системного prompt, зображень і парсера виводу відповідають реальному контракту CLI
Цільові тести та принаймні один живий CLI smoke-тест підтверджують шлях бекенда
Пов’язане
- CLI-бекенди - конфігурація користувача та поведінка runtime
- Створення плагінів - основи пакетів і маніфестів
- Огляд Plugin SDK - довідник API реєстрації
- Маніфест Plugin -
cliBackendsі дескриптори setup - Середовище запуску агента - повні runtime для зовнішніх агентів