Skip to main content
Uruchamiaj wielu izolowanych agentów w jednym procesie Gateway, z których każdy ma własny obszar roboczy, katalog stanu (agentDir) i historię sesji opartą na SQLite, a także wiele kont kanałów (np. dwa numery WhatsApp). Wiadomości przychodzące są kierowane do właściwego agenta za pomocą powiązań. Agent obejmuje pełny zakres przypisany do persony: pliki obszaru roboczego, profile uwierzytelniania, rejestr modeli i magazyn sesji. Powiązanie przypisuje konto kanału (obszar roboczy Slack, numer WhatsApp itp.) do jednego z tych agentów.

Czym jest jeden agent

Każdy agent ma własne:
  • Obszar roboczy: pliki, AGENTS.md/SOUL.md/USER.md, lokalne notatki, reguły persony.
  • Katalog stanu (agentDir): profile uwierzytelniania, rejestr modeli, konfiguracja agenta.
  • Magazyn sesji: historia czatów i stan routingu w ~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite.
Profile uwierzytelniania są przypisane do poszczególnych agentów i odczytywane z:
sessions_history to bezpieczniejszy sposób przywoływania informacji między sesjami: zwraca ograniczony, zredagowany widok, a nie pełny zrzut surowego transkryptu. Usuwa sygnatury bloków rozumowania, szczegóły danych wynikowych narzędzi, strukturę pomocniczą <relevant-memories>, znaczniki XML wywołań narzędzi (<tool_call>, <function_call> oraz ich formy mnogie/obniżonej wersji) i kod XML wywołań narzędzi MiniMax, a następnie skraca dane wyjściowe i ogranicza ich rozmiar w bajtach.
Nigdy nie używaj ponownie agentDir dla różnych agentów — powoduje to kolizje stanu uwierzytelniania i sesji. Gdy lokalne poświadczenie OAuth agenta dodatkowego wygaśnie lub jego odświeżenie się nie powiedzie, OpenClaw odczytuje poświadczenie domyślnego/głównego agenta dla tego samego identyfikatora profilu i przyjmuje najświeższy token, nie kopiując tokenu odświeżania do magazynu agenta dodatkowego. Aby korzystać z całkowicie niezależnego konta OAuth, należy zalogować się z poziomu tego agenta. W przypadku ręcznego kopiowania poświadczeń należy kopiować wyłącznie przenośne statyczne profile api_key lub token — dane odświeżania OAuth nie są domyślnie przenośne (copyToAgents umożliwia jawne włączenie tej funkcji dla profilu).
Skills są ładowane z obszaru roboczego każdego agenta oraz ze współdzielonych katalogów głównych, takich jak ~/.openclaw/skills, a następnie filtrowane według obowiązującej listy dozwolonych Skills agenta. Użyj agents.defaults.skills jako współdzielonej konfiguracji bazowej, a agents.list[].skills jako zamiennika dla konkretnego agenta (jawne wpisy zastępują wartości domyślne, a nie są z nimi scalane). Zobacz Skills: przypisane do agenta a współdzielone oraz Skills: listy dozwolone dla agentów. Magazyn należący do Pluginu podlega konfiguracji tego Pluginu; dodanie drugiego agenta nie powoduje automatycznego rozdzielenia wszystkich globalnych magazynów Pluginów. Na przykład należy skonfigurować sejfy Memory Wiki dla poszczególnych agentów, gdy persony nie mogą współdzielić skompilowanej wiedzy wiki.
Uwaga dotycząca obszaru roboczego: obszar roboczy każdego agenta jest domyślnym katalogiem cwd, a nie ścisłą piaskownicą. Ścieżki względne są rozwiązywane wewnątrz obszaru roboczego, ale ścieżki bezwzględne mogą uzyskiwać dostęp do innych lokalizacji hosta, jeśli nie włączono izolacji. Zobacz Izolacja.

Ścieżki

Tryb jednego agenta (domyślny)

Jeśli niczego nie skonfigurujesz, OpenClaw uruchamia jednego agenta:
  • agentId ma domyślnie wartość main.
  • Kluczem sesji jest agent:main:<mainKey> (domyślną wartością mainKey jest main).
  • Domyślnym obszarem roboczym jest ~/.openclaw/workspace (lub workspace-<profile>, gdy OPENCLAW_PROFILE ma wartość inną niż default).
  • Domyślnym katalogiem stanu jest ~/.openclaw/agents/main/agent.

Narzędzie pomocnicze agenta

Dodaj nowego izolowanego agenta:
Flagi: --workspace <dir>, --model <id>, --agent-dir <dir>, --bind <channel[:accountId]> (można powtarzać), --non-interactive (wymaga --workspace). Dodaj bindings, aby kierować wiadomości przychodzące (kreator zaproponuje wykonanie tej czynności), a następnie zweryfikuj konfigurację:

Szybki start

1

Utwórz obszar roboczy każdego agenta

Każdy agent otrzymuje własny obszar roboczy z plikami SOUL.md, AGENTS.md i opcjonalnym USER.md, a także dedykowany agentDir oraz magazyn sesji w ~/.openclaw/agents/<agentId>.
2

Utwórz konta kanałów

Utwórz po jednym koncie dla każdego agenta w preferowanych kanałach:
  • Discord: jeden bot na agenta, włącz Message Content Intent i skopiuj każdy token.
  • Telegram: jeden bot na agenta utworzony przez BotFather; skopiuj każdy token.
  • WhatsApp: połącz każdy numer telefonu z odpowiednim kontem.
Zobacz przewodniki po kanałach: Discord, Telegram, WhatsApp.
3

Dodaj agentów, konta i powiązania

Dodaj agentów w agents.list, konta kanałów w channels.<channel>.accounts i połącz je za pomocą bindings (przykłady poniżej).
4

Uruchom ponownie i zweryfikuj

Wielu agentów, wiele person

Każdy skonfigurowany agentId stanowi odrębną granicę persony dla podstawowego stanu agenta:
  • Różne konta w poszczególnych kanałach (według accountId).
  • Różne osobowości (pliki AGENTS.md/SOUL.md poszczególnych agentów).
  • Oddzielne uwierzytelnianie i sesje, przy czym dostęp między agentami jest włączany wyłącznie za pomocą jawnych funkcji lub konfiguracji Pluginu.
Dzięki temu wiele osób może współdzielić jeden Gateway, zachowując rozdzielenie podstawowego stanu agentów.

Sejfy Memory Wiki dla poszczególnych agentów

Memory Wiki domyślnie używa jednego globalnego sejfu. Aby skompilowana wiedza agenta pomocy technicznej była oddzielona od wiedzy agenta marketingowego, ustaw plugins.entries.memory-wiki.config.vault.scope na agent:
Skonfigurowana ścieżka jest katalogiem nadrzędnym. OpenClaw dołącza znormalizowany identyfikator agenta, tworząc ścieżki takie jak ~/.openclaw/wiki/support i ~/.openclaw/wiki/marketing. Operacje CLI i Gateway o zakresie agenta wymagają jawnego wskazania agenta, gdy skonfigurowano wielu agentów. Szczegółowe informacje o filtrowaniu mostka, migracji i granicach zaufania zawiera sekcja Sejfy Memory Wiki dla poszczególnych agentów.

Wyszukiwanie pamięci QMD między agentami

Aby umożliwić jednemu agentowi przeszukiwanie transkryptów sesji QMD innego agenta, dodaj dodatkowe kolekcje w agents.list[].memorySearch.qmd.extraCollections. Użyj agents.defaults.memorySearch.qmd.extraCollections, gdy każdy agent powinien współdzielić te same kolekcje.
Ścieżka dodatkowej kolekcji może być współdzielona przez agentów, ale jej name pozostaje jawnie określona, gdy ścieżka znajduje się poza obszarem roboczym agenta. Ścieżki wewnątrz obszaru roboczego zachowują zakres agenta, dzięki czemu każdy agent ma własny zestaw przeszukiwanych transkryptów.

Jeden numer WhatsApp, wiele osób (podział wiadomości prywatnych)

Kieruj wiadomości prywatne WhatsApp od różnych osób do różnych agentów na jednym koncie WhatsApp, dopasowując nadawcę E.164 (+15551234567) za pomocą peer.kind: "direct". Odpowiedzi nadal pochodzą z tego samego numeru WhatsApp — nie ma oddzielnej tożsamości nadawcy dla każdego agenta.
Czaty bezpośrednie są domyślnie scalane z kluczem głównej sesji agenta, dlatego pełna izolacja wymaga jednego agenta na osobę.
Kontrola dostępu do wiadomości prywatnych (parowanie/lista dozwolonych) jest globalna dla konta WhatsApp, a nie przypisana do agenta. W przypadku współdzielonych grup powiąż grupę z jednym agentem lub użyj grup rozgłoszeniowych.

Reguły routingu

Powiązania są deterministyczne, a najbardziej szczegółowe dopasowanie ma pierwszeństwo. Pełną kolejność poziomów (dokładny uczestnik, uczestnik nadrzędny, symbol wieloznaczny uczestnika, serwer+role, serwer, zespół, konto, kanał, domyślny agent) opisano w sekcji Routing kanałów. Warto podkreślić kilka reguł:
  • Jeśli na tym samym poziomie pasuje wiele powiązań, pierwszeństwo ma pierwsze z nich w kolejności konfiguracji.
  • Jeśli powiązanie określa wiele pól dopasowania (na przykład peer + guildId), wszystkie wskazane pola muszą być zgodne (semantyka AND).
  • Powiązanie bez accountId pasuje wyłącznie do konta domyślnego, a nie do każdego konta. Użyj accountId: "*" jako rezerwowego dopasowania dla całego kanału lub accountId: "<name>" dla jednego konta. Ponowne dodanie tego samego powiązania z jawnym identyfikatorem konta aktualizuje istniejące powiązanie obejmujące tylko kanał, zamiast je duplikować.

Wiele kont / numerów telefonów

Kanały obsługujące wiele kont (np. WhatsApp) używają accountId do identyfikowania każdego logowania. Każdy accountId kieruje ruch do własnego agenta, dzięki czemu jeden serwer może obsługiwać wiele numerów telefonów bez mieszania sesji. Ustaw channels.<channel>.defaultAccount, aby wybrać konto używane w przypadku pominięcia accountId. Jeśli ta wartość nie jest ustawiona, OpenClaw używa default, o ile jest dostępne, a w przeciwnym razie pierwszego identyfikatora skonfigurowanego konta (po posortowaniu). Kanały obsługujące wiele kont: discord, feishu, googlechat, imessage, irc, line, mattermost, matrix, nextcloud-talk, nostr, signal, slack, telegram, whatsapp, zalo, zalouser.

Pojęcia

  • agentId: jeden „mózg” (obszar roboczy, uwierzytelnianie osobne dla każdego agenta, magazyn sesji osobny dla każdego agenta).
  • accountId: jedna instancja konta kanału (np. konto WhatsApp personal w odróżnieniu od biz).
  • binding: kieruje wiadomości przychodzące do agentId według (channel, accountId, peer) oraz opcjonalnie identyfikatorów gildii/zespołu.
  • Czaty bezpośrednie są łączone w agent:<agentId>:<mainKey> („główną” sesję danego agenta; zob. session.mainKey).

Przykłady dla platform

Każde konto bota Discord jest mapowane na unikatowy accountId. Powiąż każde konto z agentem i utrzymuj osobne listy dozwolonych dla każdego bota.
  • Zaproś każdego bota do gildii i włącz Message Content Intent.
  • Tokeny znajdują się w channels.discord.accounts.<id>.token (konto domyślne może używać DISCORD_BOT_TOKEN).
  • Utwórz po jednym bocie dla każdego agenta za pomocą BotFather i skopiuj każdy token.
  • Tokeny znajdują się w channels.telegram.accounts.<id>.botToken (konto domyślne może używać TELEGRAM_BOT_TOKEN).
  • W przypadku wielu botów w tej samej grupie Telegram zaproś każdego bota i oznacz tego, który powinien odpowiedzieć.
  • Wyłącz BotFather Privacy Mode dla każdego bota grupowego (/setprivacy -> Disable), a następnie usuń i ponownie dodaj bota, aby Telegram zastosował ustawienie.
  • Zezwalaj na grupy za pomocą channels.telegram.groups lub używaj groupPolicy: "open" wyłącznie we wdrożeniach z zaufanymi grupami.
  • Umieść identyfikatory użytkowników będących nadawcami w groupAllowFrom. Identyfikatory grup i supergrup należy umieszczać w channels.telegram.groups, a nie w groupAllowFrom.
  • Powiąż według accountId, aby każdy bot kierował wiadomości do własnego agenta.
Połącz każde konto przed uruchomieniem Gateway:
~/.openclaw/openclaw.json (JSON5):

Typowe wzorce

Rozdziel według kanału: kieruj WhatsApp do szybkiego agenta codziennego użytku, a Telegram do agenta Opus.
W tych przykładach użyto accountId: "*", dzięki czemu powiązania będą nadal działać po późniejszym dodaniu kont. Aby skierować pojedynczą wiadomość bezpośrednią lub grupę do Opus, pozostawiając resztę na czacie, dodaj powiązanie match.peer dla tego elementu równorzędnego — dopasowania elementów równorzędnych zawsze mają pierwszeństwo przed regułami obejmującymi cały kanał.

Konfiguracja piaskownicy i narzędzi dla poszczególnych agentów

Każdy agent może mieć własną piaskownicę i ograniczenia narzędzi:
setupCommand znajduje się w sandbox.docker i jest uruchamiane jednokrotnie podczas tworzenia kontenera. Nadpisania sandbox.docker.* dla poszczególnych agentów są ignorowane, gdy wynikowy zakres to "shared".
Zapewnia to:
  • Izolację zabezpieczeń: ograniczenie narzędzi dla niezaufanych agentów.
  • Kontrolę zasobów: uruchamianie określonych agentów w piaskownicy przy zachowaniu pozostałych na hoście.
  • Elastyczne polityki: różne uprawnienia dla poszczególnych agentów.
tools.elevated ma zarówno bramę globalną (tools.elevated.enabled/allowFrom), jak i bramę dla poszczególnych agentów (agents.list[].tools.elevated.enabled/allowFrom). Brama dla agenta może jedynie dodatkowo ograniczyć bramę globalną — obie muszą zezwalać nadawcy na uruchamianie poleceń z podwyższonymi uprawnieniami. Do kierowania w grupach używaj agents.list[].groupChat.mentionPatterns, aby @wzmianki były jednoznacznie mapowane na właściwego agenta.
Szczegółowe przykłady zawiera strona Piaskownica i narzędzia w konfiguracji wieloagentowej.

Powiązane

  • Agenci ACP — uruchamianie zewnętrznych środowisk programistycznych
  • Routing kanałów — sposób kierowania wiadomości do agentów
  • Obecność — obecność i dostępność agentów
  • Sesja — izolacja i routing sesji
  • Podagenci — uruchamianie agentów w tle