Multi-Agent-Routing
Ziel: mehrere isolierte Agenten (separater Workspace +agentDir + Sitzungen) sowie mehrere Kanal-Konten (z. B. zwei WhatsApps) in einem laufenden Gateway. Eingehende Nachrichten werden über Bindungen einem Agenten zugeordnet.
Was ist „ein Agent“?
Ein Agent ist ein vollständig abgegrenztes „Gehirn“ mit eigenem:- Workspace (Dateien, AGENTS.md/SOUL.md/USER.md, lokale Notizen, Persona-Regeln).
- State-Verzeichnis (
agentDir) für Auth-Profile, Modell-Registry und agentenspezifische Konfiguration. - Sitzungsspeicher (Chatverlauf + Routing-Zustand) unter
~/.openclaw/agents/<agentId>/sessions.
agentDir niemals
über Agenten hinweg erneut (das verursacht Auth-/Sitzungskollisionen). Wenn Sie Anmeldedaten teilen möchten,
kopieren Sie auth-profiles.json in das agentDir des anderen Agenten.
Skills sind pro Agent über den skills/-Ordner jedes Workspaces verfügbar; gemeinsam genutzte Skills
stehen unter ~/.openclaw/skills bereit. Siehe Skills: per-agent vs shared.
Das Gateway kann einen Agenten (Standard) oder viele Agenten nebeneinander hosten.
Workspace-Hinweis: Der Workspace jedes Agenten ist das Standard-cwd, keine harte
sandbox. Relative Pfade werden innerhalb des Workspaces aufgelöst, absolute Pfade können jedoch
andere Host-Speicherorte erreichen, sofern sandboxing nicht aktiviert ist. Siehe
Sandboxing.
Pfade (Schnellkarte)
- Konfiguration:
~/.openclaw/openclaw.json(oderOPENCLAW_CONFIG_PATH) - State-Verzeichnis:
~/.openclaw(oderOPENCLAW_STATE_DIR) - Workspace:
~/.openclaw/workspace(oder~/.openclaw/workspace-<agentId>) - Agentenverzeichnis:
~/.openclaw/agents/<agentId>/agent(oderagents.list[].agentDir) - Sitzungen:
~/.openclaw/agents/<agentId>/sessions
Einzelagentenmodus (Standard)
Wenn Sie nichts tun, läuft OpenClaw mit einem einzelnen Agenten:agentIdist standardmäßigmain.- Sitzungen werden als
agent:main:<mainKey>geführt. - Der Workspace ist standardmäßig
~/.openclaw/workspace(oder~/.openclaw/workspace-<profile>, wennOPENCLAW_PROFILEgesetzt ist). - Der State ist standardmäßig
~/.openclaw/agents/main/agent.
Agenten-Helfer
Verwenden Sie den Agenten-Assistenten, um einen neuen isolierten Agenten hinzuzufügen:bindings hinzu (oder lassen Sie das den Assistenten erledigen), um eingehende Nachrichten zu routen.
Überprüfen Sie mit:
Mehrere Agenten = mehrere Personen, mehrere Persönlichkeiten
Mit mehreren Agenten wird jederagentId zu einer vollständig isolierten Persona:
- Unterschiedliche Telefonnummern/Konten (pro Kanal
accountId). - Unterschiedliche Persönlichkeiten (agentenspezifische Workspace-Dateien wie
AGENTS.mdundSOUL.md). - Getrennte Auth + Sitzungen (keine Überschneidungen, außer explizit aktiviert).
Eine WhatsApp-Nummer, mehrere Personen (DM-Aufteilung)
Sie können verschiedene WhatsApp-Direktnachrichten unterschiedlichen Agenten zuordnen und dabei ein einziges WhatsApp-Konto verwenden. Match on sender E.164 (like+15551234567) with peer.kind: "direct". Antworten kommen weiterhin von derselben WhatsApp-Nummer (keine agentenspezifische Absenderidentität).
Wichtiges Detail: Direktchats fallen auf den Haupt-Sitzungsschlüssel des Agenten zurück, daher erfordert echte Isolation einen Agenten pro Person.
Beispiel:
- DM-Zugriffskontrolle ist global pro WhatsApp-Konto (Pairing/Allowlist), nicht pro Agent.
- Für geteilte Gruppen binden Sie die Gruppe an einen Agenten oder verwenden Sie Broadcast groups.
Routing-Regeln (wie Nachrichten einen Agenten wählen)
Bindungen sind deterministisch und die spezifischste gewinnt:peer-Match (exakte DM-/Gruppen-/Kanal-ID)parentPeer-Match (Thread-Vererbung)guildId + roles(Discord-Rollen-Routing)guildId(Discord)teamId(Slack)accountId-Match für einen Kanal- Kanalweite Übereinstimmung (
accountId: "*") - Fallback auf Standardagent (
agents.list[].default, andernfalls erster Listeneintrag, Standard:main)
peer + guildId), sind alle angegebenen Felder erforderlich (AND-Semantik).
Mehrere Konten / Telefonnummern
Kanäle mit Unterstützung für mehrere Konten (z. B. WhatsApp) verwendenaccountId, um
jede Anmeldung zu identifizieren. Jedes accountId kann einem anderen Agenten zugeordnet werden,
sodass ein Server mehrere Telefonnummern hosten kann, ohne Sitzungen zu vermischen.
Konzepte
agentId: ein „Gehirn“ (Workspace, agentenspezifische Auth, agentenspezifischer Sitzungsspeicher).accountId: eine Kanal-Konto-Instanz (z. B. WhatsApp-Konto"personal"vs."biz").binding: routet eingehende Nachrichten zu einemagentIdanhand von(channel, accountId, peer)und optional Guild-/Team-IDs.- Direktchats fallen auf
agent:<agentId>:<mainKey>zurück (agentenspezifisches „main“;session.mainKey).
Beispiel: zwei WhatsApps → zwei Agenten
~/.openclaw/openclaw.json (JSON5):
Beispiel: WhatsApp-Tageschat + Telegram-Tiefenarbeit
Aufteilung nach Kanal: Routen Sie WhatsApp zu einem schnellen Alltagsagenten und Telegram zu einem Opus-Agenten.- Wenn Sie mehrere Konten für einen Kanal haben, fügen Sie
accountIdzur Bindung hinzu (z. B.{ channel: "whatsapp", accountId: "personal" }). - Um eine einzelne DM/Gruppe zu Opus zu routen und den Rest im Chat zu belassen, fügen Sie eine
match.peer-Bindung für diesen Peer hinzu; Peer-Matches gewinnen immer gegenüber kanalweiten Regeln.
Beispiel: gleicher Kanal, ein Peer zu Opus
Belassen Sie WhatsApp beim schnellen Agenten, routen Sie jedoch eine DM zu Opus:Familienagent an eine WhatsApp-Gruppe gebunden
Binden Sie einen dedizierten Familienagenten an eine einzelne WhatsApp-Gruppe, mit Mention-Gating und einer restriktiveren Werkzeugrichtlinie:- Tool-Allow-/Deny-Listen beziehen sich auf Werkzeuge, nicht auf Skills. Wenn ein Skill ein
Binary ausführen muss, stellen Sie sicher, dass
execerlaubt ist und das Binary in der sandbox vorhanden ist. - Für strengere Einschränkungen setzen Sie
agents.list[].groupChat.mentionPatternsund lassen Sie Gruppen-Allowlists für den Kanal aktiviert.
Sandbox und Werkzeugkonfiguration pro Agent
Ab v2026.1.6 kann jeder Agent seine eigene sandbox und Werkzeugbeschränkungen haben:setupCommand befindet sich unter sandbox.docker und wird einmal bei der Container-Erstellung ausgeführt.
Agentenspezifische sandbox.docker.*-Überschreibungen werden ignoriert, wenn der aufgelöste Geltungsbereich "shared" ist.
Vorteile:
- Sicherheitsisolation: Werkzeuge für nicht vertrauenswürdige Agenten einschränken
- Ressourcenkontrolle: Bestimmte Agenten sandboxen, andere auf dem Host belassen
- Flexible Richtlinien: Unterschiedliche Berechtigungen pro Agent
tools.elevated ist global und absenderbasiert; es ist nicht pro Agent konfigurierbar.
Wenn Sie agentenspezifische Grenzen benötigen, verwenden Sie agents.list[].tools, um exec zu verweigern.
Für Gruppenzielsteuerung verwenden Sie agents.list[].groupChat.mentionPatterns, damit @Mentions sauber dem vorgesehenen Agenten zugeordnet werden.
Siehe Multi-Agent Sandbox & Tools für detaillierte Beispiele.