Agent coordination
Podagenci
Subagenci to uruchomienia agentów w tle, tworzone z istniejącego uruchomienia agenta.
Działają we własnej sesji (agent:<agentId>:subagent:<uuid>) i,
po zakończeniu, ogłaszają swój wynik z powrotem na kanale czatu
żądającego. Każde uruchomienie subagenta jest śledzone jako
zadanie w tle.
Informacje o modelu bezpieczeństwa stojącym za delegowaniem znajdziesz w Granicach wielu agentów i subagentów. Subagenci są użytecznymi jednostkami izolacji i przepływu pracy, ale nie są wrogą granicą autoryzacji wielodzierżawnej w ramach jednego współdzielonego Gateway.
Główne cele:
- Równoleglenie pracy typu „badanie / długie zadanie / wolne narzędzie” bez blokowania głównego uruchomienia.
- Domyślna izolacja subagentów (separacja sesji + opcjonalne sandboxowanie).
- Utrzymanie powierzchni narzędzi trudnej do niewłaściwego użycia: subagenci domyślnie nie otrzymują narzędzi sesji.
- Obsługa konfigurowalnej głębokości zagnieżdżania dla wzorców orkiestratora.
Polecenie ukośnikowe
Użyj /subagents, aby sprawdzać lub kontrolować uruchomienia subagentów dla bieżącej
sesji:
/subagents list
/subagents kill <id|#|all>
/subagents log <id|#> [limit] [tools]
/subagents info <id|#>
/subagents send <id|#> <message>
/subagents steer <id|#> <message>
/subagents spawn <agentId> <task> [--model <model>] [--thinking <level>]
Użyj najwyższego poziomu /steer <message>, aby sterować aktywnym uruchomieniem bieżącej sesji żądającego. Użyj /subagents steer <id|#> <message>, gdy celem jest uruchomienie potomne.
/subagents info pokazuje metadane uruchomienia (status, znaczniki czasu, identyfikator sesji,
ścieżkę transkrypcji, czyszczenie). Użyj sessions_history, aby uzyskać ograniczony,
filtrowany pod kątem bezpieczeństwa widok przywołania; sprawdź ścieżkę transkrypcji na dysku, gdy
potrzebujesz surowej pełnej transkrypcji.
Kontrolki wiązania wątków
Te polecenia działają na kanałach obsługujących trwałe wiązania wątków. Zobacz Kanały obsługujące wątki poniżej.
/focus <subagent-label|session-key|session-id|session-label>
/unfocus
/agents
/session idle <duration|off>
/session max-age <duration|off>
Zachowanie uruchamiania
/subagents spawn uruchamia subagenta w tle jako polecenie użytkownika (nie jako
wewnętrzne przekazanie) i wysyła jedną końcową aktualizację o ukończeniu z powrotem do
czatu żądającego po zakończeniu uruchomienia.
Nieblokujące ukończenie oparte na wypychaniu
- Polecenie uruchomienia jest nieblokujące; natychmiast zwraca identyfikator uruchomienia.
- Po ukończeniu subagent ogłasza wiadomość z podsumowaniem/wynikiem z powrotem na kanale czatu żądającego.
- Ukończenie jest oparte na wypychaniu. Po uruchomieniu nie odpytuj
/subagents list,sessions_listanisessions_historyw pętli tylko po to, aby czekać na zakończenie; sprawdzaj status tylko na żądanie w celu debugowania lub interwencji. - Po ukończeniu OpenClaw w miarę możliwości zamyka śledzone karty przeglądarki/procesy otwarte przez tę sesję subagenta, zanim przepływ czyszczenia ogłoszenia będzie kontynuowany.
Odporność dostarczania ręcznego uruchomienia
- OpenClaw najpierw próbuje bezpośredniego dostarczenia
agentze stabilnym kluczem idempotencji. - Jeśli tura ukończenia agenta żądającego zawiedzie, nie wygeneruje widocznego wyjścia albo zwróci oczywiście niekompletny prefiks przechwyconego wyniku procesu potomnego, OpenClaw przełącza się na bezpośrednie dostarczenie ukończenia z przechwyconego wyniku procesu potomnego.
- Jeśli nie można użyć bezpośredniego dostarczania, następuje przełączenie awaryjne na trasowanie przez kolejkę.
- Jeśli trasowanie przez kolejkę nadal nie jest dostępne, ogłoszenie jest ponawiane z krótkim wykładniczym wycofaniem przed ostatecznym poddaniem się.
- Dostarczanie ukończenia zachowuje rozwiązaną trasę żądającego: trasy ukończenia powiązane z wątkiem lub rozmową wygrywają, gdy są dostępne; jeśli źródło ukończenia dostarcza tylko kanał, OpenClaw uzupełnia brakujący cel/konto z rozwiązanej trasy sesji żądającego (
lastChannel/lastTo/lastAccountId), aby bezpośrednie dostarczanie nadal działało.
Metadane przekazania ukończenia
Przekazanie ukończenia do sesji żądającego to generowany w czasie wykonywania wewnętrzny kontekst (nie tekst autorstwa użytkownika), który obejmuje:
Result— najnowszy widoczny tekst odpowiedziassistant, w przeciwnym razie oczyszczony najnowszy tekst narzędzia/toolResult. Końcowe nieudane uruchomienia nie używają ponownie przechwyconego tekstu odpowiedzi.Status—completed successfully/failed/timed out/unknown.- Zwięzłe statystyki czasu wykonywania/tokenów.
- Instrukcję dostarczenia nakazującą agentowi żądającemu przepisać odpowiedź normalnym głosem asystenta (nie przekazywać surowych metadanych wewnętrznych).
Tryby i środowisko wykonawcze ACP
--modeli--thinkingnadpisują wartości domyślne dla tego konkretnego uruchomienia.- Użyj
info/log, aby sprawdzić szczegóły i wyjście po ukończeniu. /subagents spawnto tryb jednorazowy (mode: "run"). W przypadku trwałych sesji powiązanych z wątkiem użyjsessions_spawnzthread: trueimode: "session".- W przypadku sesji uprzęży ACP (Claude Code, Gemini CLI, OpenCode lub jawne Codex ACP/acpx) użyj
sessions_spawnzruntime: "acp", gdy narzędzie ogłasza to środowisko wykonawcze. Zobacz Model dostarczania ACP podczas debugowania ukończeń lub pętli agent-agent. Gdy Plugincodexjest włączony, sterowanie czatem/wątkiem Codex powinno preferować/codex ...zamiast ACP, chyba że użytkownik jawnie poprosi o ACP/acpx. - OpenClaw ukrywa
runtime: "acp", dopóki ACP nie jest włączone, żądający nie jest sandboxowany, a backendowy Plugin taki jakacpxnie jest załadowany.runtime: "acp"oczekuje zewnętrznego identyfikatora uprzęży ACP albo wpisuagents.list[]zruntime.type="acp"; używaj domyślnego środowiska wykonawczego subagentów dla normalnych agentów konfiguracji OpenClaw zagents_list.
Tryby kontekstu
Natywni subagenci startują w izolacji, chyba że wywołujący jawnie poprosi o rozgałęzienie bieżącej transkrypcji.
| Tryb | Kiedy go używać | Zachowanie |
|---|---|---|
isolated |
Świeże badanie, niezależna implementacja, wolna praca narzędziowa albo cokolwiek, co można opisać w tekście zadania | Tworzy czystą transkrypcję procesu potomnego. To ustawienie domyślne i utrzymuje niższe zużycie tokenów. |
fork |
Praca zależna od bieżącej rozmowy, wcześniejszych wyników narzędzi lub niuansów instrukcji już obecnych w transkrypcji żądającego | Rozgałęzia transkrypcję żądającego do sesji potomnej przed startem procesu potomnego. |
Używaj fork oszczędnie. Służy do delegowania wrażliwego na kontekst, a nie jako
zamiennik napisania jasnego promptu zadania.
Narzędzie: sessions_spawn
Uruchamia subagenta z deliver: false na globalnej ścieżce subagent,
następnie wykonuje krok ogłoszenia i publikuje odpowiedź ogłoszenia na kanale czatu
żądającego.
Dostępność zależy od efektywnej polityki narzędzi wywołującego. Profile coding i
full domyślnie udostępniają sessions_spawn. Profil messaging
tego nie robi; dodaj tools.alsoAllow: ["sessions_spawn", "sessions_yield", "subagents"] albo użyj tools.profile: "coding" dla agentów, które powinny delegować
pracę. Polityki kanału/grupy, dostawcy, sandboxu oraz allow/deny dla poszczególnych agentów mogą
nadal usunąć narzędzie po etapie profilu. Użyj /tools z tej samej
sesji, aby potwierdzić efektywną listę narzędzi.
Domyślne:
- Model: dziedziczy po wywołującym, chyba że ustawisz
agents.defaults.subagents.model(lubagents.list[].subagents.modeldla poszczególnych agentów); jawnesessions_spawn.modelnadal wygrywa. - Thinking: dziedziczy po wywołującym, chyba że ustawisz
agents.defaults.subagents.thinking(lubagents.list[].subagents.thinkingdla poszczególnych agentów); jawnesessions_spawn.thinkingnadal wygrywa. - Limit czasu uruchomienia: jeśli
sessions_spawn.runTimeoutSecondsjest pominięte, OpenClaw używaagents.defaults.subagents.runTimeoutSeconds, gdy jest ustawione; w przeciwnym razie wraca do0(bez limitu czasu).
Parametry narzędzia
taskstringrequiredOpis zadania dla subagenta.
labelstringOpcjonalna etykieta czytelna dla człowieka.
agentIdstringUruchom pod innym identyfikatorem agenta, gdy pozwala na to subagents.allowAgents.
runtime"subagent" | "acp"acp jest przeznaczone tylko dla zewnętrznych uprzęży ACP (claude, droid, gemini, opencode albo jawnie żądane Codex ACP/acpx) oraz dla wpisów agents.list[], których runtime.type to acp.
resumeSessionIdstringTylko ACP. Wznawia istniejącą sesję uprzęży ACP, gdy runtime: "acp"; ignorowane dla natywnych uruchomień subagentów.
streamTo"parent"Tylko ACP. Strumieniuje wyjście uruchomienia ACP do sesji nadrzędnej, gdy runtime: "acp"; pomiń dla natywnych uruchomień subagentów.
modelstringNadpisuje model subagenta. Nieprawidłowe wartości są pomijane, a subagent działa na modelu domyślnym z ostrzeżeniem w wyniku narzędzia.
thinkingstringNadpisuje poziom thinking dla uruchomienia subagenta.
runTimeoutSecondsnumberDomyślnie agents.defaults.subagents.runTimeoutSeconds, gdy jest ustawione, w przeciwnym razie 0. Po ustawieniu uruchomienie subagenta jest przerywane po N sekundach.
threadbooleanGdy true, żąda wiązania wątku kanału dla tej sesji subagenta.
mode"run" | "session"Jeśli thread: true i mode pominięto, wartością domyślną staje się session. mode: "session" wymaga thread: true.
cleanup"delete" | "keep""delete" archiwizuje natychmiast po ogłoszeniu (nadal zachowuje transkrypcję przez zmianę nazwy).
sandbox"inherit" | "require"require odrzuca uruchomienie, chyba że docelowe środowisko wykonawcze procesu potomnego jest sandboxowane.
context"isolated" | "fork"fork rozgałęzia bieżącą transkrypcję żądającego do sesji potomnej. Tylko natywni subagenci. Uruchomienia powiązane z wątkiem domyślnie używają fork; uruchomienia bez wątku domyślnie używają isolated.
Sesje powiązane z wątkiem
Gdy wiązania wątków są włączone dla kanału, subagent może pozostać powiązany z wątkiem, aby kolejne wiadomości użytkownika w tym wątku nadal były trasowane do tej samej sesji subagenta.
Kanały obsługujące wątki
Discord jest obecnie jedynym obsługiwanym kanałem. Obsługuje
trwałe sesje subagentów powiązane z wątkiem (sessions_spawn z
thread: true), ręczne kontrolki wątków (/focus, /unfocus, /agents,
/session idle, /session max-age) oraz klucze adaptera
channels.discord.threadBindings.enabled,
channels.discord.threadBindings.idleHours,
channels.discord.threadBindings.maxAgeHours i
channels.discord.threadBindings.spawnSessions.
Szybki przepływ
Spawn
sessions_spawn z thread: true (i opcjonalnie mode: "session").
Bind
OpenClaw tworzy albo wiąże wątek z docelową sesją w aktywnym kanale.
Route follow-ups
Odpowiedzi i kolejne wiadomości w tym wątku są kierowane do powiązanej sesji.
Inspect timeouts
Użyj /session idle, aby sprawdzić/zaktualizować automatyczne cofnięcie fokusu po bezczynności, oraz
/session max-age, aby kontrolować twardy limit.
Detach
Użyj /unfocus, aby odłączyć ręcznie.
Ręczne sterowanie
| Polecenie | Efekt |
|---|---|
/focus <target> |
Powiąż bieżący wątek (albo utwórz go) z docelowym sub-agentem/sesją |
/unfocus |
Usuń powiązanie dla bieżącego powiązanego wątku |
/agents |
Wyświetl aktywne uruchomienia i stan powiązania (thread:<id> albo unbound) |
/session idle |
Sprawdź/zaktualizuj automatyczne cofnięcie fokusu po bezczynności (tylko wątki powiązane z fokusem) |
/session max-age |
Sprawdź/zaktualizuj twardy limit (tylko wątki powiązane z fokusem) |
Przełączniki konfiguracji
- Globalna wartość domyślna:
session.threadBindings.enabled,session.threadBindings.idleHours,session.threadBindings.maxAgeHours. - Nadpisanie kanału i klucze automatycznego wiązania przy tworzeniu zależą od adaptera. Zobacz kanały obsługujące wątki powyżej.
Zobacz odniesienie konfiguracji i polecenia slash, aby poznać bieżące szczegóły adapterów.
Lista dozwolonych
agents.list[].subagents.allowAgentsstring[]Lista identyfikatorów agentów, które mogą być celem przez jawne agentId (["*"] pozwala na dowolny). Domyślnie: tylko agent żądający. Jeśli ustawisz listę i nadal chcesz, aby żądający uruchamiał siebie z agentId, uwzględnij identyfikator żądającego na liście.
agents.defaults.subagents.allowAgentsstring[]Domyślna lista dozwolonych agentów docelowych używana, gdy agent żądający nie ustawia własnego subagents.allowAgents.
agents.defaults.subagents.requireAgentIdbooleanBlokuj wywołania sessions_spawn, które pomijają agentId (wymusza jawny wybór profilu). Nadpisanie dla agenta: agents.list[].subagents.requireAgentId.
Jeśli sesja żądającego działa w piaskownicy, sessions_spawn odrzuca cele,
które działałyby poza piaskownicą.
Wykrywanie
Użyj agents_list, aby sprawdzić, które identyfikatory agentów są obecnie dozwolone dla
sessions_spawn. Odpowiedź zawiera efektywny model każdego wymienionego agenta
oraz osadzone metadane środowiska uruchomieniowego, aby wywołujący mogli odróżnić Pi, serwer aplikacji Codex
i inne skonfigurowane natywne środowiska uruchomieniowe.
Automatyczna archiwizacja
- Sesje sub-agentów są automatycznie archiwizowane po
agents.defaults.subagents.archiveAfterMinutes(domyślnie60). - Archiwizacja używa
sessions.deletei zmienia nazwę transkryptu na*.deleted.<timestamp>(ten sam folder). cleanup: "delete"archiwizuje natychmiast po ogłoszeniu (nadal zachowuje transkrypt przez zmianę nazwy).- Automatyczna archiwizacja działa na zasadzie najlepszych starań; oczekujące timery przepadają, jeśli gateway zostanie zrestartowany.
runTimeoutSecondsnie archiwizuje automatycznie; tylko zatrzymuje uruchomienie. Sesja pozostaje do czasu automatycznej archiwizacji.- Automatyczna archiwizacja ma zastosowanie zarówno do sesji poziomu głębokości 1, jak i 2.
- Czyszczenie przeglądarki jest oddzielne od czyszczenia archiwum: śledzone karty/procesy przeglądarki są zamykane na zasadzie najlepszych starań po zakończeniu uruchomienia, nawet jeśli rekord transkryptu/sesji zostaje zachowany.
Zagnieżdżone sub-agenty
Domyślnie sub-agenty nie mogą uruchamiać własnych sub-agentów
(maxSpawnDepth: 1). Ustaw maxSpawnDepth: 2, aby włączyć jeden poziom
zagnieżdżania — wzorzec orkiestratora: główny → sub-agent orkiestrator →
robocze sub-sub-agenty.
{
agents: {
defaults: {
subagents: {
maxSpawnDepth: 2, // allow sub-agents to spawn children (default: 1)
maxChildrenPerAgent: 5, // max active children per agent session (default: 5)
maxConcurrent: 8, // global concurrency lane cap (default: 8)
runTimeoutSeconds: 900, // default timeout for sessions_spawn when omitted (0 = no timeout)
},
},
},
}
Poziomy głębokości
| Głębokość | Kształt klucza sesji | Rola | Może uruchamiać? |
|---|---|---|---|
| 0 | agent:<id>:main |
Główny agent | Zawsze |
| 1 | agent:<id>:subagent:<uuid> |
Sub-agent (orkiestrator, gdy dozwolona jest głębokość 2) | Tylko jeśli maxSpawnDepth >= 2 |
| 2 | agent:<id>:subagent:<uuid>:subagent:<uuid> |
Sub-sub-agent (pracownik liściowy) | Nigdy |
Łańcuch ogłoszeń
Wyniki przepływają w górę łańcucha:
- Pracownik głębokości 2 kończy → ogłasza do swojego rodzica (orkiestratora głębokości 1).
- Orkiestrator głębokości 1 odbiera ogłoszenie, syntetyzuje wyniki, kończy → ogłasza do głównego.
- Główny agent odbiera ogłoszenie i dostarcza je użytkownikowi.
Każdy poziom widzi tylko ogłoszenia od swoich bezpośrednich dzieci.
Zasady narzędzi według głębokości
- Rola i zakres sterowania są zapisywane w metadanych sesji w momencie tworzenia. Dzięki temu płaskie albo przywrócone klucze sesji nie odzyskują przypadkowo uprawnień orkiestratora.
- Głębokość 1 (orkiestrator, gdy
maxSpawnDepth >= 2): otrzymujesessions_spawn,subagents,sessions_list,sessions_history, aby mógł zarządzać swoimi dziećmi. Inne narzędzia sesji/systemowe pozostają zabronione. - Głębokość 1 (liść, gdy
maxSpawnDepth == 1): brak narzędzi sesji (bieżące zachowanie domyślne). - Głębokość 2 (pracownik liściowy): brak narzędzi sesji —
sessions_spawnjest zawsze zabronione na głębokości 2. Nie może uruchamiać dalszych dzieci.
Limit tworzenia na agenta
Każda sesja agenta (na dowolnej głębokości) może mieć jednocześnie najwyżej maxChildrenPerAgent
(domyślnie 5) aktywnych dzieci. Zapobiega to niekontrolowanemu rozgałęzianiu
z pojedynczego orkiestratora.
Kaskadowe zatrzymanie
Zatrzymanie orkiestratora głębokości 1 automatycznie zatrzymuje wszystkie jego dzieci głębokości 2:
/stopw głównym czacie zatrzymuje wszystkich agentów głębokości 1 i kaskadowo zatrzymuje ich dzieci głębokości 2./subagents kill <id>zatrzymuje konkretnego sub-agenta i kaskadowo zatrzymuje jego dzieci./subagents kill allzatrzymuje wszystkich sub-agentów żądającego i uruchamia kaskadę.
Uwierzytelnianie
Uwierzytelnianie sub-agenta jest rozstrzygane według identyfikatora agenta, a nie typu sesji:
- Klucz sesji sub-agenta to
agent:<agentId>:subagent:<uuid>. - Magazyn uwierzytelniania jest ładowany z
agentDirtego agenta. - Profile uwierzytelniania głównego agenta są scalane jako awaryjne; profile agenta nadpisują profile główne w razie konfliktów.
Scalanie jest addytywne, więc profile główne są zawsze dostępne jako awaryjne. W pełni izolowane uwierzytelnianie na agenta nie jest jeszcze obsługiwane.
Ogłoszenie
Sub-agenty zgłaszają się z powrotem przez krok ogłoszenia:
- Krok ogłoszenia działa wewnątrz sesji sub-agenta (nie sesji żądającego).
- Jeśli sub-agent odpowie dokładnie
ANNOUNCE_SKIP, nic nie zostanie opublikowane. - Jeśli najnowszy tekst asystenta jest dokładnym cichym tokenem
NO_REPLY/no_reply, dane wyjściowe ogłoszenia są tłumione, nawet jeśli wcześniej istniał widoczny postęp.
Dostarczanie zależy od głębokości żądającego:
- Sesje żądających najwyższego poziomu używają kolejnego wywołania
agentz dostarczaniem zewnętrznym (deliver=true). - Zagnieżdżone sesje subagentów żądających otrzymują wewnętrzne wstrzyknięcie follow-up (
deliver=false), aby orkiestrator mógł syntetyzować wyniki dzieci w sesji. - Jeśli zagnieżdżona sesja subagenta żądającego zniknęła, OpenClaw wraca do żądającego tej sesji, gdy jest dostępny.
W przypadku sesji żądających najwyższego poziomu bezpośrednie dostarczanie w trybie zakończenia najpierw rozwiązuje każdą powiązaną trasę rozmowy/wątku i nadpisanie hooka, a następnie wypełnia brakujące pola celu kanału z zapisanej trasy sesji żądającego. Dzięki temu zakończenia trafiają do właściwego czatu/tematu, nawet gdy źródło zakończenia identyfikuje tylko kanał.
Agregacja zakończeń dzieci jest ograniczona do bieżącego uruchomienia żądającego podczas budowania zagnieżdżonych ustaleń zakończenia, co zapobiega przeciekaniu nieświeżych danych wyjściowych dzieci z poprzedniego uruchomienia do bieżącego ogłoszenia. Odpowiedzi ogłoszeń zachowują trasowanie wątków/tematów, gdy jest dostępne w adapterach kanałów.
Kontekst ogłoszenia
Kontekst ogłoszenia jest normalizowany do stabilnego wewnętrznego bloku zdarzenia:
| Pole | Źródło |
|---|---|
| Źródło | subagent albo cron |
| Identyfikatory sesji | Klucz/id sesji dziecka |
| Typ | Typ ogłoszenia + etykieta zadania |
| Status | Wyprowadzony z wyniku środowiska uruchomieniowego (success, error, timeout albo unknown) — nie wnioskowany z tekstu modelu |
| Treść wyniku | Najnowszy widoczny tekst asystenta, w przeciwnym razie oczyszczony najnowszy tekst narzędzia/toolResult |
| Follow-up | Instrukcja opisująca, kiedy odpowiedzieć, a kiedy pozostać cicho |
Końcowe nieudane uruchomienia zgłaszają status niepowodzenia bez odtwarzania przechwyconego tekstu odpowiedzi. Przy przekroczeniu czasu, jeśli dziecko zdążyło tylko wykonać wywołania narzędzi, ogłoszenie może zwinąć tę historię do krótkiego podsumowania częściowego postępu zamiast odtwarzać surowe dane wyjściowe narzędzi.
Wiersz statystyk
Ładunki ogłoszeń zawierają na końcu wiersz statystyk (nawet gdy są zawijane):
- Czas działania (np.
runtime 5m12s). - Użycie tokenów (wejście/wyjście/łącznie).
- Szacowany koszt, gdy skonfigurowano ceny modelu (
models.providers.*.models[].cost). sessionKey,sessionIdi ścieżka transkryptu, aby główny agent mógł pobrać historię przezsessions_historyalbo sprawdzić plik na dysku.
Metadane wewnętrzne są przeznaczone wyłącznie do orkiestracji; odpowiedzi widoczne dla użytkownika powinny zostać przepisane normalnym głosem asystenta.
Dlaczego preferować sessions_history
sessions_history to bezpieczniejsza ścieżka orkiestracji:
- Przywołanie asystenta jest najpierw normalizowane: tagi myślenia usuwane; rusztowanie
<relevant-memories>/<relevant_memories>usuwane; bloki ładunków XML wywołań narzędzi w zwykłym tekście (<tool_call>,<function_call>,<tool_calls>,<function_calls>) usuwane, w tym ucięte ładunki, które nigdy nie zamykają się poprawnie; zdegradowane rusztowanie wywołań/wyników narzędzi oraz znaczniki kontekstu historycznego usuwane; wyciekłe tokeny sterujące modelu (<|assistant|>, inne ASCII<|...|>, pełnej szerokości<|...|>) usuwane; wadliwy XML wywołań narzędzi MiniMax usuwany. - Tekst przypominający poświadczenia/tokeny jest redagowany.
- Długie bloki mogą zostać skrócone.
- Bardzo duże historie mogą odrzucać starsze wiersze albo zastępować zbyt duży wiersz tekstem
[sessions_history omitted: message too large]. - Surowa inspekcja transkryptu na dysku jest opcją awaryjną, gdy potrzebujesz pełnego transkryptu bajt w bajt.
Zasady narzędzi
Podagenci najpierw używają tego samego profilu i potoku zasad narzędzi co agent nadrzędny lub docelowy. Następnie OpenClaw stosuje warstwę ograniczeń podagentów.
Bez restrykcyjnego tools.profile podagenci otrzymują wszystkie narzędzia oprócz narzędzi sesji i narzędzi systemowych:
sessions_listsessions_historysessions_sendsessions_spawn
sessions_history również tutaj pozostaje ograniczonym, oczyszczonym widokiem przypominania — nie jest surowym zrzutem transkrypcji.
Gdy maxSpawnDepth >= 2, podagenci-orkiestratorzy na głębokości 1 dodatkowo otrzymują sessions_spawn, subagents, sessions_list i sessions_history, aby mogli zarządzać swoimi dziećmi.
Nadpisanie przez konfigurację
{
agents: {
defaults: {
subagents: {
maxConcurrent: 1,
},
},
},
tools: {
subagents: {
tools: {
// deny wins
deny: ["gateway", "cron"],
// if allow is set, it becomes allow-only (deny still wins)
// allow: ["read", "exec", "process"]
},
},
},
}
tools.subagents.tools.allow jest końcowym filtrem tylko zezwalającym. Może zawęzić już rozwiązany zestaw narzędzi, ale nie może dodać z powrotem narzędzia usuniętego przez tools.profile. Na przykład tools.profile: "coding" obejmuje web_search/web_fetch, ale nie narzędzie browser. Aby pozwolić podagentom z profilem coding używać automatyzacji przeglądarki, dodaj browser na etapie profilu:
{
tools: {
profile: "coding",
alsoAllow: ["browser"],
},
}
Użyj agents.list[].tools.alsoAllow: ["browser"] dla konkretnego agenta, gdy tylko jeden agent powinien otrzymać automatyzację przeglądarki.
Współbieżność
Podagenci używają dedykowanej kolejki lane w procesie:
- Nazwa lane:
subagent - Współbieżność:
agents.defaults.subagents.maxConcurrent(domyślnie8)
Żywotność i odzyskiwanie
OpenClaw nie traktuje braku endedAt jako trwałego dowodu, że podagent nadal działa. Niezakończone uruchomienia starsze niż okno nieaktualnego uruchomienia przestają być liczone jako aktywne/oczekujące w /subagents list, podsumowaniach statusu, bramkowaniu ukończenia potomków i kontrolach współbieżności dla sesji.
Po restarcie Gateway nieaktualne niezakończone odtworzone uruchomienia są usuwane, chyba że ich sesja dziecka jest oznaczona jako abortedLastRun: true. Te przerwane przez restart sesje dzieci pozostają możliwe do odzyskania przez przepływ odzyskiwania osieroconych podagentów, który wysyła syntetyczną wiadomość wznowienia przed wyczyszczeniem znacznika przerwania.
Automatyczne odzyskiwanie po restarcie jest ograniczone dla każdej sesji dziecka. Jeśli to samo dziecko podagenta jest wielokrotnie akceptowane do odzyskiwania osieroconego w krótkim oknie ponownego zakleszczenia, OpenClaw zapisuje tombstone odzyskiwania w tej sesji i przestaje automatycznie wznawiać ją przy późniejszych restartach. Uruchom openclaw tasks maintenance --apply, aby uzgodnić rekord zadania, albo openclaw doctor --fix, aby wyczyścić nieaktualne flagi przerwanego odzyskiwania w sesjach z tombstone.
Zatrzymywanie
- Wysłanie
/stopna czacie żądającego przerywa sesję żądającego i zatrzymuje wszystkie aktywne uruchomienia podagentów utworzone z niej, kaskadowo obejmując zagnieżdżone dzieci. /subagents kill <id>zatrzymuje konkretnego podagenta i kaskadowo obejmuje jego dzieci.
Ograniczenia
- Ogłoszenie podagenta działa w trybie najlepszych starań. Jeśli Gateway zostanie zrestartowany, oczekująca praca „announce back” zostanie utracona.
- Podagenci nadal współdzielą te same zasoby procesu Gateway; traktuj
maxConcurrentjako zawór bezpieczeństwa. sessions_spawnjest zawsze nieblokujące: natychmiast zwraca{ status: "accepted", runId, childSessionKey }.- Kontekst podagenta wstrzykuje tylko
AGENTS.md+TOOLS.md(bezSOUL.md,IDENTITY.md,USER.md,HEARTBEAT.mdaniBOOTSTRAP.md). - Maksymalna głębokość zagnieżdżenia wynosi 5 (zakres
maxSpawnDepth: 1–5). Głębokość 2 jest zalecana w większości przypadków użycia. maxChildrenPerAgentogranicza liczbę aktywnych dzieci na sesję (domyślnie5, zakres1–20).