Інструмент exec
Запускає shell-команди в робочому просторі. Підтримує виконання на передньому плані й у фоновому режимі черезprocess.
Якщо process заборонено, exec працює синхронно та ігнорує yieldMs/background.
Фонові сесії прив’язані до кожного агента; process бачить лише сесії того самого агента.
Параметри
command(обов’язковий)workdir(типово: cwd)env(перевизначення key/value)yieldMs(типово 10000): автоматично переводить у фон після затримкиbackground(bool): негайно запускати у фоновому режиміtimeout(секунди, типово 1800): примусово завершує після спливу часуpty(bool): запуск у псевдотерміналі, якщо доступно (CLI лише з TTY, coding agents, terminal UI)host(auto | sandbox | gateway | node): де виконуватиsecurity(deny | allowlist | full): режим застосування політик дляgateway/nodeask(off | on-miss | always): запити на схвалення дляgateway/nodenode(string): id/ім’я вузла дляhost=nodeelevated(bool): запросити підвищений режим (вихід із sandbox на налаштований шлях хоста);security=fullпримусово вмикається лише тоді, колиelevatedрозв’язується якfull
hostтипово має значенняauto: sandbox, якщо для сесії активне sandbox-середовище, інакше gateway.auto— це типова стратегія маршрутизації, а не wildcard. Для окремого виклику дозволеноhost=nodeзauto;host=gatewayдля окремого виклику дозволено лише тоді, коли sandbox-середовище не активне.- Без додаткового налаштування
host=autoвсе одно «просто працює»: без sandbox він розв’язується вgateway; за активного sandbox залишається в sandbox. elevatedвиходить із sandbox на налаштований шлях хоста: типовоgateway, абоnode, якщоtools.exec.host=node(або типовим для сесії єhost=node). Доступно лише тоді, коли для поточної сесії/провайдера ввімкнено elevated access.- Схвалення для
gateway/nodeкеруються через~/.openclaw/exec-approvals.json. - Для
nodeпотрібен спарений вузол (companion app або headless node host). - Якщо доступно кілька вузлів, укажіть
exec.nodeабоtools.exec.node, щоб вибрати один. exec host=node— єдиний шлях виконання shell-команд для вузлів; застарілу обгорткуnodes.runвидалено.- На хостах, відмінних від Windows, exec використовує
SHELL, якщо його задано; якщоSHELL— цеfish, він віддає перевагуbash(абоsh) зPATH, щоб уникнути несумісних із fish скриптів, і лише потім повертається доSHELL, якщо жодного з них немає. - На хостах Windows exec спочатку намагається знайти PowerShell 7 (
pwsh) (Program Files, ProgramW6432, потім PATH), а потім переходить до Windows PowerShell 5.1. - Виконання на хості (
gateway/node) відхиляєenv.PATHі перевизначення завантажувача (LD_*/DYLD_*), щоб запобігти підміні бінарних файлів або ін’єкції коду. - OpenClaw установлює
OPENCLAW_SHELL=execу середовищі запущеної команди (зокрема для PTY та виконання в sandbox), щоб правила shell/profile могли визначати контекст exec tool. - Важливо: sandboxing типово вимкнено. Якщо sandboxing вимкнено, неявний
host=autoрозв’язується вgateway. Явнийhost=sandboxу такому разі все одно завершується без виконання, а не тихо запускається на gateway host. Увімкніть sandboxing або використовуйтеhost=gatewayзі схваленнями. - Перевірки preflight для скриптів (щодо поширених синтаксичних помилок Python/Node у shell) аналізують лише файли в межах ефективної межі
workdir. Якщо шлях до скрипта розв’язується позаworkdir, preflight для цього файла пропускається. - Для довготривалої роботи, яку потрібно почати зараз, запускайте її один раз і покладайтеся на автоматичне пробудження після завершення, якщо його ввімкнено і команда виводить результат або завершується з помилкою.
Використовуйте
processдля логів, статусу, введення або втручання; не імітуйте планування через цикли sleep, цикли timeout або повторне опитування. - Для роботи, яка має виконатися пізніше або за розкладом, використовуйте cron, а не шаблони sleep/delay в
exec.
Конфігурація
tools.exec.notifyOnExit(типово: true): якщо true, фонові сесії exec ставлять системну подію в чергу та запитують Heartbeat після завершення.tools.exec.approvalRunningNoticeMs(типово: 10000): надсилає одне сповіщення «running», якщо exec, що потребує схвалення, виконується довше за цей час (0 вимикає).tools.exec.host(типово:auto; розв’язується вsandbox, якщо sandbox-середовище активне, і вgatewayінакше)tools.exec.security(типово:denyдля sandbox,fullдля gateway і node, якщо не задано)tools.exec.ask(типово:off)- Виконання на хості без схвалення — типовий режим для gateway і node. Якщо вам потрібні схвалення/поведінка allowlist, посильте налаштування і в
tools.exec.*, і в~/.openclaw/exec-approvals.jsonна хості; див. Схвалення exec. - Режим YOLO походить із типових налаштувань політики хоста (
security=full,ask=off), а не зhost=auto. Якщо потрібно примусово використовувати gateway або node, задайтеtools.exec.hostабо використовуйте/exec host=.... - У режимі
security=fullразом ізask=offвиконання на хості безпосередньо дотримується налаштованої політики; додаткового евристичного попереднього фільтра для обфускації команд або шару відхилення script-preflight немає. tools.exec.node(типово: не задано)tools.exec.strictInlineEval(типово: false): якщо true, вбудовані форми eval інтерпретаторів, такі якpython -c,node -e,ruby -e,perl -e,php -r,lua -eіosascript -e, завжди потребують явного схвалення.allow-alwaysусе ще може зберігати довіру до безпечних викликів інтерпретатора/скрипта, але форми inline-eval все одно запитуватимуть схвалення щоразу.tools.exec.pathPrepend: список каталогів, які потрібно додати на початокPATHдля запусків exec (лише gateway + sandbox).tools.exec.safeBins: безпечні бінарні файли лише для stdin, які можуть запускатися без явних записів у allowlist. Докладніше див. у Safe bins.tools.exec.safeBinTrustedDirs: додаткові явно довірені каталоги для перевірок шляхів виконуваних файлів ізsafeBins. ЗаписиPATHніколи не вважаються довіреними автоматично. Вбудовані типові значення:/binі/usr/bin.tools.exec.safeBinProfiles: необов’язкова користувацька політика argv для кожного safe bin (minPositional,maxPositional,allowedValueFlags,deniedFlags).
Обробка PATH
host=gateway: об’єднуєPATHвашої login-shell із середовищем exec. Перевизначенняenv.PATHвідхиляються для виконання на хості. Сам daemon при цьому все одно працює з мінімальнимPATH:- macOS:
/opt/homebrew/bin,/usr/local/bin,/usr/bin,/bin - Linux:
/usr/local/bin,/usr/bin,/bin
- macOS:
host=sandbox: запускаєsh -lc(login shell) усередині контейнера, тому/etc/profileможе скидатиPATH. OpenClaw додаєenv.PATHна початок після завантаження profile через внутрішню змінну середовища (без shell-інтерполяції);tools.exec.pathPrependтакож застосовується тут.host=node: до вузла надсилаються лише не заблоковані перевизначення середовища, які ви передали. Перевизначенняenv.PATHвідхиляються для виконання на хості та ігноруються вузловими хостами. Якщо вам потрібні додаткові записи PATH на вузлі, налаштуйте середовище служби вузлового хоста (systemd/launchd) або встановлюйте інструменти у стандартні розташування.
Перевизначення для сесії (/exec)
Використовуйте /exec, щоб задати типові значення для поточної сесії для host, security, ask і node.
Надішліть /exec без аргументів, щоб показати поточні значення.
Приклад:
Модель авторизації
/exec обробляється лише для авторизованих відправників (allowlist каналів/спарювання плюс commands.useAccessGroups).
Він оновлює лише стан сесії і не записує конфігурацію. Щоб повністю вимкнути exec, забороніть його через
політику інструментів (tools.deny: ["exec"] або на рівні агента). Схвалення хоста все одно застосовуються, якщо ви явно не встановите
security=full і ask=off.
Схвалення exec (companion app / node host)
Агенти в sandbox можуть вимагати схвалення для кожного запиту перед тим, якexec запуститься на хості gateway або node.
Докладніше про політику, allowlist і UI-потік див. у Схвалення exec.
Коли потрібні схвалення, інструмент exec повертається негайно зі
status: "approval-pending" та id схвалення. Після схвалення (або відхилення / спливу часу очікування)
Gateway надсилає системні події (Exec finished / Exec denied). Якщо команда все ще
виконується після tools.exec.approvalRunningNoticeMs, надсилається одне сповіщення Exec running.
У каналах із нативними картками/кнопками схвалення агент повинен насамперед покладатися на цей
нативний UI і додавати ручну команду /approve лише тоді, коли в результаті інструмента
явно сказано, що схвалення через чат недоступні або ручне схвалення —
єдиний шлях.
Allowlist + safe bins
Ручне застосування allowlist зіставляє лише розв’язані шляхи до бінарних файлів (без зіставлення за basename). Колиsecurity=allowlist, shell-команди автоматично дозволяються лише тоді, коли кожен сегмент конвеєра
є в allowlist або є safe bin. Ланцюжки (;, &&, ||) і перенаправлення відхиляються в
режимі allowlist, якщо не кожен top-level сегмент задовольняє allowlist (включно з safe bins).
Перенаправлення все ще не підтримуються.
Тривала довіра allow-always не обходить це правило: ланцюжкова команда все одно вимагає, щоб кожен
top-level сегмент відповідав умовам.
autoAllowSkills — це окремий зручний шлях у механізмі схвалень exec. Це не те саме, що
ручні записи allowlist за шляхом. Для строгої явної довіри залишайте autoAllowSkills вимкненим.
Використовуйте ці два механізми для різних завдань:
tools.exec.safeBins: невеликі потокові фільтри лише для stdin.tools.exec.safeBinTrustedDirs: явні додаткові довірені каталоги для шляхів виконуваних файлів safe bin.tools.exec.safeBinProfiles: явна політика argv для користувацьких safe bins.- allowlist: явна довіра до шляхів виконуваних файлів.
safeBins як універсальний allowlist і не додавайте туди бінарні файли інтерпретаторів/середовищ виконання (наприклад python3, node, ruby, bash). Якщо вони потрібні, використовуйте явні записи allowlist і залишайте запити на схвалення ввімкненими.
openclaw security audit попереджає, коли в записах safeBins для інтерпретаторів/середовищ виконання бракує явних профілів, а openclaw doctor --fix може створити відсутні записи safeBinProfiles.
openclaw security audit і openclaw doctor також попереджають, коли ви явно знову додаєте до safeBins бінарні файли з широкою поведінкою, такі як jq.
Якщо ви явно додаєте інтерпретатори в allowlist, увімкніть tools.exec.strictInlineEval, щоб форми inline code-eval усе одно вимагали нового схвалення.
Повні подробиці політики та приклади див. у Схвалення exec і Safe bins versus allowlist.
Приклади
Передній план:apply_patch
apply_patch — це підінструмент exec для структурованих багатофайлових редагувань.
Він типово ввімкнений для моделей OpenAI та OpenAI Codex. Використовуйте конфігурацію лише
тоді, коли хочете вимкнути його або обмежити певними моделями:
- Доступно лише для моделей OpenAI/OpenAI Codex.
- Політика інструментів усе одно застосовується;
allow: ["write"]неявно дозволяєapply_patch. - Конфігурація розташована в
tools.exec.applyPatch. tools.exec.applyPatch.enabledтипово має значенняtrue; установітьfalse, щоб вимкнути інструмент для моделей OpenAI.tools.exec.applyPatch.workspaceOnlyтипово має значенняtrue(обмежено робочим простором). Установлюйтеfalseлише тоді, коли ви свідомо хочете, щобapply_patchзаписував/видаляв файли поза каталогом робочого простору.
Пов’язане
- Схвалення exec — шлюзи схвалення для shell-команд
- Sandboxing — запуск команд у sandbox-середовищах
- Фоновий процес — довготривалий exec та інструмент process
- Безпека — політика інструментів і elevated access