Instradamento multi-agente
Obiettivo: più agenti isolati (workspace +agentDir + sessioni separati), oltre a più account di canale (ad esempio due account WhatsApp) in un unico Gateway in esecuzione. Il traffico in ingresso viene instradato a un agente tramite i binding.
Che cos’è “un agente”?
Un agente è un cervello completamente definito con i propri:- Workspace (file, AGENTS.md/SOUL.md/USER.md, note locali, regole della persona).
- Directory di stato (
agentDir) per profili di autenticazione, registro dei modelli e configurazione per agente. - Archivio delle sessioni (cronologia chat + stato di instradamento) in
~/.openclaw/agents/<agentId>/sessions.
sessions_history è il percorso più sicuro per il richiamo tra sessioni: restituisce
una vista limitata e sanificata, non un dump grezzo della trascrizione. Il richiamo dell’assistente rimuove
i tag di pensiero, l’impalcatura <relevant-memories>, i payload XML delle chiamate agli strumenti in testo semplice
(inclusi <tool_call>...</tool_call>,
<function_call>...</function_call>, <tool_calls>...</tool_calls>,
<function_calls>...</function_calls> e i blocchi di chiamata agli strumenti troncati),
l’impalcatura degradata delle chiamate agli strumenti, i token di controllo del modello trapelati in ASCII/a larghezza piena
e l’XML malformato delle chiamate agli strumenti di MiniMax prima della redazione/troncatura.
Le credenziali dell’agente principale non vengono condivise automaticamente. Non riutilizzare mai agentDir
tra agenti diversi (provoca collisioni di autenticazione/sessione). Se vuoi condividere credenziali,
copia auth-profiles.json nell’agentDir dell’altro agente.
Le Skills vengono caricate dal workspace di ciascun agente e da radici condivise come
~/.openclaw/skills, quindi filtrate in base alla allowlist effettiva delle skill dell’agente quando
configurata. Usa agents.defaults.skills per una base condivisa e
agents.list[].skills per una sostituzione per agente. Vedi
Skills: per agente vs condivise e
Skills: allowlist delle skill dell’agente.
Il Gateway può ospitare un agente (predefinito) o molti agenti affiancati.
Nota sul workspace: il workspace di ciascun agente è la cwd predefinita, non una sandbox
rigida. I percorsi relativi vengono risolti all’interno del workspace, ma i percorsi assoluti possono
raggiungere altre posizioni dell’host a meno che la sandbox non sia abilitata. Vedi
Sandboxing.
Percorsi (mappa rapida)
- Configurazione:
~/.openclaw/openclaw.json(oOPENCLAW_CONFIG_PATH) - Directory di stato:
~/.openclaw(oOPENCLAW_STATE_DIR) - Workspace:
~/.openclaw/workspace(o~/.openclaw/workspace-<agentId>) - Directory agente:
~/.openclaw/agents/<agentId>/agent(oagents.list[].agentDir) - Sessioni:
~/.openclaw/agents/<agentId>/sessions
Modalità agente singolo (predefinita)
Se non fai nulla, OpenClaw esegue un singolo agente:agentIdè predefinito sumain.- Le sessioni sono indicate come
agent:main:<mainKey>. - Il workspace è predefinito su
~/.openclaw/workspace(o~/.openclaw/workspace-<profile>quando è impostatoOPENCLAW_PROFILE). - Lo stato è predefinito su
~/.openclaw/agents/main/agent.
Helper degli agenti
Usa la procedura guidata degli agenti per aggiungere un nuovo agente isolato:bindings (oppure lascia che lo faccia la procedura guidata) per instradare i messaggi in ingresso.
Verifica con:
Guida rapida
Crea il workspace di ciascun agente
Usa la procedura guidata o crea i workspace manualmente:Ogni agente ottiene il proprio workspace con
SOUL.md, AGENTS.md e facoltativamente USER.md, oltre a un agentDir dedicato e a un archivio delle sessioni in ~/.openclaw/agents/<agentId>.Crea gli account di canale
Crea un account per agente nei canali che preferisci:Vedi le guide dei canali: Discord, Telegram, WhatsApp.
- Discord: un bot per agente, abilita Message Content Intent, copia ogni token.
- Telegram: un bot per agente tramite BotFather, copia ogni token.
- WhatsApp: collega ogni numero di telefono per account.
Aggiungi agenti, account e binding
Aggiungi gli agenti in
agents.list, gli account di canale in channels.<channel>.accounts e collegali con i bindings (esempi sotto).Più agenti = più persone, più personalità
Con più agenti, ogniagentId diventa una persona completamente isolata:
- Numeri di telefono/account diversi (per
accountIddel canale). - Personalità diverse (tramite file del workspace per agente come
AGENTS.mdeSOUL.md). - Autenticazione + sessioni separate (nessuna interferenza reciproca salvo abilitazione esplicita).
Ricerca nella memoria QMD tra agenti
Se un agente deve poter cercare nelle trascrizioni delle sessioni QMD di un altro agente, aggiungi raccolte aggiuntive inagents.list[].memorySearch.qmd.extraCollections.
Usa agents.defaults.memorySearch.qmd.extraCollections solo quando tutti gli agenti
devono ereditare le stesse raccolte di trascrizioni condivise.
Un numero WhatsApp, più persone (divisione DM)
Puoi instradare DM WhatsApp diversi a agenti diversi rimanendo su un solo account WhatsApp. Abbina in base al mittente E.164 (come+15551234567) con peer.kind: "direct". Le risposte continueranno comunque a provenire dallo stesso numero WhatsApp (nessuna identità mittente per agente).
Dettaglio importante: le chat dirette confluiscono nella chiave di sessione principale dell’agente, quindi il vero isolamento richiede un agente per persona.
Esempio:
- Il controllo di accesso ai DM è globale per account WhatsApp (pairing/allowlist), non per agente.
- Per i gruppi condivisi, associa il gruppo a un agente oppure usa i Gruppi broadcast.
Regole di instradamento (come i messaggi scelgono un agente)
I binding sono deterministici e vince il più specifico:- corrispondenza
peer(id esatto di DM/gruppo/canale) - corrispondenza
parentPeer(ereditarietà del thread) guildId + roles(instradamento per ruoli di Discord)guildId(Discord)teamId(Slack)- corrispondenza
accountIdper un canale - corrispondenza a livello di canale (
accountId: "*") - fallback all’agente predefinito (
agents.list[].default, altrimenti la prima voce dell’elenco, predefinito:main)
peer + guildId), tutti i campi specificati sono richiesti (semantica AND).
Dettaglio importante sull’ambito degli account:
- Un binding che omette
accountIdcorrisponde solo all’account predefinito. - Usa
accountId: "*"per un fallback a livello di canale su tutti gli account. - Se in seguito aggiungi lo stesso binding per lo stesso agente con un id account esplicito, OpenClaw aggiorna il binding esistente solo-canale all’ambito dell’account invece di duplicarlo.
Più account / numeri di telefono
I canali che supportano più account (ad esempio WhatsApp) usanoaccountId per identificare
ogni accesso. Ogni accountId può essere instradato a un agente diverso, così un solo server può ospitare
più numeri di telefono senza mescolare le sessioni.
Se vuoi un account predefinito a livello di canale quando accountId viene omesso, imposta
channels.<channel>.defaultAccount (facoltativo). Se non è impostato, OpenClaw usa come fallback
default se presente, altrimenti il primo id account configurato (ordinato).
I canali comuni che supportano questo modello includono:
whatsapp,telegram,discord,slack,signal,imessageirc,line,googlechat,mattermost,matrix,nextcloud-talkbluebubbles,zalo,zalouser,nostr,feishu
Concetti
agentId: un “cervello” (workspace, autenticazione per agente, archivio sessioni per agente).accountId: un’istanza di account di canale (ad esempio account WhatsApp"personal"rispetto a"biz").binding: instrada i messaggi in ingresso a unagentIdtramite(channel, accountId, peer)e facoltativamente id di guild/team.- Le chat dirette confluiscono in
agent:<agentId>:<mainKey>(“main” per agente;session.mainKey).
Esempi di piattaforma
Bot Discord per agente
Ogni account bot Discord viene mappato a unaccountId univoco. Associa ogni account a un agente e mantieni allowlist per bot.
- Invita ogni bot nella guild e abilita Message Content Intent.
- I token sono in
channels.discord.accounts.<id>.token(l’account predefinito può usareDISCORD_BOT_TOKEN).
Bot Telegram per agente
- Crea un bot per agente con BotFather e copia ogni token.
- I token sono in
channels.telegram.accounts.<id>.botToken(l’account predefinito può usareTELEGRAM_BOT_TOKEN).
Numeri WhatsApp per agente
Collega ogni account prima di avviare il gateway:~/.openclaw/openclaw.json (JSON5):
Esempio: chat quotidiana su WhatsApp + lavoro approfondito su Telegram
Suddividi per canale: instrada WhatsApp a un agente rapido per tutti i giorni e Telegram a un agente Opus.- Se hai più account per un canale, aggiungi
accountIdal binding (per esempio{ channel: "whatsapp", accountId: "personal" }). - Per instradare un singolo DM/gruppo a Opus mantenendo il resto su chat, aggiungi un binding
match.peerper quel peer; le corrispondenze peer vincono sempre sulle regole a livello di canale.
Esempio: stesso canale, un peer a Opus
Mantieni WhatsApp sull’agente rapido, ma instrada un DM a Opus:Agente family associato a un gruppo WhatsApp
Associa un agente family dedicato a un singolo gruppo WhatsApp, con controllo tramite mention e una policy degli strumenti più restrittiva:- Le allowlist/denylist degli strumenti riguardano gli strumenti, non le Skills. Se una skill deve eseguire un
binario, assicurati che
execsia consentito e che il binario esista nella sandbox. - Per un controllo più rigoroso, imposta
agents.list[].groupChat.mentionPatternse mantieni abilitate le allowlist di gruppo per il canale.
Configurazione sandbox e strumenti per agente
Ogni agente può avere la propria sandbox e le proprie restrizioni sugli strumenti:setupCommand si trova in sandbox.docker e viene eseguito una sola volta alla creazione del contenitore.
Gli override per agente sandbox.docker.* vengono ignorati quando l’ambito risolto è "shared".
Vantaggi:
- Isolamento di sicurezza: limita gli strumenti per agenti non attendibili
- Controllo delle risorse: usa la sandbox per agenti specifici mantenendo gli altri sull’host
- Policy flessibili: permessi diversi per agente
tools.elevated è globale e basato sul mittente; non è configurabile per agente.
Se hai bisogno di confini per agente, usa agents.list[].tools per negare exec.
Per il targeting nei gruppi, usa agents.list[].groupChat.mentionPatterns in modo che le @mention vengano mappate in modo pulito all’agente previsto.
Vedi Sandbox e strumenti multi-agente per esempi dettagliati.
Correlati
- Instradamento dei canali — come i messaggi vengono instradati agli agenti
- Sottoagenti — avvio di esecuzioni di agenti in background
- Agenti ACP — esecuzione di harness di coding esterni
- Presenza — presenza e disponibilità degli agenti
- Sessione — isolamento e instradamento delle sessioni