agentDir) en sessiegeschiedenis — plus meerdere kanaalaccounts (bijv. twee WhatsApps) in één draaiende Gateway. Inkomende berichten worden via bindings naar de juiste agent gerouteerd.
Een agent is hier de volledige scope per persona: workspace-bestanden, auth-profielen, modelregister en sessieopslag. agentDir is de state-directory op schijf die deze configuratie per agent bewaart in ~/.openclaw/agents/<agentId>/. Een binding koppelt een kanaalaccount (bijv. een Slack-workspace of een WhatsApp-nummer) aan een van die agents.
Wat is “één agent”?
Een agent is een volledig afgebakend brein met een eigen:- Workspace (bestanden, AGENTS.md/SOUL.md/USER.md, lokale notities, persona-regels).
- State-directory (
agentDir) voor auth-profielen, modelregister en configuratie per agent. - Sessieopslag (chatgeschiedenis + routeringsstatus) onder
~/.openclaw/agents/<agentId>/sessions.
sessions_history is ook hier het veiligere pad voor herinnering tussen sessies: het geeft een begrensde, opgeschoonde weergave terug, geen ruwe transcriptdump. Assistentherinnering verwijdert thinking-tags, <relevant-memories>-scaffolding, XML-payloads voor tool-calls in platte tekst (waaronder <tool_call>...</tool_call>, <function_call>...</function_call>, <tool_calls>...</tool_calls>, <function_calls>...</function_calls> en afgekorte tool-call-blokken), gedegradeerde tool-call-scaffolding, gelekte ASCII-/full-width modelcontroletokens en misvormde MiniMax-tool-call-XML vóór redactie/afkapping.~/.openclaw/skills, en vervolgens gefilterd op basis van de effectieve allowlist voor agent-skills wanneer die is geconfigureerd. Gebruik agents.defaults.skills voor een gedeelde basislijn en agents.list[].skills voor vervanging per agent. Zie Skills: per-agent vs shared en Skills: agent skill allowlists.
De Gateway kan één agent (standaard) of veel agents naast elkaar hosten.
Workspace-opmerking: de workspace van elke agent is de standaard-cwd, geen harde sandbox. Relatieve paden worden binnen de workspace opgelost, maar absolute paden kunnen andere hostlocaties bereiken tenzij sandboxing is ingeschakeld. Zie Sandboxing.
Paden (snelle kaart)
- Configuratie:
~/.openclaw/openclaw.json(ofOPENCLAW_CONFIG_PATH) - State-dir:
~/.openclaw(ofOPENCLAW_STATE_DIR) - Workspace:
~/.openclaw/workspace(of~/.openclaw/workspace-<agentId>) - Agent-dir:
~/.openclaw/agents/<agentId>/agent(ofagents.list[].agentDir) - Sessies:
~/.openclaw/agents/<agentId>/sessions
Modus met één agent (standaard)
Als je niets doet, voert OpenClaw één agent uit:agentIdis standaardmain.- Sessies krijgen sleutels als
agent:main:<mainKey>. - Workspace is standaard
~/.openclaw/workspace(of~/.openclaw/workspace-<profile>wanneerOPENCLAW_PROFILEis ingesteld). - State is standaard
~/.openclaw/agents/main/agent.
Agent-helper
Gebruik de agent-wizard om een nieuwe geïsoleerde agent toe te voegen:bindings toe (of laat de wizard dat doen) om inkomende berichten te routeren.
Verifieer met:
Snelstart
Maak elke agent-workspace aan
Gebruik de wizard of maak workspaces handmatig aan:Elke agent krijgt een eigen workspace met
SOUL.md, AGENTS.md en optioneel USER.md, plus een dedicated agentDir en sessieopslag onder ~/.openclaw/agents/<agentId>.Maak kanaalaccounts aan
Agents, accounts en bindings toevoegen
Voeg agents toe onder
agents.list, kanaalaccounts onder channels.<channel>.accounts, en verbind ze met bindings (voorbeelden hieronder).Meerdere agents = meerdere personen, meerdere persoonlijkheden
Met meerdere agents wordt elkeagentId een volledig geïsoleerde persona:
- Verschillende telefoonnummers/accounts (per kanaal
accountId). - Verschillende persoonlijkheden (workspace-bestanden per agent, zoals
AGENTS.mdenSOUL.md). - Afzonderlijke auth + sessies (geen kruisverkeer tenzij expliciet ingeschakeld).
QMD-geheugenzoekopdracht tussen agents
Als één agent de QMD-sessietranscripten van een andere agent moet doorzoeken, voeg dan extra collecties toe onderagents.list[].memorySearch.qmd.extraCollections. Gebruik agents.defaults.memorySearch.qmd.extraCollections alleen wanneer elke agent dezelfde gedeelde transcriptcollecties moet erven.
Eén WhatsApp-nummer, meerdere personen (DM-splitsing)
Je kunt verschillende WhatsApp-DM’s naar verschillende agents routeren terwijl je op één WhatsApp-account blijft. Match op afzender in E.164-indeling (zoals+15551234567) met peer.kind: "direct". Antwoorden komen nog steeds vanaf hetzelfde WhatsApp-nummer (geen afzenderidentiteit per agent).
Directe chats vallen samen met de hoofdsessiesleutel van de agent, dus echte isolatie vereist één agent per persoon.
- DM-toegangscontrole is globaal per WhatsApp-account (koppeling/allowlist), niet per agent.
- Voor gedeelde groepen bind je de groep aan één agent of gebruik je Uitzendgroepen.
Routeringsregels (hoe berichten een agent kiezen)
Bindings zijn deterministisch en meest specifiek wint:Tie-breaking en AND-semantiek
Tie-breaking en AND-semantiek
- Als meerdere bindings in dezelfde laag matchen, wint de eerste in de configuratievolgorde.
- Als een binding meerdere matchvelden instelt (bijvoorbeeld
peer+guildId), zijn alle opgegeven velden vereist (AND-semantiek).
Details over accountscope
Details over accountscope
- Een binding die
accountIdweglaat, matcht alleen het standaardaccount. Deze matcht niet alle accounts. - Gebruik
accountId: "*"voor een kanaalbrede fallback voor alle accounts. - Gebruik
accountId: "<name>"om één account te matchen. - Als je later dezelfde binding voor dezelfde agent toevoegt met een expliciete account-id, werkt OpenClaw de bestaande kanaal-only binding bij naar accountscope in plaats van deze te dupliceren.
Meerdere accounts / telefoonnummers
Kanalen die meerdere accounts ondersteunen (bijv. WhatsApp) gebruikenaccountId om elke login te identificeren. Elke accountId kan naar een andere agent worden gerouteerd, zodat één server meerdere telefoonnummers kan hosten zonder sessies te mengen.
Als je een kanaalbreed standaardaccount wilt wanneer accountId wordt weggelaten, stel dan channels.<channel>.defaultAccount in (optioneel). Wanneer dit niet is ingesteld, valt OpenClaw terug op default als dat aanwezig is, anders op de eerste geconfigureerde account-id (gesorteerd).
Veelvoorkomende kanalen die dit patroon ondersteunen zijn:
whatsapp,telegram,discord,slack,signal,imessageirc,line,googlechat,mattermost,matrix,nextcloud-talkzalo,zalouser,nostr,feishu
Concepten
agentId: één “brein” (workspace, auth per agent, sessieopslag per agent).accountId: één kanaalaccountinstantie (bijv. WhatsApp-account"personal"versus"biz").binding: routeert binnenkomende berichten naar eenagentIdop basis van(channel, accountId, peer)en optioneel guild-/team-id’s.- Directe chats vallen samen met
agent:<agentId>:<mainKey>(“main” per agent;session.mainKey).
Platformvoorbeelden
Discord-bots per agent
Discord-bots per agent
Elk Discord-botaccount wordt toegewezen aan een unieke
accountId. Bind elk account aan een agent en houd allowlists per bot bij.- Nodig elke bot uit voor de guild en schakel Message Content Intent in.
- Tokens staan in
channels.discord.accounts.<id>.token(het standaardaccount kanDISCORD_BOT_TOKENgebruiken).
Telegram-bots per agent
Telegram-bots per agent
- Maak met BotFather één bot per agent en kopieer elk token.
- Tokens staan in
channels.telegram.accounts.<id>.botToken(het standaardaccount kanTELEGRAM_BOT_TOKENgebruiken). - Nodig bij meerdere bots in dezelfde Telegram-groep elke bot uit en vermeld de bot die moet antwoorden.
- Schakel BotFather Privacy Mode uit voor elke groepsbot en voeg de bot daarna opnieuw toe, zodat Telegram de instelling toepast.
- Sta groepen toe met
channels.telegram.groups, of gebruikgroupPolicy: "open"alleen voor vertrouwde groepsimplementaties. - Zet gebruikers-ID’s van afzenders in
groupAllowFrom. Groeps- en supergroep-ID’s horen inchannels.telegram.groups, niet ingroupAllowFrom. - Bind op
accountId, zodat elke bot naar zijn eigen agent routeert.
WhatsApp-nummers per agent
WhatsApp-nummers per agent
Koppel elk account voordat je de gateway start:
~/.openclaw/openclaw.json (JSON5):Veelgebruikte patronen
- WhatsApp dagelijks + diep werk in Telegram
- Zelfde kanaal, één peer naar Opus
- Familie-agent gebonden aan een WhatsApp-groep
Splits op kanaal: routeer WhatsApp naar een snelle alledaagse agent en Telegram naar een Opus-agent.Opmerkingen:
- Deze voorbeelden gebruiken
accountId: "*", zodat de bindingen blijven werken als je later accounts toevoegt. - Voeg een
match.peer-binding voor die peer toe om één DM/groep naar Opus te routeren terwijl de rest op chat blijft; peer-matches winnen altijd van kanaalbrede regels.
Sandbox- en toolconfiguratie per agent
Elke agent kan zijn eigen sandbox en toolbeperkingen hebben:setupCommand staat onder sandbox.docker en wordt één keer uitgevoerd bij het maken van de container. Overrides voor sandbox.docker.* per agent worden genegeerd wanneer de opgeloste scope "shared" is.- Beveiligingsisolatie: beperk tools voor niet-vertrouwde agents.
- Resourcebeheer: sandbox specifieke agents terwijl andere op de host blijven.
- Flexibel beleid: verschillende machtigingen per agent.
tools.elevated is globaal en gebaseerd op afzenders; het is niet per agent configureerbaar. Als je grenzen per agent nodig hebt, gebruik dan agents.list[].tools om exec te weigeren. Gebruik voor groepstargeting agents.list[].groupChat.mentionPatterns, zodat @mentions netjes aan de bedoelde agent worden gekoppeld.Gerelateerd
- ACP-agents — externe codeharnassen uitvoeren
- Kanaalroutering — hoe berichten naar agents routeren
- Aanwezigheid — aanwezigheid en beschikbaarheid van agents
- Sessie — sessie-isolatie en routering
- Subagents — agent-runs op de achtergrond starten