Skip to main content
Voer meerdere geïsoleerde agents uit in één Gateway-proces, elk met een eigen werkruimte, statusmap (agentDir) en op SQLite gebaseerde sessiegeschiedenis, plus meerdere kanaalaccounts (bijvoorbeeld twee WhatsApp-nummers). Inkomende berichten worden via bindingen naar de juiste agent gerouteerd. Een agent omvat alles wat bij één persona hoort: werkruimtebestanden, authenticatieprofielen, modelregister en sessieopslag. Een binding koppelt een kanaalaccount (een Slack-werkruimte, een WhatsApp-nummer enzovoort) aan een van die agents.

Wat is één agent

Elke agent heeft een eigen:
  • Werkruimte: bestanden, AGENTS.md/SOUL.md/USER.md, lokale notities, personaregels.
  • Statusmap (agentDir): authenticatieprofielen, modelregister, configuratie per agent.
  • Sessieopslag: chatgeschiedenis en routeringsstatus in ~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite.
Authenticatieprofielen zijn per agent en worden gelezen uit:
sessions_history is het veiligere pad om informatie tussen sessies op te halen: het retourneert een begrensde, geredigeerde weergave en geen onbewerkte transcriptdump. Het verwijdert handtekeningen van denkblokken, details van toolresultaatpayloads, <relevant-memories>-scaffolding, XML-tags voor toolaanroepen (<tool_call>, <function_call> en hun meervoudige/gedowngradede vormen) en XML voor MiniMax-toolaanroepen. Vervolgens wordt de uitvoer afgekapt en op bytegrootte begrensd.
Gebruik agentDir nooit opnieuw voor meerdere agents — dit veroorzaakt botsingen tussen authenticatie- en sessiestatussen. Wanneer de lokale OAuth-referentie van een secundaire agent is verlopen of het vernieuwen ervan mislukt, leest OpenClaw de referentie van de standaard-/hoofdagent voor dezelfde profiel-id en neemt het het meest recente token over, zonder het vernieuwingstoken naar de opslag van de secundaire agent te kopiëren. Als je een volledig onafhankelijk OAuth-account wilt, meld je dan vanuit die agent aan. Als je referenties handmatig kopieert, kopieer dan alleen overdraagbare statische api_key- of token-profielen — OAuth-vernieuwingsmateriaal is standaard niet overdraagbaar (copyToAgents kan dit expliciet voor een profiel inschakelen).
Skills worden geladen uit de werkruimte van elke agent en uit gedeelde hoofdmappen zoals ~/.openclaw/skills, en vervolgens gefilterd op basis van de effectieve lijst met toegestane Skills van de agent. Gebruik agents.defaults.skills voor een gedeelde basis en agents.entries.*.skills voor een vervanging per agent (expliciete vermeldingen vervangen de standaard en worden er niet mee samengevoegd). Zie Skills: per agent versus gedeeld en Skills: lijsten met toegestane agents. Opslag die eigendom is van een Plugin volgt de configuratie van die Plugin; door een tweede agent toe te voegen, wordt niet automatisch elke algemene Plugin-opslag opgesplitst. Configureer bijvoorbeeld Memory Wiki-kluizen per agent wanneer persona’s geen gecompileerde wikikennis mogen delen.
Opmerking over de werkruimte: de werkruimte van elke agent is de standaard-cwd, geen harde sandbox. Relatieve paden worden binnen de werkruimte omgezet, maar absolute paden kunnen andere locaties op de host bereiken, tenzij sandboxing is ingeschakeld. Zie Sandboxing.

Paden

Modus met één agent (standaard)

Als je niets configureert, voert OpenClaw één agent uit:
  • agentId is standaard main.
  • Sessies gebruiken agent:main:<mainKey> als sleutel (standaard is mainKey gelijk aan main).
  • De werkruimte is standaard ~/.openclaw/workspace (of workspace-<profile> wanneer OPENCLAW_PROFILE is ingesteld op iets anders dan default).
  • De status is standaard ~/.openclaw/agents/main/agent.

Agenthelper

Voeg een nieuwe geïsoleerde agent toe:
Vlaggen: --workspace <dir>, --model <id>, --agent-dir <dir>, --bind <channel[:accountId]> (herhaalbaar), --non-interactive (vereist --workspace). Voeg bindings toe om inkomende berichten te routeren (de wizard biedt aan dit voor je te doen) en controleer vervolgens:

Snel aan de slag

1

Maak de werkruimte van elke agent

Elke agent krijgt een eigen werkruimte met SOUL.md, AGENTS.md en optioneel USER.md, plus een eigen agentDir en sessieopslag onder ~/.openclaw/agents/<agentId>.
2

Maak kanaalaccounts

Maak voor elke agent één account aan op de kanalen van je voorkeur:
  • Discord: één bot per agent, schakel Message Content Intent in en kopieer elk token.
  • Telegram: één bot per agent via BotFather; kopieer elk token.
  • WhatsApp: koppel elk telefoonnummer per account.
Zie de kanaalhandleidingen: Discord, Telegram, WhatsApp.
3

Voeg agents, accounts en bindingen toe

Voeg agents toe onder agents.entries, kanaalaccounts onder channels.<channel>.accounts en verbind ze met bindings (zie de voorbeelden hieronder).
4

Herstart en controleer

Meerdere agents, meerdere persona’s

Elke geconfigureerde agentId vormt een afzonderlijke personagrens voor de kernstatus van de agent:
  • Verschillende accounts per kanaal (per accountId).
  • Verschillende persoonlijkheden (AGENTS.md/SOUL.md per agent).
  • Afzonderlijke authenticatie en sessies, waarbij toegang tussen agents alleen via expliciete functies of Plugin-configuratie wordt ingeschakeld.
Hierdoor kunnen meerdere personen één Gateway delen terwijl de kernstatus van hun agents gescheiden blijft.

Memory Wiki-kluizen per agent

Memory Wiki gebruikt standaard één algemene kluis. Om de gecompileerde kennis van een supportagent gescheiden te houden van die van een marketingagent, stel je plugins.entries.memory-wiki.config.vault.scope in op agent:
Het geconfigureerde pad is de bovenliggende map. OpenClaw voegt de genormaliseerde agent-id toe, waardoor paden ontstaan zoals ~/.openclaw/wiki/support en ~/.openclaw/wiki/marketing. Voor CLI- en Gateway-bewerkingen binnen het bereik van een agent moet expliciet een agent worden opgegeven wanneer meerdere agents zijn geconfigureerd. Zie Memory Wiki-kluizen per agent voor details over bridgefiltering, migratie en vertrouwensgrenzen.

QMD-geheugen doorzoeken tussen agents

Als je één agent de QMD-sessietranscripten van een andere agent wilt laten doorzoeken, voeg je extra verzamelingen toe onder agents.entries.*.memory.search.qmd.extraCollections. Gebruik memory.search.qmd.extraCollections wanneer elke agent dezelfde verzamelingen moet delen.
Een pad van een extra verzameling kan tussen agents worden gedeeld, maar de name ervan blijft expliciet wanneer het pad buiten de werkruimte van de agent ligt. Paden binnen de werkruimte blijven beperkt tot de agent, zodat elke agent een eigen verzameling voor het doorzoeken van transcripten behoudt.

Eén WhatsApp-nummer, meerdere personen (DM-splitsing)

Routeer verschillende WhatsApp-DM’s naar verschillende agents op één WhatsApp-account door de E.164 van de afzender (+15551234567) te vergelijken met peer.kind: "direct". Antwoorden worden nog steeds vanaf hetzelfde WhatsApp-nummer verzonden — er is geen afzenderidentiteit per agent.
Directe chats worden standaard samengevoegd onder de hoofdsessiesleutel van de agent, dus voor echte isolatie is één agent per persoon vereist.
De toegangscontrole voor DM’s (koppeling/lijst met toegestane afzenders) is algemeen per WhatsApp-account, niet per agent. Koppel gedeelde groepen aan één agent of gebruik Broadcastgroepen.

Routeringsregels

Bindingen zijn deterministisch en de specifiekste wint. Zie Kanaalroutering voor de volledige volgorde van niveaus (exacte peer, bovenliggende peer, jokerteken voor peers, guild+rollen, guild, team, account, kanaal, standaardagent). Enkele regels die hier het vermelden waard zijn:
  • Als meerdere bindingen binnen hetzelfde niveau overeenkomen, wint de eerste in de configuratievolgorde.
  • Als een binding meerdere vergelijkingsvelden instelt (bijvoorbeeld peer + guildId), moeten alle opgegeven velden overeenkomen (AND-semantiek).
  • Een binding zonder accountId komt alleen overeen met het standaardaccount, niet met elk account. Gebruik accountId: "*" als terugvaloptie voor het hele kanaal, of accountId: "<name>" voor één account. Als je dezelfde binding opnieuw toevoegt met een expliciete account-id, wordt de bestaande binding die alleen voor het kanaal geldt bijgewerkt in plaats van gedupliceerd.

Meerdere accounts/telefoonnummers

Kanalen die meerdere accounts ondersteunen (bijvoorbeeld WhatsApp) gebruiken accountId om elke aanmelding te identificeren. Elke accountId wordt naar een eigen agent gerouteerd, zodat één server meerdere telefoonnummers kan hosten zonder sessies te vermengen. Stel channels.<channel>.defaultAccount in om het account te kiezen dat wordt gebruikt wanneer accountId is weggelaten. Als dit niet is ingesteld, valt OpenClaw terug op default indien aanwezig, en anders op de eerste geconfigureerde account-id (gesorteerd). Kanalen die meerdere accounts ondersteunen: discord, feishu, googlechat, imessage, irc, line, mattermost, matrix, nextcloud-talk, nostr, signal, slack, telegram, whatsapp, zalo, zalouser.

Concepten

  • agentId: één „brein” (werkruimte, authenticatie per agent, sessieopslag per agent).
  • accountId: één instantie van een kanaalaccount (bijvoorbeeld WhatsApp-account personal tegenover biz).
  • binding: routeert inkomende berichten naar een agentId op basis van (channel, accountId, peer), en optioneel guild-/team-id’s.
  • Directe chats worden samengevoegd tot agent:<agentId>:<mainKey> („main” per agent; zie session.mainKey).

Platformvoorbeelden

Elk Discord-botaccount wordt aan een unieke accountId gekoppeld. Koppel elk account aan een agent en houd per bot een toelatingslijst bij.
  • Nodig elke bot uit voor de guild en schakel Message Content Intent in.
  • Tokens staan in channels.discord.accounts.<id>.token (het standaardaccount kan DISCORD_BOT_TOKEN gebruiken).
  • Maak met BotFather één bot per agent en kopieer elk token.
  • Tokens staan in channels.telegram.accounts.<id>.botToken (het standaardaccount kan TELEGRAM_BOT_TOKEN gebruiken).
  • Nodig voor meerdere bots in dezelfde Telegram-groep elke bot uit en vermeld de bot die moet antwoorden.
  • Schakel voor elke groepsbot de BotFather Privacy Mode uit (/setprivacy -> Disable) en verwijder de bot vervolgens en voeg deze opnieuw toe, zodat Telegram de instelling toepast.
  • Sta groepen toe met channels.telegram.groups, of gebruik groupPolicy: "open" alleen voor vertrouwde groepsimplementaties.
  • Plaats gebruikers-id’s van afzenders in groupAllowFrom. Groeps- en supergroep-id’s horen in channels.telegram.groups, niet in groupAllowFrom.
  • Koppel op basis van accountId, zodat elke bot naar zijn eigen agent routeert.
Koppel elk account voordat je de Gateway start:
~/.openclaw/openclaw.json (JSON5):

Veelvoorkomende patronen

Splits per kanaal: routeer WhatsApp naar een snelle agent voor dagelijks gebruik en Telegram naar een Opus-agent.
Deze voorbeelden gebruiken accountId: "*", zodat de koppelingen blijven werken als je later accounts toevoegt. Om één privébericht/groep naar Opus te routeren terwijl de rest op chat blijft, voeg je voor die peer een match.peer-koppeling toe — overeenkomsten met peers krijgen altijd voorrang op regels voor het hele kanaal.

Sandbox- en toolconfiguratie per agent

Elke agent kan zijn eigen sandbox- en toolbeperkingen hebben:
setupCommand staat onder sandbox.docker en wordt eenmaal uitgevoerd wanneer de container wordt gemaakt. Overschrijvingen van sandbox.docker.* per agent worden genegeerd wanneer het bepaalde bereik "shared" is.
Dit biedt je:
  • Beveiligingsisolatie: beperk tools voor niet-vertrouwde agents.
  • Resourcebeheer: plaats specifieke agents in een sandbox terwijl andere op de host blijven.
  • Flexibel beleid: verschillende machtigingen per agent.
tools.elevated heeft zowel een globale toegangspoort (tools.elevated.enabled/allowFrom) als een toegangspoort per agent (agents.entries.*.tools.elevated.enabled/allowFrom). De toegangspoort per agent kan de globale alleen verder beperken — beide moeten een afzender toestaan voordat opdrachten met verhoogde bevoegdheden kunnen worden uitgevoerd. Gebruik voor groepstargeting agents.entries.*.groupChat.mentionPatterns, zodat @vermeldingen duidelijk aan de bedoelde agent worden gekoppeld.
Zie Sandbox en tools voor meerdere agents voor gedetailleerde voorbeelden.

Gerelateerd