Если вышестоящий сервис предоставляет обычный HTTP API моделей, вместо этого
напишите плагин провайдера. Если вышестоящая
среда выполнения владеет полными агентскими сессиями, событиями инструментов,
compaction или состоянием фоновых задач, используйте агентский harness.
За что отвечает плагин
Плагин бэкенда CLI имеет три контракта:| Контракт | Файл | Назначение |
|---|---|---|
| Точка входа пакета | package.json | Указывает OpenClaw на модуль среды выполнения плагина |
| Владение манифестом | openclaw.plugin.json | Объявляет id бэкенда до загрузки среды выполнения |
| Регистрация runtime | index.ts | Вызывает api.registerCliBackend(...) с командами по умолчанию |
api.registerCliBackend(...).
Минимальный плагин бэкенда
Создайте метаданные пакета
package.json
./src/index.ts, добавьте openclaw.runtimeExtensions, указывающий на
собранный JavaScript-аналог. См. Точки входа.Объявите владение бэкендом
openclaw.plugin.json
cliBackends — это список владения runtime. Он позволяет OpenClaw автоматически загружать
плагин, когда конфигурация или выбор модели упоминает acme-cli/....setup.cliBackends — это setup-поверхность, ориентированная сначала на дескрипторы. Добавьте ее, когда
обнаружение моделей, онбординг или статус должны распознавать бэкенд без
загрузки runtime плагина. Используйте requiresRuntime: false только когда этих статических
дескрипторов достаточно для setup.Форма конфигурации
CliBackendConfig описывает, как OpenClaw должен запускать и разбирать CLI:
| Поле | Использование |
|---|---|
command | Имя бинарного файла или абсолютный путь команды |
args | Базовый argv для новых запусков |
resumeArgs | Альтернативный argv для возобновленных сессий; поддерживает {sessionId} |
output / resumeOutput | Парсер: json, jsonl или text |
input | Транспорт промпта: arg или stdin |
modelArg | Флаг, используемый перед id модели |
modelAliases | Сопоставляет id моделей OpenClaw с нативными id CLI |
sessionArg / sessionArgs | Как передавать id сессии |
sessionMode | always, existing или none |
sessionIdFields | JSON-поля, которые OpenClaw читает из вывода CLI |
systemPromptArg / systemPromptFileArg | Транспорт системного промпта |
systemPromptWhen | first, always или never |
imageArg / imageMode | Поддержка пути к изображению |
serialize | Сохранять порядок запусков одного бэкенда |
reliability.watchdog | Настройка таймаута при отсутствии вывода |
Расширенные hooks бэкенда
CliBackendPlugin также может определять:
| Hook | Использование |
|---|---|
normalizeConfig(config, context) | Переписать устаревшую пользовательскую конфигурацию после merge |
resolveExecutionArgs(ctx) | Добавить флаги уровня запроса, например усилие рассуждения или изоляцию дополнительного вопроса |
prepareExecution(ctx) | Создать временные мосты auth или конфигурации перед запуском |
transformSystemPrompt(ctx) | Применить финальное CLI-специфичное преобразование системного промпта |
textTransforms | Двунаправленные замены промпта/вывода |
defaultAuthProfileId | Предпочитать конкретный профиль auth OpenClaw |
authEpochMode | Решить, как изменения auth инвалидируют сохраненные CLI-сессии |
nativeToolMode | Объявить, есть ли у CLI постоянно включенные нативные инструменты |
sideQuestionToolMode | Объявить отключенные нативные инструменты для дополнительных вопросов /btw |
bundleMcp / bundleMcpMode | Подключить loopback-мост MCP-инструментов OpenClaw |
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.
Проверка
Для встроенных плагинов добавьте целевой тест для регистрации сборщика и настройки, затем запустите целевой тестовый путь плагина:Контрольный список
package.json содержит openclaw.extensions и собранные runtime-записи для опубликованных пакетовopenclaw.plugin.json объявляет cliBackends и намеренное activation.onStartupsetup.cliBackends присутствует, когда настройка или обнаружение моделей должны видеть бэкенд в холодном состоянииapi.registerCliBackend(...) использует тот же идентификатор бэкенда, что и манифестПользовательские переопределения в
agents.defaults.cliBackends.<id> по-прежнему имеют приоритетНастройки сеанса, системного prompt, изображений и парсера вывода соответствуют реальному контракту CLI
Целевые тесты и как минимум одна проверка работоспособности реального CLI подтверждают путь бэкенда
Связанные материалы
- CLI-бэкенды - пользовательская конфигурация и поведение во время выполнения
- Создание плагинов - основы пакета и манифеста
- Обзор Plugin SDK - справочник API регистрации
- Манифест Plugin -
cliBackendsи дескрипторы настройки - Обвязка агента - полные внешние среды выполнения агента