chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-20 18:40:17 +00:00
parent a8843a086d
commit ff21d0fdf8
9 changed files with 2219 additions and 2215 deletions

View File

@ -1,13 +1,13 @@
---
read_when:
- Зміна поведінки групового чату або керування згадками
summary: Поведінка групових чатів на різних поверхнях (Discord/iMessage/Matrix/Microsoft Teams/Signal/Slack/Telegram/WhatsApp/Zalo)
- Зміна поведінки групового чату або керування згадуваннями
summary: Поведінка групового чату на різних поверхнях (Discord/iMessage/Matrix/Microsoft Teams/Signal/Slack/Telegram/WhatsApp/Zalo)
title: Групи
x-i18n:
generated_at: "2026-04-07T06:53:59Z"
generated_at: "2026-04-20T18:29:28Z"
model: gpt-5.4
provider: openai
source_hash: f5045badbba30587c8f1bf27f6b940c7c471a95c57093c9adb142374413ac81e
source_hash: bbcdebd340a2ebb5898fe1eaf52258f65ba434bcf3be010d81b0e74af728aad4
source_path: channels/groups.md
workflow: 15
---
@ -24,89 +24,89 @@ OpenClaw «живе» у ваших власних облікових запис
Поведінка за замовчуванням:
- Групи обмежені (`groupPolicy: "allowlist"`).
- Для відповідей потрібна згадка, якщо ви явно не вимкнули керування згадками.
- Для відповідей потрібне згадування, якщо ви явно не вимкнете керування згадуваннями.
Простіше кажучи: відправники зі списку дозволених можуть запускати OpenClaw, згадавши його.
Переклад: відправники з allowlist можуть активувати OpenClaw, згадавши його.
> Коротко
>
> - **Доступ до DM** контролюється через `*.allowFrom`.
> - **Доступ до груп** контролюється через `*.groupPolicy` + списки дозволених (`*.groups`, `*.groupAllowFrom`).
> - **Запуск відповіді** контролюється керуванням згадками (`requireMention`, `/activation`).
> - **Доступ до груп** контролюється через `*.groupPolicy` + allowlist (`*.groups`, `*.groupAllowFrom`).
> - **Запуск відповіді** контролюється керуванням згадуваннями (`requireMention`, `/activation`).
Швидка схема (що відбувається з повідомленням у групі):
Швидкий сценарій (що відбувається з повідомленням у групі):
```
groupPolicy? disabled -> відкинути
groupPolicy? allowlist -> група дозволена? ні -> відкинути
requireMention? так -> є згадка? ні -> зберегти лише для контексту
groupPolicy? disabled -> відхилити
groupPolicy? allowlist -> групу дозволено? ні -> відхилити
requireMention? yes -> згадано? ні -> зберегти лише для контексту
інакше -> відповісти
```
## Видимість контексту та списки дозволених
## Видимість контексту та allowlist
У безпеці груп беруть участь два різні механізми:
У безпеці груп беруть участь два різні механізми керування:
- **Авторизація запуску**: хто може запускати агента (`groupPolicy`, `groups`, `groupAllowFrom`, специфічні для каналу списки дозволених).
- **Видимість контексту**: який додатковий контекст передається в модель (текст відповіді, цитати, історія треду, метадані пересилання).
- **Авторизація запуску**: хто може активувати агента (`groupPolicy`, `groups`, `groupAllowFrom`, allowlist, специфічні для каналу).
- **Видимість контексту**: який додатковий контекст передається в модель (текст відповіді, цитати, історія гілки, метадані пересилання).
За замовчуванням OpenClaw надає пріоритет звичайній поведінці чату й зберігає контекст переважно таким, як його отримано. Це означає, що списки дозволених переважно визначають, хто може запускати дії, а не є універсальною межею редагування для кожного цитованого або історичного фрагмента.
За замовчуванням OpenClaw надає пріоритет звичайній поведінці чату й здебільшого зберігає контекст у тому вигляді, у якому його отримано. Це означає, що allowlist переважно визначають, хто може запускати дії, а не є універсальною межею редагування для кожного процитованого або історичного фрагмента.
Поточна поведінка залежить від каналу:
- Деякі канали вже застосовують фільтрацію за відправником для додаткового контексту в окремих шляхах (наприклад, початкове заповнення треду Slack, пошук відповіді/треду в Matrix).
- Інші канали все ще передають контекст цитати/відповіді/пересилання таким, як його отримано.
- Деякі канали вже застосовують фільтрацію відправників для додаткового контексту в окремих шляхах (наприклад, ініціалізація гілок Slack, пошук відповідей/гілок у Matrix).
- Інші канали все ще передають контекст цитат/відповідей/пересилань у тому вигляді, у якому він отриманий.
Напрям посилення захисту (заплановано):
- `contextVisibility: "all"` (типове значення) зберігає поточну поведінку «як отримано».
- `contextVisibility: "allowlist"` фільтрує додатковий контекст до відправників зі списку дозволених.
- `contextVisibility: "all"` (за замовчуванням) зберігає поточну поведінку «як отримано».
- `contextVisibility: "allowlist"` фільтрує додатковий контекст до відправників з allowlist.
- `contextVisibility: "allowlist_quote"` — це `allowlist` плюс один явний виняток для цитати/відповіді.
Поки цю модель посилення захисту не реалізовано узгоджено в усіх каналах, очікуйте відмінностей залежно від поверхні.
Поки цю модель посилення захисту не буде однаково реалізовано в усіх каналах, очікуйте відмінностей залежно від поверхні.
![Схема потоку групового повідомлення](/images/groups-flow.svg)
![Потік групових повідомлень](/images/groups-flow.svg)
Якщо ви хочете...
| Ціль | Що налаштувати |
| Мета | Що налаштувати |
| -------------------------------------------- | ---------------------------------------------------------- |
| Дозволити всі групи, але відповідати лише на @згадки | `groups: { "*": { requireMention: true } }` |
| Вимкнути всі відповіді в групах | `groupPolicy: "disabled"` |
| Лише певні групи | `groups: { "<group-id>": { ... } }` (без ключа `"*"`) |
| Лише ви можете запускати в групах | `groupPolicy: "allowlist"`, `groupAllowFrom: ["+1555..."]` |
| Лише ви можете запускати відповіді в групах | `groupPolicy: "allowlist"`, `groupAllowFrom: ["+1555..."]` |
## Ключі сесій
- Групові сесії використовують ключі сесій `agent:<agentId>:<channel>:group:<id>` (кімнати/канали використовують `agent:<agentId>:<channel>:channel:<id>`).
- Теми форуму Telegram додають `:topic:<threadId>` до ідентифікатора групи, щоб кожна тема мала власну сесію.
- Теми форуму Telegram додають `:topic:<threadId>` до ідентифікатора групи, тому кожна тема має власну сесію.
- Прямі чати використовують основну сесію (або окрему для кожного відправника, якщо це налаштовано).
- Heartbeats для групових сесій пропускаються.
- Heartbeat пропускаються для групових сесій.
<a id="pattern-personal-dms-public-groups-single-agent"></a>
## Шаблон: особисті DM + публічні групи (один агент)
Так — це добре працює, якщо ваш «особистий» трафік — це **DM**, а ваш «публічний» трафік — це **групи**.
Так — це добре працює, якщо ваш «особистий» трафік — це **DM**, а «публічний» трафік — це **групи**.
Чому: у режимі одного агента DM зазвичай потрапляють до **основного** ключа сесії (`agent:main:main`), тоді як групи завжди використовують **неосновні** ключі сесій (`agent:main:<channel>:group:<id>`). Якщо ви ввімкнете sandboxing із `mode: "non-main"`, ці групові сесії працюватимуть у Docker, а ваша основна DM-сесія залишиться на хості.
Чому: у режимі одного агента DM зазвичай потрапляють до ключа **основної** сесії (`agent:main:main`), тоді як групи завжди використовують ключі **неосновних** сесій (`agent:main:<channel>:group:<id>`). Якщо ви ввімкнете ізоляцію через `mode: "non-main"`, ці групові сесії виконуватимуться у налаштованому бекенді sandbox, тоді як ваша основна DM-сесія залишиться на хості. Docker є бекендом за замовчуванням, якщо ви не виберете інший.
Це дає вам один «мозок» агента (спільний workspace + memory), але дві моделі виконання:
Це дає вам один «мозок» агента (спільний робочий простір + пам’ять), але дві різні моделі виконання:
- **DM**: повні інструменти (хост)
- **Групи**: sandbox + обмежені інструменти (Docker)
- **Групи**: sandbox + обмежені інструменти
> Якщо вам потрібні справді окремі workspace/персони («особисте» й «публічне» ніколи не мають змішуватися), використовуйте другого агента + bindings. Див. [Маршрутизація кількох агентів](/uk/concepts/multi-agent).
> Якщо вам потрібні справді окремі робочі простори/персони («особисте» й «публічне» ніколи не мають змішуватися), використайте другого агента + bindings. Див. [Багатоагентна маршрутизація](/uk/concepts/multi-agent).
Приклад (DM на хості, групи в sandbox + лише інструменти для обміну повідомленнями):
Приклад (DM на хості, групи в sandbox + лише інструменти для повідомлень):
```json5
{
agents: {
defaults: {
sandbox: {
mode: "non-main", // групи/канали є неосновними -> у sandbox
scope: "session", // найсильніша ізоляція (один контейнер на групу/канал)
mode: "non-main", // groups/channels are non-main -> sandboxed
scope: "session", // strongest isolation (one container per group/channel)
workspaceAccess: "none",
},
},
@ -114,7 +114,7 @@ requireMention? так -> є згадка? ні -> зберегти лише д
tools: {
sandbox: {
tools: {
// Якщо список allow не порожній, усе інше блокується (deny все одно має пріоритет).
// If allow is non-empty, everything else is blocked (deny still wins).
allow: ["group:messaging", "group:sessions"],
deny: ["group:runtime", "group:fs", "group:ui", "nodes", "cron", "gateway"],
},
@ -123,7 +123,7 @@ requireMention? так -> є згадка? ні -> зберегти лише д
}
```
Хочете, щоб «групи могли бачити лише теку X» замість «без доступу до хоста»? Залиште `workspaceAccess: "none"` і змонтуйте в sandbox лише шляхи зі списку дозволених:
Хочете, щоб «групи могли бачити лише папку X» замість «без доступу до хоста»? Залиште `workspaceAccess: "none"` і змонтуйте в sandbox лише шляхи з allowlist:
```json5
{
@ -145,20 +145,20 @@ requireMention? так -> є згадка? ні -> зберегти лише д
}
```
Пов’язано:
Пов’язане:
- Ключі конфігурації та значення за замовчуванням: [Конфігурація шлюзу](/uk/gateway/configuration-reference#agentsdefaultssandbox)
- Налагодження, чому інструмент заблоковано: [Sandbox vs Tool Policy vs Elevated](/uk/gateway/sandbox-vs-tool-policy-vs-elevated)
- Подробиці bind mounts: [Sandboxing](/uk/gateway/sandboxing#custom-bind-mounts)
- Ключі конфігурації та значення за замовчуванням: [Конфігурація Gateway](/uk/gateway/configuration-reference#agentsdefaultssandbox)
- Налагодження причин блокування інструмента: [Sandbox vs Tool Policy vs Elevated](/uk/gateway/sandbox-vs-tool-policy-vs-elevated)
- Докладніше про bind mounts: [Sandboxing](/uk/gateway/sandboxing#custom-bind-mounts)
## Мітки відображення
- Мітки в UI використовують `displayName`, якщо він доступний, у форматі `<channel>:<token>`.
- Мітки в UI використовують `displayName`, коли він доступний, у форматі `<channel>:<token>`.
- `#room` зарезервовано для кімнат/каналів; групові чати використовують `g-<slug>` (нижній регістр, пробіли -> `-`, зберігати `#@+._-`).
## Політика груп
Керуйте тим, як обробляються повідомлення груп/кімнат для кожного каналу:
Керуйте тим, як обробляються повідомлення в групах/кімнатах для кожного каналу:
```json5
{
@ -169,7 +169,7 @@ requireMention? так -> є згадка? ні -> зберегти лише д
},
telegram: {
groupPolicy: "disabled",
groupAllowFrom: ["123456789"], // числовий Telegram user id (wizard може визначити через @username)
groupAllowFrom: ["123456789"], // numeric Telegram user id (wizard can resolve @username)
},
signal: {
groupPolicy: "disabled",
@ -207,36 +207,36 @@ requireMention? так -> є згадка? ні -> зберегти лише д
| Політика | Поведінка |
| ------------- | ------------------------------------------------------------ |
| `"open"` | Групи оминають списки дозволених; керування згадками все одно застосовується. |
| `"disabled"` | Повністю блокує всі групові повідомлення. |
| `"allowlist"` | Дозволяє лише групи/кімнати, що відповідають налаштованому списку дозволених. |
| `"open"` | Групи оминають allowlist; керування згадуваннями все ще діє. |
| `"disabled"` | Повністю блокувати всі групові повідомлення. |
| `"allowlist"` | Дозволяти лише групи/кімнати, що відповідають налаштованому allowlist. |
Примітки:
- `groupPolicy` відокремлена від керування згадками (яке вимагає @згадок).
- `groupPolicy` відокремлена від керування згадуваннями (яке вимагає @згадок).
- WhatsApp/Telegram/Signal/iMessage/Microsoft Teams/Zalo: використовуйте `groupAllowFrom` (резервний варіант: явний `allowFrom`).
- Погодження DM pairing (записи у сховищі `*-allowFrom`) стосуються лише доступу до DM; авторизація відправника в групі лишається явно керованою списками дозволених для груп.
- Discord: список дозволених використовує `channels.discord.guilds.<id>.channels`.
- Slack: список дозволених використовує `channels.slack.channels`.
- Matrix: список дозволених використовує `channels.matrix.groups`. Віддавайте перевагу room ID або alias; пошук за назвою приєднаної кімнати є best-effort, а нерозпізнані назви ігноруються під час виконання. Використовуйте `channels.matrix.groupAllowFrom` для обмеження відправників; також підтримуються списки дозволених `users` для окремих кімнат.
- Підтвердження прив’язки DM (записи сховища `*-allowFrom`) застосовуються лише до доступу в DM; авторизація відправників у групах залишається явно прив’язаною до group allowlist.
- Discord: allowlist використовує `channels.discord.guilds.<id>.channels`.
- Slack: allowlist використовує `channels.slack.channels`.
- Matrix: allowlist використовує `channels.matrix.groups`. Віддавайте перевагу ID кімнат або aliases; пошук назв приєднаних кімнат виконується за принципом best-effort, а нерозв’язані назви ігноруються під час виконання. Використовуйте `channels.matrix.groupAllowFrom`, щоб обмежити відправників; також підтримуються allowlist `users` для окремих кімнат.
- Групові DM керуються окремо (`channels.discord.dm.*`, `channels.slack.dm.*`).
- Список дозволених Telegram може відповідати user ID (`"123456789"`, `"telegram:123456789"`, `"tg:123456789"`) або іменам користувачів (`"@alice"` або `"alice"`); префікси нечутливі до регістру.
- За замовчуванням використовується `groupPolicy: "allowlist"`; якщо ваш список дозволених груп порожній, групові повідомлення блокуються.
- Telegram allowlist може відповідати ID користувачів (`"123456789"`, `"telegram:123456789"`, `"tg:123456789"`) або іменам користувачів (`"@alice"` або `"alice"`); префікси нечутливі до регістру.
- За замовчуванням використовується `groupPolicy: "allowlist"`; якщо ваш group allowlist порожній, групові повідомлення блокуються.
- Безпека під час виконання: коли блок провайдера повністю відсутній (`channels.<provider>` відсутній), політика груп переходить у fail-closed режим (зазвичай `allowlist`) замість успадкування `channels.defaults.groupPolicy`.
Швидка ментальна модель (порядок перевірки для групових повідомлень):
1. `groupPolicy` (open/disabled/allowlist)
2. списки дозволених для груп (`*.groups`, `*.groupAllowFrom`, список дозволених, специфічний для каналу)
3. керування згадками (`requireMention`, `/activation`)
2. group allowlist (`*.groups`, `*.groupAllowFrom`, allowlist, специфічний для каналу)
3. керування згадуваннями (`requireMention`, `/activation`)
## Керування згадками (типово)
## Керування згадуваннями (за замовчуванням)
Групові повідомлення вимагають згадки, якщо це не перевизначено для конкретної групи. Значення за замовчуванням зберігаються для кожної підсистеми в `*.groups."*"`.
Групові повідомлення вимагають згадування, якщо це не перевизначено для конкретної групи. Значення за замовчуванням зберігаються для кожної підсистеми в `*.groups."*"`.
Відповідь на повідомлення бота вважається неявною згадкою, якщо канал
підтримує метадані відповіді. Цитування повідомлення бота також може вважатися неявною
згадкою на каналах, які надають метадані цитати. Поточні вбудовані випадки включають
Відповідь на повідомлення бота вважається неявним згадуванням, якщо канал
підтримує метадані відповіді. Цитування повідомлення бота також може вважатися неявним
згадуванням у каналах, які надають метадані цитати. Поточні вбудовані випадки включають
Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser.
```json5
@ -277,29 +277,29 @@ Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser.
Примітки:
- `mentionPatterns` — це безпечні regex-шаблони, нечутливі до регістру; невалідні шаблони та небезпечні форми з вкладеним повторенням ігноруються.
- Поверхні, що надають явні згадки, усе одно проходять; шаблони є резервним варіантом.
- Перевизначення для окремого агента: `agents.list[].groupChat.mentionPatterns` (корисно, коли кілька агентів спільно використовують групу).
- Керування згадками застосовується лише тоді, коли можливе виявлення згадки (власні згадки або налаштовано `mentionPatterns`).
- Значення за замовчуванням для Discord містяться в `channels.discord.guilds."*"` (можна перевизначати для окремого guild/channel).
- Контекст історії групи уніфіковано обгортається для всіх каналів і є **лише для pending** (повідомлення, пропущені через керування згадками); використовуйте `messages.groupChat.historyLimit` для глобального значення за замовчуванням і `channels.<channel>.historyLimit` (або `channels.<channel>.accounts.*.historyLimit`) для перевизначень. Встановіть `0`, щоб вимкнути.
- `mentionPatterns` — це безпечні regex-патерни, нечутливі до регістру; недійсні патерни та небезпечні вкладені форми повторення ігноруються.
- Поверхні, які надають явні згадування, усе одно проходять; патерни є резервним варіантом.
- Перевизначення для агента: `agents.list[].groupChat.mentionPatterns` (корисно, коли кілька агентів використовують одну групу).
- Керування згадуваннями застосовується лише тоді, коли можливе виявлення згадування (вбудовані згадки або налаштовано `mentionPatterns`).
- Значення за замовчуванням для Discord зберігаються в `channels.discord.guilds."*"` (можна перевизначити для кожної guild/channel).
- Контекст історії групи однаково обгортається для всіх каналів і є **лише pending** (повідомлення, пропущені через керування згадуваннями); використовуйте `messages.groupChat.historyLimit` для глобального значення за замовчуванням і `channels.<channel>.historyLimit` (або `channels.<channel>.accounts.*.historyLimit`) для перевизначень. Встановіть `0`, щоб вимкнути.
## Обмеження інструментів для груп/каналів (необов’язково)
Деякі конфігурації каналів підтримують обмеження того, які інструменти доступні **всередині конкретної групи/кімнати/каналу**.
- `tools`: дозволити/заборонити інструменти для всієї групи.
- `toolsBySender`: перевизначення для окремих відправників усередині групи.
- `toolsBySender`: перевизначення для окремих відправників у межах групи.
Використовуйте явні префікси ключів:
`id:<senderId>`, `e164:<phone>`, `username:<handle>`, `name:<displayName>` і wildcard `"*"`.
Застарілі ключі без префіксів усе ще приймаються й зіставляються лише як `id:`.
Застарілі ключі без префікса все ще приймаються й зіставляються лише як `id:`.
Порядок визначення (найбільш специфічне має пріоритет):
Порядок розв’язання (найспецифічніший має пріоритет):
1. відповідність `toolsBySender` для групи/каналу
1. збіг `toolsBySender` для групи/каналу
2. `tools` для групи/каналу
3. відповідність `toolsBySender` для значення за замовчуванням (`"*"`).
4. `tools` для значення за замовчуванням (`"*"`)
3. збіг `toolsBySender` за замовчуванням (`"*"`)
4. `tools` за замовчуванням (`"*"`)
Приклад (Telegram):
@ -323,17 +323,17 @@ Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser.
Примітки:
- Обмеження інструментів для груп/каналів застосовуються додатково до глобальної/агентської політики інструментів (deny все одно має пріоритет).
- Обмеження інструментів для груп/каналів застосовуються додатково до глобальної/агентської політики інструментів (заборона все одно має пріоритет).
- Деякі канали використовують іншу вкладеність для кімнат/каналів (наприклад, Discord `guilds.*.channels.*`, Slack `channels.*`, Microsoft Teams `teams.*.channels.*`).
## Списки дозволених для груп
## Group allowlist
Коли налаштовано `channels.whatsapp.groups`, `channels.telegram.groups` або `channels.imessage.groups`, ключі діють як список дозволених для груп. Використовуйте `"*"`, щоб дозволити всі групи й водночас задати типову поведінку згадок.
Коли налаштовано `channels.whatsapp.groups`, `channels.telegram.groups` або `channels.imessage.groups`, ключі діють як group allowlist. Використовуйте `"*"` , щоб дозволити всі групи, водночас задавши стандартну поведінку згадувань.
Поширена плутанина: погодження DM pairing — це не те саме, що авторизація групи.
Для каналів, які підтримують DM pairing, сховище pairing розблоковує лише DM. Групові команди все одно вимагають явної авторизації відправника групи через конфігураційні списки дозволених, як-от `groupAllowFrom`, або задокументований резервний механізм конфігурації для цього каналу.
Поширена плутанина: підтвердження прив’язки DM — це не те саме, що авторизація групи.
Для каналів, які підтримують прив’язку DM, сховище прив’язок відкриває лише DM. Команди в групах однаково вимагають явної авторизації відправника групи через allowlist у конфігурації, як-от `groupAllowFrom`, або задокументований резервний варіант конфігурації для цього каналу.
Поширені наміри (скопіювати/вставити):
Поширені наміри (копіюйте/вставляйте):
1. Вимкнути всі відповіді в групах
@ -343,7 +343,7 @@ Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser.
}
```
2. Дозволити лише певні групи (WhatsApp)
2. Дозволити лише конкретні групи (WhatsApp)
```json5
{
@ -358,7 +358,7 @@ Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser.
}
```
3. Дозволити всі групи, але вимагати згадку (явно)
3. Дозволити всі групи, але вимагати згадування (явно)
```json5
{
@ -370,7 +370,7 @@ Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser.
}
```
4. Лише власник може запускати в групах (WhatsApp)
4. Лише власник може запускати відповіді в групах (WhatsApp)
```json5
{
@ -386,35 +386,35 @@ Telegram, WhatsApp, Slack, Discord, Microsoft Teams і ZaloUser.
## Активація (лише для власника)
Власники груп можуть перемикати активацію для окремої групи:
Власники груп можуть перемикати активацію для кожної групи:
- `/activation mention`
- `/activation always`
Власник визначається через `channels.whatsapp.allowFrom` (або власний E.164 бота, якщо не задано). Надсилайте команду як окреме повідомлення. Інші поверхні наразі ігнорують `/activation`.
Власник визначається через `channels.whatsapp.allowFrom` (або через власний E.164 бота, якщо не задано). Надсилайте команду як окреме повідомлення. Інші поверхні наразі ігнорують `/activation`.
## Поля контексту
Вхідні payload для груп задають:
Вхідні payload для груп встановлюють:
- `ChatType=group`
- `GroupSubject` (якщо відомо)
- `GroupMembers` (якщо відомо)
- `WasMentioned` (результат керування згадками)
- Теми форуму Telegram також включають `MessageThreadId` і `IsForum`.
- `WasMentioned` (результат керування згадуваннями)
- Теми форуму Telegram також містять `MessageThreadId` і `IsForum`.
Примітки для конкретних каналів:
- BlueBubbles за потреби може збагачувати учасників без імен у групах macOS із локальної бази Contacts перед заповненням `GroupMembers`. Це вимкнено за замовчуванням і запускається лише після проходження звичайної перевірки груп.
- BlueBubbles може за бажанням збагачувати учасників без імен у групах macOS із локальної бази Contacts перед заповненням `GroupMembers`. Це вимкнено за замовчуванням і виконується лише після проходження звичайної перевірки групових обмежень.
Системний prompt агента включає вступ для групи на першому ході нової групової сесії. Він нагадує моделі відповідати як людині, уникати таблиць Markdown, зводити порожні рядки до мінімуму й дотримуватися звичайних інтервалів у чаті, а також не вводити буквальні послідовності `\n`.
Системний prompt агента містить вступ для групи на першому ході нової групової сесії. Він нагадує моделі відповідати як людині, уникати Markdown-таблиць, мінімізувати порожні рядки, дотримуватися звичайних інтервалів у чаті та не вводити буквально послідовності `\n`.
## Особливості iMessage
- Для маршрутизації або списків дозволених віддавайте перевагу `chat_id:<id>`.
- Перегляд чатів: `imsg chats --limit 20`.
- Для маршрутизації або allowlist віддавайте перевагу `chat_id:<id>`.
- Список чатів: `imsg chats --limit 20`.
- Відповіді в групах завжди повертаються до того самого `chat_id`.
## Особливості WhatsApp
Див. [Групові повідомлення](/uk/channels/group-messages) щодо поведінки, специфічної лише для WhatsApp (впровадження історії, подробиці обробки згадок).
Див. [Групові повідомлення](/uk/channels/group-messages) щодо поведінки лише для WhatsApp (вставлення історії, деталі обробки згадувань).

View File

@ -1,15 +1,15 @@
---
read_when:
- Налаштування OpenClaw уперше
- Перше налаштування OpenClaw
- Пошук поширених шаблонів конфігурації
- Перехід до певних розділів конфігурації
summary: 'Огляд конфігурації: поширені завдання, швидке налаштування та посилання на повний довідник'
title: Конфігурація
x-i18n:
generated_at: "2026-04-20T12:31:59Z"
generated_at: "2026-04-20T18:29:28Z"
model: gpt-5.4
provider: openai
source_hash: bad966d0333c28a94905fa8c01eba41dbdf5bfcbda25e7a71a8bea1589703b9b
source_hash: 479e59fb8b57c5228ef1c6076cf80a4ce6064d3f6fad5f38ea9d75eeb92811dc
source_path: gateway/configuration.md
workflow: 15
---
@ -21,13 +21,13 @@ OpenClaw зчитує необов’язкову конфігурацію <Tool
Якщо файл відсутній, OpenClaw використовує безпечні значення за замовчуванням. Поширені причини додати конфігурацію:
- Підключити канали та керувати тим, хто може надсилати повідомлення боту
- Налаштувати моделі, інструменти, ізоляцію або автоматизацію (cron, hooks)
- Тонко налаштувати сесії, медіа, мережу або UI
- Налаштувати моделі, інструменти, ізоляцію або автоматизацію (Cron, hooks)
- Налаштувати сесії, медіа, мережу або UI
Перегляньте [повний довідник](/uk/gateway/configuration-reference), щоб побачити всі доступні поля.
<Tip>
**Вперше працюєте з конфігурацією?** Почніть із `openclaw onboard` для інтерактивного налаштування або перегляньте посібник [Приклади конфігурації](/uk/gateway/configuration-examples) із готовими конфігураціями для копіювання.
**Новачок у конфігурації?** Почніть з `openclaw onboard` для інтерактивного налаштування або перегляньте посібник [Приклади конфігурації](/uk/gateway/configuration-examples) з повними конфігураціями для копіювання й вставлення.
</Tip>
## Мінімальна конфігурація
@ -45,8 +45,8 @@ OpenClaw зчитує необов’язкову конфігурацію <Tool
<Tabs>
<Tab title="Інтерактивний майстер">
```bash
openclaw onboard # повний процес початкового налаштування
openclaw configure # майстер конфігурації
openclaw onboard # full onboarding flow
openclaw configure # config wizard
```
</Tab>
<Tab title="CLI (однорядкові команди)">
@ -58,42 +58,42 @@ OpenClaw зчитує необов’язкову конфігурацію <Tool
</Tab>
<Tab title="Control UI">
Відкрийте [http://127.0.0.1:18789](http://127.0.0.1:18789) і використовуйте вкладку **Config**.
Control UI відображає форму на основі актуальної схеми конфігурації, включно з метаданими документації полів
Control UI відображає форму з живої схеми конфігурації, включно з метаданими документації полів
`title` / `description`, а також схемами Plugin і каналів, коли вони
доступні, із редактором **Raw JSON** як запасним варіантом. Для
інтерфейсів деталізації та інших інструментів gateway також надає `config.schema.lookup` для
отримання одного вузла схеми, обмеженого шляхом, разом із підсумками безпосередніх дочірніх елементів.
доступні, із редактором **Raw JSON** як запасним варіантом. Для деталізованих
UI та інших інструментів gateway також надає `config.schema.lookup`, щоб
отримати один вузол схеми для певного шляху разом із підсумками безпосередніх дочірніх елементів.
</Tab>
<Tab title="Пряме редагування">
Відредагуйте `~/.openclaw/openclaw.json` безпосередньо. Gateway відстежує файл і автоматично застосовує зміни (див. [гаряче перезавантаження](#config-hot-reload)).
Редагуйте `~/.openclaw/openclaw.json` безпосередньо. Gateway відстежує файл і автоматично застосовує зміни (див. [гаряче перезавантаження](#config-hot-reload)).
</Tab>
</Tabs>
## Сувора валідація
<Warning>
OpenClaw приймає лише конфігурації, що повністю відповідають схемі. Невідомі ключі, некоректні типи або недійсні значення призводять до того, що Gateway **відмовляється запускатися**. Єдиний виняток на кореневому рівні — `$schema` (рядок), щоб редактори могли підключати метадані JSON Schema.
OpenClaw приймає лише конфігурації, що повністю відповідають схемі. Невідомі ключі, некоректні типи або недійсні значення призводять до того, що Gateway **відмовляється запускатися**. Єдиний виняток на рівні кореня`$schema` (рядок), щоб редактори могли приєднувати метадані JSON Schema.
</Warning>
Примітки щодо інструментів схеми:
- `openclaw config schema` виводить ту саму сім’ю JSON Schema, яку використовують Control UI
і валідація конфігурації.
- Вважайте цей вивід схеми канонічним машиночитним контрактом для
- Вважайте цей вивід схеми канонічним машиночитаним контрактом для
`openclaw.json`; цей огляд і довідник конфігурації її узагальнюють.
- Значення полів `title` і `description` переносяться у вивід схеми для
редакторів та інструментів форм.
- Вкладені об’єкти, шаблони (`*`) і записи елементів масиву (`[]`) успадковують ті самі
метадані документації там, де існує відповідна документація для поля.
інструментів редактора та форм.
- Вкладені об’єкти, шаблонні (`*`) і елементи масивів (`[]`) успадковують ті самі
метадані документації там, де існує відповідна документація поля.
- Гілки композиції `anyOf` / `oneOf` / `allOf` також успадковують ті самі
метадані документації, тож варіанти union/intersection зберігають ту саму довідку для полів.
- `config.schema.lookup` повертає один нормалізований шлях конфігурації з поверхневим
вузлом схеми (`title`, `description`, `type`, `enum`, `const`, типові обмеження
та подібні поля валідації), відповідними метаданими підказок UI та короткими
підсумками безпосередніх дочірніх елементів для інструментів деталізації.
- Схеми Plugin/каналів часу виконання об’єднуються, коли gateway може завантажити
метадані документації, тож варіанти union/intersection зберігають ту саму довідку по полях.
- `config.schema.lookup` повертає один нормалізований шлях конфігурації з неглибоким
вузлом схеми (`title`, `description`, `type`, `enum`, `const`, типові межі
та подібні поля валідації), відповідні метадані підказок UI і короткі описи
безпосередніх дочірніх елементів для інструментів деталізації.
- Схеми Plugin/каналів під час виконання об’єднуються, коли gateway може завантажити
поточний реєстр маніфестів.
- `pnpm config:docs:check` виявляє розходження між артефактами базової конфігурації
- `pnpm config:docs:check` виявляє розбіжності між базовими артефактами конфігурації
для документації та поточною поверхнею схеми.
Коли валідація не проходить:
@ -103,22 +103,22 @@ OpenClaw приймає лише конфігурації, що повністю
- Запустіть `openclaw doctor`, щоб побачити точні проблеми
- Запустіть `openclaw doctor --fix` (або `--yes`), щоб застосувати виправлення
Gateway також зберігає довірену останню відому справну копію після успішного запуску. Якщо
`openclaw.json` згодом змінено поза OpenClaw і він більше не проходить валідацію, під час запуску
та гарячого перезавантаження зламаний файл зберігається як знімок `.clobbered.*` із часовою позначкою,
відновлюється остання відома справна копія, а в журнал записується помітне попередження з причиною відновлення.
На наступному ході основного агента також надсилається системне попередження, яке повідомляє, що
конфігурацію було відновлено і її не можна бездумно перезаписувати. Підвищення статусу до останньої відомої справної
копії оновлюється після валідаційного запуску та після прийнятих гарячих перезавантажень, включно з
записами конфігурації, виконаними OpenClaw, якщо хеш збереженого файлу все ще відповідає прийнятому
запису. Підвищення пропускається, коли кандидат містить замасковані заповнювачі секретів,
такі як `***` або скорочені значення токенів.
Gateway також зберігає довірену останню справну копію після успішного запуску. Якщо
`openclaw.json` пізніше змінено поза OpenClaw і він більше не проходить валідацію, під час запуску
і гарячого перезавантаження пошкоджений файл зберігається як знімок `.clobbered.*` із часовою позначкою,
відновлюється остання справна копія, а в журнал записується помітне попередження з причиною відновлення.
Під час наступного ходу головного агента він також отримує попередження системної події про те, що
конфігурацію було відновлено і її не можна бездумно перезаписувати. Просування останньої справної копії
оновлюється після перевіреного запуску та після прийнятих гарячих перезавантажень, зокрема
для записів конфігурації, виконаних самим OpenClaw, якщо хеш збереженого файла все ще збігається з прийнятим
записом. Просування пропускається, коли кандидат містить відредаговані заповнювачі секретів
на кшталт `***` або скорочені значення токенів.
## Поширені завдання
<AccordionGroup>
<Accordion title="Налаштування каналу (WhatsApp, Telegram, Discord тощо)">
Кожен канал має власний розділ конфігурації в `channels.<provider>`. Кроки налаштування дивіться на окремій сторінці каналу:
<Accordion title="Налаштувати канал (WhatsApp, Telegram, Discord тощо)">
Кожен канал має власний розділ конфігурації в `channels.<provider>`. Перегляньте окрему сторінку каналу, щоб виконати налаштування:
- [WhatsApp](/uk/channels/whatsapp) — `channels.whatsapp`
- [Telegram](/uk/channels/telegram) — `channels.telegram`
@ -131,7 +131,7 @@ Gateway також зберігає довірену останню відому
- [iMessage](/uk/channels/imessage) — `channels.imessage`
- [Mattermost](/uk/channels/mattermost) — `channels.mattermost`
Усі канали використовують однаковий шаблон політики DM:
Усі канали використовують однаковий шаблон політики приватних повідомлень:
```json5
{
@ -148,8 +148,8 @@ Gateway також зберігає довірену останню відому
</Accordion>
<Accordion title="Вибір і налаштування моделей">
Задайте основну модель і необов’язкові резервні варіанти:
<Accordion title="Вибрати й налаштувати моделі">
Вкажіть основну модель і необов’язкові резервні варіанти:
```json5
{
@ -170,28 +170,28 @@ Gateway також зберігає довірену останню відому
- `agents.defaults.models` визначає каталог моделей і слугує allowlist для `/model`.
- Посилання на моделі використовують формат `provider/model` (наприклад, `anthropic/claude-opus-4-6`).
- `agents.defaults.imageMaxDimensionPx` керує зменшенням масштабу зображень у транскриптах/інструментах (типове значення `1200`); менші значення зазвичай зменшують використання vision-токенів у сценаріях з великою кількістю скриншотів.
- Див. [Models CLI](/uk/concepts/models) для перемикання моделей у чаті та [Model Failover](/uk/concepts/model-failover) для ротації автентифікації й поведінки резервних моделей.
- Для користувацьких/self-hosted provider див. [Користувацькі provider](/uk/gateway/configuration-reference#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/configuration-reference#custom-providers-and-base-urls) у довіднику.
</Accordion>
<Accordion title="Керування тим, хто може писати боту">
Доступ до DM контролюється для кожного каналу через `dmPolicy`:
<Accordion title="Керувати тим, хто може надсилати повідомлення боту">
Доступ до приватних повідомлень контролюється окремо для кожного каналу через `dmPolicy`:
- `"pairing"` (типово): невідомі відправники отримують одноразовий код pairing для підтвердження
- `"allowlist"`: лише відправники з `allowFrom` (або зі сховища paired allow)
- `"open"`: дозволити всі вхідні DM (потрібно `allowFrom: ["*"]`)
- `"disabled"`: ігнорувати всі DM
- `"pairing"` (типово): невідомі відправники отримують одноразовий код сполучення для підтвердження
- `"allowlist"`: лише відправники з `allowFrom` (або зі сховища дозволених сполучених користувачів)
- `"open"`: дозволити всі вхідні приватні повідомлення (потрібно `allowFrom: ["*"]`)
- `"disabled"`: ігнорувати всі приватні повідомлення
Для груп використовуйте `groupPolicy` + `groupAllowFrom` або allowlist, специфічні для каналу.
Див. [повний довідник](/uk/gateway/configuration-reference#dm-and-group-access) для подробиць по кожному каналу.
Докладні відомості для кожного каналу див. у [повному довіднику](/uk/gateway/configuration-reference#dm-and-group-access).
</Accordion>
<Accordion title="Налаштування фільтрації згадок у групових чатах">
Для групових повідомлень типово **потрібна згадка**. Налаштуйте шаблони для кожного агента:
<Accordion title="Налаштувати обмеження за згадкою в груповому чаті">
Повідомлення в групах за замовчуванням **вимагають згадки**. Налаштуйте шаблони для кожного агента:
```json5
{
@ -215,13 +215,13 @@ Gateway також зберігає довірену останню відому
- **Метадані згадок**: нативні @-згадки (WhatsApp tap-to-mention, Telegram @bot тощо)
- **Текстові шаблони**: безпечні regex-шаблони в `mentionPatterns`
- Див. [повний довідник](/uk/gateway/configuration-reference#group-chat-mention-gating) для перевизначень по каналах і режиму чату із самим собою.
- Докладніше про перевизначення для кожного каналу та режим self-chat див. у [повному довіднику](/uk/gateway/configuration-reference#group-chat-mention-gating).
</Accordion>
<Accordion title="Обмеження Skills для агента">
Використовуйте `agents.defaults.skills` для спільної базової конфігурації, а потім перевизначайте конкретні
агенти через `agents.list[].skills`:
<Accordion title="Обмежити Skills для агента">
Використовуйте `agents.defaults.skills` для спільної базової конфігурації, а потім перевизначайте
окремих агентів через `agents.list[].skills`:
```json5
{
@ -238,16 +238,16 @@ Gateway також зберігає довірену останню відому
}
```
- Не вказуйте `agents.defaults.skills`, якщо Skills за замовчуванням не мають бути обмежені.
- Не вказуйте `agents.list[].skills`, щоб успадкувати значення за замовчуванням.
- Вкажіть `agents.list[].skills: []`, щоб не дозволити жодних Skills.
- Не вказуйте `agents.defaults.skills`, якщо за замовчуванням Skills не мають бути обмежені.
- Не вказуйте `agents.list[].skills`, щоб успадкувати типові значення.
- Установіть `agents.list[].skills: []`, щоб не дозволити жодних Skills.
- Див. [Skills](/uk/tools/skills), [конфігурацію Skills](/uk/tools/skills-config) і
[Довідник конфігурації](/uk/gateway/configuration-reference#agents-defaults-skills).
[довідник конфігурації](/uk/gateway/configuration-reference#agents-defaults-skills).
</Accordion>
<Accordion title="Налаштування моніторингу стану каналів gateway">
Керуйте тим, наскільки агресивно gateway перезапускає канали, що виглядають неактивними:
<Accordion title="Налаштувати моніторинг стану каналів gateway">
Керуйте тим, наскільки агресивно gateway перезапускає канали, які виглядають застарілими:
```json5
{
@ -269,15 +269,15 @@ Gateway також зберігає довірену останню відому
}
```
- Встановіть `gateway.channelHealthCheckMinutes: 0`, щоб глобально вимкнути перезапуски монітора стану.
- Установіть `gateway.channelHealthCheckMinutes: 0`, щоб глобально вимкнути перезапуски моніторингу стану.
- `channelStaleEventThresholdMinutes` має бути більшим або дорівнювати інтервалу перевірки.
- Використовуйте `channels.<provider>.healthMonitor.enabled` або `channels.<provider>.accounts.<id>.healthMonitor.enabled`, щоб вимкнути автоперезапуск для одного каналу або облікового запису без вимкнення глобального монітора.
- Див. [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="Налаштування сесій і скидання">
Сесії керують безперервністю та ізоляцією розмов:
<Accordion title="Налаштувати сесії та скидання">
Сесії керують безперервністю розмови та ізоляцією:
```json5
{
@ -298,14 +298,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) для областей видимості, зв’язків ідентичності та політики надсилання.
- Див. [повний довідник](/uk/gateway/configuration-reference#session) для всіх полів.
- `threadBindings`: глобальні типові значення для маршрутизації сесій, прив’язаних до тредів (Discord підтримує `/focus`, `/unfocus`, `/agents`, `/session idle` і `/session max-age`).
- Див. [Керування сесіями](/uk/concepts/session) для відомостей про області дії, зв’язки ідентичностей і політику надсилання.
- Усі поля див. у [повному довіднику](/uk/gateway/configuration-reference#session).
</Accordion>
<Accordion title="Увімкнення ізоляції">
Запускайте сесії агентів в ізольованих Docker-контейнерах:
<Accordion title="Увімкнути ізоляцію">
Запускайте сесії агента в ізольованих runtime ізолятора:
```json5
{
@ -322,14 +322,14 @@ Gateway також зберігає довірену останню відому
Спочатку зберіть образ: `scripts/sandbox-setup.sh`
Див. [Ізоляція](/uk/gateway/sandboxing) для повного посібника та [повний довідник](/uk/gateway/configuration-reference#agentsdefaultssandbox) для всіх параметрів.
Повний посібник див. у [Sandboxing](/uk/gateway/sandboxing), а всі параметри — у [повному довіднику](/uk/gateway/configuration-reference#agentsdefaultssandbox).
</Accordion>
<Accordion title="Увімкнення push на основі relay для офіційних збірок iOS">
Push на основі relay налаштовується в `openclaw.json`.
<Accordion title="Увімкнути push через relay для офіційних збірок iOS">
Push через relay налаштовується в `openclaw.json`.
Встановіть це в конфігурації gateway:
Укажіть це в конфігурації gateway:
```json5
{
@ -355,35 +355,35 @@ Gateway також зберігає довірену останню відому
Що це робить:
- Дозволяє gateway надсилати `push.test`, сигнали пробудження та сигнали повторного підключення через зовнішній relay.
- Використовує grant на надсилання в межах реєстрації, який пересилає прив’язаний iOS app. Gateway не потребує relay-токена на рівні всього розгортання.
- Прив’язує кожну relay-backed реєстрацію до ідентичності gateway, з якою було спарено iOS app, тож інший gateway не зможе повторно використати збережену реєстрацію.
- Залишає локальні/ручні збірки iOS на прямих APNs. Relay-backed надсилання застосовується лише до офіційно розповсюджуваних збірок, що зареєструвалися через relay.
- Має збігатися з базовим URL relay, вбудованим в офіційну/TestFlight збірку iOS, щоб трафік реєстрації та надсилання потрапляв до одного й того самого розгортання relay.
- Дозволяє gateway надсилати `push.test`, сигнали пробудження і сигнали повторного підключення через зовнішній relay.
- Використовує grant на надсилання в межах реєстрації, який пересилає сполучений застосунок 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 app із gateway і дочекайтеся підключення як node, так і operator sessions.
4. iOS app отримує ідентичність gateway, реєструється в relay за допомогою App Attest і квитанції app, а потім публікує relay-backed payload `push.apns.register` до прив’язаного gateway.
5. Gateway зберігає relay handle і grant на надсилання, а потім використовує їх для `push.test`, сигналів пробудження та сигналів повторного підключення.
1. Установіть офіційну/TestFlight збірку iOS, скомпільовану з тим самим базовим URL relay.
2. Налаштуйте `gateway.push.apns.relay.baseUrl` у gateway.
3. Сполучіть застосунок iOS із gateway і дайте змогу підключитися як сесіям node, так і сесіям оператора.
4. Застосунок iOS отримує ідентичність gateway, реєструється в relay за допомогою App Attest і квитанції застосунку, а потім публікує payload `push.apns.register` через relay до сполученого gateway.
5. Gateway зберігає relay handle і grant на надсилання, а потім використовує їх для `push.test`, сигналів пробудження і сигналів повторного підключення.
Примітки щодо експлуатації:
Операційні примітки:
- Якщо ви перемикаєте iOS app на інший gateway, перепідключіть app, щоб він міг опублікувати нову relay-реєстрацію, прив’язану до цього gateway.
- Якщо ви випускаєте нову збірку iOS, яка вказує на інше розгортання relay, app оновлює кешовану relay-реєстрацію замість повторного використання старого relay origin.
- Якщо ви перемикаєте застосунок iOS на інший gateway, перепідключіть застосунок, щоб він міг опублікувати нову relay-реєстрацію, прив’язану до цього gateway.
- Якщо ви випускаєте нову збірку iOS, що вказує на інше розгортання relay, застосунок оновлює свій кешований relay-реєстраційний запис замість повторного використання старого джерела relay.
Примітка щодо сумісності:
- `OPENCLAW_APNS_RELAY_BASE_URL` і `OPENCLAW_APNS_RELAY_TIMEOUT_MS` усе ще працюють як тимчасові перевизначення через env.
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` залишається суто loopback-режимом для розробки; не зберігайте HTTP URL relay у конфігурації.
- `OPENCLAW_APNS_RELAY_BASE_URL` і `OPENCLAW_APNS_RELAY_TIMEOUT_MS` як і раніше працюють як тимчасові перевизначення через env.
- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true` залишається тимчасовим засобом розробки лише для loopback; не зберігайте HTTP URL relay у конфігурації.
Див. [iOS App](/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 (періодичні check-in)">
<Accordion title="Налаштувати Heartbeat (періодичні перевірки зв’язку)">
```json5
{
agents: {
@ -399,12 +399,12 @@ Gateway також зберігає довірену останню відому
- `every`: рядок тривалості (`30m`, `2h`). Установіть `0m`, щоб вимкнути.
- `target`: `last` | `none` | `<channel-id>` (наприклад, `discord`, `matrix`, `telegram` або `whatsapp`)
- `directPolicy`: `allow` (типово) або `block` для heartbeat-цілей у стилі DM
- Див. [Heartbeat](/uk/gateway/heartbeat) для повного посібника.
- `directPolicy`: `allow` (типово) або `block` для цілей Heartbeat у стилі DM
- Повний посібник див. у [Heartbeat](/uk/gateway/heartbeat).
</Accordion>
<Accordion title="Налаштування завдань Cron">
<Accordion title="Налаштувати Cron-завдання">
```json5
{
cron: {
@ -419,14 +419,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` за розміром і кількістю збережених рядків.
- Огляд можливостей і приклади CLI див. у [Cron jobs](/uk/automation/cron-jobs).
</Accordion>
<Accordion title="Налаштування Webhook (hooks)">
Увімкніть HTTP endpoint Webhook на Gateway:
<Accordion title="Налаштувати Webhook-и (hooks)">
Увімкніть HTTP-ендпоїнти Webhook у Gateway:
```json5
{
@ -450,20 +450,20 @@ Gateway також зберігає довірену останню відому
```
Примітка щодо безпеки:
- Розглядайте весь вміст payload hook/webhook як недовірений вхід.
- Вважайте весь вміст payload hook/Webhook недовіреним введенням.
- Використовуйте окремий `hooks.token`; не використовуйте повторно спільний токен Gateway.
- Автентифікація hook виконується лише через заголовки (`Authorization: Bearer ...` або `x-openclaw-token`); токени в query string відхиляються.
- `hooks.path` не може бути `/`; використовуйте для webhook ingress окремий підшлях, наприклад `/hooks`.
- Прапорці обходу небезпечного вмісту (`hooks.gmail.allowUnsafeExternalContent`, `hooks.mappings[].allowUnsafeExternalContent`) мають залишатися вимкненими, якщо ви не виконуєте вузькоспрямоване налагодження.
- Якщо ви вмикаєте `hooks.allowRequestSessionKey`, також задайте `hooks.allowedSessionKeyPrefixes`, щоб обмежити ключі сесій, які може вибирати викликач.
- Для агентів, що працюють через hooks, віддавайте перевагу сильним сучасним рівням моделей і суворій політиці інструментів (наприклад, лише обмін повідомленнями плюс ізоляція, де це можливо).
- Автентифікація hook виконується лише через заголовки (`Authorization: Bearer ...` або `x-openclaw-token`); токени в рядку запиту відхиляються.
- `hooks.path` не може бути `/`; тримайте вхідний трафік Webhook на окремому підшляху, наприклад `/hooks`.
- Залишайте прапори обходу небезпечного вмісту вимкненими (`hooks.gmail.allowUnsafeExternalContent`, `hooks.mappings[].allowUnsafeExternalContent`), якщо не виконуєте вузькоспрямоване налагодження.
- Якщо ви вмикаєте `hooks.allowRequestSessionKey`, також установіть `hooks.allowedSessionKeyPrefixes`, щоб обмежити ключі сесій, які вибирає викликач.
- Для агентів, що запускаються через hook, віддавайте перевагу сильним сучасним рівням моделей і суворій політиці інструментів (наприклад, лише обмін повідомленнями плюс ізоляція, де це можливо).
Див. [повний довідник](/uk/gateway/configuration-reference#hooks) для всіх варіантів mapping та інтеграції Gmail.
Усі параметри мапінгу та інтеграцію Gmail див. у [повному довіднику](/uk/gateway/configuration-reference#hooks).
</Accordion>
<Accordion title="Налаштування маршрутизації з кількома агентами">
Запускайте кілька ізольованих агентів з окремими workspace і сесіями:
<Accordion title="Налаштувати маршрутизацію кількох агентів">
Запускайте кількох ізольованих агентів з окремими робочими просторами та сесіями:
```json5
{
@ -480,12 +480,12 @@ Gateway також зберігає довірену останню відому
}
```
Див. [Multi-Agent](/uk/concepts/multi-agent) і [повний довідник](/uk/gateway/configuration-reference#multi-agent-routing) для правил binding і профілів доступу для кожного агента.
Правила binding та профілі доступу для кожного агента див. у [Multi-Agent](/uk/concepts/multi-agent) і [повному довіднику](/uk/gateway/configuration-reference#multi-agent-routing).
</Accordion>
<Accordion title="Поділ конфігурації на кілька файлів ($include)">
Використовуйте `$include`, щоб організувати великі конфігурації:
<Accordion title="Розділити конфігурацію на кілька файлів ($include)">
Використовуйте `$include`, щоб упорядковувати великі конфігурації:
```json5
// ~/.openclaw/openclaw.json
@ -498,41 +498,40 @@ Gateway також зберігає довірену останню відому
}
```
- **Один файл**: замінює об’єкт, у якому вказаний
- **Масив файлів**: виконується глибоке злиття за порядком (пізніші мають пріоритет)
- **Сусідні ключі**: зливаються після include (перевизначають включені значення)
- **Вкладені include**: підтримуються до 10 рівнів вкладеності
- **Відносні шляхи**: обчислюються відносно файла, який містить include
- **Обробка помилок**: зрозумілі помилки для відсутніх файлів, помилок парсингу та циклічних include
- **Один файл**: замінює об’єкт-контейнер
- **Масив файлів**: глибоко зливається по порядку (пізніший має пріоритет)
- **Сусідні ключі**: зливаються після include-ів (перевизначають включені значення)
- **Вкладені include**: підтримуються до 10 рівнів вкладеності
- **Відносні шляхи**: обчислюються відносно файла, що включає
- **Обробка помилок**: зрозумілі помилки для відсутніх файлів, помилок парсингу та циклічних 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` або
`config reload restored last-known-good config`, перевірте відповідний
Якщо ви бачите `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`** | Гаряче застосовує лише безпечні зміни. Логує попередження, коли потрібен перезапуск — далі дієте ви. |
| **`restart`** | Перезапускає Gateway за будь-якої зміни конфігурації, безпечної чи ні. |
| **`off`** | Вимикає відстеження файлів. Зміни набирають чинності після наступного ручного перезапуску. |
| Режим | Поведінка |
| ---------------------- | ---------------------------------------------------------------------------------------- |
| **`hybrid`** (типово) | Миттєво гаряче застосовує безпечні зміни. Автоматично перезапускається для критичних. |
| **`hot`** | Гаряче застосовує лише безпечні зміни. Логує попередження, коли потрібен перезапуск — ви обробляєте це самі. |
| **`restart`** | Перезапускає Gateway за будь-якої зміни конфігурації, безпечної чи ні. |
| **`off`** | Вимикає відстеження файла. Зміни набирають чинності під час наступного ручного перезапуску. |
```json5
{
@ -546,42 +545,42 @@ Gateway відстежує `~/.openclaw/openclaw.json` і автоматично
Більшість полів застосовуються гаряче без простою. У режимі `hybrid` зміни, що потребують перезапуску, обробляються автоматично.
| Категорія | Поля | Потрібен перезапуск? |
| ----------------- | -------------------------------------------------------------------- | -------------------- |
| Канали | `channels.*`, `web` (WhatsApp) — усі вбудовані канали й канали extension | Ні |
| Агент і моделі | `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` | **Так** |
| Категорія | Поля | Потрібен перезапуск? |
| ------------------- | -------------------------------------------------------------------- | -------------------- |
| Канали | `channels.*`, `web` (WhatsApp) — усі вбудовані канали й канали розширень | Ні |
| Агент і моделі | `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` є винятками — їх зміна **не** спричиняє перезапуск.
</Note>
## RPC конфігурації (програмні оновлення)
## Config RPC (програмні оновлення)
<Note>
RPC control-plane для запису (`config.apply`, `config.patch`, `update.run`) мають обмеження швидкості: **3 запити за 60 секунд** для кожної пари `deviceId+clientIp`. При спрацюванні обмеження RPC повертає `UNAVAILABLE` з `retryAfterMs`.
RPC керуючої площини для запису (`config.apply`, `config.patch`, `update.run`) мають обмеження швидкості: **3 запити за 60 секунд** на `deviceId+clientIp`. У разі обмеження RPC повертає `UNAVAILABLE` з `retryAfterMs`.
</Note>
Безпечний/типовий процес:
- `config.schema.lookup`: перевірити одне піддерево конфігурації, обмежене шляхом, із поверхневим
вузлом схеми, відповідними метаданими підказок і підсумками безпосередніх дочірніх елементів
- `config.get`: отримати поточний snapshot + hash
- `config.patch`: бажаний шлях для часткових оновлень
- `config.schema.lookup`: переглянути одне піддерево конфігурації з певною областю шляху з неглибоким
вузлом схеми, відповідними метаданими підказок і короткими описами безпосередніх дочірніх елементів
- `config.get`: отримати поточний знімок + хеш
- `config.patch`: рекомендований шлях часткового оновлення
- `config.apply`: лише повна заміна конфігурації
- `update.run`: явне самооновлення + перезапуск
Якщо ви не замінюєте всю конфігурацію, віддавайте перевагу `config.schema.lookup`,
Якщо ви не замінюєте всю конфігурацію повністю, надавайте перевагу `config.schema.lookup`,
а потім `config.patch`.
<AccordionGroup>
<Accordion title="config.apply (повна заміна)">
Виконує валідацію + записує всю конфігурацію та перезапускає Gateway за один крок.
Перевіряє + записує повну конфігурацію і перезапускає Gateway за один крок.
<Warning>
`config.apply` замінює **всю конфігурацію**. Для часткових оновлень використовуйте `config.patch`, а для окремих ключів — `openclaw config set`.
@ -590,15 +589,15 @@ RPC control-plane для запису (`config.apply`, `config.patch`, `update.r
Параметри:
- `raw` (string) — payload JSON5 для всієї конфігурації
- `baseHash` (необов’язково) — хеш конфігурації з `config.get` (обов’язковий, якщо конфігурація існує)
- `sessionKey` (необов’язково) — ключ сесії для ping пробудження після перезапуску
- `note` (необов’язково) — примітка для sentinel перезапуску
- `restartDelayMs` (необов’язково) — затримка перед перезапуском (типово 2000)
- `baseHash` (optional) — хеш конфігурації з `config.get` (обов’язковий, якщо конфігурація існує)
- `sessionKey` (optional) — ключ сесії для ping пробудження після перезапуску
- `note` (optional) — примітка для restart sentinel
- `restartDelayMs` (optional) — затримка перед перезапуском (типово 2000)
Запити на перезапуск об’єднуються, якщо один уже очікує виконання/виконується, а між циклами перезапуску діє 30-секундна пауза.
Запити на перезапуск об’єднуються, якщо один уже очікує/виконується, і між циклами перезапуску діє 30-секундний період охолодження.
```bash
openclaw gateway call config.get --params '{}' # отримайте payload.hash
openclaw gateway call config.get --params '{}' # capture payload.hash
openclaw gateway call config.apply --params '{
"raw": "{ agents: { defaults: { workspace: \"~/.openclaw/workspace\" } } }",
"baseHash": "<hash>",
@ -609,7 +608,7 @@ RPC control-plane для запису (`config.apply`, `config.patch`, `update.r
</Accordion>
<Accordion title="config.patch (часткове оновлення)">
Зливає часткове оновлення з наявною конфігурацією (семантика JSON merge patch):
Зливає часткове оновлення в наявну конфігурацію (семантика JSON merge patch):
- Об’єкти зливаються рекурсивно
- `null` видаляє ключ
@ -617,11 +616,11 @@ RPC control-plane для запису (`config.apply`, `config.patch`, `update.r
Параметри:
- `raw` (string) — JSON5 лише з ключами, які потрібно змінити
- `baseHash` (обов’язково) — хеш конфігурації з `config.get`
- `sessionKey`, `note`, `restartDelayMs` — такі самі, як у `config.apply`
- `raw` (string) — JSON5 лише з тими ключами, які потрібно змінити
- `baseHash` (required) — хеш конфігурації з `config.get`
- `sessionKey`, `note`, `restartDelayMs` — те саме, що й у `config.apply`
Поведінка перезапуску збігається з `config.apply`: об’єднання перезапусків, що очікують виконання, плюс 30-секундна пауза між циклами перезапуску.
Поведінка перезапуску відповідає `config.apply`: об’єднання відкладених перезапусків плюс 30-секундний період охолодження між циклами перезапуску.
```bash
openclaw gateway call config.patch --params '{
@ -635,12 +634,12 @@ RPC control-plane для запису (`config.apply`, `config.patch`, `update.r
## Змінні середовища
OpenClaw зчитує змінні середовища з батьківського процесу, а також з:
OpenClaw зчитує змінні середовища з батьківського процесу, а також із:
- `.env` у поточному робочому каталозі (якщо є)
- `~/.openclaw/.env` (глобальний запасний варіант)
- `.env` у поточному робочому каталозі (якщо наявний)
- `~/.openclaw/.env` (глобальний резервний варіант)
Жоден із цих файлів не перевизначає наявні змінні середовища. Ви також можете задавати вбудовані змінні середовища в конфігурації:
Жоден із цих файлів не перевизначає вже наявні змінні середовища. Ви також можете задавати вбудовані змінні середовища в конфігурації:
```json5
{
@ -652,7 +651,7 @@ OpenClaw зчитує змінні середовища з батьківськ
```
<Accordion title="Імпорт shell env (необов’язково)">
Якщо цю опцію ввімкнено, а очікувані ключі не задано, OpenClaw запускає вашу login shell і імпортує лише відсутні ключі:
Якщо це ввімкнено і очікувані ключі не задані, OpenClaw запускає вашу login shell і імпортує лише відсутні ключі:
```json5
{
@ -662,10 +661,10 @@ OpenClaw зчитує змінні середовища з батьківськ
}
```
Еквівалентна змінна середовища: `OPENCLAW_LOAD_SHELL_ENV=1`
Еквівалент змінної середовища: `OPENCLAW_LOAD_SHELL_ENV=1`
</Accordion>
<Accordion title="Підстановка змінних середовища у значення конфігурації">
<Accordion title="Підстановка env var у значеннях конфігурації">
Посилайтеся на змінні середовища в будь-якому рядковому значенні конфігурації за допомогою `${VAR_NAME}`:
```json5
@ -677,16 +676,16 @@ OpenClaw зчитує змінні середовища з батьківськ
Правила:
- Зіставляються лише імена у верхньому регістрі: `[A-Z_][A-Z0-9_]*`
- Зіставляються лише назви у верхньому регістрі: `[A-Z_][A-Z0-9_]*`
- Відсутні/порожні змінні спричиняють помилку під час завантаження
- Екрануйте через `$${VAR}` для буквального виводу
- Екрануйте як `$${VAR}` для буквального виводу
- Працює всередині файлів `$include`
- Вбудована підстановка: `"${BASE}/v1"``"https://api.example.com/v1"`
</Accordion>
<Accordion title="Посилання на секрети (env, file, exec)">
Для полів, що підтримують об’єкти SecretRef, можна використовувати:
<Accordion title="SecretRef (env, file, exec)">
Для полів, що підтримують об’єкти SecretRef, ви можете використовувати:
```json5
{
@ -718,15 +717,15 @@ OpenClaw зчитує змінні середовища з батьківськ
}
```
Подробиці SecretRef (включно з `secrets.providers` для `env`/`file`/`exec`) наведено в [Керування секретами](/uk/gateway/secrets).
Підтримувані шляхи облікових даних перелічено в [Поверхня облікових даних SecretRef](/uk/reference/secretref-credential-surface).
Докладно про SecretRef (включно з `secrets.providers` для `env`/`file`/`exec`) див. у [Керування секретами](/uk/gateway/secrets).
Підтримувані шляхи облікових даних наведено в [Поверхня облікових даних SecretRef](/uk/reference/secretref-credential-surface).
</Accordion>
Див. [Середовище](/uk/help/environment) для повного опису пріоритетів і джерел.
Повний пріоритет і джерела див. у розділі [Середовище](/uk/help/environment).
## Повний довідник
Повний довідник по полях дивіться в **[Довіднику конфігурації](/uk/gateway/configuration-reference)**.
Повний довідник по полях див. у **[Довіднику конфігурації](/uk/gateway/configuration-reference)**.
---

View File

@ -1,28 +1,28 @@
---
read_when: You hit 'sandbox jail' or see a tool/elevated refusal and want the exact config key to change.
status: active
summary: 'Чому інструмент заблоковано: runtime sandbox, політика allow/deny інструментів і механізми elevated для exec'
title: Sandbox vs Tool Policy vs Elevated
summary: 'Чому інструмент заблоковано: середовище виконання sandbox, політика дозволу/заборони інструментів і шлюзи підвищеного виконання'
title: Sandbox проти політики інструментів проти підвищеного виконання
x-i18n:
generated_at: "2026-04-05T18:04:38Z"
generated_at: "2026-04-20T18:29:31Z"
model: gpt-5.4
provider: openai
source_hash: 331f5b2f0d5effa1320125d9f29948e16d0deaffa59eb1e4f25a63481cbe22d6
source_hash: a85378343df0594be451212cb4c95b349a0cc7cd1f242b9306be89903a450db1
source_path: gateway/sandbox-vs-tool-policy-vs-elevated.md
workflow: 15
---
# Sandbox vs Tool Policy vs Elevated
# Sandbox проти політики інструментів проти підвищеного виконання
OpenClaw має три пов’язані (але різні) механізми керування:
1. **Sandbox** (`agents.defaults.sandbox.*` / `agents.list[].sandbox.*`) визначає, **де запускаються інструменти** (Docker чи хост).
1. **Sandbox** (`agents.defaults.sandbox.*` / `agents.list[].sandbox.*`) визначає, **де запускаються інструменти** (бекенд sandbox чи хост).
2. **Політика інструментів** (`tools.*`, `tools.sandbox.tools.*`, `agents.list[].tools.*`) визначає, **які інструменти доступні/дозволені**.
3. **Elevated** (`tools.elevated.*`, `agents.list[].tools.elevated.*`) — це **лише для exec механізм обходу**, щоб запускати поза sandbox, коли ви перебуваєте в sandbox (`gateway` типово або `node`, коли exec target налаштовано як `node`).
3. **Elevated** (`tools.elevated.*`, `agents.list[].tools.elevated.*`) — це **лише для exec аварійний обхід** для запуску поза sandbox, коли ви працюєте в sandbox (`gateway` за замовчуванням або `node`, якщо ціль exec налаштована на `node`).
## Швидке налагодження
## Швидка діагностика
Використовуйте inspector, щоб побачити, що OpenClaw асправді_ робить:
Використовуйте інспектор, щоб побачити, що OpenClaw асправді_ робить:
```bash
openclaw sandbox explain
@ -33,52 +33,52 @@ openclaw sandbox explain --json
Він показує:
- ефективний режим/scope/workspace access sandbox
- чи сесія зараз працює в sandbox (main чи non-main)
- ефективний allow/deny інструментів sandbox (і чи походить він від agent/global/default)
- механізми elevated і ключі шляхів fix-it
- ефективний режим/область sandbox/доступ до робочого простору
- чи сесія зараз працює в sandbox (main проти non-main)
- ефективні правила allow/deny для інструментів у sandbox (і чи вони надійшли від агента/глобально/за замовчуванням)
- шлюзи elevated і шляхи ключів для виправлення
## Sandbox: де запускаються інструменти
Sandboxing керується через `agents.defaults.sandbox.mode`:
Робота sandbox керується через `agents.defaults.sandbox.mode`:
- `"off"`: усе запускається на хості.
- `"non-main"`: у sandbox працюють лише не-main сесії (поширений “сюрприз” для groups/channels).
- `"all"`: усе працює в sandbox.
- `"non-main"`: у sandbox запускаються лише non-main сесії (типовий «сюрприз» для груп/каналів).
- `"all"`: у sandbox запускається все.
Повну матрицю (scope, монтування workspace, images) див. у [Sandboxing](/gateway/sandboxing).
Повну матрицю дивіться в [Sandboxing](/uk/gateway/sandboxing) (область, монтування робочого простору, образи).
### Bind mounts (швидка перевірка безпеки)
- `docker.binds` _пробиває_ файлову систему sandbox: усе, що ви монтуєте, стає видимим усередині контейнера з указаним режимом (`:ro` або `:rw`).
- Якщо не вказати режим, типово використовується read-write; для source/secrets віддавайте перевагу `:ro`.
- `scope: "shared"` ігнорує bind для кожного агента окремо (застосовуються лише глобальні bind).
- OpenClaw двічі перевіряє джерела bind: спочатку на нормалізованому шляху джерела, потім ще раз після визначення через найглибший наявний батьківський каталог. Вихід через symlink-батьківський шлях не обходить перевірки blocked-path або allowed-root.
- Неіснуючі leaf-шляхи все одно безпечно перевіряються. Якщо `/workspace/alias-out/new-file` визначається через symlink-батьківський каталог у заблокований шлях або поза межами налаштованих allowed roots, bind буде відхилено.
- Монтування `/var/run/docker.sock` фактично передає контроль над хостом у sandbox; робіть це лише свідомо.
- Доступ до workspace (`workspaceAccess: "ro"`/`"rw"`) не залежить від режимів bind.
- `docker.binds` _прориває_ файлову систему sandbox: усе, що ви змонтуєте, буде видиме всередині контейнера з указаним режимом (`:ro` або `:rw`).
- За замовчуванням використовується читання-запис, якщо режим не вказано; для вихідного коду/секретів краще використовувати `:ro`.
- `scope: "shared"` ігнорує bind-монтування для окремих агентів (застосовуються лише глобальні bind-монтування).
- OpenClaw двічі перевіряє джерела bind-монтувань: спочатку на нормалізованому шляху джерела, а потім повторно після розв’язання через найглибший наявний батьківський каталог. Обхід через батьківські symlink не дозволяє обійти перевірки заблокованих шляхів або дозволених коренів.
- Навіть неіснуючі кінцеві шляхи все одно безпечно перевіряються. Якщо `/workspace/alias-out/new-file` розв’язується через symlink-батьківський каталог у заблокований шлях або за межі налаштованих дозволених коренів, bind-монтування буде відхилено.
- Монтування `/var/run/docker.sock` фактично передає керування хостом sandbox; робіть це лише свідомо.
- Доступ до робочого простору (`workspaceAccess: "ro"`/`"rw"`) не залежить від режимів bind-монтування.
## Політика інструментів: які інструменти існують/можна викликати
## Політика інструментів: які інструменти існують/можуть викликатися
Важливі два рівні:
- **Профіль інструментів**: `tools.profile` і `agents.list[].tools.profile` (базовий allowlist)
- **Профіль інструментів**: `tools.profile` і `agents.list[].tools.profile` (базовий список дозволених)
- **Профіль інструментів провайдера**: `tools.byProvider[provider].profile` і `agents.list[].tools.byProvider[provider].profile`
- **Глобальна/для кожного агента окремо політика інструментів**: `tools.allow`/`tools.deny` і `agents.list[].tools.allow`/`agents.list[].tools.deny`
- **Глобальна/персональна політика інструментів агента**: `tools.allow`/`tools.deny` і `agents.list[].tools.allow`/`agents.list[].tools.deny`
- **Політика інструментів провайдера**: `tools.byProvider[provider].allow/deny` і `agents.list[].tools.byProvider[provider].allow/deny`
- **Політика інструментів sandbox** (застосовується лише в sandbox): `tools.sandbox.tools.allow`/`tools.sandbox.tools.deny` і `agents.list[].tools.sandbox.tools.*`
Основні правила:
Базові правила:
- `deny` завжди має перевагу.
- `deny` завжди має пріоритет.
- Якщо `allow` не порожній, усе інше вважається заблокованим.
- Політика інструментів — це жорстке обмеження: `/exec` не може перевизначити заборонений інструмент `exec`.
- `/exec` лише змінює типові значення сесії для авторизованих відправників; він не надає доступ до інструментів.
Ключі інструментів провайдера приймають або `provider` (наприклад, `google-antigravity`), або `provider/model` (наприклад, `openai/gpt-5.4`).
- `/exec` лише змінює налаштування сесії за замовчуванням для авторизованих відправників; він не надає доступ до інструментів.
Ключі інструментів провайдера можуть приймати або `provider` (наприклад, `google-antigravity`), або `provider/model` (наприклад, `openai/gpt-5.4`).
### Групи інструментів (скорочення)
Політики інструментів (глобальні, для агента, для sandbox) підтримують записи `group:*`, які розгортаються в кілька інструментів:
Політики інструментів (глобальні, агентські, sandbox) підтримують записи `group:*`, які розгортаються в кілька інструментів:
```json5
{
@ -94,7 +94,8 @@ Sandboxing керується через `agents.defaults.sandbox.mode`:
Доступні групи:
- `group:runtime`: `exec`, `process`, `code_execution` (`bash` приймається як псевдонім для `exec`)
- `group:runtime`: `exec`, `process`, `code_execution` (`bash` також приймається як
псевдонім для `exec`)
- `group:fs`: `read`, `write`, `edit`, `apply_patch`
- `group:sessions`: `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`, `sessions_yield`, `subagents`, `session_status`
- `group:memory`: `memory_search`, `memory_get`
@ -105,43 +106,43 @@ Sandboxing керується через `agents.defaults.sandbox.mode`:
- `group:nodes`: `nodes`
- `group:agents`: `agents_list`
- `group:media`: `image`, `image_generate`, `video_generate`, `tts`
- `group:openclaw`: усі вбудовані інструменти OpenClaw (без provider plugins)
- `group:openclaw`: усі вбудовані інструменти OpenClaw (не включає Plugin провайдерів)
## Elevated: механізм "запустити на хості" лише для exec
## Elevated: exec-only «запуск на хості»
Elevated **не** надає додаткових інструментів; він впливає лише на `exec`.
- Якщо ви в sandbox, `/elevated on` (або `exec` з `elevated: true`) запускається поза sandbox (при цьому підтвердження можуть усе ще застосовуватися).
- Використовуйте `/elevated full`, щоб пропустити підтвердження exec для сесії.
- Якщо ви вже працюєте напряму, elevated фактично нічого не змінює (але все одно керується механізмами доступу).
- Elevated **не** обмежується Skills і **не** перевизначає allow/deny інструментів.
- Elevated не надає довільних міжхостових перевизначень із `host=auto`; він дотримується звичайних правил exec target і зберігає `node` лише тоді, коли налаштований/сесійний target уже дорівнює `node`.
- `/exec` — це окремий механізм від elevated. Він лише налаштовує типові параметри exec для сесії для авторизованих відправників.
- Якщо ви в sandbox, `/elevated on` (або `exec` з `elevated: true`) запускає виконання поза sandbox (схвалення все одно можуть застосовуватися).
- Використовуйте `/elevated full`, щоб пропустити схвалення exec для сесії.
- Якщо ви вже працюєте напряму, elevated фактично нічого не змінює (але все одно проходить через шлюзи).
- Elevated **не** має області дії Skills і **не** перевизначає правила allow/deny для інструментів.
- Elevated не надає довільних міжхостових перевизначень із `host=auto`; він дотримується звичайних правил цілі exec і лише зберігає `node`, якщо налаштована/сесійна ціль уже встановлена як `node`.
- `/exec` — це окремий механізм від elevated. Він лише коригує стандартні параметри exec для сесії для авторизованих відправників.
Механізми доступу:
Шлюзи:
- Увімкнення: `tools.elevated.enabled` (і, за потреби, `agents.list[].tools.elevated.enabled`)
- Allowlist відправників: `tools.elevated.allowFrom.<provider>` (і, за потреби, `agents.list[].tools.elevated.allowFrom.<provider>`)
- Списки дозволених відправників: `tools.elevated.allowFrom.<provider>` (і, за потреби, `agents.list[].tools.elevated.allowFrom.<provider>`)
Див. [Elevated Mode](/tools/elevated).
Див. [Elevated Mode](/uk/tools/elevated).
## Типові виправлення "sandbox jail"
## Типові виправлення «sandbox jail»
### "Tool X blocked by sandbox tool policy"
### «Інструмент X заблоковано політикою інструментів sandbox»
Ключі fix-it (виберіть один):
Ключі для виправлення (виберіть один):
- Вимкнути sandbox: `agents.defaults.sandbox.mode=off` (або для конкретного агента `agents.list[].sandbox.mode=off`)
- Вимкнути sandbox: `agents.defaults.sandbox.mode=off` (або для окремого агента `agents.list[].sandbox.mode=off`)
- Дозволити інструмент усередині sandbox:
- прибрати його з `tools.sandbox.tools.deny` (або для конкретного агента `agents.list[].tools.sandbox.tools.deny`)
- або додати його до `tools.sandbox.tools.allow` (або до allow для агента)
- видалити його з `tools.sandbox.tools.deny` (або для окремого агента `agents.list[].tools.sandbox.tools.deny`)
- або додати його до `tools.sandbox.tools.allow` (або до allow для окремого агента)
### "I thought this was main, why is it sandboxed?"
### «Я думав, що це main, чому воно в sandbox?»
У режимі `"non-main"` ключі group/channel е_ є main. Використовуйте ключ main session (його показує `sandbox explain`) або змініть режим на `"off"`.
У режимі `"non-main"` ключі груп/каналів е_ є main. Використовуйте ключ main-сесії (показується через `sandbox explain`) або перемкніть режим на `"off"`.
## Див. також
- [Sandboxing](/gateway/sandboxing) -- повний довідник із sandbox (режими, scope, backend, images)
- [Multi-Agent Sandbox & Tools](/tools/multi-agent-sandbox-tools) -- перевизначення для кожного агента окремо та пріоритетність
- [Elevated Mode](/tools/elevated)
- [Sandboxing](/uk/gateway/sandboxing) -- повний довідник із sandbox (режими, області, бекенди, образи)
- [Multi-Agent Sandbox & Tools](/uk/tools/multi-agent-sandbox-tools) -- перевизначення для окремих агентів і пріоритетність
- [Elevated Mode](/uk/tools/elevated)

View File

@ -1,104 +1,107 @@
---
read_when: You want a dedicated explanation of sandboxing or need to tune agents.defaults.sandbox.
status: active
summary: 'Як працює ізоляція OpenClaw: режими, області дії, доступ до робочого простору та зображення'
title: Ізоляція
summary: 'Як працює пісочниця OpenClaw: режими, області дії, доступ до робочого простору та зображення'
title: Пісочниця
x-i18n:
generated_at: "2026-04-14T01:21:00Z"
generated_at: "2026-04-20T18:29:25Z"
model: gpt-5.4
provider: openai
source_hash: 2573d0d7462f63a68eb1750e5432211522ff5b42989a17379d3e188468bbce52
source_hash: 35405c103f37f7f7247462ed5bc54a4b0d2a19ca2a373cf10f7f231a62c2c7c4
source_path: gateway/sandboxing.md
workflow: 15
---
# Ізоляція
# Пісочниця
OpenClaw може запускати **інструменти всередині бекендів ізоляції**, щоб зменшити радіус ураження.
OpenClaw може запускати **інструменти всередині бекендів пісочниці**, щоб зменшити радіус ураження.
Це **необов’язково** і керується конфігурацією (`agents.defaults.sandbox` або
`agents.list[].sandbox`). Якщо ізоляцію вимкнено, інструменти працюють на хості.
Gateway залишається на хості; виконання інструментів відбувається в ізольованому середовищі ізоляції,
коли цю функцію ввімкнено.
`agents.list[].sandbox`). Якщо пісочницю вимкнено, інструменти запускаються на хості.
Gateway залишається на хості; виконання інструментів відбувається в ізольованій пісочниці,
коли її ввімкнено.
Це не є ідеальною межею безпеки, але суттєво обмежує доступ до файлової системи
та процесів, коли модель робить щось нерозумне.
та процесів, коли модель робить щось необачне.
## Що ізолюється
## Що поміщається в пісочницю
- Виконання інструментів (`exec`, `read`, `write`, `edit`, `apply_patch`, `process` тощо).
- Необов’язковий браузер в ізоляції (`agents.defaults.sandbox.browser`).
- За замовчуванням браузер в ізоляції запускається автоматично (щоб CDP був доступний), коли він потрібен інструменту браузера.
- Необов’язковий браузер у пісочниці (`agents.defaults.sandbox.browser`).
- За замовчуванням браузер у пісочниці запускається автоматично (щоб CDP був доступний), коли він потрібен інструменту браузера.
Налаштовується через `agents.defaults.sandbox.browser.autoStart` і `agents.defaults.sandbox.browser.autoStartTimeoutMs`.
- За замовчуванням контейнери браузера в ізоляції використовують виділену мережу Docker (`openclaw-sandbox-browser`) замість глобальної мережі `bridge`.
- За замовчуванням контейнери браузера в пісочниці використовують виділену мережу Docker (`openclaw-sandbox-browser`) замість глобальної мережі `bridge`.
Налаштовується через `agents.defaults.sandbox.browser.network`.
- Необов’язковий параметр `agents.defaults.sandbox.browser.cdpSourceRange` обмежує вхідний доступ до CDP на межі контейнера за допомогою списку дозволених CIDR (наприклад, `172.21.0.1/32`).
- Доступ спостерігача noVNC за замовчуванням захищено паролем; OpenClaw генерує короткочасну URL-адресу з токеном, яка відкриває локальну bootstrap-сторінку і запускає noVNC з паролем у фрагменті URL (а не в журналах запитів/заголовків).
- `agents.defaults.sandbox.browser.allowHostControl` дозволяє сеансам в ізоляції явно звертатися до браузера хоста.
- Необов’язкові списки дозволів контролюють `target: "custom"`: `allowedControlUrls`, `allowedControlHosts`, `allowedControlPorts`.
- Доступ спостерігача noVNC за замовчуванням захищений паролем; OpenClaw генерує короткочасний URL із токеном, який віддає локальну bootstrap-сторінку та відкриває noVNC з паролем у фрагменті URL (а не в логах query/header).
- `agents.defaults.sandbox.browser.allowHostControl` дозволяє сесіям у пісочниці явно націлюватися на браузер хоста.
- Необов’язкові списки дозволених значень обмежують `target: "custom"`: `allowedControlUrls`, `allowedControlHosts`, `allowedControlPorts`.
Не ізолюються:
Не поміщається в пісочницю:
- Сам процес Gateway.
- Будь-який інструмент, якому явно дозволено працювати поза ізоляцією (наприклад, `tools.elevated`).
- **Elevated exec обходить ізоляцію і використовує налаштований шлях виходу (`gateway` за замовчуванням або `node`, коли ціллю exec є `node`).**
- Якщо ізоляцію вимкнено, `tools.elevated` не змінює виконання (воно й так уже на хості). Див. [Режим Elevated](/uk/tools/elevated).
- Будь-який інструмент, якому явно дозволено працювати поза пісочницею (наприклад, `tools.elevated`).
- **Elevated exec обходить пісочницю і використовує налаштований шлях виходу (`gateway` за замовчуванням або `node`, коли ціль exec — `node`).**
- Якщо пісочницю вимкнено, `tools.elevated` не змінює виконання (воно й так на хості). Див. [Режим Elevated](/uk/tools/elevated).
## Режими
`agents.defaults.sandbox.mode` керує **коли** використовується ізоляція:
`agents.defaults.sandbox.mode` керує **тим, коли** використовується пісочниця:
- `"off"`: без ізоляції.
- `"non-main"`: ізолюються лише **неосновні** сеанси (типовий варіант, якщо ви хочете, щоб звичайні чати працювали на хості).
- `"all"`: кожен сеанс працює в ізоляції.
Примітка: `"non-main"` визначається за `session.mainKey` (типово `"main"`), а не за id агента.
Сеанси груп/каналів використовують власні ключі, тож вони вважаються неосновними й будуть ізольовані.
- `"off"`: без пісочниці.
- `"non-main"`: пісочниця лише для **не-main** сесій (типово, якщо ви хочете, щоб звичайні чати працювали на хості).
- `"all"`: кожна сесія запускається в пісочниці.
Примітка: `"non-main"` базується на `session.mainKey` (типово `"main"`), а не на id агента.
Сесії груп/каналів мають власні ключі, тому вважаються не-main і будуть у пісочниці.
## Область дії
`agents.defaults.sandbox.scope` керує **скільки контейнерів** створюється:
`agents.defaults.sandbox.scope` керує **тим, скільки контейнерів** створюється:
- `"agent"` (типово): один контейнер на агента.
- `"session"`: один контейнер на сеанс.
- `"shared"`: один контейнер, спільний для всіх сеансів в ізоляції.
- `"session"`: один контейнер на сесію.
- `"shared"`: один контейнер, спільний для всіх сесій у пісочниці.
## Бекенд
`agents.defaults.sandbox.backend` керує **яке середовище виконання** надає ізоляцію:
`agents.defaults.sandbox.backend` керує **тим, яке середовище виконання** надає пісочницю:
- `"docker"` (типово): локальне середовище ізоляції на основі Docker.
- `"ssh"`: універсальне віддалене середовище ізоляції на основі SSH.
- `"openshell"`: середовище ізоляції на основі OpenShell.
- `"docker"` (типово, коли пісочницю ввімкнено): локальне середовище пісочниці на основі Docker.
- `"ssh"`: універсальне віддалене середовище пісочниці на основі SSH.
- `"openshell"`: середовище пісочниці на основі OpenShell.
Конфігурація, специфічна для SSH, розміщується в `agents.defaults.sandbox.ssh`.
Конфігурація, специфічна для OpenShell, розміщується в `plugins.entries.openshell.config`.
Конфігурація, специфічна для SSH, розташована в `agents.defaults.sandbox.ssh`.
Конфігурація, специфічна для OpenShell, розташована в `plugins.entries.openshell.config`.
### Вибір бекенда
| | Docker | SSH | OpenShell |
| ------------------- | -------------------------------- | ------------------------------ | ---------------------------------------------------------- |
| **Де виконується** | Локальний контейнер | Будь-який хост, доступний по SSH | Кероване OpenShell середовище ізоляції |
| **Налаштування** | `scripts/sandbox-setup.sh` | SSH-ключ + цільовий хост | Увімкнений Plugin OpenShell |
| **Модель робочого простору** | Bind mount або копіювання | Віддалений як канонічний (одноразове початкове заповнення) | `mirror` або `remote` |
| **Керування мережею** | `docker.network` (типово: none) | Залежить від віддаленого хоста | Залежить від OpenShell |
| **Ізоляція браузера** | Підтримується | Не підтримується | Ще не підтримується |
| **Bind mounts** | `docker.binds` | N/A | N/A |
| **Найкраще підходить для** | Локальної розробки, повної ізоляції | Винесення на віддалену машину | Керованих віддалених середовищ ізоляції з необов’язковою двосторонньою синхронізацією |
| **Де працює** | Локальний контейнер | Будь-який хост, доступний по SSH | Пісочниця під керуванням OpenShell |
| **Налаштування** | `scripts/sandbox-setup.sh` | Ключ SSH + цільовий хост | Увімкнений Plugin OpenShell |
| **Модель workspace** | Bind-mount або копіювання | Віддалений canonical (одноразове початкове заповнення) | `mirror` або `remote` |
| **Керування мережею** | `docker.network` (типово: none) | Залежить від віддаленого хоста | Залежить від OpenShell |
| **Браузер у пісочниці** | Підтримується | Не підтримується | Ще не підтримується |
| **Bind mounts** | `docker.binds` | Н/Д | Н |
| **Найкраще для** | Локальна розробка, повна ізоляція | Вивантаження на віддалену машину | Керовані віддалені пісочниці з необов’язковою двосторонньою синхронізацією |
### Бекенд Docker
Бекенд Docker є типовим середовищем виконання: він локально запускає інструменти та браузери в ізоляції через сокет демона Docker (`/var/run/docker.sock`). Ізоляція контейнера визначається просторами імен Docker.
Пісочниця за замовчуванням вимкнена. Якщо ви вмикаєте пісочницю і не вибираєте
бекенд, OpenClaw використовує бекенд Docker. Він виконує інструменти й браузери
в пісочниці локально через сокет демона Docker (`/var/run/docker.sock`). Ізоляція
контейнера пісочниці визначається просторами імен Docker.
**Обмеження Docker-out-of-Docker (DooD)**:
Якщо ви розгортаєте сам Gateway OpenClaw як Docker-контейнер, він оркеструє сусідні контейнери ізоляції через Docker-сокет хоста (DooD). Це створює конкретне обмеження щодо відображення шляхів:
Якщо ви розгортаєте сам Gateway OpenClaw як контейнер Docker, він оркеструє сусідні контейнери пісочниці через Docker-сокет хоста (DooD). Це створює конкретне обмеження на зіставлення шляхів:
- **Конфігурація має використовувати шляхи хоста**: конфігурація `workspace` у `openclaw.json` ОБОВ’ЯЗКОВО повинна містити **абсолютний шлях хоста** (наприклад, `/home/user/.openclaw/workspaces`), а не внутрішній шлях контейнера Gateway. Коли OpenClaw просить демон Docker створити середовище ізоляції, демон інтерпретує шляхи відносно простору імен ОС хоста, а не простору імен Gateway.
- **Паритет FS Bridge (ідентичне відображення томів)**: нативний процес Gateway OpenClaw також записує heartbeat- та bridge-файли в каталог `workspace`. Оскільки Gateway інтерпретує той самий рядок (шлях хоста) всередині власного контейнеризованого середовища, розгортання Gateway ОБОВ’ЯЗКОВО повинно містити ідентичне відображення томів, яке нативно зв’язує простір імен хоста (`-v /home/user/.openclaw:/home/user/.openclaw`).
- **Конфігурація вимагає шляхів хоста**: конфігурація `workspace` у `openclaw.json` МАЄ містити **абсолютний шлях хоста** (наприклад, `/home/user/.openclaw/workspaces`), а не внутрішній шлях контейнера Gateway. Коли OpenClaw просить демон Docker запустити пісочницю, демон оцінює шляхи відносно простору імен ОС хоста, а не простору імен Gateway.
- **Паритет FS Bridge (ідентичне зіставлення томів)**: нативний процес Gateway OpenClaw також записує файли Heartbeat і bridge до каталогу `workspace`. Оскільки Gateway оцінює той самий рядок (шлях хоста) зі свого контейнеризованого середовища, розгортання Gateway МАЄ включати ідентичне зіставлення томів, яке нативно пов’язує простір імен хоста (`-v /home/user/.openclaw:/home/user/.openclaw`).
Якщо ви відображаєте шляхи внутрішньо без абсолютного паритету з хостом, OpenClaw нативно викидає помилку дозволів `EACCES` при спробі записати свій heartbeat у контейнерному середовищі, оскільки повністю кваліфікований рядок шляху нативно не існує.
Якщо ви зіставляєте шляхи внутрішньо без абсолютного паритету з хостом, OpenClaw нативно викидає помилку дозволів `EACCES`, намагаючись записати свій Heartbeat усередині контейнеризованого середовища, тому що повний рядок шляху нативно не існує.
### Бекенд SSH
Використовуйте `backend: "ssh"`, якщо ви хочете, щоб OpenClaw ізолював `exec`, файлові інструменти та читання медіа
Використовуйте `backend: "ssh"`, якщо хочете, щоб OpenClaw ізолював `exec`, файлові інструменти та читання медіа
на довільній машині, доступній по SSH.
```json5
@ -118,7 +121,7 @@ Gateway залишається на хості; виконання інстру
identityFile: "~/.ssh/id_ed25519",
certificateFile: "~/.ssh/id_ed25519-cert.pub",
knownHostsFile: "~/.ssh/known_hosts",
// Або використовуйте SecretRefs / вбудований вміст замість локальних файлів:
// Or use SecretRefs / inline contents instead of local files:
// identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" },
// certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" },
// knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" },
@ -131,36 +134,36 @@ Gateway залишається на хості; виконання інстру
Як це працює:
- OpenClaw створює віддалений кореневий каталог для кожної області дії в `sandbox.ssh.workspaceRoot`.
- При першому використанні після створення або повторного створення OpenClaw один раз заповнює цей віддалений робочий простір із локального.
- Після цього `exec`, `read`, `write`, `edit`, `apply_patch`, читання медіа в prompt і підготовка вхідних медіа виконуються безпосередньо у віддаленому робочому просторі через SSH.
- OpenClaw не синхронізує віддалені зміни назад у локальний робочий простір автоматично.
- OpenClaw створює віддалений корінь для кожної області дії в `sandbox.ssh.workspaceRoot`.
- Під час першого використання після створення або повторного створення OpenClaw один раз заповнює цей віддалений workspace з локального workspace.
- Після цього `exec`, `read`, `write`, `edit`, `apply_patch`, читання медіа з prompt і staging вхідних медіа працюють безпосередньо з віддаленим workspace через SSH.
- OpenClaw не синхронізує віддалені зміни назад у локальний workspace автоматично.
Матеріали автентифікації:
- `identityFile`, `certificateFile`, `knownHostsFile`: використовують наявні локальні файли і передають їх через конфігурацію OpenSSH.
- `identityData`, `certificateData`, `knownHostsData`: використовують вбудовані рядки або SecretRefs. OpenClaw розв’язує їх через звичайний runtime snapshot секретів, записує у тимчасові файли з правами `0600` і видаляє, коли SSH-сеанс завершується.
- Якщо для одного й того самого елемента задано і `*File`, і `*Data`, для цього SSH-сеансу пріоритет має `*Data`.
- `identityFile`, `certificateFile`, `knownHostsFile`: використовують наявні локальні файли та передають їх через конфігурацію OpenSSH.
- `identityData`, `certificateData`, `knownHostsData`: використовують вбудовані рядки або SecretRefs. OpenClaw розв’язує їх через звичайний runtime snapshot секретів, записує у тимчасові файли з правами `0600` і видаляє, коли SSH-сесія завершується.
- Якщо для одного й того самого елемента задано і `*File`, і `*Data`, то для цієї SSH-сесії пріоритет має `*Data`.
Це модель, де **канонічним є віддалений стан**. Віддалений робочий простір SSH стає реальним станом ізоляції після початкового заповнення.
Це модель **remote-canonical**. Віддалений workspace SSH стає реальним станом пісочниці після початкового заповнення.
Важливі наслідки:
- Локальні зміни на хості, зроблені поза OpenClaw після етапу початкового заповнення, не будуть видимі віддалено, доки ви не створите середовище ізоляції заново.
- `openclaw sandbox recreate` видаляє віддалений кореневий каталог для відповідної області дії та знову виконує початкове заповнення з локального джерела під час наступного використання.
- Ізоляція браузера не підтримується в бекенді SSH.
- Локальні редагування на хості, зроблені поза OpenClaw після етапу початкового заповнення, не будуть видимі віддалено, доки ви не створите пісочницю заново.
- `openclaw sandbox recreate` видаляє віддалений корінь для кожної області дії та знову заповнює його з локального під час наступного використання.
- Браузер у пісочниці не підтримується в бекенді SSH.
- Налаштування `sandbox.docker.*` не застосовуються до бекенда SSH.
### Бекенд OpenShell
Використовуйте `backend: "openshell"`, якщо ви хочете, щоб OpenClaw ізолював інструменти в
керованому OpenShell віддаленому середовищі. Повний посібник із налаштування, довідник
з конфігурації та порівняння режимів робочого простору дивіться на
окремій [сторінці OpenShell](/uk/gateway/openshell).
Використовуйте `backend: "openshell"`, якщо хочете, щоб OpenClaw ізолював інструменти у
віддаленому середовищі під керуванням OpenShell. Повний посібник із налаштування,
довідник з конфігурації та порівняння режимів workspace дивіться на окремій
[сторінці OpenShell](/uk/gateway/openshell).
OpenShell повторно використовує той самий базовий транспорт SSH і той самий віддалений міст файлової системи, що й
універсальний бекенд SSH, і додає життєвий цикл, специфічний для OpenShell
(`sandbox create/get/delete`, `sandbox ssh-config`), а також необов’язковий режим робочого простору `mirror`.
OpenShell повторно використовує той самий базовий транспорт SSH і міст віддаленої файлової системи, що й
універсальний бекенд SSH, і додає життєвий цикл, специфічний для OpenShell,
(`sandbox create/get/delete`, `sandbox ssh-config`), а також необов’язковий режим workspace `mirror`.
```json5
{
@ -192,40 +195,40 @@ OpenShell повторно використовує той самий базов
Режими OpenShell:
- `mirror` (типово): локальний робочий простір залишається канонічним. OpenClaw синхронізує локальні файли в OpenShell перед exec і синхронізує віддалений робочий простір назад після exec.
- `remote`: робочий простір OpenShell стає канонічним після створення середовища ізоляції. OpenClaw один раз заповнює віддалений робочий простір із локального, а потім файлові інструменти та exec працюють безпосередньо з віддаленим середовищем ізоляції без синхронізації змін назад.
- `mirror` (типово): локальний workspace залишається canonical. OpenClaw синхронізує локальні файли в OpenShell перед exec і синхронізує віддалений workspace назад після exec.
- `remote`: workspace OpenShell стає canonical після створення пісочниці. OpenClaw один раз заповнює віддалений workspace з локального, після чого файлові інструменти та exec працюють безпосередньо з віддаленою пісочницею без синхронізації змін назад.
Деталі віддаленого транспорту:
- OpenClaw запитує в OpenShell конфігурацію SSH, специфічну для середовища ізоляції, через `openshell sandbox ssh-config <name>`.
- Core записує цю конфігурацію SSH у тимчасовий файл, відкриває SSH-сеанс і повторно використовує той самий віддалений міст файлової системи, що й для `backend: "ssh"`.
- Лише в режимі `mirror` життєвий цикл відрізняється: синхронізація з локального на віддалений простір перед exec, а потім синхронізація назад.
- OpenClaw запитує в OpenShell SSH-конфігурацію, специфічну для пісочниці, через `openshell sandbox ssh-config <name>`.
- Core записує цю SSH-конфігурацію у тимчасовий файл, відкриває SSH-сесію та повторно використовує той самий міст віддаленої файлової системи, що використовується для `backend: "ssh"`.
- Лише в режимі `mirror` життєвий цикл відрізняється: синхронізація з локального на віддалений перед exec, а потім синхронізація назад після exec.
Поточні обмеження OpenShell:
- браузер в ізоляції ще не підтримується
- браузер у пісочниці ще не підтримується
- `sandbox.docker.binds` не підтримується в бекенді OpenShell
- специфічні для Docker параметри середовища виконання в `sandbox.docker.*` як і раніше застосовуються лише до бекенда Docker
- специфічні для Docker параметри runtime в `sandbox.docker.*`, як і раніше, застосовуються лише до бекенда Docker
#### Режими робочого простору
#### Режими workspace
OpenShell має дві моделі робочого простору. Саме ця частина найважливіша на практиці.
OpenShell має дві моделі workspace. На практиці це найважливіша частина.
##### `mirror`
Використовуйте `plugins.entries.openshell.config.mode: "mirror"`, якщо ви хочете, щоб **локальний робочий простір залишався канонічним**.
Використовуйте `plugins.entries.openshell.config.mode: "mirror"`, якщо хочете, щоб **локальний workspace залишався canonical**.
Поведінка:
- Перед `exec` OpenClaw синхронізує локальний робочий простір у середовище OpenShell.
- Після `exec` OpenClaw синхронізує віддалений робочий простір назад у локальний.
- Файлові інструменти все одно працюють через міст ізоляції, але локальний робочий простір залишається джерелом істини між ходами.
- Перед `exec` OpenClaw синхронізує локальний workspace у пісочницю OpenShell.
- Після `exec` OpenClaw синхронізує віддалений workspace назад у локальний workspace.
- Файлові інструменти все ще працюють через міст пісочниці, але локальний workspace залишається джерелом істини між ходами.
Використовуйте це, коли:
- ви редагуєте файли локально поза OpenClaw і хочете, щоб ці зміни автоматично з’являлися в ізоляції
- ви хочете, щоб середовище OpenShell поводилося максимально схоже на бекенд Docker
- ви хочете, щоб робочий простір хоста відображав записи із середовища ізоляції після кожного ходу exec
- ви редагуєте файли локально поза OpenClaw і хочете, щоб ці зміни автоматично з’являлися в пісочниці
- ви хочете, щоб пісочниця OpenShell поводилася максимально схоже на бекенд Docker
- ви хочете, щоб workspace хоста відображав записи пісочниці після кожного ходу exec
Компроміс:
@ -233,65 +236,65 @@ OpenShell має дві моделі робочого простору. Саме
##### `remote`
Використовуйте `plugins.entries.openshell.config.mode: "remote"`, якщо ви хочете, щоб **робочий простір OpenShell став канонічним**.
Використовуйте `plugins.entries.openshell.config.mode: "remote"`, якщо хочете, щоб **workspace OpenShell став canonical**.
Поведінка:
- Коли середовище ізоляції створюється вперше, OpenClaw один раз заповнює віддалений робочий простір із локального.
- Після цього `exec`, `read`, `write`, `edit` і `apply_patch` працюють безпосередньо з віддаленим робочим простором OpenShell.
- OpenClaw **не** синхронізує віддалені зміни назад у локальний робочий простір після exec.
- Читання медіа під час prompt і далі працює, оскільки файлові та медіа-інструменти читають через міст ізоляції, а не покладаються на локальний шлях хоста.
- Транспорт — це SSH у середовище OpenShell, яке повертає `openshell sandbox ssh-config`.
- Коли пісочниця створюється вперше, OpenClaw один раз заповнює віддалений workspace з локального workspace.
- Після цього `exec`, `read`, `write`, `edit` і `apply_patch` працюють безпосередньо з віддаленим workspace OpenShell.
- OpenClaw **не** синхронізує віддалені зміни назад у локальний workspace після exec.
- Читання медіа під час prompt, як і раніше, працює, тому що файлові та медіа-інструменти читають через міст пісочниці, а не припускають наявність локального шляху хоста.
- Транспорт — це SSH у пісочницю OpenShell, яку повертає `openshell sandbox ssh-config`.
Важливі наслідки:
- Якщо ви редагуєте файли на хості поза OpenClaw після етапу початкового заповнення, віддалене середовище ізоляції **не** побачить ці зміни автоматично.
- Якщо середовище ізоляції створюється заново, віддалений робочий простір знову заповнюється з локального робочого простору.
- За `scope: "agent"` або `scope: "shared"` цей віддалений робочий простір є спільним у межах тієї самої області дії.
- Якщо ви редагуєте файли на хості поза OpenClaw після етапу початкового заповнення, віддалена пісочниця **не** побачить ці зміни автоматично.
- Якщо пісочницю створити заново, віддалений workspace знову заповнюється з локального workspace.
- За `scope: "agent"` або `scope: "shared"` цей віддалений workspace спільно використовується в межах тієї самої області дії.
Використовуйте це, коли:
- середовище ізоляції має переважно існувати на віддаленому боці OpenShell
- ви хочете менші накладні витрати на синхронізацію на кожному ході
- ви не хочете, щоб локальні зміни на хості непомітно перезаписували віддалений стан середовища ізоляції
- пісочниця має переважно жити на віддаленому боці OpenShell
- ви хочете менші накладні витрати на синхронізацію в кожному ході
- ви не хочете, щоб локальні редагування на хості непомітно перезаписували стан віддаленої пісочниці
Виберіть `mirror`, якщо сприймаєте середовище ізоляції як тимчасове середовище виконання.
Виберіть `remote`, якщо сприймаєте середовище ізоляції як реальний робочий простір.
Вибирайте `mirror`, якщо ви сприймаєте пісочницю як тимчасове середовище виконання.
Вибирайте `remote`, якщо ви сприймаєте пісочницю як реальний workspace.
#### Життєвий цикл OpenShell
Середовища ізоляції OpenShell і далі керуються через звичайний життєвий цикл ізоляції:
Пісочниці OpenShell, як і раніше, керуються через звичайний життєвий цикл пісочниці:
- `openclaw sandbox list` показує як середовища виконання OpenShell, так і середовища виконання Docker
- `openclaw sandbox recreate` видаляє поточне середовище виконання і дозволяє OpenClaw створити його заново під час наступного використання
- `openclaw sandbox list` показує середовища виконання OpenShell так само, як і середовища Docker
- `openclaw sandbox recreate` видаляє поточне середовище виконання і дозволяє OpenClaw створити його знову під час наступного використання
- логіка очищення теж враховує бекенд
Для режиму `remote` повторне створення особливо важливе:
- повторне створення видаляє канонічний віддалений робочий простір для цієї області дії
- наступне використання створює новий віддалений робочий простір із локального робочого простору
- повторне створення видаляє canonical віддалений workspace для цієї області дії
- наступне використання заповнює новий віддалений workspace з локального workspace
Для режиму `mirror` повторне створення переважно скидає віддалене середовище виконання,
оскільки локальний робочий простір однаково залишається канонічним.
Для режиму `mirror` повторне створення головним чином скидає віддалене середовище виконання,
оскільки локальний workspace у будь-якому разі залишається canonical.
## Доступ до робочого простору
## Доступ до workspace
`agents.defaults.sandbox.workspaceAccess` керує **що може бачити середовище ізоляції**:
`agents.defaults.sandbox.workspaceAccess` керує **тим, що може бачити пісочниця**:
- `"none"` (типово): інструменти бачать робочий простір ізоляції в `~/.openclaw/sandboxes`.
- `"ro"`: монтує робочий простір агента лише для читання в `/agent` (вимикає `write`/`edit`/`apply_patch`).
- `"rw"`: монтує робочий простір агента для читання й запису в `/workspace`.
- `"none"` (типово): інструменти бачать workspace пісочниці в `~/.openclaw/sandboxes`.
- `"ro"`: монтує workspace агента лише для читання в `/agent` (вимикає `write`/`edit`/`apply_patch`).
- `"rw"`: монтує workspace агента для читання і запису в `/workspace`.
З бекендом OpenShell:
- режим `mirror` і далі використовує локальний робочий простір як канонічне джерело між ходами exec
- режим `remote` використовує віддалений робочий простір OpenShell як канонічне джерело після початкового заповнення
- `workspaceAccess: "ro"` і `"none"` і далі так само обмежують можливість запису
- режим `mirror`, як і раніше, використовує локальний workspace як canonical джерело між ходами exec
- режим `remote` використовує віддалений workspace OpenShell як canonical джерело після початкового заповнення
- `workspaceAccess: "ro"` і `"none"` однаково обмежують запис
Вхідні медіафайли копіюються в активний робочий простір ізоляції (`media/inbound/*`).
Примітка щодо Skills: інструмент `read` прив’язаний до кореня ізоляції. За `workspaceAccess: "none"`
OpenClaw віддзеркалює придатні Skills у робочий простір ізоляції (`.../skills`), щоб
їх можна було читати. За `"rw"` Skills робочого простору доступні для читання з
Вхідні медіа копіюються в активний workspace пісочниці (`media/inbound/*`).
Примітка щодо Skills: інструмент `read` прив’язаний до кореня пісочниці. За `workspaceAccess: "none"`
OpenClaw віддзеркалює відповідні Skills у workspace пісочниці (`.../skills`), щоб
їх можна було читати. За `"rw"` Skills workspace доступні для читання з
`/workspace/skills`.
## Власні bind mounts
@ -299,14 +302,14 @@ OpenClaw віддзеркалює придатні Skills у робочий пр
`agents.defaults.sandbox.docker.binds` монтує додаткові каталоги хоста в контейнер.
Формат: `host:container:mode` (наприклад, `"/home/user/source:/source:rw"`).
Глобальні bind mounts і bind mounts на рівні агента **об’єднуються** (а не замінюються). За `scope: "shared"` bind mounts на рівні агента ігноруються.
Глобальні та поагентні bind mounts **об’єднуються** (а не замінюються). За `scope: "shared"` bind mounts на рівні агента ігноруються.
`agents.defaults.sandbox.browser.binds` монтує додаткові каталоги хоста лише в контейнер **браузера в ізоляції**.
`agents.defaults.sandbox.browser.binds` монтує додаткові каталоги хоста лише в контейнер **браузера пісочниці**.
- Якщо параметр задано (включно з `[]`), він замінює `agents.defaults.sandbox.docker.binds` для контейнера браузера.
- Якщо параметр пропущено, контейнер браузера повертається до `agents.defaults.sandbox.docker.binds` (зворотна сумісність).
- Якщо задано (зокрема `[]`), воно замінює `agents.defaults.sandbox.docker.binds` для контейнера браузера.
- Якщо пропущено, контейнер браузера повертається до `agents.defaults.sandbox.docker.binds` (зворотна сумісність).
Приклад (вихідний код тільки для читання + додатковий каталог даних):
Приклад (вихідний код лише для читання + додатковий каталог даних):
```json5
{
@ -334,19 +337,19 @@ OpenClaw віддзеркалює придатні Skills у робочий пр
Примітки щодо безпеки:
- Bind mounts обходять файлову систему ізоляції: вони відкривають шляхи хоста з тим режимом, який ви задаєте (`:ro` або `:rw`).
- Bind mounts обходять файлову систему пісочниці: вони відкривають шляхи хоста з тим режимом, який ви вкажете (`:ro` або `:rw`).
- OpenClaw блокує небезпечні джерела bind mounts (наприклад: `docker.sock`, `/etc`, `/proc`, `/sys`, `/dev` і батьківські монтування, які відкрили б до них доступ).
- OpenClaw також блокує типові корені облікових даних у домашньому каталозі, наприклад `~/.aws`, `~/.cargo`, `~/.config`, `~/.docker`, `~/.gnupg`, `~/.netrc`, `~/.npm` і `~/.ssh`.
- Перевірка bind mounts — це не просто зіставлення рядків. OpenClaw нормалізує шлях джерела, потім знову розв’язує його через найглибшого наявного предка, а вже потім повторно перевіряє заблоковані шляхи й дозволені корені.
- Це означає, що вихід за межі через батьківський симлінк усе одно безпечно блокується, навіть якщо кінцевий елемент іще не існує. Приклад: `/workspace/run-link/new-file` усе одно розв’язується як `/var/run/...`, якщо `run-link` вказує туди.
- Дозволені корені джерел канонікалізуються так само, тож шлях, який лише виглядає таким, що входить до списку дозволених до розв’язання симлінків, усе одно буде відхилено як `outside allowed roots`.
- OpenClaw також блокує типові кореневі каталоги облікових даних у домашньому каталозі, такі як `~/.aws`, `~/.cargo`, `~/.config`, `~/.docker`, `~/.gnupg`, `~/.netrc`, `~/.npm` і `~/.ssh`.
- Перевірка bind mounts — це не просто зіставлення рядків. OpenClaw нормалізує шлях джерела, а потім знову розв’язує його через найглибший наявний батьківський елемент перед повторною перевіркою заблокованих шляхів і дозволених коренів.
- Це означає, що виходи через батьківські symlink-и все одно надійно блокуються, навіть якщо кінцевий leaf ще не існує. Приклад: `/workspace/run-link/new-file` усе одно розв’язується як `/var/run/...`, якщо `run-link` вказує туди.
- Дозволені корені джерел канонікалізуються так само, тому шлях, який лише виглядає таким, що входить до allowlist до розв’язання symlink-ів, однаково відхиляється як `outside allowed roots`.
- Чутливі монтування (секрети, SSH-ключі, службові облікові дані) мають бути `:ro`, якщо тільки це не є абсолютно необхідним.
- Поєднуйте з `workspaceAccess: "ro"`, якщо вам потрібен лише доступ на читання до робочого простору; режими bind mounts залишаються незалежними.
- Див. [Ізоляція vs Політика інструментів vs Elevated](/uk/gateway/sandbox-vs-tool-policy-vs-elevated), щоб зрозуміти, як bind mounts взаємодіють із політикою інструментів і elevated exec.
- Поєднуйте з `workspaceAccess: "ro"`, якщо вам потрібен лише доступ на читання до workspace; режими bind mounts залишаються незалежними.
- Див. [Пісочниця vs політика інструментів vs Elevated](/uk/gateway/sandbox-vs-tool-policy-vs-elevated), щоб зрозуміти, як bind mounts взаємодіють із політикою інструментів і elevated exec.
## Зображення + налаштування
## Образи + налаштування
Типове Docker image: `openclaw-sandbox:bookworm-slim`
Типовий образ Docker: `openclaw-sandbox:bookworm-slim`
Зберіть його один раз:
@ -354,31 +357,31 @@ OpenClaw віддзеркалює придатні Skills у робочий пр
scripts/sandbox-setup.sh
```
Примітка: типове image **не** містить Node. Якщо навичці потрібен Node (або
інші середовища виконання), або зберіть власне image, або встановіть усе через
`sandbox.docker.setupCommand` (потрібен вихід у мережу + доступний для запису корінь +
користувач root).
Примітка: типовий образ **не** містить Node. Якщо Skill потребує Node (або
інших runtime), або створіть власний образ, або встановіть їх через
`sandbox.docker.setupCommand` (потребує виходу в мережу + кореневої файлової системи з можливістю запису +
користувача root).
Якщо вам потрібне функціональніше image ізоляції з поширеними інструментами (наприклад
Якщо вам потрібен функціональніший образ пісочниці зі звичними інструментами (наприклад
`curl`, `jq`, `nodejs`, `python3`, `git`), зберіть:
```bash
scripts/sandbox-common-setup.sh
```
Потім задайте `agents.defaults.sandbox.docker.image` значенням
Потім задайте `agents.defaults.sandbox.docker.image` як
`openclaw-sandbox-common:bookworm-slim`.
Image браузера в ізоляції:
Образ браузера в пісочниці:
```bash
scripts/sandbox-browser-setup.sh
```
За замовчуванням Docker-контейнери ізоляції працюють **без мережі**.
Перевизначити це можна через `agents.defaults.sandbox.docker.network`.
За замовчуванням контейнери пісочниці Docker працюють **без мережі**.
Перевизначте це через `agents.defaults.sandbox.docker.network`.
Комплектне image браузера в ізоляції також застосовує консервативні типові параметри запуску Chromium
Вбудований образ браузера для пісочниці також застосовує консервативні типові параметри запуску Chromium
для контейнеризованих навантажень. Поточні типові параметри контейнера включають:
- `--remote-debugging-address=127.0.0.1`
@ -399,72 +402,72 @@ scripts/sandbox-browser-setup.sh
- `--metrics-recording-only`
- `--renderer-process-limit=2`
- `--no-sandbox` і `--disable-setuid-sandbox`, коли ввімкнено `noSandbox`.
- Три прапорці посиленого захисту графіки (`--disable-3d-apis`,
`--disable-software-rasterizer`, `--disable-gpu`) є необов’язковими й корисні,
- Три прапорці посилення графічної безпеки (`--disable-3d-apis`,
`--disable-software-rasterizer`, `--disable-gpu`) є необов’язковими і корисні,
коли контейнери не мають підтримки GPU. Задайте `OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0`,
якщо вашому навантаженню потрібен WebGL або інші 3D/браузерні можливості.
- `--disable-extensions` увімкнено за замовчуванням і його можна вимкнути через
`OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` для сценаріїв, що залежать від розширень.
`OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` для сценаріїв, які залежать від розширень.
- `--renderer-process-limit=2` керується через
`OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>`, де `0` зберігає типовий режим Chromium.
Якщо вам потрібен інший профіль середовища виконання, використовуйте власне image браузера і надайте
власну точку входу. Для локальних (неконтейнерних) профілів Chromium використовуйте
Якщо вам потрібен інший профіль runtime, використовуйте власний образ браузера і надайте
власний entrypoint. Для локальних профілів Chromium (не в контейнері) використовуйте
`browser.extraArgs`, щоб додати додаткові прапорці запуску.
Типові налаштування безпеки:
Типові параметри безпеки:
- `network: "host"` заблоковано.
- `network: "container:<id>"` типово заблоковано (ризик обходу через приєднання до простору імен).
- `network: "container:<id>"` за замовчуванням заблоковано (ризик обходу через приєднання до namespace).
- Аварійний override: `agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true`.
Установлення Docker і контейнеризований gateway описані тут:
[Docker](/uk/install/docker)
Для розгортань gateway у Docker `scripts/docker/setup.sh` може ініціалізувати конфігурацію ізоляції.
Для розгортань Gateway у Docker `scripts/docker/setup.sh` може ініціалізувати конфігурацію пісочниці.
Задайте `OPENCLAW_SANDBOX=1` (або `true`/`yes`/`on`), щоб увімкнути цей шлях. Ви можете
перевизначити розташування сокета через `OPENCLAW_DOCKER_SOCKET`. Повне налаштування й довідник
перевизначити розташування сокета через `OPENCLAW_DOCKER_SOCKET`. Повне налаштування та довідник
зі змінних середовища: [Docker](/uk/install/docker#agent-sandbox).
## setupCommand (одноразове налаштування контейнера)
`setupCommand` запускається **один раз** після створення контейнера ізоляції (не під час кожного запуску).
`setupCommand` запускається **один раз** після створення контейнера пісочниці (не під час кожного запуску).
Він виконується всередині контейнера через `sh -lc`.
Шляхи:
- Глобально: `agents.defaults.sandbox.docker.setupCommand`
- Для окремого агента: `agents.list[].sandbox.docker.setupCommand`
- Для агента: `agents.list[].sandbox.docker.setupCommand`
Поширені пастки:
Типові помилки:
- Типове значення `docker.network``"none"` (без виходу в мережу), тому встановлення пакетів завершуватиметься помилкою.
- `docker.network: "container:<id>"` потребує `dangerouslyAllowContainerNamespaceJoin: true` і призначений лише для аварійного використання.
- `readOnlyRoot: true` забороняє запис; задайте `readOnlyRoot: false` або зберіть власне image.
- Для встановлення пакетів `user` має бути root (не задавайте `user` або задайте `user: "0:0"`).
- Sandbox exec **не** успадковує `process.env` хоста. Використовуйте
`agents.defaults.sandbox.docker.env` (або власне image) для API-ключів навичок.
- `docker.network: "container:<id>"` вимагає `dangerouslyAllowContainerNamespaceJoin: true` і призначене лише для аварійного використання.
- `readOnlyRoot: true` забороняє запис; задайте `readOnlyRoot: false` або створіть власний образ.
- Для встановлення пакетів `user` має бути root (не вказуйте `user` або задайте `user: "0:0"`).
- Sandbox exec **не** успадковує host `process.env`. Використовуйте
`agents.defaults.sandbox.docker.env` (або власний образ) для API-ключів Skills.
## Політика інструментів + шляхи обходу
Політики allow/deny для інструментів усе одно застосовуються раніше за правила ізоляції. Якщо інструмент заборонено
глобально або для конкретного агента, ізоляція його не поверне.
Політики allow/deny для інструментів, як і раніше, застосовуються до правил пісочниці. Якщо інструмент заборонено
глобально або для конкретного агента, пісочниця його не поверне.
`tools.elevated` — це явний шлях обходу, який запускає `exec` поза ізоляцією (`gateway` за замовчуванням або `node`, коли ціллю exec є `node`).
Директиви `/exec` застосовуються лише для авторизованих відправників і зберігаються для кожного сеансу; щоб повністю вимкнути
`exec`, використовуйте заборону в політиці інструментів (див. [Ізоляція vs Політика інструментів vs Elevated](/uk/gateway/sandbox-vs-tool-policy-vs-elevated)).
`tools.elevated` — це явний шлях обходу, який запускає `exec` поза пісочницею (`gateway` за замовчуванням або `node`, коли ціль exec — `node`).
Директиви `/exec` застосовуються лише до авторизованих відправників і зберігаються для кожної сесії; щоб повністю вимкнути
`exec`, використовуйте deny у політиці інструментів (див. [Пісочниця vs політика інструментів vs Elevated](/uk/gateway/sandbox-vs-tool-policy-vs-elevated)).
Налагодження:
- Використовуйте `openclaw sandbox explain`, щоб переглянути фактичний режим ізоляції, політику інструментів і ключі конфігурації для виправлення.
- Див. [Ізоляція vs Політика інструментів vs Elevated](/uk/gateway/sandbox-vs-tool-policy-vs-elevated) для ментальної моделі «чому це заблоковано?».
Тримайте все максимально закритим.
- Використовуйте `openclaw sandbox explain`, щоб переглянути ефективний режим пісочниці, політику інструментів і конфігураційні ключі для виправлення.
- Див. [Пісочниця vs політика інструментів vs Elevated](/uk/gateway/sandbox-vs-tool-policy-vs-elevated) для ментальної моделі “чому це заблоковано?”.
Тримайте все жорстко заблокованим.
## Перевизначення для кількох агентів
Кожен агент може перевизначати ізоляцію й інструменти:
`agents.list[].sandbox` і `agents.list[].tools` (а також `agents.list[].tools.sandbox.tools` для політики інструментів ізоляції).
Див. [Ізоляція та інструменти для кількох агентів](/uk/tools/multi-agent-sandbox-tools) щодо пріоритетів.
Кожен агент може перевизначати пісочницю й інструменти:
`agents.list[].sandbox` і `agents.list[].tools` (а також `agents.list[].tools.sandbox.tools` для політики інструментів у пісочниці).
Докладніше про пріоритети див. у [Пісочниця та інструменти для кількох агентів](/uk/tools/multi-agent-sandbox-tools).
## Мінімальний приклад увімкнення
@ -484,8 +487,8 @@ scripts/sandbox-browser-setup.sh
## Пов’язана документація
- [OpenShell](/uk/gateway/openshell) -- налаштування керованого бекенда ізоляції, режими робочого простору та довідник з конфігурації
- [Конфігурація ізоляції](/uk/gateway/configuration-reference#agentsdefaultssandbox)
- [Ізоляція vs Політика інструментів vs Elevated](/uk/gateway/sandbox-vs-tool-policy-vs-elevated) -- налагодження «чому це заблоковано?»
- [Ізоляція та інструменти для кількох агентів](/uk/tools/multi-agent-sandbox-tools) -- перевизначення для окремих агентів і пріоритети
- [OpenShell](/uk/gateway/openshell) -- налаштування керованого бекенда пісочниці, режими workspace і довідник з конфігурації
- [Конфігурація пісочниці](/uk/gateway/configuration-reference#agentsdefaultssandbox)
- [Пісочниця vs політика інструментів vs Elevated](/uk/gateway/sandbox-vs-tool-policy-vs-elevated) -- налагодження “чому це заблоковано?”
- [Пісочниця та інструменти для кількох агентів](/uk/tools/multi-agent-sandbox-tools) -- перевизначення для окремих агентів і пріоритети
- [Безпека](/uk/gateway/security)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,43 +1,43 @@
---
read_when:
- Вам потрібне автоматизоване розгортання сервера з посиленням безпеки
- Вам потрібне ізольоване firewall-налаштування з доступом через VPN
- Вам потрібне налаштування з ізоляцією брандмауером і доступом через VPN
- Ви розгортаєте на віддалених серверах Debian/Ubuntu
summary: Автоматизоване, захищене встановлення OpenClaw з Ansible, Tailscale VPN та ізоляцією через firewall
summary: Автоматизоване, захищене встановлення OpenClaw за допомогою Ansible, VPN Tailscale та ізоляції брандмауером
title: Ansible
x-i18n:
generated_at: "2026-04-05T18:06:09Z"
generated_at: "2026-04-20T18:29:30Z"
model: gpt-5.4
provider: openai
source_hash: 27433c3b4afa09406052e428be7b1990476067e47ab8abf7145ff9547b37909a
source_hash: 2a23374c971a1f3163dd18c32e553ebaad55b2542c1f25f49bcc9ae464d679e8
source_path: install/ansible.md
workflow: 15
---
# Встановлення через Ansible
# Встановлення Ansible
Розгорніть OpenClaw на production-серверах за допомогою **[openclaw-ansible](https://github.com/openclaw/openclaw-ansible)** — автоматизованого інсталятора з архітектурою, орієнтованою на безпеку.
<Info>
Репозиторій [openclaw-ansible](https://github.com/openclaw/openclaw-ansible) є джерелом істини для розгортання через Ansible. Ця сторінка — короткий огляд.
Репозиторій [openclaw-ansible](https://github.com/openclaw/openclaw-ansible) є основним джерелом правди для розгортання через Ansible. Ця сторінка — короткий огляд.
</Info>
## Передумови
| Вимога | Докладніше |
| Вимога | Деталі |
| ----------- | --------------------------------------------------------- |
| **OS** | Debian 11+ або Ubuntu 20.04+ |
| **Доступ** | Привілеї root або sudo |
| **Мережа** | Підключення до інтернету для встановлення пакетів |
| **ОС** | Debian 11+ або Ubuntu 20.04+ |
| **Доступ** | Права root або sudo |
| **Мережа** | Підключення до інтернету для встановлення пакунків |
| **Ansible** | 2.14+ (встановлюється автоматично скриптом швидкого старту) |
## Що ви отримаєте
- **Безпека, орієнтована на firewall** — UFW + ізоляція Docker (публічно доступні лише SSH + Tailscale)
- **Tailscale VPN** — безпечний віддалений доступ без публічного відкриття сервісів
- **Безпека, орієнтована насамперед на брандмауер** — UFW + ізоляція Docker (доступні лише SSH + Tailscale)
- **VPN Tailscale** — безпечний віддалений доступ без публічного відкриття сервісів
- **Docker** — ізольовані sandbox-контейнери, прив’язки лише до localhost
- **Багаторівневий захист** — 4-рівнева архітектура безпеки
- **Інтеграція з systemd** — автозапуск під час завантаження з посиленням захисту
- **Інтеграція з Systemd** — автоматичний запуск під час завантаження з посиленням безпеки
- **Налаштування однією командою** — повне розгортання за лічені хвилини
## Швидкий старт
@ -50,17 +50,19 @@ curl -fsSL https://raw.githubusercontent.com/openclaw/openclaw-ansible/main/inst
## Що буде встановлено
Ansible playbook встановлює й налаштовує:
Ansible playbook встановлює та налаштовує:
1. **Tailscale** — mesh VPN для безпечного віддаленого доступу
2. **UFW firewall** — лише порти SSH + Tailscale
3. **Docker CE + Compose V2** — для sandbox агентів
4. **Node.js 24 + pnpm** — залежності runtime (Node 22 LTS, наразі `22.14+`, і далі підтримується)
5. **OpenClaw** — на хості, не в контейнері
6. **Сервіс systemd** — автозапуск із посиленням безпеки
2. **Брандмауер UFW** — лише порти SSH + Tailscale
3. **Docker CE + Compose V2** — для стандартного sandbox-бекенда агента
4. **Node.js 24 + pnpm** — залежності середовища виконання (Node 22 LTS, наразі `22.14+`, залишається підтримуваним)
5. **OpenClaw** — на хості, не контейнеризований
6. **Сервіс Systemd** — автозапуск із посиленням безпеки
<Note>
Gateway запускається безпосередньо на хості (не в Docker), але sandbox агентів використовують Docker для ізоляції. Докладніше див. у [Sandboxing](/gateway/sandboxing).
Gateway працює безпосередньо на хості (не в Docker). Sandbox-ізоляція агента є
необов’язковою; цей playbook встановлює Docker, оскільки це стандартний sandbox-
бекенд. Докладніше та про інші бекенди див. у [Sandboxing](/uk/gateway/sandboxing).
</Note>
## Налаштування після встановлення
@ -72,7 +74,7 @@ Gateway запускається безпосередньо на хості (н
```
</Step>
<Step title="Запустіть майстер початкового налаштування">
Скрипт після встановлення проведе вас через налаштування параметрів OpenClaw.
Післяінсталяційний скрипт допоможе вам налаштувати параметри OpenClaw.
</Step>
<Step title="Підключіть провайдерів повідомлень">
Увійдіть у WhatsApp, Telegram, Discord або Signal:
@ -87,7 +89,7 @@ Gateway запускається безпосередньо на хості (н
```
</Step>
<Step title="Підключіться до Tailscale">
Приєднайтеся до своєї VPN mesh для безпечного віддаленого доступу.
Приєднайтеся до вашої VPN mesh-мережі для безпечного віддаленого доступу.
</Step>
</Steps>
@ -97,7 +99,7 @@ Gateway запускається безпосередньо на хості (н
# Перевірити стан сервісу
sudo systemctl status openclaw
# Переглянути live-журнали
# Переглянути журнали в реальному часі
sudo journalctl -u openclaw -f
# Перезапустити gateway
@ -112,27 +114,27 @@ openclaw channels login
Розгортання використовує 4-рівневу модель захисту:
1. **Firewall (UFW)** — публічно відкриті лише SSH (22) + Tailscale (41641/udp)
2. **VPN (Tailscale)**gateway доступний лише через VPN mesh
1. **Брандмауер (UFW)** — публічно відкриті лише SSH (22) + Tailscale (41641/udp)
2. **VPN (Tailscale)**Gateway доступний лише через VPN mesh
3. **Ізоляція Docker** — ланцюг iptables DOCKER-USER запобігає зовнішньому відкриттю портів
4. **Посилення systemd** — NoNewPrivileges, PrivateTmp, непривілейований користувач
4. **Посилення Systemd** — NoNewPrivileges, PrivateTmp, непривілейований користувач
Щоб перевірити зовнішню поверхню атаки:
Щоб перевірити вашу зовнішню поверхню атаки:
```bash
nmap -p- YOUR_SERVER_IP
```
Має бути відкритий лише порт 22 (SSH). Усі інші сервіси (gateway, Docker) заблоковано.
Має бути відкритий лише порт 22 (SSH). Усі інші сервіси (gateway, Docker) заблоковані.
Docker установлюється для sandbox агентів (ізольоване виконання інструментів), а не для запуску самого gateway. Див. [Multi-Agent Sandbox and Tools](/tools/multi-agent-sandbox-tools) щодо конфігурації sandbox.
Docker встановлюється для sandbox-середовищ агентів (ізольоване виконання інструментів), а не для запуску самого gateway. Див. [Multi-Agent Sandbox and Tools](/uk/tools/multi-agent-sandbox-tools) щодо налаштування sandbox.
## Ручне встановлення
Якщо ви віддаєте перевагу ручному контролю замість автоматизації:
Якщо ви надаєте перевагу ручному контролю над автоматизацією:
<Steps>
<Step title="Установіть передумови">
<Step title="Встановіть передумови">
```bash
sudo apt update && sudo apt install -y ansible git
```
@ -143,7 +145,7 @@ Docker установлюється для sandbox агентів (ізольо
cd openclaw-ansible
```
</Step>
<Step title="Установіть колекції Ansible">
<Step title="Встановіть колекції Ansible">
```bash
ansible-galaxy collection install -r requirements.yml
```
@ -153,7 +155,7 @@ Docker установлюється для sandbox агентів (ізольо
./run-playbook.sh
```
Або запустіть напряму, а потім вручну виконайте скрипт налаштування:
Або запустіть безпосередньо, а потім вручну виконайте скрипт налаштування:
```bash
ansible-playbook playbook.yml --ask-become-pass
# Потім виконайте: /tmp/openclaw-setup.sh
@ -164,23 +166,23 @@ Docker установлюється для sandbox агентів (ізольо
## Оновлення
Інсталятор Ansible налаштовує OpenClaw для ручних оновлень. Стандартний сценарій оновлення див. в [Updating](/install/updating).
Інсталятор Ansible налаштовує OpenClaw для ручних оновлень. Стандартний процес оновлення див. у [Updating](/uk/install/updating).
Щоб повторно запустити playbook Ansible (наприклад, для змін конфігурації):
Щоб повторно запустити Ansible playbook (наприклад, для змін конфігурації):
```bash
cd openclaw-ansible
./run-playbook.sh
```
Це ідемпотентно й безпечно для багаторазового запуску.
Це ідемпотентно та безпечно для багаторазового запуску.
## Усунення несправностей
<AccordionGroup>
<Accordion title="Firewall блокує моє підключення">
- Спочатку переконайтеся, що ви можете підключитися через Tailscale VPN
- Доступ через SSH (порт 22) завжди дозволений
<Accordion title="Брандмауер блокує моє з’єднання">
- Спочатку переконайтеся, що ви маєте доступ через VPN Tailscale
- Доступ SSH (порт 22) завжди дозволений
- Gateway за задумом доступний лише через Tailscale
</Accordion>
<Accordion title="Сервіс не запускається">
@ -188,7 +190,7 @@ cd openclaw-ansible
# Перевірити журнали
sudo journalctl -u openclaw -n 100
# Перевірити права доступу
# Перевірити дозволи
sudo ls -la /opt/openclaw
# Перевірити ручний запуск
@ -198,9 +200,9 @@ cd openclaw-ansible
```
</Accordion>
<Accordion title="Проблеми з Docker sandbox">
<Accordion title="Проблеми з sandbox Docker">
```bash
# Перевірити, чи працює Docker
# Переконатися, що Docker запущений
sudo systemctl status docker
# Перевірити образ sandbox
@ -221,17 +223,17 @@ cd openclaw-ansible
</Accordion>
</AccordionGroup>
## Розширена конфігурація
## Розширене налаштування
Докладніше про архітектуру безпеки та усунення несправностей див. у репозиторії openclaw-ansible:
Детальну інформацію про архітектуру безпеки та усунення несправностей див. у репозиторії openclaw-ansible:
- [Архітектура безпеки](https://github.com/openclaw/openclaw-ansible/blob/main/docs/security.md)
- [Технічні деталі](https://github.com/openclaw/openclaw-ansible/blob/main/docs/architecture.md)
- [Посібник з усунення несправностей](https://github.com/openclaw/openclaw-ansible/blob/main/docs/troubleshooting.md)
- [Security Architecture](https://github.com/openclaw/openclaw-ansible/blob/main/docs/security.md)
- [Technical Details](https://github.com/openclaw/openclaw-ansible/blob/main/docs/architecture.md)
- [Troubleshooting Guide](https://github.com/openclaw/openclaw-ansible/blob/main/docs/troubleshooting.md)
## Пов’язане
- [openclaw-ansible](https://github.com/openclaw/openclaw-ansible) -- повний посібник із розгортання
- [Docker](/install/docker) -- налаштування gateway у контейнері
- [Sandboxing](/gateway/sandboxing) -- конфігурація sandbox агентів
- [Multi-Agent Sandbox and Tools](/tools/multi-agent-sandbox-tools) -- ізоляція для кожного агента окремо
- [openclaw-ansible](https://github.com/openclaw/openclaw-ansible) повний посібник із розгортання
- [Docker](/uk/install/docker) — контейнеризоване налаштування gateway
- [Sandboxing](/uk/gateway/sandboxing) — налаштування sandbox агента
- [Multi-Agent Sandbox and Tools](/uk/tools/multi-agent-sandbox-tools) — ізоляція для кожного агента

View File

@ -1,48 +1,48 @@
---
read_when:
- Ви хочете контейнеризований gateway замість локальних встановлень
- Ви перевіряєте Docker-потік
summary: Необов’язкове налаштування та онбординг OpenClaw на основі Docker
- Ви хочете контейнеризований Gateway замість локальних встановлень
- Ви перевіряєте потік Docker
summary: Необов’язкове налаштування та онбординг для OpenClaw на основі Docker
title: Docker
x-i18n:
generated_at: "2026-04-05T21:33:22Z"
generated_at: "2026-04-20T18:29:30Z"
model: gpt-5.4
provider: openai
source_hash: d6aa0453340d7683b4954316274ba6dd1aa7c0ce2483e9bd8ae137ff4efd4c3c
source_hash: f8d3e346ca60daa9908aef0846c9052321087af7dd2c919ce79de4d5925136a2
source_path: install/docker.md
workflow: 15
---
# Docker (необов’язково)
Docker **необов’язковий**. Використовуйте його лише якщо хочете контейнеризований gateway або перевіряєте Docker-потік.
Docker **необов’язковий**. Використовуйте його лише якщо вам потрібен контейнеризований Gateway або якщо ви хочете перевірити потік Docker.
## Чи підходить мені Docker?
- **Так**: вам потрібне ізольоване, тимчасове середовище gateway або ви хочете запускати OpenClaw на хості без локальних встановлень.
- **Ні**: ви запускаєте на власній машині й просто хочете найшвидший цикл розробки. Натомість використовуйте звичайний процес встановлення.
- **Примітка щодо sandboxing**: ізоляція агентів також використовує Docker, але для цього **не** потрібно запускати весь gateway у Docker. Див. [Sandboxing](/uk/gateway/sandboxing).
- **Так**: вам потрібне ізольоване, тимчасове середовище Gateway або ви хочете запустити OpenClaw на хості без локальних встановлень.
- **Ні**: ви запускаєте на власній машині й просто хочете найшвидший цикл розробки. Замість цього використовуйте звичайний потік встановлення.
- **Примітка про ізоляцію**: типовий бекенд sandbox використовує Docker, коли sandboxing увімкнено, але sandboxing вимкнено типово й **не** вимагає запуску всього Gateway у Docker. Також доступні бекенди sandbox SSH та OpenShell. Див. [Sandboxing](/uk/gateway/sandboxing).
## Передумови
- Docker Desktop (або Docker Engine) + Docker Compose v2
- Щонайменше 2 ГБ RAM для збирання образу (`pnpm install` може бути завершено через OOM на хостах із 1 ГБ з кодом виходу 137)
- Достатньо місця на диску для образів і журналів
- Якщо запускаєте на VPS/публічному хості, перегляньте
[Посилення безпеки для мережевої доступності](/uk/gateway/security),
особливо політику фаєрвола Docker `DOCKER-USER`.
- Щонайменше 2 ГБ RAM для збірки образу (`pnpm install` може бути примусово завершений через OOM на хостах із 1 ГБ із кодом виходу 137)
- Достатньо місця на диску для образів і логів
- Якщо запускаєте на VPS/публічному хості, ознайомтеся з
[Посиленням безпеки для мережевої доступності](/uk/gateway/security),
особливо з політикою брандмауера Docker `DOCKER-USER`.
## Контейнеризований Gateway
<Steps>
<Step title="Зберіть образ">
У корені репозиторію виконайте скрипт налаштування:
У корені репозиторію запустіть скрипт налаштування:
```bash
./scripts/docker/setup.sh
```
Це локально збирає образ gateway. Щоб натомість використати попередньо зібраний образ:
Це локально збере образ Gateway. Щоб натомість використати попередньо зібраний образ:
```bash
export OPENCLAW_IMAGE="ghcr.io/openclaw/openclaw:latest"
@ -56,23 +56,22 @@ Docker **необов’язковий**. Використовуйте його
</Step>
<Step title="Завершіть онбординг">
Скрипт налаштування автоматично запускає онбординг. Він:
Скрипт налаштування запускає онбординг автоматично. Він:
- запросить API-ключі провайдера
- згенерує токен gateway і запише його в `.env`
- запустить gateway через Docker Compose
- згенерує токен Gateway і запише його в `.env`
- запустить Gateway через Docker Compose
Під час налаштування онбординг перед запуском і запис конфігурації виконуються
безпосередньо через `openclaw-gateway`. `openclaw-cli` призначений для команд,
які ви запускаєте після того, як контейнер gateway уже існує.
Під час налаштування онбординг до запуску та запис конфігурації виконуються безпосередньо через
`openclaw-gateway`. `openclaw-cli` призначений для команд, які ви запускаєте після того,
як контейнер Gateway уже існує.
</Step>
<Step title="Відкрийте Control UI">
<Step title="Відкрийте UI керування">
Відкрийте `http://127.0.0.1:18789/` у браузері та вставте налаштований
спільний секрет у Settings. Скрипт налаштування типово записує токен у `.env`;
якщо ви перемкнете конфігурацію контейнера на автентифікацію за паролем,
використовуйте натомість цей пароль.
спільний секрет у Settings. Скрипт налаштування типово записує токен у `.env`; якщо ви переключите конфігурацію контейнера на автентифікацію паролем, використовуйте натомість цей
пароль.
Потрібна URL-адреса знову?
@ -101,7 +100,7 @@ Docker **необов’язковий**. Використовуйте його
</Step>
</Steps>
### Ручний процес
### Ручний потік
Якщо ви віддаєте перевагу виконанню кожного кроку вручну замість використання скрипта налаштування:
@ -116,14 +115,14 @@ docker compose up -d openclaw-gateway
<Note>
Запускайте `docker compose` з кореня репозиторію. Якщо ви ввімкнули `OPENCLAW_EXTRA_MOUNTS`
або `OPENCLAW_HOME_VOLUME`, скрипт налаштування записує `docker-compose.extra.yml`;
додавайте його через `-f docker-compose.yml -f docker-compose.extra.yml`.
або `OPENCLAW_HOME_VOLUME`, скрипт налаштування запише `docker-compose.extra.yml`;
додайте його через `-f docker-compose.yml -f docker-compose.extra.yml`.
</Note>
<Note>
Оскільки `openclaw-cli` використовує спільний мережевий простір імен з `openclaw-gateway`,
це інструмент для використання після запуску. До `docker compose up -d openclaw-gateway`
виконуйте онбординг і запис конфігурації під час налаштування через `openclaw-gateway` з
Оскільки `openclaw-cli` використовує спільний простір імен мережі з `openclaw-gateway`, це
інструмент після запуску. До `docker compose up -d openclaw-gateway` виконуйте онбординг
і записи конфігурації під час налаштування через `openclaw-gateway` з
`--no-deps --entrypoint node`.
</Note>
@ -131,28 +130,28 @@ docker compose up -d openclaw-gateway
Скрипт налаштування приймає такі необов’язкові змінні середовища:
| Змінна | Призначення |
| ----------------------------- | ---------------------------------------------------------------- |
| `OPENCLAW_IMAGE` | Використовувати віддалений образ замість локального збирання |
| `OPENCLAW_DOCKER_APT_PACKAGES` | Встановити додаткові apt-пакети під час збирання (через пробіл) |
| `OPENCLAW_EXTENSIONS` | Попередньо встановити залежності розширень під час збирання (назви через пробіл) |
| `OPENCLAW_EXTRA_MOUNTS` | Додаткові bind mounts хоста (через кому `source:target[:opts]`) |
| `OPENCLAW_HOME_VOLUME` | Зберігати `/home/node` в іменованому Docker volume |
| `OPENCLAW_SANDBOX` | Увімкнути bootstrap sandbox (`1`, `true`, `yes`, `on`) |
| `OPENCLAW_DOCKER_SOCKET` | Перевизначити шлях до Docker socket |
| Variable | Purpose |
| ------------------------------ | ---------------------------------------------------------------- |
| `OPENCLAW_IMAGE` | Використати віддалений образ замість локальної збірки |
| `OPENCLAW_DOCKER_APT_PACKAGES` | Встановити додаткові apt-пакети під час збірки (назви через пробіл) |
| `OPENCLAW_EXTENSIONS` | Попередньо встановити залежності extensions під час збірки (назви через пробіл) |
| `OPENCLAW_EXTRA_MOUNTS` | Додаткові bind mounts хоста (через кому у форматі `source:target[:opts]`) |
| `OPENCLAW_HOME_VOLUME` | Зберігати `/home/node` в іменованому Docker volume |
| `OPENCLAW_SANDBOX` | Увімкнути bootstrap sandbox (`1`, `true`, `yes`, `on`) |
| `OPENCLAW_DOCKER_SOCKET` | Перевизначити шлях до Docker socket |
### Перевірки стану
### Перевірки працездатності
Кінцеві точки перевірки контейнера (автентифікація не потрібна):
Кінцеві точки probe контейнера (автентифікація не потрібна):
```bash
curl -fsS http://127.0.0.1:18789/healthz # liveness
curl -fsS http://127.0.0.1:18789/readyz # readiness
curl -fsS http://127.0.0.1:18789/healthz # live-перевірка
curl -fsS http://127.0.0.1:18789/readyz # перевірка готовності
```
Образ Docker містить вбудований `HEALTHCHECK`, який опитує `/healthz`.
Якщо перевірки продовжують завершуватися невдало, Docker позначає контейнер як `unhealthy`,
а системи оркестрації можуть перезапустити або замінити його.
Якщо перевірки продовжують завершуватися помилкою, Docker позначає контейнер як `unhealthy`, і
системи оркестрації можуть перезапустити або замінити його.
Автентифікований детальний знімок стану:
@ -162,58 +161,59 @@ docker compose exec openclaw-gateway node dist/index.js health --token "$OPENCLA
### LAN проти loopback
`scripts/docker/setup.sh` типово встановлює `OPENCLAW_GATEWAY_BIND=lan`, щоб доступ із хоста до
`http://127.0.0.1:18789` працював із публікацією порту Docker.
`scripts/docker/setup.sh` типово встановлює `OPENCLAW_GATEWAY_BIND=lan`, тож доступ хоста до
`http://127.0.0.1:18789` працює з публікацією портів Docker.
- `lan` (типово): браузер і CLI на хості можуть звертатися до опублікованого порту gateway.
- `loopback`: напряму до gateway можуть звертатися лише процеси всередині мережевого простору імен контейнера.
- `lan` (типово): браузер і CLI на хості можуть досягти опублікованого порту Gateway.
- `loopback`: лише процеси всередині простору імен мережі контейнера можуть
напряму досягти Gateway.
<Note>
Використовуйте значення режиму прив’язки в `gateway.bind` (`lan` / `loopback` / `custom` /
`tailnet` / `auto`), а не псевдоніми хоста на кшталт `0.0.0.0` або `127.0.0.1`.
</Note>
### Сховище та збереження даних
### Сховище й збереження даних
Docker Compose монтує `OPENCLAW_CONFIG_DIR` до `/home/node/.openclaw` і
`OPENCLAW_WORKSPACE_DIR` до `/home/node/.openclaw/workspace`, тож ці шляхи
Docker Compose монтує `OPENCLAW_CONFIG_DIR` через bind-mount у `/home/node/.openclaw` і
`OPENCLAW_WORKSPACE_DIR` у `/home/node/.openclaw/workspace`, тож ці шляхи
зберігаються після заміни контейнера.
У цьому змонтованому каталозі конфігурації OpenClaw зберігає:
Цей змонтований каталог конфігурації — місце, де OpenClaw зберігає:
- `openclaw.json` для конфігурації поведінки
- `agents/<agentId>/agent/auth-profiles.json` для збереженої OAuth/API-key автентифікації провайдерів
- `.env` для секретів середовища виконання на основі env, таких як `OPENCLAW_GATEWAY_TOKEN`
Повні відомості про збереження даних у VM-розгортаннях див. у
[Docker VM Runtime - Що і де зберігається](/uk/install/docker-vm-runtime#what-persists-where).
Повні відомості про збереження даних у розгортаннях на VM див. у
[Docker VM Runtime - What persists where](/uk/install/docker-vm-runtime#what-persists-where).
**Точки зростання дискового простору:** стежте за `media/`, файлами session JSONL, `cron/runs/*.jsonl`
і ротаційними файловими журналами в `/tmp/openclaw/`.
**Гарячі точки зростання диска:** стежте за `media/`, файлами JSONL сесій, `cron/runs/*.jsonl`,
і циклічними файловими логами в `/tmp/openclaw/`.
### Допоміжні команди оболонки (необов’язково)
Для зручнішого щоденного керування Docker установіть `ClawDock`:
Для зручнішого повсякденного керування Docker встановіть `ClawDock`:
```bash
mkdir -p ~/.clawdock && curl -sL https://raw.githubusercontent.com/openclaw/openclaw/main/scripts/clawdock/clawdock-helpers.sh -o ~/.clawdock/clawdock-helpers.sh
echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.zshrc && source ~/.zshrc
```
Якщо ви встановили ClawDock зі старого raw-шляху `scripts/shell-helpers/clawdock-helpers.sh`, повторно виконайте наведену вище команду встановлення, щоб ваш локальний файл helpers відстежував нове розташування.
Якщо ви встановили ClawDock зі старого raw-шляху `scripts/shell-helpers/clawdock-helpers.sh`, повторно виконайте наведену вище команду встановлення, щоб ваш локальний файл helper відстежував нове розташування.
Потім використовуйте `clawdock-start`, `clawdock-stop`, `clawdock-dashboard` тощо. Виконайте
Потім використовуйте `clawdock-start`, `clawdock-stop`, `clawdock-dashboard` тощо. Запустіть
`clawdock-help`, щоб побачити всі команди.
Див. [ClawDock](/uk/install/clawdock), щоб переглянути повний посібник із helpers.
Повний посібник із helper-команд див. у [ClawDock](/uk/install/clawdock).
<AccordionGroup>
<Accordion title="Увімкнення sandbox агента для Docker gateway">
<Accordion title="Увімкнення sandbox агента для Docker Gateway">
```bash
export OPENCLAW_SANDBOX=1
./scripts/docker/setup.sh
```
Нестандартний шлях до socket (наприклад, rootless Docker):
Користувацький шлях до socket (наприклад, rootless Docker):
```bash
export OPENCLAW_SANDBOX=1
@ -228,7 +228,7 @@ echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.zshrc && source ~/.zshrc
</Accordion>
<Accordion title="Автоматизація / CI (неінтерактивно)">
Вимкніть виділення pseudo-TTY для Compose за допомогою `-T`:
Вимкніть виділення pseudo-TTY Compose за допомогою `-T`:
```bash
docker compose run -T --rm openclaw-cli gateway probe
@ -237,16 +237,16 @@ echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.zshrc && source ~/.zshrc
</Accordion>
<Accordion title="Примітка щодо безпеки спільної мережі">
<Accordion title="Примітка про безпеку спільної мережі">
`openclaw-cli` використовує `network_mode: "service:openclaw-gateway"`, тому команди CLI
можуть звертатися до gateway через `127.0.0.1`. Розглядайте це як спільну
межу довіри. Конфігурація compose прибирає `NET_RAW`/`NET_ADMIN` та вмикає
можуть досягати Gateway через `127.0.0.1`. Розглядайте це як межу спільної
довіри. Конфігурація compose прибирає `NET_RAW`/`NET_ADMIN` і вмикає
`no-new-privileges` для `openclaw-cli`.
</Accordion>
<Accordion title="Права доступу та EACCES">
Образ працює від імені `node` (uid 1000). Якщо ви бачите помилки прав доступу до
`/home/node/.openclaw`, переконайтеся, що ваші bind mounts хоста належать uid 1000:
<Accordion title="Дозволи та EACCES">
Образ працює від імені `node` (uid 1000). Якщо ви бачите помилки дозволів для
`/home/node/.openclaw`, переконайтеся, що bind mounts хоста належать uid 1000:
```bash
sudo chown -R 1000:1000 /path/to/openclaw-config /path/to/openclaw-workspace
@ -255,8 +255,8 @@ echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.zshrc && source ~/.zshrc
</Accordion>
<Accordion title="Швидші перебудови">
Упорядкуйте Dockerfile так, щоб шари залежностей кешувалися. Це дозволяє не запускати
`pnpm install` повторно, доки не зміняться lockfile-файли:
Упорядкуйте Dockerfile так, щоб шари залежностей кешувалися. Це дозволяє уникнути повторного запуску
`pnpm install`, якщо lockfiles не змінювалися:
```dockerfile
FROM node:24-bookworm
@ -278,13 +278,13 @@ echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.zshrc && source ~/.zshrc
</Accordion>
<Accordion title=араметри контейнера для досвідчених користувачів">
Типовий образ орієнтований на безпеку та працює від непривілейованого користувача `node`. Для більш
<Accordion title=росунуті параметри контейнера">
Типовий образ орієнтований насамперед на безпеку й працює від імені непривілейованого `node`. Для більш
функціонального контейнера:
1. **Зберігайте `/home/node`**: `export OPENCLAW_HOME_VOLUME="openclaw_home"`
2. **Вбудуйте системні залежності**: `export OPENCLAW_DOCKER_APT_PACKAGES="git curl jq"`
3. **Установіть браузери Playwright**:
3. **Встановіть браузери Playwright**:
```bash
docker compose run --rm openclaw-cli \
node /app/node_modules/playwright-core/cli.js install chromium
@ -296,42 +296,43 @@ echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.zshrc && source ~/.zshrc
</Accordion>
<Accordion title="OpenAI Codex OAuth (headless Docker)">
Якщо ви виберете у майстрі OpenAI Codex OAuth, відкриється URL-адреса в браузері. У
Якщо у майстрі ви оберете OpenAI Codex OAuth, він відкриє URL-адресу в браузері. У
Docker або headless-середовищах скопіюйте повну URL-адресу перенаправлення, на яку ви потрапите, і вставте
її назад у майстер, щоб завершити автентифікацію.
</Accordion>
<Accordion title="Метадані базового образу">
Основний образ Docker використовує `node:24-bookworm` і публікує анотації базового OCI-образу,
Основний образ Docker використовує `node:24-bookworm` і публікує анотації OCI базового образу,
зокрема `org.opencontainers.image.base.name`,
`org.opencontainers.image.source` та інші. Див.
[Анотації OCI-образу](https://github.com/opencontainers/image-spec/blob/main/annotations.md).
[OCI image annotations](https://github.com/opencontainers/image-spec/blob/main/annotations.md).
</Accordion>
</AccordionGroup>
### Запуск на VPS?
Див. [Hetzner (Docker VPS)](/uk/install/hetzner) і
[Docker VM Runtime](/uk/install/docker-vm-runtime), щоб переглянути кроки спільного VM-розгортання,
зокрема вбудовування бінарних файлів, збереження даних і оновлення.
[Docker VM Runtime](/uk/install/docker-vm-runtime) для спільних кроків розгортання на VM,
зокрема вбудовування бінарних файлів, збереження даних та оновлення.
## Sandbox агента
Коли ввімкнено `agents.defaults.sandbox`, gateway виконує інструменти агента
(shell, читання/запис файлів тощо) в ізольованих Docker-контейнерах, тоді як
сам gateway залишається на хості. Це дає вам жорстку межу навколо недовірених або
багатокористувацьких сесій агентів без контейнеризації всього gateway.
Коли `agents.defaults.sandbox` увімкнено з бекендом Docker, Gateway
виконує інструменти агента (shell, читання/запис файлів тощо) в ізольованих Docker
контейнерах, тоді як сам Gateway залишається на хості. Це дає вам жорстку межу
навколо недовірених або багатокористувацьких сесій агента без контейнеризації всього
Gateway.
Область дії sandbox може бути на рівні агента (типово), сесії або спільною. Для кожної області
використовується власний workspace, змонтований у `/workspace`. Ви також можете налаштувати
політики дозволу/заборони інструментів, ізоляцію мережі, обмеження ресурсів і
контейнери браузера.
Область дії sandbox може бути на рівні агента (типово), на рівні сесії або спільною. Кожна область
має власний workspace, змонтований у `/workspace`. Ви також можете налаштувати
політики дозволу/заборони інструментів, ізоляцію мережі, ліміти ресурсів і браузерні
контейнери.
Повну інформацію про конфігурацію, образи, примітки щодо безпеки та профілі з кількома агентами див. тут:
Повну конфігурацію, образи, примітки щодо безпеки та багатопрофільні сценарії для агентів див. тут:
- [Sandboxing](/uk/gateway/sandboxing) -- повний довідник із sandbox
- [OpenShell](/uk/gateway/openshell) -- інтерактивний доступ до shell у sandbox-контейнерах
- [Multi-Agent Sandbox and Tools](/uk/tools/multi-agent-sandbox-tools) -- перевизначення для окремих агентів
- [Sandboxing](/uk/gateway/sandboxing) повний довідник із sandbox
- [OpenShell](/uk/gateway/openshell) — інтерактивний доступ до shell контейнерів sandbox
- [Multi-Agent Sandbox and Tools](/uk/tools/multi-agent-sandbox-tools) перевизначення для окремих агентів
### Швидке ввімкнення
@ -354,34 +355,33 @@ echo 'source ~/.clawdock/clawdock-helpers.sh' >> ~/.zshrc && source ~/.zshrc
scripts/sandbox-setup.sh
```
## Усунення несправностей
## Усунення неполадок
<AccordionGroup>
<Accordion title="Образ відсутній або sandbox-контейнер не запускається">
<Accordion title="Образ відсутній або контейнер sandbox не запускається">
Зберіть образ sandbox за допомогою
[`scripts/sandbox-setup.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/sandbox-setup.sh)
або встановіть для `agents.defaults.sandbox.docker.image` свій користувацький образ.
Контейнери автоматично створюються за потреби для кожної сесії.
або встановіть `agents.defaults.sandbox.docker.image` на ваш власний образ.
Контейнери автоматично створюються для кожної сесії за потреби.
</Accordion>
<Accordion title="Помилки прав доступу в sandbox">
Установіть `docker.user` у UID:GID, що відповідає власнику змонтованого workspace,
<Accordion title="Помилки дозволів у sandbox">
Встановіть `docker.user` у значення UID:GID, яке відповідає власнику змонтованого workspace,
або змініть власника папки workspace через chown.
</Accordion>
<Accordion title="Користувацькі інструменти не знайдено в sandbox">
<Accordion title="Власні інструменти не знайдені в sandbox">
OpenClaw запускає команди через `sh -lc` (login shell), який зчитує
`/etc/profile` і може скинути PATH. Установіть `docker.env.PATH`, щоб додати
ваші шляхи до користувацьких інструментів на початок, або додайте скрипт у `/etc/profile.d/`
у вашому Dockerfile.
`/etc/profile` і може скидати PATH. Встановіть `docker.env.PATH`, щоб додати
ваші власні шляхи інструментів на початок, або додайте скрипт у `/etc/profile.d/` у вашому Dockerfile.
</Accordion>
<Accordion title="Завершено через OOM під час збирання образу (exit 137)">
VM потрібні щонайменше 2 ГБ RAM. Використайте більший клас машини та повторіть спробу.
<Accordion title="Примусове завершення через OOM під час збірки образу (exit 137)">
VM потребує щонайменше 2 ГБ RAM. Використайте більший клас машини й повторіть спробу.
</Accordion>
<Accordion title="Unauthorized або потрібне pairing у Control UI">
Отримайте нове посилання dashboard і схваліть пристрій браузера:
<Accordion title="Unauthorized або потрібне pairing у UI керування">
Отримайте свіже посилання на dashboard і підтвердьте пристрій браузера:
```bash
docker compose run --rm openclaw-cli dashboard --no-open
@ -393,8 +393,8 @@ scripts/sandbox-setup.sh
</Accordion>
<Accordion title="Ціль gateway показує ws://172.x.x.x або помилки pairing із Docker CLI">
Скиньте режим і прив’язку gateway:
<Accordion title="Ціль Gateway показує ws://172.x.x.x або помилки pairing з Docker CLI">
Скиньте режим і bind Gateway:
```bash
docker compose run --rm openclaw-cli config set --batch-json '[{"path":"gateway.mode","value":"local"},{"path":"gateway.bind","value":"lan"}]'
@ -406,8 +406,8 @@ scripts/sandbox-setup.sh
## Пов’язане
- [Install Overview](/uk/install) — усі методи встановлення
- [Install Overview](/uk/install) — усі способи встановлення
- [Podman](/uk/install/podman) — альтернатива Docker на базі Podman
- [ClawDock](/uk/install/clawdock) — спільнотне налаштування Docker Compose
- [Updating](/uk/install/updating) — як підтримувати OpenClaw в актуальному стані
- [Configuration](/uk/gateway/configuration) — конфігурація gateway після встановлення
- [Configuration](/uk/gateway/configuration) — конфігурація Gateway після встановлення

View File

@ -1,23 +1,23 @@
---
read_when:
- Додавання або зміна конфігурації Skills
- Додавання або змінення конфігурації Skills
- Налаштування вбудованого allowlist або поведінки встановлення
summary: Схема конфігурації Skills і приклади
title: Конфігурація Skills
x-i18n:
generated_at: "2026-04-05T18:20:52Z"
generated_at: "2026-04-20T18:30:02Z"
model: gpt-5.4
provider: openai
source_hash: 7839f39f68c1442dcf4740b09886e0ef55762ce0d4b9f7b4f493a8c130c84579
source_hash: 8af3a51af5d6d6af355c529bb8ec0a045046c635d8fff0dec20cd875ec12e88b
source_path: tools/skills-config.md
workflow: 15
---
# Конфігурація Skills
Більшість конфігурації завантаження/встановлення Skills розташована в `skills` у
`~/.openclaw/openclaw.json`. Видимість Skills для окремих агентів розташована в
`agents.defaults.skills` і `agents.list[].skills`.
Більшість конфігурації завантаження/встановлення Skills розміщується в `skills` у
`~/.openclaw/openclaw.json`. Видимість Skills для конкретного агента розміщується в
`agents.defaults.skills` та `agents.list[].skills`.
```json5
{
@ -30,12 +30,12 @@ x-i18n:
},
install: {
preferBrew: true,
nodeManager: "npm", // npm | pnpm | yarn | bun (середовище виконання Gateway все одно Node; bun не рекомендовано)
nodeManager: "npm", // npm | pnpm | yarn | bun (середовище виконання Gateway усе ще Node; bun не рекомендовано)
},
entries: {
"image-lab": {
enabled: true,
apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // або рядок plaintext
apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // або plaintext string
env: {
GEMINI_API_KEY: "GEMINI_KEY_HERE",
},
@ -48,7 +48,7 @@ x-i18n:
```
Для вбудованої генерації/редагування зображень віддавайте перевагу `agents.defaults.imageGenerationModel`
разом із core-інструментом `image_generate`. `skills.entries.*` потрібен лише для користувацьких або
разом із core-інструментом `image_generate`. `skills.entries.*` призначено лише для custom або
сторонніх робочих процесів Skills.
Якщо ви вибираєте конкретного провайдера/модель зображень, також налаштуйте
@ -72,8 +72,8 @@ x-i18n:
skills: ["github", "weather"],
},
list: [
{ id: "writer" }, // успадковує значення за замовчуванням -> github, weather
{ id: "docs", skills: ["docs-search"] }, // замінює значення за замовчуванням
{ id: "writer" }, // успадковує defaults -> github, weather
{ id: "docs", skills: ["docs-search"] }, // замінює defaults
{ id: "locked-down", skills: [] }, // без Skills
],
},
@ -82,59 +82,59 @@ x-i18n:
Правила:
- `agents.defaults.skills`: спільний базовий allowlist для агентів, у яких пропущено
- `agents.defaults.skills`: спільний базовий allowlist для агентів, які не вказують
`agents.list[].skills`.
- Пропустіть `agents.defaults.skills`, щоб за замовчуванням не обмежувати Skills.
- `agents.list[].skills`: явний фінальний набір Skills для цього агента; він не
зливається зі значеннями за замовчуванням.
- Не вказуйте `agents.defaults.skills`, щоб за замовчуванням не обмежувати Skills.
- `agents.list[].skills`: явний кінцевий набір Skills для цього агента; він не
об’єднується зі значеннями за замовчуванням.
- `agents.list[].skills: []`: не надавати жодних Skills для цього агента.
## Поля
- Вбудовані корені Skills завжди включають `~/.openclaw/skills`, `~/.agents/skills`,
- Вбудовані кореневі каталоги Skills завжди включають `~/.openclaw/skills`, `~/.agents/skills`,
`<workspace>/.agents/skills` і `<workspace>/skills`.
- `allowBundled`: необов’язковий allowlist лише для **вбудованих** Skills. Якщо встановлено, лише
вбудовані Skills зі списку будуть доступні (керовані, агентські та Skills робочого простору не зачіпаються).
- `allowBundled`: необов’язковий allowlist лише для **вбудованих** Skills. Якщо задано, лише
вбудовані Skills зі списку можуть використовуватися (керовані Skills, Skills агента та робочого простору не зачіпаються).
- `load.extraDirs`: додаткові каталоги Skills для сканування (найнижчий пріоритет).
- `load.watch`: стежити за папками Skills і оновлювати знімок Skills (за замовчуванням: true).
- `load.watchDebounceMs`: debounce для подій спостерігача Skills у мілісекундах (за замовчуванням: 250).
- `install.preferBrew`: віддавати перевагу інсталяторам brew, коли вони доступні (за замовчуванням: true).
- `install.nodeManager`: бажаний інсталятор node (`npm` | `pnpm` | `yarn` | `bun`, за замовчуванням: npm).
Це впливає лише на **встановлення Skills**; середовище виконання Gateway все одно має бути Node
(Bun не рекомендовано для WhatsApp/Telegram).
- `openclaw setup --node-manager` є вужчим параметром і наразі приймає лише `npm`,
- `load.watch`: стежити за папками Skills і оновлювати знімок Skills (типово: true).
- `load.watchDebounceMs`: debounce для подій watcher-а Skills у мілісекундах (типово: 250).
- `install.preferBrew`: віддавати перевагу інсталяторам brew, якщо вони доступні (типово: true).
- `install.nodeManager`: бажаний інсталятор Node (`npm` | `pnpm` | `yarn` | `bun`, типово: npm).
Це впливає лише на **встановлення Skills**; середовище виконання Gateway усе ще має бути Node
(`bun` не рекомендовано для WhatsApp/Telegram).
- `openclaw setup --node-manager` є вужчим параметром і наразі приймає `npm`,
`pnpm` або `bun`. Установіть `skills.install.nodeManager: "yarn"` вручну, якщо
хочете встановлення Skills через Yarn.
- `entries.<skillKey>`: перевизначення для окремого skill.
- `entries.<skillKey>`: перевизначення для окремого Skill.
- `agents.defaults.skills`: необов’язковий allowlist Skills за замовчуванням, який успадковують агенти,
у яких пропущено `agents.list[].skills`.
- `agents.list[].skills`: необов’язковий фінальний allowlist Skills для окремого агента; явні
списки замінюють успадковані значення за замовчуванням, а не зливаються з ними.
що не вказують `agents.list[].skills`.
- `agents.list[].skills`: необов’язковий кінцевий allowlist Skills для окремого агента; явні
списки замінюють успадковані значення за замовчуванням, а не об’єднуються з ними.
Поля для окремого skill:
Поля для окремого Skill:
- `enabled`: установіть `false`, щоб вимкнути skill, навіть якщо він вбудований/встановлений.
- `env`: змінні середовища, які додаються до запуску агента (лише якщо вони ще не встановлені).
- `apiKey`: необов’язковий зручний параметр для Skills, які оголошують основну env-змінну.
Підтримує рядок plaintext або об’єкт SecretRef (`{ source, provider, id }`).
- `enabled`: установіть `false`, щоб вимкнути Skill, навіть якщо він вбудований/встановлений.
- `env`: змінні середовища, які додаються під час запуску агента (лише якщо вони ще не встановлені).
- `apiKey`: необов’язкова зручна опція для Skills, які оголошують основну env-змінну.
Підтримує plaintext string або об’єкт SecretRef (`{ source, provider, id }`).
## Примітки
- Ключі в `entries` за замовчуванням відповідають імені skill. Якщо skill визначає
- Ключі в `entries` за замовчуванням відповідають імені Skill. Якщо Skill визначає
`metadata.openclaw.skillKey`, використовуйте натомість цей ключ.
- Пріоритет завантаження: `<workspace>/skills``<workspace>/.agents/skills`
`~/.agents/skills``~/.openclaw/skills` → вбудовані Skills →
`skills.load.extraDirs`.
- Зміни до Skills підхоплюються на наступному ході агента, коли watcher увімкнено.
- Зміни в Skills застосовуються на наступному ході агента, коли watcher увімкнено.
### Ізольовані Skills + env-змінні
### Sandbox-овані Skills + env-змінні
Коли сесія **ізольована**, процеси Skills працюють усередині Docker. Ізольоване середовище
**не** успадковує хостовий `process.env`.
Коли сесію **sandbox-овано**, процеси Skills працюють усередині налаштованого
sandbox-бекенда. Sandbox **не** успадковує хостовий `process.env`.
Використовуйте одне з такого:
Використовуйте один із варіантів:
- `agents.defaults.sandbox.docker.env` (або `agents.list[].sandbox.docker.env` для окремого агента)
- додайте env у власний образ sandbox
- `agents.defaults.sandbox.docker.env` для Docker-бекенда (або `agents.list[].sandbox.docker.env` для окремого агента)
- вбудуйте env у власний образ sandbox або у віддалене sandbox-середовище
Глобальні `env` і `skills.entries.<skill>.env/apiKey` застосовуються **лише** до запусків на хості.