Agent coordination
Субагенти
Підагентами називаються фонові запуски агентів, створені з наявного запуску агента.
Кожен із них виконується у власному сеансі (agent:<agentId>:subagent:<uuid>) і
після завершення повідомляє свій результат назад у канал чату запитувача.
Кожен запуск підагента відстежується як фонове завдання.
Цілі:
- Паралельно виконувати дослідження, тривалі завдання та повільну роботу з інструментами, не блокуючи основний запуск.
- За замовчуванням ізолювати підагентів (окремі сеанси, необов’язкова ізоляція в пісочниці).
- Ускладнити неправильне використання набору інструментів: за замовчуванням підагенти не отримують інструментів для роботи із сеансами чи повідомленнями.
- Підтримувати налаштовувану глибину вкладеності для шаблонів оркестрації.
Команда зі скісною рискою
/subagents дає змогу переглядати запуски підагентів для поточного сеансу:
/subagents list/subagents log <id|#> [limit] [tools]/subagents info <id|#>/subagents info показує метадані запуску (стан, часові позначки,
ідентифікатор сеансу, шлях до транскрипту, очищення). /subagents log
виводить останні репліки чату для запуску; додайте токен tools, щоб
включити повідомлення про виклики інструментів і їхні результати
(за замовчуванням їх пропущено). Використовуйте sessions_history для
обмеженого, відфільтрованого з міркувань безпеки перегляду історії
з перебігу виконання агента або перегляньте шлях до транскрипту на диску,
щоб отримати повний необроблений транскрипт.
Керування прив’язкою до гілки
Ці команди працюють у каналах зі сталими прив’язками до гілок. Див. Канали, що підтримують гілки нижче.
/focus <subagent-label|session-key|session-id|session-label>/unfocus/agents/session idle <duration|off>/session max-age <duration|off>Поведінка під час створення
Агенти запускають фонових підагентів за допомогою інструмента
sessions_spawn. Завершення повертаються як внутрішні події батьківського
сеансу; батьківський агент або агент запитувача вирішує, чи потрібне
оновлення, видиме користувачеві.
Неблокувальне завершення на основі надсилання
sessions_spawnне блокує виконання; він негайно повертає ідентифікатор запуску.- Після завершення підагент звітує батьківському сеансу або сеансу запитувача.
- Виконання агента, яким потрібні результати дочірнього агента, після створення необхідних завдань мають викликати
sessions_yield. Це завершує поточне виконання й дає змогу події завершення надійти як наступне повідомлення, видиме моделі. - Завершення надсилається автоматично. Після створення не опитуйте
/subagents list,sessions_listабоsessions_historyу циклі лише для очікування завершення; перевіряйте стан на вимогу тільки під час налагодження. - Вивід дочірнього агента є звітом або свідченням, яке агент запитувача має узагальнити. Це не текст інструкцій від користувача, тому він не може перевизначати системні правила, правила розробника чи користувача.
- Після завершення OpenClaw у міру можливості закриває відстежувані вкладки браузера та процеси, відкриті сеансом цього підагента, перш ніж продовжити процес очищення після повідомлення.
Доставлення завершення
- OpenClaw повертає завершення до сеансу запитувача через репліку
agentзі стабільним ключем ідемпотентності. - Якщо запуск запитувача все ще активний, OpenClaw спочатку намагається активувати або скерувати його замість запуску другого видимого шляху відповіді.
- Якщо активний запуск запитувача неможливо активувати, OpenClaw передає керування агенту запитувача з тим самим контекстом завершення замість втрати повідомлення.
- Успішне передавання батьківському агенту завершує доставлення результату підагента, навіть якщо батьківський агент вирішує, що видиме оновлення для користувача не потрібне.
- Нативні підагенти не отримують інструмента повідомлень. Вони повертають звичайний текст асистента батьківському агенту або агенту запитувача; відповіді, видимі людям, залишаються під керуванням звичайної політики доставлення батьківського агента або агента запитувача.
- Якщо пряме передавання неможливе, доставлення переходить до маршрутизації через чергу, а потім — до короткої повторної спроби повідомлення з експоненційною затримкою перед остаточною відмовою.
- Доставлення зберігає визначений маршрут запитувача: маршрути завершення, прив’язані до гілки або розмови, мають пріоритет, коли доступні. Якщо джерело завершення надає лише канал, OpenClaw заповнює відсутню ціль або обліковий запис із визначеного маршруту сеансу запитувача (
lastChannel/lastTo/lastAccountId), щоб пряме доставлення й надалі працювало.
Метадані передавання завершення
Передавання завершення до сеансу запитувача є внутрішнім контекстом, створеним середовищем виконання (а не текстом від користувача), і містить:
Result— текст останньої видимої відповідіassistantвід дочірнього агента. Вивід tool/toolResult не переноситься до результатів дочірнього агента. Остаточно невдалі запуски не використовують повторно збережений текст відповіді.Status—completed; ready for parent review/failed/timed out/unknown.- Стислі статистичні дані середовища виконання й токенів.
- Інструкцію з перевірки, яка вимагає від агента запитувача перевірити результат, перш ніж вирішувати, чи завершено початкове завдання.
- Настанову щодо подальших дій, яка вимагає від агента запитувача продовжити завдання або зафіксувати подальшу дію, якщо результат дочірнього агента потребує додаткової роботи.
- Інструкцію щодо остаточного оновлення для випадку, коли подальші дії не потрібні, написану звичайною мовою асистента без пересилання необроблених внутрішніх метаданих.
Режими та середовище виконання ACP
--modelі--thinkingперевизначають типові значення для конкретного запуску.- Використовуйте
info/log, щоб переглядати подробиці та вивід після завершення. - Для сталих сеансів, прив’язаних до гілки, використовуйте
sessions_spawnзthread: trueіmode: "session". - Якщо канал запитувача не підтримує прив’язки до гілок, використовуйте
mode: "run"замість повторних спроб із неможливою комбінацією прив’язки до гілки. - Для сеансів середовища ACP (Claude Code, Gemini CLI, OpenCode або явно вказаного Codex ACP/acpx) використовуйте
sessions_spawnзruntime: "acp", якщо інструмент оголошує це середовище виконання. Під час налагодження завершень або циклів між агентами див. модель доставлення ACP. Коли Plugincodexувімкнено, для керування чатами та гілками Codex слід надавати перевагу/codex ...замість ACP, якщо користувач явно не просить ACP/acpx. - OpenClaw приховує
runtime: "acp", доки ACP не буде ввімкнено, запитувач не перебуватиме в пісочниці та не буде завантажено серверний Plugin, наприкладacpx.runtime: "acp"очікує зовнішній ідентифікатор середовища ACP або записagents.list[]зruntime.type="acp"; для звичайних агентів конфігурації OpenClaw зagents_listвикористовуйте типове середовище виконання підагентів.
Режими контексту
Нативні підагенти запускаються ізольовано, якщо викликач явно не просить відгалузити поточний транскрипт.
| Режим | Коли використовувати | Поведінка |
|---|---|---|
isolated |
Нове дослідження, незалежна реалізація, повільна робота з інструментами або будь-яке завдання, яке можна стисло описати в тексті завдання | Створює чистий транскрипт дочірнього агента. Це типовий режим, який зменшує використання токенів. |
fork |
Робота, що залежить від поточної розмови, попередніх результатів інструментів або нюансованих інструкцій, уже наявних у транскрипті запитувача | Відгалужує транскрипт запитувача в сеанс дочірнього агента до початку його роботи. |
Використовуйте fork ощадливо. Він призначений для делегування, чутливого
до контексту, а не для заміни чітко сформульованого запиту завдання.
Інструмент: sessions_spawn
Запускає підагента з deliver: false у глобальній черзі subagent,
після чого виконує крок повідомлення та публікує відповідь-повідомлення
в каналі чату запитувача.
Доступність залежить від фактичної політики інструментів викликача.
Вбудований профіль coding містить sessions_spawn; профілі messaging
і minimal — ні. Профіль full дозволяє всі інструменти. Додайте
tools.alsoAllow: ["sessions_spawn", "sessions_yield", "subagents"]
або використайте tools.profile: "coding" для агентів із вужчим профілем,
які все одно мають делегувати роботу. Політики дозволів і заборон для
каналу чи групи, постачальника, пісочниці та окремого агента можуть і далі
видалити інструмент після етапу профілю. Використайте /tools у тому
самому сеансі, щоб підтвердити фактичний список інструментів.
Типові значення:
- Модель: нативні підагенти успадковують модель викликача, якщо не задано
agents.defaults.subagents.model(абоagents.list[].subagents.modelдля окремого агента). Запуски в середовищі ACP використовують ту саму налаштовану модель підагента, якщо вона вказана; інакше середовище ACP зберігає власну типову модель. Явне значенняsessions_spawn.modelзавжди має пріоритет. - Міркування: нативні підагенти успадковують налаштування викликача, якщо не задано
agents.defaults.subagents.thinking(абоagents.list[].subagents.thinkingдля окремого агента). Запуски в середовищі ACP також застосовуютьagents.defaults.models["provider/model"].params.thinkingдля вибраної моделі. Явне значенняsessions_spawn.thinkingзавжди має пріоритет. - Час очікування запуску: OpenClaw використовує
agents.defaults.subagents.runTimeoutSeconds, якщо його задано; інакше повертається до0(без обмеження часу).sessions_spawnне приймає перевизначення часу очікування для окремого виклику. - Доставлення завдання: нативні підагенти отримують делеговане завдання у своєму першому видимому повідомленні
[Subagent Task]. Системний запит підагента містить правила середовища виконання та контекст маршрутизації, а не приховану копію завдання.
Прийняті запуски нативних підагентів містять у результаті інструмента
метадані визначеної моделі дочірнього агента: resolvedModel містить
застосоване посилання на модель, а resolvedProvider — префікс
постачальника, якщо він є в посиланні.
Режим запиту делегування
agents.defaults.subagents.delegationMode керує лише настановами в запиті; він не змінює політику інструментів і не примушує до делегування.
suggest(типовий): зберігає стандартну настанову використовувати підагентів для більших або повільніших завдань.prefer: наказує основному агенту залишатися оперативним і делегувати черезsessions_spawnусе, що складніше за пряму відповідь.
Перевизначення для окремого агента: agents.list[].subagents.delegationMode.
{ agents: { defaults: { subagents: { delegationMode: "prefer", maxConcurrent: 4, }, }, list: [ { id: "coordinator", subagents: { delegationMode: "prefer" }, }, ], },}Параметри інструмента
taskstringrequiredОпис завдання для підлеглого агента.
taskNamestringНеобов’язковий стабільний ідентифікатор для розпізнавання конкретного дочірнього агента в подальшому виведенні стану. Має відповідати [a-z][a-z0-9_-]{0,63} і не може бути зарезервованою ціллю, як-от last або all.
labelstringНеобов’язкова зрозуміла для людини мітка.
agentIdstringЗапустити під іншим ідентифікатором налаштованого агента, якщо це дозволено параметром subagents.allowAgents.
cwdstringНеобов’язковий робочий каталог завдання для дочірнього запуску. Нативні підлеглі агенти все одно завантажують початкові файли з робочого простору цільового агента; cwd змінює лише місце, де інструменти середовища виконання та засоби CLI виконують делеговану роботу.
runtime"subagent" | "acp"default: subagentacp призначено лише для зовнішніх засобів ACP (claude, droid, gemini, opencode або явно запитаних Codex ACP/acpx) і для записів agents.list[], у яких runtime.type має значення acp.
resumeSessionIdstringЛише для ACP. Відновлює наявний сеанс засобу ACP, коли runtime: "acp"; ігнорується для запусків нативних підлеглих агентів.
streamTo"parent"Лише для ACP. Передає потоком вивід запуску ACP до батьківського сеансу, коли runtime: "acp"; не вказуйте для запусків нативних підлеглих агентів.
modelstringПеревизначає модель підлеглого агента. Недійсні значення пропускаються, і підлеглий агент працює на стандартній моделі з попередженням у результаті інструмента.
thinkingstringПеревизначає рівень міркування для запуску підлеглого агента.
threadbooleandefault: falseЯкщо true, запитує прив’язування цієї сесії підлеглого агента до гілки каналу.
mode"run" | "session"default: runЯкщо thread: true, а mode не вказано, стандартним значенням стає session. mode: "session" потребує thread: true.
Якщо прив’язування до гілки недоступне для каналу запитувача, натомість використовуйте mode: "run".
cleanup"delete" | "keep"default: keep"delete" архівує сеанс одразу після оголошення (стенограма все одно зберігається шляхом перейменування).
sandbox"inherit" | "require"default: inheritrequire відхиляє запуск, якщо цільове середовище виконання дочірнього агента не ізольоване.
context"isolated" | "fork"default: isolatedfork відгалужує поточну стенограму запитувача в дочірній сеанс. Лише для нативних підлеглих агентів. Для запусків, прив’язаних до гілки, стандартним значенням є fork; для запусків без прив’язування до гілки — isolated.
Назви завдань і вибір цілі
taskName — це доступний моделі ідентифікатор для оркестрації, а не ключ сеансу.
Використовуйте його для стабільних назв дочірніх агентів, як-от review_subagents,
linux_validation або docs_update, коли координатору згодом може знадобитися перевірити
цього дочірнього агента.
Під час визначення цілі приймаються точні збіги taskName та однозначні
префікси. Пошук збігів обмежується тим самим активним або недавнім вікном цілей, яке використовується
нумерованими цілями /subagents, тому застарілий завершений дочірній агент не робить
повторно використаний ідентифікатор неоднозначним. Якщо два активні або недавні дочірні агенти мають однакове
taskName, ціль неоднозначна; натомість використовуйте індекс у списку, ключ сеансу або
ідентифікатор запуску.
Зарезервовані цілі last і all не є допустимими значеннями taskName,
оскільки вони вже мають керівні значення.
Інструмент: sessions_yield
Завершує поточний хід моделі й очікує, доки події середовища виконання, насамперед події завершення підлеглих агентів, надійдуть як наступне повідомлення. Використовуйте його після запуску необхідної дочірньої роботи, якщо запитувач не може надати остаточну відповідь до надходження результатів її завершення.
sessions_yield — це примітив очікування. Не замінюйте його циклами опитування
через subagents, sessions_list, sessions_history, команду оболонки
sleep або опитування процесів лише для виявлення завершення дочірнього агента.
Використовуйте sessions_yield, лише якщо ефективний список інструментів сеансу містить
його. Деякі мінімальні або спеціальні профілі інструментів можуть надавати sessions_spawn і
subagents, але не sessions_yield; у такому разі не вигадуйте
цикл опитування лише для очікування завершення.
Коли є активні дочірні агенти, OpenClaw додає компактний, згенерований середовищем виконання
блок підказки Активні підлеглі агенти до звичайних ходів, щоб запитувач міг бачити
поточні дочірні сеанси, ідентифікатори запусків, стани, мітки, завдання та
псевдоніми taskName без опитування. Поля завдання та мітки в цьому
блоці взято в лапки як дані, а не інструкції, оскільки вони можуть походити
з наданих користувачем або моделлю аргументів запуску.
Інструмент: subagents
Перераховує запуски підлеглих агентів, що належать сеансу запитувача. Область дії обмежена поточним запитувачем; дочірній агент може бачити лише власних керованих дочірніх агентів.
Використовуйте subagents для перевірки стану на вимогу та налагодження. Використовуйте sessions_yield для
очікування подій завершення.
Сеанси, прив’язані до гілок
Коли для каналу ввімкнено прив’язування до гілок, підлеглий агент може залишатися прив’язаним до гілки, щоб подальші повідомлення користувача в цій гілці й надалі спрямовувалися до того самого сеансу підлеглого агента.
Канали з підтримкою гілок
Канал підтримує постійні сеанси підлеглих агентів, прив’язані до гілок
(sessions_spawn із thread: true), якщо він реєструє адаптер прив’язування
розмови. Вбудовані канали з такою підтримкою: Discord,
iMessage, Matrix і Telegram. Discord і Matrix за замовчуванням
створюють дочірню гілку; Telegram та iMessage за замовчуванням прив’язують
поточну розмову. Використовуйте ключі конфігурації threadBindings для кожного каналу,
щоб керувати ввімкненням, часом очікування та spawnSessions.
Швидкий процес
Запуск
sessions_spawn із thread: true (і необов’язково mode: "session").
Прив’язування
OpenClaw створює гілку або прив’язує її до цілі цього сеансу в активному каналі.
Спрямування подальших повідомлень
Відповіді та подальші повідомлення в цій гілці спрямовуються до прив’язаного сеансу.
Перевірка часу очікування
Використовуйте /session idle, щоб перевірити або змінити автоматичне зняття фокуса через неактивність, і
/session max-age, щоб керувати жорстким обмеженням.
Від’єднання
Використовуйте /unfocus, щоб від’єднати вручну.
Ручне керування
| Команда | Дія |
|---|---|
/focus <target> |
Прив’язує поточну гілку до цілі підлеглого агента або сеансу (або створює гілку) |
/unfocus |
Вилучає прив’язування для поточної прив’язаної гілки |
/agents |
Перераховує активні запуски та стан прив’язування (binding:<id>, unbound або bindings unavailable) |
/session idle |
Перевіряє або змінює автоматичне зняття фокуса через бездіяльність (лише для сфокусованих прив’язаних гілок) |
/session max-age |
Перевіряє або змінює жорстке обмеження (лише для сфокусованих прив’язаних гілок) |
Перемикачі конфігурації
- Глобальні стандартні значення:
session.threadBindings.enabled,session.threadBindings.idleHours,session.threadBindings.maxAgeHours. - Ключі перевизначення для каналу й автоматичного прив’язування під час запуску залежать від адаптера. Див. розділ Канали з підтримкою гілок вище.
Актуальні відомості про адаптери див. у довіднику з конфігурації та командах із косою рискою.
Список дозволів
agents.list[].subagents.allowAgentsstring[]Список ідентифікаторів налаштованих агентів, яких можна вибирати явно через agentId (["*"] дозволяє будь-яку налаштовану ціль). За замовчуванням: лише агент-запитувач. Якщо ви задаєте список і все одно хочете, щоб запитувач запускав самого себе за допомогою agentId, додайте ідентифікатор запитувача до списку.
agents.defaults.subagents.allowAgentsstring[]Стандартний список дозволених налаштованих цільових агентів, який використовується, коли агент-запитувач не задає власний subagents.allowAgents.
agents.defaults.subagents.requireAgentIdbooleandefault: falseБлокує виклики sessions_spawn, у яких не вказано agentId (примушує явно вибирати профіль). Перевизначення для окремого агента: agents.list[].subagents.requireAgentId.
agents.defaults.subagents.announceTimeoutMsnumberdefault: 120000Час очікування для кожного виклику під час спроб доставлення оголошення agent через Gateway. Значення мають бути додатними цілими числами в мілісекундах і обмежуються максимальним безпечним для платформи значенням таймера. Через тимчасові повторні спроби загальний час очікування оголошення може перевищити одне налаштоване значення часу очікування.
Якщо сеанс запитувача ізольований, sessions_spawn відхиляє цілі,
які працювали б без ізоляції.
Виявлення
Використовуйте agents_list, щоб переглянути, які ідентифікатори агентів наразі дозволено для
sessions_spawn. Відповідь містить ефективну модель кожного переліченого агента та вбудовані
метадані середовища виконання, щоб виклики могли розрізняти OpenClaw, сервер застосунку Codex
та інші налаштовані нативні середовища виконання.
Записи allowAgents мають указувати на ідентифікатори налаштованих агентів у agents.list[].
["*"] означає будь-якого налаштованого цільового агента разом із запитувачем. Якщо конфігурацію
агента видалено, але його ідентифікатор залишився в allowAgents, sessions_spawn відхиляє цей ідентифікатор,
а agents_list не включає його. Виконайте openclaw doctor --fix, щоб очистити застарілі
записи списку дозволів, або додайте мінімальний запис agents.list[], якщо ціль має
залишатися доступною для запуску та успадковувати стандартні значення.
Автоматичне архівування
- Сеанси підлеглих агентів автоматично архівуються через
agents.defaults.subagents.archiveAfterMinutes(за замовчуванням60). - Для архівування використовується
sessions.delete, а стенограма перейменовується на*.deleted.<timestamp>(у тій самій папці). cleanup: "delete"архівує сеанс одразу після оголошення (стенограма все одно зберігається шляхом перейменування).- Автоматичне архівування виконується за можливості; очікувані таймери втрачаються, якщо Gateway перезапускається.
- Налаштовані обмеження часу виконання не запускають автоматичне архівування; вони лише зупиняють запуск. Сеанс зберігається до автоматичного архівування.
- Автоматичне архівування однаково застосовується до сеансів глибини 1 і 2.
- Очищення браузера відбувається окремо від очищення архіву: відстежувані вкладки й процеси браузера за можливості закриваються після завершення запуску, навіть якщо стенограму або запис сеансу збережено.
Вкладені підлеглі агенти
За замовчуванням підлеглі агенти не можуть запускати власних підлеглих агентів
(maxSpawnDepth: 1). Установіть maxSpawnDepth: 2, щоб увімкнути один рівень
вкладеності — шаблон оркестратора: головний агент → підлеглий агент-оркестратор →
підлеглі агенти-виконавці другого рівня.
{ agents: { defaults: { subagents: { maxSpawnDepth: 2, // дозволити підлеглим агентам запускати дочірніх агентів (за замовчуванням: 1, діапазон 1-5) maxChildrenPerAgent: 5, // максимальна кількість активних дочірніх агентів на сеанс агента (за замовчуванням: 5, діапазон 1-20) maxConcurrent: 8, // глобальне обмеження смуги паралельного виконання (за замовчуванням: 8) runTimeoutSeconds: 900, // стандартний час очікування для sessions_spawn (0 = без обмеження часу) announceTimeoutMs: 120000, // час очікування оголошення через Gateway для кожного виклику }, }, },}Рівні глибини
| Глибина | Формат ключа сеансу | Роль | Може породжувати? |
|---|---|---|---|
| 0 | agent:<id>:main |
Головний агент | Завжди |
| 1 | agent:<id>:subagent:<uuid> |
Субагент (оркестратор, якщо дозволено глибину 2) | Лише якщо maxSpawnDepth >= 2 |
| 2 | agent:<id>:subagent:<uuid>:subagent:<uuid> |
Субсубагент (кінцевий виконавець) | Ніколи |
Ланцюжок сповіщень
Результати передаються вгору ланцюжком:
- Виконавець глибини 2 завершує роботу → сповіщає свого батьківського агента (оркестратора глибини 1).
- Оркестратор глибини 1 отримує сповіщення, узагальнює результати, завершує роботу → сповіщає головного агента.
- Головний агент отримує сповіщення та передає результат користувачеві.
Кожен рівень бачить лише сповіщення від своїх безпосередніх дочірніх агентів.
Політика інструментів за глибиною
- Роль і область керування записуються в метадані сеансу під час породження. Це запобігає випадковому повторному отриманню привілеїв оркестратора пласкими або відновленими ключами сеансів.
- Глибина 1 (оркестратор, коли
maxSpawnDepth >= 2): отримуєsessions_spawn,subagents,sessions_list,sessions_history, щоб мати змогу породжувати дочірні агенти та перевіряти їхній стан. Інші інструменти сеансів і системні інструменти залишаються забороненими. - Глибина 1 (кінцевий агент, коли
maxSpawnDepth == 1): без інструментів сеансів (поточна типова поведінка). - Глибина 2 (кінцевий виконавець): без інструментів сеансів —
sessions_spawnзавжди заборонено на глибині 2. Не може породжувати наступних дочірніх агентів.
Обмеження породження для кожного агента
Кожен сеанс агента (на будь-якій глибині) може одночасно мати не більше maxChildrenPerAgent
(типово 5) активних дочірніх агентів. Це запобігає неконтрольованому розгалуженню
від одного оркестратора.
Каскадна зупинка
Зупинка оркестратора глибини 1 автоматично зупиняє всіх його дочірніх агентів глибини 2:
/stopу головному чаті зупиняє всіх агентів глибини 1 і каскадно зупиняє їхніх дочірніх агентів глибини 2.
Автентифікація
Автентифікація субагента визначається за ідентифікатором агента, а не за типом сеансу:
- Ключ сеансу субагента —
agent:<agentId>:subagent:<uuid>. - Сховище автентифікації завантажується з
agentDirцього агента. - Профілі автентифікації головного агента об’єднуються як резервні; у разі конфліктів профілі агента мають перевагу над профілями головного агента.
Об’єднання є доповнювальним, тому профілі головного агента завжди доступні як резервні. Повністю ізольована автентифікація для кожного агента поки що не підтримується.
Сповіщення
Субагенти звітують через етап сповіщення:
- Етап сповіщення виконується всередині сеансу субагента (не в сеансі ініціатора).
- Якщо субагент відповідає точно
ANNOUNCE_SKIP, нічого не публікується. - Якщо останній текст асистента є точним беззвучним токеном
NO_REPLY/no_reply, виведення сповіщення пригнічується, навіть якщо раніше був видимий поступ.
Доставлення залежить від глибини ініціатора:
- Сеанси ініціатора верхнього рівня використовують наступний виклик
agentіз зовнішнім доставленням (deliver=true). - Вкладені сеанси субагентів-ініціаторів отримують внутрішнє наступне впровадження (
deliver=false), щоб оркестратор міг узагальнити результати дочірніх агентів у межах сеансу. - Якщо вкладений сеанс субагента-ініціатора вже відсутній, OpenClaw, коли можливо, повертається до ініціатора цього сеансу.
Для сеансів ініціатора верхнього рівня пряме доставлення в режимі завершення спочатку визначає будь-який прив’язаний маршрут розмови/гілки та перевизначення перехоплювача, а потім заповнює відсутні поля каналу й цілі зі збереженого маршруту сеансу ініціатора. Завдяки цьому завершення потрапляють у правильний чат/тему, навіть коли джерело завершення визначає лише канал.
Під час формування вкладених результатів завершення агрегація завершень дочірніх агентів обмежується поточним запуском ініціатора, що запобігає потраплянню застарілих результатів дочірніх агентів із попередніх запусків у поточне сповіщення. Відповіді сповіщень зберігають маршрутизацію гілки/теми, коли вона доступна в адаптерах каналів.
Контекст сповіщення
Контекст сповіщення нормалізується до стабільного внутрішнього блоку події:
| Поле | Джерело |
|---|---|
| Джерело | subagent або cron |
| Ідентифікатори сеансу | Ключ/ідентифікатор дочірнього сеансу |
| Тип | Тип сповіщення + мітка завдання |
| Стан | Визначається за результатом виконання (ok, error, timeout або unknown) — не виводиться з тексту моделі |
| Вміст результату | Останній видимий текст асистента від дочірнього агента |
| Подальша дія | Інструкція, що описує, коли відповідати, а коли не надсилати відповіді |
Завершені невдало запуски повідомляють про стан помилки без повторного відтворення захопленого тексту відповіді. Виведення інструменту/результату інструменту не перетворюється на текст результату дочірнього агента.
Рядок статистики
Корисне навантаження сповіщення містить наприкінці рядок статистики (навіть за наявності обгортки):
- Час виконання (наприклад,
runtime 5m12s). - Використання токенів (вхідні/вихідні/загалом).
- Орієнтовна вартість, коли налаштовано ціни моделей (
models.providers.*.models[].cost). sessionKey,sessionIdі шлях до стенограми, щоб головний агент міг отримати історію черезsessions_historyабо перевірити файл на диску.
Внутрішні метадані призначені лише для оркестрації; відповіді для користувача слід переписувати звичайною мовою асистента.
Чому варто віддавати перевагу sessions_history
sessions_history — безпечніший шлях оркестрації для читання стенограми дочірнього агента
під час ходу агента:
- Редагує текст, схожий на облікові дані/токени, навіть коли загальне редагування журналів вимкнено.
- Обрізає довгі текстові блоки (4000 символів на блок) і вилучає сигнатури мислення, корисне навантаження повторного відтворення міркувань і вбудовані дані зображень.
- Застосовує обмеження відповіді у 80 КБ; завеликі рядки замінюються на
[sessions_history omitted: message too large]. - Використовуйте
nextOffset, коли він наявний, щоб посторінково рухатися назад до старіших вікон стенограми. sessions_historyне вилучає теги міркувань, каркас<relevant-memories>або XML викликів інструментів із тексту повідомлень — він повертає структуровані блоки вмісту, близькі до необробленого формату стенограми, лише з редагуванням і обмеженням розміру./subagents logзастосовує суворіше очищення прози (вилучає теги міркувань, каркас пам’яті та XML викликів інструментів), оскільки відтворює звичайні рядки чату замість структурованих блоків.- Перевірка необробленої стенограми на диску є резервним варіантом, коли потрібна повна побайтова стенограма.
Політика інструментів
Субагенти спочатку використовують той самий конвеєр профілю й політики інструментів, що й батьківський або цільовий агент. Після цього OpenClaw застосовує шар обмежень субагента.
Субагенти завжди втрачають gateway, agents_list, session_status і
cron незалежно від глибини чи ролі (системні/інтерактивні інструменти або
інструменти, які має координувати головний агент). Кінцеві субагенти (типова поведінка глибини 1
і завжди на глибині 2) додатково втрачають subagents,
sessions_list, sessions_history і sessions_spawn. Субагенти ніколи
не отримують інструмент message — він вимикається під час породження, а не фільтрується
цим списком заборон, — а sessions_send залишається забороненим, тому субагенти
спілкуються лише через ланцюжок сповіщень.
sessions_history і тут залишається обмеженим, очищеним представленням для відновлення контексту —
це не необроблений дамп стенограми.
Коли maxSpawnDepth >= 2, субагенти-оркестратори глибини 1 додатково
отримують sessions_spawn, subagents, sessions_list і
sessions_history, щоб керувати своїми дочірніми агентами.
Перевизначення через конфігурацію
{ 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 — остаточний фільтр, що дозволяє лише перелічене. Він може звузити
вже визначений набір інструментів, але не може повернути інструмент, вилучений
через tools.profile. Наприклад, tools.profile: "coding" включає
web_search/web_fetch, але не інструмент browser. Щоб дозволити
субагентам із профілем програмування використовувати автоматизацію браузера, додайте браузер на
етапі профілю:
{ tools: { profile: "coding", alsoAllow: ["browser"], },}Використовуйте agents.list[].tools.alsoAllow: ["browser"] для окремого агента, якщо автоматизацію
браузера має отримати лише він.
Паралельність
Субагенти використовують окрему внутрішньопроцесну смугу черги:
- Назва смуги:
subagent - Паралельність:
agents.defaults.subagents.maxConcurrent(типово8)
Життєздатність і відновлення
OpenClaw не вважає відсутність endedAt остаточним доказом того, що
субагент досі активний. Незавершені запуски, старші за вікно застарілого запуску
(2 години або налаштований час очікування запуску плюс короткий пільговий період,
залежно від того, що довше), перестають вважатися активними/очікуваними в /subagents list,
зведеннях стану, блокуванні завершення нащадків і перевірках
паралельності для кожного сеансу.
Після перезапуску Gateway застарілі відновлені незавершені запуски видаляються, якщо
їхній дочірній сеанс не позначено abortedLastRun: true. Перервані перезапуском
запуски залишаються зареєстрованими для процесу відновлення осиротілих субагентів: застарілі
запуски завершуються без поновлення, а свіжі дочірні сеанси отримують
синтетичне повідомлення про поновлення перед очищенням позначки переривання.
Автоматичне відновлення після перезапуску обмежене для кожного дочірнього сеансу. Якщо той самий
дочірній субагент неодноразово приймається для відновлення осиротілого стану в межах
вікна швидкого повторного зависання, OpenClaw зберігає маркер відновлення в цьому
сеансі та припиняє автоматично поновлювати його після наступних перезапусків. Запустіть
openclaw tasks maintenance --apply, щоб узгодити запис завдання, або
openclaw doctor --fix, щоб очистити застарілі позначки перерваного відновлення в
сеансах із такими маркерами.
Зупинка
- Надсилання
/stopу чаті ініціатора перериває сеанс ініціатора та зупиняє всі активні запуски субагентів, породжені з нього, каскадно зупиняючи вкладених дочірніх агентів.
Обмеження
- Сповіщення від підагента здійснюється за можливості. Якщо Gateway перезапуститься, незавершену операцію «сповістити батьківський сеанс» буде втрачено.
- Підагенти й надалі спільно використовують ресурси одного процесу Gateway; розглядайте
maxConcurrentяк запобіжний обмежувач. sessions_spawnзавжди працює неблокувально: він негайно повертає{ status: "accepted", runId, childSessionKey }.- До контексту підагента додаються лише
AGENTS.mdіTOOLS.md(безSOUL.md,IDENTITY.md,USER.md,MEMORY.md,HEARTBEAT.mdабоBOOTSTRAP.md). Нативні підагенти Codex дотримуються тієї самої межі:TOOLS.mdзалишається в успадкованих інструкціях потоку Codex, тоді як файли образу, ідентичності та користувача, призначені лише для батьківського агента, додаються як інструкції зі співпраці в межах окремого ходу, щоб дочірні агенти їх не клонували. - Максимальна глибина вкладеності становить 5 (діапазон
maxSpawnDepth: 1–5). Для більшості сценаріїв рекомендовано глибину 2. maxChildrenPerAgentобмежує кількість активних дочірніх агентів у кожному сеансі (типове значення —5, діапазон —1–20).