Routing wieloagentowy
Cel: wiele izolowanych agentów (oddzielny obszar roboczy +agentDir + sesje), a także wiele kont kanałów (np. dwa WhatsAppy) w jednym uruchomionym Gateway. Ruch przychodzący jest kierowany do agenta za pomocą powiązań.
Czym jest „jeden agent”?
Agent to w pełni wydzielony „mózg” z własnymi:- Obszarem roboczym (pliki, AGENTS.md/SOUL.md/USER.md, notatki lokalne, reguły persony).
- Katalogiem stanu (
agentDir) dla profili uwierzytelniania, rejestru modeli i konfiguracji per agent. - Magazynem sesji (historia czatu + stan routingu) w
~/.openclaw/agents/<agentId>/sessions.
agentDir
między agentami (powoduje to kolizje uwierzytelniania/sesji). Jeśli chcesz współdzielić poświadczenia,
skopiuj auth-profiles.json do agentDir innego agenta.
Skills są per agent poprzez folder skills/ w każdym obszarze roboczym, a umiejętności współdzielone
są dostępne z ~/.openclaw/skills. Zobacz Skills: per-agent vs shared.
Gateway może hostować jednego agenta (domyślnie) lub wiele agentów równolegle.
Uwaga o obszarze roboczym: obszar roboczy każdego agenta jest domyślnym cwd, a nie twardym
sandboxem. Ścieżki względne rozwiązują się wewnątrz obszaru roboczego, ale ścieżki bezwzględne mogą
sięgać innych lokalizacji hosta, o ile sandboxing nie jest włączony. Zobacz
Sandboxing.
Ścieżki (szybka mapa)
- Konfiguracja:
~/.openclaw/openclaw.json(lubOPENCLAW_CONFIG_PATH) - Katalog stanu:
~/.openclaw(lubOPENCLAW_STATE_DIR) - Obszar roboczy:
~/.openclaw/workspace(lub~/.openclaw/workspace-<agentId>) - Katalog agenta:
~/.openclaw/agents/<agentId>/agent(lubagents.list[].agentDir) - Sesje:
~/.openclaw/agents/<agentId>/sessions
Tryb pojedynczego agenta (domyślny)
Jeśli nic nie zrobisz, OpenClaw uruchamia jednego agenta:agentIddomyślnie wynosimain.- Sesje są kluczowane jako
agent:main:<mainKey>. - Obszar roboczy domyślnie to
~/.openclaw/workspace(lub~/.openclaw/workspace-<profile>, gdy ustawione jestOPENCLAW_PROFILE). - Stan domyślnie to
~/.openclaw/agents/main/agent.
Pomocnik agenta
Użyj kreatora agenta, aby dodać nowego izolowanego agenta:bindings (lub pozwól, aby zrobił to kreator), aby routować wiadomości przychodzące.
Zweryfikuj za pomocą:
Wiele agentów = wiele osób, wiele osobowości
Przy wielu agentach każdyagentId staje się w pełni izolowaną personą:
- Różne numery telefonów/konta (per kanał
accountId). - Różne osobowości (pliki obszaru roboczego per agent, takie jak
AGENTS.mdiSOUL.md). - Oddzielne uwierzytelnianie + sesje (brak wzajemnych interakcji, o ile nie włączono ich jawnie).
Jeden numer WhatsApp, wiele osób (podział DM)
Możesz kierować różne DM-y WhatsApp do różnych agentów, pozostając przy jednym koncie WhatsApp. Match on sender E.164 (like+15551234567) with peer.kind: "direct". Odpowiedzi nadal wychodzą z tego samego numeru WhatsApp (brak tożsamości nadawcy per agent).
Ważny szczegół: czaty bezpośrednie zapadają się do głównego klucza sesji agenta, więc prawdziwa izolacja wymaga jednego agenta na osobę.
Przykład:
- Kontrola dostępu do DM-ów jest globalna per konto WhatsApp (parowanie/lista dozwolonych), a nie per agent.
- Dla grup współdzielonych przypisz grupę do jednego agenta lub użyj Broadcast groups.
Reguły routingu (jak wiadomości wybierają agenta)
Powiązania są deterministyczne i obowiązuje zasada najbardziej szczegółowe wygrywa:- Dopasowanie
peer(dokładny identyfikator DM/grupy/kanału) - Dopasowanie
parentPeer(dziedziczenie wątku) guildId + roles(routing ról Discord)guildId(Discord)teamId(Slack)- Dopasowanie
accountIddla kanału - Dopasowanie na poziomie kanału (
accountId: "*") - Powrót do agenta domyślnego (
agents.list[].default, w przeciwnym razie pierwszy wpis listy, domyślnie:main)
peer + guildId), wszystkie określone pola są wymagane (semantyka AND).
Wiele kont / numerów telefonów
Kanały obsługujące wiele kont (np. WhatsApp) używająaccountId do identyfikacji
każdego logowania. Każde accountId może być kierowane do innego agenta, dzięki czemu jeden serwer może hostować
wiele numerów telefonów bez mieszania sesji.
Pojęcia
agentId: jeden „mózg” (obszar roboczy, uwierzytelnianie per agent, magazyn sesji per agent).accountId: jedna instancja konta kanału (np. konto WhatsApp"personal"vs"biz").binding: kieruje wiadomości przychodzące doagentIdwedług(channel, accountId, peer)oraz opcjonalnie identyfikatorów gildii/zespołów.- Czaty bezpośrednie zapadają się do
agent:<agentId>:<mainKey>(per-agent „główna”;session.mainKey).
Przykład: dwa WhatsAppy → dwóch agentów
~/.openclaw/openclaw.json (JSON5):
Przykład: WhatsApp do codziennych rozmów + Telegram do głębokiej pracy
Podział według kanału: kieruj WhatsApp do szybkiego agenta codziennego, a Telegram do agenta Opus.- Jeśli masz wiele kont dla danego kanału, dodaj
accountIddo powiązania (np.{ channel: "whatsapp", accountId: "personal" }). - Aby skierować pojedynczy DM/grupę do Opus, pozostawiając resztę na czacie, dodaj powiązanie
match.peerdla tego peera; dopasowania peera zawsze wygrywają nad regułami ogólnymi kanału.
Przykład: ten sam kanał, jeden peer do Opus
Pozostaw WhatsApp na szybkim agencie, ale skieruj jeden DM do Opus:Agent rodzinny przypisany do grupy WhatsApp
Przypisz dedykowanego agenta rodzinnego do jednej grupy WhatsApp, z bramkowaniem przez wzmianki i bardziej restrykcyjną polityką narzędzi:- Listy dozwolone/zabronione narzędzi dotyczą narzędzi, a nie skills. Jeśli skill musi uruchomić
plik binarny, upewnij się, że
execjest dozwolone i że plik binarny istnieje w sandboxie. - Dla bardziej restrykcyjnego bramkowania ustaw
agents.list[].groupChat.mentionPatternsi pozostaw włączone listy dozwolonych grup dla kanału.
Sandbox i konfiguracja narzędzi per agent
Od wersji v2026.1.6 każdy agent może mieć własny sandbox i ograniczenia narzędzi:setupCommand znajduje się pod sandbox.docker i uruchamia się raz przy tworzeniu kontenera.
Nadpisania sandbox.docker.* per agent są ignorowane, gdy rozstrzygnięty zakres to "shared".
Korzyści:
- Izolacja bezpieczeństwa: Ograniczanie narzędzi dla nieufnych agentów
- Kontrola zasobów: Sandboxowanie wybranych agentów przy pozostawieniu innych na hoście
- Elastyczne polityki: Różne uprawnienia per agent
tools.elevated jest globalne i oparte na nadawcy; nie jest konfigurowalne per agent.
Jeśli potrzebujesz granic per agent, użyj agents.list[].tools, aby zabronić exec.
Do targetowania grup użyj agents.list[].groupChat.mentionPatterns, aby wzmianki @ mapowały się jednoznacznie do zamierzonego agenta.
Zobacz Multi-Agent Sandbox & Tools, aby zapoznać się ze szczegółowymi przykładami.