chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-25 03:28:05 +00:00
parent ad95ce9322
commit cdf4b8311a
9 changed files with 1364 additions and 1319 deletions

View File

@ -1,20 +1,20 @@
---
read_when:
- Ви хочете читати або редагувати конфігурацію без взаємодії з користувачем
summary: Довідник CLI для `openclaw config` (get/set/unset/file/schema/validate)
- Ви хочете читати або редагувати конфігурацію в неінтерактивному режимі
summary: Довідка CLI для `openclaw config` (get/set/unset/file/schema/validate)
title: Конфігурація
x-i18n:
generated_at: "2026-04-24T03:15:21Z"
generated_at: "2026-04-25T03:24:43Z"
model: gpt-5.4
provider: openai
source_hash: 15e2eb75cc415df52ddcd104d8e5295d8d7b84baca65b4368deb3f06259f6bcd
source_hash: 1b8d5466d875967b6c9d5bf451f6affbe969d0ba5a48b98ee282612be67128db
source_path: cli/config.md
workflow: 15
---
# `openclaw config`
Допоміжні команди конфігурації для невзаємодійних змін у `openclaw.json`: отримання/встановлення/видалення/файл/schema/validate
Допоміжні команди конфігурації для неінтерактивних змін у `openclaw.json`: отримання/встановлення/видалення/файл/схема/перевірка
значень за шляхом і виведення активного файла конфігурації. Запустіть без підкоманди, щоб
відкрити майстер налаштування (так само, як `openclaw configure`).
@ -56,29 +56,29 @@ openclaw config validate --json
### `config schema`
Виводить згенеровану JSON-схему для `openclaw.json` у stdout у форматі JSON.
Виводить згенеровану JSON schema для `openclaw.json` у stdout у форматі JSON.
Що вона містить:
- Поточну кореневу схему конфігурації, а також кореневе строкове поле `$schema` для інструментів редактора
- Метадані документації полів `title` і `description`, які використовує інтерфейс Control
- Вкладені об’єкти, вузли wildcard (`*`) і елементи масиву (`[]`) успадковують ті самі метадані `title` / `description`, коли для відповідного поля існує документація
- Гілки `anyOf` / `oneOf` / `allOf` також успадковують ті самі метадані документації, коли для відповідного поля існує документація
- Найкращі з можливих метадані схем Plugin + channel у реальному часі, коли можна завантажити runtime-маніфести
- Метадані документації полів `title` і `description`, які використовує Control UI
- Вкладені об’єкти, вузли з шаблоном (`*`) і вузли елементів масиву (`[]`) успадковують ті самі метадані `title` / `description`, коли існує відповідна документація поля
- Гілки `anyOf` / `oneOf` / `allOf` також успадковують ті самі метадані документації, коли існує відповідна документація поля
- Метадані схеми live Plugin + channel у режимі best-effort, коли можна завантажити runtime-маніфести
- Чисту резервну схему, навіть якщо поточна конфігурація невалідна
Пов’язаний runtime RPC:
- `config.schema.lookup` повертає один нормалізований шлях конфігурації з неглибоким
вузлом схеми (`title`, `description`, `type`, `enum`, `const`, поширені межі),
відповідними метаданими підказок UI та зведеннями безпосередніх дочірніх елементів. Використовуйте це для
деталізації в межах шляху в Control UI або у власних клієнтах.
підібраними метаданими підказок UI і підсумками безпосередніх дочірніх елементів. Використовуйте це для
деталізації в межах шляху в Control UI або власних клієнтах.
```bash
openclaw config schema
```
Перенаправте вивід у файл, якщо хочете переглянути або перевірити його іншими інструментами:
Спрямуйте вивід у файл, якщо хочете переглянути або перевірити його іншими інструментами:
```bash
openclaw config schema > openclaw.schema.json
@ -86,14 +86,14 @@ openclaw config schema > openclaw.schema.json
### Шляхи
Шляхи використовують крапкову або дужкову нотацію:
Шляхи використовують крапкову нотацію або нотацію з дужками:
```bash
openclaw config get agents.defaults.workspace
openclaw config get agents.list[0].id
```
Використовуйте індекс списку агентів, щоб звернутися до конкретного агента:
Використовуйте індекс списку агентів, щоб націлитися на конкретного агента:
```bash
openclaw config get agents.list
@ -102,8 +102,8 @@ openclaw config set agents.list[1].tools.exec.node "node-id-or-name"
## Значення
Значення розбираються як JSON5, якщо це можливо; інакше вони трактуються як рядки.
Використовуйте `--strict-json`, щоб вимагати розбір JSON5. `--json` і надалі підтримується як застарілий псевдонім.
Значення аналізуються як JSON5, коли це можливо; інакше вони обробляються як рядки.
Використовуйте `--strict-json`, щоб вимагати аналіз JSON5. `--json` і надалі підтримується як застарілий псевдонім.
```bash
openclaw config set agents.defaults.heartbeat.every "0m"
@ -111,10 +111,10 @@ openclaw config set gateway.port 19001 --strict-json
openclaw config set channels.whatsapp.groups '["*"]' --strict-json
```
`config get <path> --json` виводить необроблене значення у форматі JSON замість тексту, відформатованого для термінала.
`config get <path> --json` виводить необроблене значення у форматі JSON замість відформатованого для термінала тексту.
Присвоєння об’єкта за замовчуванням замінює цільовий шлях. Захищені шляхи map/list,
які часто містять записи, додані користувачем, як-от `agents.defaults.models`,
які зазвичай містять додані користувачем записи, такі як `agents.defaults.models`,
`models.providers`, `models.providers.<id>.models`, `plugins.entries` і
`auth.profiles`, відхиляють заміни, які видалили б наявні записи, якщо
ви не передасте `--replace`.
@ -143,7 +143,7 @@ openclaw config set channels.discord.token \
--ref-id DISCORD_BOT_TOKEN
```
3. Режим побудови provider (лише для шляху `secrets.providers.<alias>`):
3. Режим побудови провайдера (лише для шляху `secrets.providers.<alias>`):
```bash
openclaw config set secrets.providers.vault \
@ -175,12 +175,12 @@ openclaw config set --batch-file ./config-set.batch.json --dry-run
Примітка щодо політики:
- Присвоєння SecretRef відхиляються на непідтримуваних runtime-mutable поверхнях (наприклад, `hooks.token`, `commands.ownerDisplaySecret`, токени Webhook прив’язки потоків Discord і JSON-облікові дані WhatsApp). Див. [Поверхня облікових даних SecretRef](/uk/reference/secretref-credential-surface).
- Присвоєння SecretRef відхиляються на непідтримуваних runtime-змінюваних поверхнях (наприклад, `hooks.token`, `commands.ownerDisplaySecret`, токенах Webhook прив’язки потоку Discord і JSON облікових даних WhatsApp). Див. [Поверхня облікових даних SecretRef](/uk/reference/secretref-credential-surface).
Пакетний розбір завжди використовує пакетне навантаження (`--batch-json`/`--batch-file`) як єдине джерело істини.
`--strict-json` / `--json` не змінюють поведінку пакетного розбору.
Пакетний аналіз завжди використовує пакетне корисне навантаження (`--batch-json`/`--batch-file`) як джерело істини.
`--strict-json` / `--json` не змінюють поведінку пакетного аналізу.
Режим JSON path/value і надалі підтримується як для SecretRef, так і для providers:
Режим JSON path/value і надалі підтримується як для SecretRef, так і для провайдерів:
```bash
openclaw config set channels.discord.token \
@ -192,11 +192,11 @@ openclaw config set secrets.providers.vaultfile \
--strict-json
```
## Прапори побудови provider
## Прапорці Provider Builder
Цілі побудови provider мають використовувати `secrets.providers.<alias>` як шлях.
Цілі Provider builder повинні використовувати `secrets.providers.<alias>` як шлях.
Загальні прапори:
Загальні прапорці:
- `--provider-source <env|file|exec>`
- `--provider-timeout-ms <ms>` (`file`, `exec`)
@ -225,7 +225,7 @@ Exec provider (`--provider-source exec`):
- `--provider-allow-insecure-path`
- `--provider-allow-symlink-command`
Приклад посиленого exec provider:
Приклад зміцненого exec provider:
```bash
openclaw config set secrets.providers.vault \
@ -239,7 +239,7 @@ openclaw config set secrets.providers.vault \
--provider-timeout-ms 5000
```
## Сухий прогін
## Пробний запуск
Використовуйте `--dry-run`, щоб перевірити зміни без запису в `openclaw.json`.
@ -265,27 +265,27 @@ openclaw config set channels.discord.token \
--allow-exec
```
Поведінка сухого прогону:
Поведінка пробного запуску:
- Режим побудови: запускає перевірки розв’язуваності SecretRef для змінених refs/providers.
- Режим JSON (`--strict-json`, `--json` або пакетний режим): запускає валідацію схеми та перевірки розв’язуваності SecretRef.
- Валідація політики також запускається для відомих непідтримуваних цільових поверхонь SecretRef.
- Перевірки політики оцінюють повну конфігурацію після зміни, тому записи батьківських об’єктів (наприклад, установлення `hooks` як об’єкта) не можуть обійти валідацію непідтримуваних поверхонь.
- Перевірки exec SecretRef під час сухого прогону за замовчуванням пропускаються, щоб уникнути побічних ефектів команд.
- Використовуйте `--allow-exec` разом із `--dry-run`, щоб явно дозволити перевірки exec SecretRef (це може виконати команди provider).
- `--allow-exec` призначений лише для сухого прогону й спричиняє помилку, якщо використовується без `--dry-run`.
- Режим builder: запускає перевірки розв’язуваності SecretRef для змінених ref/provider.
- Режим JSON (`--strict-json`, `--json` або пакетний режим): запускає перевірку схеми плюс перевірки розв’язуваності SecretRef.
- Перевірка політики також запускається для відомих непідтримуваних цільових поверхонь SecretRef.
- Перевірки політики оцінюють повну конфігурацію після змін, тому записи батьківського об’єкта (наприклад, встановлення `hooks` як об’єкта) не можуть обійти перевірку непідтримуваних поверхонь.
- Перевірки exec SecretRef за замовчуванням пропускаються під час пробного запуску, щоб уникнути побічних ефектів команд.
- Використовуйте `--allow-exec` разом із `--dry-run`, щоб явно дозволити перевірки exec SecretRef (це може виконувати команди провайдера).
- `--allow-exec` доступний лише для пробного запуску й спричиняє помилку, якщо використовується без `--dry-run`.
`--dry-run --json` виводить звіт у машиночитному форматі:
`--dry-run --json` виводить машиночитаний звіт:
- `ok`: чи пройдено сухий прогін
- `operations`: кількість перевірених присвоєнь
- `checks`: чи виконувалися перевірки schema/resolvability
- `checks.resolvabilityComplete`: чи були перевірки розв’язуваності виконані до кінця (`false`, коли exec refs пропущено)
- `refsChecked`: кількість refs, фактично розв’язаних під час сухого прогону
- `skippedExecRefs`: кількість exec refs, пропущених через те, що `--allow-exec` не було встановлено
- `errors`: структуровані збої schema/resolvability, коли `ok=false`
- `ok`: чи успішно пройшов пробний запуск
- `operations`: кількість оцінених присвоєнь
- `checks`: чи виконувалися перевірки схеми/розв’язуваності
- `checks.resolvabilityComplete`: чи були перевірки розв’язуваності виконані до кінця (`false`, коли exec ref пропущено)
- `refsChecked`: кількість ref, фактично розв’язаних під час пробного запуску
- `skippedExecRefs`: кількість exec ref, пропущених через те, що `--allow-exec` не було встановлено
- `errors`: структуровані збої схеми/розв’язуваності, коли `ok=false`
### Форма виводу JSON
### Форма JSON-виводу
```json5
{
@ -304,7 +304,7 @@ openclaw config set channels.discord.token \
{
kind: "schema" | "resolvability",
message: string,
ref?: string, // наявне для помилок розв’язуваності
ref?: string, // присутнє для помилок розв’язуваності
},
],
}
@ -353,25 +353,25 @@ openclaw config set channels.discord.token \
}
```
Якщо сухий прогін завершується помилкою:
Якщо пробний запуск завершується помилкою:
- `config schema validation failed`: форма вашої конфігурації після зміни невалідна; виправте шлях/значення або форму об’єкта provider/ref.
- `Config policy validation failed: unsupported SecretRef usage`: поверніть ці облікові дані до plaintext/string-вводу й використовуйте SecretRefs лише на підтримуваних поверхнях.
- `SecretRef assignment(s) could not be resolved`: на цей момент посилання на provider/ref не може бути розв’язане (відсутня змінна середовища, недійсний покажчик на файл, помилка exec provider або невідповідність provider/source).
- `Dry run note: skipped <n> exec SecretRef resolvability check(s)`: сухий прогін пропустив exec refs; повторно запустіть із `--allow-exec`, якщо вам потрібна перевірка розв’язуваності exec.
- У пакетному режимі виправте записи, що завершилися помилкою, і повторно запустіть `--dry-run` перед записом.
- `config schema validation failed`: форма вашої конфігурації після змін невалідна; виправте шлях/значення або форму об’єкта provider/ref.
- `Config policy validation failed: unsupported SecretRef usage`: поверніть цей обліковий параметр до plaintext/string-вводу й залишайте SecretRef лише на підтримуваних поверхнях.
- `SecretRef assignment(s) could not be resolved`: на цей момент не вдається розв’язати вказаний provider/ref (відсутня env-змінна, недійсний покажчик файлу, збій exec provider або невідповідність provider/source).
- `Dry run note: skipped <n> exec SecretRef resolvability check(s)`: пробний запуск пропустив exec ref; повторіть із `--allow-exec`, якщо вам потрібна перевірка розв’язуваності exec.
- Для пакетного режиму виправте записи, що не пройшли, і повторно запустіть `--dry-run` перед записом.
## Безпека запису
`openclaw config set` та інші засоби запису конфігурації, якими керує OpenClaw, перевіряють повну
конфігурацію після зміни перед її збереженням на диск. Якщо нове навантаження не проходить
валідацію схеми або виглядає як руйнівне перезаписування, активна конфігурація не змінюється,
а відхилене навантаження зберігається поруч як `openclaw.json.rejected.*`.
Активний шлях конфігурації має бути звичайним файлом. Макети `openclaw.json`
із symlink не підтримуються для запису; використовуйте `OPENCLAW_CONFIG_PATH`, щоб вказати безпосередньо
`openclaw config set` та інші засоби запису конфігурації, якими керує OpenClaw, перевіряють всю
конфігурацію після змін перед записом на диск. Якщо нове корисне навантаження не проходить
перевірку схеми або виглядає як руйнівне перезаписування, активна конфігурація залишається без змін,
а відхилене корисне навантаження зберігається поруч із нею як `openclaw.json.rejected.*`.
Шлях активної конфігурації має вказувати на звичайний файл. Макети `openclaw.json`
із symlink не підтримуються для запису; використовуйте `OPENCLAW_CONFIG_PATH`, щоб указати безпосередньо
на реальний файл.
Для невеликих змін віддавайте перевагу запису через CLI:
Для невеликих змін надавайте перевагу запису через CLI:
```bash
openclaw config set gateway.reload.mode hybrid --dry-run
@ -379,7 +379,7 @@ openclaw config set gateway.reload.mode hybrid
openclaw config validate
```
Якщо запис відхилено, перегляньте збережене навантаження та виправте повну форму конфігурації:
Якщо запис відхилено, перегляньте збережене корисне навантаження та виправте повну форму конфігурації:
```bash
CONFIG="$(openclaw config file)"
@ -387,20 +387,29 @@ ls -lt "$CONFIG".rejected.* 2>/dev/null | head
openclaw config validate
```
Прямий запис через редактор і надалі дозволений, але запущений Gateway розглядає такі зміни як
недовірені, доки вони не пройдуть валідацію. Невалідні прямі редагування можна відновити з
останньої відомої справної резервної копії під час запуску або гарячого перезавантаження. Див.
[Усунення несправностей Gateway](/uk/gateway/troubleshooting#gateway-restored-last-known-good-config).
Прямі записи через редактор усе ще дозволені, але запущений Gateway розглядає їх як
ненадійні, доки вони не пройдуть перевірку. Недійсні прямі зміни можна відновити з
резервної копії останньої відомо коректної версії під час запуску або гарячого перезавантаження. Див.
[усунення несправностей Gateway](/uk/gateway/troubleshooting#gateway-restored-last-known-good-config).
Відновлення цілого файла зарезервоване для глобально зламаної конфігурації, наприклад помилок
розбору, збоїв схеми на кореневому рівні, збоїв застарілої міграції або змішаних збоїв Plugin
і кореня. Якщо перевірка не проходить лише в межах `plugins.entries.<id>...`,
OpenClaw залишає активний `openclaw.json` на місці та натомість повідомляє про локальну
проблему Plugin, а не відновлює `.last-good`. Це запобігає тому, щоб зміни схеми Plugin або
невідповідність `minHostVersion` відкочували не пов’язані налаштування користувача, такі як models,
providers, профілі auth, channels, експозиція gateway, tools, memory, browser або
конфігурація Cron.
## Підкоманди
- `config file`: Вивести шлях до активного файла конфігурації (визначається з `OPENCLAW_CONFIG_PATH` або типового розташування). Шлях має вказувати на звичайний файл, а не на symlink.
- `config file`: Вивести шлях до активного файла конфігурації (визначений з `OPENCLAW_CONFIG_PATH` або стандартного розташування). Шлях має вказувати на звичайний файл, а не symlink.
Перезапустіть gateway після змін.
## Validate
## Перевірка
Перевіряє поточну конфігурацію на відповідність активній схемі без запуску
Перевірити поточну конфігурацію на відповідність активній схемі без запуску
gateway.
```bash
@ -412,8 +421,9 @@ openclaw config validate --json
вбудований агент порівняв активну конфігурацію з документацією, поки ви перевіряєте
кожну зміну з того самого термінала:
Якщо валідація вже завершується помилкою, почніть з `openclaw configure` або
`openclaw doctor --fix`. `openclaw chat` не обходить захист від невалідної конфігурації.
Якщо перевірка вже не проходить, почніть з `openclaw configure` або
`openclaw doctor --fix`. `openclaw chat` не обходить
захист від невалідної конфігурації.
```bash
openclaw chat
@ -431,11 +441,11 @@ openclaw chat
Типовий цикл виправлення:
- Попросіть агента порівняти вашу поточну конфігурацію з відповідною сторінкою документації та запропонувати найменше виправлення.
- Застосуйте точкові зміни через `openclaw config set` або `openclaw configure`.
- Застосуйте цільові зміни за допомогою `openclaw config set` або `openclaw configure`.
- Повторно запускайте `openclaw config validate` після кожної зміни.
- Якщо валідація проходить, але runtime все ще працює некоректно, запустіть `openclaw doctor` або `openclaw doctor --fix` для допомоги з міграцією та виправленням.
- Якщо перевірка проходить, але runtime усе ще працює нездорово, запустіть `openclaw doctor` або `openclaw doctor --fix` для допомоги з міграцією та виправленням.
## Пов’язане
- [Довідник CLI](/uk/cli)
- [Довідка CLI](/uk/cli)
- [Конфігурація](/uk/gateway/configuration)

View File

@ -2,23 +2,23 @@
read_when:
- Налаштування типових параметрів агента (моделі, thinking, робочий простір, Heartbeat, медіа, Skills)
- Налаштування маршрутизації між кількома агентами та прив’язок
- Налаштування сеансу, доставки повідомлень і поведінки режиму розмови
summary: Типові налаштування агента, маршрутизація між кількома агентами, сеанс, повідомлення та конфігурація розмови
- Налаштування сеансу, доставки повідомлень і поведінки режиму talk
summary: Типові налаштування агента, маршрутизація між кількома агентами, сесія, повідомлення та конфігурація talk
title: Конфігурація — агенти
x-i18n:
generated_at: "2026-04-25T03:06:15Z"
generated_at: "2026-04-25T03:24:45Z"
model: gpt-5.4
provider: openai
source_hash: 055b8f114f277684c3c8bbfcf7165f7e7e4f645b5440dc60f0003bdb3639bc96
source_hash: 20cf1d6c2d491da51db3f383784a0ef1cc2622d25290987d0a3406147e92f462
source_path: gateway/config-agents.md
workflow: 15
---
Ключі конфігурації в області агента в `agents.*`, `multiAgent.*`, `session.*`,
Ключі конфігурації в області агента під `agents.*`, `multiAgent.*`, `session.*`,
`messages.*` і `talk.*`. Для каналів, інструментів, середовища виконання Gateway та інших
ключів верхнього рівня див. [Довідник з конфігурації](/uk/gateway/configuration-reference).
## Типові налаштування агента
## Типові параметри агента
### `agents.defaults.workspace`
@ -32,7 +32,7 @@ x-i18n:
### `agents.defaults.repoRoot`
Необов’язковий корінь репозиторію, що показується в рядку Runtime системного запиту. Якщо не задано, OpenClaw автоматично визначає його, піднімаючись вгору від робочого простору.
Необов’язковий корінь репозиторію, який показується в рядку Runtime системного запиту. Якщо не задано, OpenClaw автоматично визначає його, піднімаючись угору від робочого простору.
```json5
{
@ -42,7 +42,7 @@ x-i18n:
### `agents.defaults.skills`
Необов’язковий типовий список дозволених Skills для агентів, які не задають
Необов’язковий типовий список дозволених Skills для агентів, у яких не задано
`agents.list[].skills`.
```json5
@ -58,11 +58,11 @@ x-i18n:
}
```
- Не вказуйте `agents.defaults.skills`, якщо типово потрібні необмежені Skills.
- Не вказуйте `agents.list[].skills`, щоб успадкувати типові значення.
- Установіть `agents.list[].skills: []`, якщо Skills не потрібні.
- Непорожній список `agents.list[].skills` є остаточним набором для цього агента; він
не об’єднується з типовими значеннями.
- Пропустіть `agents.defaults.skills`, щоб типово дозволити необмежені Skills.
- Пропустіть `agents.list[].skills`, щоб успадкувати типові значення.
- Установіть `agents.list[].skills: []`, щоб не було жодних Skills.
- Непорожній список `agents.list[].skills` є остаточним набором для цього агента;
він не об’єднується з типовими значеннями.
### `agents.defaults.skipBootstrap`
@ -76,9 +76,9 @@ x-i18n:
### `agents.defaults.contextInjection`
Керує тим, коли bootstrap-файли робочого простору вбудовуються в системний запит. Типове значення: `"always"`.
Керує тим, коли bootstrap-файли робочого простору вставляються в системний запит. Типове значення: `"always"`.
- `"continuation-skip"`: для безпечних ходів продовження (після завершеної відповіді асистента) повторне вбудовування bootstrap-файлів робочого простору пропускається, що зменшує розмір запиту. Запуски Heartbeat і повторні спроби після Compaction усе одно перебудовують контекст.
- `"continuation-skip"`: безпечні ходи продовження (після завершеної відповіді асистента) пропускають повторне вставлення bootstrap-даних робочого простору, що зменшує розмір запиту. Запуски Heartbeat і повторні спроби після Compaction усе одно перебудовують контекст.
```json5
{
@ -88,7 +88,7 @@ x-i18n:
### `agents.defaults.bootstrapMaxChars`
Максимальна кількість символів для кожного bootstrap-файлу робочого простору перед обрізанням. Типове значення: `12000`.
Максимальна кількість символів на один bootstrap-файл робочого простору до обрізання. Типове значення: `12000`.
```json5
{
@ -98,7 +98,7 @@ x-i18n:
### `agents.defaults.bootstrapTotalMaxChars`
Максимальна загальна кількість символів, що вбудовуються з усіх bootstrap-файлів робочого простору. Типове значення: `60000`.
Максимальна загальна кількість символів, що вставляються з усіх bootstrap-файлів робочого простору. Типове значення: `60000`.
```json5
{
@ -108,12 +108,12 @@ x-i18n:
### `agents.defaults.bootstrapPromptTruncationWarning`
Керує текстом попередження, видимим агенту, коли bootstrap-контекст обрізається.
Керує видимим для агента попередженням, коли bootstrap-контекст обрізається.
Типове значення: `"once"`.
- `"off"`: ніколи не вбудовувати текст попередження в системний запит.
- `"once"`: вбудовувати попередження один раз для кожного унікального підпису обрізання (рекомендовано).
- `"always"`: вбудовувати попередження під час кожного запуску, коли є обрізання.
- `"off"`: ніколи не вставляти текст попередження в системний запит.
- `"once"`: вставляти попередження один раз для кожного унікального сигнатурного випадку обрізання (рекомендовано).
- `"always"`: вставляти попередження під час кожного запуску, коли є обрізання.
```json5
{
@ -121,24 +121,24 @@ x-i18n:
}
```
### Карта володіння бюджетом контексту
### Карта відповідальності за бюджет контексту
OpenClaw має кілька великих бюджетів запиту/контексту, і вони
OpenClaw має кілька високонавантажених бюджетів запиту/контексту, і вони
навмисно розділені між підсистемами, а не проходять через один загальний
параметр.
- `agents.defaults.bootstrapMaxChars` /
`agents.defaults.bootstrapTotalMaxChars`:
звичайне вбудовування bootstrap-даних робочого простору.
звичайне вставлення bootstrap-даних робочого простору.
- `agents.defaults.startupContext.*`:
одноразова стартова преамбула для `/new` і `/reset`, включно з нещодавніми щоденними
файлами `memory/*.md`.
одноразова стартова преамбула для `/new` і `/reset`, зокрема недавні
файли `memory/*.md` за днями.
- `skills.limits.*`:
компактний список Skills, вбудований у системний запит.
компактний список Skills, що вставляється в системний запит.
- `agents.defaults.contextLimits.*`:
обмежені витяги середовища виконання та вбудовані блоки, що належать середовищу виконання.
обмежені уривки часу виконання та вставлені блоки, що належать середовищу виконання.
- `memory.qmd.limits.*`:
індексований фрагмент пошуку в пам’яті та розміри вбудовування.
розмір уривків і вставок для індексованого пошуку в пам’яті.
Використовуйте відповідне перевизначення для окремого агента лише тоді, коли одному агенту потрібен інший
бюджет:
@ -148,7 +148,7 @@ OpenClaw має кілька великих бюджетів запиту/кон
#### `agents.defaults.startupContext`
Керує стартовою преамбулою першого ходу, яка вбудовується в порожні запуски `/new` і `/reset`.
Керує стартовою преамбулою першого ходу, що вставляється під час базових запусків `/new` і `/reset`.
```json5
{
@ -186,16 +186,18 @@ OpenClaw має кілька великих бюджетів запиту/кон
}
```
- `memoryGetMaxChars`: типове обмеження витягу `memory_get` перед додаванням метаданих
- `memoryGetMaxChars`: типове обмеження уривка `memory_get` до того, як буде додано метадані
обрізання та повідомлення про продовження.
- `memoryGetDefaultLines`: типове вікно рядків `memory_get`, коли `lines`
не вказано.
- `toolResultMaxChars`: поточне обмеження результату інструмента, яке використовується для збережених результатів і відновлення після переповнення.
- `postCompactionMaxChars`: обмеження витягу AGENTS.md, що використовується під час вбудовування оновлення після Compaction.
- `toolResultMaxChars`: поточне обмеження результату інструмента, що використовується для збережених результатів і
відновлення після переповнення.
- `postCompactionMaxChars`: обмеження уривка AGENTS.md, що використовується під час вставлення
оновлення після Compaction.
#### `agents.list[].contextLimits`
Перевизначення для окремого агента для спільних параметрів `contextLimits`. Пропущені поля успадковуються
Перевизначення окремого агента для спільних параметрів `contextLimits`. Пропущені поля успадковуються
з `agents.defaults.contextLimits`.
```json5
@ -222,8 +224,8 @@ OpenClaw має кілька великих бюджетів запиту/кон
#### `skills.limits.maxSkillsPromptChars`
Глобальне обмеження для компактного списку Skills, вбудованого в системний запит. Це
не впливає на читання файлів `SKILL.md` на вимогу.
Глобальне обмеження для компактного списку Skills, що вставляється в системний запит. Це
не впливає на читання файлів `SKILL.md` за потреби.
```json5
{
@ -237,7 +239,7 @@ OpenClaw має кілька великих бюджетів запиту/кон
#### `agents.list[].skillsLimits.maxSkillsPromptChars`
Перевизначення для окремого агента для бюджету запиту Skills.
Перевизначення бюджету запиту Skills для окремого агента.
```json5
{
@ -256,11 +258,11 @@ OpenClaw має кілька великих бюджетів запиту/кон
### `agents.defaults.imageMaxDimensionPx`
Максимальний розмір у пікселях для довшого боку зображення в блоках зображень стенограми/інструментів перед викликами провайдера.
Максимальний розмір у пікселях для довшої сторони зображення в блоках зображень транскрипту/інструментів перед викликами провайдера.
Типове значення: `1200`.
Менші значення зазвичай зменшують використання vision-токенів і розмір корисного навантаження запиту для сценаріїв із великою кількістю знімків екрана.
Більші значення зберігають більше візуальних деталей.
Нижчі значення зазвичай зменшують використання vision-токенів і розмір корисного навантаження запиту для сценаріїв із великою кількістю знімків екрана.
Вищі значення зберігають більше візуальних деталей.
```json5
{
@ -280,7 +282,7 @@ OpenClaw має кілька великих бюджетів запиту/кон
### `agents.defaults.timeFormat`
Формат часу в системному запиті. Типове значення: `auto` (параметри ОС).
Формат часу в системному запиті. Типове значення: `auto` (налаштування ОС).
```json5
{
@ -320,7 +322,7 @@ OpenClaw має кілька великих бюджетів запиту/кон
},
params: { cacheRetention: "long" }, // глобальні типові параметри провайдера
embeddedHarness: {
runtime: "pi", // pi | auto | ідентифікатор зареєстрованого harness, наприклад codex
runtime: "pi", // pi | auto | зареєстрований ідентифікатор harness, наприклад codex
fallback: "pi", // pi | none
},
pdfMaxBytesMb: 10,
@ -338,52 +340,52 @@ OpenClaw має кілька великих бюджетів запиту/кон
```
- `model`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
- Рядкова форма задає лише основну модель.
- Форма об’єкта задає основну модель і впорядкований список моделей для аварійного перемикання.
- Форма рядка задає лише основну модель.
- Форма об’єкта задає основну модель і впорядкований список резервних моделей.
- `imageModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
- Використовується шляхом інструмента `image` як конфігурація vision-моделі.
- Використовується шляхом інструмента `image` як конфігурація його vision-моделі.
- Також використовується як резервна маршрутизація, коли вибрана/типова модель не може приймати вхідні зображення.
- `imageGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
- Використовується спільною можливістю генерації зображень і будь-якою майбутньою поверхнею інструмента/Plugin, що генерує зображення.
- Типові значення: `google/gemini-3.1-flash-image-preview` для нативної генерації зображень Gemini, `fal/fal-ai/flux/dev` для fal або `openai/gpt-image-2` для OpenAI Images.
- Якщо ви безпосередньо вибираєте `provider/model`, також налаштуйте відповідну автентифікацію провайдера (наприклад, `GEMINI_API_KEY` або `GOOGLE_API_KEY` для `google/*`, `OPENAI_API_KEY` або OpenAI Codex OAuth для `openai/gpt-image-2`, `FAL_KEY` для `fal/*`).
- Якщо параметр не задано, `image_generate` усе одно може визначити типове значення провайдера на основі наявної автентифікації. Спочатку він пробує поточного типового провайдера, а потім решту зареєстрованих провайдерів генерації зображень у порядку їхніх ідентифікаторів.
- Якщо ви вибираєте конкретний provider/model напряму, також налаштуйте відповідну автентифікацію провайдера (наприклад, `GEMINI_API_KEY` або `GOOGLE_API_KEY` для `google/*`, `OPENAI_API_KEY` або OpenAI Codex OAuth для `openai/gpt-image-2`, `FAL_KEY` для `fal/*`).
- Якщо параметр не задано, `image_generate` усе одно може визначити типове значення провайдера з налаштованою автентифікацією. Спочатку він пробує поточного типового провайдера, а потім решту зареєстрованих провайдерів генерації зображень у порядку `provider-id`.
- `musicGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
- Використовується спільною можливістю генерації музики та вбудованим інструментом `music_generate`.
- Типові значення: `google/lyria-3-clip-preview`, `google/lyria-3-pro-preview` або `minimax/music-2.5+`.
- Якщо параметр не задано, `music_generate` усе одно може визначити типове значення провайдера на основі наявної автентифікації. Спочатку він пробує поточного типового провайдера, а потім решту зареєстрованих провайдерів генерації музики в порядку їхніх ідентифікаторів.
- Якщо ви безпосередньо вибираєте `provider/model`, також налаштуйте відповідну автентифікацію/API-ключ провайдера.
- Якщо параметр не задано, `music_generate` усе одно може визначити типове значення провайдера з налаштованою автентифікацією. Спочатку він пробує поточного типового провайдера, а потім решту зареєстрованих провайдерів генерації музики в порядку `provider-id`.
- Якщо ви вибираєте конкретний provider/model напряму, також налаштуйте відповідну автентифікацію провайдера/API key.
- `videoGenerationModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
- Використовується спільною можливістю генерації відео та вбудованим інструментом `video_generate`.
- Типові значення: `qwen/wan2.6-t2v`, `qwen/wan2.6-i2v`, `qwen/wan2.6-r2v`, `qwen/wan2.6-r2v-flash` або `qwen/wan2.7-r2v`.
- Якщо параметр не задано, `video_generate` усе одно може визначити типове значення провайдера на основі наявної автентифікації. Спочатку він пробує поточного типового провайдера, а потім решту зареєстрованих провайдерів генерації відео в порядку їхніх ідентифікаторів.
- Якщо ви безпосередньо вибираєте `provider/model`, також налаштуйте відповідну автентифікацію/API-ключ провайдера.
- Вбудований провайдер генерації відео Qwen підтримує до 1 вихідного відео, 1 вхідного зображення, 4 вхідних відео, тривалість до 10 секунд, а також параметри рівня провайдера `size`, `aspectRatio`, `resolution`, `audio` і `watermark`.
- Якщо параметр не задано, `video_generate` усе одно може визначити типове значення провайдера з налаштованою автентифікацією. Спочатку він пробує поточного типового провайдера, а потім решту зареєстрованих провайдерів генерації відео в порядку `provider-id`.
- Якщо ви вибираєте конкретний provider/model напряму, також налаштуйте відповідну автентифікацію провайдера/API key.
- Вбудований провайдер генерації відео Qwen підтримує до 1 вихідного відео, 1 вхідного зображення, 4 вхідних відео, тривалість до 10 секунд і параметри рівня провайдера `size`, `aspectRatio`, `resolution`, `audio` та `watermark`.
- `pdfModel`: приймає або рядок (`"provider/model"`), або об’єкт (`{ primary, fallbacks }`).
- Використовується інструментом `pdf` для маршрутизації моделі.
- Якщо параметр не задано, інструмент PDF використовує резервно `imageModel`, а потім визначену модель сеансу/типову модель.
- `pdfMaxBytesMb`: типове обмеження розміру PDF для інструмента `pdf`, коли `maxBytesMb` не передається під час виклику.
- `pdfMaxPages`: типова максимальна кількість сторінок, що враховуються в режимі резервного витягування в інструменті `pdf`.
- Якщо параметр не задано, інструмент PDF використовує `imageModel`, а потім визначену для сеансу/типову модель.
- `pdfMaxBytesMb`: типове обмеження розміру PDF для інструмента `pdf`, коли `maxBytesMb` не передано під час виклику.
- `pdfMaxPages`: типова максимальна кількість сторінок, що враховуються режимом резервного витягування в інструменті `pdf`.
- `verboseDefault`: типовий рівень verbose для агентів. Значення: `"off"`, `"on"`, `"full"`. Типове значення: `"off"`.
- `elevatedDefault`: типовий рівень elevated-output для агентів. Значення: `"off"`, `"on"`, `"ask"`, `"full"`. Типове значення: `"on"`.
- `model.primary`: формат `provider/model` (наприклад, `openai/gpt-5.4` для доступу через API-ключ або `openai-codex/gpt-5.5` для Codex OAuth). Якщо опустити провайдера, OpenClaw спочатку пробує псевдонім, потім унікальний збіг точно для цього ідентифікатора моделі серед налаштованих провайдерів і лише після цього використовує типового налаштованого провайдера (застаріла поведінка для сумісності, тому краще вказувати явний `provider/model`). Якщо цей провайдер більше не надає налаштовану типову модель, OpenClaw переходить до першої налаштованої пари провайдер/модель замість того, щоб показувати застаріле типове значення видаленого провайдера.
- `models`: налаштований каталог моделей і список дозволених моделей для `/model`. Кожен запис може містити `alias` (скорочення) і `params` (специфічні для провайдера параметри, наприклад `temperature`, `maxTokens`, `cacheRetention`, `context1m`, `responsesServerCompaction`, `responsesCompactThreshold`, `extra_body`/`extraBody`).
- Безпечне редагування: використовуйте `openclaw config set agents.defaults.models '<json>' --strict-json --merge`, щоб додавати записи. `config set` відхиляє заміни, які видалили б наявні записи зі списку дозволених, якщо не передати `--replace`.
- Потоки налаштування/онбордингу з областю провайдера зливають вибрані моделі провайдера в цю мапу та зберігають уже налаштованих несуміжних провайдерів.
- Для прямих моделей OpenAI Responses автоматично вмикається server-side Compaction. Використовуйте `params.responsesServerCompaction: false`, щоб припинити додавання `context_management`, або `params.responsesCompactThreshold`, щоб перевизначити поріг. Див. [Server-side Compaction в OpenAI](/uk/providers/openai#server-side-compaction-responses-api).
- `model.primary`: формат `provider/model` (наприклад, `openai/gpt-5.4` для доступу за API key або `openai-codex/gpt-5.5` для Codex OAuth). Якщо ви пропустите провайдера, OpenClaw спочатку спробує alias, потім унікальний збіг налаштованого провайдера для цього точного ідентифікатора моделі, і лише після цього повернеться до налаштованого типового провайдера (застаріла поведінка сумісності, тому краще явно вказувати `provider/model`). Якщо цей провайдер більше не надає налаштовану типову модель, OpenClaw повернеться до першого налаштованого provider/model замість показу застарілого типового значення від видаленого провайдера.
- `models`: налаштований каталог моделей і список дозволених значень для `/model`. Кожен запис може містити `alias` (скорочення) і `params` (специфічні для провайдера параметри, наприклад `temperature`, `maxTokens`, `cacheRetention`, `context1m`, `responsesServerCompaction`, `responsesCompactThreshold`, `extra_body`/`extraBody`).
- Безпечне редагування: використовуйте `openclaw config set agents.defaults.models '<json>' --strict-json --merge`, щоб додавати записи. `config set` відмовиться від замін, які видалили б наявні записи зі списку дозволених, якщо не передати `--replace`.
- Потоки налаштування/онбордингу, прив’язані до провайдера, об’єднують вибрані моделі провайдера в цю мапу та зберігають уже налаштованих сторонніх провайдерів.
- Для прямих моделей OpenAI Responses автоматично вмикається server-side Compaction. Використовуйте `params.responsesServerCompaction: false`, щоб припинити вставлення `context_management`, або `params.responsesCompactThreshold`, щоб перевизначити поріг. Див. [Server-side compaction OpenAI](/uk/providers/openai#server-side-compaction-responses-api).
- `params`: глобальні типові параметри провайдера, що застосовуються до всіх моделей. Задаються в `agents.defaults.params` (наприклад, `{ cacheRetention: "long" }`).
- Пріоритет злиття `params` (конфігурація): `agents.defaults.params` (глобальна база) перевизначається `agents.defaults.models["provider/model"].params` (для конкретної моделі), після чого `agents.list[].params` (для відповідного ідентифікатора агента) перевизначає значення за ключами. Докладніше див. у [Кешування запитів](/uk/reference/prompt-caching).
- `params.extra_body`/`params.extraBody`: розширений JSON для прозорої передачі, який зливається в тіла запитів `api: "openai-completions"` для OpenAI-сумісних проксі. Якщо він конфліктує зі згенерованими ключами запиту, додаткове тіло має пріоритет; не нативні маршрути completions після цього все одно видаляють специфічний для OpenAI параметр `store`.
- `embeddedHarness`: типова політика низькорівневого середовища виконання вбудованого агента. Якщо `runtime` не задано, типовим є OpenClaw Pi. Використовуйте `runtime: "pi"`, щоб примусово вмикати вбудований harness PI, `runtime: "auto"`, щоб дозволити зареєстрованим harness із Plugin обробляти підтримувані моделі, або зареєстрований ідентифікатор harness, як-от `runtime: "codex"`. Установіть `fallback: "none"`, щоб вимкнути автоматичний резервний перехід до PI. Явні середовища виконання Plugin, як-от `codex`, типово завершуються помилкою без резервного переходу, якщо ви не вкажете `fallback: "pi"` у тій самій області перевизначення. Зберігайте посилання на моделі в канонічному форматі `provider/model`; вибирайте Codex, Claude CLI, Gemini CLI та інші бекенди виконання через конфігурацію runtime, а не через застарілі префікси провайдерів runtime. Див. [Середовища виконання агента](/uk/concepts/agent-runtimes), щоб зрозуміти, чим це відрізняється від вибору провайдера/моделі.
- Засоби запису конфігурації, що змінюють ці поля (наприклад, `/models set`, `/models set-image` і команди додавання/видалення резервних варіантів), зберігають канонічну форму об’єкта та, коли можливо, зберігають наявні списки резервних варіантів.
- `maxConcurrent`: максимальна кількість паралельних запусків агентів у всіх сеансах (кожен сеанс усе одно виконується послідовно). Типове значення: 4.
- Пріоритет об’єднання `params` (конфігурація): `agents.defaults.params` (глобальна база) перевизначається через `agents.defaults.models["provider/model"].params` (для моделі), а потім `agents.list[].params` (відповідний ідентифікатор агента) перевизначає за ключем. Докладніше див. [Кешування запитів](/uk/reference/prompt-caching).
- `params.extra_body`/`params.extraBody`: розширений JSON прямої передачі, який об’єднується з тілами запитів `api: "openai-completions"` для OpenAI-сумісних проксі. Якщо він конфліктує зі згенерованими ключами запиту, пріоритет має extra body; маршрути completions, що не є нативними, після цього все одно вилучають OpenAI-специфічний `store`.
- `embeddedHarness`: типова політика низькорівневого runtime вбудованого агента. Якщо `runtime` не задано, типовим є OpenClaw Pi. Використовуйте `runtime: "pi"`, щоб примусово вибрати вбудований harness PI, `runtime: "auto"`, щоб зареєстровані Plugin harness могли перехоплювати підтримувані моделі, або зареєстрований ідентифікатор harness, наприклад `runtime: "codex"`. Установіть `fallback: "none"`, щоб вимкнути автоматичне резервне повернення на PI. Явні runtime Plugin, такі як `codex`, типово завершуються без резервування, якщо ви не вкажете `fallback: "pi"` у тій самій області перевизначення. Зберігайте посилання на моделі в канонічному вигляді `provider/model`; вибирайте Codex, Claude CLI, Gemini CLI та інші бекенди виконання через конфігурацію runtime, а не через застарілі префікси runtime provider. Див. [Середовища виконання агента](/uk/concepts/agent-runtimes), щоб зрозуміти, чим це відрізняється від вибору provider/model.
- Засоби запису конфігурації, які змінюють ці поля (наприклад, `/models set`, `/models set-image` і команди додавання/видалення fallback), зберігають канонічну форму об’єкта та, за можливості, зберігають наявні списки fallback.
- `maxConcurrent`: максимальна кількість паралельних запусків агентів у межах сеансів (кожен сеанс усе одно серіалізується). Типове значення: 4.
### `agents.defaults.embeddedHarness`
`embeddedHarness` керує тим, який низькорівневий виконавець запускає ходи вбудованого агента.
У більшості розгортань слід залишити типове середовище виконання OpenClaw Pi.
Використовуйте цей параметр, коли довірений Plugin надає нативний harness, наприклад вбудований
harness сервера застосунку Codex. Для загального розуміння див.
`embeddedHarness` керує тим, який низькорівневий виконавець обробляє ходи вбудованого агента.
У більшості розгортань слід залишити типовий runtime OpenClaw Pi.
Використовуйте його, коли довірений Plugin надає нативний harness, наприклад вбудований
harness сервера застосунку Codex. Для концептуальної моделі див.
[Середовища виконання агента](/uk/concepts/agent-runtimes).
```json5
@ -400,16 +402,16 @@ harness сервера застосунку Codex. Для загального
}
```
- `runtime`: `"auto"`, `"pi"` або ідентифікатор зареєстрованого harness із Plugin. Вбудований Plugin Codex реєструє `codex`.
- `fallback`: `"pi"` або `"none"`. Для `runtime: "auto"` не вказаний `fallback` типово дорівнює `"pi"`, щоб старі конфігурації могли й надалі використовувати PI, коли жоден harness із Plugin не обробляє запуск. У режимі явного runtime Plugin, наприклад `runtime: "codex"`, не вказаний `fallback` типово дорівнює `"none"`, щоб відсутній harness спричиняв помилку замість тихого використання PI. Перевизначення runtime не успадковують `fallback` із ширшої області; задайте `fallback: "pi"` поруч із явним runtime, коли вам свідомо потрібен такий резервний режим сумісності. Помилки вибраного harness із Plugin завжди показуються безпосередньо.
- Перевизначення через змінні середовища: `OPENCLAW_AGENT_RUNTIME=<id|auto|pi>` перевизначає `runtime`; `OPENCLAW_AGENT_HARNESS_FALLBACK=pi|none` перевизначає fallback для цього процесу.
- Для розгортань лише з Codex установіть `model: "openai/gpt-5.5"` і `embeddedHarness.runtime: "codex"`. Ви також можете явно задати `embeddedHarness.fallback: "none"` для наочності; це типове значення для явних середовищ виконання Plugin.
- Вибір harness закріплюється за ідентифікатором сеансу після першого вбудованого запуску. Зміни конфігурації/змінних середовища впливають на нові або скинуті сеанси, а не на наявну стенограму. Застарілі сеанси з історією стенограми, але без записаної прив’язки, вважаються прив’язаними до PI. `/status` показує не-PI ідентифікатори harness, як-от `codex`, поруч із `Fast`.
- Це керує лише harness вбудованого чату. Генерація медіа, vision, PDF, музика, відео та TTS усе одно використовують свої налаштування провайдера/моделі.
- `runtime`: `"auto"`, `"pi"` або ідентифікатор зареєстрованого Plugin harness. Вбудований Plugin Codex реєструє `codex`.
- `fallback`: `"pi"` або `"none"`. У режимі `runtime: "auto"` пропущене значення `fallback` типово дорівнює `"pi"`, щоб старі конфігурації могли й далі використовувати PI, коли жоден Plugin harness не перехоплює запуск. У режимі явного runtime Plugin, наприклад `runtime: "codex"`, пропущене значення `fallback` типово дорівнює `"none"`, щоб відсутній harness спричиняв помилку замість тихого використання PI. Перевизначення runtime не успадковують `fallback` з ширшої області; задайте `fallback: "pi"` разом з явним runtime, коли ви свідомо хочете таке резервне повернення для сумісності. Помилки вибраного Plugin harness завжди показуються безпосередньо.
- Перевизначення через середовище: `OPENCLAW_AGENT_RUNTIME=<id|auto|pi>` перевизначає `runtime`; `OPENCLAW_AGENT_HARNESS_FALLBACK=pi|none` перевизначає `fallback` для цього процесу.
- Для розгортань лише з Codex задайте `model: "openai/gpt-5.5"` і `embeddedHarness.runtime: "codex"`. Ви також можете явно встановити `embeddedHarness.fallback: "none"` для наочності; це типове значення для явних runtime Plugin.
- Вибір harness фіксується для кожного ідентифікатора сеансу після першого вбудованого запуску. Зміни конфігурації/середовища впливають на нові або скинуті сеанси, але не на наявний транскрипт. Застарілі сеанси з історією транскрипту, але без зафіксованого вибору, вважаються закріпленими за PI. `/status` показує ідентифікатори harness, відмінні від PI, такі як `codex`, поруч із `Fast`.
- Це керує лише harness вбудованого чату. Генерація медіа, vision, PDF, музики, відео та TTS, як і раніше, використовують свої параметри provider/model.
**Вбудовані скорочення псевдонімів** (застосовуються лише тоді, коли модель є в `agents.defaults.models`):
**Вбудовані скорочення alias** (застосовуються лише тоді, коли модель є в `agents.defaults.models`):
| Псевдонім | Модель |
| Alias | Модель |
| ------------------- | -------------------------------------------------- |
| `opus` | `anthropic/claude-opus-4-6` |
| `sonnet` | `anthropic/claude-sonnet-4-6` |
@ -420,15 +422,15 @@ harness сервера застосунку Codex. Для загального
| `gemini-flash` | `google/gemini-3-flash-preview` |
| `gemini-flash-lite` | `google/gemini-3.1-flash-lite-preview` |
Ваші налаштовані псевдоніми завжди мають пріоритет над типовими.
Ваші налаштовані alias завжди мають пріоритет над типовими.
Моделі Z.AI GLM-4.x автоматично вмикають режим thinking, якщо ви не встановите `--thinking off` або не визначите `agents.defaults.models["zai/<model>"].params.thinking` самостійно.
Для моделей Z.AI типово ввімкнено `tool_stream` для потокового передавання викликів інструментів. Установіть `agents.defaults.models["zai/<model>"].params.tool_stream` у `false`, щоб вимкнути це.
Для моделей Anthropic Claude 4.6 типово використовується thinking `adaptive`, якщо явний рівень thinking не задано.
Для моделей Z.AI GLM-4.x режим thinking вмикається автоматично, якщо ви не встановите `--thinking off` або не визначите `agents.defaults.models["zai/<model>"].params.thinking` самостійно.
Для моделей Z.AI `tool_stream` типово ввімкнено для потокової передачі викликів інструментів. Установіть `agents.defaults.models["zai/<model>"].params.tool_stream` у `false`, щоб вимкнути його.
Для моделей Anthropic Claude 4.6 типовим є thinking `adaptive`, якщо не задано явний рівень thinking.
### `agents.defaults.cliBackends`
Необов’язкові CLI-бекенди для резервних запусків лише з текстом (без викликів інструментів). Корисно як запасний варіант, коли API-провайдери недоступні.
Необов’язкові CLI-бекенди для резервних текстових запусків (без викликів інструментів). Корисно як запасний варіант, коли API-провайдери не працюють.
```json5
{
@ -462,7 +464,7 @@ harness сервера застосунку Codex. Для загального
### `agents.defaults.systemPromptOverride`
Замінює весь системний запит, зібраний OpenClaw, на фіксований рядок. Задається на типовому рівні (`agents.defaults.systemPromptOverride`) або для окремого агента (`agents.list[].systemPromptOverride`). Значення для окремого агента мають пріоритет; порожнє значення або значення лише з пробілів ігнорується. Корисно для контрольованих експериментів із запитами.
Замінює весь системний запит, зібраний OpenClaw, фіксованим рядком. Задається на типовому рівні (`agents.defaults.systemPromptOverride`) або для окремого агента (`agents.list[].systemPromptOverride`). Значення для окремого агента мають пріоритет; порожнє значення або значення лише з пробілів ігнорується. Корисно для контрольованих експериментів із запитами.
```json5
{
@ -476,7 +478,7 @@ harness сервера застосунку Codex. Для загального
### `agents.defaults.promptOverlays`
Незалежні від провайдера накладки запитів, що застосовуються за сімейством моделей. Ідентифікатори моделей сімейства GPT-5 отримують спільний поведінковий контракт у різних провайдерів; `personality` керує лише шаром дружнього стилю взаємодії.
Незалежні від провайдера накладки запиту, що застосовуються за сімейством моделей. Ідентифікатори моделей сімейства GPT-5 отримують спільний контракт поведінки для різних провайдерів; `personality` керує лише шаром дружнього стилю взаємодії.
```json5
{
@ -493,8 +495,8 @@ harness сервера застосунку Codex. Для загального
```
- `"friendly"` (типове значення) і `"on"` вмикають шар дружнього стилю взаємодії.
- `"off"` вимикає лише дружній шар; позначений поведінковий контракт GPT-5 залишається ввімкненим.
- Застаріле `plugins.entries.openai.config.personality` усе ще зчитується, коли цей спільний параметр не задано.
- `"off"` вимикає лише дружній шар; позначений контракт поведінки GPT-5 залишається ввімкненим.
- Застаріле `plugins.entries.openai.config.personality` усе ще зчитується, якщо цей спільний параметр не задано.
### `agents.defaults.heartbeat`
@ -508,8 +510,8 @@ harness сервера застосунку Codex. Для загального
every: "30m", // 0m вимикає
model: "openai/gpt-5.4-mini",
includeReasoning: false,
includeSystemPromptSection: true, // типово: true; false не додає розділ Heartbeat до системного запиту
lightContext: false, // типово: false; true залишає лише HEARTBEAT.md з bootstrap-файлів робочого простору
includeSystemPromptSection: true, // типово: true; false виключає розділ Heartbeat із системного запиту
lightContext: false, // типово: false; true залишає лише HEARTBEAT.md серед bootstrap-файлів робочого простору
isolatedSession: false, // типово: false; true запускає кожен heartbeat у новому сеансі (без історії розмови)
session: "main",
to: "+15555550123",
@ -525,15 +527,15 @@ harness сервера застосунку Codex. Для загального
}
```
- `every`: рядок тривалості (ms/s/m/h). Типове значення: `30m` (автентифікація API-ключем) або `1h` (автентифікація OAuth). Установіть `0m`, щоб вимкнути.
- `includeSystemPromptSection`: якщо `false`, не додає розділ Heartbeat до системного запиту та пропускає вбудовування `HEARTBEAT.md` у bootstrap-контекст. Типове значення: `true`.
- `suppressToolErrorWarnings`: якщо `true`, приховує корисні навантаження попереджень про помилки інструментів під час запусків heartbeat.
- `timeoutSeconds`: максимальний час у секундах, дозволений для одного ходу агента heartbeat перед його перериванням. Якщо не задано, використовується `agents.defaults.timeoutSeconds`.
- `directPolicy`: політика доставки напряму/в особисті повідомлення. `allow` (типово) дозволяє доставку до прямої цілі. `block` пригнічує доставку до прямої цілі й повертає `reason=dm-blocked`.
- `lightContext`: якщо `true`, запуски heartbeat використовують полегшений bootstrap-контекст і залишають лише `HEARTBEAT.md` із bootstrap-файлів робочого простору.
- `isolatedSession`: якщо `true`, кожен heartbeat запускається в новому сеансі без попередньої історії розмови. Такий самий шаблон ізоляції, як у Cron `sessionTarget: "isolated"`. Зменшує вартість одного heartbeat приблизно зі ~100K до ~2-5K токенів.
- Для окремого агента: задайте `agents.list[].heartbeat`. Якщо будь-який агент визначає `heartbeat`, Heartbeat запускаються **лише для цих агентів**.
- Heartbeat запускають повні ходи агента — коротші інтервали спалюють більше токенів.
- `every`: рядок тривалості (ms/s/m/h). Типове значення: `30m` (автентифікація через API key) або `1h` (OAuth-автентифікація). Установіть `0m`, щоб вимкнути.
- `includeSystemPromptSection`: якщо `false`, виключає розділ Heartbeat із системного запиту та пропускає вставлення `HEARTBEAT.md` у bootstrap-контекст. Типове значення: `true`.
- `suppressToolErrorWarnings`: якщо `true`, приглушує попередження про помилки інструментів під час запусків Heartbeat.
- `timeoutSeconds`: максимальний час у секундах, дозволений для одного ходу агента Heartbeat, після якого його буде перервано. Якщо не задано, використовується `agents.defaults.timeoutSeconds`.
- `directPolicy`: політика прямої доставки/DM. `allow` (типово) дозволяє доставку до прямої цілі. `block` приглушує доставку до прямої цілі та видає `reason=dm-blocked`.
- `lightContext`: якщо `true`, запуски Heartbeat використовують полегшений bootstrap-контекст і залишають лише `HEARTBEAT.md` серед bootstrap-файлів робочого простору.
- `isolatedSession`: якщо `true`, кожен запуск Heartbeat відбувається в новому сеансі без попередньої історії розмови. Такий самий шаблон ізоляції, як і в Cron `sessionTarget: "isolated"`. Зменшує витрати токенів на один Heartbeat приблизно зі ~100K до ~2-5K токенів.
- Для окремого агента: задайте `agents.list[].heartbeat`. Якщо будь-який агент визначає `heartbeat`, **лише ці агенти** запускають Heartbeat.
- Heartbeat виконує повноцінні ходи агента — коротші інтервали спалюють більше токенів.
### `agents.defaults.compaction`
@ -550,9 +552,9 @@ harness сервера застосунку Codex. Для загального
identifierPolicy: "strict", // strict | off | custom
identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // використовується, коли identifierPolicy=custom
qualityGuard: { enabled: true, maxRetries: 1 },
postCompactionSections: ["Session Startup", "Red Lines"], // [] вимикає повторне вбудовування
postCompactionSections: ["Session Startup", "Red Lines"], // [] вимикає повторне вставлення
model: "openrouter/anthropic/claude-sonnet-4-6", // необов’язкове перевизначення моделі лише для Compaction
notifyUser: true, // надсилати короткі сповіщення користувачу на початку й після завершення Compaction (типово: false)
notifyUser: true, // надсилати короткі сповіщення, коли Compaction починається і завершується (типово: false)
memoryFlush: {
enabled: true,
softThresholdTokens: 6000,
@ -566,16 +568,16 @@ harness сервера застосунку Codex. Для загального
```
- `mode`: `default` або `safeguard` (підсумовування частинами для довгих історій). Див. [Compaction](/uk/concepts/compaction).
- `provider`: id зареєстрованого Plugin провайдера Compaction. Якщо задано, замість вбудованого підсумовування LLM викликається `summarize()` провайдера. У разі збою використовується вбудований варіант. Установлення провайдера примусово задає `mode: "safeguard"`. Див. [Compaction](/uk/concepts/compaction).
- `timeoutSeconds`: максимальна кількість секунд, дозволена для однієї операції Compaction перед тим, як OpenClaw її перерве. Типове значення: `900`.
- `keepRecentTokens`: бюджет точки відсікання Pi для збереження найсвіжішого хвоста стенограми у незмінному вигляді. Ручна команда `/compact` враховує це значення, якщо його явно задано; інакше ручна Compaction є жорсткою контрольною точкою.
- `identifierPolicy`: `strict` (типово), `off` або `custom`. `strict` додає вбудовані настанови щодо збереження непрозорих ідентифікаторів під час підсумовування Compaction.
- `identifierInstructions`: необов’язковий власний текст для збереження ідентифікаторів, який використовується, коли `identifierPolicy=custom`.
- `qualityGuard`: перевірки з повторними спробами при некоректному виводі для підсумків safeguard. У режимі safeguard типово ввімкнено; задайте `enabled: false`, щоб пропустити аудит.
- `postCompactionSections`: необов’язкові назви секцій H2/H3 з AGENTS.md, які повторно вбудовуються після Compaction. Типово: `["Session Startup", "Red Lines"]`; установіть `[]`, щоб вимкнути повторне вбудовування. Якщо параметр не задано або явно встановлено в цю типову пару, старі заголовки `Every Session`/`Safety` також приймаються як резервний варіант для сумісності.
- `model`: необов’язкове перевизначення `provider/model-id` лише для підсумовування Compaction. Використовуйте це, якщо основний сеанс має залишатися на одній моделі, а підсумки Compaction — виконуватись на іншій; якщо параметр не задано, Compaction використовує основну модель сеансу.
- `notifyUser`: якщо `true`, надсилає користувачеві короткі сповіщення на початку та після завершення Compaction (наприклад, "Compacting context..." і "Compaction complete"). Типово вимкнено, щоб Compaction працювала безшумно.
- `memoryFlush`: безшумний агентний хід перед автоматичною Compaction для збереження довготривалої пам’яті. Пропускається, якщо робочий простір доступний лише для читання.
- `provider`: id зареєстрованого Plugin провайдера Compaction. Якщо задано, замість вбудованого підсумовування LLM викликається `summarize()` провайдера. У разі помилки повертається до вбудованого варіанта. Установлення провайдера примусово задає `mode: "safeguard"`. Див. [Compaction](/uk/concepts/compaction).
- `timeoutSeconds`: максимальна кількість секунд, дозволених для однієї операції Compaction, після чого OpenClaw її перериває. Типове значення: `900`.
- `keepRecentTokens`: бюджет точки обрізання Pi для збереження найсвіжішого хвоста транскрипту дослівно. Ручний `/compact` враховує це значення, якщо його явно задано; інакше ручна Compaction є жорсткою контрольною точкою.
- `identifierPolicy`: `strict` (типово), `off` або `custom`. `strict` додає вбудовану інструкцію щодо збереження непрозорих ідентифікаторів перед підсумовуванням Compaction.
- `identifierInstructions`: необов’язковий власний текст щодо збереження ідентифікаторів, який використовується, коли `identifierPolicy=custom`.
- `qualityGuard`: перевірки з повторною спробою для неправильно сформованого виводу підсумків safeguard. Типово ввімкнено в режимі safeguard; установіть `enabled: false`, щоб пропустити перевірку.
- `postCompactionSections`: необов’язкові назви розділів H2/H3 з AGENTS.md для повторного вставлення після Compaction. Типове значення `["Session Startup", "Red Lines"]`; установіть `[]`, щоб вимкнути повторне вставлення. Якщо значення не задано або явно встановлено цю типову пару, старі заголовки `Every Session`/`Safety` також приймаються як резервний варіант для сумісності.
- `model`: необов’язкове перевизначення `provider/model-id` лише для підсумовування Compaction. Використовуйте це, коли основний сеанс має залишатися на одній моделі, а підсумки Compaction повинні виконуватися на іншій; якщо не задано, Compaction використовує основну модель сеансу.
- `notifyUser`: якщо `true`, надсилає користувачеві короткі сповіщення, коли Compaction починається і коли вона завершується (наприклад, "Compacting context..." і "Compaction complete"). Типово вимкнено, щоб Compaction відбувалася безшумно.
- `memoryFlush`: тихий агентний хід перед автоматичною Compaction для збереження довготривалої пам’яті. Пропускається, якщо робочий простір доступний лише для читання.
### `agents.defaults.contextPruning`
@ -605,23 +607,23 @@ harness сервера застосунку Codex. Для загального
- `mode: "cache-ttl"` вмикає проходи обрізання.
- `ttl` визначає, як часто обрізання може запускатися знову (після останнього торкання кешу).
- Обрізання спочатку м’яко скорочує завеликі результати інструментів, а потім, за потреби, повністю очищає старіші результати інструментів.
- Обрізання спочатку м’яко скорочує завеликі результати інструментів, а потім за потреби повністю очищає старіші результати інструментів.
**М’яке обрізання** зберігає початок і кінець та вставляє `...` посередині.
**М’яке скорочення** зберігає початок і кінець та вставляє `...` посередині.
**Повне очищення** замінює весь результат інструмента на заповнювач.
**Повне очищення** замінює весь результат інструмента заповнювачем.
Примітки:
- Блоки зображень ніколи не обрізаються й не очищаються.
- Співвідношення обчислюються за символами (приблизно), а не за точною кількістю токенів.
- Якщо повідомлень асистента менше, ніж `keepLastAssistants`, обрізання пропускається.
- Блоки зображень ніколи не скорочуються і не очищаються.
- Співвідношення базуються на кількості символів (наближено), а не на точній кількості токенів.
- Якщо існує менше ніж `keepLastAssistants` повідомлень асистента, обрізання пропускається.
</Accordion>
Докладніше про поведінку див. у [Обрізання сеансів](/uk/concepts/session-pruning).
Докладніше про поведінку див. [Обрізання сеансів](/uk/concepts/session-pruning).
### Блочне потокове передавання
### Блокове потокове передавання
```json5
{
@ -637,11 +639,11 @@ harness сервера застосунку Codex. Для загального
}
```
- Для каналів, відмінних від Telegram, щоб увімкнути блочні відповіді, потрібно явно задати `*.blockStreaming: true`.
- Перевизначення на рівні каналу: `channels.<channel>.blockStreamingCoalesce` (і варіанти для окремих облікових записів). Для Signal/Slack/Discord/Google Chat типово `minChars: 1500`.
- `humanDelay`: випадкова пауза між блочними відповідями. `natural` = 8002500 мс. Перевизначення для окремого агента: `agents.list[].humanDelay`.
- Для каналів, відмінних від Telegram, щоб увімкнути блокові відповіді, потрібно явно вказати `*.blockStreaming: true`.
- Перевизначення для каналів: `channels.<channel>.blockStreamingCoalesce` (і варіанти для окремих акаунтів). Для Signal/Slack/Discord/Google Chat типове значення `minChars: 1500`.
- `humanDelay`: випадкова пауза між блоковими відповідями. `natural` = 8002500 мс. Перевизначення для окремого агента: `agents.list[].humanDelay`.
Докладніше про поведінку та розбиття на фрагменти див. у [Потокове передавання](/uk/concepts/streaming).
Докладніше про поведінку та поділ на фрагменти див. [Потокове передавання](/uk/concepts/streaming).
### Індикатори набору тексту
@ -656,16 +658,16 @@ harness сервера застосунку Codex. Для загального
}
```
- Типові значення: `instant` для прямих чатів/згадок, `message` для групових чатів без згадок.
- Перевизначення для окремого сеансу: `session.typingMode`, `session.typingIntervalSeconds`.
- Типові значення: `instant` для прямих чатів/згадок, `message` для групових чатів без згадки.
- Перевизначення для сеансу: `session.typingMode`, `session.typingIntervalSeconds`.
Докладніше див. у [Індикатори набору тексту](/uk/concepts/typing-indicators).
Див. [Індикатори набору тексту](/uk/concepts/typing-indicators).
<a id="agentsdefaultssandbox"></a>
### `agents.defaults.sandbox`
Необов’язкова ізоляція для вбудованого агента. Повний посібник див. у [Ізоляція](/uk/gateway/sandboxing).
Необов’язкове sandbox-ізолювання для вбудованого агента. Повний посібник див. у [Sandboxing](/uk/gateway/sandboxing).
```json5
{
@ -760,51 +762,51 @@ harness сервера застосунку Codex. Для загального
}
```
<Accordion title=окладно про sandbox">
<Accordion title=еталі sandbox">
**Бекенд:**
- `docker`: локальне середовище виконання Docker (типово)
- `ssh`: загальне віддалене середовище виконання на основі SSH
- `openshell`: середовище виконання OpenShell
- `docker`: локальне середовище Docker (типово)
- `ssh`: віддалене середовище загального призначення на основі SSH
- `openshell`: середовище OpenShell
Коли вибрано `backend: "openshell"`, налаштування, специфічні для цього середовища виконання, переносяться до
Коли вибрано `backend: "openshell"`, параметри, специфічні для runtime, переносяться до
`plugins.entries.openshell.config`.
**Конфігурація SSH-бекенда:**
**Конфігурація бекенда SSH:**
- `target`: SSH-ціль у форматі `user@host[:port]`
- `command`: команда SSH-клієнта (типово: `ssh`)
- `workspaceRoot`: абсолютний віддалений корінь, що використовується для робочих просторів за областями
- `target`: ціль SSH у форматі `user@host[:port]`
- `command`: команда клієнта SSH (типово: `ssh`)
- `workspaceRoot`: абсолютний віддалений корінь, що використовується для робочих просторів у межах scope
- `identityFile` / `certificateFile` / `knownHostsFile`: наявні локальні файли, що передаються до OpenSSH
- `identityData` / `certificateData` / `knownHostsData`: вбудований вміст або SecretRefs, які OpenClaw матеріалізує у тимчасові файли під час виконання
- `identityData` / `certificateData` / `knownHostsData`: вбудований вміст або SecretRefs, які OpenClaw матеріалізує в тимчасові файли під час виконання
- `strictHostKeyChecking` / `updateHostKeys`: параметри політики ключів хоста OpenSSH
**Пріоритет автентифікації SSH:**
**Пріоритет SSH-автентифікації:**
- `identityData` має пріоритет над `identityFile`
- `certificateData` має пріоритет над `certificateFile`
- `knownHostsData` має пріоритет над `knownHostsFile`
- Значення `*Data`, що використовують SecretRef, визначаються з активного знімка середовища виконання секретів до початку сеансу sandbox
- Значення `*Data`, підкріплені SecretRef, визначаються зі знімка активного runtime секретів до початку sandbox-сеансу
**Поведінка SSH-бекенда:**
**Поведінка бекенда SSH:**
- один раз ініціалізує віддалений робочий простір після створення або повторного створення
- потім зберігає віддалений робочий простір SSH як канонічний
- маршрутизує `exec`, файлові інструменти та шляхи до медіа через SSH
- не синхронізує віддалені зміни назад на хост автоматично
- не підтримує контейнери браузера в sandbox
- потім підтримує віддалений SSH-робочий простір як канонічний
- маршрутизує `exec`, файлові інструменти та шляхи медіа через SSH
- не синхронізує автоматично віддалені зміни назад на хост
- не підтримує browser-контейнери в sandbox
**Доступ до робочого простору:**
- `none`: робочий простір sandbox за областю в `~/.openclaw/sandboxes`
- `ro`: робочий простір sandbox у `/workspace`, робочий простір агента монтується лише для читання в `/agent`
- `rw`: робочий простір агента монтується для читання й запису в `/workspace`
- `none`: робочий простір sandbox у межах scope під `~/.openclaw/sandboxes`
- `ro`: робочий простір sandbox у `/workspace`, робочий простір агента змонтовано лише для читання в `/agent`
- `rw`: робочий простір агента змонтовано для читання/запису в `/workspace`
**Область:**
**Scope:**
- `session`: контейнер і робочий простір на рівні сеансу
- `agent`: один контейнер і робочий простір на агента (типово)
- `session`: окремий контейнер + робочий простір на сеанс
- `agent`: один контейнер + робочий простір на агента (типово)
- `shared`: спільний контейнер і робочий простір (без ізоляції між сеансами)
**Конфігурація Plugin OpenShell:**
@ -835,30 +837,30 @@ harness сервера застосунку Codex. Для загального
**Режим OpenShell:**
- `mirror`: ініціалізує віддалений простір із локального перед `exec`, синхронізує назад після `exec`; локальний робочий простір залишається канонічним
- `remote`: один раз ініціалізує віддалений простір під час створення sandbox, після чого віддалений робочий простір залишається канонічним
- `mirror`: ініціалізує віддалене середовище з локального перед `exec`, синхронізує назад після `exec`; локальний робочий простір залишається канонічним
- `remote`: один раз ініціалізує віддалене середовище під час створення sandbox, після чого віддалений робочий простір залишається канонічним
У режимі `remote` локальні зміни на хості, зроблені поза OpenClaw, не синхронізуються автоматично до sandbox після кроку ініціалізації.
Транспортом є SSH до sandbox OpenShell, але Plugin керує життєвим циклом sandbox і необов’язковою дзеркальною синхронізацією.
Транспортом є SSH до sandbox OpenShell, але Plugin керує життєвим циклом sandbox і необов’язковою синхронізацією mirror.
**`setupCommand`** виконується один раз після створення контейнера (через `sh -lc`). Потребує вихідного доступу до мережі, доступного для запису кореня та користувача root.
**`setupCommand`** виконується один раз після створення контейнера (через `sh -lc`). Потребує вихідного мережевого доступу, доступного для запису кореня та користувача root.
**Для контейнерів типово встановлено `network: "none"`** — задайте `"bridge"` (або власну bridge-мережу), якщо агенту потрібен вихідний доступ.
`"host"` заблоковано. `"container:<id>"` типово заблоковано, якщо ви явно не задасте
`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (аварійний режим).
`"host"` заблоковано. `"container:<id>"` типово заблоковано, якщо ви явно не встановите
`sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (аварійний варіант).
**Вхідні вкладення** розміщуються в `media/inbound/*` в активному робочому просторі.
**`docker.binds`** монтує додаткові каталоги хоста; глобальні та для окремого агента значення binds зливаються.
**`docker.binds`** монтує додаткові каталоги хоста; глобальні прив’язки та прив’язки окремого агента об’єднуються.
**Браузер у sandbox** (`sandbox.browser.enabled`): Chromium + CDP у контейнері. URL noVNC вбудовується в системний запит. Не потребує `browser.enabled` в `openclaw.json`.
Доступ спостерігача через noVNC типово використовує автентифікацію VNC, і OpenClaw видає URL із короткочасним токеном (замість того, щоб розкривати пароль у спільному URL).
**Browser у sandbox** (`sandbox.browser.enabled`): Chromium + CDP у контейнері. URL noVNC вставляється в системний запит. Не потребує `browser.enabled` у `openclaw.json`.
Доступ спостерігача через noVNC типово використовує VNC-автентифікацію, і OpenClaw видає URL із короткоживучим токеном (замість розкриття пароля в спільному URL).
- `allowHostControl: false` (типово) блокує націлювання сесій у sandbox на браузер хоста.
- `network` типово дорівнює `openclaw-sandbox-browser` (виділена bridge-мережа). Установлюйте `bridge` лише тоді, коли вам явно потрібне глобальне підключення bridge.
- `cdpSourceRange` за бажанням обмежує вхідний CDP-трафік на межі контейнера діапазоном CIDR (наприклад, `172.21.0.1/32`).
- `sandbox.browser.binds` монтує додаткові каталоги хоста лише в контейнер браузера sandbox. Якщо задано (включно з `[]`), це замінює `docker.binds` для контейнера браузера.
- Типові параметри запуску визначено в `scripts/sandbox-browser-entrypoint.sh` і налаштовано для хостів із контейнерами:
- `allowHostControl: false` (типово) блокує націлювання sandbox-сеансів на browser хоста.
- Для `network` типовим є `openclaw-sandbox-browser` (виділена bridge-мережа). Установлюйте `bridge` лише тоді, коли вам явно потрібна глобальна зв’язність через bridge.
- `cdpSourceRange` за потреби обмежує вхідний доступ CDP на межі контейнера до діапазону CIDR (наприклад `172.21.0.1/32`).
- `sandbox.browser.binds` монтує додаткові каталоги хоста лише в контейнер browser у sandbox. Якщо задано (зокрема `[]`), замінює `docker.binds` для контейнера browser.
- Типові параметри запуску визначено в `scripts/sandbox-browser-entrypoint.sh` і налаштовано для контейнерних хостів:
- `--remote-debugging-address=127.0.0.1`
- `--remote-debugging-port=<derived from OPENCLAW_BROWSER_CDP_PORT>`
- `--user-data-dir=${HOME}/.chrome`
@ -877,27 +879,26 @@ harness сервера застосунку Codex. Для загального
- `--metrics-recording-only`
- `--disable-extensions` (типово ввімкнено)
- `--disable-3d-apis`, `--disable-software-rasterizer` і `--disable-gpu`
типово ввімкнені й можуть бути вимкнені за допомогою
`OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0`, якщо цього потребує використання WebGL/3D.
типово ввімкнені й можуть бути вимкнені через
`OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0`, якщо для використання WebGL/3D це потрібно.
- `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` знову вмикає розширення, якщо вони
потрібні у вашому сценарії.
- `--renderer-process-limit=2` можна змінити через
`OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>`; установіть `0`, щоб використовувати
типове обмеження процесів Chromium.
типове обмеження кількості процесів Chromium.
- а також `--no-sandbox` і `--disable-setuid-sandbox`, коли ввімкнено `noSandbox`.
- Типові значення є базовими для образу контейнера; щоб змінити типові параметри контейнера,
використовуйте власний образ браузера з власним
entrypoint.
використовуйте власний образ browser із власним entrypoint.
</Accordion>
Ізоляція браузера та `sandbox.docker.binds` доступні лише для Docker.
Sandboxing browser і `sandbox.docker.binds` доступні лише для Docker.
Зібрати образи:
Зберіть образи:
```bash
scripts/sandbox-setup.sh # основний образ sandbox
scripts/sandbox-browser-setup.sh # необов’язковий образ браузера
scripts/sandbox-setup.sh # основний sandbox-образ
scripts/sandbox-browser-setup.sh # необов’язковий образ browser
```
### `agents.list` (перевизначення для окремого агента)
@ -917,7 +918,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б
reasoningDefault: "on", // перевизначення видимості reasoning для окремого агента
fastModeDefault: false, // перевизначення fast mode для окремого агента
embeddedHarness: { runtime: "auto", fallback: "pi" },
params: { cacheRetention: "none" }, // перевизначає відповідні ключі defaults.models params
params: { cacheRetention: "none" }, // перевизначає ключі відповідних params у defaults.models
skills: ["docs-search"], // замінює agents.defaults.skills, якщо задано
identity: {
name: "Samantha",
@ -950,26 +951,26 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б
```
- `id`: стабільний ідентифікатор агента (обов’язково).
- `default`: якщо задано кілька, перемагає перший (записується попередження). Якщо не задано жодного, типовим стає перший елемент у списку.
- `model`: рядкова форма перевизначає лише `primary`; форма об’єкта `{ primary, fallbacks }` перевизначає обидва (`[]` вимикає глобальні резервні моделі). Завдання Cron, які перевизначають лише `primary`, усе одно успадковують типові резервні моделі, якщо не задати `fallbacks: []`.
- `params`: параметри потоку для окремого агента, що зливаються поверх вибраного запису моделі в `agents.defaults.models`. Використовуйте це для специфічних для агента перевизначень, як-от `cacheRetention`, `temperature` або `maxTokens`, не дублюючи весь каталог моделей.
- `skills`: необов’язковий список дозволених Skills для окремого агента. Якщо не задано, агент успадковує `agents.defaults.skills`, коли це значення є; явний список замінює типові значення, а не зливається з ними, а `[]` означає відсутність Skills.
- `thinkingDefault`: необов’язковий типовий рівень thinking для окремого агента (`off | minimal | low | medium | high | xhigh | adaptive | max`). Перевизначає `agents.defaults.thinkingDefault` для цього агента, коли не задано перевизначення для окремого повідомлення або сеансу. Вибраний профіль провайдера/моделі визначає, які значення є допустимими; для Google Gemini значення `adaptive` зберігає динамічний thinking, керований провайдером (`thinkingLevel` не задається в Gemini 3/3.1, `thinkingBudget: -1` у Gemini 2.5).
- `reasoningDefault`: необов’язкове типове значення видимості reasoning для окремого агента (`on | off | stream`). Застосовується, коли не задано перевизначення reasoning для окремого повідомлення або сеансу.
- `fastModeDefault`: необов’язкове типове значення fast mode для окремого агента (`true | false`). Застосовується, коли не задано перевизначення fast mode для окремого повідомлення або сеансу.
- `embeddedHarness`: необов’язкове перевизначення політики низькорівневого harness для окремого агента. Використовуйте `{ runtime: "codex" }`, щоб зробити один агент лише для Codex, тоді як інші агенти зберігатимуть типовий резервний варіант PI у режимі `auto`.
- `default`: якщо задано для кількох, перемагає перший (записується попередження). Якщо не задано для жодного, типовим стає перший запис у списку.
- `model`: форма рядка перевизначає лише `primary`; форма об’єкта `{ primary, fallbacks }` перевизначає обидва (`[]` вимикає глобальні fallback). Завдання Cron, які перевизначають лише `primary`, усе одно успадковують типові fallback, якщо не встановити `fallbacks: []`.
- `params`: параметри потоку для окремого агента, які об’єднуються поверх вибраного запису моделі в `agents.defaults.models`. Використовуйте це для специфічних для агента перевизначень, як-от `cacheRetention`, `temperature` або `maxTokens`, не дублюючи весь каталог моделей.
- `skills`: необов’язковий список дозволених Skills для окремого агента. Якщо не задано, агент успадковує `agents.defaults.skills`, коли їх задано; явний список замінює типові значення замість об’єднання, а `[]` означає відсутність Skills.
- `thinkingDefault`: необов’язковий типовий рівень thinking для окремого агента (`off | minimal | low | medium | high | xhigh | adaptive | max`). Перевизначає `agents.defaults.thinkingDefault` для цього агента, якщо не задано перевизначення для повідомлення або сеансу. Вибраний профіль provider/model визначає, які значення є дійсними; для Google Gemini `adaptive` зберігає динамічний thinking, яким керує провайдер (`thinkingLevel` пропускається для Gemini 3/3.1, `thinkingBudget: -1` для Gemini 2.5).
- `reasoningDefault`: необов’язкове типове значення видимості reasoning для окремого агента (`on | off | stream`). Застосовується, якщо не задано перевизначення reasoning для повідомлення або сеансу.
- `fastModeDefault`: необов’язкове типове значення fast mode для окремого агента (`true | false`). Застосовується, якщо не задано перевизначення fast mode для повідомлення або сеансу.
- `embeddedHarness`: необов’язкове перевизначення політики низькорівневого harness для окремого агента. Використовуйте `{ runtime: "codex" }`, щоб зробити один агент лише Codex, поки інші агенти зберігають типовий fallback на PI у режимі `auto`.
- `runtime`: необов’язковий дескриптор runtime для окремого агента. Використовуйте `type: "acp"` із типовими значеннями `runtime.acp` (`agent`, `backend`, `mode`, `cwd`), коли агент має типово використовувати сеанси harness ACP.
- `identity.avatar`: шлях відносно робочого простору, URL `http(s)` або URI `data:`.
- `identity` виводить типові значення: `ackReaction` із `emoji`, `mentionPatterns` із `name`/`emoji`.
- `subagents.allowAgents`: список дозволених ідентифікаторів агентів для `sessions_spawn` (`["*"]` = будь-який; типово: лише той самий агент).
- Захист успадкування sandbox: якщо сеанс ініціатора ізольований, `sessions_spawn` відхиляє цілі, які працювали б без sandbox.
- `subagents.requireAgentId`: якщо `true`, блокує виклики `sessions_spawn`, у яких не вказано `agentId` (примушує до явного вибору профілю; типово: false).
- `identity` виводить типові значення: `ackReaction` з `emoji`, `mentionPatterns` з `name`/`emoji`.
- `subagents.allowAgents`: список дозволених id агентів для `sessions_spawn` (`["*"]` = будь-який; типово: лише той самий агент).
- Захист успадкування sandbox: якщо сеанс запитувача виконується в sandbox, `sessions_spawn` відхиляє цілі, які запускалися б без sandbox.
- `subagents.requireAgentId`: якщо `true`, блокує виклики `sessions_spawn`, які не вказують `agentId` (примушує до явного вибору профілю; типово: false).
---
## Маршрутизація між кількома агентами
Запускайте кілька ізольованих агентів усередині одного Gateway. Див. [Multi-Agent](/uk/concepts/multi-agent).
Запускайте кількох ізольованих агентів в одному Gateway. Див. [Multi-Agent](/uk/concepts/multi-agent).
```json5
{
@ -988,9 +989,9 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б
### Поля збігу прив’язки
- `type` (необов’язково): `route` для звичайної маршрутизації (за відсутності `type` типовим є `route`), `acp` для постійних прив’язок розмов ACP.
- `type` (необов’язково): `route` для звичайної маршрутизації (якщо тип не вказано, типовим є route), `acp` для постійних прив’язок розмов ACP.
- `match.channel` (обов’язково)
- `match.accountId` (необов’язково; `*` = будь-який обліковий запис; якщо не задано = типовий обліковий запис)
- `match.accountId` (необов’язково; `*` = будь-який акаунт; якщо не вказано = типовий акаунт)
- `match.peer` (необов’язково; `{ kind: direct|group|channel, id }`)
- `match.guildId` / `match.teamId` (необов’язково; залежить від каналу)
- `acp` (необов’язково; лише для `type: "acp"`): `{ mode, label, cwd, backend }`
@ -1006,7 +1007,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б
У межах кожного рівня перемагає перший відповідний запис `bindings`.
Для записів `type: "acp"` OpenClaw визначає відповідність за точною ідентичністю розмови (`match.channel` + обліковий запис + `match.peer.id`) і не використовує наведений вище порядок рівнів прив’язки маршруту.
Для записів `type: "acp"` OpenClaw виконує визначення за точною ідентичністю розмови (`match.channel` + акаунт + `match.peer.id`) і не використовує наведений вище порядок рівнів прив’язки route.
### Профілі доступу для окремого агента
@ -1028,7 +1029,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б
</Accordion>
<Accordion title="Інструменти й робочий простір лише для читання">
<Accordion title="Інструменти та робочий простір лише для читання">
```json5
{
@ -1103,7 +1104,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б
</Accordion>
Докладніше про пріоритети див. у [Multi-Agent Sandbox & Tools](/uk/tools/multi-agent-sandbox-tools).
Докладніше про пріоритети див. [Sandbox і інструменти Multi-Agent](/uk/tools/multi-agent-sandbox-tools).
---
@ -1129,7 +1130,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б
},
resetTriggers: ["/new", "/reset"],
store: "~/.openclaw/agents/{agentId}/sessions/sessions.json",
parentForkMaxTokens: 100000, // пропустити відгалуження батьківського потоку вище цього ліміту токенів (0 вимикає)
parentForkMaxTokens: 100000, // пропускати розгалуження батьківського потоку понад цю кількість токенів (0 вимикає)
maintenance: {
mode: "warn", // warn | enforce
pruneAfter: "30d",
@ -1142,7 +1143,7 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б
threadBindings: {
enabled: true,
idleHours: 24, // типове автоматичне зняття фокуса після неактивності в годинах (`0` вимикає)
maxAgeHours: 0, // типовий жорсткий максимальний вік у годинах (`0` вимикає)
maxAgeHours: 0, // типове жорстке максимальне обмеження віку в годинах (`0` вимикає)
},
mainKey: "main", // застаріле поле (runtime завжди використовує "main")
agentToAgent: { maxPingPongTurns: 5 },
@ -1154,37 +1155,37 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б
}
```
<Accordion title="Докладно про поля сеансу">
<Accordion title="Докладніше про поля сеансу">
- **`scope`**: базова стратегія групування сеансів для контекстів групового чату.
- `per-sender` (типово): кожен відправник отримує ізольований сеанс у межах контексту каналу.
- `global`: усі учасники в контексті каналу спільно використовують один сеанс (використовуйте лише тоді, коли потрібен спільний контекст).
- **`dmScope`**: як групуються особисті повідомлення.
- `main`: усі особисті повідомлення використовують головний сеанс.
- **`dmScope`**: як групуються DM.
- `main`: усі DM спільно використовують основний сеанс.
- `per-peer`: ізоляція за id відправника між каналами.
- `per-channel-peer`: ізоляція за каналом + відправником (рекомендовано для спільних вхідних скриньок).
- `per-account-channel-peer`: ізоляція за обліковим записом + каналом + відправником (рекомендовано для кількох облікових записів).
- **`identityLinks`**: мапа канонічних id до peer із префіксами провайдера для спільного використання сеансу між каналами.
- **`reset`**: основна політика скидання. `daily` скидає о `atHour` за місцевим часом; `idle` скидає після `idleMinutes`. Якщо налаштовано обидва варіанти, спрацьовує той, що настане раніше.
- **`resetByType`**: перевизначення за типом (`direct`, `group`, `thread`). Застаріле `dm` приймається як псевдонім для `direct`.
- **`parentForkMaxTokens`**: максимальна кількість `totalTokens` у батьківському сеансі, дозволена під час створення сеансу відгалуженого потоку (типово `100000`).
- Якщо `totalTokens` батьківського сеансу перевищує це значення, OpenClaw починає новий сеанс потоку замість успадкування історії стенограми батьківського сеансу.
- Установіть `0`, щоб вимкнути цей захист і завжди дозволяти відгалуження від батьківського сеансу.
- **`mainKey`**: застаріле поле. Runtime завжди використовує `"main"` для головного сегмента прямого чату.
- **`agentToAgent.maxPingPongTurns`**: максимальна кількість ходів відповіді у зворотному напрямку між агентами під час взаємодії агент-агент (ціле число, діапазон: `0``5`). `0` вимикає ланцюжок ping-pong.
- **`sendPolicy`**: збіг за `channel`, `chatType` (`direct|group|channel`, із застарілим псевдонімом `dm`), `keyPrefix` або `rawKeyPrefix`. Перша заборона має пріоритет.
- **`maintenance`**: очищення сховища сеансів і контроль зберігання.
- `mode`: `warn` лише показує попередження; `enforce` застосовує очищення.
- `per-channel-peer`: ізоляція за каналом + відправником (рекомендовано для inbox з кількома користувачами).
- `per-account-channel-peer`: ізоляція за акаунтом + каналом + відправником (рекомендовано для кількох акаунтів).
- **`identityLinks`**: мапа канонічних id до peer із префіксом провайдера для спільного використання сеансів між каналами.
- **`reset`**: основна політика скидання. `daily` скидає о `atHour` за місцевим часом; `idle` скидає після `idleMinutes`. Якщо налаштовано обидва варіанти, спрацьовує той, що завершується раніше.
- **`resetByType`**: перевизначення за типом (`direct`, `group`, `thread`). Застаріле `dm` приймається як alias для `direct`.
- **`parentForkMaxTokens`**: максимальна дозволена кількість `totalTokens` у батьківському сеансі під час створення розгалуженого сеансу потоку (типово `100000`).
- Якщо `totalTokens` у батьківському сеансі перевищує це значення, OpenClaw запускає новий сеанс потоку замість успадкування історії транскрипту батьківського сеансу.
- Установіть `0`, щоб вимкнути цей захист і завжди дозволяти розгалуження від батьківського сеансу.
- **`mainKey`**: застаріле поле. Runtime завжди використовує `"main"` для основного контейнера прямих чатів.
- **`agentToAgent.maxPingPongTurns`**: максимальна кількість зворотних ходів між агентами під час обміну між агентами (ціле число, діапазон: `0``5`). `0` вимикає ланцюжок ping-pong.
- **`sendPolicy`**: збіг за `channel`, `chatType` (`direct|group|channel`, із застарілим alias `dm`), `keyPrefix` або `rawKeyPrefix`. Перша заборона має пріоритет.
- **`maintenance`**: очищення сховища сеансів + керування зберіганням.
- `mode`: `warn` лише видає попередження; `enforce` застосовує очищення.
- `pruneAfter`: межа віку для застарілих записів (типово `30d`).
- `maxEntries`: максимальна кількість записів у `sessions.json` (типово `500`).
- `rotateBytes`: ротує `sessions.json`, коли його розмір перевищує це значення (типово `10mb`).
- `resetArchiveRetention`: строк зберігання архівів стенограм `*.reset.<timestamp>`. Типово дорівнює `pruneAfter`; установіть `false`, щоб вимкнути.
- `maxDiskBytes`: необов’язковий бюджет дискового простору для каталогу сеансів. У режимі `warn` записує попередження в журнал; у режимі `enforce` спочатку видаляє найстаріші артефакти/сеанси.
- `highWaterBytes`: необов’язкова ціль після очищення бюджету. Типово `80%` від `maxDiskBytes`.
- `rotateBytes`: ротує `sessions.json`, коли він перевищує цей розмір (типово `10mb`).
- `resetArchiveRetention`: термін зберігання архівів транскриптів `*.reset.<timestamp>`. Типово дорівнює `pruneAfter`; установіть `false`, щоб вимкнути.
- `maxDiskBytes`: необов’язковий бюджет дискового простору для каталогу сеансів. У режимі `warn` записує попередження; у режимі `enforce` спочатку видаляє найстаріші артефакти/сеанси.
- `highWaterBytes`: необов’язкова ціль після очищення за бюджетом. Типово `80%` від `maxDiskBytes`.
- **`threadBindings`**: глобальні типові значення для функцій сеансів, прив’язаних до потоків.
- `enabled`: головний типовий перемикач (провайдери можуть перевизначати; Discord використовує `channels.discord.threadBindings.enabled`)
- `idleHours`: типове автоматичне зняття фокуса після неактивності в годинах (`0` вимикає; провайдери можуть перевизначати)
- `maxAgeHours`: типовий жорсткий максимальний вік у годинах (`0` вимикає; провайдери можуть перевизначати)
- `maxAgeHours`: типове жорстке максимальне обмеження віку в годинах (`0` вимикає; провайдери можуть перевизначати)
</Accordion>
@ -1222,38 +1223,38 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б
### Префікс відповіді
Перевизначення для каналу/облікового запису: `channels.<channel>.responsePrefix`, `channels.<channel>.accounts.<id>.responsePrefix`.
Перевизначення для каналу/акаунта: `channels.<channel>.responsePrefix`, `channels.<channel>.accounts.<id>.responsePrefix`.
Порядок визначення (найспецифічніше має пріоритет): обліковий запис → канал → глобальне. `""` вимикає і зупиняє каскад. `"auto"` виводить `[{identity.name}]`.
Визначення (перемагає найспецифічніше): акаунт → канал → глобальний параметр. `""` вимикає та зупиняє каскад. `"auto"` формує `[{identity.name}]`.
**Шаблонні змінні:**
**Змінні шаблону:**
| Змінна | Опис | Приклад |
| ----------------- | ----------------------- | --------------------------- |
| `{model}` | Коротка назва моделі | `claude-opus-4-6` |
| Змінна | Опис | Приклад |
| ----------------- | ---------------------- | --------------------------- |
| `{model}` | Коротка назва моделі | `claude-opus-4-6` |
| `{modelFull}` | Повний ідентифікатор моделі | `anthropic/claude-opus-4-6` |
| `{provider}` | Назва провайдера | `anthropic` |
| `{provider}` | Назва провайдера | `anthropic` |
| `{thinkingLevel}` | Поточний рівень thinking | `high`, `low`, `off` |
| `{identity.name}` | Назва ідентичності агента | (те саме, що й `"auto"`) |
| `{identity.name}` | Назва identity агента | (те саме, що й `"auto"`) |
Змінні нечутливі до регістру. `{think}` є псевдонімом для `{thinkingLevel}`.
Змінні нечутливі до регістру. `{think}` — alias для `{thinkingLevel}`.
### Реакція підтвердження
- Типово використовує `identity.emoji` активного агента, інакше `"👀"`. Установіть `""`, щоб вимкнути.
- Типово береться з `identity.emoji` активного агента, інакше `"👀"`. Установіть `""`, щоб вимкнути.
- Перевизначення для каналу: `channels.<channel>.ackReaction`, `channels.<channel>.accounts.<id>.ackReaction`.
- Порядок визначення: обліковий запис → канал → `messages.ackReaction` → резервне значення з identity.
- Область: `group-mentions` (типово), `group-all`, `direct`, `all`.
- Порядок визначення: акаунт → канал → `messages.ackReaction` → резервне значення identity.
- Scope: `group-mentions` (типово), `group-all`, `direct`, `all`.
- `removeAckAfterReply`: видаляє підтвердження після відповіді в Slack, Discord і Telegram.
- `messages.statusReactions.enabled`: вмикає реакції статусу життєвого циклу в Slack, Discord і Telegram.
У Slack і Discord, якщо параметр не задано, реакції статусу залишаються ввімкненими, коли активні реакції підтвердження.
У Telegram задайте його явно як `true`, щоб увімкнути реакції статусу життєвого циклу.
У Slack і Discord, якщо значення не задано, реакції статусу лишаються ввімкненими, коли активні реакції підтвердження.
У Telegram, щоб увімкнути реакції статусу життєвого циклу, явно встановіть `true`.
### Вхідний debounce
### Debounce вхідних повідомлень
Об’єднує швидкі текстові повідомлення від одного відправника в один хід агента. Медіа/вкладення скидаються негайно. Команди керування обходять debounce.
Об’єднує швидку послідовність текстових повідомлень від одного відправника в один хід агента. Медіа/вкладення скидаються негайно. Керувальні команди обходять debounce.
### TTS (перетворення тексту на мовлення)
### TTS (синтез мовлення)
```json5
{
@ -1284,6 +1285,11 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б
speed: 1.0,
},
},
microsoft: {
voice: "en-US-AvaMultilingualNeural",
lang: "en-US",
outputFormat: "audio-24khz-48kbitrate-mono-mp3",
},
openai: {
apiKey: "openai_api_key",
baseUrl: "https://api.openai.com/v1",
@ -1296,16 +1302,17 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б
}
```
- `auto` керує типовим режимом автоматичного TTS: `off`, `always`, `inbound` або `tagged`. `/tts on|off` може перевизначити локальні налаштування, а `/tts status` показує фактичний стан.
- `auto` керує типовим автоматичним режимом TTS: `off`, `always`, `inbound` або `tagged`. `/tts on|off` може перевизначати локальні налаштування, а `/tts status` показує фактичний стан.
- `summaryModel` перевизначає `agents.defaults.model.primary` для автоматичного підсумку.
- `modelOverrides` типово ввімкнено; `modelOverrides.allowProvider` типово дорівнює `false` (потрібне явне ввімкнення).
- API-ключі резервно беруться з `ELEVENLABS_API_KEY`/`XI_API_KEY` і `OPENAI_API_KEY`.
- `providers.openai.baseUrl` перевизначає кінцеву точку OpenAI TTS. Порядок визначення: конфігурація, потім `OPENAI_TTS_BASE_URL`, потім `https://api.openai.com/v1`.
- Коли `providers.openai.baseUrl` вказує на кінцеву точку, що не належить OpenAI, OpenClaw трактує її як OpenAI-сумісний TTS-сервер і послаблює перевірку моделі/голосу.
- `modelOverrides` типово ввімкнено; `modelOverrides.allowProvider` типово має значення `false` (за явною згодою).
- API key резервно беруться з `ELEVENLABS_API_KEY`/`XI_API_KEY` і `OPENAI_API_KEY`.
- Вбудовані мовленнєві провайдери належать Plugin. Якщо задано `plugins.allow`, додайте кожен Plugin провайдера TTS, який ви хочете використовувати, наприклад `microsoft` для Edge TTS. Застарілий id провайдера `edge` приймається як alias для `microsoft`.
- `providers.openai.baseUrl` перевизначає endpoint OpenAI TTS. Порядок визначення: конфігурація, потім `OPENAI_TTS_BASE_URL`, потім `https://api.openai.com/v1`.
- Коли `providers.openai.baseUrl` вказує на endpoint, що не належить OpenAI, OpenClaw розглядає його як OpenAI-сумісний сервер TTS і послаблює перевірку моделі/голосу.
---
## Розмова
## Talk
Типові значення для режиму Talk (macOS/iOS/Android).
@ -1331,18 +1338,18 @@ scripts/sandbox-browser-setup.sh # необов’язковий образ б
}
```
- `talk.provider` має відповідати ключу в `talk.providers`, коли налаштовано кілька провайдерів Talk.
- Застарілі плоскі ключі Talk (`talk.voiceId`, `talk.voiceAliases`, `talk.modelId`, `talk.outputFormat`, `talk.apiKey`) призначені лише для сумісності й автоматично мігрують до `talk.providers.<provider>`.
- Ідентифікатори голосу резервно беруться з `ELEVENLABS_VOICE_ID` або `SAG_VOICE_ID`.
- `providers.*.apiKey` приймає звичайні текстові рядки або об’єкти SecretRef.
- Резервний варіант `ELEVENLABS_API_KEY` застосовується лише тоді, коли не налаштовано API-ключ Talk.
- `providers.*.voiceAliases` дозволяє директивам Talk використовувати дружні назви.
- `silenceTimeoutMs` визначає, як довго режим Talk чекає після мовчання користувача, перш ніж надіслати стенограму. Якщо параметр не задано, зберігається типове вікно паузи платформи (`700 ms на macOS і Android, 900 ms на iOS`).
- `talk.provider` має відповідати ключу в `talk.providers`, коли налаштовано кількох провайдерів Talk.
- Застарілі пласкі ключі Talk (`talk.voiceId`, `talk.voiceAliases`, `talk.modelId`, `talk.outputFormat`, `talk.apiKey`) підтримуються лише для сумісності та автоматично мігруються до `talk.providers.<provider>`.
- Ідентифікатори голосів резервно беруться з `ELEVENLABS_VOICE_ID` або `SAG_VOICE_ID`.
- `providers.*.apiKey` приймає рядки відкритого тексту або об’єкти SecretRef.
- Резервне значення `ELEVENLABS_API_KEY` застосовується лише тоді, коли API key Talk не налаштовано.
- `providers.*.voiceAliases` дає змогу директивам Talk використовувати дружні назви.
- `silenceTimeoutMs` визначає, скільки часу режим Talk чекає після мовчання користувача перед надсиланням транскрипту. Якщо не задано, зберігається типове для платформи вікно паузи (`700 ms на macOS і Android, 900 ms на iOS`).
---
## Пов’язане
## Пов’язані матеріали
- [Довідник з конфігурації](/uk/gateway/configuration-reference) — усі інші ключі конфігурації
- [Конфігурація](/uk/gateway/configuration) — типові завдання та швидке налаштування
- [Конфігурація](/uk/gateway/configuration) — типові завдання й швидке налаштування
- [Приклади конфігурації](/uk/gateway/configuration-examples)

View File

@ -1,35 +1,35 @@
---
read_when:
- Перше налаштування OpenClaw
- Шукаєте поширені шаблони конфігурації
- Перехід до конкретних розділів конфігурації
- Поширені шаблони конфігурації
- Перехід до певних розділів конфігурації
summary: 'Огляд конфігурації: поширені завдання, швидке налаштування та посилання на повний довідник'
title: Конфігурація
x-i18n:
generated_at: "2026-04-24T03:44:40Z"
generated_at: "2026-04-25T03:24:46Z"
model: gpt-5.4
provider: openai
source_hash: 7a47a2c02c37b012a8d8222d3f160634343090b633be722393bac2ebd6adc91c
source_hash: 2749fca881115d1d1915271af2d06037cfe87d6c4caf96dc46d8bf893a0669c6
source_path: gateway/configuration.md
workflow: 15
---
OpenClaw читає необов’язкову конфігурацію <Tooltip tip="JSON5 підтримує коментарі та кінцеві коми">**JSON5**</Tooltip> з `~/.openclaw/openclaw.json`.
Активний шлях конфігурації має бути звичайним файлом. Макети `openclaw.json`
із symlink не підтримуються для записів, якими керує OpenClaw; атомарний запис може замінити
цей шлях замість збереження symlink. Якщо ви зберігаєте конфігурацію поза
каталогом стану за замовчуванням, вкажіть `OPENCLAW_CONFIG_PATH` безпосередньо на реальний файл.
Активний шлях конфігурації має бути звичайним файлом. Компонування
`openclaw.json` через символьні посилання не підтримуються для записів, якими керує OpenClaw; атомарний запис може замінити
шлях замість збереження символьного посилання. Якщо ви зберігаєте конфігурацію поза
стандартним каталогом стану, вкажіть `OPENCLAW_CONFIG_PATH` безпосередньо на реальний файл.
Якщо файл відсутній, OpenClaw використовує безпечні значення за замовчуванням. Поширені причини додати конфігурацію:
Якщо файл відсутній, OpenClaw використовує безпечні типові значення. Поширені причини додати конфігурацію:
- Підключити channels і керувати тим, хто може писати боту
- Підключити канали та керувати тим, хто може надсилати повідомлення боту
- Налаштувати моделі, інструменти, ізоляцію або автоматизацію (cron, hooks)
- Налаштувати сесії, медіа, мережу або UI
Див. [повний довідник](/uk/gateway/configuration-reference) для всіх доступних полів.
Перегляньте [повний довідник](/uk/gateway/configuration-reference) для всіх доступних полів.
<Tip>
**Новачок у налаштуванні конфігурації?** Почніть з `openclaw onboard` для інтерактивного налаштування або перегляньте посібник [Приклади конфігурації](/uk/gateway/configuration-examples) для повних конфігурацій, які можна просто скопіювати й вставити.
**Ви вперше налаштовуєте конфігурацію?** Почніть з `openclaw onboard` для інтерактивного налаштування або перегляньте посібник [Приклади конфігурації](/uk/gateway/configuration-examples) для готових конфігурацій, які можна повністю скопіювати й вставити.
</Tip>
## Мінімальна конфігурація
@ -60,11 +60,11 @@ OpenClaw читає необов’язкову конфігурацію <Toolti
</Tab>
<Tab title="Control UI">
Відкрийте [http://127.0.0.1:18789](http://127.0.0.1:18789) і використайте вкладку **Config**.
Control UI рендерить форму з актуальної схеми конфігурації, включно з метаданими документації
полів `title` / `description`, а також схемами Plugin і channel, коли вони
доступні, з редактором **Raw JSON** як запасним варіантом. Для UI з деталізацією
та інших інструментів Gateway також надає `config.schema.lookup`, щоб
отримати один вузол схеми з областю шляху разом із підсумками безпосередніх дочірніх елементів.
Control UI відображає форму на основі схеми поточної конфігурації, зокрема метадані документації полів
`title` / `description`, а також схеми Plugin і каналів, коли вони
доступні, із редактором **Raw JSON** як запасним варіантом. Для
деталізованих UI та інших інструментів gateway також надає `config.schema.lookup`, щоб
отримати один вузол схеми з прив’язкою до шляху та зведення для безпосередніх дочірніх елементів.
</Tab>
<Tab title="Пряме редагування">
Відредагуйте `~/.openclaw/openclaw.json` безпосередньо. Gateway стежить за файлом і автоматично застосовує зміни (див. [гаряче перезавантаження](#config-hot-reload)).
@ -74,36 +74,39 @@ OpenClaw читає необов’язкову конфігурацію <Toolti
## Сувора валідація
<Warning>
OpenClaw приймає лише конфігурації, що повністю відповідають схемі. Невідомі ключі, неправильні типи або недійсні значення призводять до того, що Gateway **відмовляється запускатися**. Єдиний виняток на кореневому рівні — `$schema` (рядок), щоб редактори могли підключати метадані JSON Schema.
OpenClaw приймає лише конфігурації, які повністю відповідають схемі. Невідомі ключі, некоректні типи або недійсні значення призводять до того, що Gateway **відмовляється запускатися**. Єдиний виняток на кореневому рівні — `$schema` (рядок), щоб редактори могли прив’язувати метадані JSON Schema.
</Warning>
`openclaw config schema` виводить канонічну JSON Schema, яку використовують Control UI
і валідація. `config.schema.lookup` отримує один вузол із областю шляху разом із
підсумками дочірніх елементів для інструментів деталізації. Метадані документації полів `title`/`description`
передаються через вкладені об’єкти, wildcard (`*`), елементи масиву (`[]`) і гілки `anyOf`/
`oneOf`/`allOf`. Схеми runtime Plugin і channel об’єднуються, коли
і валідація. `config.schema.lookup` отримує один вузол, прив’язаний до шляху, а також
зведення дочірніх елементів для інструментів із деталізацією. Метадані документації полів `title`/`description`
передаються через вкладені об’єкти, wildcard (`*`), елементи масивів (`[]`) і гілки `anyOf`/
`oneOf`/`allOf`. Під час виконання також об’єднуються схеми Plugin і каналів, коли
завантажено реєстр маніфестів.
Коли валідація завершується помилкою:
Коли валідація не проходить:
- Gateway не запускається
- Працюють лише діагностичні команди (`openclaw doctor`, `openclaw logs`, `openclaw health`, `openclaw status`)
- Виконайте `openclaw doctor`, щоб побачити точні проблеми
- Виконайте `openclaw doctor --fix` (або `--yes`), щоб застосувати виправлення
Gateway зберігає довірену останню коректну копію після кожного успішного запуску.
Після кожного успішного запуску Gateway зберігає довірену останню відому справну копію.
Якщо `openclaw.json` пізніше не проходить валідацію (або втрачає `gateway.mode`, різко
зменшується, або на початку з’являється зайвий рядок журналу), OpenClaw зберігає пошкоджений файл
як `.clobbered.*`, відновлює останню коректну копію та записує причину
відновлення в журнал. Наступний хід агента також отримує системне попередження, щоб основний
агент не переписав відновлену конфігурацію всліпу. Підвищення до статусу останньої коректної копії
пропускається, якщо кандидат містить замасковані плейсхолдери секретів, такі як `***`.
зменшується, або на початку з’являється сторонній рядок журналу), OpenClaw зберігає зламаний файл
як `.clobbered.*`, відновлює останню відому справну копію та записує причину
відновлення в журнал. На наступному ході агента також надсилається попередження про системну подію, щоб основний
агент не переписав відновлену конфігурацію навмання. Просування до стану останньої відомої справної копії
пропускається, якщо кандидат містить замасковані заповнювачі секретів, такі як `***`.
Коли кожна проблема валідації обмежена `plugins.entries.<id>...`, OpenClaw
не виконує відновлення всього файлу. Поточна конфігурація лишається активною, а
локальна помилка Plugin показується окремо, щоб невідповідність схеми Plugin або версії хоста не відкочувала не пов’язані налаштування користувача.
## Поширені завдання
<AccordionGroup>
<Accordion title="Налаштувати channel (WhatsApp, Telegram, Discord тощо)">
Кожен channel має власний розділ конфігурації в `channels.<provider>`. Див. окрему сторінку channel для кроків налаштування:
<Accordion title="Налаштувати канал (WhatsApp, Telegram, Discord тощо)">
Кожен канал має власний розділ конфігурації в `channels.<provider>`. Перегляньте окрему сторінку каналу для кроків налаштування:
- [WhatsApp](/uk/channels/whatsapp) — `channels.whatsapp`
- [Telegram](/uk/channels/telegram) — `channels.telegram`
@ -116,7 +119,7 @@ Gateway зберігає довірену останню коректну коп
- [iMessage](/uk/channels/imessage) — `channels.imessage`
- [Mattermost](/uk/channels/mattermost) — `channels.mattermost`
Усі channels використовують однаковий шаблон політики DM:
Усі канали використовують однаковий шаблон політики DM:
```json5
{
@ -133,8 +136,8 @@ Gateway зберігає довірену останню коректну коп
</Accordion>
<Accordion title="Вибрати та налаштувати моделі">
Задайте основну модель і необов’язкові запасні:
<Accordion title="Вибрати й налаштувати моделі">
Налаштуйте основну модель і необов’язкові резервні варіанти:
```json5
{
@ -153,31 +156,31 @@ Gateway зберігає довірену останню коректну коп
}
```
- `agents.defaults.models` визначає каталог моделей і діє як allowlist для `/model`.
- Використовуйте `openclaw config set agents.defaults.models '<json>' --strict-json --merge`, щоб додавати записи в allowlist без видалення наявних моделей. Звичайні заміни, які видаляють записи, відхиляються, якщо ви не передасте `--replace`.
- `agents.defaults.models` визначає каталог моделей і слугує allowlist для `/model`.
- Використовуйте `openclaw config set agents.defaults.models '<json>' --strict-json --merge`, щоб додати записи до allowlist без видалення наявних моделей. Звичайні повні заміни, які видалили б записи, відхиляються, якщо не передати `--replace`.
- Посилання на моделі використовують формат `provider/model` (наприклад, `anthropic/claude-opus-4-6`).
- `agents.defaults.imageMaxDimensionPx` керує масштабуванням зображень у transcript/tool (типово `1200`); менші значення зазвичай зменшують використання vision-token у сценаріях з великою кількістю скріншотів.
- Див. [Models CLI](/uk/concepts/models) для перемикання моделей у чаті та [Model Failover](/uk/concepts/model-failover) для ротації автентифікації й поведінки запасних варіантів.
- Для користувацьких/self-hosted провайдерів див. [Користувацькі провайдери](/uk/gateway/config-tools#custom-providers-and-base-urls) у довіднику.
- `agents.defaults.imageMaxDimensionPx` керує зменшенням розміру зображень у транскрипті/інструментах (типове значення `1200`); менші значення зазвичай зменшують використання vision-токенів у запусках із великою кількістю знімків екрана.
- Перегляньте [Models CLI](/uk/concepts/models) для перемикання моделей у чаті та [Model Failover](/uk/concepts/model-failover) для ротації автентифікації та поведінки резервних варіантів.
- Для користувацьких/self-hosted провайдерів див. [Custom providers](/uk/gateway/config-tools#custom-providers-and-base-urls) у довіднику.
</Accordion>
<Accordion title="Керувати тим, хто може писати боту">
Доступ до DM керується для кожного channel через `dmPolicy`:
<Accordion title="Керувати тим, хто може надсилати повідомлення боту">
Доступ до DM контролюється для кожного каналу через `dmPolicy`:
- `"pairing"` (типово): невідомі відправники отримують одноразовий код pairing для схвалення
- `"allowlist"`: лише відправники з `allowFrom` (або сховища paired allow)
- `"open"`: дозволити всі вхідні DM (потребує `allowFrom: ["*"]`)
- `"pairing"` (типово): невідомі відправники отримують одноразовий код pairing для підтвердження
- `"allowlist"`: лише відправники з `allowFrom` (або зі сховища paired allow)
- `"open"`: дозволити всі вхідні DM (потрібно `allowFrom: ["*"]`)
- `"disabled"`: ігнорувати всі DM
Для груп використовуйте `groupPolicy` + `groupAllowFrom` або allowlist, специфічні для channel.
Для груп використовуйте `groupPolicy` + `groupAllowFrom` або allowlist, специфічні для каналу.
Див. [повний довідник](/uk/gateway/config-channels#dm-and-group-access) для деталей по кожному channel.
Перегляньте [повний довідник](/uk/gateway/config-channels#dm-and-group-access) для деталей по кожному каналу.
</Accordion>
<Accordion title="Налаштувати gating згадок у груповому чаті">
Для групових повідомлень типово **потрібна згадка**. Налаштовуйте шаблони для кожного агента:
<Accordion title="Налаштувати фільтрацію згадок у груповому чаті">
Для групових повідомлень типовим значенням є **вимагати згадку**. Налаштуйте шаблони для кожного агента:
```json5
{
@ -200,14 +203,14 @@ Gateway зберігає довірену останню коректну коп
```
- **Згадки в метаданих**: нативні @-згадки (WhatsApp tap-to-mention, Telegram @bot тощо)
- **Текстові шаблони**: безпечні шаблони regex у `mentionPatterns`
- Див. [повний довідник](/uk/gateway/config-channels#group-chat-mention-gating) для перевизначень по channel і режиму self-chat.
- **Текстові шаблони**: безпечні regex-шаблони в `mentionPatterns`
- Перегляньте [повний довідник](/uk/gateway/config-channels#group-chat-mention-gating) для перевизначень по каналах і режиму self-chat.
</Accordion>
<Accordion title="Обмежити Skills для кожного агента">
Використовуйте `agents.defaults.skills` для спільної базової конфігурації, а потім перевизначайте
конкретних агентів через `agents.list[].skills`:
Використовуйте `agents.defaults.skills` для спільного базового набору, а потім перевизначайте
окремих агентів через `agents.list[].skills`:
```json5
{
@ -216,24 +219,24 @@ Gateway зберігає довірену останню коректну коп
skills: ["github", "weather"],
},
list: [
{ id: "writer" }, // успадковує github, weather
{ id: "docs", skills: ["docs-search"] }, // замінює значення за замовчуванням
{ id: "locked-down", skills: [] }, // без Skills
{ id: "writer" }, // inherits github, weather
{ id: "docs", skills: ["docs-search"] }, // replaces defaults
{ id: "locked-down", skills: [] }, // no skills
],
},
}
```
- Не задавайте `agents.defaults.skills`, щоб Skills за замовчуванням були необмеженими.
- Не задавайте `agents.list[].skills`, щоб успадкувати значення за замовчуванням.
- Задайте `agents.list[].skills: []`, щоб не було Skills.
- Див. [Skills](/uk/tools/skills), [конфігурацію Skills](/uk/tools/skills-config) і
[Довідник із конфігурації](/uk/gateway/config-agents#agents-defaults-skills).
- Не вказуйте `agents.defaults.skills`, якщо за замовчуванням Skills не мають бути обмежені.
- Не вказуйте `agents.list[].skills`, щоб успадкувати типові значення.
- Установіть `agents.list[].skills: []`, щоб не використовувати жодних Skills.
- Перегляньте [Skills](/uk/tools/skills), [конфігурацію Skills](/uk/tools/skills-config) і
[довідник з конфігурації](/uk/gateway/config-agents#agents-defaults-skills).
</Accordion>
<Accordion title="Налаштувати моніторинг стану channels Gateway">
Керуйте тим, наскільки агресивно gateway перезапускає channels, які виглядають застарілими:
<Accordion title="Налаштувати моніторинг стану каналів gateway">
Керуйте тим, наскільки агресивно gateway перезапускає канали, які виглядають застарілими:
```json5
{
@ -255,15 +258,15 @@ Gateway зберігає довірену останню коректну коп
}
```
- Установіть `gateway.channelHealthCheckMinutes: 0`, щоб глобально вимкнути перезапуски через моніторинг стану.
- Установіть `gateway.channelHealthCheckMinutes: 0`, щоб глобально вимкнути перезапуски моніторингу стану.
- `channelStaleEventThresholdMinutes` має бути більшим або дорівнювати інтервалу перевірки.
- Використовуйте `channels.<provider>.healthMonitor.enabled` або `channels.<provider>.accounts.<id>.healthMonitor.enabled`, щоб вимкнути автоперезапуски для одного channel або облікового запису без вимкнення глобального монітора.
- Див. [Health Checks](/uk/gateway/health) для операційного налагодження та [повний довідник](/uk/gateway/configuration-reference#gateway) для всіх полів.
- Використовуйте `channels.<provider>.healthMonitor.enabled` або `channels.<provider>.accounts.<id>.healthMonitor.enabled`, щоб вимкнути автоперезапуски для одного каналу чи облікового запису без вимкнення глобального монітора.
- Перегляньте [Health Checks](/uk/gateway/health) для операційної діагностики та [повний довідник](/uk/gateway/configuration-reference#gateway) для всіх полів.
</Accordion>
<Accordion title="Налаштувати сесії та скидання">
Сесії керують безперервністю й ізоляцією розмов:
Сесії керують безперервністю розмови та ізоляцією:
```json5
{
@ -284,14 +287,14 @@ Gateway зберігає довірену останню коректну коп
```
- `dmScope`: `main` (спільна) | `per-peer` | `per-channel-peer` | `per-account-channel-peer`
- `threadBindings`: глобальні значення за замовчуванням для маршрутизації сесій, прив’язаних до тредів (Discord підтримує `/focus`, `/unfocus`, `/agents`, `/session idle` і `/session max-age`).
- Див. [Керування сесіями](/uk/concepts/session) для областей дії, зв’язків identity і політики надсилання.
- Див. [повний довідник](/uk/gateway/config-agents#session) для всіх полів.
- `threadBindings`: глобальні типові значення для маршрутизації сесій, прив’язаних до потоків (Discord підтримує `/focus`, `/unfocus`, `/agents`, `/session idle` і `/session max-age`).
- Перегляньте [Керування сесіями](/uk/concepts/session) для області дії, зв’язків ідентичностей і політики надсилання.
- Перегляньте [повний довідник](/uk/gateway/config-agents#session) для всіх полів.
</Accordion>
<Accordion title="Увімкнути ізоляцію">
Запускайте сесії агентів в ізольованих sandbox runtime:
Запускайте сесії агентів в ізольованих середовищах виконання sandbox:
```json5
{
@ -308,14 +311,14 @@ Gateway зберігає довірену останню коректну коп
Спочатку зберіть образ: `scripts/sandbox-setup.sh`
Див. [Ізоляція](/uk/gateway/sandboxing) для повного посібника та [повний довідник](/uk/gateway/config-agents#agentsdefaultssandbox) для всіх параметрів.
Перегляньте [Ізоляція](/uk/gateway/sandboxing) для повного посібника та [повний довідник](/uk/gateway/config-agents#agentsdefaultssandbox) для всіх параметрів.
</Accordion>
<Accordion title="Увімкнути relay-backed push для офіційних збірок iOS">
Relay-backed push налаштовується в `openclaw.json`.
<Accordion title="Увімкнути push через relay для офіційних збірок iOS">
Push через relay налаштовується в `openclaw.json`.
Задайте це в конфігурації gateway:
Укажіть це в конфігурації gateway:
```json5
{
@ -324,7 +327,7 @@ Gateway зберігає довірену останню коректну коп
apns: {
relay: {
baseUrl: "https://relay.example.com",
// Необов’язково. Типово: 10000
// Optional. Default: 10000
timeoutMs: 10000,
},
},
@ -333,7 +336,7 @@ Gateway зберігає довірену останню коректну коп
}
```
Еквівалент через CLI:
Еквівалент CLI:
```bash
openclaw config set gateway.push.apns.relay.baseUrl https://relay.example.com
@ -341,35 +344,35 @@ Gateway зберігає довірену останню коректну коп
Що це робить:
- Дозволяє gateway надсилати `push.test`, сигнали пробудження й reconnect-wake через зовнішній relay.
- Використовує grant на надсилання в межах реєстрації, який пересилає спарений застосунок iOS. Gateway не потребує relay-токена масштабу всього розгортання.
- Прив’язує кожну relay-backed реєстрацію до identity gateway, з якою було спарено застосунок iOS, тож інший gateway не може повторно використати збережену реєстрацію.
- Зберігає локальні/ручні збірки iOS на прямому APNs. Relay-backed надсилання застосовуються лише до офіційно розповсюджуваних збірок, які зареєструвалися через relay.
- Має збігатися з базовим URL relay, вбудованим в офіційну/TestFlight збірку iOS, щоб трафік реєстрації та надсилання досягав того самого розгортання relay.
- Дозволяє gateway надсилати `push.test`, сигнали пробудження та сигнали повторного підключення через зовнішній relay.
- Використовує право надсилання, прив’язане до реєстрації, яке пересилає спарений застосунок iOS. Gateway не потрібен relay-токен рівня всього розгортання.
- Прив’язує кожну реєстрацію через relay до ідентичності gateway, з якою було спарено застосунок iOS, тому інший gateway не зможе повторно використати збережену реєстрацію.
- Залишає локальні/ручні збірки iOS на прямому APNs. Надсилання через relay застосовується лише до офіційно розповсюджуваних збірок, які зареєструвалися через relay.
- Має збігатися з базовим URL relay, вбудованим в офіційну/TestFlight збірку iOS, щоб трафік реєстрації та надсилання потрапляв до одного й того самого розгортання relay.
Наскрізний процес:
Наскрізний потік:
1. Установіть офіційну/TestFlight збірку iOS, скомпільовану з тим самим базовим URL relay.
2. Налаштуйте `gateway.push.apns.relay.baseUrl` на gateway.
3. Спарте застосунок iOS із gateway і дайте підключитися сесіям node та оператора.
4. Застосунок iOS отримує identity gateway, реєструється в relay за допомогою App Attest і квитанції застосунку, а потім публікує relay-backed payload `push.apns.register` до спареного gateway.
5. Gateway зберігає relay handle і send grant, а потім використовує їх для `push.test`, сигналів пробудження й reconnect-wake.
3. Спарте застосунок iOS із gateway і дочекайтеся підключення як node-, так і operator-сесій.
4. Застосунок iOS отримує ідентичність gateway, реєструється в relay за допомогою App Attest та квитанції застосунку, а потім публікує корисне навантаження `push.apns.register` через relay до спареного gateway.
5. Gateway зберігає relay handle і право надсилання, а потім використовує їх для `push.test`, сигналів пробудження та сигналів повторного підключення.
Експлуатаційні примітки:
Операційні примітки:
- Якщо ви перемикаєте застосунок iOS на інший gateway, перепідключіть застосунок, щоб він міг опублікувати нову relay-реєстрацію, прив’язану до цього gateway.
- Якщо ви випускаєте нову збірку iOS, яка вказує на інше розгортання relay, застосунок оновлює свій кешований relay-registration замість повторного використання старого relay origin.
- Якщо ви випускаєте нову збірку iOS, яка вказує на інше розгортання relay, застосунок оновлює кешовану relay-реєстрацію замість повторного використання старого relay origin.
Примітка щодо сумісності:
- `OPENCLAW_APNS_RELAY_BASE_URL` і `OPENCLAW_APNS_RELAY_TIMEOUT_MS` усе ще працюють як тимчасові перевизначення через env.
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` лишається запасним варіантом для розробки лише на loopback; не зберігайте URL relay з HTTP у конфігурації.
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` залишається запасним варіантом для розробки лише через loopback; не зберігайте HTTP URL relay у конфігурації.
Див. [Застосунок iOS](/uk/platforms/ios#relay-backed-push-for-official-builds) для наскрізного процесу та [Процес автентифікації та довіри](/uk/platforms/ios#authentication-and-trust-flow) для моделі безпеки relay.
Перегляньте [Застосунок iOS](/uk/platforms/ios#relay-backed-push-for-official-builds) для наскрізного потоку та [Потік автентифікації й довіри](/uk/platforms/ios#authentication-and-trust-flow) для моделі безпеки relay.
</Accordion>
<Accordion title="Налаштувати Heartbeat (періодичні перевірки)">
<Accordion title="Налаштувати Heartbeat (періодичні перевірки зв’язку)">
```json5
{
agents: {
@ -386,11 +389,11 @@ Gateway зберігає довірену останню коректну коп
- `every`: рядок тривалості (`30m`, `2h`). Установіть `0m`, щоб вимкнути.
- `target`: `last` | `none` | `<channel-id>` (наприклад, `discord`, `matrix`, `telegram` або `whatsapp`)
- `directPolicy`: `allow` (типово) або `block` для цілей Heartbeat у стилі DM
- Див. [Heartbeat](/uk/gateway/heartbeat) для повного посібника.
- Перегляньте [Heartbeat](/uk/gateway/heartbeat) для повного посібника.
</Accordion>
<Accordion title="Налаштувати Cron-завдання">
<Accordion title="Налаштувати Cron jobs">
```json5
{
cron: {
@ -405,14 +408,14 @@ Gateway зберігає довірену останню коректну коп
}
```
- `sessionRetention`: очищати завершені ізольовані сесії запусків із `sessions.json` (типово `24h`; установіть `false`, щоб вимкнути).
- `runLog`: очищати `cron/runs/<jobId>.jsonl` за розміром і кількістю рядків, які зберігаються.
- Див. [Cron-завдання](/uk/automation/cron-jobs) для огляду можливостей і прикладів CLI.
- `sessionRetention`: видаляти завершені ізольовані сесії запуску з `sessions.json` (типово `24h`; установіть `false`, щоб вимкнути).
- `runLog`: очищати `cron/runs/<jobId>.jsonl` за розміром і кількістю збережених рядків.
- Перегляньте [Cron jobs](/uk/automation/cron-jobs) для огляду функції та прикладів CLI.
</Accordion>
<Accordion title="Налаштувати Webhook (hooks)">
Увімкніть HTTP-ендпоїнти Webhook на Gateway:
<Accordion title="Налаштувати Webhook (hooks)">
Увімкніть HTTP-ендпойнти Webhook на Gateway:
```json5
{
@ -436,20 +439,20 @@ Gateway зберігає довірену останню коректну коп
```
Примітка щодо безпеки:
- Вважайте весь вміст payload hook/Webhook недовіреним входом.
- Використовуйте окремий `hooks.token`; не використовуйте спільно Gateway token.
- Автентифікація hook підтримує лише заголовки (`Authorization: Bearer ...` або `x-openclaw-token`); токени в query string відхиляються.
- `hooks.path` не може бути `/`; залишайте вхід Webhook на окремому підшляху, наприклад `/hooks`.
- Залишайте прапорці обходу небезпечного вмісту вимкненими (`hooks.gmail.allowUnsafeExternalContent`, `hooks.mappings[].allowUnsafeExternalContent`), якщо не виконуєте вузькоспеціалізоване налагодження.
- Якщо ви вмикаєте `hooks.allowRequestSessionKey`, також задайте `hooks.allowedSessionKeyPrefixes`, щоб обмежити ключі сесій, які може вибирати викликач.
- Для агентів, керованих hooks, віддавайте перевагу сильним сучасним рівням моделей і суворій політиці інструментів (наприклад, лише обмін повідомленнями плюс sandboxing, де це можливо).
- Уважайте весь вміст payload hook/webhook ненадійним вхідним даним.
- Використовуйте окремий `hooks.token`; не використовуйте повторно спільний токен Gateway.
- Автентифікація hook виконується лише через заголовки (`Authorization: Bearer ...` або `x-openclaw-token`); токени в рядку запиту відхиляються.
- `hooks.path` не може бути `/`; використовуйте окремий підшлях для вхідних webhook, наприклад `/hooks`.
- Тримайте прапорці обходу небезпечного вмісту вимкненими (`hooks.gmail.allowUnsafeExternalContent`, `hooks.mappings[].allowUnsafeExternalContent`), якщо не виконуєте вузькоспрямовану діагностику.
- Якщо ви вмикаєте `hooks.allowRequestSessionKey`, також установіть `hooks.allowedSessionKeyPrefixes`, щоб обмежити ключі сесій, які може вибирати викликальна сторона.
- Для агентів, керованих hook, віддавайте перевагу сильним сучасним рівням моделей і суворій політиці інструментів (наприклад, лише обмін повідомленнями плюс sandbox, де це можливо).
Див. [повний довідник](/uk/gateway/configuration-reference#hooks) для всіх параметрів мапінгу та інтеграції Gmail.
Перегляньте [повний довідник](/uk/gateway/configuration-reference#hooks) для всіх параметрів mappings і інтеграції Gmail.
</Accordion>
<Accordion title="Налаштувати маршрутизацію кількох агентів">
Запускайте кілька ізольованих агентів з окремими workspace і сесіями:
<Accordion title="Налаштувати маршрутизацію для кількох агентів">
Запускайте кількох ізольованих агентів з окремими робочими просторами та сесіями:
```json5
{
@ -466,12 +469,12 @@ Gateway зберігає довірену останню коректну коп
}
```
Див. [Кілька агентів](/uk/concepts/multi-agent) і [повний довідник](/uk/gateway/config-agents#multi-agent-routing) для правил binding і профілів доступу для кожного агента.
Перегляньте [Multi-Agent](/uk/concepts/multi-agent) і [повний довідник](/uk/gateway/config-agents#multi-agent-routing) для правил bindings і профілів доступу для кожного агента.
</Accordion>
<Accordion title="Розділити конфігурацію на кілька файлів ($include)">
Використовуйте `$include`, щоб упорядковувати великі конфігурації:
Використовуйте `$include` для організації великих конфігурацій:
```json5
// ~/.openclaw/openclaw.json
@ -484,47 +487,52 @@ Gateway зберігає довірену останню коректну коп
}
```
- **Один файл**: замінює об’єкт, який його містить
- **Масив файлів**: глибоко об’єднується по порядку (пізніший має пріоритет)
- **Сусідні ключі**: об’єднуються після include (перевизначають включені значення)
- **Один файл**: замінює об’єкт-контейнер
- **Масив файлів**: глибоко зливається за порядком (пізніші мають пріоритет)
- **Сусідні ключі**: зливаються після include (перевизначають включені значення)
- **Вкладені include**: підтримуються до 10 рівнів вкладеності
- **Відносні шляхи**: розв’язуються відносно файла, що включає
- **Відносні шляхи**: обчислюються відносно файла, що включає
- **Записи, якими керує OpenClaw**: коли запис змінює лише один розділ верхнього рівня,
який підтримується include одного файла, наприклад `plugins: { $include: "./plugins.json5" }`,
що спирається на include з одним файлом, наприклад `plugins: { $include: "./plugins.json5" }`,
OpenClaw оновлює цей включений файл і залишає `openclaw.json` без змін
- **Непідтримуваний запис через include**: кореневі include, масиви include та include
із сусідніми перевизначеннями завершуються із закритою відмовою для записів, якими керує OpenClaw, замість
- **Непідтримуваний наскрізний запис**: кореневі include, масиви include та include
із сусідніми перевизначеннями завершуються безпечною відмовою для записів, якими керує OpenClaw, замість
сплощення конфігурації
- **Обробка помилок**: зрозумілі помилки для відсутніх файлів, помилок парсингу та циклічних include
- **Обробка помилок**: зрозумілі помилки для відсутніх файлів, помилок розбору та циклічних include
</Accordion>
</AccordionGroup>
## Гаряче перезавантаження конфігурації
Gateway стежить за `~/.openclaw/openclaw.json` і автоматично застосовує зміни — ручний перезапуск для більшості налаштувань не потрібен.
Gateway стежить за `~/.openclaw/openclaw.json` і автоматично застосовує зміни — для більшості налаштувань ручний перезапуск не потрібен.
Прямі редагування файла вважаються недовіреними, доки не пройдуть валідацію. Спостерігач
чекає, поки завершаться тимчасові записи/перейменування редактора, читає фінальний файл і відхиляє
некоректні зовнішні редагування, відновлюючи останню коректну конфігурацію. Записи конфігурації,
якими керує OpenClaw, використовують той самий бар’єр схеми перед записом; руйнівні пошкодження, як-от
видалення `gateway.mode` або зменшення файла більш ніж удвічі, відхиляються
Прямі редагування файлу вважаються ненадійними, доки не пройдуть валідацію. Спостерігач
чекає, поки тимчасові записи/перейменування редактора стабілізуються, читає
підсумковий файл і відхиляє недійсні зовнішні редагування, відновлюючи
останню відому справну конфігурацію. Записи конфігурації, якими керує OpenClaw,
використовують той самий бар’єр схеми перед записом; руйнівні перезаписи, такі
як видалення `gateway.mode` або зменшення файлу більш ніж наполовину, відхиляються
і зберігаються як `.rejected.*` для перевірки.
Якщо ви бачите в журналах `Config auto-restored from last-known-good` або
Виняток — локальні помилки валідації Plugin: якщо всі проблеми містяться в
`plugins.entries.<id>...`, перезавантаження зберігає поточну конфігурацію й повідомляє про проблему Plugin
замість відновлення `.last-good`.
Якщо в журналах ви бачите `Config auto-restored from last-known-good` або
`config reload restored last-known-good config`, перевірте відповідний файл
`.clobbered.*` поруч із `openclaw.json`, виправте відхилений payload, а потім виконайте
`openclaw config validate`. Див. [Усунення несправностей Gateway](/uk/gateway/troubleshooting#gateway-restored-last-known-good-config)
`openclaw config validate`. Перегляньте [усунення проблем Gateway](/uk/gateway/troubleshooting#gateway-restored-last-known-good-config)
для контрольного списку відновлення.
### Режими перезавантаження
| Режим | Поведінка |
| ---------------------- | --------------------------------------------------------------------------------------- |
| **`hybrid`** (типово) | Миттєво застосовує безпечні зміни. Автоматично перезапускається для критичних. |
| **`hot`** | Застосовує лише безпечні зміни без перезапуску. Пише попередження, коли потрібен перезапуск — ви виконуєте його самі. |
| **`hybrid`** (типово) | Миттєво гаряче застосовує безпечні зміни. Автоматично перезапускається для критичних. |
| **`hot`** | Гаряче застосовує лише безпечні зміни. Пише попередження, коли потрібен перезапуск — ви виконуєте його самі. |
| **`restart`** | Перезапускає Gateway при будь-якій зміні конфігурації, безпечній чи ні. |
| **`off`** | Вимикає спостереження за файлами. Зміни набирають чинності під час наступного ручного перезапуску. |
| **`off`** | Вимикає стеження за файлом. Зміни набувають чинності під час наступного ручного перезапуску. |
```json5
{
@ -540,43 +548,43 @@ Gateway стежить за `~/.openclaw/openclaw.json` і автоматичн
| Категорія | Поля | Потрібен перезапуск? |
| ------------------ | ----------------------------------------------------------------- | -------------------- |
| Channels | `channels.*`, `web` (WhatsApp) — усі вбудовані та Plugin channels | Ні |
| Agent & models | `agent`, `agents`, `models`, `routing` | Ні |
| Automation | `hooks`, `cron`, `agent.heartbeat` | Ні |
| Sessions & messages | `session`, `messages` | Ні |
| Tools & media | `tools`, `browser`, `skills`, `audio`, `talk` | Ні |
| UI & misc | `ui`, `logging`, `identity`, `bindings` | Ні |
| Gateway server | `gateway.*` (port, bind, auth, tailscale, TLS, HTTP) | **Так** |
| Infrastructure | `discovery`, `canvasHost`, `plugins` | **Так** |
| Канали | `channels.*`, `web` (WhatsApp) — усі вбудовані канали та канали Plugin | Ні |
| Агенти й моделі | `agent`, `agents`, `models`, `routing` | Ні |
| Автоматизація | `hooks`, `cron`, `agent.heartbeat` | Ні |
| Сесії та повідомлення | `session`, `messages` | Ні |
| Інструменти й медіа | `tools`, `browser`, `skills`, `audio`, `talk` | Ні |
| UI та інше | `ui`, `logging`, `identity`, `bindings` | Ні |
| Сервер Gateway | `gateway.*` (port, bind, auth, tailscale, TLS, HTTP) | **Так** |
| Інфраструктура | `discovery`, `canvasHost`, `plugins` | **Так** |
<Note>
`gateway.reload` і `gateway.remote` — винятки; їх зміна **не** спричиняє перезапуск.
`gateway.reload` і `gateway.remote` — винятки: їх зміна **не** спричиняє перезапуск.
</Note>
### Планування перезавантаження
Коли ви редагуєте вихідний файл, на який є посилання через `$include`, OpenClaw планує
перезавантаження на основі макета, заданого в джерелі, а не сплощеного представлення в пам’яті.
Це робить рішення щодо гарячого перезавантаження (гаряче застосування чи перезапуск) передбачуваними навіть тоді, коли
перезавантаження на основі компонування, створеного у вихідному файлі, а не сплощеного подання в пам’яті.
Це робить рішення гарячого перезавантаження (гаряче застосування чи перезапуск) передбачуваними, навіть коли
один розділ верхнього рівня живе у власному включеному файлі, наприклад
`plugins: { $include: "./plugins.json5" }`. Планування перезавантаження завершується із закритою відмовою, якщо
макет джерела неоднозначний.
`plugins: { $include: "./plugins.json5" }`. Якщо компонування вихідного коду неоднозначне, планування перезавантаження безпечно завершується відмовою.
## RPC конфігурації (програмні оновлення)
Для інструментів, які записують конфігурацію через API gateway, віддавайте перевагу такому процесу:
Для інструментів, які записують конфігурацію через API gateway, віддавайте перевагу такому потоку:
- `config.schema.lookup` для перевірки одного піддерева (поверхневий вузол схеми + підсумки дочірніх елементів)
- `config.get` для отримання поточного знімка разом із `hash`
- `config.patch` для часткових оновлень (JSON merge patch: об’єкти об’єднуються, `null`
- `config.schema.lookup`, щоб перевірити одне піддерево (неглибокий вузол схеми + зведення
дочірніх елементів)
- `config.get`, щоб отримати поточний знімок разом із `hash`
- `config.patch` для часткових оновлень (JSON merge patch: об’єкти зливаються, `null`
видаляє, масиви замінюються)
- `config.apply` лише тоді, коли ви справді хочете замінити всю конфігурацію
- `update.run` для явного self-update з перезапуском
- `config.apply` лише якщо ви справді збираєтеся замінити всю конфігурацію
- `update.run` для явного самооновлення з подальшим перезапуском
<Note>
Записи control-plane (`config.apply`, `config.patch`, `update.run`) мають
rate-limit: 3 запити на 60 секунд для кожного `deviceId+clientIp`. Запити на перезапуск
об’єднуються, а потім застосовують cooldown у 30 секунд між циклами перезапуску.
обмеження частоти: 3 запити за 60 секунд для кожної пари `deviceId+clientIp`. Запити
на перезапуск об’єднуються, а потім застосовується 30-секундний cooldown між циклами перезапуску.
</Note>
Приклад часткового patch:
@ -590,17 +598,17 @@ openclaw gateway call config.patch --params '{
```
І `config.apply`, і `config.patch` приймають `raw`, `baseHash`, `sessionKey`,
`note` і `restartDelayMs`. `baseHash` обов’язковий для обох методів, якщо
`note` і `restartDelayMs`. `baseHash` є обов’язковим для обох методів, якщо
конфігурація вже існує.
## Змінні середовища
OpenClaw читає env vars із батьківського процесу, а також із:
OpenClaw читає змінні середовища з батьківського процесу, а також із:
- `.env` у поточному робочому каталозі (якщо присутній)
- `~/.openclaw/.env` (глобальний запасний варіант)
- `.env` з поточного робочого каталогу (якщо є)
- `~/.openclaw/.env` (глобальний резервний варіант)
Жоден із цих файлів не перевизначає вже наявні env vars. Ви також можете задавати inline env vars у конфігурації:
Жоден із цих файлів не перевизначає наявні змінні середовища. Ви також можете задавати вбудовані змінні середовища в конфігурації:
```json5
{
@ -611,8 +619,8 @@ OpenClaw читає env vars із батьківського процесу, а
}
```
<Accordion title="Імпорт env із shell (необов’язково)">
Якщо це ввімкнено і очікувані ключі не задано, OpenClaw запускає вашу login shell і імпортує лише відсутні ключі:
<Accordion title="Імпорт змінних середовища оболонки (необов’язково)">
Якщо це ввімкнено й очікувані ключі не задано, OpenClaw запускає вашу login shell і імпортує лише відсутні ключі:
```json5
{
@ -622,11 +630,11 @@ OpenClaw читає env vars із батьківського процесу, а
}
```
Еквівалент env var: `OPENCLAW_LOAD_SHELL_ENV=1`
Еквівалент змінної середовища: `OPENCLAW_LOAD_SHELL_ENV=1`
</Accordion>
<Accordion title="Підстановка env var у значеннях конфігурації">
Посилайтеся на env vars у будь-якому рядковому значенні конфігурації через `${VAR_NAME}`:
<Accordion title="Підстановка змінних середовища у значеннях конфігурації">
Посилайтеся на змінні середовища в будь-якому рядковому значенні конфігурації через `${VAR_NAME}`:
```json5
{
@ -639,14 +647,14 @@ OpenClaw читає env vars із батьківського процесу, а
- Зіставляються лише назви у верхньому регістрі: `[A-Z_][A-Z0-9_]*`
- Відсутні/порожні змінні спричиняють помилку під час завантаження
- Екрануйте через `$${VAR}` для літерального виводу
- Екрануйте через `$${VAR}` для буквального виводу
- Працює всередині файлів `$include`
- Inline-підстановка: `"${BASE}/v1"``"https://api.example.com/v1"`
- Вбудована підстановка: `"${BASE}/v1"``"https://api.example.com/v1"`
</Accordion>
<Accordion title="SecretRef (env, file, exec)">
Для полів, які підтримують об’єкти SecretRef, можна використовувати:
<Accordion title="Посилання на секрети (env, file, exec)">
Для полів, які підтримують об’єкти SecretRef, ви можете використовувати:
```json5
{
@ -678,22 +686,22 @@ OpenClaw читає env vars із батьківського процесу, а
}
```
Докладніше про SecretRef (включно з `secrets.providers` для `env`/`file`/`exec`) див. у [Керування секретами](/uk/gateway/secrets).
Докладно про SecretRef (зокрема `secrets.providers` для `env`/`file`/`exec`) див. у [Керування секретами](/uk/gateway/secrets).
Підтримувані шляхи облікових даних наведено в [Поверхня облікових даних SecretRef](/uk/reference/secretref-credential-surface).
</Accordion>
Див. [Environment](/uk/help/environment) для повного порядку пріоритетів і джерел.
Перегляньте [Середовище](/uk/help/environment) для повного опису пріоритетів і джерел.
## Повний довідник
Повний довідник по полях див. у **[Довідник із конфігурації](/uk/gateway/configuration-reference)**.
Повний довідник для кожного поля див. у **[Довідник з конфігурації](/uk/gateway/configuration-reference)**.
---
овязане: [Приклади конфігурації](/uk/gateway/configuration-examples) · [Довідник із конфігурації](/uk/gateway/configuration-reference) · [Doctor](/uk/gateway/doctor)_
овязане: [Приклади конфігурації](/uk/gateway/configuration-examples) · [Довідник з конфігурації](/uk/gateway/configuration-reference) · [Doctor](/uk/gateway/doctor)_
## Пов’язане
- [Довідник із конфігурації](/uk/gateway/configuration-reference)
- [Приклади конфігурації](/uk/gateway/configuration-examples)
- [Runbook Gateway](/uk/gateway)
- [довідник з конфігурації](/uk/gateway/configuration-reference)
- [приклади конфігурації](/uk/gateway/configuration-examples)
- [посібник з експлуатації Gateway](/uk/gateway)

View File

@ -1,22 +1,22 @@
---
read_when:
- Центр усунення несправностей направив вас сюди для глибшої діагностики
- Вам потрібні стабільні розділи посібника з усунення несправностей, побудовані за симптомами, з точними командами
- Вам потрібні стабільні розділи посібника на основі симптомів із точними командами
summary: Поглиблений посібник з усунення несправностей для Gateway, каналів, автоматизації, Node і браузера
title: Усунення несправностей
x-i18n:
generated_at: "2026-04-24T07:42:15Z"
generated_at: "2026-04-25T03:24:44Z"
model: gpt-5.4
provider: openai
source_hash: 20066bdab03f05304b3a620fbadc38e4dc74b740da151c58673dcf5196e5f1e1
source_hash: 14565a260226cbd3c78e1449621da5ff0bb8f580d3f10345a7d8650db9f706a8
source_path: gateway/troubleshooting.md
workflow: 15
---
# Усунення несправностей Gateway
Ця сторінка — поглиблений посібник з усунення несправностей.
Почніть із [/help/troubleshooting](/uk/help/troubleshooting), якщо спочатку хочете пройти швидкий потік тріажу.
Ця сторінка — поглиблений посібник.
Почніть із [/help/troubleshooting](/uk/help/troubleshooting), якщо спочатку хочете пройти швидкий сценарій первинної діагностики.
## Сходинки команд
@ -33,13 +33,13 @@ openclaw channels status --probe
Очікувані ознаки справного стану:
- `openclaw gateway status` показує `Runtime: running`, `Connectivity probe: ok` і рядок `Capability: ...`.
- `openclaw doctor` не повідомляє про блокувальні проблеми конфігурації/сервісу.
- `openclaw doctor` не повідомляє про блокувальні проблеми конфігурації або сервісу.
- `openclaw channels status --probe` показує живий стан транспорту для кожного облікового запису і,
де це підтримується, результати probe/audit, як-от `works` або `audit ok`.
## Додаткове використання Anthropic 429 потрібне для довгого контексту
## Anthropic 429: для довгого контексту потрібне додаткове використання
Використовуйте це, коли журнали/помилки містять:
Використовуйте цей розділ, коли в логах/помилках є:
`HTTP 429: rate_limit_error: Extra usage is required for long context requests`.
```bash
@ -48,31 +48,31 @@ openclaw models status
openclaw config get agents.defaults.models
```
Шукайте:
Зверніть увагу на таке:
- Вибрана модель Anthropic Opus/Sonnet має `params.context1m: true`.
- Поточні облікові дані Anthropic не мають права на використання довгого контексту.
- Запити падають лише під час довгих сесій/запусків моделі, яким потрібен бета-шлях 1M.
- Запити завершуються помилкою лише в довгих сесіях/запусках моделі, яким потрібен шлях 1M beta.
Варіанти виправлення:
1. Вимкніть `context1m` для цієї моделі, щоб повернутися до звичайного вікна контексту.
2. Використайте облікові дані Anthropic, які мають право на запити з довгим контекстом, або перейдіть на Anthropic API key.
3. Налаштуйте резервні моделі, щоб запуски тривали, коли Anthropic відхиляє запити з довгим контекстом.
3. Налаштуйте резервні моделі, щоб запуски продовжувалися, коли запити Anthropic з довгим контекстом відхиляються.
Пов’язане:
Пов’язано:
- [/providers/anthropic](/uk/providers/anthropic)
- [/reference/token-use](/uk/reference/token-use)
- [/help/faq-first-run#why-am-i-seeing-http-429-ratelimiterror-from-anthropic](/uk/help/faq-first-run#why-am-i-seeing-http-429-ratelimiterror-from-anthropic)
## Локальний OpenAI-сумісний backend проходить прямі probe, але запуски агентів падають
## Локальний OpenAI-сумісний бекенд проходить прямі probe, але запуски агента завершуються помилкою
Використовуйте це, коли:
Використовуйте цей розділ, коли:
- `curl ... /v1/models` працює
- малі прямі виклики `/v1/chat/completions` працюють
- запуски моделей OpenClaw падають лише під час звичайних ходів агента
- запуски моделі OpenClaw завершуються помилкою лише під час звичайних ходів агента
```bash
curl http://127.0.0.1:1234/v1/models
@ -83,38 +83,39 @@ openclaw infer model run --model <provider/model> --prompt "hi" --json
openclaw logs --follow
```
Шукайте:
Зверніть увагу на таке:
- прямі малі виклики успішні, але запуски OpenClaw падають лише на більших запитах
- помилки backend про те, що `messages[].content` очікує рядок
- збої backend, які з’являються лише з більшою кількістю токенів у запиті або з повними
запитами середовища виконання агента
- малі прямі виклики успішні, але запуски OpenClaw завершуються помилкою лише на більших prompt
- помилки бекенда про те, що `messages[].content` очікує рядок
- збої бекенда, які виникають лише за більших значень prompt-token або повних
prompt середовища виконання агента
Поширені ознаки:
- `messages[...].content: invalid type: sequence, expected a string`backend
- `messages[...].content: invalid type: sequence, expected a string`бекенд
відхиляє структуровані частини вмісту Chat Completions. Виправлення: встановіть
`models.providers.<provider>.models[].compat.requiresStringContent: true`.
- прямі малі запити успішні, але запуски агентів OpenClaw падають через збої backend/моделі
(наприклад, Gemma у деяких збірках `inferrs`) → транспорт OpenClaw,
імовірно, уже налаштований правильно; backend падає через форму більшого
запиту середовища виконання агента.
- малі прямі запити успішні, але запуски агента OpenClaw завершуються помилкою через збої бекенда/моделі
(наприклад, Gemma на деяких збірках `inferrs`) → транспорт OpenClaw
імовірно вже налаштований правильно; збій виникає в бекенді на більшій формі prompt
середовища виконання агента.
- після вимкнення інструментів збоїв меншає, але вони не зникають → схеми інструментів
були частиною навантаження, але решта проблеми все ще лежить у вищестоячій
місткості моделі/сервера або в помилці backend.
були частиною навантаження, але залишкова проблема все ще полягає в обмеженнях
upstream моделі/сервера або в помилці бекенда.
Варіанти виправлення:
1. Встановіть `compat.requiresStringContent: true` для backend Chat Completions, які підтримують лише рядки.
2. Встановіть `compat.supportsTools: false` для моделей/backend, які не можуть
1. Установіть `compat.requiresStringContent: true` для бекендів Chat Completions, що підтримують лише рядки.
2. Установіть `compat.supportsTools: false` для моделей/бекендів, які не можуть
надійно обробляти поверхню схем інструментів OpenClaw.
3. За можливості зменште навантаження запиту: менший bootstrap робочого простору, коротша
історія сесії, легша локальна модель або backend із кращою підтримкою довгого контексту.
4. Якщо малі прямі запити й далі проходять, а ходи агентів OpenClaw все ще падають
усередині backend, розглядайте це як обмеження вищестоячого сервера/моделі й
подайте туди відтворюваний приклад із прийнятою формою payload.
3. Де можливо, зменште навантаження від prompt: менший bootstrap робочого простору, коротша
історія сесії, легша локальна модель або бекенд із кращою підтримкою
довгого контексту.
4. Якщо малі прямі запити й далі успішні, а ходи агента OpenClaw усе ще викликають збій
усередині бекенда, вважайте це обмеженням upstream сервера/моделі та
створіть там відтворюваний приклад із прийнятою формою payload.
Пов’язане:
Пов’язано:
- [/gateway/local-models](/uk/gateway/local-models)
- [/gateway/configuration](/uk/gateway/configuration)
@ -122,7 +123,7 @@ openclaw logs --follow
## Немає відповідей
Якщо канали підняті, але ніхто не відповідає, перевірте маршрутизацію та політики, перш ніж щось перепідключати.
Якщо канали працюють, але відповідей немає, перш ніж щось перепідключати, перевірте маршрутизацію та політику.
```bash
openclaw status
@ -132,19 +133,19 @@ openclaw config get channels
openclaw logs --follow
```
Шукайте:
Зверніть увагу на таке:
- Pairing у стані очікування для відправників у DM.
- Вимогу згадки в групі (`requireMention`, `mentionPatterns`).
- Невідповідності allowlist каналу/групи.
- Очікування pair для відправників у DM.
- Обмеження згадками в групах (`requireMention`, `mentionPatterns`).
- Невідповідності списків дозволу для каналу/групи.
Поширені ознаки:
- `drop guild message (mention required` → повідомлення групи ігнорується, доки немає згадки.
- `drop guild message (mention required` → повідомлення групи ігнорується, доки не буде згадки.
- `pairing request` → відправнику потрібне схвалення.
- `blocked` / `allowlist` → відправника/канал було відфільтровано політикою.
Пов’язане:
Пов’язано:
- [/channels/troubleshooting](/uk/channels/troubleshooting)
- [/channels/pairing](/uk/channels/pairing)
@ -152,7 +153,7 @@ openclaw logs --follow
## Підключення dashboard/control UI
Коли dashboard/control UI не може підключитися, перевірте URL, режим автентифікації та припущення щодо безпечного контексту.
Якщо dashboard/control UI не підключається, перевірте URL, режим auth і припущення щодо безпечного контексту.
```bash
openclaw gateway status
@ -162,49 +163,49 @@ openclaw doctor
openclaw gateway status --json
```
Шукайте:
Зверніть увагу на таке:
- Правильний URL probe і URL dashboard.
- Невідповідність режиму автентифікації/токена між клієнтом і Gateway.
- Правильний probe URL і dashboard URL.
- Невідповідність режиму auth/token між клієнтом і Gateway.
- Використання HTTP там, де потрібна ідентичність пристрою.
Поширені ознаки:
- `device identity required` → небезпечний контекст або відсутня автентифікація пристрою.
- `device identity required` → небезпечний контекст або відсутня auth пристрою.
- `origin not allowed``Origin` браузера відсутній у `gateway.controlUi.allowedOrigins`
(або ви підключаєтеся з не-loopback browser origin без явного
allowlist).
(або ви підключаєтеся з не-loopback походження браузера без явного
списку дозволу).
- `device nonce required` / `device nonce mismatch` → клієнт не завершує
challenge-based потік автентифікації пристрою (`connect.challenge` + `device.nonce`).
challenge-based потік auth пристрою (`connect.challenge` + `device.nonce`).
- `device signature invalid` / `device signature expired` → клієнт підписав неправильний
payload (або використав застарілу часову мітку) для поточного рукостискання.
payload (або використав застарілу часову мітку) для поточного handshake.
- `AUTH_TOKEN_MISMATCH` з `canRetryWithDeviceToken=true` → клієнт може виконати одну довірену повторну спробу з кешованим токеном пристрою.
- Ця повторна спроба з кешованим токеном повторно використовує кешований набір scope, збережений разом
із paired device token. Виклики з явними `deviceToken` / явними `scopes` зберігають свій
запитаний набір scope.
- Поза цим шляхом повторної спроби пріоритет автентифікації під час підключення такий: спочатку явний shared
token/password, потім явний `deviceToken`, потім збережений токен пристрою,
із pair токеном пристрою. Виклики з явним `deviceToken` / явними `scopes` натомість
зберігають запитаний ними набір scope.
- Поза цим шляхом повторної спроби пріоритет auth під час підключення такий: явний спільний
токен/пароль спочатку, потім явний `deviceToken`, потім збережений токен пристрою,
потім bootstrap token.
- На асинхронному шляху Tailscale Serve Control UI невдалі спроби для того самого
`{scope, ip}` серіалізуються до того, як обмежувач зафіксує невдачу. Тому дві некоректні
одночасні повторні спроби від того самого клієнта можуть дати `retry later`
`{scope, ip}` серіалізуються до того, як обмежувач зафіксує невдачу. Тому дві
одночасні хибні повторні спроби від того самого клієнта можуть показати `retry later`
на другій спробі замість двох звичайних невідповідностей.
- `too many failed authentication attempts (retry later)` від loopback-клієнта з browser-origin
→ повторні невдалі спроби з того самого нормалізованого `Origin` тимчасово
блокуються; інший localhost origin використовує окремий bucket.
- повторюваний `unauthorized` після цієї повторної спроби → розсинхронізація shared token/device token; оновіть конфігурацію токена та за потреби знову схваліть/перевипустіть токен пристрою.
- `gateway connect failed:` → неправильний хост/порт/url призначення.
- `too many failed authentication attempts (retry later)` від loopback-клієнта з походженням браузера
→ повторні невдалі спроби з того самого нормалізованого `Origin` тимчасово блокуються;
інше localhost-походження використовує окремий bucket.
- повторюваний `unauthorized` після цієї повторної спроби → розсинхронізація shared token/device token; оновіть конфігурацію токена та за потреби повторно схваліть/перевипустіть токен пристрою.
- `gateway connect failed:` → неправильний host/port/url призначення.
### Швидка мапа кодів деталей автентифікації
### Швидка карта кодів деталей auth
Використовуйте `error.details.code` із невдалої відповіді `connect`, щоб вибрати наступну дію:
Використовуйте `error.details.code` з невдалої відповіді `connect`, щоб вибрати наступну дію:
| Код деталей | Значення | Рекомендована дія |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `AUTH_TOKEN_MISSING` | Клієнт не надіслав обов’язковий shared token. | Вставте/задайте токен у клієнті та повторіть спробу. Для шляхів dashboard: `openclaw config get gateway.auth.token`, а потім вставте його в налаштуваннях Control UI. |
| `AUTH_TOKEN_MISMATCH` | Shared token не збігся з токеном автентифікації Gateway. | Якщо `canRetryWithDeviceToken=true`, дозвольте одну довірену повторну спробу. Повторні спроби з кешованим токеном повторно використовують збережені схвалені scope; виклики з явними `deviceToken` / `scopes` зберігають запитаний scope. Якщо все одно не працює, виконайте [контрольний список відновлення після розсинхронізації токена](/uk/cli/devices#token-drift-recovery-checklist). |
| `AUTH_DEVICE_TOKEN_MISMATCH` | Кешований токен для конкретного пристрою застарів або був відкликаний. | Перевипустіть/повторно схваліть токен пристрою за допомогою [CLI пристроїв](/uk/cli/devices), а потім перепідключіться. |
| `PAIRING_REQUIRED` | Ідентичність пристрою потребує схвалення. Перевірте `error.details.reason` для `not-paired`, `scope-upgrade`, `role-upgrade` або `metadata-upgrade`, і використовуйте `requestId` / `remediationHint`, якщо вони є. | Схваліть запит, що очікує: `openclaw devices list`, потім `openclaw devices approve <requestId>`. Оновлення scope/ролей використовують той самий потік після того, як ви перевірите запитаний доступ. |
| Detail code | Значення | Рекомендована дія |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `AUTH_TOKEN_MISSING` | Клієнт не надіслав обов’язковий shared token. | Вставте/встановіть токен у клієнті й повторіть спробу. Для шляхів dashboard: `openclaw config get gateway.auth.token`, потім вставте його в налаштування Control UI. |
| `AUTH_TOKEN_MISMATCH` | Shared token не збігається з auth token Gateway. | Якщо `canRetryWithDeviceToken=true`, дозвольте одну довірену повторну спробу. Повторні спроби з кешованим токеном повторно використовують збережені схвалені scope; виклики з явними `deviceToken` / `scopes` зберігають запитаний набір scope. Якщо помилка лишається, виконайте [контрольний список відновлення після розсинхронізації токена](/uk/cli/devices#token-drift-recovery-checklist). |
| `AUTH_DEVICE_TOKEN_MISMATCH` | Кешований токен для окремого пристрою застарів або був відкликаний. | Перевипустіть/повторно схваліть токен пристрою за допомогою [CLI для пристроїв](/uk/cli/devices), а потім підключіться знову. |
| `PAIRING_REQUIRED` | Ідентичність пристрою потребує схвалення. Перевірте `error.details.reason` на значення `not-paired`, `scope-upgrade`, `role-upgrade` або `metadata-upgrade` і використовуйте `requestId` / `remediationHint`, якщо вони є. | Схваліть очікувальний запит: `openclaw devices list`, потім `openclaw devices approve <requestId>`. Оновлення scope/role використовують той самий потік після перевірки запитаного доступу. |
Перевірка міграції device auth v2:
@ -214,30 +215,30 @@ openclaw doctor
openclaw gateway status
```
Якщо журнали показують помилки nonce/signature, оновіть клієнт, що підключається, і перевірте, що він:
Якщо логи показують помилки nonce/signature, оновіть клієнт, що підключається, і перевірте, що він:
1. чекає на `connect.challenge`
1. очікує `connect.challenge`
2. підписує payload, прив’язаний до challenge
3. надсилає `connect.params.device.nonce` з тим самим nonce challenge
3. надсилає `connect.params.device.nonce` із тим самим nonce challenge
Якщо `openclaw devices rotate` / `revoke` / `remove` неочікувано заборонено:
- сесії paired-device token можуть керувати лише **власним** пристроєм, якщо
викликальник також не має `operator.admin`
- `openclaw devices rotate --scope ...` може запитувати лише ті operator scope,
які сесія викликальника вже має
- сесії з pair токеном пристрою можуть керувати лише **власним** пристроєм, якщо
виклик також не має `operator.admin`
- `openclaw devices rotate --scope ...` може запитувати лише ті scope оператора,
які сесія виклику вже має
Пов’язане:
Пов’язано:
- [/web/control-ui](/uk/web/control-ui)
- [/gateway/configuration](/uk/gateway/configuration) (режими автентифікації gateway)
- [/gateway/configuration](/uk/gateway/configuration) (режими auth Gateway)
- [/gateway/trusted-proxy-auth](/uk/gateway/trusted-proxy-auth)
- [/gateway/remote](/uk/gateway/remote)
- [/cli/devices](/uk/cli/devices)
## Сервіс Gateway не запущено
Використовуйте це, коли сервіс установлено, але процес не залишається запущеним.
Використовуйте цей розділ, коли сервіс установлено, але процес не залишається запущеним.
```bash
openclaw gateway status
@ -247,7 +248,7 @@ openclaw doctor
openclaw gateway status --deep # also scan system-level services
```
Шукайте:
Зверніть увагу на таке:
- `Runtime: stopped` із підказками щодо завершення.
- Невідповідність конфігурації сервісу (`Config (cli)` vs `Config (service)`).
@ -257,12 +258,12 @@ openclaw gateway status --deep # also scan system-level services
Поширені ознаки:
- `Gateway start blocked: set gateway.mode=local` або `existing config is missing gateway.mode` → локальний режим Gateway не ввімкнено, або файл конфігурації було пошкоджено і він утратив `gateway.mode`. Виправлення: установіть `gateway.mode="local"` у своїй конфігурації або повторно запустіть `openclaw onboard --mode local` / `openclaw setup`, щоб повторно проставити очікувану конфігурацію локального режиму. Якщо ви запускаєте OpenClaw через Podman, типовий шлях до конфігурації — `~/.openclaw/openclaw.json`.
- `refusing to bind gateway ... without auth`прив’язка не-loopback адреси без дійсного шляху автентифікації gateway (token/password або trusted-proxy, якщо налаштовано).
- `Gateway start blocked: set gateway.mode=local` або `existing config is missing gateway.mode` → локальний режим Gateway не ввімкнено, або файл конфігурації було пошкоджено й він втратив `gateway.mode`. Виправлення: установіть `gateway.mode="local"` у конфігурації або повторно виконайте `openclaw onboard --mode local` / `openclaw setup`, щоб знову проставити очікувану конфігурацію для локального режиму. Якщо ви запускаєте OpenClaw через Podman, типовий шлях до конфігурації — `~/.openclaw/openclaw.json`.
- `refusing to bind gateway ... without auth`не-loopback прив’язування без чинного шляху auth Gateway (token/password або trusted-proxy, якщо налаштовано).
- `another gateway instance is already listening` / `EADDRINUSE` → конфлікт порту.
- `Other gateway-like services detected (best effort)` → існують застарілі або паралельні launchd/systemd/schtasks units. У більшості конфігурацій слід мати один Gateway на машину; якщо вам справді потрібно більше одного, ізолюйте порти + config/state/workspace. Див. [/gateway#multiple-gateways-same-host](/uk/gateway#multiple-gateways-same-host).
- `Other gateway-like services detected (best effort)` → існують застарілі або паралельні юніти launchd/systemd/schtasks. У більшості конфігурацій слід тримати один Gateway на машину; якщо вам справді потрібно більше одного, ізолюйте порти + config/state/workspace. Див. [/gateway#multiple-gateways-same-host](/uk/gateway#multiple-gateways-same-host).
Пов’язане:
Пов’язано:
- [/gateway/background-process](/uk/gateway/background-process)
- [/gateway/configuration](/uk/gateway/configuration)
@ -270,7 +271,7 @@ openclaw gateway status --deep # also scan system-level services
## Gateway відновив останню відому справну конфігурацію
Використовуйте це, коли Gateway запускається, але в журналах сказано, що він відновив `openclaw.json`.
Використовуйте цей розділ, коли Gateway запускається, але в логах сказано, що він відновив `openclaw.json`.
```bash
openclaw logs --follow
@ -279,22 +280,25 @@ openclaw config validate
openclaw doctor
```
Шукайте:
Зверніть увагу на таке:
- `Config auto-restored from last-known-good`
- `gateway: invalid config was restored from last-known-good backup`
- `config reload restored last-known-good config after invalid-config`
- Файл `openclaw.json.clobbered.*` із часовою міткою поруч з активною конфігурацією
- Системну подію головного агента, що починається з `Config recovery warning`
- Файл `openclaw.json.clobbered.*` з часовою міткою поруч з активною конфігурацією
- Подію системи main-agent, що починається з `Config recovery warning`
Що сталося:
- Відхилена конфігурація не пройшла валідацію під час запуску або гарячого перезавантаження.
- OpenClaw зберіг відхилений payload як `.clobbered.*`.
- Активну конфігурацію було відновлено з останньої перевіреної справної копії.
- На наступному ході головного агента з’явиться попередження не переписувати відхилену конфігурацію навмання.
- Активну конфігурацію було відновлено з останньої перевіреної останньої відомої справної копії.
- Наступний хід main-agent отримує попередження не переписувати бездумно відхилену конфігурацію.
- Якщо всі проблеми валідації були в межах `plugins.entries.<id>...`, OpenClaw
не відновлював би весь файл. Локальні збої Plugin залишаються явними, тоді як не пов’язані
користувацькі налаштування залишаються в активній конфігурації.
Перевірка та виправлення:
Перевірка й виправлення:
```bash
CONFIG="$(openclaw config file)"
@ -307,19 +311,19 @@ openclaw doctor
Поширені ознаки:
- існує `.clobbered.*` → зовнішнє пряме редагування або читання під час запуску було відновлено.
- існує `.rejected.*` → запис конфігурації, що належав OpenClaw, не пройшов перевірку схеми або clobber-перевірки перед фіксацією.
- `Config write rejected:`запис намагався прибрати обов’язкову структуру, різко зменшити файл або зберегти недійсну конфігурацію.
- `missing-meta-vs-last-good`, `gateway-mode-missing-vs-last-good` або `size-drop-vs-last-good:*` → під час запуску поточний файл було визнано пошкодженим, оскільки він утратив поля або розмір порівняно з останньою відомою справною резервною копією.
- `Config last-known-good promotion skipped` → кандидат містив замасковані плейсхолдери секретів, як-от `***`.
- існує `.rejected.*` → запис конфігурації, що належить OpenClaw, не пройшов перевірки схеми або clobber перед фіксацією.
- `Config write rejected:`під час запису було зроблено спробу прибрати обов’язкову структуру, різко зменшити файл або зберегти невалідну конфігурацію.
- `missing-meta-vs-last-good`, `gateway-mode-missing-vs-last-good` або `size-drop-vs-last-good:*` → під час запуску поточний файл було розпізнано як пошкоджений, оскільки він втратив поля або розмір порівняно з останньою відомою справною резервною копією.
- `Config last-known-good promotion skipped` → кандидат містив замасковані заповнювачі секретів, наприклад `***`.
Варіанти виправлення:
1. Залиште відновлену активну конфігурацію, якщо вона правильна.
2. Скопіюйте лише потрібні ключі з `.clobbered.*` або `.rejected.*`, а потім застосуйте їх через `openclaw config set` або `config.patch`.
3. Запустіть `openclaw config validate` перед перезапуском.
4. Якщо редагуєте вручну, зберігайте повний JSON5 config, а не лише частковий об’єкт, який хотіли змінити.
3. Перед перезапуском виконайте `openclaw config validate`.
4. Якщо редагуєте вручну, зберігайте повну конфігурацію JSON5, а не лише частковий об’єкт, який хотіли змінити.
Пов’язане:
Пов’язано:
- [/gateway/configuration#strict-validation](/uk/gateway/configuration#strict-validation)
- [/gateway/configuration#config-hot-reload](/uk/gateway/configuration#config-hot-reload)
@ -328,7 +332,7 @@ openclaw doctor
## Попередження probe Gateway
Використовуйте це, коли `openclaw gateway probe` до чогось достукується, але все одно виводить блок попереджень.
Використовуйте цей розділ, коли `openclaw gateway probe` до чогось дістається, але все одно виводить блок попередження.
```bash
openclaw gateway probe
@ -336,20 +340,20 @@ openclaw gateway probe --json
openclaw gateway probe --ssh user@gateway-host
```
Шукайте:
Зверніть увагу на таке:
- `warnings[].code` і `primaryTargetId` у JSON-виводі.
- Чи стосується попередження резервного переходу на SSH, кількох Gateway, відсутніх scope або нерозв’язаних auth refs.
- `warnings[].code` і `primaryTargetId` у виводі JSON.
- Чи стосується попередження резервного шляху через SSH, кількох Gateway, відсутніх scope або нерозв’язаних посилань auth.
Поширені ознаки:
- `SSH tunnel failed to start; falling back to direct probes.` → налаштування SSH не вдалося, але команда все одно спробувала прямі налаштовані/loopback цілі.
- `multiple reachable gateways detected` → відповіла більше ніж одна ціль. Зазвичай це означає навмисну конфігурацію з кількома Gateway або застарілі/дубльовані listeners.
- `Read-probe diagnostics are limited by gateway scopes (missing operator.read)` → підключення спрацювало, але detail RPC обмежений scope; виконайте pair device identity або використайте облікові дані з `operator.read`.
- `Capability: pairing-pending` або `gateway closed (1008): pairing required` → Gateway відповів, але цьому клієнту все ще потрібне pairing/схвалення перед звичайним operator access.
- нерозв’язаний текст попередження `gateway.auth.*` / `gateway.remote.*` SecretRef → auth material був недоступний у цьому шляху команди для цілі, що не вдалася.
- `multiple reachable gateways detected` → відповіла більш ніж одна ціль. Зазвичай це означає навмисне налаштування з кількома Gateway або застарілі/дубльовані слухачі.
- `Read-probe diagnostics are limited by gateway scopes (missing operator.read)` → підключення спрацювало, але деталізований RPC обмежено через scope; pair ідентичність пристрою або використайте облікові дані з `operator.read`.
- `Capability: pairing-pending` або `gateway closed (1008): pairing required` → Gateway відповів, але цьому клієнту все ще потрібен pair/схвалення перед звичайним доступом оператора.
- нерозв’язаний текст попередження `gateway.auth.*` / `gateway.remote.*` SecretRef → матеріал auth був недоступний у цьому шляху команди для цілі, що завершилася помилкою.
Пов’язане:
Пов’язано:
- [/cli/gateway](/uk/cli/gateway)
- [/gateway#multiple-gateways-same-host](/uk/gateway#multiple-gateways-same-host)
@ -357,7 +361,7 @@ openclaw gateway probe --ssh user@gateway-host
## Канал підключений, але повідомлення не проходять
Якщо стан каналу — connected, але потік повідомлень не працює, зосередьтеся на політиці, дозволах і специфічних для каналу правилах доставки.
Якщо стан каналу — підключено, але потік повідомлень не працює, зосередьтеся на політиці, дозволах і правилах доставки, специфічних для каналу.
```bash
openclaw channels status --probe
@ -367,19 +371,19 @@ openclaw logs --follow
openclaw config get channels
```
Шукайте:
Зверніть увагу на таке:
- Політику DM (`pairing`, `allowlist`, `open`, `disabled`).
- Allowlist групи та вимоги щодо згадки.
- Відсутні дозволи/scopes API каналу.
- Політика DM (`pairing`, `allowlist`, `open`, `disabled`).
- Список дозволу для групи та вимоги до згадок.
- Відсутні дозволи/scope API каналу.
Поширені ознаки:
- `mention required` → повідомлення проігноровано політикою згадок у групі.
- `pairing` / сліди очікування схвалення → відправника не схвалено.
- `missing_scope`, `not_in_channel`, `Forbidden`, `401/403` → проблема автентифікації/дозволів каналу.
- `missing_scope`, `not_in_channel`, `Forbidden`, `401/403` → проблема auth/дозволів каналу.
Пов’язане:
Пов’язано:
- [/channels/troubleshooting](/uk/channels/troubleshooting)
- [/channels/whatsapp](/uk/channels/whatsapp)
@ -388,7 +392,7 @@ openclaw config get channels
## Доставка Cron і Heartbeat
Якщо Cron або Heartbeat не запустився чи не доставився, спочатку перевірте стан планувальника, а потім ціль доставки.
Якщо Cron або Heartbeat не запускалися чи не доставлялися, спочатку перевірте стан планувальника, а потім ціль доставки.
```bash
openclaw cron status
@ -398,31 +402,31 @@ openclaw system heartbeat last
openclaw logs --follow
```
Шукайте:
Зверніть увагу на таке:
- Чи ввімкнено Cron і чи є наступне пробудження.
- Стан історії запусків завдання (`ok`, `skipped`, `error`).
- Cron увімкнено, і є час наступного пробудження.
- Стан історії запусків job (`ok`, `skipped`, `error`).
- Причини пропуску Heartbeat (`quiet-hours`, `requests-in-flight`, `alerts-disabled`, `empty-heartbeat-file`, `no-tasks-due`).
Поширені ознаки:
- `cron: scheduler disabled; jobs will not run automatically` → Cron вимкнено.
- `cron: timer tick failed` → збій тіку планувальника; перевірте помилки файлів/журналів/runtime.
- `cron: timer tick failed` → збій тіку планувальника; перевірте помилки файлів/логів/середовища виконання.
- `heartbeat skipped` з `reason=quiet-hours` → поза вікном активних годин.
- `heartbeat skipped` з `reason=empty-heartbeat-file``HEARTBEAT.md` існує, але містить лише порожні рядки / заголовки markdown, тому OpenClaw пропускає виклик моделі.
- `heartbeat skipped` з `reason=no-tasks-due``HEARTBEAT.md` містить блок `tasks:`, але жодне із завдань не має бути виконане на цьому тіку.
- `heartbeat: unknown accountId` → недійсний id облікового запису для цілі доставки Heartbeat.
- `heartbeat skipped` з `reason=dm-blocked` → ціль Heartbeat була визначена як пункт призначення у стилі DM, тоді як `agents.defaults.heartbeat.directPolicy` (або перевизначення для конкретного агента) встановлено в `block`.
- `heartbeat skipped` з `reason=no-tasks-due``HEARTBEAT.md` містить блок `tasks:`, але на цей тік жодне із завдань не заплановано.
- `heartbeat: unknown accountId` → невалідний account id для цілі доставки Heartbeat.
- `heartbeat skipped` з `reason=dm-blocked` → ціль Heartbeat було зіставлено з призначенням у стилі DM, тоді як `agents.defaults.heartbeat.directPolicy` (або перевизначення для конкретного агента) має значення `block`.
Пов’язане:
Пов’язано:
- [/automation/cron-jobs#troubleshooting](/uk/automation/cron-jobs#troubleshooting)
- [/automation/cron-jobs](/uk/automation/cron-jobs)
- [/gateway/heartbeat](/uk/gateway/heartbeat)
## Збій інструмента спареного Node
## Помилка pair інструмента Node
Якщо Node спарено, але інструменти не працюють, ізолюйте стан foreground, дозволів і схвалення.
Якщо Node pair виконано, але інструменти не працюють, ізолюйте стан переднього плану, дозволів і схвалення.
```bash
openclaw nodes status
@ -432,28 +436,28 @@ openclaw logs --follow
openclaw status
```
Шукайте:
Зверніть увагу на таке:
- Node онлайн з очікуваними capability.
- Надані на рівні ОС дозволи для camera/mic/location/screen.
- Стан схвалень exec і allowlist.
- Node онлайн з очікуваними можливостями.
- Дозволи ОС для камери/мікрофона/геолокації/екрана.
- Стан схвалень exec і списку дозволу.
Поширені ознаки:
- `NODE_BACKGROUND_UNAVAILABLE` → застосунок Node має бути у foreground.
- `*_PERMISSION_REQUIRED` / `LOCATION_PERMISSION_REQUIRED`бракує дозволу ОС.
- `NODE_BACKGROUND_UNAVAILABLE` → застосунок Node має бути на передньому плані.
- `*_PERMISSION_REQUIRED` / `LOCATION_PERMISSION_REQUIRED`відсутній дозвіл ОС.
- `SYSTEM_RUN_DENIED: approval required` → очікується схвалення exec.
- `SYSTEM_RUN_DENIED: allowlist miss` → команду заблоковано через allowlist.
- `SYSTEM_RUN_DENIED: allowlist miss` → команду заблоковано списком дозволу.
Пов’язане:
Пов’язано:
- [/nodes/troubleshooting](/uk/nodes/troubleshooting)
- [/nodes/index](/uk/nodes/index)
- [/tools/exec-approvals](/uk/tools/exec-approvals)
## Збій інструмента браузера
## Помилка інструмента браузера
Використовуйте це, коли дії browser tool не працюють, хоча сам Gateway справний.
Використовуйте цей розділ, коли дії інструмента браузера завершуються помилкою, хоча сам Gateway справний.
```bash
openclaw browser status
@ -463,46 +467,46 @@ openclaw logs --follow
openclaw doctor
```
Шукайте:
Зверніть увагу на таке:
- Чи встановлено `plugins.allow` і чи містить він `browser`.
- Чинний шлях до виконуваного файла браузера.
- Чи задано `plugins.allow` і чи містить він `browser`.
- Чинний шлях до виконуваного файлу браузера.
- Досяжність профілю CDP.
- Доступність локального Chrome для профілів `existing-session` / `user`.
Поширені ознаки:
- `unknown command "browser"` або `unknown command 'browser'` → вбудований browser Plugin виключено через `plugins.allow`.
- `unknown command "browser"` або `unknown command 'browser'` → вбудований Plugin браузера виключено через `plugins.allow`.
- browser tool відсутній / недоступний, хоча `browser.enabled=true``plugins.allow` виключає `browser`, тому Plugin ніколи не завантажувався.
- `Failed to start Chrome CDP on port` → не вдалося запустити процес браузера.
- `browser.executablePath not found` → налаштований шлях недійсний.
- `browser.cdpUrl must be http(s) or ws(s)` → налаштований URL CDP використовує непідтримувану схему, наприклад `file:` або `ftp:`.
- `browser.cdpUrl has invalid port` → налаштований URL CDP має некоректний або позадіапазонний порт.
- `Could not find DevToolsActivePort for chrome`Chrome MCP existing-session ще не зміг приєднатися до вибраного каталогу даних браузера. Відкрийте сторінку inspect браузера, увімкніть remote debugging, залиште браузер відкритим, схваліть перший запит на приєднання, а потім повторіть спробу. Якщо стан входу в обліковий запис не потрібен, віддайте перевагу керованому профілю `openclaw`.
- `No Chrome tabs found for profile="user"`профіль приєднання Chrome MCP не має відкритих локальних вкладок Chrome.
- `Remote CDP for profile "<name>" is not reachable` → налаштований віддалений endpoint CDP недоступний з хоста gateway.
- `Browser attachOnly is enabled ... not reachable` або `Browser attachOnly is enabled and CDP websocket ... is not reachable` → профіль лише для приєднання не має досяжної цілі, або HTTP endpoint відповів, але CDP WebSocket усе одно не вдалося відкрити.
- `Playwright is not available in this gateway build; '<feature>' is unsupported.`у поточному встановленні gateway бракує залежності середовища виконання `playwright-core` для вбудованого browser Plugin; виконайте `openclaw doctor --fix`, а потім перезапустіть gateway. Знімки ARIA та базові знімки сторінок усе ще можуть працювати, але навігація, AI snapshots, знімки елементів за CSS-селекторами та експорт PDF залишаться недоступними.
- `fullPage is not supported for element screenshots` → запит на знімок екрана поєднав `--full-page` з `--ref` або `--element`.
- `browser.executablePath not found` → налаштований шлях є невалідним.
- `browser.cdpUrl must be http(s) or ws(s)` → налаштований URL CDP використовує непідтримувану схему, як-от `file:` або `ftp:`.
- `browser.cdpUrl has invalid port` → налаштований URL CDP має некоректний або неприпустимий порт.
- `Could not find DevToolsActivePort for chrome`existing-session Chrome MCP ще не зміг під’єднатися до вибраного каталогу даних браузера. Відкрийте сторінку inspect у браузері, увімкніть віддалене налагодження, залиште браузер відкритим, схваліть перший запит на підключення, а потім повторіть спробу. Якщо стан входу в обліковий запис не потрібен, віддайте перевагу керованому профілю `openclaw`.
- `No Chrome tabs found for profile="user"`у профілі підключення Chrome MCP немає відкритих локальних вкладок Chrome.
- `Remote CDP for profile "<name>" is not reachable` → налаштована віддалена кінцева точка CDP недосяжна з хоста Gateway.
- `Browser attachOnly is enabled ... not reachable` або `Browser attachOnly is enabled and CDP websocket ... is not reachable` → профіль лише для підключення не має досяжної цілі, або HTTP endpoint відповів, але WebSocket CDP усе одно не вдалося відкрити.
- `Playwright is not available in this gateway build; '<feature>' is unsupported.`у поточній інсталяції Gateway відсутня залежність середовища виконання `playwright-core` для вбудованого Plugin браузера; виконайте `openclaw doctor --fix`, а потім перезапустіть Gateway. Знімки ARIA і базові знімки сторінок усе ще можуть працювати, але навігація, AI snapshots, знімки елементів за CSS-селекторами та експорт PDF залишаться недоступними.
- `fullPage is not supported for element screenshots` → запит знімка екрана поєднав `--full-page` з `--ref` або `--element`.
- `element screenshots are not supported for existing-session profiles; use ref from snapshot.` → виклики знімків екрана Chrome MCP / `existing-session` мають використовувати захоплення сторінки або `--ref` зі snapshot, а не CSS `--element`.
- `existing-session file uploads do not support element selectors; use ref/inputRef.` → хуки завантаження файлів Chrome MCP потребують snapshot refs, а не CSS-селекторів.
- `existing-session file uploads do not support element selectors; use ref/inputRef.` → хуки завантаження файлів Chrome MCP потребують snapshot ref, а не CSS-селекторів.
- `existing-session file uploads currently support one file at a time.` → для профілів Chrome MCP надсилайте одне завантаження за виклик.
- `existing-session dialog handling does not support timeoutMs.` → хуки діалогів у профілях Chrome MCP не підтримують перевизначення timeout.
- `existing-session type does not support timeoutMs overrides.` → не вказуйте `timeoutMs` для `act:type` у профілях `profile="user"` / Chrome MCP existing-session, або використайте керований/CDP профіль браузера, коли потрібен власний timeout.
- `existing-session evaluate does not support timeoutMs overrides.` → не вказуйте `timeoutMs` для `act:evaluate` у профілях `profile="user"` / Chrome MCP existing-session, або використайте керований/CDP профіль браузера, коли потрібен власний timeout.
- `response body is not supported for existing-session profiles yet.``responsebody` поки що потребує керованого браузера або сирого профілю CDP.
- застарілі перевизначення viewport / dark-mode / locale / offline у профілях attach-only або remote CDP → виконайте `openclaw browser stop --browser-profile <name>`, щоб закрити активну керувальну сесію та звільнити стан емуляції Playwright/CDP без перезапуску всього gateway.
- `existing-session type does not support timeoutMs overrides.` → не використовуйте `timeoutMs` для `act:type` у профілях `profile="user"` / existing-session Chrome MCP, або використайте керований/CDP профіль браузера, якщо потрібен власний timeout.
- `existing-session evaluate does not support timeoutMs overrides.` → не використовуйте `timeoutMs` для `act:evaluate` у профілях `profile="user"` / existing-session Chrome MCP, або використайте керований/CDP профіль браузера, якщо потрібен власний timeout.
- `response body is not supported for existing-session profiles yet.``responsebody` все ще потребує керованого браузера або сирого профілю CDP.
- застарілі перевизначення viewport / dark-mode / locale / offline у профілях лише для підключення або віддаленого CDP → виконайте `openclaw browser stop --browser-profile <name>`, щоб закрити активну сесію керування та звільнити стан емуляції Playwright/CDP без перезапуску всього Gateway.
Пов’язане:
Пов’язано:
- [/tools/browser-linux-troubleshooting](/uk/tools/browser-linux-troubleshooting)
- [/tools/browser](/uk/tools/browser)
## Якщо ви оновилися і щось раптово зламалося
Більшість збоїв після оновлення — це розсинхронізація конфігурації або суворіші типові значення, які тепер примусово застосовуються.
Більшість збоїв після оновлення спричинені дрейфом конфігурації або суворішими типовими параметрами, які тепер застосовуються.
### 1) Змінилася поведінка перевизначення auth і URL
### 1) Змінилася поведінка auth і перевизначення URL
```bash
openclaw gateway status
@ -513,15 +517,15 @@ openclaw config get gateway.auth.mode
Що перевірити:
- Якщо `gateway.mode=remote`, виклики CLI можуть бути спрямовані на віддалену ціль, тоді як локальний сервіс працює нормально.
- Явні виклики `--url` не використовують збережені облікові дані як резервний варіант.
- Якщо `gateway.mode=remote`, виклики CLI можуть бути спрямовані на віддалений Gateway, тоді як локальний сервіс працює нормально.
- Явні виклики `--url` не використовують резервний перехід до збережених облікових даних.
Поширені ознаки:
- `gateway connect failed:` → неправильний URL цілі.
- `gateway connect failed:` → неправильний URL призначення.
- `unauthorized` → endpoint досяжний, але auth неправильний.
### 2) Захисні обмеження для bind і auth стали суворішими
### 2) Обмеження bind і auth стали суворішими
```bash
openclaw config get gateway.bind
@ -533,15 +537,15 @@ openclaw logs --follow
Що перевірити:
- Прив’язки не-loopback (`lan`, `tailnet`, `custom`) потребують дійсного шляху автентифікації gateway: auth за shared token/password або правильно налаштоване розгортання `trusted-proxy` не-loopback.
- Не-loopback bind (`lan`, `tailnet`, `custom`) потребують чинного шляху auth Gateway: auth через shared token/password або правильно налаштоване розгортання `trusted-proxy` не на loopback.
- Старі ключі на кшталт `gateway.token` не замінюють `gateway.auth.token`.
Поширені ознаки:
- `refusing to bind gateway ... without auth`прив’язка не-loopback без дійсного шляху автентифікації gateway.
- `Connectivity probe: failed` коли runtime запущено → gateway працює, але недоступний із поточними auth/url.
- `refusing to bind gateway ... without auth`не-loopback bind без чинного шляху auth Gateway.
- `Connectivity probe: failed` при запущеному runtime → Gateway працює, але недоступний із поточними auth/url.
### 3) Змінився стан pairing та ідентичності пристрою
### 3) Змінився стан pair і ідентичності пристрою
```bash
openclaw devices list
@ -552,12 +556,12 @@ openclaw doctor
Що перевірити:
- Очікують схвалення пристрої для dashboard/nodes.
- Очікують схвалення pairings у DM після змін політики або ідентичності.
- Очікувальні схвалення пристроїв для dashboard/nodes.
- Очікувальні схвалення DM pair після змін політики або ідентичності.
Поширені ознаки:
- `device identity required`вимоги device auth не виконано.
- `device identity required`не виконано auth пристрою.
- `pairing required` → відправника/пристрій потрібно схвалити.
Якщо після перевірок конфігурація сервісу та runtime все ще не збігаються, перевстановіть метадані сервісу з того самого каталогу профілю/стану:
@ -567,13 +571,13 @@ openclaw gateway install --force
openclaw gateway restart
```
Пов’язане:
Пов’язано:
- [/gateway/pairing](/uk/gateway/pairing)
- [/gateway/authentication](/uk/gateway/authentication)
- [/gateway/background-process](/uk/gateway/background-process)
## Пов’язане
## Пов’язано
- [Посібник для Gateway](/uk/gateway)
- [Doctor](/uk/gateway/doctor)

View File

@ -1,74 +1,74 @@
---
read_when:
- Реалізація функцій macOS app
- Зміна життєвого циклу gateway або bridge Node на macOS
summary: Супровідний застосунок OpenClaw для macOS (menu bar + брокер gateway)
title: macOS app
- Реалізація функцій застосунку macOS
- Зміна життєвого циклу Gateway або мосту Node на macOS
summary: Супутній застосунок OpenClaw для macOS (рядок меню + брокер Gateway)
title: застосунок macOS
x-i18n:
generated_at: "2026-04-23T21:01:38Z"
generated_at: "2026-04-25T03:24:47Z"
model: gpt-5.4
provider: openai
source_hash: 6c7911d0a2e7be7fa437c5ef01a98c0f7da5e44388152ba182581cd2e381ba8b
source_hash: 852c93694ebb4ac083b9a44c2e4d6e40274e6e7f3aa6fa664a8eba1a82aaf5b1
source_path: platforms/macos.md
workflow: 15
---
macOS app — це **супровідний застосунок у menu bar** для OpenClaw. Він володіє дозволами,
керує/під’єднується до Gateway локально (launchd або вручну) і відкриває для агента
можливості macOS як Node.
Застосунок macOS — це **супутній застосунок у рядку меню** для OpenClaw. Він керує дозволами,
локально керує/під’єднується до Gateway (launchd або вручну) та надає
можливості macOS агенту як Node.
## Що він робить
- Показує нативні сповіщення і стан у menu bar.
- Володіє запитами TCC (Notifications, Accessibility, Screen Recording, Microphone,
Speech Recognition, Automation/AppleScript).
- Запускає Gateway або підключається до нього (локально чи віддалено).
- Відкриває інструменти лише для macOS (Canvas, Camera, Screen Recording, `system.run`).
- Запускає локальний Node host service у режимі **remote** (launchd) і зупиняє його в режимі **local**.
- За потреби хостить **PeekabooBridge** для автоматизації UI.
- Установлює глобальний CLI (`openclaw`) за запитом через npm, pnpm або bun (app надає перевагу npm, потім pnpm, потім bun; Node залишається рекомендованим runtime для Gateway).
- Показує нативні сповіщення та стан у рядку меню.
- Керує запитами TCC (Сповіщення, Універсальний доступ, Запис екрана, Мікрофон,
Розпізнавання мовлення, Automation/AppleScript).
- Запускає Gateway або під’єднується до нього (локально чи віддалено).
- Надає інструменти лише для macOS (Canvas, Camera, Screen Recording, `system.run`).
- Запускає локальний сервіс хоста Node у режимі **remote** (launchd) і зупиняє його в режимі **local**.
- За потреби розміщує **PeekabooBridge** для автоматизації UI.
- Встановлює глобальний CLI (`openclaw`) на запит через npm, pnpm або bun (застосунок надає перевагу npm, потім pnpm, потім bun; Node залишається рекомендованим середовищем виконання Gateway).
## Local vs remote mode
## Режим local і remote
- **Local** (типово): app під’єднується до вже запущеного локального Gateway, якщо він є;
інакше вмикає launchd service через `openclaw gateway install`.
- **Remote**: app підключається до Gateway через SSH/Tailscale і ніколи не запускає
- **Local** (типово): застосунок під’єднується до вже запущеного локального Gateway, якщо він є;
інакше вмикає сервіс launchd через `openclaw gateway install`.
- **Remote**: застосунок під’єднується до Gateway через SSH/Tailscale і ніколи не запускає
локальний процес.
App запускає локальний **Node host service**, щоб віддалений Gateway міг дістатися до цього Mac.
App не породжує Gateway як дочірній процес.
Виявлення Gateway тепер надає перевагу іменам Tailscale MagicDNS замість сирих tailnet IP,
тому mac app надійніше відновлюється, коли tailnet IP змінюються.
Застосунок запускає локальний **сервіс хоста Node**, щоб віддалений Gateway міг дістатися до цього Mac.
Застосунок не породжує Gateway як дочірній процес.
Виявлення Gateway тепер надає перевагу іменам Tailscale MagicDNS над сирими IP-адресами tailnet,
тож застосунок Mac надійніше відновлюється, коли IP-адреси tailnet змінюються.
## Керування Launchd
App керує LaunchAgent на рівні користувача з міткою `ai.openclaw.gateway`
(або `ai.openclaw.<profile>` при використанні `--profile`/`OPENCLAW_PROFILE`; legacy `com.openclaw.*` усе ще вивантажується).
Застосунок керує LaunchAgent для кожного користувача з міткою `ai.openclaw.gateway`
(або `ai.openclaw.<profile>` при використанні `--profile`/`OPENCLAW_PROFILE`; застаріле `com.openclaw.*` усе ще вивантажується).
```bash
launchctl kickstart -k gui/$UID/ai.openclaw.gateway
launchctl bootout gui/$UID/ai.openclaw.gateway
```
Замініть мітку на `ai.openclaw.<profile>`, коли запускаєте іменований profile.
Замініть мітку на `ai.openclaw.<profile>`, якщо працюєте з іменованим профілем.
Якщо LaunchAgent не встановлено, увімкніть його з app або виконайте
Якщо LaunchAgent не встановлено, увімкніть його із застосунку або виконайте
`openclaw gateway install`.
## Можливості Node (mac)
macOS app представляє себе як Node. Поширені команди:
Застосунок macOS представляє себе як Node. Типові команди:
- Canvas: `canvas.present`, `canvas.navigate`, `canvas.eval`, `canvas.snapshot`, `canvas.a2ui.*`
- Camera: `camera.snap`, `camera.clip`
- Screen: `screen.snapshot`, `screen.record`
- System: `system.run`, `system.notify`
Node повідомляє `permissions` map, щоб агенти могли вирішувати, що дозволено.
Node повідомляє мапу `permissions`, щоб агенти могли вирішити, що дозволено.
Node service + IPC app:
Сервіс Node + IPC застосунку:
- Коли працює headless Node host service (режим remote), він підключається до Gateway WS як Node.
- `system.run` виконується в macOS app (контекст UI/TCC) через локальний Unix socket; запити + вивід залишаються всередині app.
- Коли працює безголовий сервіс хоста Node (режим remote), він під’єднується до Gateway WS як Node.
- `system.run` виконується в застосунку macOS (контекст UI/TCC) через локальний Unix-сокет; запити та вивід залишаються в застосунку.
Діаграма (SCI):
@ -79,10 +79,10 @@ Gateway -> Node Service (WS)
Mac App (UI + TCC + system.run)
```
## Exec approvals (`system.run`)
## Підтвердження виконання (system.run)
`system.run` контролюється через **Exec approvals** у macOS app (Settings → Exec approvals).
Security + ask + allowlist зберігаються локально на Mac у:
`system.run` керується через **Exec approvals** у застосунку macOS (Settings → Exec approvals).
Налаштування security + ask + allowlist зберігаються локально на Mac у:
```
~/.openclaw/exec-approvals.json
@ -109,112 +109,112 @@ Security + ask + allowlist зберігаються локально на Mac у
Примітки:
- Елементи `allowlist` — це glob-шаблони для розв’язаних шляхів до binary.
- Сирий текст shell-команди, що містить синтаксис керування shell або розгортання (`&&`, `||`, `;`, `|`, `` ` ``, `$`, `<`, `>`, `(`, `)`), вважається allowlist miss і потребує явного схвалення (або включення binary shell до allowlist).
- Вибір “Always Allow” у prompt додає цю команду до allowlist.
- Перевизначення середовища для `system.run` фільтруються (відкидаються `PATH`, `DYLD_*`, `LD_*`, `NODE_OPTIONS`, `PYTHON*`, `PERL*`, `RUBYOPT`, `SHELLOPTS`, `PS4`), а потім об’єднуються із середовищем app.
- Для shell-wrapper-ів (`bash|sh|zsh ... -c/-lc`) перевизначення середовища на рівні запиту зводяться до малого явного allowlist (`TERM`, `LANG`, `LC_*`, `COLORTERM`, `NO_COLOR`, `FORCE_COLOR`).
- Для рішень allow-always у режимі allowlist відомі wrapper-и dispatch (`env`, `nice`, `nohup`, `stdbuf`, `timeout`) зберігають внутрішні шляхи executable, а не шляхи wrapper-ів. Якщо безпечне розгортання неможливе, жоден запис allowlist автоматично не зберігається.
- Записи `allowlist` — це glob-шаблони для розв’язаних шляхів до бінарних файлів або прості назви команд для команд, викликаних через PATH.
- Необроблений текст shell-команди, що містить синтаксис керування shell або розгортання (`&&`, `||`, `;`, `|`, `` ` ``, `$`, `<`, `>`, `(`, `)`), вважається промахом `allowlist` і потребує явного підтвердження (або додавання бінарного файла shell до `allowlist`).
- Вибір “Always Allow” у запиті додає цю команду до `allowlist`.
- Перевизначення середовища для `system.run` фільтруються (викидаються `PATH`, `DYLD_*`, `LD_*`, `NODE_OPTIONS`, `PYTHON*`, `PERL*`, `RUBYOPT`, `SHELLOPTS`, `PS4`), а потім об’єднуються із середовищем застосунку.
- Для оболонкових обгорток (`bash|sh|zsh ... -c/-lc`) перевизначення середовища в межах запиту зводяться до невеликого явного `allowlist` (`TERM`, `LANG`, `LC_*`, `COLORTERM`, `NO_COLOR`, `FORCE_COLOR`).
- Для рішень allow-always у режимі allowlist відомі обгортки диспетчеризації (`env`, `nice`, `nohup`, `stdbuf`, `timeout`) зберігають внутрішні шляхи до виконуваних файлів, а не шляхи обгорток. Якщо безпечне розгортання неможливе, запис `allowlist` автоматично не зберігається.
## Deep links
## Глибокі посилання
App реєструє схему URL `openclaw://` для локальних дій.
Застосунок реєструє схему URL `openclaw://` для локальних дій.
### `openclaw://agent`
Запускає запит `agent` до Gateway.
Запускає запит Gateway `agent`.
__OC_I18N_900004__
Параметри query:
Параметри запиту:
- `message` (обов’язковий)
- `sessionKey` (необов’язковий)
- `thinking` (необов’язковий)
- `deliver` / `to` / `channel` (необов’язкові)
- `timeoutSeconds` (необов’язковий)
- `key` (необов’язковий unattended mode key)
- `key` (необов’язковий ключ для unattended mode)
Безпека:
- Без `key` app просить підтвердження.
- Без `key` app застосовує коротке обмеження довжини повідомлення для prompt підтвердження й ігнорує `deliver` / `to` / `channel`.
- З дійсним `key` запуск відбувається без участі користувача (призначено для персональної автоматизації).
- Без `key` застосунок просить підтвердження.
- Без `key` застосунок застосовує коротке обмеження довжини повідомлення для запиту підтвердження та ігнорує `deliver` / `to` / `channel`.
- Із чинним `key` запуск виконується в unattended mode (призначено для особистих автоматизацій).
## Типовий flow онбордингу
## Процес початкового налаштування (типовий)
1. Установіть і запустіть **OpenClaw.app**.
2. Пройдіть checklist дозволів (запити TCC).
1. Встановіть і запустіть **OpenClaw.app**.
2. Завершіть контрольний список дозволів (запити TCC).
3. Переконайтеся, що активний режим **Local** і Gateway запущено.
4. Установіть CLI, якщо хочете доступ із terminal.
4. Встановіть CLI, якщо хочете доступ із термінала.
## Розміщення каталогу state (macOS)
## Розміщення каталогу стану (macOS)
Не розміщуйте каталог state OpenClaw в iCloud або інших cloud-synced folders.
Шляхи, за якими виконується синхронізація, можуть додавати затримку й інколи спричиняти file-lock/sync race для
сесій і облікових даних.
Не розміщуйте каталог стану OpenClaw в iCloud або інших папках, що синхронізуються з хмарою.
Шляхи із синхронізацією можуть додавати затримку й іноді спричиняти змагання блокувань/синхронізації файлів для
сеансів і облікових даних.
Надавайте перевагу локальному шляху state без синхронізації, наприклад:
Надавайте перевагу локальному шляху стану без синхронізації, наприклад:
__OC_I18N_900005__
Якщо `openclaw doctor` виявить state у:
Якщо `openclaw doctor` виявить стан у:
- `~/Library/Mobile Documents/com~apple~CloudDocs/...`
- `~/Library/CloudStorage/...`
він покаже попередження й порекомендує повернутися до локального шляху.
він покаже попередження та порекомендує повернутися до локального шляху.
## Робочий процес збірки й розробки (native)
## Збирання та робочий процес розробки (native)
- `cd apps/macos && swift build`
- `swift run OpenClaw` (або Xcode)
- Пакування app: `scripts/package-mac-app.sh`
- Пакування застосунку: `scripts/package-mac-app.sh`
## Налагодження підключення gateway (macOS CLI)
## Налагодження підключення Gateway (CLI macOS)
Використовуйте debug CLI, щоб перевірити той самий handshake WebSocket Gateway і логіку виявлення,
які використовує macOS app, не запускаючи сам app.
Використовуйте CLI для налагодження, щоб перевірити те саме рукостискання WebSocket Gateway і логіку виявлення,
яку використовує застосунок macOS, без запуску застосунку.
__OC_I18N_900006__
Параметри connect:
- `--url <ws://host:port>`: перевизначити config
- `--mode <local|remote>`: розв’язати з config (типово: config або local)
- `--probe`: примусово виконати свіжий health probe
- `--timeout <ms>`: timeout запиту (типово: `15000`)
- `--url <ws://host:port>`: перевизначити конфігурацію
- `--mode <local|remote>`: визначити з конфігурації (типово: конфігурація або local)
- `--probe`: примусово виконати нову перевірку працездатності
- `--timeout <ms>`: тайм-аут запиту (типово: `15000`)
- `--json`: структурований вивід для порівняння
Параметри discovery:
- `--include-local`: включити gateway, які було б відфільтровано як “local”
- `--timeout <ms>`: загальне вікно discovery (типово: `2000`)
- `--include-local`: включати Gateway, які інакше були б відфільтровані як “local”
- `--timeout <ms>`: загальне вікно виявлення (типово: `2000`)
- `--json`: структурований вивід для порівняння
Порада: порівняйте з `openclaw gateway discover --json`, щоб побачити, чи
відрізняється pipeline discovery macOS app (`local.` плюс налаштований wide-area domain, з
fallback-ами wide-area і Tailscale Serve) від
discovery на основі `dns-sd` у Node CLI.
Порада: порівняйте з `openclaw gateway discover --json`, щоб побачити, чи відрізняється
конвеєр виявлення застосунку macOS (`local.` плюс налаштований wide-area домен із
резервними варіантами wide-area і Tailscale Serve) від
виявлення на основі `dns-sd` у Node CLI.
## Внутрішня робота віддаленого підключення (SSH tunnels)
## Внутрішня логіка віддаленого підключення (SSH-тунелі)
Коли macOS app працює в режимі **Remote**, він відкриває SSH tunnel, щоб локальні UI
компоненти могли спілкуватися з віддаленим Gateway так, ніби він знаходиться на localhost.
Коли застосунок macOS працює в режимі **Remote**, він відкриває SSH-тунель, щоб локальні компоненти UI
могли спілкуватися з віддаленим Gateway так, ніби він працює на localhost.
### Control tunnel (порт WebSocket Gateway)
### Керувальний тунель (порт WebSocket Gateway)
- **Призначення:** health checks, status, Web Chat, config та інші виклики control-plane.
- **Призначення:** перевірки працездатності, стан, Web Chat, конфігурація та інші виклики площини керування.
- **Локальний порт:** порт Gateway (типово `18789`), завжди стабільний.
- **Віддалений порт:** той самий порт Gateway на віддаленому хості.
- **Поведінка:** жодного випадкового локального порту; app повторно використовує наявний здоровий tunnel
- **Поведінка:** без випадкового локального порту; застосунок повторно використовує наявний справний тунель
або перезапускає його за потреби.
- **Форма SSH:** `ssh -N -L <local>:127.0.0.1:<remote>` з BatchMode +
ExitOnForwardFailure + параметрами keepalive.
- **Звітування IP:** SSH tunnel використовує loopback, тому gateway бачитиме IP Node
як `127.0.0.1`. Використовуйте транспорт **Direct (ws/wss)**, якщо хочете, щоб
відображався реальний IP client-а (див. [macOS remote access](/uk/platforms/mac/remote)).
- **Форма SSH:** `ssh -N -L <local>:127.0.0.1:<remote>` з параметрами BatchMode +
ExitOnForwardFailure + keepalive.
- **Звітування про IP:** SSH-тунель використовує loopback, тому Gateway бачитиме IP
Node як `127.0.0.1`. Використовуйте транспорт **Direct (ws/wss)**, якщо хочете, щоб відображалася справжня IP-адреса
клієнта (див. [віддалений доступ macOS](/uk/platforms/mac/remote)).
Кроки налаштування див. у [macOS remote access](/uk/platforms/mac/remote). Деталі
протоколу див. у [Gateway protocol](/uk/gateway/protocol).
Кроки налаштування див. у [віддалений доступ macOS](/uk/platforms/mac/remote). Докладніше про протокол
див. у [протокол Gateway](/uk/gateway/protocol).
## Пов’язана документація
## Пов’язані документи
- [Gateway runbook](/uk/gateway)
- [Інструкція з Gateway](/uk/gateway)
- [Gateway (macOS)](/uk/platforms/mac/bundled-gateway)
- [Дозволи macOS](/uk/platforms/mac/permissions)
- [Canvas](/uk/platforms/mac/canvas)

View File

@ -1,27 +1,27 @@
---
read_when:
- Вибір правильного підшляху plugin-sdk для імпорту в plugin
- Вибір правильного підшляху plugin-sdk для імпорту Plugin
- Аудит підшляхів bundled-plugin і допоміжних поверхонь
summary: 'Каталог підшляхів Plugin SDK: які імпорти де розташовані, згруповано за областями'
summary: 'Каталог підшляхів Plugin SDK: які імпорти де знаходяться, згруповано за областями'
title: Підшляхи Plugin SDK
x-i18n:
generated_at: "2026-04-25T02:02:04Z"
generated_at: "2026-04-25T03:24:44Z"
model: gpt-5.4
provider: openai
source_hash: 44b6d3603a94328d94981642f94e43913f6d5476b1f6a0970baf23bed7e11105
source_hash: 0ff08a1f6801329cd9c20353e77983c3333a4237db9217d19a621b670c1b636f
source_path: plugins/sdk-subpaths.md
workflow: 15
---
Plugin SDK доступний як набір вузьких підшляхів у `openclaw/plugin-sdk/`.
На цій сторінці наведено каталог поширених підшляхів, згрупованих за призначенням. Згенерований
Plugin SDK представлено як набір вузьких підшляхів у `openclaw/plugin-sdk/`.
На цій сторінці наведено каталог найуживаніших підшляхів, згрупованих за призначенням. Згенерований
повний список із понад 200 підшляхів міститься в `scripts/lib/plugin-sdk-entrypoints.json`;
зарезервовані допоміжні підшляхи bundled-plugin також там присутні, але є деталлю
зарезервовані допоміжні підшляхи bundled-plugin також наведені там, але є деталлю
реалізації, якщо лише сторінка документації явно не просуває їх.
Посібник з написання plugin див. у [Огляд Plugin SDK](/uk/plugins/sdk-overview).
Посібник з авторства Plugin див. у [Огляд Plugin SDK](/uk/plugins/sdk-overview).
## Вхід plugin
## Точка входу Plugin
| Підшлях | Ключові експорти |
| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
@ -37,247 +37,247 @@ x-i18n:
| `plugin-sdk/channel-core` | `defineChannelPluginEntry`, `defineSetupPluginEntry`, `createChatChannelPlugin`, `createChannelPluginBase` |
| `plugin-sdk/config-schema` | Експорт кореневої Zod-схеми `openclaw.json` (`OpenClawSchema`) |
| `plugin-sdk/channel-setup` | `createOptionalChannelSetupSurface`, `createOptionalChannelSetupAdapter`, `createOptionalChannelSetupWizard`, а також `DEFAULT_ACCOUNT_ID`, `createTopLevelChannelDmPolicy`, `setSetupChannelEnabled`, `splitSetupEntries` |
| `plugin-sdk/setup` | Спільні допоміжні функції майстра налаштування, запити allowlist, побудова статусу налаштування |
| `plugin-sdk/setup` | Спільні допоміжні засоби майстра налаштування, підказки allowlist, побудовники стану налаштування |
| `plugin-sdk/setup-runtime` | `createPatchedAccountSetupAdapter`, `createEnvPatchedAccountSetupAdapter`, `createSetupInputPresenceValidator`, `noteChannelLookupFailure`, `noteChannelLookupSummary`, `promptResolvedAllowFrom`, `splitSetupEntries`, `createAllowlistSetupWizardProxy`, `createDelegatedSetupWizardProxy` |
| `plugin-sdk/setup-adapter-runtime` | `createEnvPatchedAccountSetupAdapter` |
| `plugin-sdk/setup-tools` | `formatCliCommand`, `detectBinary`, `extractArchive`, `resolveBrewExecutable`, `formatDocsLink`, `CONFIG_DIR` |
| `plugin-sdk/account-core` | Допоміжні функції багатоакаунтної конфігурації/обмеження дій і резервного переходу до акаунта за замовчуванням |
| `plugin-sdk/account-id` | `DEFAULT_ACCOUNT_ID`, допоміжні функції нормалізації account-id |
| `plugin-sdk/account-resolution` | Допоміжні функції пошуку акаунта + резервного переходу до акаунта за замовчуванням |
| `plugin-sdk/account-helpers` | Вузькі допоміжні функції для списків акаунтів/дій з акаунтами |
| `plugin-sdk/account-core` | Допоміжні засоби для конфігурації/керування багатьма акаунтами, допоміжні засоби резервного використання акаунта за замовчуванням |
| `plugin-sdk/account-id` | `DEFAULT_ACCOUNT_ID`, допоміжні засоби нормалізації ідентифікатора акаунта |
| `plugin-sdk/account-resolution` | Пошук акаунта + допоміжні засоби резервного використання за замовчуванням |
| `plugin-sdk/account-helpers` | Вузькі допоміжні засоби для списків акаунтів/дій над акаунтами |
| `plugin-sdk/channel-pairing` | `createChannelPairingController` |
| `plugin-sdk/channel-reply-pipeline` | `createChannelReplyPipeline` |
| `plugin-sdk/channel-config-helpers` | `createHybridChannelConfigAdapter` |
| `plugin-sdk/channel-config-schema` | Типи схеми конфігурації каналу |
| `plugin-sdk/telegram-command-config` | Допоміжні функції нормалізації/валідації користувацьких команд Telegram з резервною підтримкою bundled-contract |
| `plugin-sdk/command-gating` | Вузькі допоміжні функції шлюзу авторизації команд |
| `plugin-sdk/telegram-command-config` | Допоміжні засоби нормалізації/валідації користувацьких команд Telegram із резервною bundled-contract сумісністю |
| `plugin-sdk/command-gating` | Вузькі допоміжні засоби шлюзування авторизації команд |
| `plugin-sdk/channel-policy` | `resolveChannelGroupRequireMention` |
| `plugin-sdk/channel-lifecycle` | `createAccountStatusSink`, допоміжні функції життєвого циклу/фіналізації потоку чернеток |
| `plugin-sdk/inbound-envelope` | Спільні допоміжні функції маршрутизації вхідних повідомлень і побудови envelope |
| `plugin-sdk/inbound-reply-dispatch` | Спільні допоміжні функції запису й диспетчеризації вхідних відповідей |
| `plugin-sdk/messaging-targets` | Допоміжні функції розбору/зіставлення цілей |
| `plugin-sdk/outbound-media` | Спільні допоміжні функції завантаження вихідних медіа |
| `plugin-sdk/outbound-runtime` | Допоміжні функції вихідної доставки, ідентичності, делегата надсилання, сесій, форматування та планування payload |
| `plugin-sdk/poll-runtime` | Вузькі допоміжні функції нормалізації опитувань |
| `plugin-sdk/thread-bindings-runtime` | Допоміжні функції життєвого циклу прив’язок потоків і адаптерів |
| `plugin-sdk/agent-media-payload` | Застарілий конструктор payload медіа агента |
| `plugin-sdk/conversation-runtime` | Допоміжні функції прив’язки розмов/потоків, pairing і налаштованих прив’язок |
| `plugin-sdk/runtime-config-snapshot` | Допоміжна функція знімка конфігурації часу виконання |
| `plugin-sdk/runtime-group-policy` | Допоміжні функції визначення групової політики часу виконання |
| `plugin-sdk/channel-status` | Спільні допоміжні функції знімка/зведення статусу каналу |
| `plugin-sdk/channel-lifecycle` | `createAccountStatusSink`, допоміжні засоби життєвого циклу/фіналізації чернеткового потоку |
| `plugin-sdk/inbound-envelope` | Спільні допоміжні засоби маршрутизації вхідних повідомлень + побудови конверта |
| `plugin-sdk/inbound-reply-dispatch` | Спільні допоміжні засоби запису та диспетчеризації вхідних відповідей |
| `plugin-sdk/messaging-targets` | Допоміжні засоби розбору/зіставлення цілей |
| `plugin-sdk/outbound-media` | Спільні допоміжні засоби завантаження вихідних медіа |
| `plugin-sdk/outbound-runtime` | Допоміжні засоби доставки вихідних повідомлень, ідентичності, делегата надсилання, сесії, форматування та планування payload |
| `plugin-sdk/poll-runtime` | Вузькі допоміжні засоби нормалізації опитувань |
| `plugin-sdk/thread-bindings-runtime` | Допоміжні засоби життєвого циклу прив’язок потоків та адаптерів |
| `plugin-sdk/agent-media-payload` | Застарілий побудовник медіа-payload агента |
| `plugin-sdk/conversation-runtime` | Допоміжні засоби прив’язки розмов/потоків, парування та налаштованих прив’язок |
| `plugin-sdk/runtime-config-snapshot` | Допоміжний засіб знімка конфігурації рантайму |
| `plugin-sdk/runtime-group-policy` | Допоміжні засоби визначення групової політики рантайму |
| `plugin-sdk/channel-status` | Спільні допоміжні засоби знімка/зведення стану каналу |
| `plugin-sdk/channel-config-primitives` | Вузькі примітиви схеми конфігурації каналу |
| `plugin-sdk/channel-config-writes` | Допоміжні функції авторизації запису конфігурації каналу |
| `plugin-sdk/channel-plugin-common` | Спільні prelude-експорти plugin каналу |
| `plugin-sdk/allowlist-config-edit` | Допоміжні функції редагування/читання конфігурації allowlist |
| `plugin-sdk/group-access` | Спільні допоміжні функції рішень щодо доступу до груп |
| `plugin-sdk/direct-dm` | Спільні допоміжні функції автентифікації/захисту прямих DM |
| `plugin-sdk/interactive-runtime` | Семантичне представлення повідомлень, доставка та застарілі допоміжні функції інтерактивних відповідей. Див. [Представлення повідомлень](/uk/plugins/message-presentation) |
| `plugin-sdk/channel-inbound` | Barrel сумісності для допоміжних функцій debounce вхідних повідомлень, зіставлення згадок, політики згадок і envelope |
| `plugin-sdk/channel-inbound-debounce` | Вузькі допоміжні функції debounce вхідних повідомлень |
| `plugin-sdk/channel-mention-gating` | Вузькі допоміжні функції політики згадок і тексту згадок без ширшої поверхні inbound runtime |
| `plugin-sdk/channel-envelope` | Вузькі допоміжні функції форматування inbound envelope |
| `plugin-sdk/channel-location` | Допоміжні функції контексту й форматування розташування каналу |
| `plugin-sdk/channel-logging` | Допоміжні функції логування каналу для відкинутих вхідних повідомлень і помилок typing/ack |
| `plugin-sdk/channel-send-result` | Типи результатів відповіді |
| `plugin-sdk/channel-actions` | Допоміжні функції дій із повідомленнями каналу, а також застарілі нативні допоміжні функції схем, збережені для сумісності plugin |
| `plugin-sdk/channel-targets` | Допоміжні функції розбору/зіставлення цілей |
| `plugin-sdk/channel-config-writes` | Допоміжні засоби авторизації запису конфігурації каналу |
| `plugin-sdk/channel-plugin-common` | Спільні prelude-експорти Plugin каналу |
| `plugin-sdk/allowlist-config-edit` | Допоміжні засоби редагування/читання конфігурації allowlist |
| `plugin-sdk/group-access` | Спільні допоміжні засоби для рішень щодо групового доступу |
| `plugin-sdk/direct-dm` | Спільні допоміжні засоби авторизації/захисту прямих DM |
| `plugin-sdk/interactive-runtime` | Семантичне представлення повідомлень, доставка та застарілі допоміжні засоби інтерактивних відповідей. Див. [Представлення повідомлень](/uk/plugins/message-presentation) |
| `plugin-sdk/channel-inbound` | Barrel зворотної сумісності для debounce вхідних повідомлень, зіставлення згадок, допоміжних засобів політики згадок і допоміжних засобів конверта |
| `plugin-sdk/channel-inbound-debounce` | Вузькі допоміжні засоби debounce для вхідних повідомлень |
| `plugin-sdk/channel-mention-gating` | Вузькі допоміжні засоби політики згадок і тексту згадок без ширшої поверхні inbound runtime |
| `plugin-sdk/channel-envelope` | Вузькі допоміжні засоби форматування конверта вхідних повідомлень |
| `plugin-sdk/channel-location` | Допоміжні засоби контексту й форматування розташування каналу |
| `plugin-sdk/channel-logging` | Допоміжні засоби логування каналу для відкидання вхідних повідомлень і збоїв typing/ack |
| `plugin-sdk/channel-send-result` | Типи результату відповіді |
| `plugin-sdk/channel-actions` | Допоміжні засоби дій над повідомленнями каналу, а також застарілі допоміжні засоби native schema, збережені для сумісності Plugin |
| `plugin-sdk/channel-targets` | Допоміжні засоби розбору/зіставлення цілей |
| `plugin-sdk/channel-contract` | Типи контракту каналу |
| `plugin-sdk/channel-feedback` | Прив’язка feedback/reaction |
| `plugin-sdk/channel-secret-runtime` | Вузькі допоміжні функції контракту секретів, такі як `collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment`, і типи цілей секретів |
| `plugin-sdk/channel-feedback` | Підключення feedback/reaction |
| `plugin-sdk/channel-secret-runtime` | Вузькі допоміжні засоби secret-contract, такі як `collectSimpleChannelFieldAssignments`, `getChannelSurface`, `pushAssignment`, і типи secret target |
</Accordion>
<Accordion title="Підшляхи провайдерів">
| Підшлях | Ключові експорти |
| --- | --- |
| `plugin-sdk/provider-entry` | `defineSingleProviderPluginEntry` |
| `plugin-sdk/provider-setup` | Кураторські допоміжні функції налаштування локального/self-hosted провайдера |
| `plugin-sdk/self-hosted-provider-setup` | Сфокусовані допоміжні функції налаштування self-hosted провайдера, сумісного з OpenAI |
| `plugin-sdk/provider-setup` | Кураторські допоміжні засоби налаштування локального/self-hosted провайдера |
| `plugin-sdk/self-hosted-provider-setup` | Сфокусовані допоміжні засоби налаштування self-hosted провайдера, сумісного з OpenAI |
| `plugin-sdk/cli-backend` | Значення CLI backend за замовчуванням + константи watchdog |
| `plugin-sdk/provider-auth-runtime` | Допоміжні функції визначення API-ключа під час виконання для plugin провайдерів |
| `plugin-sdk/provider-auth-api-key` | Допоміжні функції онбордингу API-ключа/запису профілю, такі як `upsertApiKeyProfile` |
| `plugin-sdk/provider-auth-result` | Стандартний конструктор результату OAuth-автентифікації |
| `plugin-sdk/provider-auth-login` | Спільні допоміжні функції інтерактивного входу для plugin провайдерів |
| `plugin-sdk/provider-env-vars` | Допоміжні функції пошуку auth env var для провайдера |
| `plugin-sdk/provider-auth-runtime` | Допоміжні засоби визначення API-ключа в рантаймі для Plugin провайдерів |
| `plugin-sdk/provider-auth-api-key` | Допоміжні засоби онбордингу/запису профілю API-ключа, такі як `upsertApiKeyProfile` |
| `plugin-sdk/provider-auth-result` | Стандартний побудовник результату OAuth-автентифікації |
| `plugin-sdk/provider-auth-login` | Спільні допоміжні засоби інтерактивного входу для Plugin провайдерів |
| `plugin-sdk/provider-env-vars` | Допоміжні засоби пошуку env vars для автентифікації провайдера |
| `plugin-sdk/provider-auth` | `createProviderApiKeyAuthMethod`, `ensureApiKeyFromOptionEnvOrPrompt`, `upsertAuthProfile`, `upsertApiKeyProfile`, `writeOAuthCredentials` |
| `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`, спільні конструктори replay-policy, допоміжні функції endpoint провайдера та функції нормалізації model-id, такі як `normalizeNativeXaiModelId` |
| `plugin-sdk/provider-model-shared` | `ProviderReplayFamily`, `buildProviderReplayFamilyHooks`, `normalizeModelCompat`, спільні побудовники політики replay, допоміжні засоби endpoint провайдера та допоміжні засоби нормалізації ідентифікатора моделі, такі як `normalizeNativeXaiModelId` |
| `plugin-sdk/provider-catalog-shared` | `findCatalogTemplate`, `buildSingleProviderApiKeyCatalog`, `supportsNativeStreamingUsageCompat`, `applyProviderNativeStreamingUsageCompat` |
| `plugin-sdk/provider-http` | Загальні допоміжні функції HTTP/можливостей endpoint провайдера, помилки provider HTTP і допоміжні функції multipart form для транскрибування аудіо |
| `plugin-sdk/provider-web-fetch-contract` | Вузькі допоміжні функції контракту конфігурації/вибору web-fetch, такі як `enablePluginInConfig` і `WebFetchProviderPlugin` |
| `plugin-sdk/provider-web-fetch` | Допоміжні функції реєстрації/кешування web-fetch провайдера |
| `plugin-sdk/provider-web-search-config-contract` | Вузькі допоміжні функції конфігурації/облікових даних web-search для провайдерів, яким не потрібна логіка ввімкнення plugin |
| `plugin-sdk/provider-web-search-contract` | Вузькі допоміжні функції контракту конфігурації/облікових даних web-search, такі як `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig` і scoped setter/getter для облікових даних |
| `plugin-sdk/provider-web-search` | Допоміжні функції реєстрації/кешування/runtime для web-search провайдера |
| `plugin-sdk/provider-tools` | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, очищення схеми Gemini + діагностика, а також допоміжні функції сумісності xAI, такі як `resolveXaiModelCompatPatch` / `applyXaiModelCompat` |
| `plugin-sdk/provider-usage` | `fetchClaudeUsage` та подібні |
| `plugin-sdk/provider-stream` | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, типи обгорток потоків і спільні допоміжні функції обгорток для Anthropic/Bedrock/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot |
| `plugin-sdk/provider-transport-runtime` | Нативні допоміжні функції транспорту провайдера, такі як guarded fetch, перетворення transport message і потоки подій writable transport |
| `plugin-sdk/provider-onboard` | Допоміжні функції патчингу конфігурації онбордингу |
| `plugin-sdk/global-singleton` | Допоміжні функції process-local singleton/map/cache |
| `plugin-sdk/group-activation` | Вузькі допоміжні функції режиму активації груп і розбору команд |
| `plugin-sdk/provider-http` | Загальні допоміжні засоби можливостей HTTP/endpoint провайдера, HTTP-помилки провайдера та допоміжні засоби multipart form для аудіотранскрипції |
| `plugin-sdk/provider-web-fetch-contract` | Вузькі допоміжні засоби контракту конфігурації/вибору web-fetch, такі як `enablePluginInConfig` і `WebFetchProviderPlugin` |
| `plugin-sdk/provider-web-fetch` | Допоміжні засоби реєстрації/кешування провайдера web-fetch |
| `plugin-sdk/provider-web-search-config-contract` | Вузькі допоміжні засоби конфігурації/облікових даних web-search для провайдерів, яким не потрібне підключення вмикання Plugin |
| `plugin-sdk/provider-web-search-contract` | Вузькі допоміжні засоби контракту конфігурації/облікових даних web-search, такі як `createWebSearchProviderContractFields`, `enablePluginInConfig`, `resolveProviderWebSearchPluginConfig` і обмежені сетери/гетери облікових даних |
| `plugin-sdk/provider-web-search` | Допоміжні засоби реєстрації/кешування/runtime провайдера web-search |
| `plugin-sdk/provider-tools` | `ProviderToolCompatFamily`, `buildProviderToolCompatFamilyHooks`, очищення схеми Gemini + діагностика та допоміжні засоби сумісності xAI, такі як `resolveXaiModelCompatPatch` / `applyXaiModelCompat` |
| `plugin-sdk/provider-usage` | `fetchClaudeUsage` та подібне |
| `plugin-sdk/provider-stream` | `ProviderStreamFamily`, `buildProviderStreamFamilyHooks`, `composeProviderStreamWrappers`, типи обгорток потоку та спільні допоміжні засоби обгорток для Anthropic/Bedrock/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot |
| `plugin-sdk/provider-transport-runtime` | Допоміжні засоби native transport провайдера, такі як guarded fetch, перетворення transport message і потоки подій writable transport |
| `plugin-sdk/provider-onboard` | Допоміжні засоби patch конфігурації онбордингу |
| `plugin-sdk/global-singleton` | Допоміжні засоби process-local singleton/map/cache |
| `plugin-sdk/group-activation` | Вузькі допоміжні засоби режиму активації групи та розбору команд |
</Accordion>
<Accordion title="Підшляхи автентифікації та безпеки">
| Підшлях | Ключові експорти |
| --- | --- |
| `plugin-sdk/command-auth` | `resolveControlCommandGate`, допоміжні функції реєстру команд, допоміжні функції авторизації відправника |
| `plugin-sdk/command-status` | Конструктори повідомлень команд/довідки, такі як `buildCommandsMessagePaginated` і `buildHelpMessage` |
| `plugin-sdk/approval-auth-runtime` | Допоміжні функції визначення затверджувача та автентифікації дій у тому самому чаті |
| `plugin-sdk/approval-client-runtime` | Допоміжні функції профілю/фільтра нативного затвердження exec |
| `plugin-sdk/approval-delivery-runtime` | Адаптери можливостей/доставки нативного затвердження |
| `plugin-sdk/approval-gateway-runtime` | Спільна допоміжна функція визначення Gateway для затвердження |
| `plugin-sdk/approval-handler-adapter-runtime` | Полегшені допоміжні функції завантаження адаптера нативного затвердження для гарячих точок входу каналів |
| `plugin-sdk/approval-handler-runtime` | Ширші допоміжні функції runtime для обробника затвердження; надавайте перевагу вужчим швам adapter/gateway, коли їх достатньо |
| `plugin-sdk/approval-native-runtime` | Допоміжні функції нативного затвердження цілі + прив’язки акаунта |
| `plugin-sdk/approval-reply-runtime` | Допоміжні функції payload відповіді на затвердження exec/plugin |
| `plugin-sdk/approval-runtime` | Допоміжні функції payload затвердження exec/plugin, допоміжні функції маршрутизації/runtime нативного затвердження та структуровані допоміжні функції відображення затвердження, такі як `formatApprovalDisplayPath` |
| `plugin-sdk/reply-dedupe` | Вузькі допоміжні функції скидання дедуплікації вхідних відповідей |
| `plugin-sdk/channel-contract-testing` | Вузькі допоміжні функції тестування контракту каналу без широкого testing barrel |
| `plugin-sdk/command-auth-native` | Нативна автентифікація команд + допоміжні функції цілі нативної сесії |
| `plugin-sdk/command-detection` | Спільні допоміжні функції виявлення команд |
| `plugin-sdk/command-primitives-runtime` | Полегшені предикати тексту команд для гарячих шляхів каналів |
| `plugin-sdk/command-surface` | Допоміжні функції нормалізації тіла команди та поверхні команд |
| `plugin-sdk/command-auth` | `resolveControlCommandGate`, допоміжні засоби реєстру команд, допоміжні засоби авторизації відправника |
| `plugin-sdk/command-status` | Побудовники команд/довідкових повідомлень, такі як `buildCommandsMessagePaginated` і `buildHelpMessage` |
| `plugin-sdk/approval-auth-runtime` | Визначення затверджувача та допоміжні засоби автентифікації дій у тому самому чаті |
| `plugin-sdk/approval-client-runtime` | Допоміжні засоби профілю/фільтра native exec approval |
| `plugin-sdk/approval-delivery-runtime` | Native адаптери можливостей/доставки approval |
| `plugin-sdk/approval-gateway-runtime` | Спільний допоміжний засіб визначення approval gateway |
| `plugin-sdk/approval-handler-adapter-runtime` | Легковагові допоміжні засоби завантаження native approval adapter для гарячих точок входу каналу |
| `plugin-sdk/approval-handler-runtime` | Ширші допоміжні засоби approval handler runtime; надавайте перевагу вужчим adapter/gateway seams, коли їх достатньо |
| `plugin-sdk/approval-native-runtime` | Допоміжні засоби native approval target + прив’язки акаунта |
| `plugin-sdk/approval-reply-runtime` | Допоміжні засоби reply payload для exec/plugin approval |
| `plugin-sdk/approval-runtime` | Допоміжні засоби payload для exec/plugin approval, допоміжні засоби native approval routing/runtime і допоміжні засоби структурованого відображення approval, такі як `formatApprovalDisplayPath` |
| `plugin-sdk/reply-dedupe` | Вузькі допоміжні засоби скидання дедуплікації вхідних відповідей |
| `plugin-sdk/channel-contract-testing` | Вузькі допоміжні засоби тестування контракту каналу без широкого testing barrel |
| `plugin-sdk/command-auth-native` | Native command auth + допоміжні засоби native session-target |
| `plugin-sdk/command-detection` | Спільні допоміжні засоби виявлення команд |
| `plugin-sdk/command-primitives-runtime` | Легковагові предикати тексту команд для гарячих шляхів каналу |
| `plugin-sdk/command-surface` | Нормалізація command-body і допоміжні засоби command-surface |
| `plugin-sdk/allow-from` | `formatAllowFromLowercase` |
| `plugin-sdk/channel-secret-runtime` | Вузькі допоміжні функції збирання secret-contract для поверхонь секретів каналу/plugin |
| `plugin-sdk/secret-ref-runtime` | Вузькі допоміжні функції `coerceSecretRef` і типізації SecretRef для парсингу secret-contract/config |
| `plugin-sdk/security-runtime` | Спільні допоміжні функції довіри, DM gating, зовнішнього вмісту та збирання секретів |
| `plugin-sdk/ssrf-policy` | Допоміжні функції політики SSRF для allowlist хостів і приватних мереж |
| `plugin-sdk/ssrf-dispatcher` | Вузькі допоміжні функції pinned dispatcher без широкої інфраструктурної runtime-поверхні |
| `plugin-sdk/ssrf-runtime` | Допоміжні функції pinned dispatcher, fetch із захистом SSRF і політики SSRF |
| `plugin-sdk/secret-input` | Допоміжні функції парсингу секретного введення |
| `plugin-sdk/webhook-ingress` | Допоміжні функції запиту/цілі Webhook |
| `plugin-sdk/webhook-request-guards` | Допоміжні функції обмеження розміру тіла запиту/тайм-ауту |
| `plugin-sdk/channel-secret-runtime` | Вузькі допоміжні засоби збирання secret-contract для поверхонь секретів каналу/plugin |
| `plugin-sdk/secret-ref-runtime` | Вузькі допоміжні засоби `coerceSecretRef` і типізації SecretRef для розбору secret-contract/config |
| `plugin-sdk/security-runtime` | Спільні допоміжні засоби trust, DM gating, external-content і збирання секретів |
| `plugin-sdk/ssrf-policy` | Допоміжні засоби політики SSRF для allowlist хостів і приватних мереж |
| `plugin-sdk/ssrf-dispatcher` | Вузькі допоміжні засоби pinned-dispatcher без широкої поверхні infra runtime |
| `plugin-sdk/ssrf-runtime` | Допоміжні засоби pinned-dispatcher, fetch із захистом SSRF і політики SSRF |
| `plugin-sdk/secret-input` | Допоміжні засоби розбору secret input |
| `plugin-sdk/webhook-ingress` | Допоміжні засоби запиту/цілі Webhook |
| `plugin-sdk/webhook-request-guards` | Допоміжні засоби розміру body/timeout запиту |
</Accordion>
<Accordion title="Підшляхи runtime і сховища">
| Підшлях | Ключові експорти |
| --- | --- |
| `plugin-sdk/runtime` | Широкі допоміжні функції runtime/логування/резервного копіювання/встановлення plugin |
| `plugin-sdk/runtime-env` | Вузькі допоміжні функції runtime env, logger, timeout, retry і backoff |
| `plugin-sdk/channel-runtime-context` | Загальні допоміжні функції реєстрації та пошуку runtime-контексту каналу |
| `plugin-sdk/runtime` | Широкі допоміжні засоби runtime/logging/backup/встановлення plugin |
| `plugin-sdk/runtime-env` | Вузькі допоміжні засоби runtime env, logger, timeout, retry і backoff |
| `plugin-sdk/channel-runtime-context` | Загальні допоміжні засоби реєстрації та пошуку channel runtime-context |
| `plugin-sdk/runtime-store` | `createPluginRuntimeStore` |
| `plugin-sdk/plugin-runtime` | Спільні допоміжні функції команд/хуків/http/interactive для plugin |
| `plugin-sdk/hook-runtime` | Спільні допоміжні функції pipeline для webhook/внутрішніх hook |
| `plugin-sdk/lazy-runtime` | Допоміжні функції lazy import/прив’язки runtime, такі як `createLazyRuntimeModule`, `createLazyRuntimeMethod` і `createLazyRuntimeSurface` |
| `plugin-sdk/process-runtime` | Допоміжні функції виконання процесів |
| `plugin-sdk/cli-runtime` | Допоміжні функції форматування CLI, очікування та версій |
| `plugin-sdk/gateway-runtime` | Допоміжні функції клієнта Gateway і патчингу статусу каналу |
| `plugin-sdk/config-runtime` | Допоміжні функції завантаження/запису конфігурації та пошуку конфігурації plugin |
| `plugin-sdk/telegram-command-config` | Допоміжні функції нормалізації назв/описів команд Telegram і перевірки дублікатів/конфліктів, навіть коли поверхня bundled Telegram contract недоступна |
| `plugin-sdk/text-autolink-runtime` | Виявлення autolink для посилань на файли без широкого text-runtime barrel |
| `plugin-sdk/approval-runtime` | Допоміжні функції затвердження exec/plugin, конструктори approval-capability, допоміжні функції auth/profile, допоміжні функції native routing/runtime і форматування структурованого шляху відображення затвердження |
| `plugin-sdk/reply-runtime` | Спільні допоміжні функції inbound/reply runtime, chunking, dispatch, Heartbeat, planner відповідей |
| `plugin-sdk/reply-dispatch-runtime` | Вузькі допоміжні функції dispatch/finalize відповідей і міток розмов |
| `plugin-sdk/reply-history` | Спільні допоміжні функції коротковіконної історії відповідей, такі як `buildHistoryContext`, `recordPendingHistoryEntry` і `clearHistoryEntriesIfEnabled` |
| `plugin-sdk/plugin-runtime` | Спільні допоміжні засоби команд/hook/http/interactive для plugin |
| `plugin-sdk/hook-runtime` | Спільні допоміжні засоби конвеєра webhook/internal hook |
| `plugin-sdk/lazy-runtime` | Допоміжні засоби lazy runtime import/binding, такі як `createLazyRuntimeModule`, `createLazyRuntimeMethod` і `createLazyRuntimeSurface` |
| `plugin-sdk/process-runtime` | Допоміжні засоби виконання процесів |
| `plugin-sdk/cli-runtime` | Допоміжні засоби форматування CLI, очікування та версій |
| `plugin-sdk/gateway-runtime` | Допоміжні засоби gateway client і channel-status patch |
| `plugin-sdk/config-runtime` | Допоміжні засоби завантаження/запису config і допоміжні засоби пошуку plugin-config |
| `plugin-sdk/telegram-command-config` | Нормалізація імені/опису команд Telegram та перевірки дублікатів/конфліктів, навіть коли поверхня bundled Telegram contract недоступна |
| `plugin-sdk/text-autolink-runtime` | Виявлення автопосилань на файлові посилання без широкого text-runtime barrel |
| `plugin-sdk/approval-runtime` | Допоміжні засоби exec/plugin approval, побудовники approval-capability, допоміжні засоби auth/profile, native routing/runtime helpers і форматування шляху структурованого відображення approval |
| `plugin-sdk/reply-runtime` | Спільні допоміжні засоби inbound/reply runtime, chunking, dispatch, Heartbeat, planner відповіді |
| `plugin-sdk/reply-dispatch-runtime` | Вузькі допоміжні засоби dispatch/finalize відповіді та міток розмови |
| `plugin-sdk/reply-history` | Спільні допоміжні засоби історії відповідей короткого вікна, такі як `buildHistoryContext`, `recordPendingHistoryEntry` і `clearHistoryEntriesIfEnabled` |
| `plugin-sdk/reply-reference` | `createReplyReferencePlanner` |
| `plugin-sdk/reply-chunking` | Вузькі допоміжні функції chunking тексту/markdown |
| `plugin-sdk/session-store-runtime` | Допоміжні функції шляху сховища сесій + updated-at |
| `plugin-sdk/state-paths` | Допоміжні функції шляхів до каталогів state/OAuth |
| `plugin-sdk/routing` | Допоміжні функції маршруту/ключа сесії/прив’язки акаунта, такі як `resolveAgentRoute`, `buildAgentSessionKey` і `resolveDefaultAgentBoundAccountId` |
| `plugin-sdk/status-helpers` | Спільні допоміжні функції зведення статусу каналу/акаунта, типові значення runtime-state та допоміжні функції метаданих проблем |
| `plugin-sdk/target-resolver-runtime` | Спільні допоміжні функції визначення цілей |
| `plugin-sdk/string-normalization-runtime` | Допоміжні функції нормалізації slug/рядків |
| `plugin-sdk/request-url` | Витягання рядкових URL з fetch/request-подібних входів |
| `plugin-sdk/run-command` | Запускач команд із таймінгом і нормалізованими результатами stdout/stderr |
| `plugin-sdk/param-readers` | Поширені читачі параметрів tool/CLI |
| `plugin-sdk/tool-payload` | Витягання нормалізованих payload з об’єктів результатів tool |
| `plugin-sdk/tool-send` | Витягання канонічних полів цілі надсилання з аргументів tool |
| `plugin-sdk/temp-path` | Спільні допоміжні функції шляхів до тимчасових завантажень |
| `plugin-sdk/logging-core` | Допоміжні функції logger підсистем і редагування чутливих даних |
| `plugin-sdk/markdown-table-runtime` | Допоміжні функції режиму та перетворення таблиць Markdown |
| `plugin-sdk/json-store` | Невеликі допоміжні функції читання/запису JSON-стану |
| `plugin-sdk/file-lock` | Допоміжні функції повторно вхідного file-lock |
| `plugin-sdk/persistent-dedupe` | Допоміжні функції кешу дедуплікації з дисковим зберіганням |
| `plugin-sdk/acp-runtime` | Допоміжні функції runtime/сесій ACP і reply-dispatch |
| `plugin-sdk/acp-binding-resolve-runtime` | Лише для читання: визначення прив’язок ACP без імпортів запуску життєвого циклу |
| `plugin-sdk/reply-chunking` | Вузькі допоміжні засоби chunking тексту/markdown |
| `plugin-sdk/session-store-runtime` | Допоміжні засоби шляху сховища сесій + `updated-at` |
| `plugin-sdk/state-paths` | Допоміжні засоби шляхів каталогів state/OAuth |
| `plugin-sdk/routing` | Допоміжні засоби route/session-key/account binding, такі як `resolveAgentRoute`, `buildAgentSessionKey` і `resolveDefaultAgentBoundAccountId` |
| `plugin-sdk/status-helpers` | Спільні допоміжні засоби зведення стану каналу/акаунта, значення runtime-state за замовчуванням і допоміжні засоби метаданих issue |
| `plugin-sdk/target-resolver-runtime` | Спільні допоміжні засоби target resolver |
| `plugin-sdk/string-normalization-runtime` | Допоміжні засоби нормалізації slug/рядків |
| `plugin-sdk/request-url` | Видобування рядкових URL із входів, подібних до fetch/request |
| `plugin-sdk/run-command` | Виконавець команд із таймером і нормалізованими результатами stdout/stderr |
| `plugin-sdk/param-readers` | Загальні зчитувачі параметрів tool/CLI |
| `plugin-sdk/tool-payload` | Видобування нормалізованих payload із об’єктів результатів tool |
| `plugin-sdk/tool-send` | Видобування канонічних полів цілі надсилання з аргументів tool |
| `plugin-sdk/temp-path` | Спільні допоміжні засоби шляхів тимчасового завантаження |
| `plugin-sdk/logging-core` | Допоміжні засоби subsystem logger і редагування чутливих даних |
| `plugin-sdk/markdown-table-runtime` | Допоміжні засоби режиму таблиць Markdown і конвертації |
| `plugin-sdk/json-store` | Невеликі допоміжні засоби читання/запису стану JSON |
| `plugin-sdk/file-lock` | Допоміжні засоби повторно вхідного file-lock |
| `plugin-sdk/persistent-dedupe` | Допоміжні засоби кешу дедуплікації з дисковим зберіганням |
| `plugin-sdk/acp-runtime` | Допоміжні засоби runtime/session і reply-dispatch для ACP |
| `plugin-sdk/acp-binding-resolve-runtime` | Розв’язання прив’язок ACP лише для читання без import запуску життєвого циклу |
| `plugin-sdk/agent-config-primitives` | Вузькі примітиви config-schema runtime агента |
| `plugin-sdk/boolean-param` | Гнучкий читач булевих параметрів |
| `plugin-sdk/dangerous-name-runtime` | Допоміжні функції визначення збігу небезпечних назв |
| `plugin-sdk/device-bootstrap` | Допоміжні функції початкового налаштування пристрою та токенів pairing |
| `plugin-sdk/extension-shared` | Спільні примітиви допоміжних функцій passive-channel, status і ambient proxy |
| `plugin-sdk/models-provider-runtime` | Допоміжні функції відповіді провайдера/команди `/models` |
| `plugin-sdk/skill-commands-runtime` | Допоміжні функції переліку команд Skills |
| `plugin-sdk/native-command-registry` | Допоміжні функції реєстру/побудови/серіалізації нативних команд |
| `plugin-sdk/agent-harness` | Експериментальна поверхня trusted-plugin для низькорівневих harness агента: типи harness, допоміжні функції steer/abort активного запуску, допоміжні функції мосту tool OpenClaw, допоміжні функції форматування/деталізації прогресу tool і утиліти результатів спроб |
| `plugin-sdk/provider-zai-endpoint` | Допоміжні функції виявлення endpoint Z.A.I |
| `plugin-sdk/infra-runtime` | Допоміжні функції системних подій/Heartbeat |
| `plugin-sdk/collection-runtime` | Невеликі допоміжні функції обмеженого кешу |
| `plugin-sdk/diagnostic-runtime` | Допоміжні функції діагностичних прапорців і подій |
| `plugin-sdk/error-runtime` | Граф помилок, форматування, спільні допоміжні функції класифікації помилок, `isApprovalNotFoundError` |
| `plugin-sdk/fetch-runtime` | Допоміжні функції обгорнутого fetch, proxy і pinned lookup |
| `plugin-sdk/runtime-fetch` | Runtime fetch з урахуванням dispatcher без імпортів proxy/guarded-fetch |
| `plugin-sdk/response-limit-runtime` | Читач обмеженого тіла відповіді без широкої media runtime-поверхні |
| `plugin-sdk/session-binding-runtime` | Поточний стан прив’язки розмови без маршрутизації налаштованих прив’язок або сховищ pairing |
| `plugin-sdk/session-store-runtime` | Допоміжні функції читання сховища сесій без широких імпортів запису/обслуговування конфігурації |
| `plugin-sdk/context-visibility-runtime` | Визначення видимості контексту та фільтрація додаткового контексту без широких імпортів config/security |
| `plugin-sdk/string-coerce-runtime` | Вузькі допоміжні функції приведення й нормалізації primitive record/string без імпортів markdown/logging |
| `plugin-sdk/host-runtime` | Допоміжні функції нормалізації hostname і SCP host |
| `plugin-sdk/retry-runtime` | Допоміжні функції конфігурації retry і запуску retry |
| `plugin-sdk/agent-runtime` | Допоміжні функції каталогу/ідентичності/робочого простору агента |
| `plugin-sdk/directory-runtime` | Запити/дедуплікація каталогів на основі конфігурації |
| `plugin-sdk/boolean-param` | Нестрогий зчитувач булевих параметрів |
| `plugin-sdk/dangerous-name-runtime` | Допоміжні засоби визначення збігів небезпечних імен |
| `plugin-sdk/device-bootstrap` | Допоміжні засоби bootstrap пристрою та токенів парування |
| `plugin-sdk/extension-shared` | Спільні примітиви допоміжних засобів passive-channel, status і ambient proxy |
| `plugin-sdk/models-provider-runtime` | Допоміжні засоби відповіді `/models` command/provider |
| `plugin-sdk/skill-commands-runtime` | Допоміжні засоби переліку команд Skills |
| `plugin-sdk/native-command-registry` | Допоміжні засоби реєстру/build/serialize native команд |
| `plugin-sdk/agent-harness` | Експериментальна поверхня trusted-plugin для низькорівневих harness агента: типи harness, допоміжні засоби steer/abort для active-run, допоміжні засоби мосту tool OpenClaw, допоміжні засоби форматування/деталізації прогресу tool і утиліти результатів спроб |
| `plugin-sdk/provider-zai-endpoint` | Допоміжні засоби виявлення endpoint Z.AI |
| `plugin-sdk/infra-runtime` | Допоміжні засоби системних подій/Heartbeat |
| `plugin-sdk/collection-runtime` | Невеликі допоміжні засоби обмеженого кешу |
| `plugin-sdk/diagnostic-runtime` | Допоміжні засоби діагностичних прапорців і подій |
| `plugin-sdk/error-runtime` | Граф помилок, форматування, спільні допоміжні засоби класифікації помилок, `isApprovalNotFoundError` |
| `plugin-sdk/fetch-runtime` | Обгорнуті допоміжні засоби fetch, proxy і pinned lookup |
| `plugin-sdk/runtime-fetch` | Runtime fetch з урахуванням dispatcher без import proxy/guarded-fetch |
| `plugin-sdk/response-limit-runtime` | Зчитувач body відповіді з обмеженням без широкої поверхні media runtime |
| `plugin-sdk/session-binding-runtime` | Поточний стан прив’язки розмови без маршрутизації configured binding або сховищ парування |
| `plugin-sdk/session-store-runtime` | Допоміжні засоби читання session-store без широких import запису/обслуговування config |
| `plugin-sdk/context-visibility-runtime` | Визначення видимості контексту та фільтрація додаткового контексту без широких import config/security |
| `plugin-sdk/string-coerce-runtime` | Вузькі допоміжні засоби приведення і нормалізації primitive record/string без import markdown/logging |
| `plugin-sdk/host-runtime` | Допоміжні засоби нормалізації hostname і SCP host |
| `plugin-sdk/retry-runtime` | Допоміжні засоби конфігурації retry і виконавця retry |
| `plugin-sdk/agent-runtime` | Допоміжні засоби каталогу/ідентичності/робочого простору агента |
| `plugin-sdk/directory-runtime` | Запит/dedup каталогів із підтримкою config |
| `plugin-sdk/keyed-async-queue` | `KeyedAsyncQueue` |
</Accordion>
<Accordion title="Підшляхи можливостей і тестування">
| Підшлях | Ключові експорти |
| --- | --- |
| `plugin-sdk/media-runtime` | Спільні допоміжні функції fetch/transform/store для медіа, а також конструктори media payload |
| `plugin-sdk/media-store` | Вузькі допоміжні функції сховища медіа, такі як `saveMediaBuffer` |
| `plugin-sdk/media-generation-runtime` | Спільні допоміжні функції failover для генерації медіа, вибору кандидатів і повідомлень про відсутню модель |
| `plugin-sdk/media-understanding` | Типи провайдерів розуміння медіа, а також орієнтовані на провайдера експорти допоміжних функцій для зображень/аудіо |
| `plugin-sdk/text-runtime` | Спільні допоміжні функції text/markdown/logging, такі як вилучення тексту, видимого асистенту, допоміжні функції рендерингу/chunking/таблиць Markdown, редагування чутливих даних, допоміжні функції тегів директив і утиліти безпечного тексту |
| `plugin-sdk/text-chunking` | Допоміжна функція chunking вихідного тексту |
| `plugin-sdk/speech` | Типи провайдерів мовлення, а також орієнтовані на провайдера експорти директив, реєстру, валідації та допоміжних функцій мовлення |
| `plugin-sdk/speech-core` | Спільні типи провайдерів мовлення, реєстр, директива, нормалізація та експорти допоміжних функцій мовлення |
| `plugin-sdk/realtime-transcription` | Типи провайдерів транскрипції в реальному часі, допоміжні функції реєстру та спільна допоміжна функція WebSocket-сесії |
| `plugin-sdk/realtime-voice` | Типи провайдерів голосу в реальному часі та допоміжні функції реєстру |
| `plugin-sdk/media-runtime` | Спільні допоміжні засоби fetch/transform/store медіа, а також побудовники media payload |
| `plugin-sdk/media-store` | Вузькі допоміжні засоби media store, такі як `saveMediaBuffer` |
| `plugin-sdk/media-generation-runtime` | Спільні допоміжні засоби failover для генерації медіа, вибору кандидатів і повідомлень про відсутню модель |
| `plugin-sdk/media-understanding` | Типи провайдерів media understanding, а також орієнтовані на провайдера допоміжні експорти для зображень/аудіо |
| `plugin-sdk/text-runtime` | Спільні допоміжні засоби text/markdown/logging, такі як видалення видимого для помічника тексту, допоміжні засоби render/chunking/table для markdown, допоміжні засоби редагування чутливих даних, допоміжні засоби тегів директив і утиліти безпечного тексту |
| `plugin-sdk/text-chunking` | Допоміжний засіб chunking вихідного тексту |
| `plugin-sdk/speech` | Типи провайдерів мовлення, а також орієнтовані на провайдера допоміжні експорти directive, registry, validation і speech |
| `plugin-sdk/speech-core` | Спільні типи провайдерів мовлення, registry, directive, normalization і допоміжні експорти speech |
| `plugin-sdk/realtime-transcription` | Типи провайдерів транскрипції в реальному часі, допоміжні засоби registry і спільний допоміжний засіб WebSocket session |
| `plugin-sdk/realtime-voice` | Типи провайдерів голосу в реальному часі та допоміжні засоби registry |
| `plugin-sdk/image-generation` | Типи провайдерів генерації зображень |
| `plugin-sdk/image-generation-core` | Спільні типи генерації зображень, допоміжні функції failover, auth і реєстру |
| `plugin-sdk/music-generation` | Типи провайдерів/запитів/результатів генерації музики |
| `plugin-sdk/music-generation-core` | Спільні типи генерації музики, допоміжні функції failover, пошуку провайдера і парсингу model-ref |
| `plugin-sdk/video-generation` | Типи провайдерів/запитів/результатів генерації відео |
| `plugin-sdk/video-generation-core` | Спільні типи генерації відео, допоміжні функції failover, пошуку провайдера і парсингу model-ref |
| `plugin-sdk/webhook-targets` | Допоміжні функції реєстру цілей Webhook і встановлення маршрутів |
| `plugin-sdk/webhook-path` | Допоміжні функції нормалізації шляху Webhook |
| `plugin-sdk/web-media` | Спільні допоміжні функції завантаження віддалених/локальних медіа |
| `plugin-sdk/image-generation-core` | Спільні типи генерації зображень, допоміжні засоби failover, auth і registry |
| `plugin-sdk/music-generation` | Типи провайдера/запиту/результату генерації музики |
| `plugin-sdk/music-generation-core` | Спільні типи генерації музики, допоміжні засоби failover, пошук провайдера та розбір model-ref |
| `plugin-sdk/video-generation` | Типи провайдера/запиту/результату генерації відео |
| `plugin-sdk/video-generation-core` | Спільні типи генерації відео, допоміжні засоби failover, пошук провайдера та розбір model-ref |
| `plugin-sdk/webhook-targets` | Допоміжні засоби реєстру цілей Webhook і встановлення маршрутів |
| `plugin-sdk/webhook-path` | Допоміжні засоби нормалізації шляху Webhook |
| `plugin-sdk/web-media` | Спільні допоміжні засоби завантаження віддалених/локальних медіа |
| `plugin-sdk/zod` | Повторно експортований `zod` для споживачів Plugin SDK |
| `plugin-sdk/testing` | `installCommonResolveTargetErrorCases`, `shouldAckReaction` |
</Accordion>
<Accordion title="Підшляхи пам’яті">
<Accordion title="Підшляхи Memory">
| Підшлях | Ключові експорти |
| --- | --- |
| `plugin-sdk/memory-core` | Поверхня допоміжних функцій bundled memory-core для manager/config/file/CLI |
| `plugin-sdk/memory-core-engine-runtime` | Runtime facade індексу/пошуку пам’яті |
| `plugin-sdk/memory-core-host-engine-foundation` | Експорти foundation engine хоста пам’яті |
| `plugin-sdk/memory-core-host-engine-embeddings` | Контракти embedding хоста пам’яті, доступ до реєстру, локальний провайдер і загальні batch/remote допоміжні функції |
| `plugin-sdk/memory-core-host-engine-qmd` | Експорти QMD engine хоста пам’яті |
| `plugin-sdk/memory-core-host-engine-storage` | Експорти storage engine хоста пам’яті |
| `plugin-sdk/memory-core-host-multimodal` | Багатомодальні допоміжні функції хоста пам’яті |
| `plugin-sdk/memory-core-host-query` | Допоміжні функції запитів хоста пам’яті |
| `plugin-sdk/memory-core-host-secret` | Допоміжні функції секретів хоста пам’яті |
| `plugin-sdk/memory-core-host-events` | Допоміжні функції журналу подій хоста пам’яті |
| `plugin-sdk/memory-core-host-status` | Допоміжні функції статусу хоста пам’яті |
| `plugin-sdk/memory-core-host-runtime-cli` | Допоміжні функції CLI runtime хоста пам’яті |
| `plugin-sdk/memory-core-host-runtime-core` | Основні допоміжні функції runtime хоста пам’яті |
| `plugin-sdk/memory-core-host-runtime-files` | Допоміжні функції файлів/runtime хоста пам’яті |
| `plugin-sdk/memory-host-core` | Нейтральний до постачальника псевдонім для основних допоміжних функцій runtime хоста пам’яті |
| `plugin-sdk/memory-host-events` | Нейтральний до постачальника псевдонім для допоміжних функцій журналу подій хоста пам’яті |
| `plugin-sdk/memory-host-files` | Нейтральний до постачальника псевдонім для допоміжних функцій файлів/runtime хоста пам’яті |
| `plugin-sdk/memory-host-markdown` | Спільні допоміжні функції керованого Markdown для plugin, пов’язаних із пам’яттю |
| `plugin-sdk/memory-host-search` | Runtime facade Active Memory для доступу до менеджера пошуку |
| `plugin-sdk/memory-host-status` | Нейтральний до постачальника псевдонім для допоміжних функцій статусу хоста пам’яті |
| `plugin-sdk/memory-lancedb` | Поверхня допоміжних функцій bundled memory-lancedb |
| `plugin-sdk/memory-core` | Поверхня допоміжних засобів bundled memory-core для менеджера/config/файлів/CLI |
| `plugin-sdk/memory-core-engine-runtime` | Runtime facade індексу/пошуку Memory |
| `plugin-sdk/memory-core-host-engine-foundation` | Експорти foundation engine хоста Memory |
| `plugin-sdk/memory-core-host-engine-embeddings` | Контракти embedding хоста Memory, доступ до registry, локальний провайдер і загальні допоміжні засоби batch/remote |
| `plugin-sdk/memory-core-host-engine-qmd` | Експорти QMD engine хоста Memory |
| `plugin-sdk/memory-core-host-engine-storage` | Експорти storage engine хоста Memory |
| `plugin-sdk/memory-core-host-multimodal` | Допоміжні засоби multimodal хоста Memory |
| `plugin-sdk/memory-core-host-query` | Допоміжні засоби запитів хоста Memory |
| `plugin-sdk/memory-core-host-secret` | Допоміжні засоби секретів хоста Memory |
| `plugin-sdk/memory-core-host-events` | Допоміжні засоби журналу подій хоста Memory |
| `plugin-sdk/memory-core-host-status` | Допоміжні засоби стану хоста Memory |
| `plugin-sdk/memory-core-host-runtime-cli` | Допоміжні засоби CLI runtime хоста Memory |
| `plugin-sdk/memory-core-host-runtime-core` | Допоміжні засоби core runtime хоста Memory |
| `plugin-sdk/memory-core-host-runtime-files` | Допоміжні засоби файлів/runtime хоста Memory |
| `plugin-sdk/memory-host-core` | Нейтральний до постачальника псевдонім для допоміжних засобів core runtime хоста Memory |
| `plugin-sdk/memory-host-events` | Нейтральний до постачальника псевдонім для допоміжних засобів журналу подій хоста Memory |
| `plugin-sdk/memory-host-files` | Нейтральний до постачальника псевдонім для допоміжних засобів файлів/runtime хоста Memory |
| `plugin-sdk/memory-host-markdown` | Спільні допоміжні засоби керованого markdown для plugin, суміжних із memory |
| `plugin-sdk/memory-host-search` | Active Memory runtime facade для доступу до search-manager |
| `plugin-sdk/memory-host-status` | Нейтральний до постачальника псевдонім для допоміжних засобів стану хоста Memory |
| `plugin-sdk/memory-lancedb` | Поверхня допоміжних засобів bundled memory-lancedb |
</Accordion>
<Accordion title="Зарезервовані підшляхи bundled-helper">
| Сімейство | Поточні підшляхи | Призначення |
| --- | --- | --- |
| Browser | `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` | Допоміжні функції підтримки bundled browser plugin (`browser-support` залишається barrel сумісності) |
| Matrix | `plugin-sdk/matrix`, `plugin-sdk/matrix-helper`, `plugin-sdk/matrix-runtime-heavy`, `plugin-sdk/matrix-runtime-shared`, `plugin-sdk/matrix-runtime-surface`, `plugin-sdk/matrix-surface`, `plugin-sdk/matrix-thread-bindings` | Поверхня допоміжних функцій/runtime bundled Matrix |
| Line | `plugin-sdk/line`, `plugin-sdk/line-core`, `plugin-sdk/line-runtime`, `plugin-sdk/line-surface` | Поверхня допоміжних функцій/runtime bundled LINE |
| IRC | `plugin-sdk/irc`, `plugin-sdk/irc-surface` | Поверхня допоміжних функцій bundled IRC |
| Допоміжні функції для окремих каналів | `plugin-sdk/googlechat`, `plugin-sdk/zalouser`, `plugin-sdk/bluebubbles`, `plugin-sdk/bluebubbles-policy`, `plugin-sdk/mattermost`, `plugin-sdk/mattermost-policy`, `plugin-sdk/feishu-conversation`, `plugin-sdk/msteams`, `plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`, `plugin-sdk/twitch` | Шви сумісності/допоміжних функцій bundled каналів |
| Допоміжні функції для auth/plugin | `plugin-sdk/github-copilot-login`, `plugin-sdk/github-copilot-token`, `plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`, `plugin-sdk/thread-ownership`, `plugin-sdk/voice-call` | Шви допоміжних функцій bundled можливостей/plugin; `plugin-sdk/github-copilot-token` наразі експортує `DEFAULT_COPILOT_API_BASE_URL`, `deriveCopilotApiBaseUrlFromToken` і `resolveCopilotApiToken` |
| Browser | `plugin-sdk/browser-cdp`, `plugin-sdk/browser-config-runtime`, `plugin-sdk/browser-config-support`, `plugin-sdk/browser-control-auth`, `plugin-sdk/browser-node-runtime`, `plugin-sdk/browser-profiles`, `plugin-sdk/browser-security-runtime`, `plugin-sdk/browser-setup-tools`, `plugin-sdk/browser-support` | Допоміжні засоби підтримки bundled browser plugin. `browser-profiles` експортує `resolveBrowserConfig`, `resolveProfile`, `ResolvedBrowserConfig`, `ResolvedBrowserProfile` і `ResolvedBrowserTabCleanupConfig` для нормалізованої форми `browser.tabCleanup`. `browser-support` залишається barrel зворотної сумісності. |
| Matrix | `plugin-sdk/matrix`, `plugin-sdk/matrix-helper`, `plugin-sdk/matrix-runtime-heavy`, `plugin-sdk/matrix-runtime-shared`, `plugin-sdk/matrix-runtime-surface`, `plugin-sdk/matrix-surface`, `plugin-sdk/matrix-thread-bindings` | Поверхня допоміжних засобів/runtime bundled Matrix |
| Line | `plugin-sdk/line`, `plugin-sdk/line-core`, `plugin-sdk/line-runtime`, `plugin-sdk/line-surface` | Поверхня допоміжних засобів/runtime bundled LINE |
| IRC | `plugin-sdk/irc`, `plugin-sdk/irc-surface` | Поверхня допоміжних засобів bundled IRC |
| Допоміжні засоби для конкретних каналів | `plugin-sdk/googlechat`, `plugin-sdk/zalouser`, `plugin-sdk/bluebubbles`, `plugin-sdk/bluebubbles-policy`, `plugin-sdk/mattermost`, `plugin-sdk/mattermost-policy`, `plugin-sdk/feishu-conversation`, `plugin-sdk/msteams`, `plugin-sdk/nextcloud-talk`, `plugin-sdk/nostr`, `plugin-sdk/tlon`, `plugin-sdk/twitch` | Шви сумісності/допоміжних засобів bundled каналів |
| Допоміжні засоби для конкретних auth/plugin | `plugin-sdk/github-copilot-login`, `plugin-sdk/github-copilot-token`, `plugin-sdk/diagnostics-otel`, `plugin-sdk/diffs`, `plugin-sdk/llm-task`, `plugin-sdk/thread-ownership`, `plugin-sdk/voice-call` | Шви допоміжних засобів bundled feature/plugin; `plugin-sdk/github-copilot-token` наразі експортує `DEFAULT_COPILOT_API_BASE_URL`, `deriveCopilotApiBaseUrlFromToken` і `resolveCopilotApiToken` |
</Accordion>
</AccordionGroup>
@ -285,4 +285,4 @@ x-i18n:
- [Огляд Plugin SDK](/uk/plugins/sdk-overview)
- [Налаштування Plugin SDK](/uk/plugins/sdk-setup)
- [Створення plugin](/uk/plugins/building-plugins)
- [Створення Plugin](/uk/plugins/building-plugins)

View File

@ -1,38 +1,41 @@
---
read_when:
- Налаштування safe bins або користувацьких профілів safe-bin
- Налаштування безпечних бінарних файлів або власних профілів safe-bin
- Переспрямування погоджень до Slack/Discord/Telegram або інших чат-каналів
- Реалізація нативного клієнта погоджень для каналу
summary: 'Розширені погодження exec: safe bins, прив’язка інтерпретатора, переспрямування погоджень, нативна доставка'
- Реалізація нативного клієнта погодження для каналу
summary: 'Розширені погодження exec: безпечні бінарні файли, прив’язка інтерпретатора, переспрямування погодження, нативна доставка'
title: Погодження exec — розширені можливості
x-i18n:
generated_at: "2026-04-24T03:49:09Z"
generated_at: "2026-04-25T03:24:44Z"
model: gpt-5.4
provider: openai
source_hash: b7834a8ebfb623b38e4c2676f0e24285d5b44e2dce45c55a33db842d1bbf81be
source_hash: f5fab4a65d2d14f0d15cbe750d718b2a4e8f781a218debdb24b41be570a22d87
source_path: tools/exec-approvals-advanced.md
workflow: 15
---
Розширені теми погодження exec: швидкий шлях `safeBins`, прив’язка інтерпретатора/runtime і переспрямування погоджень до чат-каналів (включно з нативною доставкою).
Про базову політику та потік погодження див. [Погодження exec](/uk/tools/exec-approvals).
Розширені теми погодження exec: fast-path `safeBins`, прив’язка
інтерпретатора/середовища виконання та переспрямування погоджень до чат-каналів
(включно з нативною доставкою).
Базову політику та потік погодження див. у [Погодження exec](/uk/tools/exec-approvals).
## Safe bins (лише stdin)
## Безпечні бінарні файли (лише stdin)
`tools.exec.safeBins` визначає невеликий список **бінарних файлів лише для stdin** (наприклад,
`cut`), які можуть працювати в режимі allowlist **без** явних записів allowlist. Safe bins відхиляють позиційні аргументи файлів і токени, схожі на шляхи, тому
можуть працювати лише з вхідним потоком. Сприймайте це як вузький швидкий шлях для
фільтрів потоку, а не як загальний список довіри.
`tools.exec.safeBins` визначає невеликий список **лише stdin** бінарних файлів (наприклад,
`cut`), які можуть працювати в режимі allowlist **без** явних записів в allowlist.
Безпечні бінарні файли відхиляють позиційні аргументи файлів і токени, схожі на шляхи, тож вони
можуть працювати лише з вхідним потоком. Розглядайте це як вузький fast-path для
потокових фільтрів, а не як загальний список довіри.
<Warning>
**Не** додавайте бінарні файли інтерпретаторів або runtime (наприклад `python3`, `node`,
**Не** додавайте бінарні файли інтерпретаторів або середовищ виконання (наприклад, `python3`, `node`,
`ruby`, `bash`, `sh`, `zsh`) до `safeBins`. Якщо команда може виконувати код,
запускати підкоманди або читати файли за задумом, надавайте перевагу явним записам allowlist
і залишайте запити на погодження ввімкненими. Користувацькі safe bins мають визначати явний
запускати підкоманди або за задумом читати файли, надавайте перевагу явним записам у allowlist
і залишайте ввімкненими запити на погодження. Власні безпечні бінарні файли мають визначати явний
профіль у `tools.exec.safeBinProfiles.<bin>`.
</Warning>
Типові safe bins:
Типові безпечні бінарні файли:
[//]: # "SAFE_BIN_DEFAULTS:START"
@ -40,16 +43,17 @@ x-i18n:
[//]: # "SAFE_BIN_DEFAULTS:END"
`grep` і `sort` не входять до типового списку. Якщо ви явно вмикаєте їх, зберігайте явні
записи allowlist для їхніх сценаріїв не через stdin. Для `grep` у режимі safe-bin
задавайте шаблон через `-e`/`--regexp`; позиційна форма шаблону відхиляється,
щоб операнди файлів не можна було непомітно передати як неоднозначні позиційні аргументи.
`grep` і `sort` не входять до типового списку. Якщо ви явно вмикаєте їх, залишайте явні
записи в allowlist для їхніх сценаріїв, що не використовують stdin. Для `grep` у режимі safe-bin
шаблон слід передавати через `-e`/`--regexp`; позиційна форма шаблону відхиляється,
щоб операнди файлів не можна було приховано передати як неоднозначні позиційні аргументи.
### Валідація argv і заборонені прапорці
### Перевірка Argv і заборонені прапорці
Валідація є детермінованою лише за формою argv (без перевірок існування файлової системи хоста),
що запобігає поведінці файлового oracle через відмінності allow/deny.
Файлоорієнтовані параметри заборонено для типових safe bins; long options перевіряються за принципом fail-closed (невідомі прапорці й неоднозначні скорочення
Перевірка є детермінованою лише за формою argv (без перевірок існування файлів
у файловій системі хоста), що запобігає поведінці oracle щодо існування файлів через
відмінності між дозволом і відмовою. Параметри, орієнтовані на файли, заборонені для типових safe-bin;
довгі параметри перевіряються за принципом fail-closed (невідомі прапорці та неоднозначні скорочення
відхиляються).
Заборонені прапорці за профілем safe-bin:
@ -63,205 +67,213 @@ x-i18n:
[//]: # "SAFE_BIN_DENIED_FLAGS:END"
Safe bins також примусово трактують токени argv як **буквальний текст** під час виконання
для сегментів лише зі stdin (без globbing і без розгортання `$VARS`), тому шаблони
Безпечні бінарні файли також примушують трактувати токени argv як **буквальний текст** під час виконання
для сегментів лише stdin (без globbing і без розгортання `$VARS`), тож шаблони
на кшталт `*` або `$HOME/...` не можна використати для прихованого читання файлів.
### Довірені каталоги бінарних файлів
Safe bins мають визначатися з довірених каталогів бінарних файлів (системні типові плюс
необов’язкові `tools.exec.safeBinTrustedDirs`). Записи `PATH` ніколи не стають автоматично довіреними.
Безпечні бінарні файли мають визначатися з довірених каталогів бінарних файлів (системні типові каталоги плюс
необов’язкові `tools.exec.safeBinTrustedDirs`). Записи `PATH` ніколи не вважаються довіреними автоматично.
Типові довірені каталоги навмисно мінімальні: `/bin`, `/usr/bin`. Якщо
ваш safe-bin executable розташований у шляхах package-manager/користувача (наприклад
ваш виконуваний файл safe-bin розташований у шляхах менеджера пакетів/користувача (наприклад
`/opt/homebrew/bin`, `/usr/local/bin`, `/opt/local/bin`, `/snap/bin`), додайте їх
явно до `tools.exec.safeBinTrustedDirs`.
### Ланцюжки shell, обгортки й multiplexer
### Ланцюжки shell, обгортки та мультиплексори
Ланцюжки shell (`&&`, `||`, `;`) дозволені, коли кожен сегмент верхнього рівня
задовольняє allowlist (включно з safe bins або auto-allow для Skill). Redirection як і раніше не підтримуються в режимі allowlist. Command substitution (`$()` / backticks) відхиляється під час розбору allowlist, зокрема всередині подвійних лапок; використовуйте одинарні лапки, якщо вам потрібен буквальний текст `$()`.
Ланцюжки shell (`&&`, `||`, `;`) дозволені, якщо кожен сегмент верхнього рівня
задовольняє allowlist (включно з safe bins або авто-дозволом Skills). Перенаправлення
і далі не підтримуються в режимі allowlist. Підстановка команд (`$()` / зворотні лапки) відхиляється
під час розбору allowlist, зокрема всередині подвійних лапок; використовуйте одинарні
лапки, якщо вам потрібен буквальний текст `$()`.
У погодженнях companion-app на macOS сирий текст shell, що містить керувальний синтаксис shell або синтаксис розгортання (`&&`, `||`, `;`, `|`, `` ` ``, `$`, `<`, `>`, `(`, `)`), вважається промахом allowlist, якщо тільки сам бінарний файл shell не внесено до allowlist.
У погодженнях companion-app на macOS сирий текст shell, що містить керувальний або
розширювальний синтаксис shell (`&&`, `||`, `;`, `|`, `` ` ``, `$`, `<`, `>`, `(`, `)`),
вважається промахом allowlist, якщо сам бінарний файл shell не внесений до allowlist.
Для обгорток shell (`bash|sh|zsh ... -c/-lc`) перевизначення env на рівні запиту
Для обгорток shell (`bash|sh|zsh ... -c/-lc`) перевизначення env в межах запиту
зводяться до невеликого явного allowlist (`TERM`, `LANG`, `LC_*`, `COLORTERM`,
`NO_COLOR`, `FORCE_COLOR`).
Для рішень `allow-always` у режимі allowlist відомі dispatch-обгортки (`env`,
`nice`, `nohup`, `stdbuf`, `timeout`) зберігають внутрішній шлях executable, а не шлях обгортки. Shell multiplexer (`busybox`, `toybox`) так само розгортаються для applet shell (`sh`, `ash` тощо). Якщо обгортку або multiplexer неможливо безпечно розгорнути, жоден запис allowlist автоматично не зберігається.
Для рішень `allow-always` у режимі allowlist відомі обгортки-диспетчери (`env`,
`nice`, `nohup`, `stdbuf`, `timeout`) зберігають внутрішній шлях до виконуваного файла замість
шляху до обгортки. Мультиплексори shell (`busybox`, `toybox`) так само розгортаються для
аплетів shell (`sh`, `ash` тощо). Якщо обгортку або мультиплексор неможливо
безпечно розгорнути, жоден запис allowlist не зберігається автоматично.
Якщо ви додаєте до allowlist інтерпретатори на кшталт `python3` або `node`, надавайте перевагу
`tools.exec.strictInlineEval=true`, щоб inline eval і далі вимагав явного погодження. У строгому режимі `allow-always` усе ще може зберігати нешкідливі
виклики інтерпретатора/скрипта, але носії inline-eval автоматично не зберігаються.
`tools.exec.strictInlineEval=true`, щоб inline eval і далі вимагав явного
погодження. У strict mode `allow-always` усе ще може зберігати нешкідливі
виклики інтерпретатора/скрипта, але носії inline-eval не зберігаються автоматично.
### Safe bins у порівнянні з allowlist
### Safe bins проти allowlist
| Тема | `tools.exec.safeBins` | Allowlist (`exec-approvals.json`) |
| ---------------- | ------------------------------------------------------ | ------------------------------------------------------------ |
| Мета | Автоматично дозволяти вузькі stdin-фільтри | Явно довіряти конкретним executable |
| Тип збігу | Назва executable + політика argv safe-bin | Glob-шаблон шляху визначеного executable |
| Область аргументів | Обмежена профілем safe-bin і правилами literal-token | Лише збіг шляху; за аргументи в іншому відповідаєте ви |
| Типові приклади | `head`, `tail`, `tr`, `wc` | `jq`, `python3`, `node`, `ffmpeg`, користувацькі CLI |
| Найкраще застосування | Низькоризикові текстові перетворення в pipeline | Будь-який інструмент із ширшою поведінкою або побічними ефектами |
| Тема | `tools.exec.safeBins` | Allowlist (`exec-approvals.json`) |
| ---------------- | ------------------------------------------------------ | ---------------------------------------------------------------------------------- |
| Мета | Автодозвіл вузьких stdin-фільтрів | Явна довіра до конкретних виконуваних файлів |
| Тип збігу | Ім’я виконуваного файла + політика argv safe-bin | Glob розв’язаного шляху виконуваного файла або glob простого імені команди для команд, викликаних через PATH |
| Область аргументів | Обмежена профілем safe-bin і правилами буквальних токенів | Лише збіг шляху; за аргументи в іншому відповідальність на вас |
| Типові приклади | `head`, `tail`, `tr`, `wc` | `jq`, `python3`, `node`, `ffmpeg`, власні CLI |
| Найкраще використання | Низькоризикові текстові перетворення в конвеєрах | Будь-який інструмент із ширшою поведінкою або побічними ефектами |
Розташування конфігурації:
- `safeBins` береться з config (`tools.exec.safeBins` або для агента `agents.list[].tools.exec.safeBins`).
- `safeBinTrustedDirs` береться з config (`tools.exec.safeBinTrustedDirs` або для агента `agents.list[].tools.exec.safeBinTrustedDirs`).
- `safeBinProfiles` береться з config (`tools.exec.safeBinProfiles` або для агента `agents.list[].tools.exec.safeBinProfiles`). Ключі профілів агента мають вищий пріоритет за глобальні ключі.
- записи allowlist зберігаються в локальному на хості `~/.openclaw/exec-approvals.json` у `agents.<id>.allowlist` (або через Control UI / `openclaw approvals allowlist ...`).
- `openclaw security audit` попереджає через `tools.exec.safe_bins_interpreter_unprofiled`, коли в `safeBins` з’являються бінарні файли інтерпретаторів/runtime без явних профілів.
- `openclaw doctor --fix` може створити каркас відсутніх записів `safeBinProfiles.<bin>` як `{}` (після цього перегляньте й посильте). Бінарні файли інтерпретаторів/runtime автоматично не створюються.
- `safeBins` походить із конфігурації (`tools.exec.safeBins` або `agents.list[].tools.exec.safeBins` для конкретного агента).
- `safeBinTrustedDirs` походить із конфігурації (`tools.exec.safeBinTrustedDirs` або `agents.list[].tools.exec.safeBinTrustedDirs` для конкретного агента).
- `safeBinProfiles` походить із конфігурації (`tools.exec.safeBinProfiles` або `agents.list[].tools.exec.safeBinProfiles` для конкретного агента). Ключі профілю для конкретного агента перевизначають глобальні ключі.
- записи allowlist зберігаються в локальному для хоста `~/.openclaw/exec-approvals.json` у `agents.<id>.allowlist` (або через Control UI / `openclaw approvals allowlist ...`).
- `openclaw security audit` попереджає через `tools.exec.safe_bins_interpreter_unprofiled`, коли бінарні файли інтерпретаторів/середовищ виконання з’являються в `safeBins` без явних профілів.
- `openclaw doctor --fix` може згенерувати відсутні записи `safeBinProfiles.<bin>` як `{}` (після цього перегляньте їх і посильте обмеження). Бінарні файли інтерпретаторів/середовищ виконання не генеруються автоматично.
Приклад користувацького профілю:
Приклад власного профілю:
__OC_I18N_900000__
Якщо ви явно додаєте `jq` до `safeBins`, OpenClaw усе одно відхиляє builtin `env` у режимі safe-bin,
тому `jq -n env` не може вивантажити env процесу хоста без явного шляху allowlist
тож `jq -n env` не може вивантажити середовище процесу хоста без явного шляху в allowlist
або запиту на погодження.
## Команди інтерпретатора/runtime
## Команди інтерпретатора/середовища виконання
Запуски інтерпретатора/runtime з підтримкою погодження є навмисно консервативними:
Запуски інтерпретатора/середовища виконання, підкріплені погодженням, навмисно консервативні:
- Точний контекст argv/cwd/env завжди прив’язується.
- Форми direct shell script і direct runtime file прив’язуються, наскільки можливо, до одного конкретного локального знімка файлу.
- Поширені форми обгорток package-manager, які все ще визначаються в один прямий локальний файл (наприклад
`pnpm exec`, `pnpm node`, `npm exec`, `npx`), розгортаються до прив’язки.
- Якщо OpenClaw не може точно визначити рівно один конкретний локальний файл для команди інтерпретатора/runtime
(наприклад package scripts, eval-форми, ланцюжки loader, специфічні для runtime, або неоднозначні багатофайлові
форми), виконання з погодженням відхиляється замість того, щоб заявляти семантичне покриття, якого насправді немає.
- Для таких сценаріїв надавайте перевагу sandboxing, окремій межі хоста або явному довіреному
allowlist/повному сценарію, де оператор приймає ширшу семантику runtime.
- Завжди прив’язується точний контекст argv/cwd/env.
- Форми прямого shell-скрипта і прямого файла середовища виконання прив’язуються, наскільки це можливо, до одного конкретного знімка локального файла.
- Поширені форми обгорток менеджерів пакетів, які все ще розв’язуються до одного прямого локального файла (наприклад, `pnpm exec`, `pnpm node`, `npm exec`, `npx`), розгортаються перед прив’язкою.
- Якщо OpenClaw не може точно визначити рівно один конкретний локальний файл для команди інтерпретатора/середовища виконання (наприклад, для скриптів пакетів, форм eval, специфічних для середовища виконання ланцюжків завантаження або неоднозначних багатофайлових форм), виконання з погодженням відхиляється замість того, щоб заявляти про семантичне покриття, якого насправді немає.
- Для таких сценаріїв надавайте перевагу sandboxing, окремій межі хоста або явному довіреному allowlist/повному сценарію, де оператор приймає ширшу семантику середовища виконання.
Коли потрібні погодження, інструмент exec негайно повертає id погодження. Використовуйте цей id для
співвіднесення з пізнішими системними подіями (`Exec finished` / `Exec denied`). Якщо рішення не надходить до завершення timeout, запит вважається таймаутом погодження і відображається як причина відмови.
Коли потрібні погодження, інструмент exec негайно повертає ідентифікатор погодження. Використовуйте цей ідентифікатор для
кореляції з подальшими системними подіями (`Exec finished` / `Exec denied`). Якщо до завершення
тайм-ауту рішення не надходить, запит вважається тайм-аутом погодження і відображається як причина відмови.
### Поведінка доставки followup
Після завершення схваленого async exec OpenClaw надсилає followup-хід `agent` у ту саму сесію.
Після завершення схваленого асинхронного exec OpenClaw надсилає turn `agent` як followup у ту саму сесію.
- Якщо існує коректна зовнішня ціль доставки (канал, що може доставляти, плюс ціль `to`), followup доставляється через цей канал.
- У сценаріях лише webchat або внутрішніх сесій без зовнішньої цілі followup залишається лише в сесії (`deliver: false`).
- Якщо викликаючий код явно запитує строгий зовнішній delivery без зовнішнього каналу, який можна визначити, запит завершується помилкою `INVALID_REQUEST`.
- Якщо ввімкнено `bestEffortDeliver` і зовнішній канал визначити неможливо, delivery знижується до лише сесійного замість помилки.
- Якщо існує коректна зовнішня ціль доставки (канал, який підтримує доставку, плюс ціль `to`), доставка followup використовує цей канал.
- У сценаріях лише webchat або внутрішньої сесії без зовнішньої цілі доставка followup лишається лише в межах сесії (`deliver: false`).
- Якщо викликач явно запитує сувору зовнішню доставку, але жоден зовнішній канал неможливо розв’язати, запит завершується помилкою `INVALID_REQUEST`.
- Якщо ввімкнено `bestEffortDeliver` і жоден зовнішній канал не вдається розв’язати, доставка знижується до лише-сесійної замість помилки.
## Переспрямування погоджень до чат-каналів
Ви можете переспрямовувати запити на погодження exec до будь-якого чат-каналу (включно з каналами Plugin) і погоджувати
їх через `/approve`. Для цього використовується звичайний pipeline вихідної доставки.
їх через `/approve`. Для цього використовується звичайний конвеєр вихідної доставки.
Конфігурація:
__OC_I18N_900001__
Відповідь у чаті:
__OC_I18N_900002__
Команда `/approve` обробляє і погодження exec, і погодження Plugin. Якщо ID не відповідає pending погодженню exec, вона автоматично перевіряє погодження Plugin.
Команда `/approve` обробляє як погодження exec, так і погодження Plugin. Якщо ID не відповідає жодному очікуваному погодженню exec, вона автоматично перевіряє погодження Plugin.
### Переспрямування погоджень Plugin
Переспрямування погоджень Plugin використовує той самий pipeline доставки, що й погодження exec, але має власну
Переспрямування погоджень Plugin використовує той самий конвеєр доставки, що й погодження exec, але має власну
незалежну конфігурацію в `approvals.plugin`. Увімкнення або вимкнення одного не впливає на інше.
__OC_I18N_900003__
Форма config ідентична `approvals.exec`: `enabled`, `mode`, `agentFilter`,
`sessionFilter` і `targets` працюють так само.
Форма конфігурації ідентична до `approvals.exec`: `enabled`, `mode`, `agentFilter`,
`sessionFilter` і `targets` працюють однаково.
Канали, що підтримують спільні інтерактивні відповіді, рендерять однакові кнопки погодження і для exec, і для
погоджень Plugin. Канали без спільного інтерактивного UI повертаються до звичайного тексту з інструкціями `/approve`.
Канали, що підтримують спільні інтерактивні відповіді, відображають однакові кнопки погодження як для exec, так і для
погоджень Plugin. Канали без спільного інтерактивного UI використовують звичайний текст із
інструкціями `/approve`.
### Погодження в тому самому чаті на будь-якому каналі
Коли запит на погодження exec або Plugin походить із чат-поверхні, що може доставляти повідомлення, той самий чат
тепер може погодити його через `/approve` за замовчуванням. Це стосується таких каналів, як Slack, Matrix і
Коли запит на погодження exec або Plugin походить із чат-поверхні, що підтримує доставку, цей самий чат
тепер може погодити його через `/approve` типово. Це стосується таких каналів, як Slack, Matrix і
Microsoft Teams, на додачу до вже наявних сценаріїв Web UI і TUI.
Цей спільний шлях текстових команд використовує звичайну модель auth каналу для цієї розмови. Якщо
початковий чат уже може надсилати команди й отримувати відповіді, запитам на погодження більше не потрібен
окремий нативний адаптер доставки лише для того, щоб залишатися pending.
Цей спільний шлях текстової команди використовує звичайну модель автентифікації каналу для цієї розмови. Якщо
чат-джерело вже може надсилати команди й отримувати відповіді, запитам на погодження більше не потрібен
окремий нативний адаптер доставки лише для того, щоб лишатися в очікуванні.
Discord і Telegram також підтримують `/approve` у тому самому чаті, але ці канали все ще використовують свій
визначений список approver для авторизації, навіть коли нативну доставку погоджень вимкнено.
Discord і Telegram також підтримують `/approve` у тому самому чаті, але ці канали все одно використовують свій
розв’язаний список погоджувачів для авторизації, навіть коли нативну доставку погоджень вимкнено.
Для Telegram та інших нативних клієнтів погодження, які напряму викликають Gateway,
цей fallback навмисно обмежено помилками типу «погодження не знайдено». Реальна
відмова/помилка погодження exec не повторюється мовчки як погодження Plugin.
Для Telegram та інших нативних клієнтів погодження, які викликають Gateway напряму,
цей fallback навмисно обмежений збоями типу «погодження не знайдено». Реальна
відмова/помилка погодження exec не повторюється непомітно як погодження Plugin.
### Нативна доставка погоджень
Деякі канали також можуть діяти як нативні клієнти погоджень. Нативні клієнти додають DM для approver, fanout до початкового чату
та специфічний для каналу інтерактивний UX погодження поверх спільного потоку `/approve` у тому самому чаті.
Деякі канали також можуть діяти як нативні клієнти погодження. Нативні клієнти додають DM для погоджувачів, fanout чату-джерела
та специфічний для каналу інтерактивний UX погодження поверх спільного потоку `/approve`
у тому самому чаті.
Коли доступні нативні картки/кнопки погодження, цей нативний UI є основним
агент-орієнтованим шляхом. Агент не повинен додатково дублювати звичайну чат-команду
`/approve`, якщо тільки результат інструмента не каже, що погодження в чаті недоступні або
ручне погодження — це єдиний шлях, що залишився.
шляхом для агента. Агент не повинен також дублювати звичайну чат-команду
`/approve`, якщо тільки результат інструмента не вказує, що погодження через чат недоступні або
ручне погодження є єдиним шляхом, що залишився.
Загальна модель:
- політика exec хоста й надалі визначає, чи потрібне погодження exec
- `approvals.exec` керує переспрямуванням запитів на погодження до інших чат-призначень
- `channels.<channel>.execApprovals` керує тим, чи діє цей канал як нативний клієнт погоджень
- політика exec на хості, як і раніше, визначає, чи потрібне погодження exec
- `approvals.exec` керує переспрямуванням запитів на погодження до інших чат-цілей
- `channels.<channel>.execApprovals` керує тим, чи діє цей канал як нативний клієнт погодження
Нативні клієнти погоджень автоматично вмикають доставку спочатку в DM, коли виконуються всі ці умови:
Нативні клієнти погодження автоматично вмикають доставку насамперед у DM, коли істинні всі такі умови:
- канал підтримує нативну доставку погоджень
- approver можна визначити з явних `execApprovals.approvers` або з
задокументованих резервних джерел цього каналу
- погоджувачів можна розв’язати з явних `execApprovals.approvers` або з
задокументованих fallback-джерел цього каналу
- `channels.<channel>.execApprovals.enabled` не задано або дорівнює `"auto"`
Задайте `enabled: false`, щоб явно вимкнути нативний клієнт погоджень. Задайте `enabled: true`, щоб примусово
увімкнути його, коли approver вдається визначити. Публічна доставка до початкового чату й далі явно керується через
Установіть `enabled: false`, щоб явно вимкнути нативний клієнт погодження. Установіть `enabled: true`, щоб примусово
увімкнути його, коли погоджувачі розв’язуються. Публічна доставка до чату-джерела, як і раніше, явно керується через
`channels.<channel>.execApprovals.target`.
FAQ: [Чому для погоджень exec у чаті є дві конфігурації?](/help/faq-first-run#why-are-there-two-exec-approval-configs-for-chat-approvals)
FAQ: [Чому для погоджень exec у чаті існують дві конфігурації?](/help/faq-first-run#why-are-there-two-exec-approval-configs-for-chat-approvals)
- Discord: `channels.discord.execApprovals.*`
- Slack: `channels.slack.execApprovals.*`
- Telegram: `channels.telegram.execApprovals.*`
Ці нативні клієнти погоджень додають маршрутизацію в DM і необов’язковий fanout у канал поверх спільного
потоку `/approve` в тому самому чаті та спільних кнопок погодження.
Ці нативні клієнти погодження додають маршрутизацію в DM і необов’язковий fanout до каналу поверх спільного
потоку `/approve` у тому самому чаті та спільних кнопок погодження.
Спільна поведінка:
- Slack, Matrix, Microsoft Teams та подібні чати з підтримкою доставки використовують звичайну модель auth каналу
для `/approve` в тому самому чаті
- коли нативний клієнт погоджень вмикається автоматично, типовою нативною ціллю доставки стають DM approver
- для Discord і Telegram лише визначені approver можуть погоджувати або відхиляти
- approver Discord можуть бути явними (`execApprovals.approvers`) або визначатися з `commands.ownerAllowFrom`
- approver Telegram можуть бути явними (`execApprovals.approvers`) або визначатися з наявної конфігурації власника (`allowFrom`, плюс `defaultTo` для прямих повідомлень, де це підтримується)
- approver Slack можуть бути явними (`execApprovals.approvers`) або визначатися з `commands.ownerAllowFrom`
- нативні кнопки Slack зберігають kind id погодження, тому id `plugin:` можуть визначати погодження Plugin
без другого локального резервного шару Slack
- нативна маршрутизація DM/каналу Matrix і скорочення реакцій обробляють і погодження exec, і погодження Plugin;
авторизація Plugin усе ще надходить із `channels.matrix.dm.allowFrom`
- запитувач не обов’язково має бути approver
- початковий чат може погодити запит напряму через `/approve`, коли цей чат уже підтримує команди й відповіді
- нативні кнопки погодження Discord маршрутизуються за kind id погодження: id `plugin:` напряму
спрямовуються до погоджень Plugin, усе інше — до погоджень exec
- Slack, Matrix, Microsoft Teams та подібні чати з підтримкою доставки використовують звичайну модель автентифікації каналу
для `/approve` у тому самому чаті
- коли нативний клієнт погодження вмикається автоматично, типовою нативною ціллю доставки є DM погоджувачів
- для Discord і Telegram лише розв’язані погоджувачі можуть погоджувати або відхиляти
- погоджувачі Discord можуть бути явними (`execApprovals.approvers`) або виводитися з `commands.ownerAllowFrom`
- погоджувачі Telegram можуть бути явними (`execApprovals.approvers`) або виводитися з наявної конфігурації owner (`allowFrom`, а також `defaultTo` для direct-message, де це підтримується)
- погоджувачі Slack можуть бути явними (`execApprovals.approvers`) або виводитися з `commands.ownerAllowFrom`
- нативні кнопки Slack зберігають kind ідентифікатора погодження, тож ID `plugin:` можуть розв’язувати погодження Plugin
без другого локального fallback-рівня Slack
- нативна маршрутизація Matrix у DM/канал і скорочення через реакції обробляють як погодження exec, так і Plugin;
авторизація Plugin, як і раніше, походить із `channels.matrix.dm.allowFrom`
- запитувач не зобов’язаний бути погоджувачем
- чат-джерело може погоджувати напряму через `/approve`, коли цей чат уже підтримує команди та відповіді
- нативні кнопки погодження Discord маршрутизують за kind ідентифікатора погодження: ID `plugin:` переходять
безпосередньо до погоджень Plugin, усе інше переходить до погоджень exec
- нативні кнопки погодження Telegram дотримуються того самого обмеженого fallback від exec до Plugin, що й `/approve`
- коли нативний `target` вмикає доставку до початкового чату, запити на погодження включають текст команди
- pending погодження exec спливають через 30 хвилин за замовчуванням
- якщо жоден UI оператора або налаштований клієнт погоджень не може прийняти запит, запит повертається до `askFallback`
- коли нативний `target` вмикає доставку до чату-джерела, запити на погодження містять текст команди
- очікувані погодження exec типово спливають через 30 хвилин
- якщо жоден UI оператора або налаштований клієнт погодження не може прийняти запит, запит повертається до `askFallback`
Telegram за замовчуванням використовує DM approver (`target: "dm"`). Ви можете перемкнутися на `channel` або `both`, якщо
хочете, щоб запити на погодження також з’являлися в початковому чаті/темі Telegram. Для тем форуму Telegram
OpenClaw зберігає тему для запиту на погодження та follow-up після погодження.
Telegram типово використовує DM погоджувачів (`target: "dm"`). Ви можете переключити це на `channel` або `both`, коли
хочете, щоб запити на погодження також з’являлися у вихідному чаті/темі Telegram. Для тем форуму Telegram
OpenClaw зберігає тему для запиту на погодження та для follow-up після погодження.
Див. також:
- [Discord](/channels/discord)
- [Telegram](/channels/telegram)
### Потік IPC у macOS
### Потік macOS IPC
__OC_I18N_900004__
Примітки щодо безпеки:
- Режим Unix socket `0600`, token зберігається в `exec-approvals.json`.
- Перевірка однотипного peer за UID.
- Challenge/response (nonce + HMAC token + hash запиту) + короткий TTL.
- Режим Unix socket `0600`, токен зберігається в `exec-approvals.json`.
- Перевірка peer з тим самим UID.
- Challenge/response (nonce + HMAC token + request hash) + короткий TTL.
## Пов’язане
## Пов’язані матеріали
- [Погодження exec](/uk/tools/exec-approvals) — базова політика й потік погодження
- [Погодження exec](/uk/tools/exec-approvals) — базова політика та потік погодження
- [Інструмент exec](/uk/tools/exec)
- [Режим Elevated](/uk/tools/elevated)
- [Skills](/uk/tools/skills) — поведінка auto-allow на основі Skill
- [Режим elevated](/uk/tools/elevated)
- [Skills](/uk/tools/skills) — поведінка автодозволу на основі Skills

View File

@ -1,67 +1,69 @@
---
read_when:
- Налаштування затверджень виконання або списків дозволеного
- Реалізація UX затвердження виконання у застосунку macOS
- Перевірка підказок щодо виходу з пісочниці та їхніх наслідків
summary: Підказки щодо затвердження виконання, списків дозволеного та виходу з пісочниці
title: Затвердження виконання
- Налаштування схвалень виконання або списків дозволених елементів
- Реалізація UX для схвалення виконання в застосунку macOS
- Перегляд запитів на вихід із пісочниці та їхніх наслідків
summary: Запити на схвалення виконання, списки дозволених елементів і запити на вихід із пісочниці
title: Схвалення виконання
x-i18n:
generated_at: "2026-04-23T23:27:47Z"
generated_at: "2026-04-25T03:24:44Z"
model: gpt-5.4
provider: openai
source_hash: 0d7c5cd24e7c1831d5a865da6fa20f4c23280a0ec12b9e8f7f3245170a05a37d
source_hash: 44bf7af57d322280f6d0089207041214b1233d0c9eca99656d51fc4aed88941b
source_path: tools/exec-approvals.md
workflow: 15
---
Затвердження виконання — це **запобіжник застосунку-компаньйона / хоста Node**, який дає змогу агенту в пісочниці запускати команди на реальному хості (`gateway` або `node`). Це запобіжне блокування: команди дозволяються лише тоді, коли політика + список дозволеного + (необов’язкове) затвердження користувачем усі це підтверджують. Затвердження виконання накладаються **поверх** політики інструментів і підвищеного шлюзу (окрім випадку, коли elevated встановлено в `full`, що пропускає затвердження).
Схвалення виконання — це **запобіжник застосунку-супутника / хоста node**, який дає змогу агенту в пісочниці виконувати команди на реальному хості (`gateway` або `node`). Це захисне блокування: команди дозволяються лише тоді, коли політика + список дозволених елементів + (необов’язкове) схвалення користувача одночасно збігаються. Схвалення виконання накладаються **поверх** політики інструментів і підвищеного режиму доступу (якщо тільки elevated не встановлено в `full`, що пропускає схвалення).
<Note>
Ефективна політика — **суворіша** з `tools.exec.*` та типових значень затверджень; якщо поле затверджень пропущено, використовується значення `tools.exec`. Виконання на хості також використовує локальний стан затверджень на цій машині — локальне для хоста `ask: "always"` у `~/.openclaw/exec-approvals.json` продовжує показувати запит навіть тоді, коли типові значення сеансу або конфігурації вимагають `ask: "on-miss"`.
Ефективна політика — **суворіша** з `tools.exec.*` і типових значень схвалень; якщо поле схвалення не вказано, використовується значення `tools.exec`. Виконання на хості також використовує локальний стан схвалень на цій машині — локальне значення `ask: "always"` у `~/.openclaw/exec-approvals.json` продовжить показувати запити, навіть якщо параметри сеансу або конфігурації задають `ask: "on-miss"`.
</Note>
## Перевірка ефективної політики
- `openclaw approvals get`, `... --gateway`, `... --node <id|name|ip>` — показує запитану політику, джерела політики хоста та ефективний результат.
- `openclaw approvals get`, `... --gateway`, `... --node <id|name|ip>` — показати запитану політику, джерела політики хоста та ефективний результат.
- `openclaw exec-policy show` — об’єднане подання для локальної машини.
- `openclaw exec-policy set|preset` — синхронізує локально запитану політику з локальним файлом затверджень хоста за один крок.
- `openclaw exec-policy set|preset` — синхронізувати локально запитану політику з локальним файлом схвалень хоста за один крок.
Коли локальна область запитує `host=node`, `exec-policy show` повідомляє про цю область як про керовану Node під час виконання, замість того щоб удавати, ніби локальний файл затверджень є джерелом істини.
Коли локальна область запитує `host=node`, `exec-policy show` повідомляє про цю область
як про таку, що керується node під час виконання, замість того щоб удавати, ніби локальний файл схвалень є джерелом істини.
Якщо UI застосунку-компаньйона **недоступний**, будь-який запит, який зазвичай викликав би запит на підтвердження, обробляється через **резервну поведінку ask** (типово: deny).
Якщо UI застосунку-супутника **недоступний**, будь-який запит, який зазвичай потребував би підтвердження, вирішується через **резервне правило ask** (типово: deny).
<Tip>
Нативні клієнти затвердження в чаті можуть додавати специфічні для каналу елементи керування до повідомлення з очікуванням затвердження. Наприклад, Matrix додає швидкі реакції (`✅` дозволити один раз, `❌` заборонити, `♾️` дозволити завжди), водночас залишаючи команди `/approve ...` у повідомленні як резервний варіант.
Нативні клієнти схвалення в чаті можуть додавати прив’язки до каналу в повідомлення очікуваного схвалення. Наприклад, Matrix додає швидкі реакції (`✅`
дозволити один раз, `❌` відхилити, `♾️` дозволити завжди), водночас залишаючи команди `/approve ...` у повідомленні як запасний варіант.
</Tip>
## Де це застосовується
Затвердження виконання застосовуються локально на хості виконання:
Схвалення виконання застосовуються локально на хості виконання:
- **gateway host** → процес `openclaw` на машині Gateway
- **node host** → виконавець Node (застосунок-компаньйон macOS або headless-хост Node)
- **хост gateway** → процес `openclaw` на машині gateway
- **хост node** → виконавець node (застосунок-супутник macOS або безголовий хост node)
Примітка щодо моделі довіри:
- Виклики, автентифіковані через Gateway, є довіреними операторами для цього Gateway.
- Спарені Node розширюють цю можливість довіреного оператора на хост Node.
- Затвердження виконання знижують ризик випадкового виконання, але не є межею автентифікації на рівні користувача.
- Затверджені запуски на хості Node прив’язують канонічний контекст виконання: канонічний cwd, точний argv, прив’язку env за наявності та зафіксований шлях до виконуваного файла, якщо застосовно.
- Для shell-скриптів і прямих викликів файла інтерпретатора/середовища виконання OpenClaw також намагається прив’язати
один конкретний локальний файловий операнд. Якщо цей прив’язаний файл змінюється після затвердження, але до виконання,
запуск забороняється замість виконання зміненого вмісту.
- Ця файлова прив’язка навмисно є best-effort, а не повною семантичною моделлю для кожного
шляху завантаження інтерпретатора/середовища виконання. Якщо режим затвердження не може визначити рівно один конкретний локальний
файл для прив’язки, він відмовляється створювати запуск, підкріплений затвердженням, замість того щоб удавати повне покриття.
- Виклики, автентифіковані через Gateway, вважаються довіреними операторами для цього Gateway.
- Спарені node розширюють цю можливість довіреного оператора на хост node.
- Схвалення виконання зменшують ризик випадкового виконання, але не є межею автентифікації на рівні окремого користувача.
- Схвалені запуски на хості node прив’язують канонічний контекст виконання: канонічний cwd, точний argv, прив’язку env за наявності та зафіксований шлях до виконуваного файла, якщо застосовно.
- Для shell-скриптів і прямих викликів файлів інтерпретатора/середовища виконання OpenClaw також намагається прив’язати
один конкретний локальний файловий операнд. Якщо цей прив’язаний файл зміниться після схвалення, але до виконання,
запуск буде відхилено замість виконання зміненого вмісту.
- Ця прив’язка файла навмисно є best-effort, а не повною семантичною моделлю для кожного
шляху завантаження інтерпретатора/середовища виконання. Якщо режим схвалення не може визначити рівно один конкретний локальний
файл для прив’язки, він відмовляється створювати запуск, підкріплений схваленням, замість того щоб удавати повне покриття.
Розподіл у macOS:
Розділення в macOS:
- **служба хоста Node** пересилає `system.run` до **застосунку macOS** через локальний IPC.
- **застосунок macOS** застосовує затвердження + виконує команду в контексті UI.
- **служба хоста node** пересилає `system.run` до **застосунку macOS** через локальний IPC.
- **застосунок macOS** застосовує схвалення + виконує команду в контексті UI.
## Налаштування та зберігання
## Налаштування і зберігання
Затвердження зберігаються в локальному JSON-файлі на хості виконання:
Схвалення зберігаються в локальному JSON-файлі на хості виконання:
`~/.openclaw/exec-approvals.json`
@ -100,35 +102,35 @@ x-i18n:
}
```
## Режим "YOLO" без затвердження
## Режим "YOLO" без схвалень
Якщо ви хочете, щоб виконання на хості працювало без запитів на затвердження, потрібно відкрити **обидва** рівні політики:
Якщо ви хочете, щоб виконання на хості працювало без запитів на схвалення, потрібно відкрити **обидва** шари політики:
- запитувана політика виконання в конфігурації OpenClaw (`tools.exec.*`)
- локальна для хоста політика затверджень у `~/.openclaw/exec-approvals.json`
- запитану політику виконання в конфігурації OpenClaw (`tools.exec.*`)
- локальну політику схвалень хоста в `~/.openclaw/exec-approvals.json`
Тепер це типова поведінка хоста, якщо ви явно не зробите її суворішою:
- `tools.exec.security`: `full` на `gateway`/`node`
- `tools.exec.ask`: `off`
- host `askFallback`: `full`
- хост `askFallback`: `full`
Важлива відмінність:
Важливе розрізнення:
- `tools.exec.host=auto` визначає, де виконується exec: у пісочниці, якщо вона доступна, інакше на gateway.
- YOLO визначає, як затверджується виконання на хості: `security=full` плюс `ask=off`.
- `tools.exec.host=auto` вибирає, де виконується exec: у пісочниці, якщо вона доступна, інакше на gateway.
- YOLO вибирає, як схвалюється виконання на хості: `security=full` плюс `ask=off`.
- Провайдери на основі CLI, які мають власний неінтерактивний режим дозволів, можуть дотримуватися цієї політики.
Claude CLI додає `--permission-mode bypassPermissions`, коли запитана OpenClaw політика виконання є
YOLO. Перевизначте цю поведінку бекенда явними аргументами Claude в
`agents.defaults.cliBackends.claude-cli.args` / `resumeArgs`, наприклад
`--permission-mode default`, `acceptEdits` або `bypassPermissions`.
- У режимі YOLO OpenClaw не додає окремий евристичний шлюз затвердження для обфускації команд або шар відхилення script-preflight поверх налаштованої політики виконання на хості.
- `auto` не перетворює маршрутизацію через gateway на безкоштовне перевизначення із сеансу в пісочниці. Запит на рівні виклику `host=node` дозволений із `auto`, а `host=gateway` дозволений із `auto` лише тоді, коли середовище виконання пісочниці неактивне. Якщо вам потрібне стабільне типове значення без auto, установіть `tools.exec.host` або використовуйте `/exec host=...` явно.
- У режимі YOLO OpenClaw не додає окремий евристичний бар’єр схвалення для обфускації команд або шар відхилення попередньої перевірки скриптів поверх налаштованої політики виконання на хості.
- `auto` не робить маршрутизацію gateway безкоштовним обходом із сеансу в пісочниці. Запит `host=node` на рівні окремого виклику дозволений із `auto`, а `host=gateway` дозволений із `auto` лише тоді, коли немає активного середовища виконання пісочниці. Якщо вам потрібне стабільне значення за замовчуванням, відмінне від auto, установіть `tools.exec.host` або використовуйте `/exec host=...` явно.
Якщо вам потрібне більш консервативне налаштування, знову зробіть будь-який із шарів суворішим до `allowlist` / `on-miss`
Якщо вам потрібне консервативніше налаштування, знову зробіть будь-який із шарів суворішим до `allowlist` / `on-miss`
або `deny`.
Постійне налаштування gateway-host "ніколи не запитувати":
Постійне налаштування «ніколи не запитувати» для хоста gateway:
```bash
openclaw config set tools.exec.host gateway
@ -137,7 +139,7 @@ openclaw config set tools.exec.ask off
openclaw gateway restart
```
Потім налаштуйте файл затверджень хоста відповідно:
Потім налаштуйте файл схвалень хоста відповідно:
```bash
openclaw approvals set --stdin <<'EOF'
@ -152,7 +154,7 @@ openclaw approvals set --stdin <<'EOF'
EOF
```
Локальне скорочення для тієї самої політики gateway-host на поточній машині:
Локальне скорочення для тієї самої політики хоста gateway на поточній машині:
```bash
openclaw exec-policy preset yolo
@ -163,11 +165,11 @@ openclaw exec-policy preset yolo
- локальні `tools.exec.host/security/ask`
- локальні типові значення в `~/.openclaw/exec-approvals.json`
Воно навмисно працює лише локально. Якщо вам потрібно змінити затвердження gateway-host або node-host
Воно навмисно діє лише локально. Якщо вам потрібно змінити схвалення хоста gateway або хоста node
віддалено, і надалі використовуйте `openclaw approvals set --gateway` або
`openclaw approvals set --node <id|name|ip>`.
Для хоста Node застосуйте той самий файл затверджень на цій Node:
Для хоста node застосуйте той самий файл схвалень на цій node:
```bash
openclaw approvals set --node <id|name|ip> --stdin <<'EOF'
@ -184,43 +186,43 @@ EOF
Важливе обмеження лише для локального режиму:
- `openclaw exec-policy` не синхронізує затвердження Node
- `openclaw exec-policy` не синхронізує схвалення node
- `openclaw exec-policy set --host node` відхиляється
- затвердження виконання Node отримуються з Node під час виконання, тому цільові оновлення для Node потрібно робити через `openclaw approvals --node ...`
- схвалення виконання для node отримуються від node під час виконання, тому оновлення для node потрібно робити через `openclaw approvals --node ...`
Скорочення лише для сеансу:
Скорочення лише для поточного сеансу:
- `/exec security=full ask=off` змінює лише поточний сеанс.
- `/elevated full` — це аварійне скорочення, яке також пропускає затвердження виконання для цього сеансу.
- `/elevated full` — це аварійне скорочення, яке також пропускає схвалення виконання для цього сеансу.
Якщо файл затверджень хоста залишається суворішим за конфігурацію, усе одно перемагає суворіша політика хоста.
Якщо файл схвалень хоста залишається суворішим за конфігурацію, все одно перемагає суворіша політика хоста.
## Параметри політики
### Security (`exec.security`)
- **deny**: блокувати всі запити на виконання на хості.
- **allowlist**: дозволяти лише команди зі списку дозволеного.
- **allowlist**: дозволяти лише команди зі списку дозволених елементів.
- **full**: дозволяти все (еквівалент elevated).
### Ask (`exec.ask`)
- **off**: ніколи не показувати запит.
- **on-miss**: показувати запит лише тоді, коли список дозволеного не збігається.
- **always**: показувати запит для кожної команди.
- довготривала довіра `allow-always` не пригнічує запити, коли ефективний режим ask дорівнює `always`
- **off**: ніколи не запитувати.
- **on-miss**: запитувати лише тоді, коли немає збігу зі списком дозволених елементів.
- **always**: запитувати для кожної команди.
- довготривала довіра `allow-always` не пригнічує запити, коли ефективний режим ask `always`
### Ask fallback (`askFallback`)
Якщо потрібен запит, але жоден UI недоступний, резервна поведінка визначає:
Якщо потрібен запит, але UI недосяжний, резервний режим визначає результат:
- **deny**: блокувати.
- **allowlist**: дозволяти лише за наявності збігу зі списком дозволеного.
- **allowlist**: дозволяти лише за наявності збігу зі списком дозволених елементів.
- **full**: дозволяти.
### Посилення inline interpreter eval (`tools.exec.strictInlineEval`)
### Посилення захисту для вбудованого eval інтерпретатора (`tools.exec.strictInlineEval`)
Коли `tools.exec.strictInlineEval=true`, OpenClaw розглядає форми inline code-eval як такі, що потребують лише затвердження, навіть якщо сам двійковий файл інтерпретатора є в списку дозволеного.
Коли `tools.exec.strictInlineEval=true`, OpenClaw розглядає вбудовані форми eval коду як такі, що потребують схвалення, навіть якщо сам двійковий файл інтерпретатора є в списку дозволених.
Приклади:
@ -232,84 +234,88 @@ EOF
- `lua -e`
- `osascript -e`
Це захист у глибину для завантажувачів інтерпретаторів, які не зіставляються чисто з одним стабільним файловим операндом. У строгому режимі:
Це додатковий захист для завантажувачів інтерпретаторів, які не прив’язуються чисто до одного стабільного файлового операнда. У строгому режимі:
- ці команди все одно потребують явного затвердження;
- `allow-always` не зберігає для них нові записи списку дозволеного автоматично.
- ці команди все одно потребують явного схвалення;
- `allow-always` не зберігає для них нові записи списку дозволених автоматично.
## Список дозволеного (для кожного агента)
## Список дозволених елементів (для кожного агента)
Списки дозволеного є **окремими для кожного агента**. Якщо існує кілька агентів, перемкніть агента,
якого ви редагуєте, у застосунку macOS. Шаблони — це **нечутливі до регістру glob-збіги**.
Шаблони мають розв’язуватися до **шляхів двійкових файлів** (записи лише з basename ігноруються).
Застарілі записи `agents.default` під час завантаження мігруються до `agents.main`.
Shell-ланцюжки, як-от `echo ok && pwd`, усе одно вимагають, щоб кожен сегмент верхнього рівня відповідав правилам списку дозволеного.
Списки дозволених елементів є **окремими для кожного агента**. Якщо існує кілька агентів, перемкніть агента,
якого ви редагуєте, у застосунку macOS. Шаблони — це glob-збіги.
Шаблони можуть бути glob-шаблонами для розв’язаного шляху до двійкового файла або простими glob-шаблонами для назв команд. Прості назви
збігаються лише з командами, викликаними через PATH, тому `rg` може збігатися з `/opt/homebrew/bin/rg`,
коли команда — `rg`, але не з `./rg` чи `/tmp/rg`. Використовуйте glob-шаблон шляху, якщо ви
хочете довіряти одному конкретному розташуванню двійкового файла.
Застарілі записи `agents.default` мігруються до `agents.main` під час завантаження.
Ланцюжки shell, такі як `echo ok && pwd`, усе одно вимагають, щоб кожен сегмент верхнього рівня відповідав правилам списку дозволених.
Приклади:
- `rg`
- `~/Projects/**/bin/peekaboo`
- `~/.local/bin/*`
- `/opt/homebrew/bin/rg`
Кожен запис списку дозволеного відстежує:
Кожен запис списку дозволених відстежує:
- **id** — стабільний UUID, який використовується для ідентичності в UI (необов’язково)
- **last used**позначка часу останнього використання
- **id** — стабільний UUID, що використовується для ідентичності в UI (необов’язково)
- **last used**мітка часу останнього використання
- **last used command**
- **last resolved path**
## Автодозвіл для CLI Skills
Коли ввімкнено **Auto-allow skill CLIs**, виконувані файли, на які посилаються відомі Skills,
розглядаються як такі, що входять до списку дозволеного на Node (macOS node або headless-хост Node). Для цього використовується
`skills.bins` через Gateway RPC, щоб отримати список bin для skill. Вимкніть це, якщо вам потрібні суворі списки дозволеного, задані вручну.
Коли **Auto-allow skill CLIs** увімкнено, виконувані файли, на які посилаються відомі Skills,
вважаються такими, що входять до списку дозволених на node (macOS node або безголовий хост node). Для цього використовується
`skills.bins` через Gateway RPC, щоб отримати список bin для skill. Вимкніть це, якщо хочете суворі ручні списки дозволених.
Важливі примітки щодо довіри:
- Це **неявний зручний список дозволеного**, окремий від записів ручного списку дозволеного за шляхами.
- Він призначений для середовищ довірених операторів, де Gateway і Node перебувають в одній межі довіри.
- Якщо вам потрібна сувора явна довіра, залиште `autoAllowSkills: false` і використовуйте лише ручні записи списку дозволеного за шляхами.
- Це **неявний зручний список дозволених**, окремий від ручних записів списку дозволених шляхів.
- Він призначений для середовищ довірених операторів, де Gateway і node перебувають в одній межі довіри.
- Якщо вам потрібна сувора явна довіра, залишайте `autoAllowSkills: false` і використовуйте лише ручні записи списку дозволених шляхів.
## Safe bins і пересилання затвердження
## Безпечні bin і пересилання схвалень
Щодо safe bins (швидкий шлях лише через stdin), деталей прив’язки інтерпретатора та того,
як пересилати запити на затвердження до Slack/Discord/Telegram (або запускати їх як нативні
клієнти затвердження), див. [Затвердження виконання — додатково](/uk/tools/exec-approvals-advanced).
Про safe bins (швидкий шлях лише через stdin), деталі прив’язки інтерпретатора та те,
як пересилати запити на схвалення до Slack/Discord/Telegram (або запускати їх як нативні
клієнти схвалення), див. [Exec approvals — advanced](/uk/tools/exec-approvals-advanced).
<!-- moved to /tools/exec-approvals-advanced -->
## Редагування в UI керування
## Редагування в Control UI
Використовуйте картку **Control UI → Nodes → Exec approvals**, щоб редагувати типові значення, перевизначення
для окремих агентів і списки дозволеного. Виберіть область (Defaults або агент), налаштуйте політику,
додайте/видаліть шаблони списку дозволеного, а потім натисніть **Save**. UI показує метадані **last used**
для кожного шаблону, щоб вам було легше підтримувати список в охайному стані.
для окремих агентів і списки дозволених елементів. Виберіть область (Defaults або agent), змініть політику,
додайте/видаліть шаблони списку дозволених, а потім натисніть **Save**. UI показує метадані **last used**
для кожного шаблону, щоб список було легше підтримувати в порядку.
Перемикач цілі вибирає **Gateway** (локальні затвердження) або **Node**. Node
мають оголошувати `system.execApprovals.get/set` (застосунок macOS або headless-хост Node).
Якщо Node ще не оголошує затвердження виконання, редагуйте її локальний
Селектор цілі вибирає **Gateway** (локальні схвалення) або **Node**. Node
мають оголошувати `system.execApprovals.get/set` (застосунок macOS або безголовий хост node).
Якщо node ще не оголошує схвалення виконання, відредагуйте її локальний
`~/.openclaw/exec-approvals.json` безпосередньо.
CLI: `openclaw approvals` підтримує редагування gateway або node (див. [CLI затверджень](/uk/cli/approvals)).
CLI: `openclaw approvals` підтримує редагування для gateway або node (див. [Approvals CLI](/uk/cli/approvals)).
## Потік затвердження
## Потік схвалення
Коли потрібен запит, gateway розсилає `exec.approval.requested` клієнтам операторів.
Control UI і застосунок macOS обробляють його через `exec.approval.resolve`, після чого gateway пересилає
затверджений запит на хост Node.
Коли потрібен запит, gateway транслює `exec.approval.requested` клієнтам операторів.
Control UI і застосунок macOS розв’язують його через `exec.approval.resolve`, після чого gateway пересилає
схвалений запит на хост node.
Для `host=node` запити на затвердження містять канонічне корисне навантаження `systemRunPlan`. Gateway використовує
цей план як авторитетний контекст команди/cwd/сеансу під час пересилання затверджених запитів `system.run`.
Для `host=node` запити на схвалення містять канонічне корисне навантаження `systemRunPlan`. Gateway використовує
цей план як авторитетний контекст команди/cwd/сеансу під час пересилання схвалених запитів `system.run`.
Це важливо для затримки асинхронного затвердження:
Це важливо для асинхронної затримки схвалення:
- шлях виконання node готує один канонічний план наперед
- запис затвердження зберігає цей план та його метадані прив’язки
- після затвердження остаточний пересланий виклик `system.run` повторно використовує збережений план
замість того, щоб довіряти пізнішим змінам виклику
- якщо виклик змінює `command`, `rawCommand`, `cwd`, `agentId` або
`sessionKey` після створення запиту на затвердження, gateway відхиляє
пересланий запуск як невідповідність затвердженню
- запис схвалення зберігає цей план і його метадані прив’язки
- після схвалення фінальний пересланий виклик `system.run` повторно використовує збережений план
замість довіри до пізніших змін з боку викликача
- якщо викликач змінює `command`, `rawCommand`, `cwd`, `agentId` або
`sessionKey` після створення запиту на схвалення, gateway відхиляє
пересланий запуск як невідповідність схваленню
## Системні події
@ -319,46 +325,46 @@ Control UI і застосунок macOS обробляють його чере
- `Exec finished`
- `Exec denied`
Вони публікуються в сеанс агента після того, як Node повідомляє про подію.
Затвердження виконання на gateway-host видають ті самі події життєвого циклу, коли команда завершується (і, за потреби, коли вона виконується довше за поріг).
Виконання з перевіркою через затвердження повторно використовують ідентифікатор затвердження як `runId` у цих повідомленнях для зручної кореляції.
Вони публікуються в сеансі агента після того, як node повідомляє про подію.
Схвалення exec на хості gateway генерують ті самі події життєвого циклу, коли команда завершується (і, за потреби, коли виконується довше за поріг).
Exec, керовані через схвалення, повторно використовують id схвалення як `runId` у цих повідомленнях для зручної кореляції.
## Поведінка у разі відхилення затвердження
## Поведінка у разі відхиленого схвалення
Коли асинхронне затвердження виконання відхиляється, OpenClaw не дозволяє агенту повторно використовувати
вивід будь-якого попереднього запуску тієї самої команди в цьому сеансі. Причина відхилення
передається разом із явною вказівкою, що вивід команди недоступний, що не дає
Коли асинхронне схвалення exec відхиляється, OpenClaw не дозволяє агенту повторно використовувати
вивід будь-якого попереднього запуску тієї самої команди в межах сеансу. Причина відхилення
передається з явною вказівкою, що вивід команди недоступний, що не дає
агенту стверджувати, що є новий вивід, або повторювати відхилену команду зі
застарілими результатами з попереднього успішного запуску.
застарілими результатами попереднього успішного запуску.
## Наслідки
- **full**потужний режим; коли можливо, надавайте перевагу спискам дозволеного.
- **ask** тримає вас у курсі подій, водночас дозволяючи швидкі затвердження.
- Окремі для кожного агента списки дозволеного не дають затвердженням одного агента поширюватися на інших.
- Затвердження застосовуються лише до запитів на виконання на хості від **авторизованих відправників**. Неавторизовані відправники не можуть видавати `/exec`.
- `/exec security=full` — це зручність на рівні сеансу для авторизованих операторів і за задумом пропускає затвердження. Щоб жорстко заблокувати виконання на хості, установіть для затверджень значення security `deny` або забороніть інструмент `exec` через політику інструментів.
- **full**це потужний режим; за можливості віддавайте перевагу спискам дозволених елементів.
- **ask** тримає вас у процесі, водночас дозволяючи швидкі схвалення.
- Окремі списки дозволених для кожного агента не дають схваленням одного агента проникати до інших.
- Схвалення застосовуються лише до запитів на виконання на хості від **авторизованих відправників**. Неавторизовані відправники не можуть виконувати `/exec`.
- `/exec security=full` — це зручний параметр рівня сеансу для авторизованих операторів, який навмисно пропускає схвалення. Щоб жорстко заблокувати виконання на хості, установіть security схвалень у `deny` або забороніть інструмент `exec` через політику інструментів.
## Пов’язане
## Пов’язані матеріали
<CardGroup cols={2}>
<Card title="Затвердження виконання — додатково" href="/uk/tools/exec-approvals-advanced" icon="gear">
Safe bins, прив’язка інтерпретатора та пересилання затверджень до чату.
<Card title="Exec approvals — advanced" href="/uk/tools/exec-approvals-advanced" icon="gear">
Safe bins, прив’язка інтерпретатора та пересилання схвалень у чат.
</Card>
<Card title="Інструмент exec" href="/uk/tools/exec" icon="terminal">
<Card title="Exec tool" href="/uk/tools/exec" icon="terminal">
Інструмент виконання команд shell.
</Card>
<Card title="Режим elevated" href="/uk/tools/elevated" icon="shield-exclamation">
Аварійний шлях, який також пропускає затвердження.
<Card title="Elevated mode" href="/uk/tools/elevated" icon="shield-exclamation">
Аварійний шлях, який також пропускає схвалення.
</Card>
<Card title="Пісочниця" href="/uk/gateway/sandboxing" icon="box">
<Card title="Sandboxing" href="/uk/gateway/sandboxing" icon="box">
Режими пісочниці та доступ до робочого простору.
</Card>
<Card title="Безпека" href="/uk/gateway/security" icon="lock">
<Card title="Security" href="/uk/gateway/security" icon="lock">
Модель безпеки та посилення захисту.
</Card>
<Card title="Пісочниця vs політика інструментів vs elevated" href="/uk/gateway/sandbox-vs-tool-policy-vs-elevated" icon="sliders">
Коли варто використовувати кожен із цих засобів керування.
<Card title="Sandbox vs tool policy vs elevated" href="/uk/gateway/sandbox-vs-tool-policy-vs-elevated" icon="sliders">
Коли слід використовувати кожен із цих механізмів керування.
</Card>
<Card title="Skills" href="/uk/tools/skills" icon="sparkles">
Поведінка автодозволу на основі Skills.

View File

@ -1,26 +1,26 @@
---
read_when:
- Використання або змінення інструмента exec
- Використання або змінення інструмента Exec
- Налагодження поведінки stdin або TTY
summary: Використання інструмента exec, режими stdin і підтримка TTY
title: Інструмент exec
summary: Використання інструмента Exec, режими stdin і підтримка TTY
title: інструмент Exec
x-i18n:
generated_at: "2026-04-23T23:27:47Z"
generated_at: "2026-04-25T03:25:34Z"
model: gpt-5.4
provider: openai
source_hash: 4cad17fecfaf7d6a523282ef4f0090e4ffaab89ab53945b5cd831e426f3fc3ac
source_hash: 358f9155120382fa2b03b22e22408bdb9e51715f80c8b1701a1ff7fd05850188
source_path: tools/exec.md
workflow: 15
---
Запускає shell-команди в робочому просторі. Підтримує виконання на передньому плані й у фоновому режимі через `process`.
Якщо `process` недоступний, `exec` запускається синхронно та ігнорує `yieldMs`/`background`.
Фонові сесії обмежені межами агента; `process` бачить лише сесії того самого агента.
Виконує shell-команди в робочому просторі. Підтримує виконання на передньому плані й у фоні через `process`.
Якщо `process` заборонено, `exec` працює синхронно та ігнорує `yieldMs`/`background`.
Фонові сесії ізольовані для кожного агента; `process` бачить лише сесії того самого агента.
## Параметри
<ParamField path="command" type="string" required>
Shell-команда для запуску.
Shell-команда для виконання.
</ParamField>
<ParamField path="workdir" type="string" default="cwd">
@ -28,91 +28,91 @@ Shell-команда для запуску.
</ParamField>
<ParamField path="env" type="object">
Перевизначення змінних середовища у форматі ключ/значення, які об’єднуються поверх успадкованого середовища.
Перевизначення середовища у форматі ключ/значення, які об’єднуються поверх успадкованого середовища.
</ParamField>
<ParamField path="yieldMs" type="number" default="10000">
Автоматично переводить команду у фоновий режим після цієї затримки (мс).
Автоматично переводить команду у фон після цієї затримки (мс).
</ParamField>
<ParamField path="background" type="boolean" default="false">
Негайно переводить команду у фоновий режим замість очікування `yieldMs`.
Негайно переводить команду у фон замість очікування `yieldMs`.
</ParamField>
<ParamField path="timeout" type="number" default="1800">
Завершує команду після такої кількості секунд.
Завершує команду після вказаної кількості секунд.
</ParamField>
<ParamField path="pty" type="boolean" default="false">
Запускає в псевдотерміналі, коли це можливо. Використовуйте для CLI, що потребують TTY, агентів кодування та термінальних UI.
Запускає в псевдотерміналі, коли це доступно. Використовуйте для CLI, що вимагають TTY, агентів кодування та термінальних UI.
</ParamField>
<ParamField path="host" type="'auto' | 'sandbox' | 'gateway' | 'node'" default="auto">
Де виконувати. `auto` визначається як `sandbox`, коли для середовища виконання активний sandbox, інакше як `gateway`.
Де виконувати. `auto` визначається як `sandbox`, коли для сесії активне sandbox-середовище, і як `gateway` — в іншому разі.
</ParamField>
<ParamField path="security" type="'deny' | 'allowlist' | 'full'">
Режим примусового застосування для виконання `gateway` / `node`.
Режим застосування правил для виконання `gateway` / `node`.
</ParamField>
<ParamField path="ask" type="'off' | 'on-miss' | 'always'">
Поведінка запиту на схвалення для виконання `gateway` / `node`.
Поведінка запиту підтвердження для виконання `gateway` / `node`.
</ParamField>
<ParamField path="node" type="string">
Ідентифікатор або назва Node, коли `host=node`.
Ідентифікатор/назва Node, коли `host=node`.
</ParamField>
<ParamField path="elevated" type="boolean" default="false">
Запитує підвищений режим — вихід із sandbox на налаштований шлях хоста. `security=full` примусово встановлюється лише тоді, коли elevated визначається як `full`.
Запитує підвищений режим — вихід із sandbox на налаштований шлях хоста. `security=full` примусово вмикається лише тоді, коли elevated визначається як `full`.
</ParamField>
Примітки:
- `host` типово має значення `auto`: sandbox, коли для сесії активне середовище виконання sandbox, інакше gateway.
- `auto` — це типова стратегія маршрутизації, а не шаблон. Виклик із `host=node` на рівні окремого запиту дозволений із `auto`; виклик із `host=gateway` на рівні окремого запиту дозволений лише тоді, коли середовище виконання sandbox не активне.
- Без додаткової конфігурації `host=auto` усе одно «просто працює»: без sandbox він визначається як `gateway`; з активним sandbox лишається в sandbox.
- `elevated` виводить із sandbox на налаштований шлях хоста: типово `gateway`, або `node`, коли `tools.exec.host=node` (або типовим для сесії є `host=node`). Доступний лише тоді, коли для поточної сесії/провайдера ввімкнено підвищений доступ.
- Схвалення для `gateway`/`node` керуються через `~/.openclaw/exec-approvals.json`.
- Для `node` потрібен спарений Node (додаток-компаньйон або безголовий вузол-хост).
- Якщо доступно кілька Node, установіть `exec.node` або `tools.exec.node`, щоб вибрати один.
- `exec host=node` — єдиний шлях виконання shell-команд для Node; застарілу обгортку `nodes.run` вилучено.
- На хостах, відмінних від Windows, exec використовує `SHELL`, якщо його задано; якщо `SHELL` має значення `fish`, він віддає перевагу `bash` (або `sh`)
із `PATH`, щоб уникнути скриптів, несумісних із fish, а потім повертається до `SHELL`, якщо жоден із них не існує.
- На хостах Windows exec віддає перевагу пошуку PowerShell 7 (`pwsh`) (Program Files, ProgramW6432, потім PATH),
- `host` типово має значення `auto`: sandbox, коли для сесії активне sandbox-середовище, інакше gateway.
- `auto` — це типова стратегія маршрутизації, а не шаблон. Виклик `host=node` для окремого запиту дозволений із `auto`; виклик `host=gateway` для окремого запиту дозволений лише тоді, коли sandbox-середовище не активне.
- Без додаткової конфігурації `host=auto` усе одно “просто працює”: без sandbox він визначається як `gateway`; з активним sandbox залишається в sandbox.
- `elevated` виходить із sandbox на налаштований шлях хоста: типово `gateway`, або `node`, коли `tools.exec.host=node` (або типове значення сесії — `host=node`). Він доступний лише тоді, коли для поточної сесії/провайдера ввімкнено elevated-доступ.
- Підтвердження для `gateway`/`node` керуються через `~/.openclaw/exec-approvals.json`.
- `node` потребує спареного Node (супутній застосунок або безголовий хост Node).
- Якщо доступно кілька Node, задайте `exec.node` або `tools.exec.node`, щоб вибрати один.
- `exec host=node` — єдиний шлях виконання shell-команд для Node; застарілу обгортку `nodes.run` видалено.
- На хостах не Windows exec використовує `SHELL`, якщо його встановлено; якщо `SHELL` — це `fish`, він надає перевагу `bash` (або `sh`)
з `PATH`, щоб уникнути скриптів, несумісних із fish, а потім повертається до `SHELL`, якщо жодного з них немає.
- На хостах Windows exec надає перевагу пошуку PowerShell 7 (`pwsh`) (Program Files, ProgramW6432, потім PATH),
а потім повертається до Windows PowerShell 5.1.
- Виконання на хості (`gateway`/`node`) відхиляє перевизначення `env.PATH` і завантажувача (`LD_*`/`DYLD_*`), щоб
- Виконання на хості (`gateway`/`node`) відхиляє `env.PATH` і перевизначення завантажувача (`LD_*`/`DYLD_*`), щоб
запобігти підміні бінарних файлів або ін’єкції коду.
- OpenClaw установлює `OPENCLAW_SHELL=exec` у середовищі запущеної команди (зокрема для PTY і виконання в sandbox), щоб правила shell/профілю могли виявити контекст інструмента exec.
- Важливо: sandboxing **типово вимкнений**. Якщо sandboxing вимкнено, неявний `host=auto`
визначається як `gateway`. Явний `host=sandbox` у такому разі все одно завершується закритою відмовою, а не тихо
запускається на хості gateway. Увімкніть sandboxing або використовуйте `host=gateway` зі схваленнями.
- Перевірки preflight для скриптів (для поширених помилок синтаксису shell у Python/Node) перевіряють лише файли в межах
фактичної межі `workdir`. Якщо шлях до скрипта визначається поза `workdir`, preflight для
цього файлу пропускається.
- Для довготривалої роботи, яка починається зараз, запускайте її один раз і покладайтеся на автоматичне
пробудження після завершення, якщо воно ввімкнене і команда виводить результат або завершується з помилкою.
- OpenClaw встановлює `OPENCLAW_SHELL=exec` у середовищі запущеної команди (зокрема для PTY та виконання в sandbox), щоб правила shell/профілю могли виявляти контекст інструмента exec.
- Важливо: sandboxing **типово вимкнено**. Якщо sandboxing вимкнено, неявний `host=auto`
визначається як `gateway`. Явний `host=sandbox` усе одно завершується відмовою замість того, щоб мовчки
виконатися на хості gateway. Увімкніть sandboxing або використовуйте `host=gateway` із підтвердженнями.
- Попередні перевірки скриптів (для поширених помилок синтаксису shell у Python/Node) перевіряють лише файли всередині
ефективної межі `workdir`. Якщо шлях до скрипту визначається поза `workdir`, попередню перевірку для
цього файла пропускають.
- Для довготривалої роботи, яка має початися зараз, запустіть її один раз і покладайтеся на автоматичне
пробудження після завершення, якщо його ввімкнено й команда виводить результат або завершується помилкою.
Використовуйте `process` для журналів, стану, введення або втручання; не імітуйте
планування за допомогою циклів sleep, циклів timeout або повторного опитування.
- Для роботи, яка має відбутися пізніше або за розкладом, використовуйте Cron замість
шаблонів sleep/delay з `exec`.
планування через цикли сну, цикли timeout або повторне опитування.
- Для роботи, яка має виконатися пізніше або за розкладом, використовуйте Cron замість
шаблонів сну/затримки з `exec`.
## Конфігурація
- `tools.exec.notifyOnExit` (типово: true): якщо true, фонові сесії exec ставлять системну подію в чергу та запитують Heartbeat після завершення.
- `tools.exec.approvalRunningNoticeMs` (типово: 10000): надсилає одне сповіщення «виконується», коли exec, що потребує схвалення, працює довше за цей час (0 вимикає).
- `tools.exec.host` (типово: `auto`; визначається як `sandbox`, коли активне середовище виконання sandbox, інакше як `gateway`)
- `tools.exec.security` (типово: `deny` для sandbox, `full` для gateway і node, якщо не задано)
- `tools.exec.notifyOnExit` (типово: true): коли true, фонові сесії exec ставлять системну подію в чергу та запитують Heartbeat під час завершення.
- `tools.exec.approvalRunningNoticeMs` (типово: 10000): надсилає одне сповіщення “running”, коли exec із підтвердженням виконується довше за цей час (0 вимикає).
- `tools.exec.host` (типово: `auto`; визначається як `sandbox`, коли активне sandbox-середовище, інакше як `gateway`)
- `tools.exec.security` (типово: `deny` для sandbox, `full` для gateway + node, якщо не задано)
- `tools.exec.ask` (типово: `off`)
- Виконання на хості без схвалення є типовим для gateway і node. Якщо потрібна поведінка зі схваленнями/allowlist, посильте як `tools.exec.*`, так і політику хоста в `~/.openclaw/exec-approvals.json`; див. [Схвалення exec](/uk/tools/exec-approvals#no-approval-yolo-mode).
- Режим YOLO походить із типових значень політики хоста (`security=full`, `ask=off`), а не з `host=auto`. Якщо потрібно примусово використовувати gateway або node, установіть `tools.exec.host` або використайте `/exec host=...`.
- У режимі `security=full` разом із `ask=off` виконання на хості напряму дотримується налаштованої політики; немає додаткового евристичного префільтра затемнення команд або шару відхилення script-preflight.
- Виконання host exec без підтвердження — типова поведінка для gateway + node. Якщо вам потрібні підтвердження/поведінка allowlist, посильте і `tools.exec.*`, і політику хоста в `~/.openclaw/exec-approvals.json`; див. [Exec approvals](/uk/tools/exec-approvals#no-approval-yolo-mode).
- YOLO походить із типових значень політики хоста (`security=full`, `ask=off`), а не з `host=auto`. Якщо ви хочете примусово використовувати маршрутизацію через gateway або node, задайте `tools.exec.host` або використайте `/exec host=...`.
- У режимі `security=full` плюс `ask=off` host exec дотримується налаштованої політики напряму; немає додаткового евристичного попереднього фільтра обфускації команд чи шару відхилення script-preflight.
- `tools.exec.node` (типово: не задано)
- `tools.exec.strictInlineEval` (типово: false): якщо true, вбудовані форми eval в інтерпретаторах, як-от `python -c`, `node -e`, `ruby -e`, `perl -e`, `php -r`, `lua -e` і `osascript -e`, завжди вимагають явного схвалення. `allow-always` усе ще може зберігати довіру до безпечних викликів інтерпретаторів/скриптів, але форми inline-eval все одно щоразу запитують схвалення.
- `tools.exec.pathPrepend`: список каталогів, які потрібно додати на початок `PATH` для запусків exec (лише gateway і sandbox).
- `tools.exec.safeBins`: безпечні бінарні файли лише для stdin, які можуть запускатися без явних записів у allowlist. Подробиці поведінки див. у [Safe bins](/uk/tools/exec-approvals-advanced#safe-bins-stdin-only).
- `tools.exec.safeBinTrustedDirs`: додаткові явні каталоги, яким довіряють для перевірок шляхів виконуваних файлів у `safeBins`. Записи `PATH` ніколи не вважаються довіреними автоматично. Вбудовані типові значення — `/bin` і `/usr/bin`.
- `tools.exec.safeBinProfiles`: необов’язкова спеціальна політика argv для кожного safe bin (`minPositional`, `maxPositional`, `allowedValueFlags`, `deniedFlags`).
- `tools.exec.strictInlineEval` (типово: false): коли true, форми inline-eval для інтерпретаторів, такі як `python -c`, `node -e`, `ruby -e`, `perl -e`, `php -r`, `lua -e` і `osascript -e`, завжди вимагають явного підтвердження. `allow-always` усе ще може зберігати нешкідливі виклики інтерпретатора/скрипту, але форми inline-eval усе одно щоразу показують запит.
- `tools.exec.pathPrepend`: список каталогів, які потрібно додати на початок `PATH` для запусків exec (лише gateway + sandbox).
- `tools.exec.safeBins`: безпечні бінарні файли лише для stdin, які можуть виконуватися без явних записів allowlist. Докладніше див. у [Safe bins](/uk/tools/exec-approvals-advanced#safe-bins-stdin-only).
- `tools.exec.safeBinTrustedDirs`: додаткові явні каталоги, яким довіряють для перевірок шляхів виконуваних файлів safeBins. Записи `PATH` ніколи не вважаються автоматично довіреними. Вбудовані типові значення — `/bin` і `/usr/bin`.
- `tools.exec.safeBinProfiles`: необов’язкова власна політика argv для кожного safe bin (`minPositional`, `maxPositional`, `allowedValueFlags`, `deniedFlags`).
Приклад:
@ -128,29 +128,29 @@ Shell-команда для запуску.
### Обробка PATH
- `host=gateway`: об’єднує `PATH` вашої login-shell у середовище exec. Перевизначення `env.PATH`
- `host=gateway`: об’єднує `PATH` вашого login shell із середовищем exec. Перевизначення `env.PATH`
відхиляються для виконання на хості. Сам демон і далі працює з мінімальним `PATH`:
- macOS: `/opt/homebrew/bin`, `/usr/local/bin`, `/usr/bin`, `/bin`
- Linux: `/usr/local/bin`, `/usr/bin`, `/bin`
- `host=sandbox`: запускає `sh -lc` (login shell) усередині контейнера, тому `/etc/profile` може скидати `PATH`.
- `host=sandbox`: запускає `sh -lc` (login shell) усередині контейнера, тому `/etc/profile` може скинути `PATH`.
OpenClaw додає `env.PATH` на початок після завантаження профілю через внутрішню змінну середовища (без інтерполяції shell);
`tools.exec.pathPrepend` теж застосовується тут.
- `host=node`: лише передані вами перевизначення середовища, які не заблоковано, надсилаються до Node. Перевизначення `env.PATH`
відхиляються для виконання на хості та ігноруються хостами Node. Якщо вам потрібні додаткові записи PATH на Node,
налаштуйте середовище служби хоста Node (systemd/launchd) або встановіть інструменти в стандартні розташування.
`tools.exec.pathPrepend` також застосовується тут.
- `host=node`: до Node надсилаються лише не заблоковані перевизначення середовища, які ви передаєте. Перевизначення `env.PATH`
відхиляються для виконання на хості й ігноруються хостами Node. Якщо вам потрібні додаткові записи PATH на Node,
налаштуйте середовище сервісу хоста Node (systemd/launchd) або встановлюйте інструменти у стандартні розташування.
Прив’язка Node на рівні агента (використовуйте індекс у списку агентів у конфігурації):
Прив’язка Node для окремого агента (використовуйте індекс у списку агентів у конфігурації):
```bash
openclaw config get agents.list
openclaw config set agents.list[0].tools.exec.node "node-id-or-name"
```
Керувальний UI: вкладка Nodes містить невелику панель “Exec node binding” для тих самих налаштувань.
Інтерфейс керування: вкладка Nodes містить невелику панель “Exec node binding” для тих самих налаштувань.
## Перевизначення сесії (`/exec`)
Використовуйте `/exec`, щоб установити **типові значення для поточної сесії** для `host`, `security`, `ask` і `node`.
Використовуйте `/exec`, щоб задати **для сесії** типові значення `host`, `security`, `ask` і `node`.
Надішліть `/exec` без аргументів, щоб показати поточні значення.
Приклад:
@ -162,51 +162,49 @@ openclaw config set agents.list[0].tools.exec.node "node-id-or-name"
## Модель авторизації
`/exec` враховується лише для **авторизованих відправників** (allowlist каналів/спарювання плюс `commands.useAccessGroups`).
Він оновлює **лише стан сесії** і не записує конфігурацію. Щоб повністю вимкнути exec, забороніть його через
політику інструментів (`tools.deny: ["exec"]` або на рівні агента). Схвалення на хості все одно застосовуються, якщо ви явно не встановите
Він оновлює **лише стан сесії** й не записує конфігурацію. Щоб повністю вимкнути exec, забороніть його через
політику інструментів (`tools.deny: ["exec"]` або для окремого агента). Підтвердження на хості все одно застосовуються, якщо ви явно не задали
`security=full` і `ask=off`.
## Схвалення exec (додаток-компаньйон / хост node)
## Exec approvals (супутній застосунок / хост Node)
Агенти в sandbox можуть вимагати схвалення для кожного запиту перед тим, як `exec` буде запущено на хості gateway або node.
Опис політики, allowlist і потоку UI див. у [Схвалення exec](/uk/tools/exec-approvals).
Агенти в sandbox можуть вимагати підтвердження для кожного запиту перед тим, як `exec` виконається на gateway або хості node.
Див. [Exec approvals](/uk/tools/exec-approvals), щоб дізнатися про політику, allowlist і потік у UI.
Коли потрібні схвалення, інструмент exec негайно повертає
`status: "approval-pending"` та ідентифікатор схвалення. Після схвалення (або відхилення / завершення за часом очікування)
Коли потрібні підтвердження, інструмент exec повертається негайно з
`status: "approval-pending"` та ідентифікатором підтвердження. Після підтвердження (або відхилення / завершення за timeout)
Gateway надсилає системні події (`Exec finished` / `Exec denied`). Якщо команда все ще
виконується після `tools.exec.approvalRunningNoticeMs`, надсилається одне сповіщення `Exec running`.
У каналах із нативними картками/кнопками схвалення агент повинен насамперед покладатися на цей
нативний UI і включати ручну команду `/approve` лише тоді, коли в результаті інструмента
явно зазначено, що схвалення через чат недоступні, або ручне схвалення —
єдиний шлях.
У каналах із нативними картками/кнопками підтвердження агент має насамперед покладатися на цей
нативний UI і додавати ручну команду `/approve` лише тоді, коли результат
інструмента явно вказує, що підтвердження в чаті недоступні або ручне підтвердження — єдиний варіант.
## Allowlist + safe bins
Ручне застосування allowlist зіставляє **лише визначені шляхи до бінарних файлів** (без зіставлення за самими базовими назвами). Коли
`security=allowlist`, shell-команди автоматично дозволяються лише тоді, коли кожен сегмент конвеєра
є в allowlist або є safe bin. Ланцюжки (`;`, `&&`, `||`) і перенаправлення відхиляються в
режимі allowlist, якщо кожен сегмент верхнього рівня не задовольняє allowlist (зокрема safe bins).
Перенаправлення, як і раніше, не підтримуються.
Тривала довіра `allow-always` не обходить це правило: ланцюгова команда все одно вимагає, щоб кожен
сегмент верхнього рівня збігався.
Ручна перевірка allowlist зіставляє glob-шаблони розв’язаних шляхів до бінарних файлів і прості glob-шаблони назв команд. Прості назви відповідають лише командам, викликаним через PATH, тому `rg` може відповідати
`/opt/homebrew/bin/rg`, коли команда — `rg`, але не `./rg` чи `/tmp/rg`.
Коли `security=allowlist`, shell-команди автоматично дозволяються лише тоді, коли кожен сегмент конвеєра є в allowlist або є safe bin. Ланцюжки (`;`, `&&`, `||`) і перенаправлення
відхиляються в режимі allowlist, якщо не кожен сегмент верхнього рівня відповідає
allowlist (зокрема safe bins). Перенаправлення й далі не підтримуються.
Тривала довіра `allow-always` не обходить це правило: команда-ланцюжок усе одно вимагає, щоб кожен
сегмент верхнього рівня відповідав правилам.
`autoAllowSkills` — це окремий зручний шлях у схваленнях exec. Це не те саме, що
ручні записи шляху в allowlist. Для суворої явної довіри тримайте
`autoAllowSkills` вимкненим.
`autoAllowSkills` — це окремий зручний механізм у Exec approvals. Він не те саме, що
ручні записи allowlist для шляхів. Для суворої явної довіри тримайте `autoAllowSkills` вимкненим.
Використовуйте два елементи керування для різних завдань:
Використовуйте ці два елементи керування для різних завдань:
- `tools.exec.safeBins`: невеликі потокові фільтри лише для stdin.
- `tools.exec.safeBinTrustedDirs`: явні додаткові довірені каталоги для шляхів виконуваних файлів safe bin.
- `tools.exec.safeBinProfiles`: явна політика argv для користувацьких safe bin.
- `tools.exec.safeBinProfiles`: явна політика argv для власних safe bins.
- allowlist: явна довіра до шляхів виконуваних файлів.
Не розглядайте `safeBins` як загальний allowlist і не додавайте туди бінарні файли інтерпретаторів/середовищ виконання (наприклад, `python3`, `node`, `ruby`, `bash`). Якщо вони вам потрібні, використовуйте явні записи allowlist і залишайте запити на схвалення ввімкненими.
`openclaw security audit` попереджає, коли для записів інтерпретаторів/середовищ виконання в `safeBins` бракує явних профілів, а `openclaw doctor --fix` може згенерувати відсутні користувацькі записи `safeBinProfiles`.
`openclaw security audit` і `openclaw doctor` також попереджають, коли ви явно додаєте назад у `safeBins` бінарні файли з широкою поведінкою, як-от `jq`.
Якщо ви явно додаєте інтерпретатори в allowlist, увімкніть `tools.exec.strictInlineEval`, щоб форми inline code-eval усе одно щоразу вимагали нового схвалення.
Не використовуйте `safeBins` як загальний allowlist і не додавайте бінарні файли інтерпретаторів/середовищ виконання (наприклад `python3`, `node`, `ruby`, `bash`). Якщо вони вам потрібні, використовуйте явні записи allowlist і залишайте запити підтвердження ввімкненими.
`openclaw security audit` попереджає, коли для записів `safeBins` інтерпретаторів/середовищ виконання немає явних профілів, а `openclaw doctor --fix` може згенерувати відсутні записи `safeBinProfiles`.
`openclaw security audit` і `openclaw doctor` також попереджають, коли ви явно повертаєте до `safeBins` бінарні файли з широкою поведінкою, наприклад `jq`.
Якщо ви явно додаєте інтерпретатори до allowlist, увімкніть `tools.exec.strictInlineEval`, щоб форми inline code-eval усе одно вимагали нового підтвердження.
Повні відомості про політику та приклади див. у [Схвалення exec](/uk/tools/exec-approvals-advanced#safe-bins-stdin-only) і [Safe bins versus allowlist](/uk/tools/exec-approvals-advanced#safe-bins-versus-allowlist).
Повні відомості про політики та приклади див. у [Exec approvals](/uk/tools/exec-approvals-advanced#safe-bins-stdin-only) і [Safe bins versus allowlist](/uk/tools/exec-approvals-advanced#safe-bins-versus-allowlist).
## Приклади
@ -216,17 +214,17 @@ Gateway надсилає системні події (`Exec finished` / `Exec de
{ "tool": "exec", "command": "ls -la" }
```
Фоновий режим + опитування:
Фон + опитування:
```json
{"tool":"exec","command":"npm run build","yieldMs":1000}
{"tool":"process","action":"poll","sessionId":"<id>"}
```
Опитування призначене для перевірки стану на вимогу, а не для циклів очікування. Якщо автоматичне пробудження
після завершення ввімкнено, команда може пробудити сесію, коли виведе результат або завершиться з помилкою.
Опитування призначене для отримання стану на вимогу, а не для циклів очікування. Якщо автоматичне пробудження
після завершення ввімкнено, команда може розбудити сесію, коли виведе результат або завершиться помилкою.
Надсилання натискань клавіш (у стилі tmux):
Надсилання клавіш (у стилі tmux):
```json
{"tool":"process","action":"send-keys","sessionId":"<id>","keys":["Enter"]}
@ -248,9 +246,9 @@ Gateway надсилає системні події (`Exec finished` / `Exec de
## apply_patch
`apply_patch` — це підінструмент `exec` для структурованих багатофайлових редагувань.
Він типово ввімкнений для моделей OpenAI і OpenAI Codex. Використовуйте конфігурацію лише
тоді, коли хочете вимкнути його або обмежити конкретними моделями:
`apply_patch` — це підінструмент `exec` для структурованих багато-файлових змін.
Він типово ввімкнений для моделей OpenAI та OpenAI Codex. Використовуйте конфігурацію лише
тоді, коли хочете вимкнути його або обмежити певними моделями:
```json5
{
@ -265,14 +263,14 @@ Gateway надсилає системні події (`Exec finished` / `Exec de
Примітки:
- Доступний лише для моделей OpenAI/OpenAI Codex.
- Політика інструментів усе одно застосовується; `allow: ["write"]` неявно дозволяє `apply_patch`.
- Конфігурація розташована в `tools.exec.applyPatch`.
- `tools.exec.applyPatch.enabled` типово має значення `true`; установіть `false`, щоб вимкнути інструмент для моделей OpenAI.
- `tools.exec.applyPatch.workspaceOnly` типово має значення `true` (обмежено межами робочого простору). Установлюйте `false` лише тоді, коли свідомо хочете, щоб `apply_patch` записував/видаляв файли поза каталогом робочого простору.
- Політика інструментів і далі застосовується; `allow: ["write"]` неявно дозволяє `apply_patch`.
- Конфігурація розміщується в `tools.exec.applyPatch`.
- `tools.exec.applyPatch.enabled` типово має значення `true`; задайте `false`, щоб вимкнути інструмент для моделей OpenAI.
- `tools.exec.applyPatch.workspaceOnly` типово має значення `true` (обмежено робочим простором). Задавайте `false` лише тоді, коли ви свідомо хочете, щоб `apply_patch` записував/видаляв файли поза каталогом робочого простору.
## Пов’язане
- [Схвалення exec](/uk/tools/exec-approvals) — шлюзи схвалення для shell-команд
- [Sandboxing](/uk/gateway/sandboxing) — запуск команд у середовищах sandbox
- [Фоновий процес](/uk/gateway/background-process) — довготривалий exec та інструмент process
- [Безпека](/uk/gateway/security) — політика інструментів і підвищений доступ
- [Exec Approvals](/uk/tools/exec-approvals) — шлюзи підтвердження для shell-команд
- [Sandboxing](/uk/gateway/sandboxing) — виконання команд у sandbox-середовищах
- [Background Process](/uk/gateway/background-process) — довготривалий exec та інструмент process
- [Security](/uk/gateway/security) — політика інструментів і elevated-доступ