Si el servicio ascendente expone una API de modelos HTTP normal, escribe un
plugin de proveedor en su lugar. Si el runtime
ascendente es propietario de sesiones completas de agente, eventos de herramientas, Compaction o estado de
tareas en segundo plano, usa un arnés de agente.
Qué controla el plugin
Un plugin de backend de CLI tiene tres contratos:| Contrato | Archivo | Propósito |
|---|---|---|
| Entrada del paquete | package.json | Apunta OpenClaw al módulo de runtime del plugin |
| Propiedad del manifiesto | openclaw.plugin.json | Declara el id del backend antes de que cargue el runtime |
| Registro en runtime | index.ts | Llama a api.registerCliBackend(...) con valores predeterminados del comando |
api.registerCliBackend(...).
Plugin de backend mínimo
Create package metadata
package.json
./src/index.ts, agrega openclaw.runtimeExtensions apuntando al
par JavaScript compilado. Consulta Puntos de entrada.Declare backend ownership
openclaw.plugin.json
cliBackends es la lista de propiedad de runtime; permite que OpenClaw cargue automáticamente el
plugin cuando la configuración o la selección de modelo menciona acme-cli/....setup.cliBackends es la superficie de configuración basada primero en descriptores. Agrégala cuando
el descubrimiento de modelos, el onboarding o el estado deban reconocer el backend
sin cargar el runtime del plugin. Usa requiresRuntime: false solo cuando
esos descriptores estáticos sean suficientes para la configuración.Forma de configuración
CliBackendConfig describe cómo OpenClaw debe iniciar y analizar la CLI:
| Campo | Uso |
|---|---|
command | Nombre del binario o ruta absoluta del comando |
args | argv base para ejecuciones nuevas |
resumeArgs | argv alternativo para sesiones reanudadas; admite {sessionId} |
output / resumeOutput | Analizador: json, jsonl o text |
jsonlDialect | Dialecto de eventos JSONL: claude-stream-json o gemini-stream-json |
liveSession | Modo de proceso CLI de larga duración (claude-stdio) |
input | Transporte del prompt: arg o stdin |
maxPromptArgChars | Longitud máxima del prompt para modo arg antes de volver a stdin |
env / clearEnv | Variables de entorno adicionales que inyectar, o nombres que quitar antes del inicio |
modelArg | Flag usado antes del id del modelo |
modelAliases | Mapea ids de modelos de OpenClaw a ids nativos de la CLI |
sessionArg / sessionArgs | Cómo pasar un id de sesión |
sessionMode | always, existing o none |
sessionIdFields | Campos JSON que OpenClaw lee de la salida de la CLI |
systemPromptArg / systemPromptFileArg | Transporte del prompt de sistema |
systemPromptFileConfigArg / systemPromptFileConfigKey | Transporte de anulación de configuración para un archivo de prompt de sistema (por ejemplo -c) |
systemPromptMode | append o replace |
systemPromptWhen | first, always o never |
imageArg / imageMode | Flag de ruta de imagen y cómo pasar varias imágenes (repeat o list) |
imagePathScope | Dónde viven los archivos de imagen preparados antes de la entrega: temp o workspace |
serialize | Mantiene ordenadas las ejecuciones del mismo backend |
reseedFromRawTranscriptWhenUncompacted | Opta por una resiembra acotada desde la transcripción sin procesar antes de Compaction para reinicios de sesión seguros |
reliability.outputLimits | Máx. de caracteres/líneas JSONL sin procesar retenidos para un turno de CLI en vivo (backends de sesión en vivo) |
reliability.watchdog | Ajuste del tiempo de espera sin salida, separado para ejecuciones nuevas frente a reanudadas |
Hooks avanzados de backend
CliBackendPlugin también puede definir:
| Hook | Uso |
|---|---|
normalizeConfig(config, context) | Reescribe la configuración de usuario heredada después de la fusión |
resolveExecutionArgs(ctx) | Agrega flags con alcance de solicitud, como esfuerzo de razonamiento o aislamiento de preguntas secundarias |
prepareExecution(ctx) | Crea puentes temporales de autenticación o configuración antes del inicio |
transformSystemPrompt(ctx) | Aplica una transformación final del prompt de sistema específica de la CLI |
textTransforms | Reemplazos bidireccionales de prompt/salida |
defaultAuthProfileId | Prefiere un perfil de autenticación específico de OpenClaw |
authEpochMode | Decide cómo los cambios de autenticación invalidan las sesiones CLI almacenadas |
nativeToolMode | Declara si la CLI tiene herramientas nativas siempre activas |
sideQuestionToolMode | Declara herramientas nativas deshabilitadas para preguntas secundarias /btw |
bundleMcp / bundleMcpMode | Opta por el puente de herramientas MCP de local loopback de OpenClaw |
ownsNativeCompaction | El backend controla su propia Compaction - OpenClaw difiere |
ctx.executionMode es "agent" para turnos normales y "side-question" para
llamadas efímeras /btw. Úsalo cuando la CLI necesite flags de un solo uso diferentes,
como deshabilitar herramientas nativas, persistencia de sesión o comportamiento de reanudación para
BTW. Si un backend normalmente tiene nativeToolMode: "always-on" pero su
argv de pregunta secundaria deshabilita esas herramientas de forma fiable, establece también
sideQuestionToolMode: "disabled"; de lo contrario, OpenClaw falla cerrado cuando BTW
requiere una ejecución CLI sin herramientas.
ownsNativeCompaction: exclusión de OpenClaw Compaction
Si tu backend ejecuta un agente que compacta su propia transcripción, establece
ownsNativeCompaction: true para que el resumidor de salvaguarda de OpenClaw nunca se ejecute
contra sus sesiones - el ciclo de vida de Compaction de la CLI devuelve una no-op y el
turno continúa. claude-cli lo declara porque Claude Code compacta
internamente sin endpoint de arnés. Las sesiones con arnés nativo, como Codex,
siguen enrutándose a su endpoint de Compaction de arnés en su lugar.
Decláralo solo cuando se cumpla todo lo siguiente, o una sesión diferida
por encima del presupuesto puede permanecer por encima del presupuesto o quedar obsoleta (OpenClaw ya no
la rescata):
- el backend compacta de forma fiable o limita su propia transcripción cuando se acerca a su ventana;
- persiste una sesión reanudable para que el estado compactado sobreviva entre turnos
(por ejemplo
--resume/--session-id); - no es una sesión de compactación de arnés nativo: las sesiones que coinciden con
agentHarnessIdse enrutan al endpoint del arnés en su lugar.
Puente de herramientas MCP
Los backends de CLI no reciben herramientas de OpenClaw de forma predeterminada. Si la CLI puede consumir una configuración MCP, actívala explícitamente:| Modo | Uso |
|---|---|
claude-config-file | CLI que aceptan un archivo de configuración MCP |
codex-config-overrides | CLI que aceptan sobrescrituras de configuración en argv |
gemini-system-settings | CLI que leen ajustes MCP desde su directorio de ajustes del sistema |
nativeToolMode: "always-on" para que OpenClaw pueda fallar de forma cerrada cuando un llamador requiera que no haya
herramientas nativas.
Configuración de usuario
Los usuarios pueden sobrescribir cualquier valor predeterminado del backend:command cuando el binario está fuera de PATH.
Verificación
Para plugins incluidos, añade una prueba enfocada alrededor del builder y el registro de configuración, y luego ejecuta el carril de pruebas dirigido del plugin:Lista de comprobación
package.json tiene openclaw.extensions y entradas de runtime compiladas para paquetes publicadosopenclaw.plugin.json declara cliBackends y activation.onStartup intencionalsetup.cliBackends está presente cuando la configuración o el descubrimiento de modelos deben ver el backend en fríoapi.registerCliBackend(...) usa el mismo id de backend que el manifiestoLas sobrescrituras de usuario bajo
agents.defaults.cliBackends.<id> siguen prevaleciendoLos ajustes de sesión, prompt del sistema, imagen y parser de salida coinciden con el contrato real de la CLI
Las pruebas dirigidas y al menos una prueba de humo de CLI en vivo demuestran la ruta del backend
Relacionado
- Backends de CLI - configuración de usuario y comportamiento en runtime
- Creación de plugins - conceptos básicos de paquetes y manifiestos
- Resumen del SDK de Plugin - referencia de API de registro
- Manifiesto de Plugin -
cliBackendsy descriptores de configuración - Arnés de agente - runtimes completos de agentes externos