From 4e75f3b4c3c973e522fe39c7eba56c13a7018a25 Mon Sep 17 00:00:00 2001 From: "openclaw-docs-i18n[bot]" Date: Sat, 25 Apr 2026 04:19:37 +0000 Subject: [PATCH] chore(i18n): refresh uk translations --- docs/uk/tools/subagents.md | 356 +++++++++++++++++++------------------ 1 file changed, 184 insertions(+), 172 deletions(-) diff --git a/docs/uk/tools/subagents.md b/docs/uk/tools/subagents.md index 288862063..3d7d9dd41 100644 --- a/docs/uk/tools/subagents.md +++ b/docs/uk/tools/subagents.md @@ -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::subagent:`) і після завершення **повідомляють** про свій результат назад у канал чату запитувача. Кожен сеанс підлеглого агента відстежується як [фонове завдання](/uk/automation/tasks). +Субагенти — це фонові запуски агентів, створені з наявного запуску агента. Вони працюють у власному сеансі (`agent::subagent:`) і, коли завершуються, **повідомляють** про свій результат назад у канал чату запитувача. Кожен запуск субагента відстежується як [фонове завдання](/uk/automation/tasks). ## Слеш-команда -Використовуйте `/subagents`, щоб переглядати або керувати сеансами підлеглих агентів для **поточної сесії**: +Використовуйте `/subagents`, щоб переглядати або керувати запусками субагентів для **поточного сеансу**: - `/subagents list` - `/subagents kill ` @@ -30,7 +30,7 @@ x-i18n: Елементи керування прив’язкою до потоку: -Ці команди працюють на каналах, які підтримують постійні прив’язки до потоку. Див. **Канали з підтримкою потоків** нижче. +Ці команди працюють у каналах, що підтримують постійні прив’язки до потоків. Див. **Канали з підтримкою потоків** нижче. - `/focus ` - `/unfocus` @@ -38,148 +38,148 @@ x-i18n: - `/session idle ` - `/session max-age ` -`/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 ` прив’язує поточний потік (або створює його) до цілі підлеглого агента/сесії. +- `/focus ` прив’язує поточний потік (або створює його) до цілі субагента/сеансу. - `/unfocus` видаляє прив’язку для поточного прив’язаного потоку. -- `/agents` показує список активних сеансів і стан прив’язки (`thread:` або `unbound`). +- `/agents` показує список активних запусків і стан прив’язки (`thread:` або `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.` (та сама папка). -- `cleanup: "delete"` архівує одразу після повідомлення (транскрипт усе ще зберігається через перейменування). -- Автоархівація працює в режимі best-effort; заплановані таймери втрачаються, якщо Gateway перезапускається. -- `runTimeoutSeconds` **не** виконує автоархівацію; він лише зупиняє сеанс. Сесія залишається до автоархівації. -- Автоархівація однаково застосовується до сесій глибини 1 і глибини 2. -- Очищення браузера є окремим від очищення архіву: відстежувані вкладки/процеси браузера в межах best-effort закриваються, коли сеанс завершується, навіть якщо запис транскрипту/сесії зберігається. +- Сеанси субагентів автоматично архівуються після `agents.defaults.subagents.archiveAfterMinutes` (за замовчуванням: 60). +- Архівація використовує `sessions.delete` і перейменовує стенограму на `*.deleted.` (у тій самій папці). +- `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::main` | Основний агент | Завжди | -| 1 | `agent::subagent:` | Підлеглий агент (оркестратор, якщо дозволено глибину 2) | Лише якщо `maxSpawnDepth >= 2` | -| 2 | `agent::subagent::subagent:` | Підпідлеглий агент (кінцевий виконавець) | Ніколи | +| Глибина | Форма ключа сеансу | Роль | Може створювати дочірніх агентів? | +| ------- | -------------------------------------------- | --------------------------------------------- | --------------------------------- | +| 0 | `agent::main` | Основний агент | Завжди | +| 1 | `agent::subagent:` | Субагент (оркестратор, якщо дозволено depth 2) | Лише якщо `maxSpawnDepth >= 2` | +| 2 | `agent::subagent::subagent:` | Суб-субагент (кінцевий робочий агент) | Ніколи | -### Ланцюжок повідомлень +### Ланцюг повідомлення -Результати повертаються вгору ланцюжком: +Результати повертаються вгору по ланцюгу: -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 ` зупиняє конкретного підлеглого агента і каскадно зупиняє його дочірніх агентів. -- `/subagents kill all` зупиняє всіх підлеглих агентів для запитувача і виконує каскадну зупинку. +- `/stop` в основному чаті зупиняє всіх агентів depth-1 і каскадно зупиняє їхніх дочірніх агентів depth-2. +- `/subagents kill ` зупиняє конкретного субагента і каскадно зупиняє його дочірніх агентів. +- `/subagents kill all` зупиняє всіх субагентів для запитувача і виконує каскадну зупинку. ## Автентифікація -Автентифікація підлеглого агента визначається за **id агента**, а не за типом сесії: +Автентифікація субагента визначається за **ідентифікатором агента**, а не за типом сеансу: -- Ключ сесії підлеглого агента — `agent::subagent:`. +- Ключ сеансу субагента: `agent::subagent:`. - Сховище автентифікації завантажується з `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 видаляються - блоки каркаса `` / `` видаляються - - блоки XML-корисного навантаження plain-text викликів інструментів, як-от `...`, + - текстові XML-блоки payload викликів інструментів, такі як `...`, `...`, `...` і - `...`, видаляються, включно з обрізаними - корисними навантаженнями, які так і не закрилися коректно - - знижені до тексту каркаси викликів/результатів інструментів і маркери історичного контексту видаляються - - витеклі службові токени моделі, як-от `<|assistant|>`, інші ASCII - токени `<|...|>` і їхні full-width варіанти `<|...|>`, видаляються + `...`, видаляються, включно з усіченими + 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 ` зупиняє конкретного підлеглого агента і каскадно зупиняє його дочірніх агентів. +- Надсилання `/stop` у чаті запитувача перериває сеанс запитувача та зупиняє всі активні запуски субагентів, створені з нього, каскадно охоплюючи вкладених дочірніх агентів. +- `/subagents kill ` зупиняє конкретного субагента і каскадно зупиняє його дочірніх агентів. ## Обмеження -- Повідомлення підлеглого агента — у режимі **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` у діапазоні 1–5). Для більшості випадків використання рекомендується глибина 2. -- `maxChildrenPerAgent` обмежує кількість активних дочірніх агентів на сесію (типово: 5, діапазон: 1–20). +- Повідомлення субагента виконується в режимі **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` у діапазоні: 1–5). Для більшості випадків використання рекомендовано depth 2. +- `maxChildrenPerAgent` обмежує кількість активних дочірніх агентів на сеанс (за замовчуванням: 5, діапазон: 1–20). -## Пов’язане +## Пов’язані матеріали -- [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)