chore(i18n): refresh uk translations
This commit is contained in:
parent
1d039a880e
commit
83910253b1
@ -1,41 +1,48 @@
|
||||
---
|
||||
read_when:
|
||||
- Вам потрібна фонова або паралельна робота через агента
|
||||
- Ви змінюєте політику інструмента sessions_spawn або під-агента
|
||||
- Ви впроваджуєте або усуваєте несправності в сеансах субагентів, прив’язаних до потоку
|
||||
- Ви змінюєте політику sessions_spawn або інструмента субагента
|
||||
- Ви реалізуєте або усуваєте несправності сеансів субагентів, прив’язаних до потоку.
|
||||
sidebarTitle: Sub-agents
|
||||
summary: Запускайте ізольовані фонові запуски агента, які повідомляють результати назад у чат запитувача
|
||||
summary: Запускайте ізольовані фонові виконання агентів, які повідомляють результати назад у чат запитувача
|
||||
title: Субагенти
|
||||
x-i18n:
|
||||
generated_at: "2026-05-03T22:25:54Z"
|
||||
generated_at: "2026-05-04T05:37:26Z"
|
||||
model: gpt-5.5
|
||||
provider: openai
|
||||
source_hash: d0df39e06b952def3eb0b296f36c7dc8c0b0a115785d865236a970c5d453fc37
|
||||
source_hash: 65d60bf6813d667b7311aa28109d4bd6be012a16e638c64cfff130831db88cd8
|
||||
source_path: tools/subagents.md
|
||||
workflow: 16
|
||||
---
|
||||
|
||||
Sub-agents — це фонові запуски агентів, породжені з наявного запуску агента.
|
||||
Вони працюють у власному сеансі (`agent:<agentId>:subagent:<uuid>`) і,
|
||||
після завершення, **оголошують** свій результат назад у канал чату
|
||||
запитувача. Кожен запуск sub-agent відстежується як
|
||||
Субагенти — це фонові запуски агентів, породжені з наявного запуску агента.
|
||||
Вони працюють у власній сесії (`agent:<agentId>:subagent:<uuid>`) і,
|
||||
після завершення, **повідомляють** свій результат назад у чат-канал
|
||||
запитувача. Кожен запуск субагента відстежується як
|
||||
[фонове завдання](/uk/automation/tasks).
|
||||
|
||||
Основні цілі:
|
||||
|
||||
- Паралелізувати роботу з "дослідження / довге завдання / повільний інструмент", не блокуючи основний запуск.
|
||||
- Ізолювати sub-agents за замовчуванням (розділення сеансів + необов’язкова пісочниця).
|
||||
- Зробити поверхню інструментів складною для неправильного використання: sub-agents за замовчуванням **не** отримують інструменти сеансу.
|
||||
- Підтримувати налаштовувану глибину вкладеності для патернів оркестратора.
|
||||
- Паралелити роботу типу "дослідження / довге завдання / повільний інструмент", не блокуючи основний запуск.
|
||||
- Тримати субагентів ізольованими за замовчуванням (розділення сесій + необов’язкова пісочниця).
|
||||
- Зробити поверхню інструментів складною для неправильного використання: субагенти **не** отримують сесійні інструменти за замовчуванням.
|
||||
- Підтримувати налаштовувану глибину вкладеності для шаблонів оркестратора.
|
||||
|
||||
<Note>
|
||||
**Примітка щодо вартості:** кожен sub-agent за замовчуванням має власний контекст і використання токенів. Для важких або повторюваних завдань задайте дешевшу модель для sub-agents і залиште основного агента на якіснішій моделі. Налаштовуйте через `agents.defaults.subagents.model` або перевизначення для окремого агента. Коли дочірньому агенту справді потрібен поточний транскрипт запитувача, агент може запросити `context: "fork"` для цього одного породження. Сеанси subagent, прив’язані до треду, за замовчуванням використовують `context: "fork"`, бо вони відгалужують поточну розмову в подальший тред.
|
||||
**Примітка щодо вартості:** кожен субагент за замовчуванням має власний
|
||||
контекст і використання токенів. Для важких або повторюваних завдань задайте
|
||||
дешевшу модель для субагентів, а основного агента залиште на моделі вищої
|
||||
якості. Налаштовуйте через `agents.defaults.subagents.model` або перевизначення
|
||||
для окремого агента. Коли дочірньому агенту справді потрібен поточний транскрипт
|
||||
запитувача, агент може запросити `context: "fork"` для цього одного породження.
|
||||
Сесії субагентів, прив’язані до треду, за замовчуванням використовують
|
||||
`context: "fork"`, бо вони відгалужують поточну розмову в подальший тред.
|
||||
</Note>
|
||||
|
||||
## Slash-команда
|
||||
|
||||
Використовуйте `/subagents`, щоб переглядати або керувати запусками sub-agent для **поточного
|
||||
сеансу**:
|
||||
Використовуйте `/subagents`, щоб переглядати або керувати запусками субагентів для **поточної
|
||||
сесії**:
|
||||
|
||||
```text
|
||||
/subagents list
|
||||
@ -47,15 +54,16 @@ Sub-agents — це фонові запуски агентів, породжен
|
||||
/subagents spawn <agentId> <task> [--model <model>] [--thinking <level>]
|
||||
```
|
||||
|
||||
Використовуйте верхньорівневу [`/steer <message>`](/uk/tools/steer), щоб спрямувати активний запуск поточного сеансу запитувача. Використовуйте `/subagents steer <id|#> <message>`, коли ціллю є дочірній запуск.
|
||||
Використовуйте верхньорівневу [`/steer <message>`](/uk/tools/steer), щоб скеровувати активний запуск поточної сесії запитувача. Використовуйте `/subagents steer <id|#> <message>`, коли ціль — дочірній запуск.
|
||||
|
||||
`/subagents info` показує метадані запуску (статус, часові позначки, id сеансу,
|
||||
шлях до транскрипту, очищення). Використовуйте `sessions_history` для обмеженого,
|
||||
відфільтрованого з міркувань безпеки перегляду пригадування; перевіряйте шлях до транскрипту на диску, коли потрібен сирий повний транскрипт.
|
||||
`/subagents info` показує метадані запуску (статус, часові позначки, id сесії,
|
||||
шлях транскрипту, очищення). Використовуйте `sessions_history` для обмеженого,
|
||||
відфільтрованого з міркувань безпеки перегляду пам’яті; переглядайте шлях транскрипту на диску, коли
|
||||
потрібен сирий повний транскрипт.
|
||||
|
||||
### Керування прив’язкою до треду
|
||||
### Елементи керування прив’язкою до треду
|
||||
|
||||
Ці команди працюють у каналах, які підтримують постійні прив’язки до тредів.
|
||||
Ці команди працюють у каналах, що підтримують постійні прив’язки до тредів.
|
||||
Див. [Канали з підтримкою тредів](#thread-supporting-channels) нижче.
|
||||
|
||||
```text
|
||||
@ -68,82 +76,83 @@ Sub-agents — це фонові запуски агентів, породжен
|
||||
|
||||
### Поведінка породження
|
||||
|
||||
`/subagents spawn` запускає фоновий sub-agent як команду користувача (а не внутрішню
|
||||
ретрансляцію) і надсилає одне фінальне оновлення про завершення назад у
|
||||
`/subagents spawn` запускає фонового субагента як користувацьку команду (а не
|
||||
внутрішню ретрансляцію) і надсилає одне фінальне оновлення про завершення назад у
|
||||
чат запитувача, коли запуск завершується.
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="Non-blocking, push-based completion">
|
||||
- Команда породження не блокує виконання; вона одразу повертає id запуску.
|
||||
- Після завершення sub-agent оголошує повідомлення з підсумком/результатом назад у канал чату запитувача.
|
||||
- Завершення працює за push-моделлю. Після породження **не** опитуйте `/subagents list`, `sessions_list` або `sessions_history` у циклі лише для очікування завершення; перевіряйте статус лише на вимогу для налагодження або втручання.
|
||||
- Після завершення OpenClaw у режимі best-effort закриває відстежувані вкладки браузера/процеси, відкриті цим сеансом sub-agent, перш ніж потік очищення оголошення продовжиться.
|
||||
- Після завершення субагент повідомляє зведення/результат назад у чат-канал запитувача.
|
||||
- Завершення працює через push. Після породження **не** опитуйте `/subagents list`, `sessions_list` або `sessions_history` у циклі лише для очікування завершення; переглядайте статус тільки за потреби для налагодження або втручання.
|
||||
- Після завершення OpenClaw у режимі best-effort закриває відстежувані вкладки браузера/процеси, відкриті цією сесією субагента, перш ніж продовжиться потік очищення оголошення.
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="Manual-spawn delivery resilience">
|
||||
- OpenClaw спочатку пробує пряму доставку `agent` зі стабільним ключем ідемпотентності.
|
||||
- Якщо пряма доставка не вдається, він переходить до маршрутизації через чергу.
|
||||
- Якщо маршрутизація через чергу все ще недоступна, оголошення повторюється з коротким експоненційним backoff перед остаточною відмовою.
|
||||
- Доставка завершення зберігає розв’язаний маршрут запитувача: маршрути завершення, прив’язані до треду або розмови, мають пріоритет, коли доступні; якщо джерело завершення надає лише канал, OpenClaw заповнює відсутню ціль/обліковий запис із розв’язаного маршруту сеансу запитувача (`lastChannel` / `lastTo` / `lastAccountId`), щоб пряма доставка все одно працювала.
|
||||
- Якщо крок завершення агента-запитувача завершується помилкою, не створює видимого виводу або повертає явно неповний префікс захопленого результату дочірнього агента, OpenClaw повертається до прямої доставки завершення із захопленого результату дочірнього агента.
|
||||
- Якщо пряму доставку використати неможливо, застосовується резервна маршрутизація через чергу.
|
||||
- Якщо маршрутизація через чергу все ще недоступна, оголошення повторюється з коротким експоненційним відступом перед остаточною відмовою.
|
||||
- Доставка завершення зберігає визначений маршрут запитувача: маршрути завершення, прив’язані до треду або розмови, мають пріоритет, коли доступні; якщо джерело завершення надає лише канал, OpenClaw заповнює відсутню ціль/обліковий запис із визначеного маршруту сесії запитувача (`lastChannel` / `lastTo` / `lastAccountId`), щоб пряма доставка все одно працювала.
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="Completion handoff metadata">
|
||||
Передавання завершення до сеансу запитувача — це згенерований під час виконання
|
||||
внутрішній контекст (не текст, створений користувачем), який містить:
|
||||
Передавання завершення до сесії запитувача — це згенерований під час виконання
|
||||
внутрішній контекст (не текст, написаний користувачем), що містить:
|
||||
|
||||
- `Result` — найновіший видимий текст відповіді `assistant`, інакше очищений найновіший текст tool/toolResult. Термінально невдалі запуски не повторно використовують захоплений текст відповіді.
|
||||
- `Result` — найновіший видимий текст відповіді `assistant`, інакше санітизований найновіший текст tool/toolResult. Термінально невдалі запуски не використовують повторно захоплений текст відповіді.
|
||||
- `Status` — `completed successfully` / `failed` / `timed out` / `unknown`.
|
||||
- Компактну статистику виконання/токенів.
|
||||
- Інструкцію доставки, яка каже агенту-запитувачу переписати відповідь звичайним голосом асистента (а не пересилати сирі внутрішні метадані).
|
||||
|
||||
</Accordion>
|
||||
<Accordion title="Modes and ACP runtime">
|
||||
- `--model` і `--thinking` перевизначають стандартні значення для цього конкретного запуску.
|
||||
- Використовуйте `info`/`log`, щоб переглянути деталі та вивід після завершення.
|
||||
- `/subagents spawn` — це одноразовий режим (`mode: "run"`). Для постійних сеансів, прив’язаних до треду, використовуйте `sessions_spawn` з `thread: true` і `mode: "session"`.
|
||||
- Для сеансів ACP harness (Claude Code, Gemini CLI, OpenCode або явний Codex ACP/acpx) використовуйте `sessions_spawn` з `runtime: "acp"`, коли інструмент оголошує цю runtime. Див. [модель доставки ACP](/uk/tools/acp-agents#delivery-model) під час налагодження завершень або циклів agent-to-agent. Коли Plugin `codex` увімкнено, керування чатом/тредами Codex має віддавати перевагу `/codex ...` над ACP, якщо користувач явно не просить ACP/acpx.
|
||||
- OpenClaw приховує `runtime: "acp"`, доки ACP не увімкнено, запитувач не перебуває в пісочниці, а backend Plugin, наприклад `acpx`, не завантажено. `runtime: "acp"` очікує зовнішній id ACP harness або запис `agents.list[]` з `runtime.type="acp"`; використовуйте стандартну runtime sub-agent для звичайних агентів конфігурації OpenClaw з `agents_list`.
|
||||
- `--model` і `--thinking` перевизначають значення за замовчуванням для цього конкретного запуску.
|
||||
- Використовуйте `info`/`log`, щоб переглядати подробиці та вивід після завершення.
|
||||
- `/subagents spawn` — це одноразовий режим (`mode: "run"`). Для постійних сесій, прив’язаних до треду, використовуйте `sessions_spawn` з `thread: true` і `mode: "session"`.
|
||||
- Для сесій ACP harness (Claude Code, Gemini CLI, OpenCode або явний Codex ACP/acpx) використовуйте `sessions_spawn` з `runtime: "acp"`, коли інструмент оголошує таке середовище виконання. Див. [модель доставки ACP](/uk/tools/acp-agents#delivery-model) під час налагодження завершень або циклів агент-агент. Коли plugin `codex` увімкнено, керування чатом/тредом Codex має віддавати перевагу `/codex ...` замість ACP, якщо користувач явно не просить ACP/acpx.
|
||||
- OpenClaw приховує `runtime: "acp"`, доки ACP не увімкнено, запитувач не перебуває в пісочниці, а backend plugin, наприклад `acpx`, не завантажено. `runtime: "acp"` очікує зовнішній id ACP harness або запис `agents.list[]` з `runtime.type="acp"`; використовуйте стандартне середовище виконання субагентів для звичайних агентів конфігурації OpenClaw з `agents_list`.
|
||||
|
||||
</Accordion>
|
||||
</AccordionGroup>
|
||||
|
||||
## Режими контексту
|
||||
|
||||
Нативні sub-agents стартують ізольовано, якщо викликач явно не просить відгалузити
|
||||
Нативні субагенти стартують ізольовано, якщо викликач явно не просить відгалужити
|
||||
поточний транскрипт.
|
||||
|
||||
| Режим | Коли використовувати | Поведінка |
|
||||
| Режим | Коли його використовувати | Поведінка |
|
||||
| ---------- | -------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
|
||||
| `isolated` | Нове дослідження, незалежна реалізація, повільна інструментальна робота або будь-що, що можна коротко описати в тексті завдання | Створює чистий дочірній транскрипт. Це стандартний режим, який зменшує використання токенів. |
|
||||
| `fork` | Робота, що залежить від поточної розмови, попередніх результатів інструментів або нюансованих інструкцій, уже наявних у транскрипті запитувача | Відгалужує транскрипт запитувача в дочірній сеанс перед запуском дочірнього агента. |
|
||||
| `isolated` | Нове дослідження, незалежна реалізація, робота з повільними інструментами або будь-що, що можна коротко описати в тексті завдання | Створює чистий дочірній транскрипт. Це значення за замовчуванням і воно знижує використання токенів. |
|
||||
| `fork` | Робота, що залежить від поточної розмови, попередніх результатів інструментів або тонких інструкцій, уже наявних у транскрипті запитувача | Відгалужує транскрипт запитувача в дочірню сесію перед стартом дочірнього агента. |
|
||||
|
||||
Використовуйте `fork` помірковано. Він призначений для делегування, чутливого до контексту, а не як
|
||||
заміна чіткому промпту завдання.
|
||||
Використовуйте `fork` ощадливо. Він призначений для делегування, чутливого до контексту, а не як
|
||||
заміна написанню чіткого промпта завдання.
|
||||
|
||||
## Інструмент: `sessions_spawn`
|
||||
|
||||
Запускає sub-agent з `deliver: false` на глобальній лінії `subagent`,
|
||||
потім виконує крок оголошення та публікує відповідь оголошення в канал чату
|
||||
Запускає субагента з `deliver: false` у глобальній смузі `subagent`,
|
||||
потім виконує крок оголошення та публікує відповідь оголошення в чат-канал
|
||||
запитувача.
|
||||
|
||||
Доступність залежить від ефективної політики інструментів викликача. Профілі `coding` і
|
||||
`full` за замовчуванням відкривають `sessions_spawn`. Профіль `messaging`
|
||||
Доступність залежить від чинної політики інструментів викликача. Профілі `coding` і
|
||||
`full` відкривають `sessions_spawn` за замовчуванням. Профіль `messaging`
|
||||
не відкриває; додайте `tools.alsoAllow: ["sessions_spawn", "sessions_yield",
|
||||
"subagents"]` або використовуйте `tools.profile: "coding"` для агентів, які мають делегувати
|
||||
роботу. Політики каналу/групи, провайдера, пісочниці та allow/deny для окремого агента можуть
|
||||
усе ще прибрати інструмент після етапу профілю. Використовуйте `/tools` з того самого
|
||||
сеансу, щоб підтвердити ефективний список інструментів.
|
||||
роботу. Політики дозволу/заборони для каналу/групи, провайдера, пісочниці та окремого агента все ще можуть
|
||||
прибрати інструмент після етапу профілю. Використовуйте `/tools` з тієї самої
|
||||
сесії, щоб підтвердити чинний список інструментів.
|
||||
|
||||
**Стандартні значення:**
|
||||
**Значення за замовчуванням:**
|
||||
|
||||
- **Модель:** успадковує викликача, якщо не задано `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` (без тайм-ауту).
|
||||
|
||||
### Параметри інструмента
|
||||
|
||||
<ParamField path="task" type="string" required>
|
||||
Опис завдання для sub-agent.
|
||||
Опис завдання для субагента.
|
||||
</ParamField>
|
||||
<ParamField path="label" type="string">
|
||||
Необов’язкова людиночитна мітка.
|
||||
@ -152,37 +161,37 @@ Sub-agents — це фонові запуски агентів, породжен
|
||||
Породжувати під іншим id агента, коли це дозволено `subagents.allowAgents`.
|
||||
</ParamField>
|
||||
<ParamField path="runtime" type='"subagent" | "acp"' default="subagent">
|
||||
`acp` призначено лише для зовнішніх ACP harnesses (`claude`, `droid`, `gemini`, `opencode` або явно запитаного Codex ACP/acpx) і для записів `agents.list[]`, у яких `runtime.type` дорівнює `acp`.
|
||||
`acp` призначено лише для зовнішніх ACP harness (`claude`, `droid`, `gemini`, `opencode` або явно запитаного Codex ACP/acpx) і для записів `agents.list[]`, у яких `runtime.type` — `acp`.
|
||||
</ParamField>
|
||||
<ParamField path="resumeSessionId" type="string">
|
||||
Лише ACP. Відновлює наявний сеанс ACP harness, коли `runtime: "acp"`; ігнорується для нативних породжень sub-agent.
|
||||
Лише ACP. Відновлює наявну сесію ACP harness, коли `runtime: "acp"`; ігнорується для нативних породжень субагентів.
|
||||
</ParamField>
|
||||
<ParamField path="streamTo" type='"parent"'>
|
||||
Лише ACP. Транслює вивід запуску ACP до батьківського сеансу, коли `runtime: "acp"`; пропускайте для нативних породжень sub-agent.
|
||||
Лише ACP. Транслює вивід запуску ACP у батьківську сесію, коли `runtime: "acp"`; пропустіть для нативних породжень субагентів.
|
||||
</ParamField>
|
||||
<ParamField path="model" type="string">
|
||||
Перевизначає модель sub-agent. Некоректні значення пропускаються, а sub-agent запускається на стандартній моделі з попередженням у результаті інструмента.
|
||||
Перевизначає модель субагента. Некоректні значення пропускаються, і субагент запускається на моделі за замовчуванням із попередженням у результаті інструмента.
|
||||
</ParamField>
|
||||
<ParamField path="thinking" type="string">
|
||||
Перевизначає рівень thinking для запуску sub-agent.
|
||||
Перевизначає рівень thinking для запуску субагента.
|
||||
</ParamField>
|
||||
<ParamField path="runTimeoutSeconds" type="number">
|
||||
За замовчуванням дорівнює `agents.defaults.subagents.runTimeoutSeconds`, коли задано, інакше `0`. Коли задано, запуск sub-agent переривається після N секунд.
|
||||
За замовчуванням використовує `agents.defaults.subagents.runTimeoutSeconds`, коли задано, інакше `0`. Коли задано, запуск субагента переривається після N секунд.
|
||||
</ParamField>
|
||||
<ParamField path="thread" type="boolean" default="false">
|
||||
Коли `true`, запитує прив’язку треду каналу для цього сеансу sub-agent.
|
||||
Коли `true`, запитує прив’язку сесії цього субагента до треду каналу.
|
||||
</ParamField>
|
||||
<ParamField path="mode" type='"run" | "session"' default="run">
|
||||
Якщо `thread: true` і `mode` пропущено, стандартним стає `session`. `mode: "session"` потребує `thread: true`.
|
||||
Якщо `thread: true` і `mode` пропущено, стандартним значенням стає `session`. `mode: "session"` потребує `thread: true`.
|
||||
</ParamField>
|
||||
<ParamField path="cleanup" type='"delete" | "keep"' default="keep">
|
||||
`"delete"` архівує одразу після оголошення (транскрипт усе одно зберігається через перейменування).
|
||||
</ParamField>
|
||||
<ParamField path="sandbox" type='"inherit" | "require"' default="inherit">
|
||||
`require` відхиляє породження, якщо цільова дочірня runtime не перебуває в пісочниці.
|
||||
`require` відхиляє породження, якщо цільове дочірнє середовище виконання не перебуває в пісочниці.
|
||||
</ParamField>
|
||||
<ParamField path="context" type='"isolated" | "fork"' default="isolated">
|
||||
`fork` відгалужує поточний транскрипт запитувача в дочірній сеанс. Лише нативні sub-agents. Породження, прив’язані до треду, за замовчуванням використовують `fork`; породження без треду — `isolated`.
|
||||
`fork` відгалужує поточний транскрипт запитувача в дочірню сесію. Лише нативні субагенти. Породження, прив’язані до треду, за замовчуванням використовують `fork`; породження без треду за замовчуванням використовують `isolated`.
|
||||
</ParamField>
|
||||
|
||||
<Warning>
|
||||
@ -191,17 +200,17 @@ Sub-agents — це фонові запуски агентів, породжен
|
||||
`message`/`sessions_send` із породженого запуску.
|
||||
</Warning>
|
||||
|
||||
## Сеанси, прив’язані до треду
|
||||
## Сесії, прив’язані до треду
|
||||
|
||||
Коли для каналу ввімкнено прив’язки до тредів, sub-agent може залишатися прив’язаним
|
||||
до треду, щоб подальші повідомлення користувача в цьому треді й надалі маршрутизувалися до
|
||||
того самого сеансу sub-agent.
|
||||
Коли прив’язки до тредів увімкнені для каналу, субагент може залишатися прив’язаним
|
||||
до треду, щоб подальші повідомлення користувача в цьому треді продовжували маршрутизуватися до тієї самої
|
||||
сесії субагента.
|
||||
|
||||
### Канали з підтримкою тредів
|
||||
|
||||
**Discord** наразі є єдиним підтримуваним каналом. Він підтримує
|
||||
постійні сеанси subagent, прив’язані до тредів (`sessions_spawn` з
|
||||
`thread: true`), ручне керування тредами (`/focus`, `/unfocus`, `/agents`,
|
||||
постійні сесії субагентів, прив’язані до треду (`sessions_spawn` з
|
||||
`thread: true`), ручні елементи керування тредами (`/focus`, `/unfocus`, `/agents`,
|
||||
`/session idle`, `/session max-age`) і ключі адаптера
|
||||
`channels.discord.threadBindings.enabled`,
|
||||
`channels.discord.threadBindings.idleHours`,
|
||||
@ -211,80 +220,80 @@ Sub-agents — це фонові запуски агентів, породжен
|
||||
### Швидкий потік
|
||||
|
||||
<Steps>
|
||||
<Step title="Spawn">
|
||||
`sessions_spawn` з `thread: true` (і необов’язково `mode: "session"`).
|
||||
<Step title="Створення">
|
||||
`sessions_spawn` з `thread: true` (і, за бажанням, `mode: "session"`).
|
||||
</Step>
|
||||
<Step title="Bind">
|
||||
OpenClaw створює або прив’язує тред до цільового сеансу в активному каналі.
|
||||
<Step title="Прив’язування">
|
||||
OpenClaw створює або прив’язує тред до цієї цільової сесії в активному каналі.
|
||||
</Step>
|
||||
<Step title="Route follow-ups">
|
||||
Відповіді та подальші повідомлення в цьому треді маршрутизуються до прив’язаного сеансу.
|
||||
<Step title="Маршрутизація подальших повідомлень">
|
||||
Відповіді та подальші повідомлення в цьому треді спрямовуються до прив’язаної сесії.
|
||||
</Step>
|
||||
<Step title="Inspect timeouts">
|
||||
Використовуйте `/session idle`, щоб переглянути/оновити автоматичне скасування фокуса через неактивність, і
|
||||
`/session max-age`, щоб керувати жорстким лімітом.
|
||||
<Step title="Перегляд тайм-аутів">
|
||||
Використовуйте `/session idle`, щоб переглянути/оновити автоматичне зняття фокуса після неактивності, і
|
||||
`/session max-age`, щоб керувати жорстким обмеженням.
|
||||
</Step>
|
||||
<Step title="Detach">
|
||||
<Step title="Від’єднання">
|
||||
Використовуйте `/unfocus`, щоб від’єднати вручну.
|
||||
</Step>
|
||||
</Steps>
|
||||
|
||||
### Ручне керування
|
||||
|
||||
| Команда | Дія |
|
||||
| Команда | Ефект |
|
||||
| ------------------ | --------------------------------------------------------------------- |
|
||||
| `/focus <target>` | Прив’язати поточний потік (або створити його) до цілі під-агента/сеансу |
|
||||
| `/unfocus` | Видалити прив’язку для поточного прив’язаного потоку |
|
||||
| `/agents` | Перелічити активні запуски та стан прив’язки (`thread:<id>` або `unbound`) |
|
||||
| `/session idle` | Переглянути/оновити автоматичне зняття фокуса через бездіяльність (лише сфокусовані прив’язані потоки) |
|
||||
| `/session max-age` | Переглянути/оновити жорстке обмеження часу (лише сфокусовані прив’язані потоки) |
|
||||
| `/focus <target>` | Прив’язати поточний тред (або створити його) до цільового субагента/сесії |
|
||||
| `/unfocus` | Видалити прив’язку для поточного прив’язаного треду |
|
||||
| `/agents` | Показати активні запуски та стан прив’язки (`thread:<id>` або `unbound`) |
|
||||
| `/session idle` | Переглянути/оновити автоматичне зняття фокуса через бездіяльність (лише прив’язані треди у фокусі) |
|
||||
| `/session max-age` | Переглянути/оновити жорстке обмеження (лише прив’язані треди у фокусі) |
|
||||
|
||||
### Перемикачі конфігурації
|
||||
|
||||
- **Глобальне значення за замовчуванням:** `session.threadBindings.enabled`, `session.threadBindings.idleHours`, `session.threadBindings.maxAgeHours`.
|
||||
- **Перевизначення каналу та ключі автоматичної прив’язки під час створення** залежать від адаптера. Див. [Канали з підтримкою потоків](#thread-supporting-channels) вище.
|
||||
- **Перевизначення каналу та ключі автоматичного прив’язування під час створення** залежать від адаптера. Див. [Канали з підтримкою тредів](#thread-supporting-channels) вище.
|
||||
|
||||
Див. [Довідник конфігурації](/uk/gateway/configuration-reference) і
|
||||
[Slash-команди](/uk/tools/slash-commands) для поточних деталей адаптерів.
|
||||
[Slash-команди](/uk/tools/slash-commands), щоб дізнатися поточні відомості про адаптери.
|
||||
|
||||
### Список дозволених
|
||||
|
||||
<ParamField path="agents.list[].subagents.allowAgents" type="string[]">
|
||||
Список ідентифікаторів агентів, на які можна націлюватися через явний `agentId` (`["*"]` дозволяє будь-який). За замовчуванням: лише агент-запитувач. Якщо ви задаєте список і все одно хочете, щоб запитувач міг створювати самого себе з `agentId`, додайте ідентифікатор запитувача до списку.
|
||||
Список ідентифікаторів агентів, на які можна націлюватися через явний `agentId` (`["*"]` дозволяє будь-який). За замовчуванням: лише агент-запитувач. Якщо ви задаєте список і все одно хочете, щоб запитувач міг створювати себе через `agentId`, додайте ідентифікатор запитувача до списку.
|
||||
</ParamField>
|
||||
<ParamField path="agents.defaults.subagents.allowAgents" type="string[]">
|
||||
Типовий список дозволених цільових агентів, який використовується, коли агент-запитувач не задає власний `subagents.allowAgents`.
|
||||
Стандартний список дозволених цільових агентів, який використовується, коли агент-запитувач не задає власний `subagents.allowAgents`.
|
||||
</ParamField>
|
||||
<ParamField path="agents.defaults.subagents.requireAgentId" type="boolean" default="false">
|
||||
Блокувати виклики `sessions_spawn`, які пропускають `agentId` (примушує явно вибирати профіль). Перевизначення для окремого агента: `agents.list[].subagents.requireAgentId`.
|
||||
Блокувати виклики `sessions_spawn`, які не вказують `agentId` (примушує до явного вибору профілю). Перевизначення для окремого агента: `agents.list[].subagents.requireAgentId`.
|
||||
</ParamField>
|
||||
|
||||
Якщо сеанс запитувача працює в пісочниці, `sessions_spawn` відхиляє цілі,
|
||||
які запускалися б без пісочниці.
|
||||
Якщо сесія запитувача ізольована в sandbox, `sessions_spawn` відхиляє цілі,
|
||||
які запускалися б без sandbox.
|
||||
|
||||
### Виявлення
|
||||
|
||||
Використовуйте `agents_list`, щоб побачити, які ідентифікатори агентів наразі дозволені для
|
||||
`sessions_spawn`. Відповідь містить ефективну модель кожного переліченого агента
|
||||
та вбудовані метадані середовища виконання, щоб виклики могли відрізняти PI, сервер застосунку Codex
|
||||
`sessions_spawn`. Відповідь містить ефективну
|
||||
модель кожного переліченого агента та вбудовані метадані середовища виконання, щоб виклики могли відрізняти PI, сервер застосунку Codex
|
||||
та інші налаштовані нативні середовища виконання.
|
||||
|
||||
### Автоархівація
|
||||
### Автоматичне архівування
|
||||
|
||||
- Сеанси під-агентів автоматично архівуються після `agents.defaults.subagents.archiveAfterMinutes` (за замовчуванням `60`).
|
||||
- Архівація використовує `sessions.delete` і перейменовує транскрипт на `*.deleted.<timestamp>` (у тій самій папці).
|
||||
- Сесії субагентів автоматично архівуються після `agents.defaults.subagents.archiveAfterMinutes` (за замовчуванням `60`).
|
||||
- Архівування використовує `sessions.delete` і перейменовує транскрипт на `*.deleted.<timestamp>` (у тій самій папці).
|
||||
- `cleanup: "delete"` архівує одразу після оголошення (транскрипт усе одно зберігається через перейменування).
|
||||
- Автоархівація виконується за принципом найкращого зусилля; очікувані таймери втрачаються, якщо Gateway перезапускається.
|
||||
- `runTimeoutSeconds` **не** виконує автоархівацію; він лише зупиняє запуск. Сеанс залишається до автоархівації.
|
||||
- Автоархівація однаково застосовується до сеансів глибини 1 і глибини 2.
|
||||
- Очищення браузера відокремлене від очищення архіву: відстежувані вкладки/процеси браузера закриваються за принципом найкращого зусилля після завершення запуску, навіть якщо транскрипт/запис сеансу зберігається.
|
||||
- Автоматичне архівування виконується за принципом найкращої спроби; очікувані таймери втрачаються, якщо gateway перезапускається.
|
||||
- `runTimeoutSeconds` **не** виконує автоматичне архівування; він лише зупиняє запуск. Сесія залишається до автоматичного архівування.
|
||||
- Автоматичне архівування однаково застосовується до сесій глибини 1 і глибини 2.
|
||||
- Очищення браузера окреме від очищення архіву: відстежувані вкладки/процеси браузера закриваються за принципом найкращої спроби після завершення запуску, навіть якщо запис транскрипта/сесії зберігається.
|
||||
|
||||
## Вкладені під-агенти
|
||||
## Вкладені субагенти
|
||||
|
||||
За замовчуванням під-агенти не можуть створювати власних під-агентів
|
||||
(`maxSpawnDepth: 1`). Задайте `maxSpawnDepth: 2`, щоб увімкнути один рівень
|
||||
вкладеності — **шаблон оркестратора**: основний → під-агент-оркестратор →
|
||||
робочі під-під-агенти.
|
||||
За замовчуванням субагенти не можуть створювати власних субагентів
|
||||
(`maxSpawnDepth: 1`). Установіть `maxSpawnDepth: 2`, щоб увімкнути один рівень
|
||||
вкладеності — **патерн оркестратора**: головний → субагент-оркестратор →
|
||||
робочі субсубагенти.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -303,153 +312,153 @@ Sub-agents — це фонові запуски агентів, породжен
|
||||
|
||||
### Рівні глибини
|
||||
|
||||
| Глибина | Форма ключа сеансу | Роль | Може створювати? |
|
||||
| Глибина | Форма ключа сесії | Роль | Може створювати? |
|
||||
| ----- | -------------------------------------------- | --------------------------------------------- | ---------------------------- |
|
||||
| 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>` | Субагент (оркестратор, коли дозволена глибина 2) | Лише якщо `maxSpawnDepth >= 2` |
|
||||
| 2 | `agent:<id>:subagent:<uuid>:subagent:<uuid>` | Субсубагент (кінцевий виконавець) | Ніколи |
|
||||
|
||||
### Ланцюг оголошень
|
||||
### Ланцюжок оголошень
|
||||
|
||||
Результати передаються назад угору ланцюгом:
|
||||
Результати передаються вгору ланцюжком:
|
||||
|
||||
1. Робітник глибини 2 завершується → оголошує своєму батьківському сеансу (оркестратору глибини 1).
|
||||
2. Оркестратор глибини 1 отримує оголошення, синтезує результати, завершується → оголошує основному.
|
||||
3. Основний агент отримує оголошення та доставляє його користувачу.
|
||||
1. Виконавець глибини 2 завершує роботу → оголошує своєму батьківському елементу (оркестратору глибини 1).
|
||||
2. Оркестратор глибини 1 отримує оголошення, синтезує результати, завершує роботу → оголошує головному агенту.
|
||||
3. Головний агент отримує оголошення й доставляє його користувачу.
|
||||
|
||||
Кожен рівень бачить лише оголошення від своїх безпосередніх дочірніх сеансів.
|
||||
Кожен рівень бачить лише оголошення від своїх безпосередніх дочірніх елементів.
|
||||
|
||||
<Note>
|
||||
**Операційні настанови:** запускайте дочірню роботу один раз і чекайте подій
|
||||
завершення замість побудови циклів опитування навколо `sessions_list`,
|
||||
`sessions_history`, `/subagents list` або команд `exec` зі сном.
|
||||
`sessions_list` і `/subagents list` утримують зв’язки дочірніх сеансів
|
||||
зосередженими на живій роботі — живі дочірні сеанси залишаються прикріпленими, завершені дочірні сеанси
|
||||
залишаються видимими протягом короткого недавнього вікна, а застарілі посилання лише зі сховища
|
||||
ігноруються після завершення їхнього вікна свіжості. Це запобігає тому, щоб старі метадані `spawnedBy` /
|
||||
`parentSessionKey` воскресали примарні дочірні сеанси після
|
||||
перезапуску. Якщо подія завершення дочірнього сеансу надходить після того, як ви вже надіслали
|
||||
фінальну відповідь, правильне подальше повідомлення — точний мовчазний токен
|
||||
**Операційні рекомендації:** запускайте дочірню роботу один раз і чекайте подій
|
||||
завершення, а не будуйте цикли опитування навколо `sessions_list`,
|
||||
`sessions_history`, `/subagents list` або команд `exec` sleep.
|
||||
`sessions_list` і `/subagents list` утримують зв’язки дочірніх сесій
|
||||
сфокусованими на живій роботі — активні дочірні елементи залишаються приєднаними, завершені дочірні елементи залишаються
|
||||
видимими протягом короткого останнього вікна, а застарілі посилання лише зі сховища на дочірні елементи
|
||||
ігноруються після завершення їхнього вікна актуальності. Це запобігає відновленню старих метаданих `spawnedBy` /
|
||||
`parentSessionKey` як фантомних дочірніх елементів після
|
||||
перезапуску. Якщо подія завершення дочірнього елемента надходить після того, як ви вже надіслали
|
||||
остаточну відповідь, правильна подальша відповідь — точний мовчазний токен
|
||||
`NO_REPLY` / `no_reply`.
|
||||
</Note>
|
||||
|
||||
### Політика інструментів за глибиною
|
||||
|
||||
- Роль і область керування записуються в метадані сеансу під час створення. Це не дає плоским або відновленим ключам сеансів випадково знову отримати привілеї оркестратора.
|
||||
- **Глибина 1 (оркестратор, коли `maxSpawnDepth >= 2`):** отримує `sessions_spawn`, `subagents`, `sessions_list`, `sessions_history`, щоб керувати своїми дочірніми сеансами. Інші інструменти сеансу/системи залишаються забороненими.
|
||||
- **Глибина 1 (лист, коли `maxSpawnDepth == 1`):** без інструментів сеансу (поточна типова поведінка).
|
||||
- **Глибина 2 (листовий робітник):** без інструментів сеансу — `sessions_spawn` завжди заборонено на глибині 2. Не може створювати подальших дочірніх сеансів.
|
||||
- Роль і область керування записуються в метадані сесії під час створення. Це не дає плоским або відновленим ключам сесій випадково знову отримати привілеї оркестратора.
|
||||
- **Глибина 1 (оркестратор, коли `maxSpawnDepth >= 2`):** отримує `sessions_spawn`, `subagents`, `sessions_list`, `sessions_history`, щоб керувати своїми дочірніми елементами. Інші інструменти сесії/системи залишаються забороненими.
|
||||
- **Глибина 1 (кінцевий елемент, коли `maxSpawnDepth == 1`):** без інструментів сесії (поточна поведінка за замовчуванням).
|
||||
- **Глибина 2 (кінцевий виконавець):** без інструментів сесії — `sessions_spawn` завжди заборонено на глибині 2. Не може створювати подальших дочірніх елементів.
|
||||
|
||||
### Ліміт створення для окремого агента
|
||||
|
||||
Кожен сеанс агента (на будь-якій глибині) може мати не більше `maxChildrenPerAgent`
|
||||
(за замовчуванням `5`) активних дочірніх сеансів одночасно. Це запобігає неконтрольованому розгортанню
|
||||
Кожна сесія агента (на будь-якій глибині) може мати щонайбільше `maxChildrenPerAgent`
|
||||
(за замовчуванням `5`) активних дочірніх елементів одночасно. Це запобігає неконтрольованому розгалуженню
|
||||
від одного оркестратора.
|
||||
|
||||
### Каскадна зупинка
|
||||
|
||||
Зупинка оркестратора глибини 1 автоматично зупиняє всі його дочірні сеанси глибини 2:
|
||||
Зупинка оркестратора глибини 1 автоматично зупиняє всі його дочірні елементи глибини 2:
|
||||
|
||||
- `/stop` в основному чаті зупиняє всіх агентів глибини 1 і каскадно зупиняє їхні дочірні сеанси глибини 2.
|
||||
- `/subagents kill <id>` зупиняє конкретного під-агента і каскадно зупиняє його дочірні сеанси.
|
||||
- `/subagents kill all` зупиняє всіх під-агентів для запитувача і виконує каскадну зупинку.
|
||||
- `/stop` у головному чаті зупиняє всіх агентів глибини 1 і каскадно зупиняє їхні дочірні елементи глибини 2.
|
||||
- `/subagents kill <id>` зупиняє конкретного субагента та каскадно зупиняє його дочірні елементи.
|
||||
- `/subagents kill all` зупиняє всіх субагентів для запитувача та виконує каскадну зупинку.
|
||||
|
||||
## Автентифікація
|
||||
|
||||
Автентифікація під-агента визначається за **ідентифікатором агента**, а не за типом сеансу:
|
||||
Автентифікація субагента визначається за **ідентифікатором агента**, а не за типом сесії:
|
||||
|
||||
- Ключ сеансу під-агента: `agent:<agentId>:subagent:<uuid>`.
|
||||
- Ключ сесії субагента має вигляд `agent:<agentId>:subagent:<uuid>`.
|
||||
- Сховище автентифікації завантажується з `agentDir` цього агента.
|
||||
- Профілі автентифікації основного агента об’єднуються як **резервний варіант**; профілі агента перевизначають основні профілі у разі конфліктів.
|
||||
- Профілі автентифікації головного агента об’єднуються як **резервні**; профілі агента перевизначають головні профілі в разі конфліктів.
|
||||
|
||||
Об’єднання є додавальним, тому основні профілі завжди доступні як
|
||||
резервні. Повністю ізольована автентифікація для кожного агента ще не підтримується.
|
||||
Об’єднання є додатковим, тому головні профілі завжди доступні як
|
||||
резервні. Повністю ізольована автентифікація для кожного агента поки не підтримується.
|
||||
|
||||
## Оголошення
|
||||
|
||||
Під-агенти звітують назад через крок оголошення:
|
||||
Субагенти звітують назад через крок оголошення:
|
||||
|
||||
- Крок оголошення виконується всередині сеансу під-агента (не сеансу запитувача).
|
||||
- Якщо під-агент відповідає точно `ANNOUNCE_SKIP`, нічого не публікується.
|
||||
- Крок оголошення виконується всередині сесії субагента (не сесії запитувача).
|
||||
- Якщо субагент відповідає точно `ANNOUNCE_SKIP`, нічого не публікується.
|
||||
- Якщо останній текст асистента є точним мовчазним токеном `NO_REPLY` / `no_reply`, вивід оголошення пригнічується, навіть якщо раніше був видимий прогрес.
|
||||
|
||||
Доставка залежить від глибини запитувача:
|
||||
|
||||
- Сеанси запитувача верхнього рівня використовують подальший виклик `agent` із зовнішньою доставкою (`deliver=true`).
|
||||
- Вкладені сеанси під-агента-запитувача отримують внутрішнє подальше вставлення (`deliver=false`), щоб оркестратор міг синтезувати результати дочірніх сеансів у межах сеансу.
|
||||
- Якщо вкладений сеанс під-агента-запитувача зник, OpenClaw повертається до запитувача цього сеансу, коли він доступний.
|
||||
- Сесії запитувача верхнього рівня використовують подальший виклик `agent` із зовнішньою доставкою (`deliver=true`).
|
||||
- Вкладені сесії субагентів-запитувачів отримують внутрішнє впровадження подальшого повідомлення (`deliver=false`), щоб оркестратор міг синтезувати дочірні результати в межах сесії.
|
||||
- Якщо вкладена сесія субагента-запитувача зникла, OpenClaw повертається до запитувача цієї сесії, коли він доступний.
|
||||
|
||||
Для сеансів запитувача верхнього рівня пряма доставка в режимі завершення спочатку
|
||||
розв’язує будь-який маршрут прив’язаної розмови/потоку та перевизначення hook, а потім заповнює
|
||||
відсутні поля цілі каналу зі збереженого маршруту сеансу запитувача.
|
||||
Це утримує завершення у правильному чаті/темі, навіть коли джерело завершення
|
||||
Для сесій запитувача верхнього рівня пряма доставка в режимі завершення спочатку
|
||||
визначає будь-який прив’язаний маршрут розмови/треду та перевизначення hook, а потім заповнює
|
||||
відсутні поля цілі каналу зі збереженого маршруту сесії запитувача.
|
||||
Це утримує завершення в правильному чаті/темі, навіть коли джерело завершення
|
||||
ідентифікує лише канал.
|
||||
|
||||
Агрегація завершення дочірніх сеансів обмежена поточним запуском запитувача під час
|
||||
побудови вкладених результатів завершення, запобігаючи просочуванню виводів дочірніх сеансів
|
||||
із попередніх застарілих запусків у поточне оголошення. Відповіді оголошення зберігають
|
||||
маршрутизацію потоку/теми, коли вона доступна в адаптерах каналів.
|
||||
Агрегація завершень дочірніх елементів обмежується поточним запуском запитувача під час
|
||||
побудови вкладених знахідок завершення, запобігаючи потраплянню застарілих вихідних даних дочірніх елементів із попередніх запусків
|
||||
у поточне оголошення. Відповіді оголошень зберігають
|
||||
маршрутизацію треду/теми, коли вона доступна в адаптерах каналів.
|
||||
|
||||
### Контекст оголошення
|
||||
|
||||
Контекст оголошення нормалізується до стабільного внутрішнього блока події:
|
||||
Контекст оголошення нормалізується до стабільного внутрішнього блоку події:
|
||||
|
||||
| Поле | Джерело |
|
||||
| Поле | Джерело |
|
||||
| -------------- | ------------------------------------------------------------------------------------------------------------- |
|
||||
| Джерело | `subagent` або `cron` |
|
||||
| Ідентифікатори сеансу | Ключ/ідентифікатор дочірнього сеансу |
|
||||
| Тип | Тип оголошення + мітка завдання |
|
||||
| Стан | Виведено з результату середовища виконання (`success`, `error`, `timeout` або `unknown`) — **не** виводиться з тексту моделі |
|
||||
| Вміст результату | Останній видимий текст асистента, інакше очищений останній текст інструмента/toolResult |
|
||||
| Подальша дія | Інструкція, що описує, коли відповідати, а коли залишатися мовчазним |
|
||||
| Джерело | `subagent` або `cron` |
|
||||
| Ідентифікатори сесій | Ключ/ідентифікатор дочірньої сесії |
|
||||
| Тип | Тип оголошення + мітка завдання |
|
||||
| Статус | Виведено з результату виконання (`success`, `error`, `timeout` або `unknown`) — **не** виводиться з тексту моделі |
|
||||
| Вміст результату | Останній видимий текст асистента, інакше очищений останній текст tool/toolResult |
|
||||
| Подальша дія | Інструкція, що описує, коли відповідати, а коли мовчати |
|
||||
|
||||
Термінальні невдалі запуски повідомляють стан помилки без повторного відтворення захопленого
|
||||
тексту відповіді. У разі тайм-ауту, якщо дочірній сеанс встиг лише виконати виклики інструментів, оголошення
|
||||
Кінцеві невдалі запуски повідомляють статус помилки без повторного відтворення захопленого
|
||||
тексту відповіді. У разі тайм-ауту, якщо дочірній елемент дійшов лише до викликів інструментів, оголошення
|
||||
може згорнути цю історію в короткий підсумок часткового прогресу замість
|
||||
відтворення сирого виводу інструментів.
|
||||
повторного відтворення сирого виводу інструментів.
|
||||
|
||||
### Рядок статистики
|
||||
|
||||
Корисні навантаження оголошень містять рядок статистики в кінці (навіть коли загорнуті):
|
||||
Payload оголошення містить рядок статистики наприкінці (навіть коли обгорнутий):
|
||||
|
||||
- Час виконання (наприклад, `runtime 5m12s`).
|
||||
- Використання токенів (вхідні/вихідні/усього).
|
||||
- Орієнтовна вартість, коли налаштовано ціни моделей (`models.providers.*.models[].cost`).
|
||||
- `sessionKey`, `sessionId` і шлях транскрипту, щоб основний агент міг отримати історію через `sessions_history` або переглянути файл на диску.
|
||||
- Використання токенів (вхідні/вихідні/загалом).
|
||||
- Орієнтовна вартість, коли налаштовано ціни моделі (`models.providers.*.models[].cost`).
|
||||
- `sessionKey`, `sessionId` і шлях транскрипта, щоб головний агент міг отримати історію через `sessions_history` або переглянути файл на диску.
|
||||
|
||||
Внутрішні метадані призначені лише для оркестрації; відповіді для користувача
|
||||
Внутрішні метадані призначені лише для оркестрації; відповіді для користувачів
|
||||
слід переписувати звичайним голосом асистента.
|
||||
|
||||
### Чому варто надавати перевагу `sessions_history`
|
||||
### Чому варто віддавати перевагу `sessions_history`
|
||||
|
||||
`sessions_history` — безпечніший шлях оркестрації:
|
||||
`sessions_history` є безпечнішим шляхом оркестрації:
|
||||
|
||||
- Спогади асистента спочатку нормалізуються: теги мислення видаляються; каркас `<relevant-memories>` / `<relevant_memories>` видаляється; XML-блоки корисного навантаження викликів інструментів у plain-text (`<tool_call>`, `<function_call>`, `<tool_calls>`, `<function_calls>`) видаляються, включно з обрізаними корисними навантаженнями, які ніколи коректно не закриваються; знижений каркас викликів/результатів інструментів і маркери історичного контексту видаляються; витеклі керівні токени моделі (`<|assistant|>`, інші ASCII `<|...|>`, повноширинні `<|...|>`) видаляються; некоректний XML викликів інструментів MiniMax видаляється.
|
||||
- Спершу нормалізується згадування асистента: теги мислення видаляються; каркас `<relevant-memories>` / `<relevant_memories>` видаляється; простотекстові XML-блоки payload викликів інструментів (`<tool_call>`, `<function_call>`, `<tool_calls>`, `<function_calls>`) видаляються, включно з обрізаними payload, які ніколи коректно не закриваються; понижений каркас виклику/результату інструмента та маркери історичного контексту видаляються; витеклі токени керування моделі (`<|assistant|>`, інші ASCII `<|...|>`, повноширинні `<|...|>`) видаляються; некоректний XML викликів інструментів MiniMax видаляється.
|
||||
- Текст, схожий на облікові дані/токени, редагується.
|
||||
- Довгі блоки можуть обрізатися.
|
||||
- Дуже великі історії можуть відкидати старіші рядки або замінювати надмірно великий рядок на `[sessions_history omitted: message too large]`.
|
||||
- Перегляд сирого транскрипту на диску є резервним варіантом, коли потрібен повний побайтово точний транскрипт.
|
||||
- Перегляд сирого транскрипта на диску є резервним варіантом, коли потрібен повний побайтово точний транскрипт.
|
||||
|
||||
## Політика інструментів
|
||||
|
||||
Під-агенти спочатку використовують той самий профіль і конвеєр політики інструментів, що й батьківський
|
||||
або цільовий агент. Після цього OpenClaw застосовує шар обмежень
|
||||
під-агента.
|
||||
Субагенти спершу використовують той самий профіль і конвеєр політик інструментів, що й батьківський або
|
||||
цільовий агент. Після цього OpenClaw застосовує шар обмежень
|
||||
для субагентів.
|
||||
|
||||
Без обмежувального `tools.profile` під-агенти отримують **усі інструменти, крім
|
||||
інструментів сеансу** та системних інструментів:
|
||||
Без обмежувального `tools.profile` субагенти отримують **усі інструменти, крім
|
||||
інструментів сесії** та системних інструментів:
|
||||
|
||||
- `sessions_list`
|
||||
- `sessions_history`
|
||||
- `sessions_send`
|
||||
- `sessions_spawn`
|
||||
|
||||
`sessions_history` тут також залишається обмеженим, очищеним поданням пригадування — це
|
||||
не сирий дамп транскрипту.
|
||||
`sessions_history` і тут залишається обмеженим, очищеним поданням пригадування —
|
||||
це не необроблений дамп транскрипту.
|
||||
|
||||
Коли `maxSpawnDepth >= 2`, під-агенти-оркестратори глибини 1 додатково
|
||||
Коли `maxSpawnDepth >= 2`, субагенти-оркестратори глибини 1 додатково
|
||||
отримують `sessions_spawn`, `subagents`, `sessions_list` і
|
||||
`sessions_history`, щоб керувати своїми дочірніми сеансами.
|
||||
`sessions_history`, щоб вони могли керувати своїми дочірніми агентами.
|
||||
|
||||
### Перевизначення через конфігурацію
|
||||
|
||||
@ -475,11 +484,11 @@ Sub-agents — це фонові запуски агентів, породжен
|
||||
}
|
||||
```
|
||||
|
||||
`tools.subagents.tools.allow` — це фінальний фільтр лише для дозволеного. Він може звузити
|
||||
вже визначений набір інструментів, але не може **повернути** інструмент, вилучений
|
||||
`tools.subagents.tools.allow` є остаточним фільтром лише дозволених інструментів. Він може звузити
|
||||
вже визначений набір інструментів, але не може **додати назад** інструмент, вилучений
|
||||
через `tools.profile`. Наприклад, `tools.profile: "coding"` включає
|
||||
`web_search`/`web_fetch`, але не інструмент `browser`. Щоб дозволити
|
||||
субагентам із coding-профілем використовувати автоматизацію браузера, додайте browser на
|
||||
субагентам із профілем coding використовувати автоматизацію браузера, додайте browser на
|
||||
етапі профілю:
|
||||
|
||||
```json5
|
||||
@ -494,62 +503,62 @@ Sub-agents — це фонові запуски агентів, породжен
|
||||
Використовуйте `agents.list[].tools.alsoAllow: ["browser"]` для окремого агента, коли лише один
|
||||
агент має отримати автоматизацію браузера.
|
||||
|
||||
## Паралельність
|
||||
## Конкурентність
|
||||
|
||||
Субагенти використовують окрему внутрішньопроцесну чергу:
|
||||
Субагенти використовують виділену чергу в межах процесу:
|
||||
|
||||
- **Назва черги:** `subagent`
|
||||
- **Паралельність:** `agents.defaults.subagents.maxConcurrent` (за замовчуванням `8`)
|
||||
- **Назва лінії:** `subagent`
|
||||
- **Конкурентність:** `agents.defaults.subagents.maxConcurrent` (типово `8`)
|
||||
|
||||
## Живучість і відновлення
|
||||
## Активність і відновлення
|
||||
|
||||
OpenClaw не вважає відсутність `endedAt` постійним доказом того, що
|
||||
субагент досі активний. Незавершені запуски, старші за вікно застарілого запуску,
|
||||
перестають враховуватися як активні/очікувані в `/subagents list`, зведеннях статусу,
|
||||
блокуванні завершення нащадків і перевірках паралельності для сесії.
|
||||
субагент досі активний. Незавершені запуски, старші за вікно застарілих запусків,
|
||||
перестають рахуватися як активні/очікувані в `/subagents list`, зведеннях стану,
|
||||
блокуванні завершення нащадків і перевірках конкурентності для кожної сесії.
|
||||
|
||||
Після перезапуску Gateway застарілі незавершені відновлені запуски видаляються, якщо
|
||||
Після перезапуску gateway застарілі незавершені відновлені запуски вилучаються, якщо
|
||||
їхня дочірня сесія не позначена як `abortedLastRun: true`. Такі
|
||||
дочірні сесії, перервані перезапуском, лишаються придатними до відновлення через потік
|
||||
відновлення осиротілих субагентів, який надсилає синтетичне повідомлення відновлення перед
|
||||
перервані під час перезапуску дочірні сесії залишаються відновлюваними через потік
|
||||
відновлення осиротілих субагентів, який надсилає синтетичне повідомлення для відновлення перед
|
||||
очищенням маркера переривання.
|
||||
|
||||
Автоматичне відновлення після перезапуску обмежене для кожної дочірньої сесії. Якщо той самий
|
||||
дочірній субагент неодноразово приймається для відновлення осиротілої сесії в межах
|
||||
швидкого вікна повторного зависання, OpenClaw зберігає tombstone відновлення для цієї
|
||||
сесії та припиняє автоматично відновлювати її під час наступних перезапусків. Виконайте
|
||||
дочірній субагент неодноразово приймається для відновлення сироти в межах
|
||||
вікна швидкого повторного зависання, OpenClaw зберігає recovery tombstone у цій
|
||||
сесії та припиняє автоматично відновлювати її під час подальших перезапусків. Запустіть
|
||||
`openclaw tasks maintenance --apply`, щоб узгодити запис завдання, або
|
||||
`openclaw doctor --fix`, щоб очистити застарілі прапорці перерваного відновлення в
|
||||
сесіях із tombstone.
|
||||
tombstoned-сесіях.
|
||||
|
||||
<Note>
|
||||
Якщо створення субагента завершується помилкою Gateway `PAIRING_REQUIRED` /
|
||||
`scope-upgrade`, перевірте викликача RPC перед редагуванням стану сполучення.
|
||||
`scope-upgrade`, перевірте викликача RPC, перш ніж змінювати стан спарювання.
|
||||
Внутрішня координація `sessions_spawn` має підключатися як
|
||||
`client.id: "gateway-client"` із `client.mode: "backend"` через пряму
|
||||
автентифікацію спільним токеном/паролем через loopback; цей шлях не залежить від
|
||||
базового рівня області дії сполученого пристрою CLI. Віддаленим викликачам, явним
|
||||
`deviceIdentity`, явним шляхам device-token і клієнтам browser/node
|
||||
усе ще потрібне звичайне схвалення пристрою для підвищення області дії.
|
||||
`client.id: "gateway-client"` з `client.mode: "backend"` через прямий
|
||||
loopback із автентифікацією спільним токеном/паролем; цей шлях не залежить від
|
||||
базової області спареного пристрою CLI. Віддалені викликачі, явні
|
||||
`deviceIdentity`, явні шляхи device-token і клієнти browser/node
|
||||
все ще потребують звичайного схвалення пристрою для підвищення scope.
|
||||
</Note>
|
||||
|
||||
## Зупинка
|
||||
|
||||
- Надсилання `/stop` у чаті запитувача перериває сесію запитувача та зупиняє всі активні запуски субагентів, створені з неї, каскадно поширюючись на вкладених нащадків.
|
||||
- `/subagents kill <id>` зупиняє конкретного субагента та каскадно поширюється на його нащадків.
|
||||
- Надсилання `/stop` у чаті запитувача перериває сесію запитувача й зупиняє всі активні запуски субагентів, створені з неї, каскадно поширюючись на вкладених дочірніх агентів.
|
||||
- `/subagents kill <id>` зупиняє конкретного субагента й каскадно поширюється на його дочірніх агентів.
|
||||
|
||||
## Обмеження
|
||||
|
||||
- Оголошення субагента виконується **за найкращих зусиль**. Якщо gateway перезапускається, очікувана робота "announce back" втрачається.
|
||||
- Оголошення субагента виконується **за принципом найкращої спроби**. Якщо gateway перезапускається, відкладена робота "announce back" втрачається.
|
||||
- Субагенти все ще спільно використовують ресурси того самого процесу 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`).
|
||||
- Контекст субагента додає лише `AGENTS.md` + `TOOLS.md` (без `SOUL.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md` або `BOOTSTRAP.md`).
|
||||
- Максимальна глибина вкладення становить 5 (діапазон `maxSpawnDepth`: 1–5). Глибину 2 рекомендовано для більшості випадків використання.
|
||||
- `maxChildrenPerAgent` обмежує кількість активних дочірніх агентів на сесію (типово `5`, діапазон `1–20`).
|
||||
|
||||
## Пов’язане
|
||||
|
||||
- [Агенти ACP](/uk/tools/acp-agents)
|
||||
- [агенти ACP](/uk/tools/acp-agents)
|
||||
- [Надсилання агенту](/uk/tools/agent-send)
|
||||
- [Фонові завдання](/uk/automation/tasks)
|
||||
- [Інструменти пісочниці для кількох агентів](/uk/tools/multi-agent-sandbox-tools)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user