chore(i18n): refresh uk translations
This commit is contained in:
parent
ad95ce9322
commit
cdf4b8311a
@ -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)
|
||||
|
||||
@ -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` = 800–2500 мс. Перевизначення для окремого агента: `agents.list[].humanDelay`.
|
||||
- Для каналів, відмінних від Telegram, щоб увімкнути блокові відповіді, потрібно явно вказати `*.blockStreaming: true`.
|
||||
- Перевизначення для каналів: `channels.<channel>.blockStreamingCoalesce` (і варіанти для окремих акаунтів). Для Signal/Slack/Discord/Google Chat типове значення `minChars: 1500`.
|
||||
- `humanDelay`: випадкова пауза між блоковими відповідями. `natural` = 800–2500 мс. Перевизначення для окремого агента: `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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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-доступ
|
||||
|
||||
Loading…
Reference in New Issue
Block a user