Если вышестоящий сервис предоставляет обычный HTTP API моделей, вместо этого создайте
плагин провайдера. Если вышестоящая
среда выполнения управляет полными сеансами агента, событиями инструментов, Compaction или состоянием
фоновых задач, используйте среду агента.
За что отвечает плагин
Плагин серверной части CLI имеет три контракта:
Манифест представляет собой метаданные обнаружения: он не запускает CLI и не регистрирует
поведение среды выполнения. Поведение среды выполнения начинается, когда точка входа плагина вызывает
api.registerCliBackend(...).
Минимальный плагин серверной части
1
Создайте метаданные пакета
package.json
./src/index.ts, добавьте openclaw.runtimeExtensions, указывающий на
соответствующий собранный файл JavaScript. См. раздел Точки входа.2
Объявите владение серверной частью
openclaw.plugin.json
cliBackends — это список владения средой выполнения; он позволяет OpenClaw автоматически загружать
плагин, когда в конфигурации или при выборе модели упоминается acme-cli/....setup.cliBackends — это поверхность настройки, основанная прежде всего на дескрипторах. Добавьте её, если
обнаружение моделей, первоначальная настройка или состояние должны распознавать серверную часть
без загрузки среды выполнения плагина. Используйте requiresRuntime: false, только если
для настройки достаточно этих статических дескрипторов.3
Зарегистрируйте серверную часть
index.ts
cliBackends в манифесте.
Зарегистрированная config является лишь значением по умолчанию; пользовательская конфигурация в
agents.defaults.cliBackends.acme-cli объединяется с ней во время выполнения и имеет приоритет.Структура конфигурации
CliBackendConfig описывает, как OpenClaw должен запускать CLI и разбирать его вывод:
Предпочитайте минимальную статическую конфигурацию, соответствующую CLI. Добавляйте обратные вызовы плагина
только для поведения, которое действительно относится к серверной части.
Расширенные хуки серверной части
CliBackendPlugin также может определять:
Эти хуки должны оставаться в ведении провайдера. Не добавляйте специфичные для CLI ветви в ядро, если
поведение можно выразить через хук серверной части.
prepareExecution(ctx) получает ctx.contextTokenBudget — эффективный лимит токенов,
выбранный для запуска. Серверные части, самостоятельно выполняющие нативную Compaction, могут преобразовать этот
бюджет в свой контракт запуска CLI.
runtimeArtifact принадлежит плагину и не может быть переопределён пользователем. Он проверяется
только тогда, когда рабочий цикл инференса создаёт или повторно проверяет подтверждённые полномочия настройки;
обычные запуски CLI не требуют его. Бэкенд без этого объявления не может
создавать подтверждённые полномочия настройки CLI. Объявление bundled-package-tree указывает
точного владельца package.json и требует, чтобы точкой входа пакета была
команда. OpenClaw хеширует ограниченное полное дерево установленного пакета, включая
вложенные зависимости, и блокирует выполнение при перенаправляющих символических ссылках,
запускателях за пределами объявленного пакета, объявлениях обязательных внешних
зависимостей, слишком больших деревьях и неизвестных скриптах. Объявляйте это только тогда, когда
дерево содержит полную реализацию инференса; необязательные интеграции инструментов
не делают внешний граф реализации безопасным.
Если тот же бэкенд также поставляет самодостаточный нативный исполняемый файл, перечислите его
канонические базовые имена в nativeExecutableNames. Другие нативные команды остаются
неподтверждёнными, даже когда пользователь переопределяет команду бэкенда.
ctx.executionMode имеет значение "agent" для обычных циклов и "side-question" для
эфемерных вызовов /btw. Используйте его, когда CLI требуются другие одноразовые флаги,
например для отключения нативных инструментов, сохранения сеанса или возобновления работы
для BTW. Если у бэкенда обычно есть nativeToolMode: "always-on", но его
аргументы командной строки для побочного вопроса надёжно отключают эти инструменты, также задайте
sideQuestionToolMode: "disabled"; иначе OpenClaw блокирует выполнение, когда для BTW
требуется запуск CLI без инструментов.
Задавайте nativeToolMode: "selectable" только тогда, когда resolveExecutionArgs может отключить
все нативные инструменты бэкенда для отдельного запуска. Для таких ограниченных запусков
ctx.toolAvailability.native является пустым кортежем, а
ctx.toolAvailability.mcp — точным списком разрешённых MCP с изоляцией на стороне хоста. Хук
должен заменять конфликтующие флаги инструментов и возвращать аргументы командной строки, обеспечивающие оба значения;
OpenClaw вызывает его один раз с окончательными аргументами нового или возобновляемого запуска и блокирует выполнение, если
бэкенд не может обеспечить соблюдение ограничения. Имена MCP в этом контексте можно
безопасно подтверждать автоматически только потому, что хост уже ограничил создаваемую конфигурацию MCP
этими серверами и инструментами.
ownsNativeCompaction: отказ от Compaction OpenClaw
Если ваш бэкенд запускает агента, который выполняет Compaction собственной расшифровки, задайте
ownsNativeCompaction: true, чтобы защитный суммаризатор OpenClaw никогда не запускался
для его сеансов: жизненный цикл Compaction CLI ничего не делает, и
цикл продолжается. claude-cli объявляет это, поскольку Claude Code выполняет Compaction
внутренне, без конечной точки среды выполнения. Сеансы нативной среды выполнения, такие как Codex,
вместо этого продолжают направляться к конечной точке Compaction своей среды выполнения.
Объявляйте это, только если выполняются все следующие условия, иначе отложенный
сеанс с превышенным бюджетом может остаться за пределами бюджета или устареть (OpenClaw больше
не восстанавливает его):
- бэкенд надёжно выполняет Compaction или ограничивает собственную расшифровку по мере приближения к пределу контекстного окна;
- он сохраняет возобновляемый сеанс, чтобы состояние после Compaction сохранялось между циклами
(например,
--resume/--session-id); - это не сеанс Compaction нативной среды выполнения: соответствующие сеансы
agentHarnessIdвместо этого направляются к конечной точке среды выполнения.
Мост инструментов MCP
По умолчанию бэкенды CLI не получают инструменты OpenClaw. Если CLI может использовать конфигурацию MCP, включите эту возможность явно:
Включайте мост только тогда, когда CLI действительно может его использовать. Если у CLI есть
собственный встроенный слой инструментов, который нельзя отключить, задайте
nativeToolMode: "always-on", чтобы OpenClaw мог блокировать выполнение, когда вызывающей стороне требуется отсутствие нативных
инструментов. Если CLI может отключить все нативные инструменты для отдельного запуска, используйте "selectable" с
контрактом resolveExecutionArgs, описанным выше.
Пользовательская конфигурация
Пользователи могут переопределить любое значение бэкенда по умолчанию:command, когда исполняемый файл находится за пределами PATH.
Проверка
Для встроенных плагинов добавьте целевой тест построителя и регистрации настройки, затем запустите целевой набор тестов плагина:Контрольный список
package.json содержит openclaw.extensions и собранные записи среды выполнения для опубликованных пакетовopenclaw.plugin.json объявляет cliBackends и намеренно заданный activation.onStartupsetup.cliBackends присутствует, когда настройка или обнаружение моделей должны видеть незапущенный бэкендapi.registerCliBackend(...) использует тот же идентификатор бэкенда, что и манифестПользовательские переопределения в
agents.defaults.cliBackends.<id> по-прежнему имеют приоритетНастройки сеанса, системного запроса, изображений и анализатора вывода соответствуют реальному контракту CLI
Целевые тесты и хотя бы один реальный проверочный запуск CLI подтверждают путь бэкенда
Связанные материалы
- Бэкенды CLI — пользовательская конфигурация и поведение среды выполнения
- Создание плагинов — основы пакетов и манифестов
- Обзор SDK плагинов — справочник по API регистрации
- Манифест плагина —
cliBackendsи дескрипторы настройки - Среда выполнения агента — полноценные внешние среды выполнения агентов