> ## Documentation Index
> Fetch the complete documentation index at: https://openclaw.veiseule.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Инструмент Exec

# Инструмент Exec

Запуск команд оболочки в рабочем пространстве. Поддерживает выполнение на переднем и фоновом плане через `process`.
Если `process` запрещён, `exec` выполняется синхронно и игнорирует `yieldMs`/`background`.
Фоновые сеансы ограничены агентом; `process` видит только сеансы того же агента.

## Параметры

* `command` (обязательно)
* `workdir` (по умолчанию cwd)
* `env` (переопределения ключ/значение)
* `yieldMs` (по умолчанию 10000): автоматический перевод в фон после задержки
* `background` (bool): сразу в фон
* `timeout` (секунды, по умолчанию 1800): завершить по истечении срока
* `pty` (bool): запуск в псевдотерминале при наличии (CLI, работающие только с TTY, кодинговые агенты, терминальные UI)
* `host` (`sandbox | gateway | node`): где выполнять
* `security` (`deny | allowlist | full`): режим принудительного применения для `gateway`/`node`
* `ask` (`off | on-miss | always`): запросы подтверждения для `gateway`/`node`
* `node` (string): id/имя узла для `host=node`
* `elevated` (bool): запрос повышенного режима (хост шлюза Gateway); `security=full` принудительно применяется только когда повышенный режим разрешается в `full`

Примечания:

* `host` по умолчанию равен `sandbox`.
* `elevated` игнорируется, когда sandboxing выключен (exec уже выполняется на хосте).
* Подтверждения `gateway`/`node` контролируются `~/.openclaw/exec-approvals.json`.
* `node` требует сопряжённый узел (сопутствующее приложение или headless хост узла).
* Если доступно несколько узлов, задайте `exec.node` или `tools.exec.node` для выбора одного.
* На хостах, отличных от Windows, exec использует `SHELL` при наличии; если `SHELL` равно `fish`, он предпочитает `bash` (или `sh`)
  из `PATH`, чтобы избежать скриптов, несовместимых с fish, затем откатывается к `SHELL`, если ни один не существует.
* Выполнение на хосте (`gateway`/`node`) отклоняет `env.PATH` и переопределения загрузчика (`LD_*`/`DYLD_*`) для
  предотвращения подмены бинарников или внедрённого кода.
* Важно: sandboxing **по умолчанию выключен**. Если sandboxing выключен, `host=sandbox` выполняется напрямую на
  хосте шлюза Gateway (без контейнера) и **не требует подтверждений**. Чтобы требовать подтверждения, запускайте с
  `host=gateway` и настройте подтверждения exec (или включите sandboxing).

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

* `tools.exec.notifyOnExit` (по умолчанию: true): если true, фоновые сеансы exec ставят системное событие в очередь и запрашивают сигнал keepalive при завершении.
* `tools.exec.approvalRunningNoticeMs` (по умолчанию: 10000): выдаёт одно уведомление «выполняется», если exec с подтверждением выполняется дольше этого времени (0 — отключает).
* `tools.exec.host` (по умолчанию: `sandbox`)
* `tools.exec.security` (по умолчанию: `deny` для sandbox, `allowlist` для Gateway (шлюз) + узла, если не задано)
* `tools.exec.ask` (по умолчанию: `on-miss`)
* `tools.exec.node` (по умолчанию: unset)
* `tools.exec.pathPrepend`: список каталогов для добавления в начало `PATH` при запусках exec.
* `tools.exec.safeBins`: безопасные бинарники «только stdin», которые могут выполняться без явных записей allowlist.

Пример:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  tools: {
    exec: {
      pathPrepend: ["~/bin", "/opt/oss/bin"],
    },
  },
}
```

### Обработка PATH

* `host=gateway`: объединяет `PATH` вашей login-оболочки в окружение 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-оболочку) внутри контейнера, поэтому `/etc/profile` может сбросить `PATH`.
  OpenClaw добавляет `env.PATH` после обработки профиля через внутреннюю переменную окружения (без интерполяции оболочки);
  здесь также применяется `tools.exec.pathPrepend`.
* `host=node`: на узел отправляются только непредотвращённые переопределения окружения, которые вы передаёте. Переопределения `env.PATH`
  отклоняются для выполнения на хосте. Если вам нужны дополнительные записи PATH на узле,
  настройте окружение службы хоста узла (systemd/launchd) или установите инструменты в стандартные расположения.

Привязка узла к агенту (используйте индекс агента из конфига):

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw config get agents.list
openclaw config set agents.list[0].tools.exec.node "node-id-or-name"
```

UI управления: вкладка Nodes включает небольшую панель «Exec node binding» с теми же настройками.

## Переопределения сеанса (`/exec`)

Используйте `/exec` для задания **на уровне сеанса** значений по умолчанию для `host`, `security`, `ask` и `node`.
Отправьте `/exec` без аргументов, чтобы показать текущие значения.

Пример:

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

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

`/exec` учитывается только для **авторизованных отправителей** (allowlist каналов/сопряжение плюс `commands.useAccessGroups`).
Он обновляет **только состояние сеанса** и не записывает конфиг. Чтобы жёстко отключить exec, запретите его через
политику инструментов (`tools.deny: ["exec"]` или для конкретного агента). Подтверждения на хосте всё равно применяются, если вы явно не зададите
`security=full` и `ask=off`.

## Подтверждения Exec (сопутствующее приложение / хост узла)

Агенты в sandbox могут требовать подтверждение для каждого запроса перед тем, как `exec` будет выполнен на хосте шлюза Gateway или хосте узла.
См. [Подтверждения Exec](/tools/exec-approvals) — политика, allowlist и поток UI.

Когда подтверждения требуются, инструмент exec немедленно возвращает
`status: "approval-pending"` и id подтверждения. После подтверждения (или отказа / тайм-аута)
Gateway (шлюз) отправляет системные события (`Exec finished` / `Exec denied`). Если команда всё ещё
выполняется после `tools.exec.approvalRunningNoticeMs`, отправляется одно уведомление `Exec running`.

## Allowlist + безопасные бинарники

Принудительное применение allowlist сопоставляет **только разрешённые пути бинарников** (без сопоставления по имени файла). Когда
`security=allowlist`, команды оболочки автоматически разрешаются только если каждый сегмент конвейера
разрешён allowlist или является безопасным бинарником. Цепочки (`;`, `&&`, `||`) и перенаправления отклоняются в режиме allowlist,
если каждый сегмент верхнего уровня не удовлетворяет allowlist (включая safe bins).
Перенаправления по-прежнему не поддерживаются.

## Примеры

На переднем плане:

```json theme={"theme":{"light":"min-light","dark":"min-dark"}}
{ "tool": "exec", "command": "ls -la" }
```

Фон + опрос:

```json theme={"theme":{"light":"min-light","dark":"min-dark"}}
{"tool":"exec","command":"npm run build","yieldMs":1000}
{"tool":"process","action":"poll","sessionId":"<id>"}
```

Отправка клавиш (в стиле tmux):

```json theme={"theme":{"light":"min-light","dark":"min-dark"}}
{"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"]}
```

Отправить (только CR):

```json theme={"theme":{"light":"min-light","dark":"min-dark"}}
{ "tool": "process", "action": "submit", "sessionId": "<id>" }
```

Вставка (по умолчанию с обрамлением):

```json theme={"theme":{"light":"min-light","dark":"min-dark"}}
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }
```

## apply\_patch (экспериментально)

`apply_patch` — это подинструмент `exec` для структурированных правок в нескольких файлах.
Включите его явно:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  tools: {
    exec: {
      applyPatch: { enabled: true, allowModels: ["gpt-5.2"] },
    },
  },
}
```

Примечания:

* Доступно только для моделей OpenAI/OpenAI Codex.
* Политика инструментов по‑прежнему применяется; `allow: ["exec"]` неявно разрешает `apply_patch`.
* Конфигурация находится в `tools.exec.applyPatch`.
* `tools.exec.applyPatch.workspaceOnly` по умолчанию имеет значение `true` (в пределах workspace). Установите значение `false` только если вы намеренно хотите, чтобы `apply_patch` записывал/удалял файлы за пределами каталога workspace.
