chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-25 04:19:37 +00:00
parent ecb2a1ee66
commit 4e75f3b4c3

View File

@ -1,24 +1,24 @@
---
read_when:
- Вам потрібна фонова/паралельна робота через агента
- Ви змінюєте sessions_spawn або політику інструмента підлеглих агентів
- Ви реалізуєте або налагоджуєте прив’язані до потоку сеанси підлеглих агентів
summary: 'Підлеглі агенти: запуск ізольованих сеансів агентів, які повідомляють про результати назад у чат запитувача'
title: Підлеглі агенти
- Ви хочете фонову/паралельну роботу через агента
- Ви змінюєте політику інструмента `sessions_spawn` або субагента
- Ви впроваджуєте або усуваєте несправності сеансів субагентів, прив’язаних до потоку
summary: 'Субагенти: запуск ізольованих виконань агентів, які повідомляють про результати назад у чат запитувача'
title: Субагенти
x-i18n:
generated_at: "2026-04-24T16:58:32Z"
generated_at: "2026-04-25T04:18:02Z"
model: gpt-5.4
provider: openai
source_hash: 471b01c1e6bf689f097e67a7037f35348ac7e8a8a334a83778c6593073332274
source_hash: f5884e3729fb9a752b979e581d23c785921a039052478d05129c035a139e647e
source_path: tools/subagents.md
workflow: 15
---
Підлеглі агенти — це фонові сеанси агентів, запущені з наявного сеансу агента. Вони працюють у власній сесії (`agent:<agentId>:subagent:<uuid>`) і після завершення **повідомляють** про свій результат назад у канал чату запитувача. Кожен сеанс підлеглого агента відстежується як [фонове завдання](/uk/automation/tasks).
Субагенти — це фонові запуски агентів, створені з наявного запуску агента. Вони працюють у власному сеансі (`agent:<agentId>:subagent:<uuid>`) і, коли завершуються, **повідомляють** про свій результат назад у канал чату запитувача. Кожен запуск субагента відстежується як [фонове завдання](/uk/automation/tasks).
## Слеш-команда
Використовуйте `/subagents`, щоб переглядати або керувати сеансами підлеглих агентів для **поточної сесії**:
Використовуйте `/subagents`, щоб переглядати або керувати запусками субагентів для **поточного сеансу**:
- `/subagents list`
- `/subagents kill <id|#|all>`
@ -30,7 +30,7 @@ x-i18n:
Елементи керування прив’язкою до потоку:
Ці команди працюють на каналах, які підтримують постійні прив’язки до потоку. Див. **Канали з підтримкою потоків** нижче.
Ці команди працюють у каналах, що підтримують постійні прив’язки до потоків. Див. **Канали з підтримкою потоків** нижче.
- `/focus <subagent-label|session-key|session-id|session-label>`
- `/unfocus`
@ -38,148 +38,148 @@ x-i18n:
- `/session idle <duration|off>`
- `/session max-age <duration|off>`
`/subagents info` показує метадані сеансу (статус, часові мітки, id сесії, шлях до транскрипту, очищення).
Використовуйте `sessions_history` для обмеженого, відфільтрованого з міркувань безпеки перегляду історії; перевіряйте
шлях до транскрипту на диску, коли вам потрібен сирий повний транскрипт.
`/subagents info` показує метадані запуску (статус, часові позначки, ідентифікатор сеансу, шлях до стенограми, очищення).
Використовуйте `sessions_history` для обмеженого, відфільтрованого з погляду безпеки перегляду історії; перевіряйте
шлях до стенограми на диску, коли вам потрібна необроблена повна стенограма.
### Поведінка запуску
### Поведінка spawn
`/subagents spawn` запускає фоновий підлеглий агент як команду користувача, а не як внутрішню ретрансляцію, і надсилає одне фінальне оновлення про завершення назад у чат запитувача, коли сеанс завершується.
`/subagents spawn` запускає фоновий субагент як команду користувача, а не як внутрішню ретрансляцію, і надсилає одне фінальне оновлення про завершення назад у чат запитувача, коли запуск закінчується.
- Команда запуску не блокує виконання; вона одразу повертає id сеансу.
- Після завершення підлеглий агент повідомляє повідомлення з підсумком/результатом назад у канал чату запитувача.
- Команда spawn є неблокувальною; вона одразу повертає ідентифікатор запуску.
- Після завершення субагент повідомляє зведення/результат назад у канал чату запитувача.
- Доставка завершення є push-орієнтованою. Після запуску не опитуйте `/subagents list`,
`sessions_list` або `sessions_history` у циклі лише для того, щоб дочекатися
`sessions_list` або `sessions_history` у циклі лише для очікування
завершення; перевіряйте статус лише за потреби для налагодження або втручання.
- Після завершення OpenClaw у межах best-effort закриває відстежувані вкладки/процеси браузера, відкриті цим сеансом підлеглого агента, перш ніж продовжити потік очищення після повідомлення.
- Після завершення OpenClaw у межах best-effort закриває відстежувані вкладки/процеси браузера, відкриті цим сеансом субагента, перш ніж продовжиться потік очищення після повідомлення.
- Для ручних запусків доставка є стійкою:
- OpenClaw спочатку намагається виконати пряму доставку `agent` зі стабільним ключем ідемпотентності.
- Якщо пряма доставка не вдається, використовується резервний маршрут через чергу.
- Якщо пряма доставка не вдається, вона переходить до маршрутизації через чергу.
- Якщо маршрутизація через чергу все ще недоступна, спроба повідомлення повторюється з короткою експоненційною затримкою перед остаточною відмовою.
- Доставка завершення зберігає визначений маршрут запитувача:
- маршрути завершення, прив’язані до потоку або розмови, мають пріоритет, коли доступні
- якщо джерело завершення надає лише канал, OpenClaw заповнює відсутні target/account із визначеного маршруту сесії запитувача (`lastChannel` / `lastTo` / `lastAccountId`), щоб пряма доставка все одно працювала
- Передавання завершення до сесії запитувача є внутрішнім контекстом, згенерованим під час виконання (а не текстом, створеним користувачем), і містить:
- `Result` (останній видимий текст відповіді `assistant`, або, якщо його немає, очищений останній текст `tool`/`toolResult`; термінальні невдалі сеанси не використовують повторно захоплений текст відповіді)
- якщо джерело завершення надає лише канал, OpenClaw заповнює відсутню ціль/обліковий запис з визначеного маршруту сеансу запитувача (`lastChannel` / `lastTo` / `lastAccountId`), щоб пряма доставка все одно працювала
- Передача завершення сеансу запитувача — це внутрішній контекст, згенерований середовищем виконання (а не текст, написаний користувачем), і він містить:
- `Result` (останній видимий текст відповіді `assistant`, інакше санітизований останній текст tool/toolResult; термінально невдалі запуски не використовують повторно захоплений текст відповіді)
- `Status` (`completed successfully` / `failed` / `timed out` / `unknown`)
- компактну статистику виконання/токенів
- інструкцію з доставки, яка повідомляє агенту запитувача переписати відповідь звичайним голосом помічника (а не пересилати сирі внутрішні метадані)
- `--model` і `--thinking` перевизначають типові значення для цього конкретного сеансу.
- Використовуйте `info`/`log`, щоб переглянути деталі та вивід після завершення.
- `/subagents spawn` — це одноразовий режим (`mode: "run"`). Для постійних сесій, прив’язаних до потоку, використовуйте `sessions_spawn` з `thread: true` і `mode: "session"`.
- Для сесій ACP harness (Codex, Claude Code, Gemini CLI) використовуйте `sessions_spawn` з `runtime: "acp"` і див. [ACP Agents](/uk/tools/acp-agents), особливо [модель доставки ACP](/uk/tools/acp-agents#delivery-model), коли налагоджуєте завершення або цикли агент-до-агента.
- компактну статистику середовища виконання/токенів
- інструкцію доставки, яка наказує агенту запитувача переписати відповідь звичайним голосом помічника (а не пересилати необроблені внутрішні метадані)
- `--model` і `--thinking` перевизначають значення за замовчуванням для цього конкретного запуску.
- Використовуйте `info`/`log` для перевірки деталей і виводу після завершення.
- `/subagents spawn` — це одноразовий режим (`mode: "run"`). Для постійних сеансів, прив’язаних до потоку, використовуйте `sessions_spawn` з `thread: true` і `mode: "session"`.
- Для сеансів ACP harness (Codex, Claude Code, Gemini CLI) використовуйте `sessions_spawn` з `runtime: "acp"` і див. [ACP Agents](/uk/tools/acp-agents), особливо [модель доставки ACP](/uk/tools/acp-agents#delivery-model) під час налагодження завершень або циклів агент-до-агента.
Основні цілі:
- Розпаралелити роботу типу «дослідження / довге завдання / повільний інструмент» без блокування основного сеансу.
- За замовчуванням зберігати ізоляцію підлеглих агентів (розділення сесій + додаткове пісочницьке середовище).
- Зробити поверхню інструментів складною для неправильного використання: підлеглі агенти **не** отримують інструменти сесії за замовчуванням.
- Розпаралелювати роботу типу «дослідження / довге завдання / повільний інструмент» без блокування основного запуску.
- За замовчуванням тримати субагентів ізольованими (розділення сеансів + необов’язкове sandboxing).
- Зробити поверхню інструмента складною для неправильного використання: субагенти **не** отримують інструменти сеансів за замовчуванням.
- Підтримувати налаштовувану глибину вкладеності для шаблонів оркестрації.
Примітка щодо вартості: кожен підлеглий агент за замовчуванням має **власний** контекст і споживання токенів. Для важких або
повторюваних завдань задайте для підлеглих агентів дешевшу модель, а основний агент залиште на
якіснішій моделі. Ви можете налаштувати це через `agents.defaults.subagents.model` або перевизначення
для конкретного агента. Коли дочірньому агенту справді потрібен поточний транскрипт запитувача, агент може запитати
`context: "fork"` під час саме цього запуску.
Примітка щодо вартості: кожен субагент за замовчуванням має **власний** контекст і використання токенів. Для важких або
повторюваних завдань задайте дешевшу модель для субагентів і залиште основного агента на
моделі вищої якості. Це можна налаштувати через `agents.defaults.subagents.model` або
перевизначення для окремого агента. Коли дочірньому агенту справді потрібна поточна стенограма запитувача, агент може запросити
`context: "fork"` саме для цього запуску.
## Режими контексту
Вбудовані підлеглі агенти запускаються ізольовано, якщо тільки викликач явно не попросить розгалужити
поточний транскрипт.
Вбудовані субагенти запускаються ізольовано, якщо тільки викликач явно не попросить форкнути
поточну стенограму.
| Режим | Коли використовувати | Поведінка |
| Режим | Коли його використовувати | Поведінка |
| ---------- | -------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| `isolated` | Нове дослідження, незалежна реалізація, повільна робота інструмента або будь-що, що можна коротко описати в тексті завдання | Створює чистий дочірній транскрипт. Це типове значення і воно зменшує використання токенів. |
| `fork` | Робота, яка залежить від поточної розмови, попередніх результатів інструментів або тонких інструкцій, уже наявних у транскрипті запитувача | Розгалужує транскрипт запитувача в дочірню сесію до початку роботи дочірнього агента. |
| `isolated` | Нове дослідження, незалежна реалізація, повільна робота з інструментом або будь-що, що можна описати в тексті завдання | Створює чисту дочірню стенограму. Це значення за замовчуванням і воно зменшує використання токенів. |
| `fork` | Робота, яка залежить від поточної розмови, попередніх результатів інструментів або тонких інструкцій, уже наявних у стенограмі запитувача | Розгалужує стенограму запитувача в дочірній сеанс до того, як дочірній агент почне роботу. |
Використовуйте `fork` ощадливо. Це для делегування, чутливого до контексту, а не заміна
написанню чіткого запиту на завдання.
Використовуйте `fork` помірковано. Він призначений для делегування, чутливого до контексту, а не як заміна
написанню чіткого запиту для завдання.
## Інструмент
Використовуйте `sessions_spawn`:
- Запускає сеанс підлеглого агента (`deliver: false`, глобальна смуга: `subagent`)
- Запускає виконання субагента (`deliver: false`, глобальна lane: `subagent`)
- Потім виконує крок повідомлення і публікує відповідь-повідомлення в канал чату запитувача
- Типова модель: успадковується від викликача, якщо ви не встановили `agents.defaults.subagents.model` (або `agents.list[].subagents.model` для конкретного агента); явне значення `sessions_spawn.model` усе одно має пріоритет.
- Типовий рівень thinking: успадковується від викликача, якщо ви не встановили `agents.defaults.subagents.thinking` (або `agents.list[].subagents.thinking` для конкретного агента); явне значення `sessions_spawn.thinking` усе одно має пріоритет.
- Типовий тайм-аут сеансу: якщо `sessions_spawn.runTimeoutSeconds` пропущено, OpenClaw використовує `agents.defaults.subagents.runTimeoutSeconds`, якщо його встановлено; інакше повертається до `0` (без тайм-ауту).
- Модель за замовчуванням: успадковується від викликача, якщо ви не задали `agents.defaults.subagents.model` (або `agents.list[].subagents.model` для окремого агента); явне значення `sessions_spawn.model` усе одно має пріоритет.
- Рівень thinking за замовчуванням: успадковується від викликача, якщо ви не задали `agents.defaults.subagents.thinking` (або `agents.list[].subagents.thinking` для окремого агента); явне значення `sessions_spawn.thinking` усе одно має пріоритет.
- Тайм-аут запуску за замовчуванням: якщо `sessions_spawn.runTimeoutSeconds` пропущено, OpenClaw використовує `agents.defaults.subagents.runTimeoutSeconds`, якщо його задано; інакше використовується `0` (без тайм-ауту).
Параметри інструмента:
- `task` (обов’язковий)
- `label?` (необов’язковий)
- `agentId?` (необов’язковий; запуск під іншим id агента, якщо це дозволено)
- `model?` (необов’язковий; перевизначає модель підлеглого агента; некоректні значення пропускаються, і підлеглий агент запускається на типовій моделі з попередженням у результаті інструмента)
- `thinking?` (необов’язковий; перевизначає рівень thinking для сеансу підлеглого агента)
- `runTimeoutSeconds?` (типово: `agents.defaults.subagents.runTimeoutSeconds`, якщо встановлено, інакше `0`; якщо встановлено, сеанс підлеглого агента переривається через N секунд)
- `thread?` (типово `false`; якщо `true`, запитує прив’язку до потоку каналу для цієї сесії підлеглого агента)
- `task` (обов’язково)
- `label?` (необов’язково)
- `agentId?` (необов’язково; запуск під іншим ідентифікатором агента, якщо дозволено)
- `model?` (необов’язково; перевизначає модель субагента; некоректні значення пропускаються, і субагент запускається на моделі за замовчуванням із попередженням у результаті інструмента)
- `thinking?` (необов’язково; перевизначає рівень thinking для запуску субагента)
- `runTimeoutSeconds?` (за замовчуванням дорівнює `agents.defaults.subagents.runTimeoutSeconds`, якщо задано, інакше `0`; якщо задано, запуск субагента переривається через N секунд)
- `thread?` (за замовчуванням `false`; якщо `true`, запитує прив’язку до потоку каналу для цього сеансу субагента)
- `mode?` (`run|session`)
- типове значення — `run`
- якщо `thread: true` і `mode` пропущено, типовим стає `session`
- за замовчуванням `run`
- якщо `thread: true` і `mode` пропущено, значенням за замовчуванням стає `session`
- `mode: "session"` вимагає `thread: true`
- `cleanup?` (`delete|keep`, типово `keep`)
- `sandbox?` (`inherit|require`, типово `inherit`; `require` відхиляє запуск, якщо цільове дочірнє середовище виконання не є пісочницею)
- `context?` (`isolated|fork`, типово `isolated`; лише для вбудованих підлеглих агентів)
- `isolated` створює чистий дочірній транскрипт і є типовим значенням.
- `fork` розгалужує поточний транскрипт запитувача в дочірню сесію, щоб дочірній агент починав із тим самим контекстом розмови.
- Використовуйте `fork` лише тоді, коли дочірньому агенту потрібен поточний транскрипт. Для локалізованої роботи не вказуйте `context`.
- `cleanup?` (`delete|keep`, за замовчуванням `keep`)
- `sandbox?` (`inherit|require`, за замовчуванням `inherit`; `require` відхиляє запуск, якщо цільове дочірнє середовище виконання не sandboxed)
- `context?` (`isolated|fork`, за замовчуванням `isolated`; лише для вбудованих субагентів)
- `isolated` створює чисту дочірню стенограму і є значенням за замовчуванням.
- `fork` розгалужує поточну стенограму запитувача в дочірній сеанс, щоб дочірній агент почав із тим самим контекстом розмови.
- Використовуйте `fork` лише тоді, коли дочірньому агенту потрібна поточна стенограма. Для обмеженої за обсягом роботи не задавайте `context`.
- `sessions_spawn` **не** приймає параметри доставки каналу (`target`, `channel`, `to`, `threadId`, `replyTo`, `transport`). Для доставки використовуйте `message`/`sessions_send` із запущеного сеансу.
## Сесії, прив’язані до потоку
## Сеанси, прив’язані до потоку
Коли для каналу ввімкнені прив’язки до потоку, підлеглий агент може залишатися прив’язаним до потоку, щоб подальші повідомлення користувача в цьому потоці й далі маршрутизувалися до тієї самої сесії підлеглого агента.
Коли для каналу ввімкнено прив’язки до потоків, субагент може залишатися прив’язаним до потоку, щоб наступні повідомлення користувача в цьому потоці й далі маршрутизувалися до того самого сеансу субагента.
### Канали з підтримкою потоків
- Discord (наразі єдиний підтримуваний канал): підтримує постійні сесії підлеглих агентів, прив’язані до потоку (`sessions_spawn` з `thread: true`), ручні елементи керування потоком (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) і ключі адаптера `channels.discord.threadBindings.enabled`, `channels.discord.threadBindings.idleHours`, `channels.discord.threadBindings.maxAgeHours` та `channels.discord.threadBindings.spawnSubagentSessions`.
- Discord (наразі єдиний підтримуваний канал): підтримує постійні сеанси субагентів, прив’язані до потоку (`sessions_spawn` з `thread: true`), ручне керування потоками (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) і ключі адаптера `channels.discord.threadBindings.enabled`, `channels.discord.threadBindings.idleHours`, `channels.discord.threadBindings.maxAgeHours` та `channels.discord.threadBindings.spawnSubagentSessions`.
Швидкий сценарій:
1. Запустіть через `sessions_spawn`, використовуючи `thread: true` (і за потреби `mode: "session"`).
2. OpenClaw створює потік або прив’язує його до цілі цієї сесії в активному каналі.
3. Відповіді та подальші повідомлення в цьому потоці маршрутизуються до прив’язаної сесії.
4. Використовуйте `/session idle`, щоб переглянути/оновити автоматичне зняття фокусу через неактивність, а `/session max-age` щоб керувати жорстким обмеженням часу.
5. Використовуйте `/unfocus`, щоб від’єднати вручну.
1. Запустіть `sessions_spawn`, використовуючи `thread: true` (і за потреби `mode: "session"`).
2. OpenClaw створить потік або прив’яже потік до цілі цього сеансу в активному каналі.
3. Відповіді та наступні повідомлення в цьому потоці маршрутизуються до прив’язаного сеансу.
4. Використовуйте `/session idle`, щоб переглядати/оновлювати автоматичне зняття фокуса через неактивність, і `/session max-age`, щоб керувати жорстким обмеженням.
5. Використовуйте `/unfocus` для ручного від’єднання.
Ручне керування:
Ручні елементи керування:
- `/focus <target>` прив’язує поточний потік (або створює його) до цілі підлеглого агента/сесії.
- `/focus <target>` прив’язує поточний потік (або створює його) до цілі субагента/сеансу.
- `/unfocus` видаляє прив’язку для поточного прив’язаного потоку.
- `/agents` показує список активних сеансів і стан прив’язки (`thread:<id>` або `unbound`).
- `/agents` показує список активних запусків і стан прив’язки (`thread:<id>` або `unbound`).
- `/session idle` і `/session max-age` працюють лише для сфокусованих прив’язаних потоків.
Перемикачі конфігурації:
- Глобальні типові значення: `session.threadBindings.enabled`, `session.threadBindings.idleHours`, `session.threadBindings.maxAgeHours`
- Перевизначення каналу та ключі автоматичної прив’язки під час запуску залежать від адаптера. Див. **Канали з підтримкою потоків** вище.
- Глобальні значення за замовчуванням: `session.threadBindings.enabled`, `session.threadBindings.idleHours`, `session.threadBindings.maxAgeHours`
- Перевизначення для каналу та ключі автоматичної прив’язки під час запуску є специфічними для адаптера. Див. **Канали з підтримкою потоків** вище.
Див. [Довідник з конфігурації](/uk/gateway/configuration-reference) і [Слеш-команди](/uk/tools/slash-commands) для актуальних відомостей про адаптери.
Список дозволених значень:
Список дозволених:
- `agents.list[].subagents.allowAgents`: список id агентів, які можна використовувати через `agentId` (`["*"]` дозволяє будь-який). Типово: лише агент запитувача.
- `agents.defaults.subagents.allowAgents`: типовий список дозволених цільових агентів, який використовується, коли агент запитувача не задає власний `subagents.allowAgents`.
- Захист успадкування пісочниці: якщо сесія запитувача працює в пісочниці, `sessions_spawn` відхиляє цілі, які запускалися б без пісочниці.
- `agents.defaults.subagents.requireAgentId` / `agents.list[].subagents.requireAgentId`: якщо `true`, блокують виклики `sessions_spawn`, у яких пропущено `agentId` (примушує до явного вибору профілю). Типово: false.
- `agents.list[].subagents.allowAgents`: список ідентифікаторів агентів, на які можна націлюватися через `agentId` (`["*"]` — дозволити будь-який). За замовчуванням: лише агент запитувача.
- `agents.defaults.subagents.allowAgents`: список дозволених цільових агентів за замовчуванням, який використовується, коли агент запитувача не задає власний `subagents.allowAgents`.
- Захист успадкування sandbox: якщо сеанс запитувача sandboxed, `sessions_spawn` відхиляє цілі, які працювали б без sandbox.
- `agents.defaults.subagents.requireAgentId` / `agents.list[].subagents.requireAgentId`: коли `true`, блокує виклики `sessions_spawn`, у яких пропущено `agentId` (примушує до явного вибору профілю). За замовчуванням: false.
Виявлення:
- Використовуйте `agents_list`, щоб побачити, які id агентів наразі дозволені для `sessions_spawn`.
- Використовуйте `agents_list`, щоб побачити, які ідентифікатори агентів зараз дозволені для `sessions_spawn`.
Автоархівація:
- Сесії підлеглих агентів автоматично архівуються після `agents.defaults.subagents.archiveAfterMinutes` (типово: 60).
- Архівація використовує `sessions.delete` і перейменовує транскрипт у `*.deleted.<timestamp>` (та сама папка).
- `cleanup: "delete"` архівує одразу після повідомлення (транскрипт усе ще зберігається через перейменування).
- Автоархівація працює в режимі best-effort; заплановані таймери втрачаються, якщо Gateway перезапускається.
- `runTimeoutSeconds` **не** виконує автоархівацію; він лише зупиняє сеанс. Сесія залишається до автоархівації.
- Автоархівація однаково застосовується до сесій глибини 1 і глибини 2.
- Очищення браузера є окремим від очищення архіву: відстежувані вкладки/процеси браузера в межах best-effort закриваються, коли сеанс завершується, навіть якщо запис транскрипту/сесії зберігається.
- Сеанси субагентів автоматично архівуються після `agents.defaults.subagents.archiveAfterMinutes` (за замовчуванням: 60).
- Архівація використовує `sessions.delete` і перейменовує стенограму на `*.deleted.<timestamp>` (у тій самій папці).
- `cleanup: "delete"` архівує одразу після повідомлення (але все одно зберігає стенограму через перейменування).
- Автоархівація виконується за принципом best-effort; відкладені таймери втрачаються, якщо Gateway перезапускається.
- `runTimeoutSeconds` **не** запускає автоархівацію; він лише зупиняє запуск. Сеанс залишається до автоархівації.
- Автоархівація однаково застосовується до сеансів рівня depth-1 і depth-2.
- Очищення браузера є окремим від очищення архіву: відстежувані вкладки/процеси браузера закриваються в режимі best-effort, коли запуск завершується, навіть якщо стенограма/запис сеансу зберігається.
## Вкладені підлеглі агенти
## Вкладені субагенти
Типово підлеглі агенти не можуть запускати власних підлеглих агентів (`maxSpawnDepth: 1`). Ви можете ввімкнути один рівень вкладеності, встановивши `maxSpawnDepth: 2`, що дозволяє **шаблон оркестрації**: основний → підлеглий агент-оркестратор → дочірні підлеглі агенти-працівники.
За замовчуванням субагенти не можуть створювати власних субагентів (`maxSpawnDepth: 1`). Ви можете ввімкнути один рівень вкладеності, установивши `maxSpawnDepth: 2`, що дозволяє **шаблон оркестратора**: main → субагент-оркестратор → робочі суб-субагенти.
### Як увімкнути
@ -188,10 +188,10 @@ x-i18n:
agents: {
defaults: {
subagents: {
maxSpawnDepth: 2, // дозволити підлеглим агентам запускати дочірніх агентів (типово: 1)
maxChildrenPerAgent: 5, // максимальна кількість активних дочірніх агентів на сесію агента (типово: 5)
maxConcurrent: 8, // глобальне обмеження паралельності смуги (типово: 8)
runTimeoutSeconds: 900, // типовий тайм-аут для sessions_spawn, якщо параметр пропущено (0 = без тайм-ауту)
maxSpawnDepth: 2, // дозволити субагентам створювати дочірніх агентів (за замовчуванням: 1)
maxChildrenPerAgent: 5, // макс. кількість активних дочірніх агентів на сеанс агента (за замовчуванням: 5)
maxConcurrent: 8, // глобальне обмеження паралельності lane (за замовчуванням: 8)
runTimeoutSeconds: 900, // тайм-аут за замовчуванням для sessions_spawn, якщо пропущено (0 = без тайм-ауту)
},
},
},
@ -200,19 +200,19 @@ x-i18n:
### Рівні глибини
| Глибина | Форма ключа сесії | Роль | Може запускати? |
| ------- | ------------------------------------------- | --------------------------------------------- | ---------------------------- |
| 0 | `agent:<id>:main` | Основний агент | Завжди |
| 1 | `agent:<id>:subagent:<uuid>` | Підлеглий агент (оркестратор, якщо дозволено глибину 2) | Лише якщо `maxSpawnDepth >= 2` |
| 2 | `agent:<id>:subagent:<uuid>:subagent:<uuid>` | Підпідлеглий агент (кінцевий виконавець) | Ніколи |
| Глибина | Форма ключа сеансу | Роль | Може створювати дочірніх агентів? |
| ------- | -------------------------------------------- | --------------------------------------------- | --------------------------------- |
| 0 | `agent:<id>:main` | Основний агент | Завжди |
| 1 | `agent:<id>:subagent:<uuid>` | Субагент (оркестратор, якщо дозволено depth 2) | Лише якщо `maxSpawnDepth >= 2` |
| 2 | `agent:<id>:subagent:<uuid>:subagent:<uuid>` | Суб-субагент (кінцевий робочий агент) | Ніколи |
### Ланцюжок повідомлень
### Ланцюг повідомлення
Результати повертаються вгору ланцюжком:
Результати повертаються вгору по ланцюгу:
1. Виконавець глибини 2 завершується → повідомляє своєму батьківському агенту (оркестратору глибини 1)
2. Оркестратор глибини 1 отримує повідомлення, синтезує результати, завершується → повідомляє основному агенту
3. Основний агент отримує повідомлення і доставляє його користувачу
1. Робочий агент depth-2 завершується → повідомляє свого батьківського агента (оркестратор depth-1)
2. Оркестратор depth-1 отримує повідомлення, синтезує результати, завершується → повідомляє основного агента
3. Основний агент отримує повідомлення і доставляє його користувачеві
Кожен рівень бачить повідомлення лише від своїх безпосередніх дочірніх агентів.
@ -220,104 +220,104 @@ x-i18n:
- Запускайте дочірню роботу один раз і чекайте на події завершення замість побудови циклів
опитування навколо `sessions_list`, `sessions_history`, `/subagents list` або
команд `exec` зі сном.
команд `exec` sleep.
- Якщо подія завершення дочірнього агента надходить після того, як ви вже надіслали фінальну відповідь,
правильна подальша дія — точний тихий токен `NO_REPLY` / `no_reply`.
правильною подальшою дією є точний беззвучний токен `NO_REPLY` / `no_reply`.
### Політика інструментів за глибиною
- Роль і область керування записуються в метадані сесії під час запуску. Це не дає плоским або відновленим ключам сесії випадково знову отримати привілеї оркестратора.
- **Глибина 1 (оркестратор, коли `maxSpawnDepth >= 2`)**: отримує `sessions_spawn`, `subagents`, `sessions_list`, `sessions_history`, щоб керувати своїми дочірніми агентами. Інші інструменти сесії/системи залишаються забороненими.
- **Глибина 1 (кінцевий виконавець, коли `maxSpawnDepth == 1`)**: без інструментів сесії (поточна типова поведінка).
- **Глибина 2 (кінцевий виконавець)**: без інструментів сесії — `sessions_spawn` завжди заборонений на глибині 2. Не може запускати подальших дочірніх агентів.
- Роль і область керування записуються в метадані сеансу під час spawn. Це не дає пласким або відновленим ключам сеансу випадково знову отримати привілеї оркестратора.
- **Depth 1 (оркестратор, коли `maxSpawnDepth >= 2`)**: отримує `sessions_spawn`, `subagents`, `sessions_list`, `sessions_history`, щоб міг керувати своїми дочірніми агентами. Інші інструменти сеансів/системи залишаються забороненими.
- **Depth 1 (кінцевий агент, коли `maxSpawnDepth == 1`)**: без інструментів сеансів (поточна поведінка за замовчуванням).
- **Depth 2 (кінцевий робочий агент)**: без інструментів сеансів — `sessions_spawn` завжди заборонено на глибині 2. Не може створювати подальших дочірніх агентів.
### Ліміт запуску для агента
### Ліміт spawn для окремого агента
Кожна сесія агента (на будь-якій глибині) може мати щонайбільше `maxChildrenPerAgent` (типово: 5) активних дочірніх агентів одночасно. Це запобігає неконтрольованому розгалуженню від одного оркестратора.
Кожен сеанс агента (на будь-якій глибині) може мати не більше `maxChildrenPerAgent` (за замовчуванням: 5) активних дочірніх агентів одночасно. Це запобігає неконтрольованому розгалуженню від одного оркестратора.
### Каскадна зупинка
Зупинка оркестратора глибини 1 автоматично зупиняє всіх його дочірніх агентів глибини 2:
Зупинка оркестратора depth-1 автоматично зупиняє всіх його дочірніх агентів depth-2:
- `/stop` в основному чаті зупиняє всіх агентів глибини 1 і каскадно зупиняє їхніх дочірніх агентів глибини 2.
- `/subagents kill <id>` зупиняє конкретного підлеглого агента і каскадно зупиняє його дочірніх агентів.
- `/subagents kill all` зупиняє всіх підлеглих агентів для запитувача і виконує каскадну зупинку.
- `/stop` в основному чаті зупиняє всіх агентів depth-1 і каскадно зупиняє їхніх дочірніх агентів depth-2.
- `/subagents kill <id>` зупиняє конкретного субагента і каскадно зупиняє його дочірніх агентів.
- `/subagents kill all` зупиняє всіх субагентів для запитувача і виконує каскадну зупинку.
## Автентифікація
Автентифікація підлеглого агента визначається за **id агента**, а не за типом сесії:
Автентифікація субагента визначається за **ідентифікатором агента**, а не за типом сеансу:
- Ключ сесії підлеглого агента — `agent:<agentId>:subagent:<uuid>`.
- Ключ сеансу субагента: `agent:<agentId>:subagent:<uuid>`.
- Сховище автентифікації завантажується з `agentDir` цього агента.
- Профілі автентифікації основного агента додаються як **резервні**; у разі конфліктів профілі агента мають пріоритет над профілями основного агента.
- Профілі автентифікації основного агента об’єднуються як **резервний варіант**; у разі конфліктів профілі агента мають пріоритет над профілями основного агента.
Примітка: об’єднання є адитивним, тому профілі основного агента завжди доступні як резервні. Повністю ізольована автентифікація для кожного агента поки що не підтримується.
## Повідомлення
Підлеглі агенти звітують назад через крок повідомлення:
Субагенти звітують назад через крок повідомлення:
- Крок повідомлення виконується всередині сесії підлеглого агента (а не сесії запитувача).
- Якщо підлеглий агент відповідає рівно `ANNOUNCE_SKIP`, нічого не публікується.
- Якщо останній текст помічника є точним тихим токеном `NO_REPLY` / `no_reply`,
- Крок повідомлення виконується всередині сеансу субагента (не сеансу запитувача).
- Якщо субагент відповідає точно `ANNOUNCE_SKIP`, нічого не публікується.
- Якщо останній текст assistant — це точний беззвучний токен `NO_REPLY` / `no_reply`,
вивід повідомлення пригнічується, навіть якщо раніше був видимий прогрес.
- В іншому разі доставка залежить від глибини запитувача:
- для запитувачів верхнього рівня використовується подальший виклик `agent` із зовнішньою доставкою (`deliver=true`)
- вкладені сесії підлеглих агентів запитувача отримують внутрішнє подальше впровадження (`deliver=false`), щоб оркестратор міг синтезувати результати дочірніх агентів у межах сесії
- якщо вкладена сесія підлеглого агента запитувача вже відсутня, OpenClaw за можливості повертається до запитувача цієї сесії
- Для сесій запитувача верхнього рівня пряма доставка в режимі завершення спочатку визначає будь-який прив’язаний маршрут розмови/потоку та перевизначення hook, а потім заповнює відсутні поля channel-target із збереженого маршруту сесії запитувача. Це зберігає завершення в правильному чаті/темі, навіть коли джерело завершення вказує лише канал.
- Агрегація завершень дочірніх агентів обмежується поточним сеансом запитувача під час побудови вкладених результатів завершення, що запобігає потраплянню застарілих виводів дочірніх агентів із попередніх сеансів у поточне повідомлення.
- Інакше доставка залежить від глибини запитувача:
- сеанси запитувача верхнього рівня використовують подальший виклик `agent` із зовнішньою доставкою (`deliver=true`)
- вкладені сеанси субагентів запитувача отримують внутрішнє подальше впровадження (`deliver=false`), щоб оркестратор міг синтезувати результати дочірніх агентів у межах сеансу
- якщо вкладений сеанс субагента запитувача більше не існує, OpenClaw за можливості переходить до запитувача цього сеансу
- Для сеансів запитувача верхнього рівня пряма доставка в режимі завершення спочатку визначає будь-який прив’язаний маршрут розмови/потоку та перевизначення hook, а потім заповнює відсутні поля channel-target зі збереженого маршруту сеансу запитувача. Це утримує завершення в правильному чаті/темі, навіть якщо джерело завершення ідентифікує лише канал.
- Агрегація завершення дочірніх агентів обмежується поточним запуском запитувача під час побудови вкладених результатів завершення, що запобігає потраплянню застарілих виходів дочірніх агентів із попередніх запусків у поточне повідомлення.
- Відповіді-повідомлення зберігають маршрутизацію потоку/теми, коли вона доступна в адаптерах каналів.
- Контекст повідомлення нормалізується до стабільного внутрішнього блоку події:
- Контекст повідомлення нормалізується до стабільного внутрішнього блоку подій:
- джерело (`subagent` або `cron`)
- ключ/id дочірньої сесії
- ключ/ідентифікатор дочірнього сеансу
- тип повідомлення + мітка завдання
- рядок статусу, похідний від результату виконання (`success`, `error`, `timeout` або `unknown`)
- вміст результату, вибраний з останнього видимого тексту помічника, або, якщо його немає, очищений останній текст `tool`/`toolResult`; термінальні невдалі сеанси повідомляють про статус помилки без повторення захопленого тексту відповіді
- подальша інструкція, яка описує, коли відповідати, а коли зберігати тишу
- `Status` не виводиться з результату моделі; він походить із сигналів результату виконання.
- У разі тайм-ауту, якщо дочірній агент встиг пройти лише виклики інструментів, повідомлення може згорнути цю історію в короткий підсумок часткового прогресу замість відтворення сирого виводу інструментів.
- рядок статусу, виведений із результату середовища виконання (`success`, `error`, `timeout` або `unknown`)
- вміст результату, вибраний з останнього видимого тексту assistant, інакше санітизований останній текст tool/toolResult; термінально невдалі запуски повідомляють статус помилки без повторного відтворення захопленого тексту відповіді
- подальшу інструкцію, яка описує, коли відповідати, а коли зберігати тишу
- `Status` не виводиться з результату моделі; він походить із сигналів результату середовища виконання.
- У разі тайм-ауту, якщо дочірній агент встиг лише до викликів інструментів, повідомлення може згорнути цю історію в коротке підсумкове зведення часткового прогресу замість відтворення необробленого виводу інструментів.
Корисне навантаження повідомлень містить рядок статистики наприкінці (навіть якщо воно обгорнуте):
Повідомлення містять рядок статистики в кінці (навіть якщо вони загорнуті):
- Час виконання (наприклад, `runtime 5m12s`)
- Runtime (наприклад, `runtime 5m12s`)
- Використання токенів (вхідні/вихідні/загалом)
- Оцінена вартість, якщо налаштовано ціни моделей (`models.providers.*.models[].cost`)
- `sessionKey`, `sessionId` і шлях до транскрипту (щоб основний агент міг отримати історію через `sessions_history` або перевірити файл на диску)
- Оцінена вартість, коли налаштовано ціни моделі (`models.providers.*.models[].cost`)
- `sessionKey`, `sessionId` і шлях до стенограми (щоб основний агент міг отримати історію через `sessions_history` або перевірити файл на диску)
- Внутрішні метадані призначені лише для оркестрації; відповіді для користувача слід переписувати звичайним голосом помічника.
`sessions_history` — безпечніший шлях оркестрації:
- історія помічника спочатку нормалізується:
- історія assistant спочатку нормалізується:
- теги thinking видаляються
- блоки каркаса `<relevant-memories>` / `<relevant_memories>` видаляються
- блоки XML-корисного навантаження plain-text викликів інструментів, як-от `<tool_call>...</tool_call>`,
- текстові XML-блоки payload викликів інструментів, такі як `<tool_call>...</tool_call>`,
`<function_call>...</function_call>`, `<tool_calls>...</tool_calls>` і
`<function_calls>...</function_calls>`, видаляються, включно з обрізаними
корисними навантаженнями, які так і не закрилися коректно
- знижені до тексту каркаси викликів/результатів інструментів і маркери історичного контексту видаляються
- витеклі службові токени моделі, як-от `<|assistant|>`, інші ASCII
токени `<|...|>` і їхні full-width варіанти `<...>`, видаляються
`<function_calls>...</function_calls>`, видаляються, включно з усіченими
payload, які так і не закриваються коректно
- деградований каркас викликів/результатів інструментів і маркери історичного контексту видаляються
- витеклі токени керування моделлю, такі як `<|assistant|>`, інші ASCII
токени `<|...|>` і повноширинні варіанти `<...>`, видаляються
- некоректний XML викликів інструментів MiniMax видаляється
- текст, схожий на облікові дані/токени, редагується
- довгі блоки можуть бути обрізані
- у дуже великих історіях старіші рядки можуть відкидатися або надто великий рядок може бути замінений на
- довгі блоки можуть бути усічені
- дуже великі історії можуть відкидати старіші рядки або замінювати надто великий рядок на
`[sessions_history omitted: message too large]`
- перевірка сирого транскрипту на диску — це резервний варіант, коли вам потрібен повний побайтний транскрипт
- перевірка необробленої стенограми на диску — це резервний варіант, коли вам потрібна повна стенограма байт у байт
## Політика інструментів (інструменти підлеглих агентів)
## Політика інструментів (інструменти субагента)
Типово підлеглі агенти отримують **усі інструменти, крім інструментів сесії** та системних інструментів:
За замовчуванням субагенти отримують **усі інструменти, крім інструментів сеансів** і системних інструментів:
- `sessions_list`
- `sessions_history`
- `sessions_send`
- `sessions_spawn`
Тут `sessions_history` також залишається обмеженим, очищеним поданням історії; це не
сирий дамп транскрипту.
`sessions_history` і тут залишається обмеженим, санітизованим переглядом історії; це не
необроблений дамп стенограми.
Коли `maxSpawnDepth >= 2`, підлеглі агенти-оркестратори глибини 1 додатково отримують `sessions_spawn`, `subagents`, `sessions_list` і `sessions_history`, щоб керувати своїми дочірніми агентами.
Коли `maxSpawnDepth >= 2`, субагенти-оркестратори depth-1 додатково отримують `sessions_spawn`, `subagents`, `sessions_list` і `sessions_history`, щоб могли керувати своїми дочірніми агентами.
Перевизначення через конфігурацію:
@ -333,9 +333,9 @@ x-i18n:
tools: {
subagents: {
tools: {
// deny має пріоритет
// заборона має пріоритет
deny: ["gateway", "cron"],
// якщо встановлено allow, список стає лише allow-only (deny усе одно має пріоритет)
// якщо задано allow, він стає списком лише дозволених (deny усе одно має пріоритет)
// allow: ["read", "exec", "process"]
},
},
@ -345,27 +345,39 @@ x-i18n:
## Паралельність
Підлеглі агенти використовують окрему внутрішньопроцесну смугу черги:
Субагенти використовують окрему lane черги в межах процесу:
- Назва смуги: `subagent`
- Паралельність: `agents.defaults.subagents.maxConcurrent` (типово `8`)
- Назва lane: `subagent`
- Паралельність: `agents.defaults.subagents.maxConcurrent` (за замовчуванням `8`)
## Живучість і відновлення
OpenClaw не вважає відсутність `endedAt` постійним доказом того, що субагент
досі живий. Незавершені запуски, старіші за вікно застарілого запуску, перестають рахуватися як
активні/очікувані в `/subagents list`, підсумках статусу, контролі завершення нащадків
і перевірках паралельності для кожного сеансу.
Після перезапуску gateway застарілі незавершені відновлені запуски очищаються, якщо їхній
дочірній сеанс не позначено як `abortedLastRun: true`. Такі дочірні сеанси, перервані
перезапуском, залишаються придатними до відновлення через потік відновлення осиротілих субагентів, який
надсилає синтетичне повідомлення відновлення перед очищенням маркера переривання.
## Зупинка
- Надсилання `/stop` у чаті запитувача перериває сесію запитувача і зупиняє всі активні сеанси підлеглих агентів, запущені з неї, з каскадним поширенням на вкладених дочірніх агентів.
- `/subagents kill <id>` зупиняє конкретного підлеглого агента і каскадно зупиняє його дочірніх агентів.
- Надсилання `/stop` у чаті запитувача перериває сеанс запитувача та зупиняє всі активні запуски субагентів, створені з нього, каскадно охоплюючи вкладених дочірніх агентів.
- `/subagents kill <id>` зупиняє конкретного субагента і каскадно зупиняє його дочірніх агентів.
## Обмеження
- Повідомлення підлеглого агента — у режимі **best-effort**. Якщо Gateway перезапуститься, незавершена робота з «повідомлення назад» буде втрачена.
- Підлеглі агенти все ще спільно використовують ресурси того самого процесу Gateway; розглядайте `maxConcurrent` як запобіжник.
- `sessions_spawn` завжди не блокує виконання: він одразу повертає `{ status: "accepted", runId, childSessionKey }`.
- Контекст підлеглого агента впроваджує лише `AGENTS.md` + `TOOLS.md` (без `SOUL.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md` або `BOOTSTRAP.md`).
- Максимальна глибина вкладеності — 5 (`maxSpawnDepth` у діапазоні 15). Для більшості випадків використання рекомендується глибина 2.
- `maxChildrenPerAgent` обмежує кількість активних дочірніх агентів на сесію (типово: 5, діапазон: 120).
- Повідомлення субагента виконується в режимі **best-effort**. Якщо gateway перезапускається, очікувана робота «повідомити назад» втрачається.
- Субагенти все ще використовують ті самі ресурси процесу gateway; розглядайте `maxConcurrent` як запобіжний клапан.
- `sessions_spawn` завжди є неблокувальним: він одразу повертає `{ status: "accepted", runId, childSessionKey }`.
- Контекст субагента впроваджує лише `AGENTS.md` + `TOOLS.md` (без `SOUL.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md` або `BOOTSTRAP.md`).
- Максимальна глибина вкладеності — 5 (`maxSpawnDepth` у діапазоні: 15). Для більшості випадків використання рекомендовано depth 2.
- `maxChildrenPerAgent` обмежує кількість активних дочірніх агентів на сеанс (за замовчуванням: 5, діапазон: 120).
## Пов’язане
## Пов’язані матеріали
- [ACP agents](/uk/tools/acp-agents)
- [Інструменти пісочниці для мультиагентної роботи](/uk/tools/multi-agent-sandbox-tools)
- [ACP Agents](/uk/tools/acp-agents)
- [Інструменти sandbox для мультиагентності](/uk/tools/multi-agent-sandbox-tools)
- [Надсилання агенту](/uk/tools/agent-send)