Os vários agentes e os vários modelos do OpenClaw são duas camadas diferentes de um único arquivo de configuração: vários agentes são entradas identificadas por chave em agents.entries, cada uma com seu próprio workspace, diretório de estado e armazenamento de sessões, enquanto vários modelos são valores model por agente dentro dessas entradas. Duas outras camadas ficam ao lado delas — bindings decide qual agente responde, e uma cadeia de fallback decide o que um agente faz quando seu modelo falha. Editar a camada errada é o motivo mais comum para uma alteração parecer não fazer nada.
Executar mais agentes não custa nada em software. A visão geral da documentação do OpenClaw afirma que ele é desenvolvido abertamente pela "OpenClaw Foundation, uma organização independente 501(c)(3)" com "Nenhum plano pago, nenhuma telemetria por padrão além de uma verificação de versão que você pode desativar, nenhum laboratório é proprietário dele", e openclaw.ai acrescenta "Nenhuma assinatura. Nenhum plano hospedado. Nenhum token." O pacote npm openclaw é MIT, com latest em 2026.9.5 ao lado de um canal extended-stable em 2026.7.35 e engines.node de >=24.16.0 <25 || >=26.1.0 (registro do npm, verificado em 21 de setembro de 2026). O que um segundo agente acrescenta à sua conta são tokens.
Vários agentes no OpenClaw: quatro camadas e o sintoma de editar a camada errada
| Camada | Chave de configuração | O que isso decide | Sintoma quando esta é a camada de que você realmente precisava |
|---|---|---|---|
| Roster de agentes | agents.entries.<id> | Workspace, diretório de estado, armazenamento de sessões, skills e política de ferramentas separados | Duas personas continuam lendo as anotações e o histórico uma da outra |
| Roteamento de canais | bindings[] | Qual agente responde a uma mensagem recebida em qual canal ou conta | O roteamento informa AGENT_SELECTION_REQUIRED |
| Escolha do modelo | agents.entries.<id>.model | Qual modelo executa os turnos desse agente | Uma alteração de /model em um chat deixou todos os outros chats inalterados |
| Cadeia de fallback | model.fallbacks, agents.defaults.model | Qual modelo assume após uma falha do lado do provedor | Um erro de estouro de contexto nunca acionou fallback, porque não é um gatilho de failover |
As quatro foram consultadas na própria documentação do OpenClaw em 21 de setembro de 2026: entries e vários agentes, agent bindings e model failover. Dois formatos de tutoriais antigos estão obsoletos: um roster em array agents.list é o formato legado que o Doctor migra, e um marcador default: true em uma entrada foi aposentado — a página de entries afirma claramente que "default foi aposentado" e que operações com vários agentes precisam de um binding ou de um destino explícito. O OpenClaw também usou dois nomes anteriores, portanto qualquer configuração da era Moltbot ou Clawdbot é anterior a este esquema.
Configuração de vários agentes no OpenClaw: configuração mínima com dois agentes e dois modelos
Este fragmento presume que você já tem um bloco models.providers funcional — melhor API para OpenClaw contém a configuração da Kunavo, incluindo api: "anthropic-messages" e a URL base publicada em URL base da Anthropic. O que segue é apenas a camada de agentes e roteamento.
{
"agents": {
"defaults": {
"modelSelectionScope": "session",
"model": {
"primary": "kunavo/claude-haiku-4-5",
"fallbacks": [
"kunavo/claude-sonnet-5"
]
}
},
"entries": {
"ops": {
"name": "Ops",
"workspace": "~/.openclaw/workspace-ops",
"agentDir": "~/.openclaw/agents/ops/agent",
"model": "kunavo/claude-haiku-4-5",
"modelPolicy": {
"allow": [
"kunavo/claude-haiku-4-5"
]
}
},
"build": {
"name": "Build",
"workspace": "~/.openclaw/workspace-build",
"agentDir": "~/.openclaw/agents/build/agent",
"model": {
"primary": "kunavo/claude-opus-5",
"fallbacks": [
"kunavo/claude-sonnet-5"
]
},
"utilityModel": "kunavo/claude-haiku-4-5"
}
}
},
"bindings": [
{
"agentId": "build",
"match": {
"channel": "discord",
"accountId": "build"
}
},
{
"agentId": "ops",
"match": {
"channel": "discord",
"accountId": "*"
}
}
]
}Quatro coisas nesse bloco são essenciais. Cada agente tem seu próprio agentDir, porque a página de vários agentes alerta: "Nunca reutilize agentDir entre agentes — isso causa colisões no estado de autenticação/sessão." O agente ops usa a forma de string de model, que a página de entries define como "um modelo principal estrito por agente, sem fallback de modelo" — portanto uma falha é exibida em vez de mover silenciosamente o trabalho rotineiro para uma faixa mais cara. O agente build usa a forma de objeto com uma lista explícita fallbacks, que é como você habilita um agente; a página de failover acrescenta que um agente pode definir apenas model: { fallbacks: [...] } e continuar herdando o modelo principal compartilhado. E o binding específico fica acima do curinga, porque dentro de uma camada de correspondência "a primeira entrada de bindings correspondente vence."
Os padrões de workspace diferem entre o agente padrão e os demais e vale a pena defini-los explicitamente: o workspace do agente padrão é <stateDir>/workspace, enquanto os outros agentes assumem <stateDir>/workspace-<agentId>. A memória acompanha o workspace, pois o mecanismo integrado do OpenClaw "lembra das coisas escrevendo arquivos Markdown simples no workspace do seu agente" — portanto isolar os workspaces é o que isola a memória. Os modos de permissão de sessão são outro eixo: read-only, guarded, workspace e full, onde "full exige operator.admin. Os outros modos exigem operator.write" (modos de permissão, 21 de setembro de 2026). Um modelo barato em um agente permissivo ainda é um agente permissivo.
O que agentes separados separam — e o que não separam
| Item | Por agente? | Onde fica |
|---|---|---|
| Arquivos do workspace e memória em Markdown | Sim | agents.entries.*.workspace |
| Histórico de chat | Sim | <agentDir>/openclaw-agent.sqlite |
| Perfis de autenticação armazenados | Sim | agentDir; alterações de autenticação exigem --agent |
| Habilidades | Sim | Uma lista explícita agents.entries.*.skills substitui os padrões em vez de mesclá-los |
| Ferramentas, sandbox, elevado | Sim | Existem chaves por agente, mas a precedência difere por chave — tools.elevated, por exemplo, "só pode restringir ainda mais" |
| Modelo principal, fallbacks, lista de permissões | Sim | agents.entries.*.model, .modelPolicy.allow |
Provedor baseUrl, apiKey, dialeto | Não | models.providers é de todo o Gateway |
| Chaves de provedor provenientes do ambiente | Não | Um processo de Gateway, um ambiente |
openclaw models set | Não | Global; rejeita --agent e grava os padrões do agente |
Este é o limite que as tabelas de preços não mostram. Entradas separadas oferecem arquivos, memória, histórico, política de ferramentas e perfis de autenticação armazenados separados. Elas não, por si só, dão a cada agente sua própria chave de API para um provedor personalizado configurado pelo ambiente — o esquema documentado por agente não tem nenhum campo baseUrl, apiKey ou providers. A ausência na documentação não prova que o código proíba isso, portanto leia como não documentado; se precisar de separação rígida de chaves por tenant, execute Gateways separados. Um limite relacionado se aplica à identidade: o exemplo de divisão de DMs do WhatsApp do OpenClaw observa que "as respostas continuam vindo do mesmo número do WhatsApp — não há identidade de remetente por agente", e que "os chats diretos são recolhidos na chave de sessão principal do agente por padrão, portanto o isolamento verdadeiro exige um agente por pessoa." Essa frase é declarada para o WhatsApp; consulte a página do seu próprio canal antes de generalizá-la.
Um limite de capacidade a observar ao dividir funções: a Kunavo não oferece modelos de conversão de texto em fala, fala em texto ou embeddings, portanto um agente que precise de saída de voz ou de um índice vetorial terá de chamar um provedor externo para essa etapa.
Vários modelos no OpenClaw: estrito, fallback, política e a faixa utility
A seleção de modelos por agente tem quatro controles que vale a pena configurar deliberadamente. model como string é estrito. { primary, fallbacks: [...] } habilita o agente para failover. modelPolicy.allow é uma lista de permissões que "substitui a política padrão desse agente" — aceitando aliases, referências exatas e curingas finais —, que é como você impede que um agente rotineiro chegue a um modelo caro. E utilityModel é um modelo separado, geralmente mais barato, para "tarefas internas curtas, como títulos de sessões e threads gerados", com uma substituição por agente.
A lista documentada de gatilhos é específica. O OpenClaw avança em "falhas de autenticação, limites de taxa e esgotamento do período de espera, erros de provedor sobrecarregado/ocupado, erros de failover com formato de timeout, desativações de cobrança, model_not_found", e em outros erros não reconhecidos enquanto houver candidatos — mas não em erros de estouro de contexto, que permanecem na lógica de compactação e nova tentativa, nem em "cancelamentos explícitos que não têm formato de timeout/failover". Fora de conversas de grupo e canal, isso é visível: essas superfícies publicam um aviso de status no formato Model Fallback: <fallback> (selected <primary>; <reason>) e um aviso correspondente de limpeza, enquanto conversas de grupo e canal "suprimem os avisos visíveis mantendo o mesmo estado de fallback", portanto não conte com vê-lo em uma sala compartilhada. Uma seleção explícita de sessão — /model, o seletor de modelos, session_status(model=...) ou sessions.patch — é estrita: se esse modelo falhar antes de produzir uma resposta, o OpenClaw informa a falha em vez de responder usando um fallback configurado. O --model de um cron job não é um desses casos; a documentação o chama de modelo principal do job, que ainda usa os fallbacks configurados, a menos que o job defina payload.fallbacks: [].
Mais dois mecanismos determinam se sua intenção será preservada. Os parâmetros da solicitação são mesclados em quatro camadas, de agents.defaults.params a agents.entries.*.params, com as camadas posteriores substituindo por chave. E o paralelismo tem um teto calculado: agents.defaults.maxConcurrent assume max(8, available CPU parallelism * 4) por padrão entre sessões, enquanto cada sessão permanece serializada — duas mensagens para um agente não são executadas ao mesmo tempo. Para escolher qual modelo pertence a qual função, Opus vs Sonnet vs Haiku aborda o aspecto de capacidade.
Atribuição de custos por rota, não por agente
Como nenhum comando documentado informa os gastos por agente, atribua-os por rota. A aritmética abaixo é ilustrativa, não uma fatura medida nem um limite máximo. Ela pressupõe um mês de 30 dias, o padrão documentado de heartbeat 30m (1.440 execuções), 300 tokens de saída por heartbeat, nenhum acerto de cache e uma via de conversa principal com 8 milhões de tokens de entrada e 500 mil de saída. Os valores de contexto de ~100 mil e ~2–5 mil por execução são uma ilustração do próprio OpenClaw sobre o que isolatedSession remove, não algo medido aqui; 3.000 é o ponto médio. As tarifas são preços atuais do catálogo da Kunavo por milhão de tokens.
| Opção | Entrada / saída presumidas por mês | Em Claude Haiku 4.5 | Em Claude Opus 5 |
|---|---|---|---|
| Heartbeat na sessão compartilhada, intervalo de 30m | 144.00M / 0.43M | $102.31 | $511.56 |
| O mesmo heartbeat com isolatedSession: true | 4.32M / 0.43M | $4.54 | $22.68 |
| Turnos da conversa principal | 8.00M / 0.50M | $7.35 | $36.75 |
| títulos e resumos do utilityModel | 0.20M / 0.02M | $0.21 | $1.05 |
Claude Haiku 4.5 lista $0.70 / $3.50 e Claude Opus 5 lista $3.50 / $17.50 por milhão de tokens de entrada / saída no catálogo atual. A conclusão importante: sob essas premissas, a via agendada domina. Um heartbeat de sessão compartilhada no modelo mais robusto custa aproximadamente $511.56 por mês, contra $4.54 para a mesma cadência com isolatedSession: true no modelo barato. O próprio OpenClaw diz isso — "Heartbeats executam turnos completos do agente. Intervalos menores consomem mais tokens" — e aponta isolatedSession, lightContext, um model mais barato e target: "none" como alavancas.
O truque do heartbeat barato tem um modo de falha documentado, e é por isso que isolatedSession é uma alavanca melhor do que apenas trocar o modelo. Os heartbeats "preservam o modelo de execução existente da sessão compartilhada após a conclusão da execução", portanto um heartbeat que trocou uma sessão para um modelo menor pode deixá-lo ativo para o próximo turno da sessão principal, que então poderá informar estouro de contexto — a mensagem de recuperação do OpenClaw chama isso de vazamento do modelo do heartbeat. O exemplo trabalhado na documentação usa um modelo local com uma janela de 32 mil, portanto o tamanho do risco depende de quanto menor é a janela de contexto do modelo do heartbeat em relação ao que a sessão compartilhada exige. Uma observação sobre o agendamento: o intervalo padrão documentado é 30m, alterado para 1h somente quando o modo de autenticação resolvido é Anthropic OAuth/token; assim, uma rota simples com chave de API mantém 30m, a menos que você defina heartbeat.every manualmente. Verifique seu próprio valor antes de fazer o orçamento.
Duas ressalvas sobre os valores em dólares. O valor do catálogo da Kunavo é um piso de cobrança, não um teto: quando o upstream informa sua cobrança, a fatura é o maior entre o custo do catálogo e o custo do upstream multiplicado pela margem aplicável. Além disso, um provedor personalizado declarado sem um objeto cost por modelo torna a própria leitura do OpenClaw inútil — o padrão é cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, exibindo $0 enquanto o fornecedor cobra normalmente. Declare cost, contextWindow e maxTokens em cada modelo adicionado e faça a conciliação com o livro-caixa do provedor. A recarga mínima da Kunavo é $10 em crédito pré-pago — um mínimo de financiamento, não uma taxa por tarefa nem uma assinatura. Consulte detalhes de cobrança e otimização de custos de IA.
Qual rota de compra se adapta a um Gateway multiagente
| Opção | Vantagens | O que você abre mão |
|---|---|---|
| Um Gateway, um provedor no estilo gateway | Vários agentes em várias famílias de modelos, uma chave e um saldo | Nenhuma separação de chaves por agente; as definições de provedor e as chaves de ambiente são compartilhadas |
| Um Gateway, perfis de autenticação armazenados por agente | Você quer que cada agente carregue sua própria credencial em seu próprio agentDir | Documentado apenas para perfis de autenticação — substituições de endpoint por agente não estão no esquema publicado |
| Gateways separados por tenant | A exigência é uma separação rígida de chaves, ambiente e gastos | Dois processos, duas configurações, dois caminhos de atualização |
| Conta de fornecedor direto por agente | Um único fornecedor o dia todo, e você quer o cache e os recursos de processamento em lote desse fornecedor | Outra família significa outra conta; cada uma tem suas próprias tarifas e controles |
| Modelo local na via agendada | Verificações de heartbeat limitadas, sem cobrança por solicitação | Hardware e manutenção, além da ressalva sobre vazamento do modelo do heartbeat acima |
| Agente baseado em assinatura | O uso intenso diário com tarifa fixa é mais adequado para você do que tokens medidos | O OpenClaw não vende uma assinatura própria; seria um cliente diferente |
Uma observação sobre dialetos, porque o cache é onde está o dinheiro. O bloco da Kunavo no guia relacionado declara api: "anthropic-messages", que o OpenClaw trata como um endpoint Anthropic não direto. Disso seguem duas consequências documentadas. Os cabeçalhos beta implícitos da Anthropic são suprimidos nesses endpoints, portanto recursos como o raciocínio intercalado precisam ser ativados por meio de um headers["anthropic-beta"] explícito, em vez de automaticamente. E o cache precisa ser solicitado: o OpenClaw define cacheRetention: "short" apenas para os provedores diretos anthropic e anthropic-vertex, enquanto "endpoints compatíveis com anthropic-messages personalizados" são compatíveis "quando cacheRetention é definido explicitamente" — portanto defina params.cacheRetention você mesmo, em vez de presumir um padrão (cache de prompts, 21 de setembro de 2026). Uma regra separada abrange o outro dialeto: uma rota openai-completions para um endpoint não nativo envia "nenhuma indicação de cache de prompts". Verifique o uso de cache informado na sua própria rota antes de orçar o contexto recorrente como acertos de cache. O cache de prompts cobre o lado das tarifas.
Verifique se foi aplicado onde você pretendia
openclaw config validate
openclaw gateway restart
openclaw agents list --bindings
openclaw models status --agent ops --json --check
openclaw models list --agent buildA validação da configuração verifica a estrutura, e o reinício do gateway a recarrega; nenhum dos dois comprova que uma solicitação cobrada foi bem-sucedida. openclaw agents list --bindings mostra o roteamento realmente carregado — prefira-o a --tree, que aparece nas páginas de conceitos, mas não na tabela de comandos da CLI. openclaw models status --agent <id> explica o padrão configurado desse agente, e models list --agent <id> mostra seu inventário. Se models set terminar com código diferente de zero para um provedor desconhecido, essa é a camada de modelos: o provedor precisa ser um plugin instalado ou estar declarado em models.providers. Se as mensagens não chegarem a nenhum agente, essa é a camada de roteamento. Se aparecerem execuções duplicadas quando vários agentes compartilharem um canal, o OpenClaw documenta as chaves de proteção contra loops de bots como salvaguarda — a documentação descreve prevenção, não uma causa-raiz; portanto, faça o diagnóstico antes de presumir.
Em seguida, execute uma tarefa limitada por agente e leia a cobrança registrada pela conta do seu provedor. A Kunavo não testou o OpenClaw em tempo de execução, com agente único ou múltiplos agentes: tudo acima foi extraído da documentação publicada do OpenClaw, e uma configuração publicada não é um teste de compatibilidade. Mantenha uma rota funcional disponível enquanto você testa. Comece pela configuração do provedor, compare a fatura operacional completa em preços do OpenClaw e crie uma conta Kunavo quando estiver pronto para financiar uma chave.
Perguntas frequentes
Como configuro vários agentes no OpenClaw?
Adicione uma entrada identificada por chave para cada agente em agents.entries, dê a cada um seu próprio workspace e seu próprio agentDir, e depois adicione um array bindings para que as mensagens recebidas sejam direcionadas a um agente. A documentação do OpenClaw é explícita: agentDir nunca deve ser compartilhado: "Nunca reutilize `agentDir` entre agentes — isso causa colisões no estado de autenticação/sessão." O equivalente na CLI é `openclaw agents add <id>` com --workspace, --agent-dir, --model e um --bind que pode ser repetido. Dois formatos encontrados em tutoriais antigos estão desatualizados: um roster agents.list é o formato legado que o Doctor migra, e um marcador `default: true` em uma entrada foi aposentado — a seleção de vários agentes agora ocorre por meio de um binding ou de um destino explícito. Consultado em docs.openclaw.ai em 21 de setembro de 2026; não testado em tempo de execução aqui.
Cada agente do OpenClaw pode usar um modelo diferente?
Sim. agents.entries.<id>.model define o modelo principal desse agente, e o formato que você escrever determina se ele pode usar fallback. A documentação do OpenClaw afirma que a "forma de string define um modelo principal estrito por agente, sem fallback de modelo; a forma de objeto { primary } também é estrita, a menos que você adicione fallbacks." Portanto, uma string simples em um modelo por agente faz com que um erro do provedor seja exibido como erro, em vez de mover silenciosamente esse agente para uma faixa de preço diferente. Use { primary, fallbacks: [...] } para habilitar isso para um agente, e { primary, fallbacks: [] } para tornar explícito o comportamento estrito. As referências de modelo sempre são qualificadas pelo provedor como provider/model. Verificado em 21 de setembro de 2026.
Cada agente pode ter sua própria chave de API ou endpoint de provedor?
O endpoint, não pelo esquema documentado por agente; a credencial, sim. models.providers — onde ficam baseUrl, apiKey e o dialeto da API — é um bloco de todo o Gateway, portanto todos os agentes em um Gateway compartilham as mesmas definições de provedor, e uma chave escrita ali como referência de ambiente é resolvida a partir do ambiente de processo desse único Gateway. O esquema de entrada por agente publicado em 21 de setembro de 2026 não tem campo baseUrl, apiKey ou providers, e agents.entries.*.models contém apenas params, agentRuntime e codeMode. O que é por agente é o perfil de autenticação armazenado no agentDir desse agente, que contém credenciais api_key, token e OAuth: os subcomandos de autenticação de models aceitam --agent, e as alterações de autenticação exigem esse parâmetro quando há vários agentes configurados. A ausência na documentação não prova que o código proíba um endpoint por agente, portanto trate o lado do endpoint como não documentado, não como impossível. Se precisar de separação rígida por tenant, execute Gateways separados.
Por que mudar o modelo no chat não mudou nada?
Porque o escopo de gravação padrão é a sessão em que você digitou. O OpenClaw documenta que agents.defaults.modelSelectionScope assume o valor "session": "mudar um modelo em um chat não muda outros chats nem o padrão configurado, inclusive quando o chamador é proprietário/administrador." Use /model com -a/--agent para gravar o modelo principal do agente ou -g/--global para o padrão compartilhado. Observe também que a CLI `openclaw models set` é global e rejeita --agent, portanto não pode ser usada para definir o modelo de um agente — edite agents.entries.<id>.model. Comportamento documentado verificado em 21 de setembro de 2026.
O que significa AGENT_SELECTION_REQUIRED?
Significa que o roteamento não encontrou nenhum binding para aquela mensagem recebida e se recusou a adivinhar. A documentação do OpenClaw afirma que, com vários agentes configurados, "Se nenhum estiver disponível em uma configuração com vários agentes, o roteamento informa AGENT_SELECTION_REQUIRED e solicita que você adicione um binding." A ordem de correspondência documentada verifica match.peer, match.guildId, match.teamId, uma correspondência exata de match.accountId e depois accountId "*" — terminando em um fallback para agente único que se aplica "somente quando exatamente um agente está configurado; frotas explicitamente com vários agentes sem um binding correspondente falham de modo fechado." Não há um proprietário abrangente quando você tem dois agentes. Dentro de uma camada, "a primeira entrada de bindings correspondente vence", portanto coloque regras específicas antes das amplas. Inspecione o que foi realmente carregado com `openclaw agents list --bindings`. Verificado em 21 de setembro de 2026.
Como vejo quanto custou cada agente do OpenClaw?
Nenhum comando documentado em 21 de setembro de 2026 informa gastos discriminados por agente, portanto atribua por modelo e por rota — turnos principais, execuções de heartbeat, a faixa utilityModel e subagentes gerados. Duas ressalvas sobre os números locais. As leituras em dólares do OpenClaw são estimativas calculadas a partir dos próprios metadados locais de preços — suas superfícies de uso consultam dados de plano e gasto informados pelo provedor quando este os disponibiliza, mas a análise de custo por sessão é derivada da sessão — e /usage cost avisa que os totais Today e Last 30d podem estar incompletos enquanto o cache agregado é atualizado, parcial ou obsoleto. E, para um provedor personalizado declarado sem um objeto de custo por modelo, o OpenClaw assume cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 } — uma leitura de US$ 0 para solicitações que seu fornecedor está cobrando normalmente. Faça a conciliação com o registro do provedor, não com o rodapé do chat.
Documentação do OpenClaw, referência da CLI e entrada do registro npm verificadas em 21 de setembro de 2026 na versão 2026.9.5 do pacote; nenhum Gateway, agente, vínculo ou solicitação paga foi executado aqui. As tarifas de tokens da Kunavo foram obtidas do catálogo atual, e todos os valores em dólares nesta página são aritmética ilustrativa de tokens, não uma fatura medida.