Konfiguracja sandboxa i narzędzi dla wielu agentów
Przegląd
Każdy agent w konfiguracji wieloagentowej może teraz mieć własne:- Ustawienia sandboxa (
agents.list[].sandboxzastępujeagents.defaults.sandbox) - Ograniczenia narzędzi (
tools.allow/tools.deny, plusagents.list[].tools)
- Asystent osobisty z pełnym dostępem
- Agenci rodzinny/służbowy z ograniczonymi narzędziami
- Agenci publiczni uruchamiani w sandboxach
setupCommand należy umieścić pod sandbox.docker (globalnie lub per agent) i jest wykonywane jednokrotnie
podczas tworzenia kontenera.
Uwierzytelnianie jest per agent: każdy agent odczytuje z własnego magazynu uwierzytelniania agentDir pod adresem:
agentDir między agentami.
Jeśli chcesz współdzielić poświadczenia, skopiuj auth-profiles.json do agentDir drugiego agenta.
Aby dowiedzieć się, jak sandboxing zachowuje się w czasie działania, zobacz Sandboxing.
Do debugowania „dlaczego to jest zablokowane?” zobacz Sandbox vs Tool Policy vs Elevated oraz openclaw sandbox explain.
Przykłady konfiguracji
Przykład 1: Agent osobisty + ograniczony agent rodzinny
- Agent
main: działa na hoście, pełny dostęp do narzędzi - Agent
family: działa w Dockerze (jeden kontener na agenta), tylko narzędzieread
Przykład 2: Agent służbowy ze współdzielonym sandboxem
Przykład 2b: Globalny profil programistyczny + agent tylko do komunikacji
- domyślni agenci otrzymują narzędzia programistyczne
- agent
supportjest tylko do komunikacji (+ narzędzie Slack)
Przykład 3: Różne tryby sandboxa per agent
Priorytet konfiguracji
Gdy istnieją zarówno konfiguracje globalne (agents.defaults.*), jak i specyficzne dla agenta (agents.list[].*):
Konfiguracja sandboxa
Ustawienia specyficzne dla agenta nadpisują globalne:agents.list[].sandbox.{docker,browser,prune}.*zastępujeagents.defaults.sandbox.{docker,browser,prune}.*dla tego agenta (ignorowane, gdy zakres sandboxa rozwiązuje się do"shared").
Ograniczenia narzędzi
Kolejność filtrowania jest następująca:- Profil narzędzi (
tools.profilelubagents.list[].tools.profile) - Profil narzędzi dostawcy (
tools.byProvider[provider].profilelubagents.list[].tools.byProvider[provider].profile) - Globalna polityka narzędzi (
tools.allow/tools.deny) - Polityka narzędzi dostawcy (
tools.byProvider[provider].allow/deny) - Polityka narzędzi specyficzna dla agenta (
agents.list[].tools.allow/deny) - Polityka dostawcy agenta (
agents.list[].tools.byProvider[provider].allow/deny) - Polityka narzędzi sandboxa (
tools.sandbox.toolslubagents.list[].tools.sandbox.tools) - Polityka narzędzi subagenta (
tools.subagents.tools, jeśli dotyczy)
agents.list[].tools.sandbox.tools, zastępuje ono tools.sandbox.tools dla tego agenta.
Jeśli ustawiono agents.list[].tools.profile, nadpisuje ono tools.profile dla tego agenta.
Klucze narzędzi dostawcy akceptują zarówno provider (np. google-antigravity), jak i provider/model (np. openai/gpt-5.2).
Grupy narzędzi (skróty)
Polityki narzędzi (globalne, agenta, sandboxa) obsługują wpisygroup:*, które rozwijają się do wielu konkretnych narzędzi:
group:runtime:exec,bash,processgroup:fs:read,write,edit,apply_patchgroup:sessions:sessions_list,sessions_history,sessions_send,sessions_spawn,session_statusgroup:memory:memory_search,memory_getgroup:ui:browser,canvasgroup:automation:cron,gatewaygroup:messaging:messagegroup:nodes:nodesgroup:openclaw: wszystkie wbudowane narzędzia OpenClaw (z wyłączeniem wtyczek dostawców)
Tryb Elevated
tools.elevated jest globalną bazą (lista dozwolonych oparta na nadawcy). agents.list[].tools.elevated może dodatkowo ograniczać tryb elevated dla konkretnych agentów (oba muszą zezwalać).
Wzory łagodzenia:
- Odrzuć
execdla niezaufanych agentów (agents.list[].tools.deny: ["exec"]) - Unikaj dodawania do listy dozwolonych nadawców, którzy kierują ruch do agentów z ograniczeniami
- Wyłącz tryb elevated globalnie (
tools.elevated.enabled: false), jeśli chcesz wyłącznie wykonanie w sandboxie - Wyłącz tryb elevated per agent (
agents.list[].tools.elevated.enabled: false) dla wrażliwych profili
Migracja z pojedynczego agenta
Przed (pojedynczy agent):agent.* są migrowane przez openclaw doctor; na przyszłość preferuj agents.defaults + agents.list.
Przykłady ograniczeń narzędzi
Agent tylko do odczytu
Agent bezpiecznego wykonania (bez modyfikacji plików)
Agent tylko do komunikacji
Częsta pułapka: „non-main”
agents.defaults.sandbox.mode: "non-main" opiera się na session.mainKey (domyślnie "main"),
a nie na identyfikatorze agenta. Sesje grupowe/kanałowe zawsze otrzymują własne klucze,
więc są traktowane jako non-main i będą uruchamiane w sandboxie. Jeśli chcesz, aby agent nigdy
nie był sandboxowany, ustaw agents.list[].sandbox.mode: "off".
Testowanie
Po skonfigurowaniu sandboxa i narzędzi dla wielu agentów:-
Sprawdź rozpoznawanie agenta:
-
Zweryfikuj kontenery sandboxa:
-
Przetestuj ograniczenia narzędzi:
- Wyślij wiadomość wymagającą narzędzi objętych ograniczeniami
- Zweryfikuj, że agent nie może użyć narzędzi zabronionych
-
Monitoruj logi:
Rozwiązywanie problemów
Agent nie jest sandboxowany mimo mode: "all"
- Sprawdź, czy istnieje globalne
agents.defaults.sandbox.mode, które to nadpisuje - Konfiguracja specyficzna dla agenta ma pierwszeństwo, więc ustaw
agents.list[].sandbox.mode: "all"
Narzędzia nadal dostępne mimo listy odmów
- Sprawdź kolejność filtrowania narzędzi: globalna → agent → sandbox → subagent
- Każdy poziom może tylko dodatkowo ograniczać, nie przywracać
- Zweryfikuj w logach:
[tools] filtering tools for agent:${agentId}
Kontener nie jest izolowany per agent
- Ustaw
scope: "agent"w konfiguracji sandboxa specyficznej dla agenta - Domyślnie jest to
"session", co tworzy jeden kontener na sesję