agentDir) e la propria cronologia di sessione, più più account di canale (ad es. due WhatsApp) in un unico Gateway in esecuzione. I messaggi in ingresso vengono instradati all’agente corretto tramite binding.
Un agente qui è l’intero ambito per-persona: file del workspace, profili di autenticazione, registro dei modelli e archivio delle sessioni. agentDir è la directory di stato su disco che contiene questa configurazione per agente in ~/.openclaw/agents/<agentId>/. Un binding mappa un account di canale (ad es. un workspace Slack o un numero WhatsApp) a uno di quegli agenti.
Cos’è “un agente”?
Un agente è un cervello con ambito completo, con il proprio:- 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 routing) in
~/.openclaw/agents/<agentId>/sessions.
sessions_history è anche qui 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 tag di ragionamento, scaffolding <relevant-memories>, payload XML di tool-call in testo semplice (inclusi <tool_call>...</tool_call>, <function_call>...</function_call>, <tool_calls>...</tool_calls>, <function_calls>...</function_calls> e blocchi di tool-call troncati), scaffolding di tool-call declassato, token di controllo modello ASCII/full-width trapelati e XML di tool-call MiniMax malformato prima della redazione/troncamento.~/.openclaw/skills, quindi filtrate dall’allowlist efficace delle Skills dell’agente quando configurata. Usa agents.defaults.skills per una baseline condivisa e agents.list[].skills per la sostituzione per agente. Vedi Skills: per-agent vs shared e Skills: agent skill allowlists.
Il Gateway può ospitare un agente (predefinito) o molti agenti affiancati.
Nota sul workspace: il workspace di ogni agente è la cwd predefinita, non una sandbox rigida. I percorsi relativi si risolvono dentro il 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 dell’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:agentIdassume come valore predefinitomain.- Le sessioni hanno chiavi del tipo
agent:main:<mainKey>. - Il workspace assume come valore predefinito
~/.openclaw/workspace(o~/.openclaw/workspace-<profile>quandoOPENCLAW_PROFILEè impostato). - Lo stato assume come valore predefinito
~/.openclaw/agents/main/agent.
Helper per agenti
Usa la procedura guidata degli agenti per aggiungere un nuovo agente isolato:bindings (o lascia che lo faccia la procedura guidata) per instradare i messaggi in ingresso.
Verifica con:
Avvio rapido
Crea il workspace di ogni agente
Usa la procedura guidata o crea i workspace manualmente:Ogni agente ottiene il proprio workspace con
SOUL.md, AGENTS.md e USER.md opzionale, più un agentDir dedicato e un archivio delle sessioni in ~/.openclaw/agents/<agentId>.Crea account di canale
Crea un account per agente sui canali preferiti: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 bindings (esempi sotto).Più agenti = più persone, più personalità
Con più agenti, ogniagentId diventa una persona completamente isolata:
- Numeri di telefono/account diversi (per canale
accountId). - Personalità diverse (file del workspace per agente come
AGENTS.mdeSOUL.md). - Autenticazione + sessioni separate (nessuna interferenza a meno che non sia esplicitamente abilitata).
Ricerca nella memoria QMD tra agenti
Se un agente deve cercare nelle trascrizioni di sessione QMD di un altro agente, aggiungi raccolte extra inagents.list[].memorySearch.qmd.extraCollections. Usa agents.defaults.memorySearch.qmd.extraCollections solo quando ogni agente deve ereditare le stesse raccolte di trascrizioni condivise.
Un numero WhatsApp, più persone (divisione DM)
Puoi instradare DM WhatsApp diversi ad agenti diversi restando su un solo account WhatsApp. Abbina sul mittente E.164 (come+15551234567) con peer.kind: "direct". Le risposte arrivano comunque dallo stesso numero WhatsApp (nessuna identità mittente per agente).
Le chat dirette collassano nella chiave di sessione principale dell’agente, quindi il vero isolamento richiede un agente per persona.
- 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 o usa gruppi Broadcast.
Regole di routing (come i messaggi scelgono un agente)
I binding sono deterministici e vince il più specifico:Risoluzione dei pareggi e semantica AND
Risoluzione dei pareggi e semantica AND
- Se più binding corrispondono nello stesso livello, vince il primo nell’ordine della configurazione.
- Se un binding imposta più campi di corrispondenza (per esempio
peer+guildId), tutti i campi specificati sono obbligatori (semanticaAND).
Dettaglio dell’ambito account
Dettaglio dell’ambito account
- Un binding che omette
accountIdcorrisponde solo all’account predefinito. Non corrisponde a tutti gli account. - Usa
accountId: "*"per un fallback a livello di canale su tutti gli account. - Usa
accountId: "<name>"per corrispondere a un account. - Se in seguito aggiungi lo stesso binding per lo stesso agente con un ID account esplicito, OpenClaw aggiorna il binding esistente solo canale ad ambito account invece di duplicarlo.
Più account / numeri di telefono
I canali che supportano più account (ad es. WhatsApp) usanoaccountId per identificare ogni accesso. Ogni accountId può essere instradato a un agente diverso, quindi un server può ospitare più numeri di telefono senza mischiare le sessioni.
Se vuoi un account predefinito a livello di canale quando accountId è omesso, imposta channels.<channel>.defaultAccount (opzionale). Quando non è impostato, OpenClaw ricade su default se presente, altrimenti sul primo ID account configurato (ordinato).
I canali comuni che supportano questo schema includono:
whatsapp,telegram,discord,slack,signal,imessageirc,line,googlechat,mattermost,matrix,nextcloud-talkzalo,zalouser,nostr,feishu
Concetti
agentId: un “cervello” (workspace, autenticazione per agente, archivio sessioni per agente).accountId: un’istanza di account di canale (ad es. account WhatsApp"personal"rispetto a"biz").binding: instrada i messaggi in ingresso a unagentIdtramite(channel, accountId, peer)e facoltativamente ID guild/team.- Le chat dirette collassano in
agent:<agentId>:<mainKey>(“main” per agente;session.mainKey).
Esempi di piattaforme
Bot Discord per agente
Bot Discord per agente
Ogni account bot Discord mappa a un
accountId univoco. Associa ogni account a un agente e mantieni allowlist per bot.- Invita ciascun bot nella gilda e abilita Message Content Intent.
- I token si trovano in
channels.discord.accounts.<id>.token(l’account predefinito può usareDISCORD_BOT_TOKEN).
Bot Telegram per agente
Bot Telegram per agente
- Crea un bot per agente con BotFather e copia ciascun token.
- I token si trovano in
channels.telegram.accounts.<id>.botToken(l’account predefinito può usareTELEGRAM_BOT_TOKEN). - Per più bot nello stesso gruppo Telegram, invita ciascun bot e menziona il bot che deve rispondere.
- Disabilita la Privacy Mode di BotFather per ciascun bot di gruppo, quindi aggiungi di nuovo il bot in modo che Telegram applichi l’impostazione.
- Consenti i gruppi con
channels.telegram.groups, oppure usagroupPolicy: "open"solo per distribuzioni di gruppo attendibili. - Inserisci gli ID utente dei mittenti in
groupAllowFrom. Gli ID di gruppi e supergruppi vanno inchannels.telegram.groups, non ingroupAllowFrom. - Associa tramite
accountIdin modo che ciascun bot venga instradato al proprio agente.
Numeri WhatsApp per agente
Numeri WhatsApp per agente
Collega ciascun account prima di avviare il Gateway:
~/.openclaw/openclaw.json (JSON5):Pattern comuni
- WhatsApp quotidiano + lavoro approfondito su Telegram
- Stesso canale, un peer a Opus
- Agente familiare associato a un gruppo WhatsApp
Dividi per canale: instrada WhatsApp a un agente veloce per l’uso quotidiano e Telegram a un agente Opus.Note:
- Questi esempi usano
accountId: "*"così le associazioni continuano a funzionare se aggiungi account in seguito. - Per instradare un singolo DM/gruppo a Opus mantenendo il resto su chat, aggiungi un’associazione
match.peerper quel peer; le corrispondenze peer hanno sempre la precedenza sulle regole a livello di canale.
Configurazione del sandbox e degli strumenti per agente
Ciascun agente può avere il proprio sandbox e le proprie restrizioni sugli strumenti:setupCommand si trova sotto sandbox.docker e viene eseguito una volta alla creazione del container. Gli override per agente sandbox.docker.* vengono ignorati quando lo scope risolto è "shared".- Isolamento di sicurezza: limita gli strumenti per agenti non attendibili.
- Controllo delle risorse: esegui agenti specifici in sandbox mantenendo gli altri sull’host.
- Policy flessibili: autorizzazioni diverse per agente.
tools.elevated è globale e basato sul mittente; non è configurabile per agente. Se ti servono confini per agente, usa agents.list[].tools per negare exec. Per il targeting dei gruppi, usa agents.list[].groupChat.mentionPatterns in modo che le @menzioni vengano mappate chiaramente all’agente previsto.Correlati
- Agenti ACP — esecuzione di harness di coding esterni
- Instradamento dei canali — come i messaggi vengono instradati agli agenti
- Presenza — presenza e disponibilità degli agenti
- Sessione — isolamento e instradamento delle sessioni
- Sub-agenti — avvio di esecuzioni di agenti in background