Se o serviço upstream expuser uma API de modelo HTTP normal, escreva um
plugin de provedor. Se o runtime upstream
possuir sessões completas de agente, eventos de ferramenta, compaction ou estado de
tarefas em segundo plano, use um harness de agente.
O que o plugin possui
Um plugin de backend de CLI tem três contratos:| Contrato | Arquivo | Finalidade |
|---|---|---|
| Entrada do pacote | package.json | Aponta o OpenClaw para o módulo de runtime do plugin |
| Propriedade do manifesto | openclaw.plugin.json | Declara o id do backend antes do carregamento do runtime |
| Registro do runtime | index.ts | Chama api.registerCliBackend(...) com padrões de comando |
api.registerCliBackend(...).
Plugin de backend mínimo
Criar metadados do pacote
package.json
./src/index.ts, adicione openclaw.runtimeExtensions apontando para
o par JavaScript compilado. Consulte Pontos de entrada.Declarar propriedade do backend
openclaw.plugin.json
cliBackends é a lista de propriedade de runtime. Ela permite que o OpenClaw carregue automaticamente o
plugin quando a configuração ou a seleção de modelo mencionar acme-cli/....setup.cliBackends é a superfície de configuração descriptor-first. Adicione-a quando
a descoberta de modelos, o onboarding ou o status devem reconhecer o backend sem
carregar o runtime do plugin. Use requiresRuntime: false somente quando esses descritores estáticos
forem suficientes para a configuração.Formato da configuração
CliBackendConfig descreve como o OpenClaw deve iniciar e analisar a CLI:
| Campo | Uso |
|---|---|
command | Nome do binário ou caminho absoluto do comando |
args | argv base para execuções novas |
resumeArgs | argv alternativo para sessões retomadas; aceita {sessionId} |
output / resumeOutput | Analisador: json, jsonl ou text |
input | Transporte do prompt: arg ou stdin |
modelArg | Flag usada antes do id do modelo |
modelAliases | Mapeia ids de modelo do OpenClaw para ids nativos da CLI |
sessionArg / sessionArgs | Como passar um id de sessão |
sessionMode | always, existing ou none |
sessionIdFields | Campos JSON que o OpenClaw lê da saída da CLI |
systemPromptArg / systemPromptFileArg | Transporte do prompt do sistema |
systemPromptWhen | first, always ou never |
imageArg / imageMode | Suporte a caminho de imagem |
serialize | Mantém execuções do mesmo backend ordenadas |
reliability.watchdog | Ajuste de timeout sem saída |
Hooks avançados de backend
CliBackendPlugin também pode definir:
| Hook | Uso |
|---|---|
normalizeConfig(config, context) | Reescrever configuração legada do usuário após a mesclagem |
resolveExecutionArgs(ctx) | Adicionar flags com escopo de solicitação, como esforço de raciocínio ou isolamento de pergunta lateral |
prepareExecution(ctx) | Criar pontes temporárias de autenticação ou configuração antes da inicialização |
transformSystemPrompt(ctx) | Aplicar uma transformação final de prompt do sistema específica da CLI |
textTransforms | Substituições bidirecionais de prompt/saída |
defaultAuthProfileId | Preferir um perfil de autenticação específico do OpenClaw |
authEpochMode | Decidir como alterações de autenticação invalidam sessões de CLI armazenadas |
nativeToolMode | Declarar se a CLI tem ferramentas nativas sempre ativas |
sideQuestionToolMode | Declarar ferramentas nativas desativadas para perguntas laterais /btw |
bundleMcp / bundleMcpMode | Optar pela ponte local loopback de ferramentas MCP do OpenClaw |
ownsNativeCompaction | O backend possui sua própria compaction - o OpenClaw adia |
ctx.executionMode é "agent" para turnos normais e "side-question" para
chamadas efêmeras /btw. Use-o quando a CLI precisar de flags one-shot diferentes, como
desativar ferramentas nativas, persistência de sessão ou comportamento de retomada para BTW. Se um
backend normalmente tiver nativeToolMode: "always-on", mas seu argv de pergunta lateral
desativar essas ferramentas de forma confiável, também defina sideQuestionToolMode: "disabled";
caso contrário, o OpenClaw falha fechado quando BTW exige uma execução de CLI sem ferramentas.
ownsNativeCompaction: optar por sair da compaction do OpenClaw
Se seu backend executa um agente que compacta sua própria transcrição, defina
ownsNativeCompaction: true para que o sumarizador de salvaguarda do OpenClaw nunca rode contra suas
sessões - o ciclo de vida de compaction da CLI retorna um no-op e o turno prossegue. claude-cli
declara isso porque o Claude Code compacta internamente sem endpoint de harness. Sessões de harness nativo,
como o Codex, continuam roteando para o endpoint de compaction do harness.
Declare isso somente quando todos os itens a seguir forem verdadeiros, ou uma sessão acima do orçamento adiada pode
permanecer acima do orçamento / ficar obsoleta (o OpenClaw não a resgata mais):
- o backend compacta ou limita sua própria transcrição de forma confiável à medida que se aproxima de sua janela;
- ele persiste uma sessão retomável para que o estado compactado sobreviva aos turnos
(por exemplo,
--resume/--session-id); - ele não é uma sessão de compaction de harness nativo - sessões correspondentes a
agentHarnessIdsão roteadas para o endpoint do harness.
Ponte de ferramentas MCP
Backends de CLI não recebem ferramentas do OpenClaw por padrão. Se a CLI puder consumir uma configuração MCP, opte explicitamente:| Modo | Uso |
|---|---|
claude-config-file | CLIs que aceitam um arquivo de configuração MCP |
codex-config-overrides | CLIs que aceitam substituições de configuração no argv |
gemini-system-settings | CLIs que leem configurações MCP do diretório de configurações do sistema |
nativeToolMode: "always-on" para que o OpenClaw possa falhar fechado quando um chamador exigir nenhuma ferramenta nativa.
Configuração do usuário
Usuários podem substituir qualquer padrão de backend:command quando o binário está fora de PATH.
Verificação
Para plugins empacotados, adicione um teste focado no builder e no registro de configuração, depois execute a faixa de testes direcionada do plugin:Lista de verificação
package.json tem openclaw.extensions e entradas de runtime compiladas para pacotes publicadosopenclaw.plugin.json declara cliBackends e activation.onStartup intencionalsetup.cliBackends está presente quando a configuração/descoberta de modelo deve ver o backend frioapi.registerCliBackend(...) usa o mesmo ID de backend que o manifestoAs substituições do usuário em
agents.defaults.cliBackends.<id> ainda prevalecemAs configurações de sessão, prompt de sistema, imagem e parser de saída correspondem ao contrato real da CLI
Testes direcionados e pelo menos um smoke test de CLI ao vivo comprovam o caminho do backend
Relacionados
- Backends de CLI - configuração do usuário e comportamento de runtime
- Criando plugins - fundamentos de pacote e manifesto
- Visão geral do SDK de Plugin - referência da API de registro
- Manifesto de Plugin -
cliBackendse descritores de configuração - Harness de agente - runtimes completos de agente externo