agentDir) e histórico de sessão — além de várias contas de canal (por exemplo, dois WhatsApps) em um Gateway em execução. Mensagens de entrada são roteadas para o agente correto por meio de bindings.
Um agente aqui é o escopo completo por persona: arquivos do workspace, perfis de autenticação, registro de modelos e armazenamento de sessão. agentDir é o diretório de estado em disco que mantém essa configuração por agente em ~/.openclaw/agents/<agentId>/. Um binding mapeia uma conta de canal (por exemplo, um workspace do Slack ou um número do WhatsApp) para um desses agentes.
O que é “um agente”?
Um agente é um cérebro totalmente escopado, com seus próprios:- 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ão (histórico de chat + estado de roteamento) em
~/.openclaw/agents/<agentId>/sessions.
sessions_history também é o caminho mais seguro de recordação entre sessões aqui: ele retorna uma visão limitada e sanitizada, não um despejo bruto de transcrição. A recordação do assistente remove tags de pensamento, estruturas <relevant-memories>, payloads XML de chamadas de ferramenta em texto simples (incluindo <tool_call>...</tool_call>, <function_call>...</function_call>, <tool_calls>...</tool_calls>, <function_calls>...</function_calls> e blocos truncados de chamadas de ferramenta), estruturas rebaixadas de chamadas de ferramenta, tokens de controle de modelo ASCII/largura completa vazados e XML malformado de chamadas de ferramenta MiniMax antes de redação/truncamento.~/.openclaw/skills, depois filtradas pela allowlist efetiva de Skills do agente quando configurada. Use agents.defaults.skills para uma linha de base compartilhada e agents.list[].skills para substituição por agente. Consulte Skills: por agente vs compartilhadas e Skills: allowlists de Skills do agente.
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 outros locais do host, a menos que o sandbox esteja habilitado. Consulte Sandboxing.
Caminhos (mapa rápido)
- 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 único (padrão)
Se você não fizer nada, o OpenClaw executa um único agente:agentIdusamainpor padrão.- Sessões são chaveadas como
agent:main:<mainKey>. - O workspace usa
~/.openclaw/workspacepor padrão (ou~/.openclaw/workspace-<profile>quandoOPENCLAW_PROFILEestá definido). - O estado usa
~/.openclaw/agents/main/agentpor padrão.
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:
Início rápido
Crie cada workspace de agente
Use o assistente ou crie workspaces manualmente:Cada agente recebe seu próprio workspace com
SOUL.md, AGENTS.md e USER.md opcional, além de um agentDir dedicado e armazenamento de sessão em ~/.openclaw/agents/<agentId>.Crie contas de canal
Crie uma conta por agente nos seus canais preferidos:Consulte os guias de canal: Discord, Telegram, WhatsApp.
- Discord: um bot por agente, habilite Message Content Intent, copie cada token.
- Telegram: um bot por agente via BotFather, copie cada token.
- WhatsApp: vincule cada número de telefone por conta.
Adicione agentes, contas e bindings
Adicione agentes em
agents.list, contas de canal em channels.<channel>.accounts e conecte-os com bindings (exemplos abaixo).Vários agentes = várias pessoas, várias personalidades
Com vários agentes, cadaagentId se torna uma persona totalmente isolada:
- Números de telefone/contas diferentes (por
accountIdde canal). - Personalidades diferentes (arquivos de workspace por agente, como
AGENTS.mdeSOUL.md). - Autenticação + sessões separadas (sem comunicação cruzada, a menos que explicitamente habilitada).
Busca de memória QMD entre agentes
Se um agente deve pesquisar as transcrições de sessão QMD de outro agente, adicione coleções extras emagents.list[].memorySearch.qmd.extraCollections. Use agents.defaults.memorySearch.qmd.extraCollections apenas quando todos os agentes devem herdar as mesmas coleções compartilhadas de transcrições.
Um número do WhatsApp, várias pessoas (divisão de DM)
Você pode rotear DMs diferentes do WhatsApp para agentes diferentes enquanto permanece em uma conta do WhatsApp. Faça correspondência pelo remetente E.164 (como+15551234567) com peer.kind: "direct". As respostas ainda vêm do mesmo número do WhatsApp (sem identidade de remetente por agente).
Chats diretos colapsam para a chave de sessão principal do agente, então o isolamento real exige um agente por pessoa.
- O controle de acesso a DM é global por conta do WhatsApp (pareamento/allowlist), não por agente.
- Para grupos compartilhados, vincule o grupo a um agente ou use Grupos de broadcast.
Regras de roteamento (como mensagens escolhem um agente)
Bindings são determinísticos e o mais específico vence:Desempate e semântica AND
Desempate e semântica AND
- Se vários bindings corresponderem no mesmo nível, o primeiro na ordem da configuração vence.
- Se um binding definir vários campos de correspondência (por exemplo,
peer+guildId), todos os campos especificados são obrigatórios (semânticaAND).
Detalhe de escopo de conta
Detalhe de escopo de conta
- Um binding que omite
accountIdcorresponde apenas à conta padrão. Ele não corresponde a todas as contas. - Use
accountId: "*"para um fallback de todo o canal em todas as contas. - Use
accountId: "<name>"para corresponder a uma conta. - Se você adicionar depois o mesmo binding para o mesmo agente com um id de conta explícito, o OpenClaw atualiza o binding existente somente de canal para escopado por conta em vez de duplicá-lo.
Várias contas / números de telefone
Canais que aceitam várias contas (por exemplo, WhatsApp) usamaccountId para identificar cada login. Cada accountId pode ser roteado para um agente diferente, então um servidor pode hospedar vários números de telefone sem misturar sessões.
Se você quiser uma conta padrão de todo o canal quando accountId for omitido, defina channels.<channel>.defaultAccount (opcional). Quando não definido, o OpenClaw usa default se presente; caso contrário, o primeiro id de conta configurado (ordenado).
Canais comuns que aceitam esse padrão incluem:
whatsapp,telegram,discord,slack,signal,imessageirc,line,googlechat,mattermost,matrix,nextcloud-talkzalo,zalouser,nostr,feishu
Conceitos
agentId: um “cérebro” (workspace, autenticação por agente, armazenamento de sessão por agente).accountId: uma instância 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 guild/team.- Chats diretos colapsam para
agent:<agentId>:<mainKey>(“principal” por agente;session.mainKey).
Exemplos de plataforma
Bots do Discord por agente
Bots do Discord por agente
Cada conta de bot do Discord mapeia para um
accountId exclusivo. Vincule cada conta a um agente e mantenha allowlists por bot.- Convide cada bot para a guilda e habilite Message Content Intent.
- Os tokens ficam em
channels.discord.accounts.<id>.token(a conta padrão pode usarDISCORD_BOT_TOKEN).
Bots do Telegram por agente
Bots do Telegram por agente
- Crie um bot por agente com o BotFather e copie cada token.
- Os tokens ficam em
channels.telegram.accounts.<id>.botToken(a conta padrão pode usarTELEGRAM_BOT_TOKEN). - Para vários bots no mesmo grupo do Telegram, convide cada bot e mencione o bot que deve responder.
- Desabilite o Privacy Mode do BotFather para cada bot de grupo e depois adicione novamente o bot para que o Telegram aplique a configuração.
- Permita grupos com
channels.telegram.groupsou usegroupPolicy: "open"apenas para implantações de grupo confiáveis. - Coloque IDs de usuário de remetente em
groupAllowFrom. IDs de grupo e supergrupo pertencem achannels.telegram.groups, não agroupAllowFrom. - Vincule por
accountIdpara que cada bot seja roteado para seu próprio agente.
Números do WhatsApp por agente
Números do WhatsApp por agente
Vincule cada conta antes de iniciar o Gateway:
~/.openclaw/openclaw.json (JSON5):Padrões comuns
- WhatsApp diário + trabalho profundo no Telegram
- Mesmo canal, um peer para o Opus
- Agente familiar vinculado a um grupo do WhatsApp
Divida por canal: roteie o WhatsApp para um agente rápido do dia a dia e o Telegram para um agente Opus.Observações:
- Estes exemplos usam
accountId: "*"para que os vínculos continuem funcionando se você adicionar contas depois. - Para rotear uma única DM/grupo para o Opus enquanto mantém o restante no chat, adicione um vínculo
match.peerpara esse peer; correspondências de peer sempre têm precedência sobre regras de canal inteiro.
Configuração de sandbox e ferramentas por agente
Cada agente pode ter seu próprio sandbox e restrições de ferramentas:setupCommand fica em sandbox.docker e é executado uma vez na criação do contêiner. Substituições por agente em sandbox.docker.* são ignoradas quando o escopo resolvido é "shared".- Isolamento de segurança: restrinja ferramentas para agentes não confiáveis.
- Controle de recursos: coloque agentes específicos em sandbox enquanto mantém outros no host.
- Políticas flexíveis: permissões diferentes por agente.
tools.elevated é global e baseado no remetente; ele não é configurável por agente. Se você precisar de limites por agente, use agents.list[].tools para negar exec. Para direcionamento em grupo, use agents.list[].groupChat.mentionPatterns para que @menções sejam mapeadas claramente para o agente pretendido.Relacionado
- Agentes ACP — executar harnesses de codificação externos
- Roteamento de canais — como mensagens são roteadas para agentes
- Presença — presença e disponibilidade do agente
- Sessão — isolamento e roteamento de sessão
- Subagentes — iniciar execuções de agente em segundo plano