Ir al contenido

Configura backends CLI en OpenClaw como fallback seguro

A veces, cuando dependes de una API externa, te encuentras con límites de velocidad o caídas inesperadas que detienen tu flujo de trabajo por completo. Es frustrante cuando tu entorno de desarrollo se queda sin respuestas justo en el momento en que más las necesitas.

OpenClaw te permite configurar CLI backends como una alternativa de respaldo, asegurando que siempre tengas una forma de obtener respuestas de texto cuando los proveedores principales no están disponibles.

Puedes usar el Codex CLI sin ninguna configuración adicional, ya que el plugin de OpenAI incluido registra un backend predeterminado automáticamente:

Ventana de terminal
openclaw agent --message "hi" --model codex-cli/gpt-5.4

Si tu Gateway se ejecuta bajo launchd/systemd y el PATH es limitado, añade solo la ruta del comando:

{
agents: {
defaults: {
cliBackends: {
"codex-cli": {
command: "/opt/homebrew/bin/codex",
},
},
},
},
}

Eso es todo. No necesitas llaves ni configuraciones de autenticación adicionales más allá de las que requiere el CLI por sí mismo.

Añade un CLI backend 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: ["codex-cli/gpt-5.4"],
},
models: {
"anthropic/claude-opus-4-6": { alias: "Opus" },
"codex-cli/gpt-5.4": {},
},
},
},
}

Notas:

  1. Si usas agents.defaults.models (lista de permitidos), debes incluir también tus modelos de CLI backend allí.
  2. Si el proveedor principal falla (autenticación, límites de velocidad, tiempos de espera), OpenClaw intentará usar el CLI backend a continuación.

Todos los CLI backends se encuentran bajo la siguiente ruta:

agents.defaults.cliBackends

Cada entrada se identifica mediante un provider id (por ejemplo, codex-cli, my-cli). El ID del proveedor se convierte en la parte izquierda de tu referencia de modelo:

<provider>/<model>
{
agents: {
defaults: {
cliBackends: {
"codex-cli": {
command: "/opt/homebrew/bin/codex",
},
"my-cli": {
command: "my-cli",
args: ["--json"],
output: "json",
input: "arg",
modelArg: "--model",
modelAliases: {
"claude-opus-4-6": "opus",
"claude-sonnet-4-6": "sonnet",
},
sessionArg: "--session",
sessionMode: "existing",
sessionIdFields: ["session_id", "conversation_id"],
systemPromptArg: "--system",
// Codex-style CLIs can point at a prompt file instead:
// systemPromptFileConfigArg: "-c",
// systemPromptFileConfigKey: "model_instructions_file",
systemPromptWhen: "first",
imageArg: "--image",
imageMode: "repeat",
serialize: true,
},
},
},
},
}
  1. Selecciona un backend basándose en el prefijo del proveedor (codex-cli/...).
  2. Construye un system prompt usando el prompt de OpenClaw más el contexto del espacio de trabajo.
  3. Ejecuta el CLI con un ID de sesión (si es compatible) para que el historial se mantenga coherente.
  4. Analiza la salida (JSON o texto plano) y devuelve el texto final.
  5. Persiste los IDs de sesión por backend, de modo que las consultas de seguimiento reutilicen la misma sesión de CLI.
  1. Si el CLI admite sesiones, configura sessionArg (por ejemplo, --session-id) o sessionArgs (marcador {sessionId}) cuando el ID deba insertarse en múltiples flags.
  2. Si el CLI usa un subcomando de reanudación con diferentes flags, configura resumeArgs (reemplaza args al reanudar) y opcionalmente resumeOutput (para reanudaciones que no sean JSON).
  3. sessionMode:
    • always: envía siempre un ID de sesión (un nuevo UUID si no hay uno almacenado).
    • existing: solo envía un ID de sesión si se almacenó uno anteriormente.
    • none: nunca envía un ID de sesión.

Si tu CLI acepta rutas de imágenes, configura imageArg:

imageArg: "--image",
imageMode: "repeat"

OpenClaw escribirá imágenes en base64 en archivos temporales. Si imageArg está configurado, esas rutas se pasan como argumentos de CLI. Si falta imageArg, OpenClaw añade las rutas de archivo al prompt (inyección de ruta), lo cual es suficiente para los CLIs que cargan automáticamente archivos locales desde rutas simples.

  1. output: "json" (predeterminado) intenta analizar JSON y extraer texto + ID de sesión.
  2. Para la salida JSON del Gemini CLI, OpenClaw lee el texto de respuesta desde response y el uso desde stats cuando usage falta o está vacío.
  3. output: "jsonl" analiza flujos JSONL (por ejemplo, Codex CLI --json) y extrae el mensaje final del agente más los identificadores de sesión cuando están presentes.
  4. output: "text" trata stdout como la respuesta final.

Modos de entrada:

  1. input: "arg" (predeterminado) pasa el prompt como el último argumento del CLI.
  2. input: "stdin" envía el prompt a través de stdin.
  3. Si el prompt es muy largo y maxPromptArgChars está configurado, se utiliza stdin.

Valores predeterminados (propiedad del plugin)

Sección titulada «Valores predeterminados (propiedad del plugin)»

El plugin de OpenAI incluido también registra un valor predeterminado para codex-cli:

  • command: "codex"
  • args: ["exec","--json","--color","never","--sandbox","workspace-write","--skip-git-repo-check"]
  • resumeArgs: ["exec","resume","{sessionId}","-c","sandbox_mode=\"workspace-write\"","--skip-git-repo-check"]
  • output: "jsonl"
  • resumeOutput: "text"
  • modelArg: "--model"
  • imageArg: "--image"
  • sessionMode: "existing"

El plugin de Google incluido también registra un valor predeterminado para google-gemini-cli:

  • command: "gemini"
  • args: ["--output-format", "json", "--prompt", "{prompt}"]
  • resumeArgs: ["--resume", "{sessionId}", "--output-format", "json", "--prompt", "{prompt}"]
  • imageArg: "@"
  • imagePathScope: "workspace"
  • modelArg: "--model"
  • sessionMode: "existing"
  • sessionIdFields: ["session_id", "sessionId"]

Valores predeterminados propiedad del plugin

Sección titulada «Valores predeterminados propiedad del plugin»

Los valores predeterminados del CLI backend ahora son parte de la superficie del plugin:

  1. Los plugins los registran con api.registerCliBackend(...).
  2. El id del backend se convierte en el prefijo del proveedor en las referencias de modelo.
  3. La configuración del usuario en agents.defaults.cliBackends.<id> sigue sobrescribiendo el valor predeterminado del plugin.
  4. La limpieza de la configuración específica del backend permanece bajo el control del plugin a través del hook opcional normalizeConfig.
api.registerTextTransforms({
input: [
{ from: /red basket/g, to: "blue basket" },
{ from: /paper ticket/g, to: "digital ticket" },
{ from: /left shelf/g, to: "right shelf" },
],
output: [
{ from: /blue basket/g, to: "red basket" },
{ from: /digital ticket/g, to: "paper ticket" },
{ from: /right shelf/g, to: "left shelf" },
],
});

Los CLI backends no reciben llamadas de herramientas de OpenClaw directamente, pero un backend puede optar por una superposición de configuración MCP generada con bundleMcp: true.

Cuando el bundle MCP está habilitado, OpenClaw:

  1. Genera un servidor HTTP MCP de loopback que expone las herramientas del Gateway al proceso CLI.
  2. Autentica el puente con un token por sesión (OPENCLAW_MCP_TOKEN).
  3. Limita el acceso a herramientas al contexto actual de sesión, cuenta y canal.
  4. Carga los servidores bundle-MCP habilitados para el espacio de trabajo actual.
  5. Los fusiona con cualquier configuración MCP existente del backend.
  6. Reescribe la configuración de lanzamiento usando el modo de integración propiedad del backend.
  1. Sin llamadas directas a herramientas de OpenClaw. OpenClaw no inyecta llamadas de herramientas en el protocolo del CLI backend. Los backends solo ven las herramientas del Gateway cuando optan por bundleMcp: true.
  2. El streaming es específico del backend. Algunos backends transmiten JSONL; otros almacenan en búfer hasta la salida.
  3. Las salidas estructuradas dependen del formato JSON del CLI.
  4. Las sesiones de Codex CLI se reanudan mediante salida de texto (sin JSONL), lo cual es menos estructurado que la ejecución inicial --json. Las sesiones de OpenClaw siguen funcionando normalmente.
  1. CLI no encontrado: configura command con una ruta absoluta.
  2. Nombre de modelo incorrecto: usa modelAliases para mapear provider/model → modelo CLI.
  3. Sin continuidad de sesión: asegúrate de que sessionArg esté configurado y sessionMode no sea none (Codex CLI actualmente no puede reanudar con salida JSON).
  4. Imágenes ignoradas: configura imageArg (y verifica que el CLI admita rutas de archivo).

¿Necesitas más ayuda? Consulta nuestro AI Setup Assistant.

OpenClaw

OpenClaw Expert

Sigues atascado?

Si esta pagina no resolvio tu caso, pregunta a OpenClaw Expert para pasos concretos.