Se o serviço upstream disponibilizar uma API de modelo HTTP normal, crie um
Plugin de provedor. Se o runtime upstream
gerenciar sessões completas de agentes, eventos de ferramentas, Compaction
ou o estado de tarefas em segundo plano, use um
harness de agente.
O que o Plugin gerencia
Um Plugin de backend de CLI tem três contratos:
O manifesto contém metadados de descoberta: ele não executa a CLI nem registra comportamentos de runtime. O comportamento de runtime começa quando a entrada do Plugin chama
api.registerCliBackend(...).
Plugin de backend mínimo
1
Create package metadata
package.json
./src/index.ts, adicione openclaw.runtimeExtensions apontando para o arquivo JavaScript compilado correspondente. Consulte Pontos de entrada.2
Declare backend ownership
openclaw.plugin.json
cliBackends é a lista de propriedade do 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 baseada primeiro em descritores. Adicione-a quando a descoberta de modelos, a integração inicial ou o status precisarem reconhecer o backend sem carregar o runtime do Plugin. Use requiresRuntime: false somente quando esses descritores estáticos forem suficientes para a configuração.3
Register the backend
index.ts
cliBackends do manifesto. A config registrada é apenas o padrão; a configuração do usuário em agents.defaults.cliBackends.acme-cli é mesclada sobre ela durante o runtime.Formato da configuração
CliBackendConfig descreve como o OpenClaw deve iniciar e interpretar a CLI:
Prefira a menor configuração estática que corresponda à CLI. Adicione callbacks do Plugin somente para comportamentos que realmente pertençam ao backend.
Hooks avançados do backend
CliBackendPlugin também pode definir:
Mantenha esses hooks sob responsabilidade do provedor. Não adicione ramificações específicas de CLI ao núcleo quando um hook do backend puder expressar o comportamento.
runtimeArtifact pertence ao Plugin e não pode ser substituído pelo usuário. Ele é consultado somente quando um turno ativo de inferência emite ou revalida uma autoridade verificada de configuração; execuções normais da CLI não o exigem. Um backend sem essa declaração não pode emitir uma autoridade verificada de configuração da CLI. Uma declaração bundled-package-tree identifica o proprietário exato de package.json e exige que o ponto de entrada do pacote seja o comando. O OpenClaw calcula o hash da árvore completa e delimitada do pacote instalado, incluindo dependências aninhadas, e interrompe de forma segura no caso de links simbólicos com redirecionamento, inicializadores fora do pacote declarado, declarações de dependências externas obrigatórias, árvores grandes demais e scripts desconhecidos. Declare isso somente quando essa árvore contiver a implementação completa da inferência; integrações opcionais de ferramentas não tornam seguro um grafo de implementação externo.
Se o mesmo backend também incluir um executável nativo autocontido, liste seus nomes-base canônicos em nativeExecutableNames. Outros comandos nativos permanecem não verificados mesmo quando um usuário substitui o comando do backend.
ctx.executionMode é "agent" para turnos normais e "side-question" para
chamadas efêmeras de /btw. Use-o quando a CLI precisar de flags avulsas diferentes,
como para desabilitar ferramentas nativas, persistência de sessão ou comportamento de retomada no
BTW. Se um backend normalmente tiver nativeToolMode: "always-on", mas seus
argv de pergunta paralela desabilitarem essas ferramentas de forma confiável, defina também
sideQuestionToolMode: "disabled"; caso contrário, o OpenClaw falhará de forma segura quando o BTW
exigir uma execução da CLI sem ferramentas.
Defina nativeToolMode: "selectable" somente quando resolveExecutionArgs puder desabilitar
todas as ferramentas nativas do backend em uma execução individual. Para essas execuções restritas,
ctx.toolAvailability.native é uma tupla vazia e
ctx.toolAvailability.mcp é a lista de permissões MCP exata e isolada pelo host. O hook
deve substituir flags de ferramentas conflitantes e retornar argv que imponha ambos os valores;
o OpenClaw o chama uma vez com o argv final de uma execução nova ou de retomada e falha de forma segura quando
o backend não consegue impor a restrição. Nesse contexto, é seguro aprovar automaticamente os nomes MCP
somente porque o host já limitou a configuração MCP gerada
a esses servidores e ferramentas.
ownsNativeCompaction: desativando a Compaction do OpenClaw
Se o seu backend executar um agente que compacta sua própria transcrição, defina
ownsNativeCompaction: true para que o sumarizador de proteção do OpenClaw nunca seja executado
em suas sessões — o ciclo de vida da Compaction da CLI não realiza nenhuma operação e o
turno prossegue. claude-cli declara essa opção porque o Claude Code realiza a Compaction
internamente, sem um endpoint do harness. Sessões de harness nativo, como o Codex,
continuam sendo encaminhadas ao endpoint de Compaction do próprio harness.
Declare essa opção somente quando todas as condições a seguir forem atendidas; caso contrário, uma sessão
adiada que excedeu o orçamento pode continuar acima do orçamento ou ficar obsoleta (o OpenClaw deixa de
resgatá-la):
- o backend compacta ou limita de forma confiável sua própria transcrição à medida que ela se aproxima do limite da janela;
- ele persiste uma sessão retomável para que o estado compactado seja preservado entre os turnos
(por exemplo,
--resume/--session-id); - não se trata de uma sessão de Compaction de harness nativo — sessões que correspondem a
agentHarnessIdsão encaminhadas ao endpoint do harness.
Ponte de ferramentas MCP
Por padrão, backends de CLI não recebem as ferramentas do OpenClaw. Se a CLI puder consumir uma configuração MCP, habilite-a explicitamente:
Habilite a ponte somente quando a CLI realmente puder consumi-la. Se a CLI tiver
sua própria camada de ferramentas integrada que não possa ser desabilitada, defina
nativeToolMode: "always-on" para que o OpenClaw possa falhar de forma segura quando um chamador exigir a ausência de ferramentas
nativas. Se ela puder desabilitar todas as ferramentas nativas por execução, use "selectable" com o
contrato de resolveExecutionArgs descrito acima.
Configuração do usuário
Os usuários podem substituir qualquer padrão do backend:command, quando o binário estiver fora de PATH.
Verificação
Para plugins incluídos, adicione um teste específico para o construtor e o registro de configuração e, em seguida, execute a faixa de testes direcionada do Plugin:Lista de verificação
package.json contém openclaw.extensions e entradas de runtime compiladas para pacotes publicadosopenclaw.plugin.json declara cliBackends e um activation.onStartup intencionalsetup.cliBackends está presente quando a configuração/descoberta de modelos precisa detectar o backend antes da inicializaçãoapi.registerCliBackend(...) usa o mesmo id de backend que o manifestoAs substituições do usuário em
agents.defaults.cliBackends.<id> continuam prevalecendoAs configurações de sessão, prompt do sistema, imagem e analisador de saída correspondem ao contrato real da CLI
Testes direcionados e pelo menos um teste rápido real da CLI comprovam o caminho do backend
Relacionados
- Backends de CLI — configuração do usuário e comportamento de runtime
- Criação de plugins — fundamentos de pacotes e manifestos
- Visão geral do SDK de Plugin — referência da API de registro
- Manifesto do Plugin —
cliBackendse descritores de configuração - Harness do agente — runtimes completos de agentes externos