Multi-Agent-Routing
Ziel: mehrere isolierte Agenten (separater Workspace +agentDir + Sitzungen) sowie mehrere Kanalkonten (z. B. zwei WhatsApp-Konten) in einem laufenden Gateway. Eingehende Nachrichten werden über Bindings an einen Agenten weitergeleitet.
Was ist „ein Agent“?
Ein Agent ist ein vollständig abgegrenztes System mit eigenem:- Workspace (Dateien, AGENTS.md/SOUL.md/USER.md, lokale Notizen, Persona-Regeln).
- Statusverzeichnis (
agentDir) für Auth-Profile, Modell-Registry und agentenspezifische Konfiguration. - Sitzungsspeicher (Chatverlauf + Routing-Status) unter
~/.openclaw/agents/<agentId>/sessions.
sessions_history ist auch hier der sicherere Weg für sitzungsübergreifenden Abruf: Es liefert
eine begrenzte, bereinigte Ansicht, keinen rohen Transkript-Dump. Der Assistant-Abruf entfernt
Thinking-Tags, <relevant-memories>-Gerüste, XML-Payloads von Tool-Aufrufen im Klartext
(einschließlich <tool_call>...</tool_call>,
<function_call>...</function_call>, <tool_calls>...</tool_calls>,
<function_calls>...</function_calls> sowie abgeschnittener Tool-Call-Blöcke),
herabgestufte Tool-Call-Gerüste, durchgesickerte ASCII-/Full-Width-Modell-Steuerungs-
Tokens und fehlerhaftes MiniMax-Tool-Call-XML vor Redaction/Truncation.
Anmeldedaten des Hauptagenten werden nicht automatisch geteilt. Verwenden Sie niemals dasselbe agentDir
für mehrere Agenten (das führt zu Auth-/Sitzungskollisionen). Wenn Sie Anmeldedaten teilen möchten,
kopieren Sie auth-profiles.json in das agentDir des anderen Agenten.
Skills werden aus dem Workspace jedes Agenten sowie aus gemeinsamen Wurzelverzeichnissen wie
~/.openclaw/skills geladen und dann anhand der effektiven Agent-Skill-Allowlist gefiltert, wenn diese konfiguriert ist. Verwenden Sie agents.defaults.skills für eine gemeinsame Basis und
agents.list[].skills für agentenspezifisches Ersetzen. Siehe
Skills: per-agent vs shared und
Skills: agent skill allowlists.
Das Gateway kann einen Agenten (Standard) oder mehrere Agenten nebeneinander hosten.
Hinweis zum Workspace: Der Workspace jedes Agenten ist das Standard-cwd, keine harte
Sandbox. Relative Pfade werden innerhalb des Workspace aufgelöst, absolute Pfade können aber
andere Orte auf dem Host erreichen, sofern keine Sandbox aktiviert ist. Siehe
Sandboxing.
Pfade (Kurzüberblick)
- Konfiguration:
~/.openclaw/openclaw.json(oderOPENCLAW_CONFIG_PATH) - Statusverzeichnis:
~/.openclaw(oderOPENCLAW_STATE_DIR) - Workspace:
~/.openclaw/workspace(oder~/.openclaw/workspace-<agentId>) - Agent-Verzeichnis:
~/.openclaw/agents/<agentId>/agent(oderagents.list[].agentDir) - Sitzungen:
~/.openclaw/agents/<agentId>/sessions
Einzelagent-Modus (Standard)
Wenn Sie nichts tun, führt OpenClaw einen einzelnen Agenten aus:agentIdist standardmäßigmain.- Sitzungen werden als
agent:main:<mainKey>geschlüsselt. - Der Workspace ist standardmäßig
~/.openclaw/workspace(oder~/.openclaw/workspace-<profile>, wennOPENCLAW_PROFILEgesetzt ist). - Der Status ist standardmäßig
~/.openclaw/agents/main/agent.
Agent-Helfer
Verwenden Sie den Agent-Wizard, um einen neuen isolierten Agenten hinzuzufügen:bindings hinzu (oder lassen Sie das den Wizard tun), um eingehende Nachrichten weiterzuleiten.
Überprüfen Sie dies mit:
Schnelleinstieg
Workspace für jeden Agenten erstellen
Verwenden Sie den Wizard oder erstellen Sie Workspaces manuell:Jeder Agent erhält einen eigenen Workspace mit
SOUL.md, AGENTS.md und optional USER.md sowie ein dediziertes agentDir und einen Sitzungsspeicher unter ~/.openclaw/agents/<agentId>.Kanalkonten erstellen
Erstellen Sie pro Agent ein Konto in Ihren bevorzugten Kanälen:Siehe Kanalleitfäden: Discord, Telegram, WhatsApp.
- Discord: ein Bot pro Agent, Message Content Intent aktivieren, jedes Token kopieren.
- Telegram: ein Bot pro Agent über BotFather, jedes Token kopieren.
- WhatsApp: jede Telefonnummer pro Konto verknüpfen.
Agenten, Konten und Bindings hinzufügen
Fügen Sie Agenten unter
agents.list, Kanalkonten unter channels.<channel>.accounts hinzu und verbinden Sie sie über bindings (Beispiele unten).Mehrere Agenten = mehrere Personen, mehrere Persönlichkeiten
Mit mehreren Agenten wird jedeagentId zu einer vollständig isolierten Persona:
- Unterschiedliche Telefonnummern/Konten (pro Kanal
accountId). - Unterschiedliche Persönlichkeiten (über agentenspezifische Workspace-Dateien wie
AGENTS.mdundSOUL.md). - Getrennte Auth + Sitzungen (kein Übersprechen, sofern nicht explizit aktiviert).
QMD-Memory-Suche agentenübergreifend
Wenn ein Agent die QMD-Sitzungstranskripte eines anderen Agenten durchsuchen soll, fügen Sie zusätzliche Collections unteragents.list[].memorySearch.qmd.extraCollections hinzu.
Verwenden Sie agents.defaults.memorySearch.qmd.extraCollections nur dann, wenn jeder Agent
dieselben gemeinsamen Transkript-Collections erben soll.
Eine WhatsApp-Nummer, mehrere Personen (DM-Aufteilung)
Sie können unterschiedliche WhatsApp-DMs an unterschiedliche Agenten weiterleiten, während Sie bei einem WhatsApp-Konto bleiben. Gleichen Sie mit der E.164-Absendernummer (wie+15551234567) und peer.kind: "direct" ab. Antworten kommen weiterhin von derselben WhatsApp-Nummer (keine agentenspezifische Absenderidentität).
Wichtiges Detail: Direktchats werden auf den Hauptsitzungsschlüssel des Agenten reduziert, daher erfordert echte Isolation einen Agenten pro Person.
Beispiel:
- Die DM-Zugriffskontrolle ist global pro WhatsApp-Konto (Pairing/Allowlist), nicht pro Agent.
- Für gemeinsam genutzte Gruppen binden Sie die Gruppe an einen Agenten oder verwenden Sie Broadcast groups.
Routing-Regeln (wie Nachrichten einen Agenten auswählen)
Bindings sind deterministisch und die spezifischste Regel gewinnt:peer-Match (exakte DM-/Gruppen-/Kanal-ID)parentPeer-Match (Thread-Vererbung)guildId + roles(Discord-Routing nach Rollen)guildId(Discord)teamId(Slack)accountId-Match für einen Kanal- Kanalweites Match (
accountId: "*") - Fallback auf Standardagent (
agents.list[].default, sonst erster Listeneintrag, Standard:main)
peer + guildId), müssen alle angegebenen Felder übereinstimmen (AND-Semantik).
Wichtiges Detail zum Kontobereich:
- Ein Binding ohne
accountIdpasst nur auf das Standardkonto. - Verwenden Sie
accountId: "*"für einen kanalweiten Fallback über alle Konten hinweg. - Wenn Sie später dasselbe Binding für denselben Agenten mit einer expliziten Konto-ID hinzufügen, erweitert OpenClaw das vorhandene kanalweite Binding auf Kontobereich, statt es zu duplizieren.
Mehrere Konten / Telefonnummern
Kanäle, die mehrere Konten unterstützen (z. B. WhatsApp), verwendenaccountId, um
jede Anmeldung zu identifizieren. Jede accountId kann an einen anderen Agenten weitergeleitet werden, sodass ein Server
mehrere Telefonnummern hosten kann, ohne Sitzungen zu vermischen.
Wenn Sie ein kanalweites Standardkonto möchten, wenn accountId weggelassen wird, setzen Sie
optional channels.<channel>.defaultAccount. Wenn dies nicht gesetzt ist, fällt OpenClaw auf
default zurück, falls vorhanden, sonst auf die erste konfigurierte Konto-ID (sortiert).
Häufige Kanäle, die dieses Muster unterstützen:
whatsapp,telegram,discord,slack,signal,imessageirc,line,googlechat,mattermost,matrix,nextcloud-talkbluebubbles,zalo,zalouser,nostr,feishu
Konzepte
agentId: ein „Gehirn“ (Workspace, agentenspezifische Auth, agentenspezifischer Sitzungsspeicher).accountId: eine Kanal-Konto-Instanz (z. B. WhatsApp-Konto"personal"vs"biz").binding: leitet eingehende Nachrichten anhand von(channel, accountId, peer)und optional Guild-/Team-IDs an eineagentIdweiter.- Direktchats werden auf
agent:<agentId>:<mainKey>reduziert (pro Agent „main“;session.mainKey).
Plattformbeispiele
Discord-Bots pro Agent
Jedes Discord-Bot-Konto wird auf eine eindeutigeaccountId abgebildet. Binden Sie jedes Konto an einen Agenten und behalten Sie Allowlists pro Bot bei.
- Laden Sie jeden Bot in die Guild ein und aktivieren Sie Message Content Intent.
- Tokens liegen in
channels.discord.accounts.<id>.token(das Standardkonto kannDISCORD_BOT_TOKENverwenden).
Telegram-Bots pro Agent
- Erstellen Sie pro Agent einen Bot mit BotFather und kopieren Sie jedes Token.
- Tokens liegen in
channels.telegram.accounts.<id>.botToken(das Standardkonto kannTELEGRAM_BOT_TOKENverwenden).
WhatsApp-Nummern pro Agent
Verknüpfen Sie jedes Konto, bevor Sie das Gateway starten:~/.openclaw/openclaw.json (JSON5):
Beispiel: täglicher WhatsApp-Chat + Telegram-Deep-Work
Nach Kanal aufteilen: WhatsApp an einen schnellen Alltagsagenten weiterleiten und Telegram an einen Opus-Agenten.- Wenn Sie mehrere Konten für einen Kanal haben, fügen Sie
accountIdzum Binding hinzu (zum Beispiel{ channel: "whatsapp", accountId: "personal" }). - Um eine einzelne DM/Gruppe an Opus weiterzuleiten, während der Rest bei chat bleibt, fügen Sie ein
match.peer-Binding für diesen Peer hinzu; Peer-Matches gewinnen immer vor kanalweiten Regeln.
Beispiel: gleicher Kanal, ein Peer an Opus
Behalten Sie WhatsApp beim schnellen Agenten, leiten Sie aber eine DM an Opus weiter:Familien-Agent an eine WhatsApp-Gruppe gebunden
Binden Sie einen dedizierten Familien-Agenten an eine einzelne WhatsApp-Gruppe, mit Mention-Gating und einer strengeren Tool-Richtlinie:- Tool-Allow-/Deny-Listen sind Tools, nicht Skills. Wenn ein Skill eine
Binärdatei ausführen muss, stellen Sie sicher, dass
execerlaubt ist und die Binärdatei in der Sandbox existiert. - Für strikteres Gating setzen Sie
agents.list[].groupChat.mentionPatternsund lassen Gruppen-Allowlists für den Kanal aktiviert.
Sandbox- und Tool-Konfiguration pro Agent
Jeder Agent kann eigene Sandbox- und Tool-Einschränkungen haben:setupCommand steht unter sandbox.docker und wird einmal beim Erstellen des Containers ausgeführt.
Überschreibungen pro Agent für sandbox.docker.* werden ignoriert, wenn der aufgelöste Scope "shared" ist.
Vorteile:
- Sicherheitsisolierung: Tools für nicht vertrauenswürdige Agenten einschränken
- Ressourcenkontrolle: Bestimmte Agenten in eine Sandbox setzen, während andere auf dem Host bleiben
- Flexible Richtlinien: Unterschiedliche Berechtigungen pro Agent
tools.elevated ist global und absenderbasiert; es ist nicht pro Agent konfigurierbar.
Wenn Sie Grenzen pro Agent benötigen, verwenden Sie agents.list[].tools, um exec zu verbieten.
Für Gruppenziele verwenden Sie agents.list[].groupChat.mentionPatterns, damit @Erwähnungen klar dem beabsichtigten Agenten zugeordnet werden.
Siehe Multi-Agent Sandbox & Tools für detaillierte Beispiele.
Verwandt
- Channel Routing — wie Nachrichten an Agenten weitergeleitet werden
- Sub-Agents — Ausführen von Agentenläufen im Hintergrund
- ACP Agents — Ausführen externer Coding-Harnesses
- Presence — Agent-Präsenz und Verfügbarkeit
- Session — Sitzungsisolierung und Routing