Backends da CLI (runtime de fallback)
O OpenClaw pode executar CLIs de IA locais como um fallback somente de texto quando os provedores de API estão indisponíveis, com limite de taxa ou temporariamente se comportando mal. Isso é intencionalmente conservador:- As ferramentas do OpenClaw não são injetadas diretamente, mas backends com
bundleMcp: truepodem receber ferramentas do gateway por meio de uma bridge MCP de loopback. - Streaming JSONL para CLIs que oferecem suporte.
- Sessões são compatíveis (assim os turnos seguintes permanecem coerentes).
- Imagens podem ser repassadas se a CLI aceitar caminhos de imagem.
Início rápido para iniciantes
Você pode usar a CLI do Codex sem nenhuma configuração (o plugin OpenAI empacotado registra um backend padrão):agents.defaults.cliBackends.
Como usar como fallback
Adicione um backend de CLI à sua lista de fallbacks para que ele só seja executado quando os modelos primários falharem:- Se você usar
agents.defaults.models(lista de permissões), também precisará incluir seus modelos de backend de CLI ali. - Se o provedor primário falhar (autenticação, limites de taxa, timeouts), o OpenClaw tentará o backend de CLI em seguida.
Visão geral da configuração
Todos os backends de CLI ficam em:codex-cli, my-cli).
O id do provedor se torna o lado esquerdo da sua referência de modelo:
Exemplo de configuração
Como funciona
- Seleciona um backend com base no prefixo do provedor (
codex-cli/...). - Monta um prompt de sistema usando o mesmo prompt + contexto de workspace do OpenClaw.
- Executa a CLI com um id de sessão (se houver suporte) para que o histórico permaneça consistente.
- Analisa a saída (JSON ou texto simples) e retorna o texto final.
- Persiste ids de sessão por backend, para que acompanhamentos reutilizem a mesma sessão da CLI.
O backend empacotado
claude-cli da Anthropic voltou a ter suporte. A equipe da Anthropic
nos informou que o uso da Claude CLI no estilo OpenClaw voltou a ser permitido, então o OpenClaw trata
o uso de claude -p como autorizado para esta integração, a menos que a Anthropic publique
uma nova política.codex-cli da OpenAI repassa o prompt de sistema do OpenClaw por meio da
substituição de configuração model_instructions_file do Codex (-c model_instructions_file="..."). O Codex não expõe uma flag no estilo Claude como
--append-system-prompt, então o OpenClaw grava o prompt montado em um
arquivo temporário para cada nova sessão da CLI do Codex.
O backend empacotado claude-cli da Anthropic recebe o snapshot de Skills do OpenClaw
de duas formas: o catálogo compacto de Skills do OpenClaw no prompt de sistema anexado e
um plugin temporário do Claude Code passado com --plugin-dir. O plugin contém
somente as Skills elegíveis para aquele agente/sessão, então o resolvedor nativo de Skills do Claude Code
vê o mesmo conjunto filtrado que o OpenClaw anunciaria no prompt.
Substituições de env/chave de API de Skill ainda são aplicadas pelo OpenClaw ao ambiente do processo filho para a execução.
Sessões
- Se a CLI oferece suporte a sessões, defina
sessionArg(por exemplo,--session-id) ousessionArgs(placeholder{sessionId}) quando o ID precisar ser inserido em várias flags. - Se a CLI usa um subcomando de retomada com flags diferentes, defina
resumeArgs(substituiargsao retomar) e, opcionalmente,resumeOutput(para retomadas que não usam JSON). sessionMode:always: sempre envia um id de sessão (novo UUID se nenhum estiver armazenado).existing: só envia um id de sessão se um já tiver sido armazenado antes.none: nunca envia um id de sessão.
serialize: truemantém as execuções da mesma faixa em ordem.- A maioria das CLIs serializa em uma faixa de provedor.
- O OpenClaw descarta a reutilização da sessão de CLI armazenada quando o estado de autenticação do backend muda, incluindo novo login, rotação de token ou mudança de credencial do perfil de autenticação.
Imagens (repasse)
Se sua CLI aceitar caminhos de imagem, definaimageArg:
imageArg estiver definido, esses
caminhos serão passados como args da CLI. Se imageArg estiver ausente, o OpenClaw acrescenta os
caminhos dos arquivos ao prompt (injeção de caminho), o que é suficiente para CLIs que carregam
arquivos locais automaticamente a partir de caminhos simples.
Entradas / saídas
output: "json"(padrão) tenta analisar JSON e extrair texto + id de sessão.- Para a saída JSON da CLI do Gemini, o OpenClaw lê o texto da resposta de
responsee o uso destatsquandousageestá ausente ou vazio. output: "jsonl"analisa streams JSONL (por exemplo, Codex CLI--json) e extrai a mensagem final do agente mais identificadores de sessão quando presentes.output: "text"trata stdout como a resposta final.
input: "arg"(padrão) passa o prompt como o último arg da CLI.input: "stdin"envia o prompt por stdin.- Se o prompt for muito longo e
maxPromptArgCharsestiver definido, stdin será usado.
Padrões (de propriedade do plugin)
O plugin OpenAI empacotado também registra um padrão paracodex-cli:
command: "codex"args: ["exec","--json","--color","never","--sandbox","workspace-write","--skip-git-repo-check"]resumeArgs: ["exec","resume","{sessionId}","--color","never","--sandbox","workspace-write","--skip-git-repo-check"]output: "jsonl"resumeOutput: "text"modelArg: "--model"imageArg: "--image"sessionMode: "existing"
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"]
gemini no PATH (brew install gemini-cli ou
npm install -g @google/gemini-cli).
Observações sobre o JSON da CLI do Gemini:
- O texto da resposta é lido do campo JSON
response. - O uso recorre a
statsquandousageestá ausente ou vazio. stats.cachedé normalizado paracacheReadno OpenClaw.- Se
stats.inputestiver ausente, o OpenClaw deriva os tokens de entrada destats.input_tokens - stats.cached.
command absoluto).
Padrões de propriedade do plugin
Os padrões de backend de CLI agora fazem parte da superfície do plugin:- Os plugins os registram com
api.registerCliBackend(...). - O
iddo backend se torna o prefixo do provedor em referências de modelo. - A configuração do usuário em
agents.defaults.cliBackends.<id>ainda substitui o padrão do plugin. - A limpeza de configuração específica do backend continua sendo de propriedade do plugin por meio do hook opcional
normalizeConfig.
input reescreve o prompt de sistema e o prompt do usuário passados à CLI. output
reescreve deltas transmitidos do assistente e o texto final analisado antes que o OpenClaw processe
seus próprios marcadores de controle e a entrega ao canal.
Para CLIs que emitem JSONL compatível com stream-json do Claude Code, defina
jsonlDialect: "claude-stream-json" na configuração desse backend.
Overlays MCP empacotados
Backends de CLI não recebem chamadas de ferramenta do OpenClaw diretamente, mas um backend pode optar por uma sobreposição de configuração MCP gerada combundleMcp: true.
Comportamento empacotado atual:
claude-cli: arquivo de configuração MCP estrito geradocodex-cli: substituições de configuração inline paramcp_serversgoogle-gemini-cli: arquivo de configurações de sistema do Gemini gerado
- inicia um servidor MCP HTTP de loopback que expõe ferramentas do gateway ao processo da CLI
- autentica a bridge com um token por sessão (
OPENCLAW_MCP_TOKEN) - limita o acesso às ferramentas à sessão, conta e contexto de canal atuais
- carrega servidores bundle-MCP habilitados para o workspace atual
- os mescla com qualquer forma existente de configuração/ajustes MCP do backend
- reescreve a configuração de inicialização usando o modo de integração de propriedade do backend da extensão proprietária
Limitações
- Sem chamadas diretas de ferramenta do OpenClaw. O OpenClaw não injeta chamadas de ferramenta no
protocolo do backend da CLI. Os backends só veem ferramentas do gateway quando optam por
bundleMcp: true. - O streaming é específico do backend. Alguns backends fazem streaming em JSONL; outros fazem buffer até a saída.
- Saídas estruturadas dependem do formato JSON da CLI.
- Sessões da CLI do Codex retomam por saída de texto (sem JSONL), o que é menos
estruturado do que a execução inicial com
--json. As sessões do OpenClaw ainda funcionam normalmente.
Solução de problemas
- CLI não encontrada: defina
commandcomo um caminho completo. - Nome de modelo incorreto: use
modelAliasespara mapearprovider/model→ modelo da CLI. - Sem continuidade de sessão: garanta que
sessionArgesteja definido e quesessionModenão sejanone(a CLI do Codex atualmente não consegue retomar com saída JSON). - Imagens ignoradas: defina
imageArg(e verifique se a CLI oferece suporte a caminhos de arquivo).