---
read_when:
    - Налаштування підтверджень exec або списків дозволеного
    - Реалізація інтерфейсу затвердження exec у застосунку macOS
    - Огляд промптів для виходу з пісочниці та їхніх наслідків
sidebarTitle: Exec approvals
summary: 'Схвалення виконання команд на хості: параметри політики, списки дозволеного та робочий процес YOLO/суворий'
title: Схвалення виконання команд
x-i18n:
    generated_at: "2026-04-28T11:27:03Z"
    model: gpt-5.5
    provider: openai
    source_hash: 71c16d0e547c4dd42a351d37e37e97b681a062cd496d5e0cba923b54c8f5b0e9
    source_path: tools/exec-approvals.md
    workflow: 16
---

Схвалення exec — це **запобіжник companion app / node host**, який дозволяє агенту в пісочниці запускати команди на реальному хості (`gateway` або `node`). Запобіжний блокувальник: команди дозволені лише тоді, коли політика + allowlist + (необов’язково) схвалення користувача узгоджуються. Схвалення exec накладаються **поверх** політики інструментів і gating для підвищених прав (якщо тільки elevated не встановлено в `full`, що пропускає схвалення).

<Note>
Ефективна політика — це **суворіша** з `tools.exec.*` і стандартних значень схвалень; якщо поле схвалень пропущено, використовується значення `tools.exec`. Host exec також використовує локальний стан схвалень на цій машині — локальне для хоста `ask: "always"` у `~/.openclaw/exec-approvals.json` продовжує показувати запити, навіть якщо стандартні значення сесії або конфігурації запитують `ask: "on-miss"`.
</Note>

## Перегляд ефективної політики

| Команда                                                          | Що вона показує                                                                        |
| ---------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| `openclaw approvals get` / `--gateway` / `--node <id\|name\|ip>` | Запитану політику, джерела політики хоста й ефективний результат.                      |
| `openclaw exec-policy show`                                      | Об’єднаний вигляд локальної машини.                                                     |
| `openclaw exec-policy set` / `preset`                            | Синхронізує локальну запитану політику з локальним файлом схвалень хоста за один крок. |

Коли локальна область запитує `host=node`, `exec-policy show` повідомляє, що ця область керується вузлом під час виконання, замість удавати, що локальний файл схвалень є джерелом істини.

Якщо UI companion app **недоступний**, будь-який запит, який зазвичай показував би prompt, вирішується через **ask fallback** (стандартно: `deny`).

<Tip>
Нативні клієнти схвалень у чаті можуть додавати специфічні для каналу дії до повідомлення з очікуваним схваленням. Наприклад, Matrix додає швидкі реакції (`✅` дозволити один раз, `❌` відхилити, `♾️` дозволяти завжди), водночас залишаючи команди `/approve ...` у повідомленні як резервний варіант.
</Tip>

## Де це застосовується

Схвалення exec застосовуються локально на хості виконання:

- **Gateway host** → процес `openclaw` на машині Gateway.
- **Node host** → node runner (companion app для macOS або headless node host).

### Модель довіри

- Виклики, автентифіковані Gateway, вважаються довіреними операторами для цього Gateway.
- Спряжені вузли поширюють цю можливість довіреного оператора на node host.
- Схвалення exec зменшують ризик випадкового виконання, але **не** є межею автентифікації для окремого користувача.
- Схвалені запуски на node host прив’язують канонічний контекст виконання: канонічний cwd, точний argv, прив’язку env за наявності та закріплений шлях до виконуваного файлу, коли це застосовно.
- Для shell-скриптів і прямих викликів файлів інтерпретатора/runtime OpenClaw також намагається прив’язати один конкретний локальний файловий операнд. Якщо цей прив’язаний файл змінюється після схвалення, але до виконання, запуск відхиляється замість виконання зміненого вмісту.
- Прив’язка файлів навмисно є best-effort, **а не** повною семантичною моделлю кожного шляху завантаження інтерпретатора/runtime. Якщо режим схвалення не може точно визначити один конкретний локальний файл для прив’язки, він відмовляється створювати запуск, забезпечений схваленням, замість удавати повне покриття.

### Розділення macOS

- **Служба node host** пересилає `system.run` до **macOS app** через локальний IPC.
- **macOS app** застосовує схвалення й виконує команду в контексті UI.

## Налаштування та сховище

Схвалення зберігаються в локальному JSON-файлі на хості виконання:

```text
~/.openclaw/exec-approvals.json
```

Приклад схеми:

```json
{
  "version": 1,
  "socket": {
    "path": "~/.openclaw/exec-approvals.sock",
    "token": "base64url-token"
  },
  "defaults": {
    "security": "deny",
    "ask": "on-miss",
    "askFallback": "deny",
    "autoAllowSkills": false
  },
  "agents": {
    "main": {
      "security": "allowlist",
      "ask": "on-miss",
      "askFallback": "deny",
      "autoAllowSkills": true,
      "allowlist": [
        {
          "id": "B0C8C0B3-2C2D-4F8A-9A3C-5A4B3C2D1E0F",
          "pattern": "~/Projects/**/bin/rg",
          "source": "allow-always",
          "commandText": "rg -n TODO",
          "lastUsedAt": 1737150000000,
          "lastUsedCommand": "rg -n TODO",
          "lastResolvedPath": "/Users/user/Projects/.../bin/rg"
        }
      ]
    }
  }
}
```

## Регулятори політики

### `exec.security`

<ParamField path="security" type='"deny" | "allowlist" | "full"'>
  - `deny` — блокує всі запити host exec.
  - `allowlist` — дозволяє лише команди з allowlist.
  - `full` — дозволяє все (еквівалентно elevated).

</ParamField>

### `exec.ask`

<ParamField path="ask" type='"off" | "on-miss" | "always"'>
  - `off` — ніколи не показувати prompt.
  - `on-miss` — показувати prompt лише тоді, коли allowlist не збігається.
  - `always` — показувати prompt для кожної команди. Тривала довіра `allow-always` **не** пригнічує prompts, коли ефективний режим ask — `always`.

</ParamField>

### `askFallback`

<ParamField path="askFallback" type='"deny" | "allowlist" | "full"'>
  Рішення, коли prompt потрібен, але жоден UI недоступний.

- `deny` — блокувати.
- `allowlist` — дозволяти лише якщо allowlist збігається.
- `full` — дозволяти.

</ParamField>

### `tools.exec.strictInlineEval`

<ParamField path="strictInlineEval" type="boolean">
  Коли `true`, OpenClaw розглядає форми inline code-eval як такі, що потребують лише схвалення, навіть якщо сам binary інтерпретатора є в allowlist. Defense-in-depth для завантажувачів інтерпретаторів, які не відображаються чисто на один стабільний файловий операнд.
</ParamField>

Приклади, які виявляє суворий режим:

- `python -c`
- `node -e`, `node --eval`, `node -p`
- `ruby -e`
- `perl -e`, `perl -E`
- `php -r`
- `lua -e`
- `osascript -e`

У суворому режимі цим командам усе одно потрібне явне схвалення, а `allow-always` не зберігає для них нові записи allowlist автоматично.

## Режим YOLO (без схвалення)

Якщо ви хочете, щоб host exec виконувався без prompt’ів схвалення, потрібно відкрити **обидва** рівні політики — запитану політику exec у конфігурації OpenClaw (`tools.exec.*`) **і** локальну для хоста політику схвалень у `~/.openclaw/exec-approvals.json`.

YOLO є стандартною поведінкою хоста, якщо ви явно її не посилите:

| Рівень                | Налаштування YOLO         |
| --------------------- | ------------------------- |
| `tools.exec.security` | `full` на `gateway`/`node` |
| `tools.exec.ask`      | `off`                     |
| Host `askFallback`    | `full`                    |

<Warning>
**Важливі відмінності:**

- `tools.exec.host=auto` вибирає, **де** виконується exec: у пісочниці, коли вона доступна, інакше на gateway.
- YOLO вибирає, **як** схвалюється host exec: `security=full` плюс `ask=off`.
- У режимі YOLO OpenClaw **не** додає окремий евристичний gate схвалення для обфускації команд або шар відхилення script-preflight поверх налаштованої політики host exec.
- `auto` не робить маршрутизацію gateway вільним override із сесії в пісочниці. Запит `host=node` для окремого виклику дозволений з `auto`; `host=gateway` дозволений з `auto` лише коли жоден sandbox runtime не активний. Для стабільного не-auto стандартного значення встановіть `tools.exec.host` або явно використовуйте `/exec host=...`.

</Warning>

Провайдери на основі CLI, які надають власний неінтерактивний режим дозволів, можуть дотримуватися цієї політики. Claude CLI додає `--permission-mode bypassPermissions`, коли запитана політика exec OpenClaw є YOLO. Перевизначте таку поведінку backend явними аргументами Claude у `agents.defaults.cliBackends.claude-cli.args` / `resumeArgs` — наприклад `--permission-mode default`, `acceptEdits` або `bypassPermissions`.

Якщо вам потрібне консервативніше налаштування, посильте будь-який із рівнів назад до `allowlist` / `on-miss` або `deny`.

### Постійне налаштування gateway-host "ніколи не питати"

<Steps>
  <Step title="Встановіть запитану політику конфігурації">
    ```bash
    openclaw config set tools.exec.host gateway
    openclaw config set tools.exec.security full
    openclaw config set tools.exec.ask off
    openclaw gateway restart
    ```
  </Step>
  <Step title="Узгодьте файл схвалень хоста">
    ```bash
    openclaw approvals set --stdin <<'EOF'
    {
      version: 1,
      defaults: {
        security: "full",
        ask: "off",
        askFallback: "full"
      }
    }
    EOF
    ```
  </Step>
</Steps>

### Локальне скорочення

```bash
openclaw exec-policy preset yolo
```

Це локальне скорочення оновлює обидва:

- Локальні `tools.exec.host/security/ask`.
- Стандартні значення локального `~/.openclaw/exec-approvals.json`.

Воно навмисно лише локальне. Щоб змінити схвалення gateway-host або node-host віддалено, використовуйте `openclaw approvals set --gateway` або `openclaw approvals set --node <id|name|ip>`.

### Node host

Для node host застосуйте той самий файл схвалень на цьому вузлі:

```bash
openclaw approvals set --node <id|name|ip> --stdin <<'EOF'
{
  version: 1,
  defaults: {
    security: "full",
    ask: "off",
    askFallback: "full"
  }
}
EOF
```

<Note>
**Обмеження лише локального режиму:**

- `openclaw exec-policy` не синхронізує схвалення вузла.
- `openclaw exec-policy set --host node` відхиляється.
- Схвалення exec для Node отримуються з вузла під час виконання, тому оновлення, націлені на вузол, мають використовувати `openclaw approvals --node ...`.

</Note>

### Скорочення лише для сесії

- `/exec security=full ask=off` змінює лише поточну сесію.
- `/elevated full` — це аварійне скорочення, яке також пропускає схвалення exec для цієї сесії.

Якщо файл схвалень хоста залишається суворішим за конфігурацію, суворіша політика хоста все одно перемагає.

## Allowlist (для кожного агента)

Allowlist є **окремими для кожного агента**. Якщо існує кілька агентів, перемкніть агента, якого ви редагуєте в macOS app. Шаблони — це glob-збіги.

Шаблони можуть бути glob-шаблонами розв’язаних шляхів до binary або glob-шаблонами простих імен команд. Прості імена збігаються лише з командами, викликаними через `PATH`, тому `rg` може збігатися з `/opt/homebrew/bin/rg`, коли команда — `rg`, але **не** з `./rg` або `/tmp/rg`. Використовуйте path glob, коли хочете довіряти одному конкретному розташуванню binary.

Застарілі записи `agents.default` мігруються до `agents.main` під час завантаження. Shell-ланцюжки на кшталт `echo ok && pwd` усе одно потребують, щоб кожен top-level сегмент задовольняв правила allowlist.

Приклади:

- `rg`
- `~/Projects/**/bin/peekaboo`
- `~/.local/bin/*`
- `/opt/homebrew/bin/rg`

Кожен запис allowlist відстежує:

| Поле               | Значення                         |
| ------------------ | -------------------------------- |
| `id`               | Стабільний UUID для ідентичності UI |
| `lastUsedAt`       | Позначка часу останнього використання |
| `lastUsedCommand`  | Остання команда, що збіглася     |
| `lastResolvedPath` | Останній розв’язаний шлях до binary |

## Автоматичний дозвіл CLI Skills

Коли **Auto-allow skill CLIs** увімкнено, виконувані файли, на які посилаються відомі Skills, вважаються такими, що є в allowlist на вузлах (macOS node або headless node host). Це використовує `skills.bins` через Gateway RPC для отримання списку skill bin. Вимкніть це, якщо потрібні суворі ручні allowlist.

<Warning>
- Це **неявний зручний allowlist**, окремий від ручних записів allowlist шляхів.
- Він призначений для середовищ довірених операторів, де Gateway і node перебувають у тій самій межі довіри.
- Якщо вам потрібна сувора явна довіра, залиште `autoAllowSkills: false` і використовуйте лише ручні записи allowlist шляхів.

</Warning>

## Безпечні bins і пересилання схвалень

Про safe bins (швидкий шлях лише через stdin), деталі прив’язки інтерпретатора та те, як пересилати prompts схвалення до Slack/Discord/Telegram (або запускати їх як нативні клієнти схвалень), дивіться в [Схвалення exec — розширені можливості](/uk/tools/exec-approvals-advanced).

## Редагування Control UI

Використовуйте картку **Control UI → Nodes → Exec approvals**, щоб редагувати стандартні значення, перевизначення для окремих агентів і allowlist. Виберіть область (Defaults або агент), налаштуйте політику, додайте/видаліть шаблони allowlist, потім натисніть **Save**. UI показує метадані останнього використання для кожного шаблону, щоб ви могли підтримувати список охайним.

Цільовий селектор вибирає **Gateway** (локальні схвалення) або **Node**.
Вузли мають оголошувати `system.execApprovals.get/set` (застосунок macOS або
безголовий хост вузла). Якщо вузол ще не оголошує схвалення exec,
відредагуйте його локальний `~/.openclaw/exec-approvals.json` напряму.

CLI: `openclaw approvals` підтримує редагування gateway або node — див.
[CLI схвалень](/uk/cli/approvals).

## Потік схвалення

Коли потрібен запит, gateway транслює
`exec.approval.requested` клієнтам операторів. Control UI і застосунок macOS
вирішують його через `exec.approval.resolve`, після чого gateway пересилає
схвалений запит хосту вузла.

Для `host=node` запити на схвалення містять канонічне навантаження
`systemRunPlan`. Gateway використовує цей план як авторитетний контекст
команди/cwd/сесії під час пересилання схвалених запитів `system.run`.

Це важливо для затримки асинхронного схвалення:

- Шлях node exec готує один канонічний план наперед.
- Запис схвалення зберігає цей план і його метадані прив’язки.
- Після схвалення фінальний пересланий виклик `system.run` повторно використовує збережений план замість довіри до пізніших змін виклику.
- Якщо викликач змінює `command`, `rawCommand`, `cwd`, `agentId` або `sessionKey` після створення запиту на схвалення, gateway відхиляє пересланий запуск як невідповідність схваленню.

## Системні події

Життєвий цикл exec відображається як системні повідомлення:

- `Exec running` (лише якщо команда перевищує поріг сповіщення про виконання).
- `Exec finished`.
- `Exec denied`.

Вони публікуються в сесію агента після того, як вузол повідомляє про подію.
Схвалення exec на хості gateway випускають ті самі події життєвого циклу, коли
команда завершується (і, за потреби, коли виконується довше за поріг).
Exec, обмежені схваленням, повторно використовують ідентифікатор схвалення як `runId` у цих
повідомленнях для простого зіставлення.

## Поведінка відхиленого схвалення

Коли асинхронне схвалення exec відхилено, OpenClaw не дає агенту
повторно використовувати вивід із будь-якого попереднього запуску тієї самої команди в сесії.
Причина відхилення передається з явною вказівкою, що жоден вивід команди
недоступний, що не дає агенту стверджувати, ніби є новий вивід, або
повторювати відхилену команду зі застарілими результатами попереднього успішного
запуску.

## Наслідки

- **`full`** потужний; за можливості віддавайте перевагу спискам дозволеного.
- **`ask`** тримає вас у процесі, водночас дозволяючи швидкі схвалення.
- Списки дозволеного для окремих агентів не дають схваленням одного агента переходити до інших.
- Схвалення застосовуються лише до запитів host exec від **авторизованих відправників**. Неавторизовані відправники не можуть виконувати `/exec`.
- `/exec security=full` — це зручність рівня сесії для авторизованих операторів, яка свідомо пропускає схвалення. Щоб жорстко заблокувати host exec, встановіть безпеку схвалень на `deny` або забороніть інструмент `exec` через політику інструментів.

## Пов’язане

<CardGroup cols={2}>
  <Card title="Схвалення exec — розширено" href="/uk/tools/exec-approvals-advanced" icon="gear">
    Безпечні кошики, прив’язка інтерпретатора та пересилання схвалення в чат.
  </Card>
  <Card title="Інструмент exec" href="/uk/tools/exec" icon="terminal">
    Інструмент виконання команд оболонки.
  </Card>
  <Card title="Підвищений режим" href="/uk/tools/elevated" icon="shield-exclamation">
    Аварійний шлях, який також пропускає схвалення.
  </Card>
  <Card title="Пісочниця" href="/uk/gateway/sandboxing" icon="box">
    Режими пісочниці та доступ до робочого простору.
  </Card>
  <Card title="Безпека" href="/uk/gateway/security" icon="lock">
    Модель безпеки та посилення захисту.
  </Card>
  <Card title="Пісочниця проти політики інструментів проти підвищеного режиму" href="/uk/gateway/sandbox-vs-tool-policy-vs-elevated" icon="sliders">
    Коли використовувати кожен елемент керування.
  </Card>
  <Card title="Skills" href="/uk/tools/skills" icon="sparkles">
    Автодозвіл на основі Skills.
  </Card>
</CardGroup>
