Backends CLI (runtime de respaldo)
OpenClaw puede ejecutar CLIs de IA locales como respaldo solo texto cuando los proveedores API están caídos, con límite de tasa, o con mal comportamiento temporal. Esto es intencionalmente conservador:
- Las herramientas están deshabilitadas (sin llamadas a herramientas).
- Texto entra → texto sale (confiable).
- Las sesiones están soportadas (para que los turnos de seguimiento mantengan coherencia).
- Se pueden pasar imágenes si el CLI acepta rutas de imagen.
Esto está diseñado como una red de seguridad más que como un camino principal. Úsalo cuando quieras respuestas de texto que “siempre funcionen” sin depender de APIs externas.
Inicio rápido para principiantes
Puedes usar el CLI de Claude Code sin ninguna configuración (OpenClaw incluye un valor por defecto integrado):
openclaw agent --message "hi" --model claude-cli/opus-4.6
El CLI de Codex también funciona sin configuración adicional:
openclaw agent --message "hi" --model codex-cli/gpt-5.4
Si tu gateway se ejecuta bajo launchd/systemd y el PATH es mínimo, solo agrega la ruta del comando:
{
agents: {
defaults: {
cliBackends: {
"claude-cli": {
command: "/opt/homebrew/bin/claude",
},
},
},
},
}
Eso es todo. No necesitas claves ni configuración de autenticación adicional más allá del CLI mismo.
Usarlo como respaldo
Agrega un backend CLI a tu lista de respaldos para que solo se ejecute cuando los modelos principales fallen:
{
agents: {
defaults: {
model: {
primary: "anthropic/claude-opus-4-6",
fallbacks: ["claude-cli/opus-4.6", "claude-cli/opus-4.5"],
},
models: {
"anthropic/claude-opus-4-6": { alias: "Opus" },
"claude-cli/opus-4.6": {},
"claude-cli/opus-4.5": {},
},
},
},
}
Notas:
- Si usas
agents.defaults.models(lista de permitidos), debes incluirclaude-cli/.... - Si el proveedor principal falla (autenticación, límites de tasa, timeouts), OpenClaw probará el backend CLI a continuación.
Resumen de configuración
Todos los backends CLI se encuentran bajo:
agents.defaults.cliBackends
Cada entrada se identifica por un id de proveedor (por ejemplo claude-cli, my-cli).
El id del proveedor se convierte en el lado izquierdo de tu referencia de modelo:
<provider>/<model>
Ejemplo de configuración
{
agents: {
defaults: {
cliBackends: {
"claude-cli": {
command: "/opt/homebrew/bin/claude",
},
"my-cli": {
command: "my-cli",
args: ["--json"],
output: "json",
input: "arg",
modelArg: "--model",
modelAliases: {
"claude-opus-4-6": "opus",
"claude-opus-4-5": "opus",
"claude-sonnet-4-5": "sonnet",
},
sessionArg: "--session",
sessionMode: "existing",
sessionIdFields: ["session_id", "conversation_id"],
systemPromptArg: "--system",
systemPromptWhen: "first",
imageArg: "--image",
imageMode: "repeat",
serialize: true,
},
},
},
},
}
Cómo funciona
- Selecciona un backend basándose en el prefijo del proveedor (
claude-cli/...). - Construye un prompt de sistema usando el mismo prompt de OpenClaw + contexto del workspace.
- Ejecuta el CLI con un id de sesión (si está soportado) para que el historial se mantenga consistente.
- Analiza la salida (JSON o texto plano) y devuelve el texto final.
- Persiste los ids de sesión por backend, para que los seguimientos reutilicen la misma sesión CLI.
Sesiones
- Si el CLI soporta sesiones, configura
sessionArg(por ejemplo--session-id) osessionArgs(marcador{sessionId}) cuando el ID necesita insertarse en múltiples flags. - Si el CLI usa un subcomando de reanudación con flags diferentes, configura
resumeArgs(reemplazaargsal reanudar) y opcionalmenteresumeOutput(para reanudaciones sin JSON). sessionMode:always: siempre envía un id de sesión (UUID nuevo si no hay almacenado).existing: solo envía un id de sesión si uno fue almacenado previamente.none: nunca envía un id de sesión.
Imágenes (paso directo)
Si tu CLI acepta rutas de imagen, configura imageArg:
imageArg: "--image",
imageMode: "repeat"
OpenClaw escribirá imágenes base64 en archivos temporales. Si imageArg está configurado, esas
rutas se pasan como argumentos CLI. Si imageArg falta, OpenClaw agrega las
rutas de archivo al prompt (inyección de ruta), que es suficiente para CLIs que auto-
cargan archivos locales desde rutas simples (comportamiento del CLI de Claude Code).
Entradas / salidas
output: "json"(por defecto) intenta analizar JSON y extraer texto + id de sesión.output: "jsonl"analiza flujos JSONL (Codex CLI--json) y extrae el último mensaje del agente másthread_idcuando está presente.output: "text"trata stdout como la respuesta final.
Modos de entrada:
input: "arg"(por defecto) pasa el prompt como el último argumento CLI.input: "stdin"envía el prompt vía stdin.- Si el prompt es muy largo y
maxPromptArgCharsestá configurado, se usa stdin.
Valores por defecto (integrados)
OpenClaw incluye un valor por defecto para claude-cli:
command: "claude"args: ["-p", "--output-format", "json", "--permission-mode", "bypassPermissions"]resumeArgs: ["-p", "--output-format", "json", "--permission-mode", "bypassPermissions", "--resume", "{sessionId}"]modelArg: "--model"systemPromptArg: "--append-system-prompt"sessionArg: "--session-id"systemPromptWhen: "first"sessionMode: "always"
OpenClaw también incluye un valor por defecto para codex-cli:
command: "codex"args: ["exec","--json","--color","never","--sandbox","read-only","--skip-git-repo-check"]resumeArgs: ["exec","resume","{sessionId}","--color","never","--sandbox","read-only","--skip-git-repo-check"]output: "jsonl"resumeOutput: "text"modelArg: "--model"imageArg: "--image"sessionMode: "existing"
Modifica solo si es necesario (lo común: ruta absoluta del command).
Limitaciones
- Sin herramientas de OpenClaw (el backend CLI nunca recibe llamadas a herramientas). Algunos CLIs pueden seguir ejecutando su propio tooling de agente.
- Sin streaming (la salida del CLI se recolecta y luego se devuelve).
- Las salidas estructuradas dependen del formato JSON del CLI.
- Las sesiones de Codex CLI se reanudan vía salida de texto (sin JSONL), lo cual es menos
estructurado que la ejecución inicial
--json. Las sesiones de OpenClaw siguen funcionando normalmente.
Solución de problemas
- CLI no encontrado: configura
commandcon una ruta completa. - Nombre de modelo incorrecto: usa
modelAliasespara mapearprovider/model→ modelo CLI. - Sin continuidad de sesión: asegúrate de que
sessionArgesté configurado ysessionModeno seanone(Codex CLI actualmente no puede reanudar con salida JSON). - Imágenes ignoradas: configura
imageArg(y verifica que el CLI soporte rutas de archivo).