---
read_when:
    - Використання або змінення інструмента exec
    - Налагодження поведінки stdin або TTY
summary: Використання інструмента exec, режими stdin і підтримка TTY
title: Інструмент виконання команд
x-i18n:
    generated_at: "2026-05-11T21:00:26Z"
    model: gpt-5.5
    provider: openai
    source_hash: 43ed3dc70d1998f2f2a3eed70aaf20da61ba93d23b7fa7d378f22e8635c6ec68
    source_path: tools/exec.md
    workflow: 16
---

Запускайте shell-команди в робочій області. `exec` — це змінювана shell-поверхня: команди можуть створювати, редагувати або видаляти файли всюди, де це дозволяє вибраний хост або файлова система пісочниці. Вимкнення файлових інструментів OpenClaw, як-от `write`, `edit` або `apply_patch`, не робить `exec` доступним лише для читання.

Підтримує виконання на передньому плані та у фоні через `process`. Якщо `process` заборонено, `exec` виконується синхронно й ігнорує `yieldMs`/`background`.
Фонові сесії обмежені окремим агентом; `process` бачить лише сесії того самого агента.

## Параметри

<ParamField path="command" type="string" required>
Shell-команда для запуску.
</ParamField>

<ParamField path="workdir" type="string" default="cwd">
Робочий каталог для команди.
</ParamField>

<ParamField path="env" type="object">
Перевизначення середовища у форматі ключ/значення, об’єднані поверх успадкованого середовища.
</ParamField>

<ParamField path="yieldMs" type="number" default="10000">
Автоматично перевести команду у фон після цієї затримки (мс).
</ParamField>

<ParamField path="background" type="boolean" default="false">
Негайно перевести команду у фон замість очікування `yieldMs`.
</ParamField>

<ParamField path="timeout" type="number" default="tools.exec.timeoutSec">
Перевизначити налаштований таймаут exec для цього виклику. Установлюйте `timeout: 0` лише тоді, коли команда має виконуватися без таймауту процесу exec.
</ParamField>

<ParamField path="pty" type="boolean" default="false">
Запустити в псевдотерміналі, коли доступно. Використовуйте для CLI лише з TTY, агентів кодування та термінальних інтерфейсів.
</ParamField>

<ParamField path="host" type="'auto' | 'sandbox' | 'gateway' | 'node'" default="auto">
Де виконувати. `auto` визначається як `sandbox`, коли активне середовище виконання пісочниці, і як `gateway` в інших випадках.
</ParamField>

<ParamField path="security" type="'deny' | 'allowlist' | 'full'">
Ігнорується для звичайних викликів інструментів. Безпека `gateway` / `node` керується
`tools.exec.security` і `~/.openclaw/exec-approvals.json`; розширений режим може
примусово встановити `security=full` лише тоді, коли оператор явно надає розширений доступ.
</ParamField>

<ParamField path="ask" type="'off' | 'on-miss' | 'always'">
Поведінка запиту схвалення для виконання `gateway` / `node`.
</ParamField>

<ParamField path="node" type="string">
Ідентифікатор/ім’я Node, коли `host=node`.
</ParamField>

<ParamField path="elevated" type="boolean" default="false">
Запросити розширений режим — вийти з пісочниці на налаштований шлях хоста. `security=full` примусово встановлюється лише тоді, коли elevated визначається як `full`.
</ParamField>

Примітки:

- `host` за замовчуванням має значення `auto`: пісочниця, коли середовище виконання пісочниці активне для сесії, інакше gateway.
- `host` приймає лише `auto`, `sandbox`, `gateway` або `node`. Це не селектор імені хоста; значення, схожі на імена хостів, відхиляються до запуску команди.
- `auto` — це стандартна стратегія маршрутизації, а не шаблон будь-якого значення. Окремий виклик `host=node` дозволено з `auto`; окремий виклик `host=gateway` дозволено лише коли середовище виконання пісочниці не активне.
- Без додаткової конфігурації `host=auto` усе одно «просто працює»: якщо пісочниці немає, він визначається як `gateway`; якщо пісочниця активна, він залишається в пісочниці.
- `elevated` виходить із пісочниці на налаштований шлях хоста: типово `gateway` або `node`, коли `tools.exec.host=node` (або стандарт сесії — `host=node`). Він доступний лише коли розширений доступ увімкнено для поточної сесії/провайдера.
- Схвалення `gateway`/`node` керуються через `~/.openclaw/exec-approvals.json`.
- `node` потребує спареного Node (супровідної програми або headless-хоста Node).
- Якщо доступно кілька Node, установіть `exec.node` або `tools.exec.node`, щоб вибрати один.
- `exec host=node` — єдиний шлях shell-виконання для Node; застарілу обгортку `nodes.run` видалено.
- `timeout` застосовується до виконання на передньому плані, у фоні, `yieldMs`, gateway, пісочниці та `system.run` Node. Якщо його пропущено, OpenClaw використовує `tools.exec.timeoutSec`; явне `timeout: 0` вимикає таймаут процесу exec для цього виклику.
- На хостах не-Windows exec використовує `SHELL`, коли встановлено; якщо `SHELL` — `fish`, він надає перевагу `bash` (або `sh`)
  з `PATH`, щоб уникнути скриптів, несумісних із fish, а потім повертається до `SHELL`, якщо жодного немає.
- На хостах Windows exec надає перевагу виявленню PowerShell 7 (`pwsh`) (Program Files, ProgramW6432, потім PATH),
  а потім повертається до Windows PowerShell 5.1.
- Виконання на хості (`gateway`/`node`) відхиляє `env.PATH` і перевизначення завантажувача (`LD_*`/`DYLD_*`), щоб
  запобігти підміні бінарних файлів або впровадженню коду.
- OpenClaw встановлює `OPENCLAW_SHELL=exec` у середовищі породженої команди (включно з виконанням у PTY і пісочниці), щоб правила shell/профілю могли виявляти контекст інструмента exec.
- `openclaw channels login` заблоковано з `exec`, оскільки це інтерактивний потік авторизації каналу; запустіть його в терміналі на хості gateway або скористайтеся нативним для каналу інструментом входу з чату, якщо він існує.
- Важливо: пісочниця **типово вимкнена**. Якщо пісочницю вимкнено, неявний `host=auto`
  визначається як `gateway`. Явний `host=sandbox` усе одно завершується закрито, замість тихого
  запуску на хості gateway. Увімкніть пісочницю або використовуйте `host=gateway` зі схваленнями.
- Попередні перевірки скриптів (для поширених помилок shell-синтаксису Python/Node) перевіряють лише файли всередині
  ефективної межі `workdir`. Якщо шлях скрипта визначається поза `workdir`, попередня перевірка для
  цього файлу пропускається.
- Для тривалої роботи, яка починається зараз, запустіть її один раз і покладайтеся на автоматичне
  пробудження після завершення, коли його ввімкнено і команда виводить дані або завершується помилкою.
  Використовуйте `process` для журналів, стану, вводу або втручання; не імітуйте
  планування через цикли sleep, цикли таймаутів або повторне опитування.
- Для роботи, яка має відбутися пізніше або за розкладом, використовуйте cron замість
  шаблонів sleep/затримки в `exec`.

## Конфігурація

- `tools.exec.notifyOnExit` (типово: true): коли true, фонові сесії exec ставлять у чергу системну подію й запитують Heartbeat після завершення.
- `tools.exec.approvalRunningNoticeMs` (типово: 10000): надсилати одне сповіщення "running", коли exec із вимогою схвалення виконується довше за це значення (0 вимикає).
- `tools.exec.timeoutSec` (типово: 1800): стандартний таймаут exec для кожної команди в секундах. Окремий `timeout` перевизначає його; окремий `timeout: 0` вимикає таймаут процесу exec.
- `tools.exec.host` (типово: `auto`; визначається як `sandbox`, коли середовище виконання пісочниці активне, інакше `gateway`)
- `tools.exec.security` (типово: `deny` для пісочниці, `full` для gateway + node, коли не встановлено)
- `tools.exec.ask` (типово: `off`)
- Exec на хості без схвалення є стандартним для gateway + node. Якщо вам потрібні схвалення/поведінка allowlist, посильте і `tools.exec.*`, і хостовий `~/.openclaw/exec-approvals.json`; див. [схвалення Exec](/uk/tools/exec-approvals#yolo-mode-no-approval).
- YOLO походить зі стандартів політики хоста (`security=full`, `ask=off`), а не з `host=auto`. Якщо потрібно примусово маршрутизувати на gateway або node, установіть `tools.exec.host` або використайте `/exec host=...`.
- У режимі `security=full` плюс `ask=off` exec на хості напряму дотримується налаштованої політики; немає додаткового евристичного префільтра приховування команд або шару відхилення попередньої перевірки скриптів.
- `tools.exec.node` (типово: не встановлено)
- `tools.exec.strictInlineEval` (типово: false): коли true, форми вбудованого eval інтерпретатора, як-от `python -c`, `node -e`, `ruby -e`, `perl -e`, `php -r`, `lua -e` і `osascript -e`, завжди потребують явного схвалення. `allow-always` усе ще може зберігати доброякісні виклики інтерпретатора/скриптів, але форми inline-eval усе одно запитують щоразу.
- `tools.exec.commandHighlighting` (типово: false): коли true, запити схвалення можуть підсвічувати отримані парсером ділянки команд у тексті команди. Установіть `true` глобально або для окремого агента, щоб увімкнути підсвічування тексту команд без зміни політики схвалення exec.
- `tools.exec.pathPrepend`: список каталогів, які потрібно додати на початок `PATH` для запусків exec (лише gateway + пісочниця).
- `tools.exec.safeBins`: безпечні бінарні файли лише для stdin, які можуть виконуватися без явних записів allowlist. Подробиці поведінки див. у [безпечних бінарних файлах](/uk/tools/exec-approvals-advanced#safe-bins-stdin-only).
- `tools.exec.safeBinTrustedDirs`: додаткові явні каталоги, довірені для перевірок шляху `safeBins`. Записи `PATH` ніколи автоматично не вважаються довіреними. Вбудовані стандарти — `/bin` і `/usr/bin`.
- `tools.exec.safeBinProfiles`: необов’язкова власна політика argv для кожного безпечного бінарного файла (`minPositional`, `maxPositional`, `allowedValueFlags`, `deniedFlags`).

Приклад:

```json5
{
  tools: {
    exec: {
      pathPrepend: ["~/bin", "/opt/oss/bin"],
    },
  },
}
```

### Обробка PATH

- `host=gateway`: об’єднує `PATH` вашого login-shell у середовище exec. Перевизначення `env.PATH`
  відхиляються для виконання на хості. Сам демон усе ще працює з мінімальним `PATH`:
  - macOS: `/opt/homebrew/bin`, `/usr/local/bin`, `/usr/bin`, `/bin`
  - Linux: `/usr/local/bin`, `/usr/bin`, `/bin`
- `host=sandbox`: запускає `sh -lc` (login shell) усередині контейнера, тому `/etc/profile` може скинути `PATH`.
  OpenClaw додає `env.PATH` на початок після завантаження профілю через внутрішню змінну середовища (без shell-інтерполяції);
  `tools.exec.pathPrepend` також застосовується тут.
- `host=node`: до Node надсилаються лише незаблоковані перевизначення середовища, які ви передаєте. Перевизначення `env.PATH`
  відхиляються для виконання на хості та ігноруються хостами Node. Якщо вам потрібні додаткові записи PATH на Node,
  налаштуйте середовище служби хоста Node (systemd/launchd) або встановіть інструменти у стандартні розташування.

Прив’язка Node для окремого агента (використовуйте індекс списку агентів у конфігурації):

```bash
openclaw config get agents.list
openclaw config set agents.list[0].tools.exec.node "node-id-or-name"
```

Інтерфейс керування: вкладка Nodes містить невелику панель "Exec node binding" для тих самих налаштувань.

## Перевизначення сесії (`/exec`)

Використовуйте `/exec`, щоб установити стандартні значення **для окремої сесії** для `host`, `security`, `ask` і `node`.
Надішліть `/exec` без аргументів, щоб показати поточні значення.

Приклад:

```
/exec host=auto security=allowlist ask=on-miss node=mac-1
```

## Модель авторизації

`/exec` враховується лише для **авторизованих відправників** (allowlist/спарювання каналів плюс `commands.useAccessGroups`).
Вона оновлює **лише стан сесії** і не записує конфігурацію. Щоб жорстко вимкнути exec, забороніть його через політику
інструментів (`tools.deny: ["exec"]` або для окремого агента). Схвалення хоста все одно застосовуються, якщо ви явно не встановите
`security=full` і `ask=off`.

## Схвалення Exec (супровідна програма / хост Node)

Агенти в пісочниці можуть вимагати схвалення для кожного запиту перед запуском `exec` на хості gateway або Node.
Див. [схвалення Exec](/uk/tools/exec-approvals) для політики, allowlist і потоку UI.

Коли потрібні схвалення, інструмент exec негайно повертає
`status: "approval-pending"` та ідентифікатор схвалення. Після схвалення (або відхилення / таймауту)
Gateway надсилає системні події (`Exec finished` / `Exec denied`). Якщо команда все ще
виконується після `tools.exec.approvalRunningNoticeMs`, надсилається одне сповіщення `Exec running`.
У каналах із нативними картками/кнопками схвалення агент має спершу покладатися на цей
нативний UI й включати ручну команду `/approve` лише тоді, коли результат інструмента
явно каже, що схвалення в чаті недоступні або ручне схвалення є
єдиним шляхом.

## Allowlist + безпечні бінарні файли

Ручне застосування allowlist зіставляє globs визначених шляхів бінарних файлів і globs простих імен команд.
Прості імена зіставляються лише з командами, викликаними через PATH, тому `rg` може відповідати
`/opt/homebrew/bin/rg`, коли команда — `rg`, але не `./rg` або `/tmp/rg`.
Коли `security=allowlist`, shell-команди автоматично дозволяються лише якщо кожен сегмент pipeline
є в allowlist або є безпечним бінарним файлом. Ланцюжки (`;`, `&&`, `||`) і перенаправлення
відхиляються в режимі allowlist, якщо кожен сегмент верхнього рівня не задовольняє
allowlist (включно з безпечними бінарними файлами). Перенаправлення залишаються непідтримуваними.
Стійка довіра `allow-always` не обходить це правило: ланцюжкова команда все одно потребує, щоб кожен
сегмент верхнього рівня збігався.

`autoAllowSkills` — це окремий зручний шлях у схваленнях exec. Це не те саме, що
ручні записи allowlist шляхів. Для строгого явного довіряння залиште `autoAllowSkills` вимкненим.

Використовуйте ці два елементи керування для різних завдань:

- `tools.exec.safeBins`: малі фільтри потоків лише зі stdin.
- `tools.exec.safeBinTrustedDirs`: явні додаткові довірені каталоги для шляхів виконуваних файлів safe-bin.
- `tools.exec.safeBinProfiles`: явна політика argv для користувацьких safe bins.
- список дозволених: явна довіра до шляхів виконуваних файлів.

Не розглядайте `safeBins` як загальний список дозволених і не додавайте бінарні файли інтерпретаторів/середовищ виконання (наприклад, `python3`, `node`, `ruby`, `bash`). Якщо вони вам потрібні, використовуйте явні записи списку дозволених і залишайте запити на схвалення ввімкненими.
`openclaw security audit` попереджає, коли записи інтерпретаторів/середовищ виконання в `safeBins` не мають явних профілів, а `openclaw doctor --fix` може згенерувати каркас відсутніх користувацьких записів `safeBinProfiles`.
`openclaw security audit` і `openclaw doctor` також попереджають, коли ви явно додаєте bins із широкою поведінкою, як-от `jq`, назад у `safeBins`.
Якщо ви явно додаєте інтерпретатори до списку дозволених, увімкніть `tools.exec.strictInlineEval`, щоб форми inline code-eval і надалі вимагали нового схвалення.

Повні відомості про політику та приклади див. у [схваленнях Exec](/uk/tools/exec-approvals-advanced#safe-bins-stdin-only) і [Safe bins проти списку дозволених](/uk/tools/exec-approvals-advanced#safe-bins-versus-allowlist).

## Приклади

Передній план:

```json
{ "tool": "exec", "command": "ls -la" }
```

Фоновий режим + опитування:

```json
{"tool":"exec","command":"npm run build","yieldMs":1000}
{"tool":"process","action":"poll","sessionId":"<id>"}
```

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

Надсилання клавіш (у стилі tmux):

```json
{"tool":"process","action":"send-keys","sessionId":"<id>","keys":["Enter"]}
{"tool":"process","action":"send-keys","sessionId":"<id>","keys":["C-c"]}
{"tool":"process","action":"send-keys","sessionId":"<id>","keys":["Up","Up","Enter"]}
```

Submit (надсилати лише CR):

```json
{ "tool": "process", "action": "submit", "sessionId": "<id>" }
```

Вставлення (bracketed за замовчуванням):

```json
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }
```

## apply_patch

`apply_patch` — це підінструмент `exec` для структурованих багатофайлових редагувань.
Він увімкнений за замовчуванням для моделей OpenAI і OpenAI Codex. Використовуйте конфігурацію лише тоді,
коли хочете вимкнути його або обмежити певними моделями:

```json5
{
  tools: {
    exec: {
      applyPatch: { workspaceOnly: true, allowModels: ["gpt-5.5"] },
    },
  },
}
```

Примітки:

- Доступно лише для моделей OpenAI/OpenAI Codex.
- Політика інструментів усе ще застосовується; `allow: ["write"]` неявно дозволяє `apply_patch`.
- `deny: ["write"]` не забороняє `apply_patch`; явно забороніть `apply_patch` або використовуйте `deny: ["group:fs"]`, коли записи патчів також мають бути заблоковані.
- Конфігурація розташована в `tools.exec.applyPatch`.
- `tools.exec.applyPatch.enabled` за замовчуванням має значення `true`; задайте `false`, щоб вимкнути інструмент для моделей OpenAI.
- `tools.exec.applyPatch.workspaceOnly` за замовчуванням має значення `true` (обмежено робочою областю). Задавайте `false` лише якщо ви навмисно хочете, щоб `apply_patch` записував/видаляв поза каталогом робочої області.

## Пов’язане

- [Схвалення Exec](/uk/tools/exec-approvals) — шлюзи схвалення для команд оболонки
- [Пісочниця](/uk/gateway/sandboxing) — запуск команд у ізольованих середовищах
- [Фоновий процес](/uk/gateway/background-process) — довготривалий exec та інструмент process
- [Безпека](/uk/gateway/security) — політика інструментів і підвищений доступ
