agentDir) e histórico de sessões armazenado em SQLite, além de várias contas de canal (por exemplo, dois números do WhatsApp). As mensagens recebidas são encaminhadas ao agente correto por meio de vinculações.
Um agente é o escopo completo por persona: arquivos do workspace, perfis de autenticação, registro de modelos e armazenamento de sessões. Uma vinculação mapeia uma conta de canal (um workspace do Slack, um número do WhatsApp etc.) para um desses agentes.
O que é um agente
Cada agente tem seu próprio:- Workspace: arquivos,
AGENTS.md/SOUL.md/USER.md, notas locais e regras da persona. - Diretório de estado (
agentDir): perfis de autenticação, registro de modelos e configuração por agente. - Armazenamento de sessões: histórico de conversas e estado de roteamento em
~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite.
sessions_history é o caminho mais seguro para recuperar informações entre sessões: ele retorna uma visualização limitada e censurada, não um despejo bruto da transcrição. Ele remove assinaturas de blocos de raciocínio, detalhes de payloads de resultados de ferramentas, a estrutura auxiliar <relevant-memories>, tags XML de chamadas de ferramentas (<tool_call>, <function_call> e suas formas plurais/rebaixadas) e o XML de chamadas de ferramentas do MiniMax; depois, trunca e limita a saída por tamanho em bytes.~/.openclaw/skills, e depois filtradas pela lista de permissões de Skills efetiva do agente. Use agents.defaults.skills para uma base compartilhada e agents.list[].skills para uma substituição por agente (entradas explícitas substituem o padrão; elas não são mescladas). Consulte Skills: por agente vs. compartilhadas e Skills: listas de permissões de agentes.
O armazenamento pertencente a um Plugin segue a configuração desse Plugin; adicionar um segundo agente
não divide automaticamente todos os armazenamentos globais de Plugins. Por exemplo, configure
cofres do Memory Wiki por agente
quando as personas não puderem compartilhar o conhecimento compilado da wiki.
Observação sobre o 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 acessar outros locais do host, a menos que o sandbox esteja habilitado. Consulte Sandbox.
Caminhos
Modo de agente único (padrão)
Se você não configurar nada, o OpenClaw executará um agente:- O padrão de
agentIdémain. - As chaves das sessões seguem o formato
agent:main:<mainKey>(omainKeypadrão émain). - O workspace padrão é
~/.openclaw/workspace(ouworkspace-<profile>quandoOPENCLAW_PROFILEé definido como algo diferente dedefault). - O estado padrão é
~/.openclaw/agents/main/agent.
Assistente de agentes
Adicione um novo agente isolado:--workspace <dir>, --model <id>, --agent-dir <dir>, --bind <channel[:accountId]> (repetível), --non-interactive (requer --workspace).
Adicione bindings para encaminhar mensagens recebidas (o assistente oferece a opção de fazer isso por você) e depois verifique:
Início rápido
1
Crie o workspace de cada agente
SOUL.md, AGENTS.md e um USER.md opcional, além de um agentDir dedicado e um armazenamento de sessões em ~/.openclaw/agents/<agentId>.2
Crie contas de canal
Crie uma conta por agente nos canais de sua preferência:Consulte os guias dos canais: Discord, Telegram, WhatsApp.
- Discord: um bot por agente, habilite Message Content Intent e copie cada token.
- Telegram: um bot por agente por meio do BotFather e copie cada token.
- WhatsApp: vincule cada número de telefone por conta.
3
Adicione agentes, contas e vinculações
Adicione agentes em
agents.list, contas de canal em channels.<channel>.accounts e conecte-os com bindings (exemplos abaixo).4
Reinicie e verifique
Vários agentes, várias personas
CadaagentId configurado é um limite de persona distinto para o estado principal do agente:
- Contas diferentes por canal (por
accountId). - Personalidades diferentes (
AGENTS.md/SOUL.mdpor agente). - Autenticação e sessões separadas, com acesso entre agentes habilitado apenas por meio de recursos explícitos ou da configuração de Plugins.
Cofres do Memory Wiki por agente
Por padrão, o Memory Wiki usa um único cofre global. Para manter o conhecimento compilado de um agente de suporte separado do conhecimento de um agente de marketing, definaplugins.entries.memory-wiki.config.vault.scope como agent:
~/.openclaw/wiki/support e
~/.openclaw/wiki/marketing. Operações da CLI e do Gateway com escopo de agente exigem
um agente explícito quando vários agentes estão configurados. Consulte
cofres do Memory Wiki por agente para obter detalhes sobre
filtragem da ponte, migração e limites de confiança.
Pesquisa de memória QMD entre agentes
Para permitir que um agente pesquise as transcrições de sessões QMD de outro agente, adicione coleções extras emagents.list[].memorySearch.qmd.extraCollections. Use agents.defaults.memorySearch.qmd.extraCollections quando todos os agentes precisarem compartilhar as mesmas coleções.
name permanece explícito quando o caminho está fora do workspace do agente. Caminhos dentro do workspace permanecem com escopo de agente, para que cada agente mantenha seu próprio conjunto de pesquisa de transcrições.
Um número do WhatsApp, várias pessoas (divisão de MDs)
Encaminhe diferentes MDs do WhatsApp para diferentes agentes em uma única conta do WhatsApp, fazendo a correspondência do remetente E.164 (+15551234567) com peer.kind: "direct". As respostas ainda são enviadas pelo mesmo número do WhatsApp — não há uma identidade de remetente por agente.
Por padrão, conversas diretas são agrupadas na chave da sessão principal do agente; portanto, o isolamento real exige um agente por pessoa.
Regras de roteamento
As vinculações são determinísticas, e a mais específica prevalece. Consulte Roteamento de canais para ver a ordem completa das camadas (par exato, par pai, curinga de par, guilda+funções, guilda, equipe, conta, canal, agente padrão). Algumas regras que merecem destaque:- Se várias vinculações corresponderem na mesma camada, a primeira na ordem da configuração prevalecerá.
- Se uma vinculação definir vários campos de correspondência (por exemplo,
peer+guildId), todos os campos especificados deverão corresponder (semânticaAND). - Uma vinculação que omite
accountIdcorresponde apenas à conta padrão, não a todas as contas. UseaccountId: "*"como fallback para todo o canal ouaccountId: "<name>"para uma conta. Adicionar novamente a mesma vinculação com um id de conta explícito atualiza a vinculação existente exclusiva do canal, em vez de duplicá-la.
Várias contas/números de telefone
Os canais compatíveis com várias contas (por exemplo, WhatsApp) usamaccountId para identificar cada login. Cada accountId é encaminhado ao seu próprio agente, permitindo que um servidor hospede vários números de telefone sem misturar sessões.
Defina channels.<channel>.defaultAccount para escolher a conta usada quando accountId for omitido. Quando essa opção não estiver definida, o OpenClaw usará default, se existir; caso contrário, usará o primeiro id de conta configurado (em ordem alfabética).
Canais compatíveis com várias contas: discord, feishu, googlechat, imessage, irc, line, mattermost, matrix, nextcloud-talk, nostr, signal, slack, telegram, whatsapp, zalo, zalouser.
Conceitos
agentId: um “cérebro” (workspace, autenticação por agente, armazenamento de sessões por agente).accountId: uma instância de conta de canal (por exemplo, conta do WhatsApppersonalversusbiz).binding: encaminha mensagens recebidas para umagentIdpor(channel, accountId, peer)e, opcionalmente, por IDs de guilda/equipe.- Conversas diretas são consolidadas em
agent:<agentId>:<mainKey>(a sessão “principal” por agente; consultesession.mainKey).
Exemplos de plataformas
Bots do Discord por agente
Bots do Discord por agente
Cada conta de bot do Discord é mapeada para um
accountId exclusivo. Vincule cada conta a um agente e mantenha listas de permissões 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 aquele que deve responder.
- Desabilite o Privacy Mode do BotFather para cada bot de grupo (
/setprivacy-> Disable), depois remova e adicione novamente o bot para que o Telegram aplique a configuração. - Permita grupos com
channels.telegram.groupsou usegroupPolicy: "open"somente em implantações de grupo confiáveis. - Coloque os IDs de usuário dos remetentes em
groupAllowFrom. IDs de grupos e supergrupos devem ficar emchannels.telegram.groups, não emgroupAllowFrom. - Vincule por
accountIdpara que cada bot encaminhe mensagens ao 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 cotidiano + trabalho aprofundado no Telegram
- Mesmo canal, um peer para o Opus
- Agente familiar vinculado a um grupo do WhatsApp
Divida por canal: encaminhe o WhatsApp para um agente rápido de uso cotidiano e o Telegram para um agente Opus.Estes exemplos usam
accountId: "*" para que os vínculos continuem funcionando caso você adicione contas posteriormente. Para encaminhar uma única mensagem direta ou grupo ao Opus e manter o restante no agente de conversa, adicione um vínculo match.peer para esse peer — correspondências de peer sempre prevalecem sobre regras de todo o canal.Configuração de sandbox e ferramentas por agente
Cada agente pode ter suas próprias restrições de sandbox e ferramentas:setupCommand fica em sandbox.docker e é executado uma vez na criação do contêiner. Substituições de sandbox.docker.* por agente são ignoradas quando o escopo resolvido é "shared".- Isolamento de segurança: restrinja ferramentas para agentes não confiáveis.
- Controle de recursos: execute agentes específicos em sandbox enquanto mantém os demais no host.
- Políticas flexíveis: permissões diferentes por agente.
tools.elevated tem tanto um controle global (tools.elevated.enabled/allowFrom) quanto um controle por agente (agents.list[].tools.elevated.enabled/allowFrom). O controle por agente só pode restringir ainda mais o global — ambos devem permitir um remetente para que comandos elevados sejam executados. Para direcionamento em grupos, use agents.list[].groupChat.mentionPatterns para que as @menções sejam mapeadas claramente ao agente pretendido.Relacionados
- Agentes ACP — execução de ambientes externos de programação
- Encaminhamento de canais — como as mensagens são encaminhadas aos agentes
- Presença — presença e disponibilidade do agente
- Sessão — isolamento e encaminhamento de sessões
- Subagentes — criação de execuções de agentes em segundo plano