Roteamento Multiagente
Objetivo: varios agentes isolados (workspace separado +agentDir + sessões), além de varias contas de canal (por exemplo, dois WhatsApps) em um Gateway em execução. As mensagens de entrada são roteadas para um agente por meio de vínculos.
O que é “um agente”?
Um agente é um cérebro totalmente delimitado, com seu próprio:- Workspace (arquivos, AGENTS.md/SOUL.md/USER.md, notas locais, regras de persona).
- Diretório de estado (
agentDir) para perfis de autenticação, registro de modelos e configuração por agente. - Armazenamento de sessões (histórico de chat + estado de roteamento) em
~/.openclaw/agents/<agentId>/sessions.
agentDir
entre agentes (isso causa colisões de autenticação/sessão). Se voce quiser compartilhar credenciais,
copie auth-profiles.json para o agentDir do outro agente.
As Skills são por agente via a pasta skills/ de cada workspace, com skills compartilhadas
disponiveis em ~/.openclaw/skills. Veja Skills: por agente vs compartilhadas.
O Gateway pode hospedar um agente (padrão) ou muitos agentes lado a lado.
Nota sobre workspace: o workspace de cada agente é o cwd padrão, não um sandbox rígido. Caminhos relativos são resolvidos dentro do workspace, mas caminhos absolutos podem
alcançar outras localizações do host, a menos que o sandboxing esteja habilitado. Veja
Sandboxing.
Caminhos (mapa rapido)
- Configuração:
~/.openclaw/openclaw.json(ouOPENCLAW_CONFIG_PATH) - Diretório de estado:
~/.openclaw(ouOPENCLAW_STATE_DIR) - Workspace:
~/.openclaw/workspace(ou~/.openclaw/workspace-<agentId>) - Diretório do agente:
~/.openclaw/agents/<agentId>/agent(ouagents.list[].agentDir) - Sessões:
~/.openclaw/agents/<agentId>/sessions
Modo de agente unico (padrão)
Se voce nao fizer nada, o OpenClaw executa um unico agente:agentIdtem como padrãomain.- As sessões são indexadas como
agent:main:<mainKey>. - O workspace tem como padrão
~/.openclaw/workspace(ou~/.openclaw/workspace-<profile>quandoOPENCLAW_PROFILEestá definido). - O estado tem como padrão
~/.openclaw/agents/main/agent.
Assistente de agente
Use o assistente de agente para adicionar um novo agente isolado:bindings (ou deixe o assistente fazer isso) para rotear mensagens de entrada.
Verifique com:
Multiplos agentes = multiplas pessoas, multiplas personalidades
Com multiplos agentes, cadaagentId se torna uma persona totalmente isolada:
- Numeros de telefone/contas diferentes (por canal
accountId). - Personalidades diferentes (arquivos do workspace por agente, como
AGENTS.mdeSOUL.md). - Autenticação + sessões separadas (sem interferencia cruzada, a menos que explicitamente habilitado).
Um numero do WhatsApp, multiplas pessoas (divisão de DM)
Voce pode rotear DMs diferentes do WhatsApp para agentes diferentes permanecendo em uma unica conta do WhatsApp. Match on sender E.164 (like+15551234567) with peer.kind: "direct". As respostas ainda saem do mesmo numero do WhatsApp (sem identidade de remetente por agente).
Detalhe importante: chats diretos colapsam para a chave de sessão principal do agente, portanto o isolamento verdadeiro exige um agente por pessoa.
Exemplo:
- O controle de acesso de DM é global por conta do WhatsApp (pareamento/lista de permissões), nao por agente.
- Para grupos compartilhados, vincule o grupo a um agente ou use Grupos de broadcast.
Regras de roteamento (como as mensagens escolhem um agente)
Os vínculos sao deterministicos e o mais especifico vence:- Correspondencia de
peer(DM/grupo/id de canal exato) - Correspondência
parentPeer(herança de thread) guildId + roles(roteamento por função no Discord)guildId(Discord)teamId(Slack)- Correspondencia de
accountIdpara um canal - Correspondencia em nivel de canal (
accountId: "*") - Retorno ao agente padrão (
agents.list[].default, caso contrario a primeira entrada da lista, padrão:main)
peer + guildId), todos os campos especificados são obrigatórios (semântica AND).
Multiplas contas / numeros de telefone
Canais que suportam multiplas contas (por exemplo, WhatsApp) usamaccountId para identificar
cada login. Cada accountId pode ser roteado para um agente diferente, assim um servidor pode hospedar
multiplos numeros de telefone sem misturar sessões.
Conceitos
agentId: um “cérebro” (workspace, autenticação por agente, armazenamento de sessões por agente).accountId: uma instancia de conta de canal (por exemplo, conta do WhatsApp"personal"vs"biz").binding: roteia mensagens de entrada para umagentIdpor(channel, accountId, peer)e, opcionalmente, ids de guilda/equipe.- Chats diretos colapsam para
agent:<agentId>:<mainKey>(principal por agente;session.mainKey).
Exemplo: dois WhatsApps → dois agentes
~/.openclaw/openclaw.json (JSON5):
Exemplo: chat diario no WhatsApp + trabalho profundo no Telegram
Divida por canal: roteie o WhatsApp para um agente rapido do dia a dia e o Telegram para um agente Opus.- Se voce tiver multiplas contas para um canal, adicione
accountIdao vínculo (por exemplo,{ channel: "whatsapp", accountId: "personal" }). - Para rotear um unico DM/grupo para o Opus mantendo o restante no chat, adicione um vínculo
match.peerpara esse par; correspondencias de par sempre vencem as regras em nivel de canal.
Exemplo: mesmo canal, um par para o Opus
Mantenha o WhatsApp no agente rapido, mas roteie um DM para o Opus:Agente de familia vinculado a um grupo do WhatsApp
Vincule um agente dedicado de familia a um unico grupo do WhatsApp, com controle por menções e uma politica de ferramentas mais restrita:- Listas de permitir/negar ferramentas sao ferramentas, nao skills. Se uma skill precisar executar um
binario, garanta que
execesteja permitido e que o binario exista no sandbox. - Para um controle mais rigoroso, defina
agents.list[].groupChat.mentionPatternse mantenha listas de permissões de grupo habilitadas para o canal.
Sandbox por agente e configuracao de ferramentas
A partir da v2026.1.6, cada agente pode ter seu proprio sandbox e restrições de ferramentas:setupCommand fica em sandbox.docker e é executado uma vez na criação do container.
Substituições sandbox.docker.* por agente sao ignoradas quando o escopo resolvido é "shared".
Beneficios:
- Isolamento de segurança: restrinja ferramentas para agentes nao confiaveis
- Controle de recursos: coloque agentes especificos em sandbox mantendo outros no host
- Politicas flexiveis: permissoes diferentes por agente
tools.elevated é global e baseado no remetente; nao é configuravel por agente.
Se voce precisar de limites por agente, use agents.list[].tools para negar exec.
Para direcionamento de grupos, use agents.list[].groupChat.mentionPatterns para que @menções mapeiem corretamente para o agente pretendido.
Veja Sandbox & Ferramentas Multiagente para exemplos detalhados.