agentDir) e la cronologia delle sessioni basata su SQLite, oltre a più account di canale (ad esempio, due numeri WhatsApp). I messaggi in entrata vengono instradati all’agente corretto tramite binding.
Un agente rappresenta l’intero ambito di ciascuna persona: file del workspace, profili di autenticazione, registro dei modelli e archivio delle sessioni. Un binding associa un account di canale (un workspace Slack, un numero WhatsApp e così via) a uno di questi agenti.
Che cos’è un agente
Ogni agente dispone dei propri:- Workspace: file,
AGENTS.md/SOUL.md/USER.md, note locali, regole della persona. - Directory di stato (
agentDir): profili di autenticazione, registro dei modelli, configurazione specifica dell’agente. - Archivio delle sessioni: cronologia delle chat e stato di instradamento in
~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite.
sessions_history è il percorso più sicuro per recuperare informazioni tra sessioni: restituisce una vista limitata e oscurata, non un dump grezzo della trascrizione. Rimuove le firme dei blocchi di ragionamento, i dettagli dei payload dei risultati degli strumenti, la struttura <relevant-memories>, i tag XML delle chiamate agli strumenti (<tool_call>, <function_call> e le relative forme plurali o degradate) e l’XML delle chiamate agli strumenti di MiniMax, quindi tronca e limita l’output in base alla dimensione in byte.~/.openclaw/skills, quindi filtrate in base all’elenco di Skills consentite effettivo dell’agente. Usare agents.defaults.skills per una base condivisa e agents.list[].skills per una sostituzione specifica dell’agente (le voci esplicite sostituiscono quelle predefinite, non vengono unite). Consultare Skills: specifiche dell’agente e condivise e Skills: elenchi consentiti degli agenti.
L’archiviazione gestita da un Plugin segue la configurazione di tale Plugin; l’aggiunta di un secondo agente
non suddivide automaticamente ogni archivio globale dei Plugin. Ad esempio, configurare
i vault di Memory Wiki specifici dell’agente
quando le persone non devono condividere le conoscenze wiki compilate.
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 quelli assoluti possono accedere ad altre posizioni dell’host, a meno che la sandbox non sia abilitata. Consultare Sandboxing.
Percorsi
Modalità con agente singolo (predefinita)
Se non viene configurato nulla, OpenClaw esegue un solo agente:agentIdusa come valore predefinitomain.- Le sessioni usano la chiave
agent:main:<mainKey>(il valore predefinitomainKeyèmain). - Il workspace usa come valore predefinito
~/.openclaw/workspace(oworkspace-<profile>quandoOPENCLAW_PROFILEè impostato su un valore diverso dadefault). - Lo stato usa come valore predefinito
~/.openclaw/agents/main/agent.
Assistente per gli agenti
Aggiungere un nuovo agente isolato:--workspace <dir>, --model <id>, --agent-dir <dir>, --bind <channel[:accountId]> (ripetibile), --non-interactive (richiede --workspace).
Aggiungere bindings per instradare i messaggi in entrata (la procedura guidata propone di farlo automaticamente), quindi verificare:
Avvio rapido
1
Creare il workspace di ciascun agente
SOUL.md, AGENTS.md e, facoltativamente, USER.md, oltre a un agentDir dedicato e a un archivio delle sessioni in ~/.openclaw/agents/<agentId>.2
Creare gli account dei canali
Creare un account per ciascun agente sui canali preferiti:Consultare le guide dei canali: Discord, Telegram, WhatsApp.
- Discord: un bot per agente; abilitare Message Content Intent e copiare ciascun token.
- Telegram: un bot per agente tramite BotFather; copiare ciascun token.
- WhatsApp: collegare ciascun numero di telefono al relativo account.
3
Aggiungere agenti, account e binding
Aggiungere gli agenti in
agents.list, gli account dei canali in channels.<channel>.accounts e collegarli tramite bindings (vedere gli esempi seguenti).4
Riavviare e verificare
Più agenti, più persone
OgniagentId configurato costituisce un confine distinto della persona per lo stato principale dell’agente:
- Account diversi per canale (per
accountId). - Personalità diverse (tramite
AGENTS.md/SOUL.mdspecifici dell’agente). - Autenticazione e sessioni separate, con accesso tra agenti abilitato solo tramite funzionalità esplicite o la configurazione dei Plugin.
Vault di Memory Wiki specifici dell’agente
Per impostazione predefinita, Memory Wiki utilizza un unico vault globale. Per mantenere le conoscenze compilate di un agente di supporto separate da quelle di un agente di marketing, impostareplugins.entries.memory-wiki.config.vault.scope su agent:
~/.openclaw/wiki/support e
~/.openclaw/wiki/marketing. Le operazioni CLI e Gateway con ambito agente richiedono
un agente esplicito quando sono configurati più agenti. Consultare
i vault di Memory Wiki specifici dell’agente per i dettagli
su filtraggio del bridge, migrazione e confini di attendibilità.
Ricerca QMD nella memoria tra agenti
Per consentire a un agente di cercare nelle trascrizioni delle sessioni QMD di un altro agente, aggiungere raccolte supplementari inagents.list[].memorySearch.qmd.extraCollections. Usare agents.defaults.memorySearch.qmd.extraCollections quando tutti gli agenti devono condividere le stesse raccolte.
name rimane esplicito quando il percorso si trova all’esterno del workspace dell’agente. I percorsi all’interno del workspace rimangono specifici dell’agente, in modo che ciascun agente mantenga il proprio insieme di ricerca delle trascrizioni.
Un numero WhatsApp, più persone (suddivisione dei messaggi diretti)
Instradare messaggi diretti WhatsApp diversi ad agenti diversi su un solo account WhatsApp associando il mittente E.164 (+15551234567) con peer.kind: "direct". Le risposte continuano a provenire dallo stesso numero WhatsApp: non esiste un’identità del mittente specifica dell’agente.
Per impostazione predefinita, le chat dirette confluiscono nella chiave della sessione principale dell’agente, quindi un isolamento effettivo richiede un agente per persona.
Regole di instradamento
I binding sono deterministici e prevale quello più specifico. Consultare Instradamento dei canali per l’ordine completo dei livelli (peer esatto, peer principale, carattere jolly del peer, gilda+ruoli, gilda, team, account, canale, agente predefinito). Alcune regole da evidenziare:- Se più binding corrispondono nello stesso livello, prevale il primo nell’ordine di configurazione.
- Se un binding imposta più campi di corrispondenza (ad esempio
peer+guildId), tutti i campi specificati devono corrispondere (semanticaAND). - Un binding che omette
accountIdcorrisponde solo all’account predefinito, non a tutti gli account. UsareaccountId: "*"come fallback per l’intero canale oppureaccountId: "<name>"per un singolo account. Se si aggiunge nuovamente lo stesso binding con un ID account esplicito, il binding esistente relativo al solo canale viene aggiornato anziché duplicato.
Più account/numeri di telefono
I canali che supportano più account (ad esempio WhatsApp) usanoaccountId per identificare ciascun accesso. Ogni accountId viene instradato al proprio agente, consentendo a un unico server di ospitare più numeri di telefono senza mescolare le sessioni.
Impostare channels.<channel>.defaultAccount per scegliere l’account utilizzato quando accountId viene omesso. Se non è impostato, OpenClaw usa default se presente, altrimenti il primo ID account configurato (in ordine alfabetico).
Canali che supportano più account: discord, feishu, googlechat, imessage, irc, line, mattermost, matrix, nextcloud-talk, nostr, signal, slack, telegram, whatsapp, zalo, zalouser.
Concetti
agentId: un “cervello” (spazio di lavoro, autenticazione per agente, archivio delle sessioni per agente).accountId: un’istanza di account del canale (ad esempio, account WhatsApppersonalrispetto abiz).binding: instrada i messaggi in entrata a unagentIdin base a(channel, accountId, peer)e, facoltativamente, agli ID di gilda/team.- Le chat dirette vengono ricondotte a
agent:<agentId>:<mainKey>(il valore “main” per agente; vederesession.mainKey).
Esempi per piattaforma
Bot Discord per agente
Bot Discord per agente
Ogni account bot Discord è associato a un
accountId univoco. Associare ogni account a un agente e mantenere elenchi di elementi consentiti distinti per ciascun bot.- Invitare ogni bot nella gilda e abilitare Message Content Intent.
- I token si trovano in
channels.discord.accounts.<id>.token(l’account predefinito può utilizzareDISCORD_BOT_TOKEN).
Bot Telegram per agente
Bot Telegram per agente
- Creare un bot per agente con BotFather e copiare ogni token.
- I token si trovano in
channels.telegram.accounts.<id>.botToken(l’account predefinito può utilizzareTELEGRAM_BOT_TOKEN). - Per utilizzare più bot nello stesso gruppo Telegram, invitare ogni bot e menzionare quello che deve rispondere.
- Disabilitare la modalità Privacy di BotFather per ogni bot del gruppo (
/setprivacy-> Disable), quindi rimuovere e aggiungere nuovamente il bot affinché Telegram applichi l’impostazione. - Consentire i gruppi con
channels.telegram.groupsoppure utilizzaregroupPolicy: "open"solo per distribuzioni in gruppi attendibili. - Inserire gli ID utente dei mittenti in
groupAllowFrom. Gli ID di gruppi e supergruppi devono essere inseriti inchannels.telegram.groups, non ingroupAllowFrom. - Eseguire l’associazione tramite
accountIdaffinché ogni bot instradi i messaggi al proprio agente.
Numeri WhatsApp per agente
Numeri WhatsApp per agente
Collegare ogni account prima di avviare il Gateway:
~/.openclaw/openclaw.json (JSON5):Schemi comuni
- WhatsApp quotidiano + lavoro approfondito su Telegram
- Stesso canale, un interlocutore su Opus
- Agente familiare associato a un gruppo WhatsApp
Suddividere per canale: instradare WhatsApp a un agente rapido per l’uso quotidiano e Telegram a un agente Opus.Questi esempi utilizzano
accountId: "*", così le associazioni continuano a funzionare se vengono aggiunti altri account in seguito. Per instradare un singolo messaggio diretto/gruppo a Opus mantenendo il resto sulla chat, aggiungere un’associazione match.peer per tale interlocutore: le corrispondenze per interlocutore prevalgono sempre sulle regole a livello di canale.Configurazione della sandbox e degli strumenti per agente
Ogni agente può avere restrizioni proprie per la sandbox e gli strumenti:setupCommand si trova sotto sandbox.docker e viene eseguito una sola volta alla creazione del container. Le sostituzioni sandbox.docker.* per agente vengono ignorate quando l’ambito risolto è "shared".- Isolamento di sicurezza: limita gli strumenti per gli agenti non attendibili.
- Controllo delle risorse: esegue in sandbox agenti specifici mantenendo gli altri sull’host.
- Criteri flessibili: autorizzazioni diverse per ciascun agente.
tools.elevated dispone sia di un controllo globale (tools.elevated.enabled/allowFrom) sia di un controllo per agente (agents.list[].tools.elevated.enabled/allowFrom). Il controllo per agente può soltanto limitare ulteriormente quello globale: entrambi devono autorizzare un mittente affinché possano essere eseguiti comandi con privilegi elevati. Per indirizzare i gruppi, utilizzare agents.list[].groupChat.mentionPatterns affinché le @menzioni vengano associate chiaramente all’agente previsto.Contenuti correlati
- Agenti ACP — esecuzione di harness di programmazione esterni
- Instradamento dei canali — modalità di instradamento dei messaggi agli agenti
- Presenza — presenza e disponibilità degli agenti
- Sessione — isolamento e instradamento delle sessioni
- Sottoagenti — avvio di esecuzioni di agenti in background