Si el servicio ascendente expone una API HTTP de modelos normal, cree en su lugar un
plugin de proveedor. Si el entorno de ejecución ascendente
gestiona sesiones completas del agente, eventos de herramientas, Compaction o el estado de
tareas en segundo plano, use un arnés de agente.
Responsabilidades del plugin
Un plugin de backend de CLI tiene tres contratos:
El manifiesto contiene metadatos de detección: no ejecuta la CLI ni registra
el comportamiento en tiempo de ejecución. El comportamiento en tiempo de ejecución comienza cuando la entrada del plugin invoca
api.registerCliBackend(...).
Plugin de backend mínimo
1
Crear los metadatos del paquete
package.json
./src/index.ts, añada openclaw.runtimeExtensions que apunte al archivo JavaScript
compilado correspondiente. Consulte Puntos de entrada.2
Declarar la propiedad del backend
openclaw.plugin.json
cliBackends es la lista de propiedad en tiempo de ejecución; permite que OpenClaw cargue automáticamente el
plugin cuando la selección del modelo o agentRuntime.id mencione acme-cli.setup.cliBackends es la superficie de configuración basada primero en descriptores. Añádala cuando
la detección de modelos, la incorporación o el estado deban reconocer el backend
sin cargar el entorno de ejecución del plugin. Use requiresRuntime: false únicamente cuando
esos descriptores estáticos sean suficientes para la configuración.3
Registrar el backend
index.ts
cliBackends del manifiesto. El adaptador
registrado es código autoritativo del plugin; la configuración de OpenClaw selecciona el backend,
pero no reescribe su contrato de comandos.Estructura de configuración
CliBackendConfig describe cómo debe OpenClaw iniciar y analizar la CLI. El
ejemplo práctico anterior utiliza intencionadamente los mismos campos de comando, reanudación, JSONL,
alias de modelo, sesión, imagen y watchdog que el adaptador incluido
google-gemini-cli:
Prefiera la configuración estática más pequeña que se ajuste a la CLI. Añada devoluciones de llamada del plugin
solo para comportamientos que realmente pertenezcan al backend.
Hooks avanzados del backend
CliBackendPlugin también puede definir:
Mantenga estos hooks bajo la responsabilidad del proveedor. No añada ramas específicas de la CLI al núcleo cuando
un hook del backend pueda expresar el comportamiento.
prepareExecution(ctx) recibe ctx.contextTokenBudget, el límite efectivo de tokens
seleccionado para la ejecución. Los backends que gestionan la Compaction nativa pueden asignar ese
presupuesto a su contrato de inicio específico de la CLI.
runtimeArtifact pertenece al plugin. Se consulta
solo cuando un turno de inferencia activo crea o revalida una autoridad de configuración verificada;
las ejecuciones normales de la CLI no la requieren. Un backend sin esta declaración no puede
crear una autoridad de configuración de la CLI verificada. Una declaración bundled-package-tree identifica
al propietario exacto de package.json y requiere que el punto de entrada del paquete sea el
comando. OpenClaw calcula el hash del árbol completo y acotado del paquete instalado, incluidas
las dependencias anidadas, y adopta un cierre seguro ante enlaces simbólicos que redirigen,
iniciadores externos al paquete declarado, declaraciones de dependencias externas
requeridas, árboles sobredimensionados y scripts desconocidos. Declare esto solo cuando dicho
árbol contenga la implementación de inferencia completa; las integraciones opcionales de herramientas
no hacen que un grafo de implementación externo sea seguro.
Si el mismo backend también distribuye un ejecutable nativo autocontenido, indique sus
nombres base canónicos en nativeExecutableNames. Los demás comandos nativos permanecen
sin verificar.
ctx.executionMode es "agent" para los turnos normales y "side-question" para
las llamadas efímeras de /btw. Úselo cuando la CLI necesite marcas distintas para una sola ejecución,
como desactivar las herramientas nativas, la persistencia de sesiones o el comportamiento de reanudación para
BTW. Si un backend normalmente tiene nativeToolMode: "always-on", pero los argumentos argv
de sus preguntas secundarias desactivan esas herramientas de forma fiable, establezca también
sideQuestionToolMode: "disabled"; de lo contrario, OpenClaw adopta un cierre seguro cuando BTW
requiere una ejecución de la CLI sin herramientas.
Establezca nativeToolMode: "selectable" solo cuando el backend pueda desactivar todas las
herramientas nativas del backend para una ejecución individual. Las ejecuciones restringidas reciben un contrato
canónico: ctx.toolAvailability.native es la lista exacta nativa del backend y
ctx.toolAvailability.openClaw es la lista exacta de nombres de herramientas de OpenClaw. El
host limita de forma independiente la configuración de MCP generada y la concesión a esa
lista de OpenClaw; los plugins no deben traducirla en el núcleo ni añadir prefijos de transporte.
Declare cómo aplica el backend ese contrato:
toolAvailabilityEnforcement: "execution-args"requiereresolveExecutionArgs. El hook debe sustituir las marcas de herramientas en conflicto, desactivar las superficies de personalización que puedan ejecutarse fuera de las herramientas seleccionadas y devolver argumentos argv que apliquen las restricciones tanto para ejecuciones nuevas como reanudadas.toolAvailabilityEnforcement: "prepare-execution"requiereprepareExecution. El hook debe preparar una política exacta por ejecución y devolvertoolAvailabilityEnforced: true; si falta la confirmación, se adopta un cierre seguro y OpenClaw limpia los recursos preparados antes del inicio.
toolsAllow de Cron,
antes de crear este contrato. Las herramientas nativas se desactivan y un
backend sin una ruta de aplicación declarada completa falla antes de la ejecución.
Los plugins creados con versiones desde v2026.7.2-beta.1 hasta v2026.7.2-beta.3 aún pueden
leer la proyección obsoleta de nombres de transporte ctx.toolAvailability.mcp y
pueden omitir toolAvailabilityEnforcement cuando un backend seleccionable implementa
resolveExecutionArgs. OpenClaw reconoce esa ruta beta distribuida a partir de los
metadatos openclaw.build.openclawVersion requeridos del paquete del plugin y
la conserva durante la línea 2026.8.x. Los plugins nuevos y actualizados deben usar nombres
canónicos ctx.toolAvailability.openClaw y declarar
toolAvailabilityEnforcement: "execution-args" explícitamente; está previsto eliminar la
ruta de compatibilidad beta después de ese período.
ownsNativeCompaction: exclusión voluntaria de la Compaction de OpenClaw
Si el backend ejecuta un agente que compacta su propia transcripción, establezca
ownsNativeCompaction: true para que el resumidor de protección de OpenClaw nunca se ejecute
sobre sus sesiones: el ciclo de vida de Compaction de la CLI no realiza ninguna operación y el
turno continúa. claude-cli lo declara porque Claude Code compacta
internamente sin un endpoint del arnés. En cambio, las sesiones con arnés nativo, como Codex,
siguen dirigiéndose a su endpoint de Compaction del arnés.
Declárelo únicamente cuando se cumpla todo lo siguiente; de lo contrario, una sesión diferida
que supere el presupuesto puede permanecer por encima de este o quedar obsoleta (OpenClaw deja de
rescatarla):
- el backend compacta o limita de forma fiable su propia transcripción al acercarse a su ventana;
- conserva una sesión reanudable para que el estado compactado persista entre turnos
(por ejemplo,
--resume/--session-id); - no es una sesión de Compaction con arnés nativo; las sesiones que coinciden con
agentHarnessIdse dirigen al endpoint del arnés.
Puente de herramientas MCP
Los backends de la CLI no reciben herramientas de OpenClaw de forma predeterminada. Si la CLI puede consumir una configuración de MCP, habilítela explícitamente:
Habilite el puente solo cuando la CLI pueda consumirlo realmente. Si la CLI tiene
su propia capa de herramientas integrada que no se puede desactivar, establezca
nativeToolMode: "always-on" para que OpenClaw pueda adoptar un cierre seguro cuando una llamada requiera que no haya herramientas
nativas. Si puede desactivar todas las herramientas nativas en cada ejecución, use "selectable" con el
contrato resolveExecutionArgs anterior.
Selección del backend
Los usuarios seleccionan un backend independiente mediante el prefijo de su referencia de modelo. Un backend que declare unmodelProvider canónico puede seleccionarse, en cambio, mediante el
agentRuntime.id de ese modelo de proveedor. La mecánica del adaptador permanece en el plugin:
PATH del servicio Gateway; las implementaciones que necesiten una
ruta o argumentos argv diferentes deben modificar o envolver el registro del plugin.
Verificación
Para los plugins incluidos, añada una prueba específica para el constructor y el registro de configuración; después, ejecute el conjunto de pruebas específico del plugin:Lista de comprobación
package.json tiene openclaw.extensions y entradas de ejecución compiladas para los paquetes publicadosopenclaw.plugin.json declara cliBackends y un activation.onStartup intencionalsetup.cliBackends está presente cuando la configuración o el descubrimiento de modelos deben detectar el backend en fríoapi.registerCliBackend(...) usa el mismo id de backend que el manifiestoEl prefijo del modelo del backend o el
agentRuntime.id limitado al modelo selecciona el registroLa configuración de la sesión, el prompt del sistema, las imágenes y el analizador de salida coincide con el contrato real de la CLI
Las pruebas específicas y al menos una prueba de humo de la CLI en vivo demuestran la ruta del backend
Contenido relacionado
- Backends de la CLI - selección y comportamiento en tiempo de ejecución
- Creación de plugins - conceptos básicos de paquetes y manifiestos
- Descripción general del SDK de plugins - referencia de la API de registro
- Manifiesto del plugin -
cliBackendsy descriptores de configuración - Arnés de agentes - entornos de ejecución completos para agentes externos