Інструмент Exec
Запускає shell-команди в робочому просторі. Підтримує виконання на передньому плані й у фоні черезprocess.
Якщо process заборонено, exec виконується синхронно та ігнорує yieldMs/background.
Фонові сесії прив’язані до конкретного агента; process бачить лише сесії того самого агента.
Параметри
command(обов’язково)workdir(типово cwd)env(перевизначення ключ/значення)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/ім’я node дляhost=nodeelevated(bool): запитати режим elevated (вийти із sandbox на налаштований шлях хоста);security=fullпримусово вмикається лише тоді, коли elevated резолюється доfull
hostтипово дорівнюєauto: sandbox, коли для сесії активне sandbox runtime, інакше gateway.auto— це типова стратегія маршрутизації, а не wildcard.host=nodeна рівні окремого виклику дозволено зauto;host=gatewayна рівні окремого виклику дозволено лише тоді, коли sandbox runtime не активний.- Без додаткового config
host=autoвсе одно «просто працює»: без sandbox він резолюється доgateway; із активним sandbox він лишається в sandbox. elevatedвиводить із sandbox на налаштований шлях хоста: типовоgateway, абоnode, колиtools.exec.host=node(або типове значення сесії —host=node). Він доступний лише тоді, коли elevated-доступ увімкнено для поточної сесії/провайдера.- Погодження для
gateway/nodeкеруються через~/.openclaw/exec-approvals.json. nodeпотребує сполученої node (супровідний застосунок або headless-хост node).- Якщо доступно кілька node, задайте
exec.nodeабоtools.exec.node, щоб вибрати одну. exec host=node— це єдиний шлях виконання shell-команд для node; застарілу обгортку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/профілю могли виявляти контекст інструмента exec. - Важливо: sandboxing вимкнено типово. Якщо sandboxing вимкнено, неявний
host=autoрезолюється доgateway. Явнийhost=sandboxусе одно завершується безпечною відмовою замість тихого запуску на хості gateway. Увімкніть sandboxing або використовуйтеhost=gatewayіз погодженнями. - Попередні перевірки скриптів (для типових помилок shell-синтаксису в Python/Node) перевіряють лише файли всередині
межі ефективного
workdir. Якщо шлях до скрипта резолюється позаworkdir, попередня перевірка для цього файлу пропускається. - Для довготривалої роботи, що починається зараз, запустіть її один раз і покладайтеся на автоматичне
пробудження після завершення, якщо воно увімкнене і команда виводить результат або завершується з помилкою.
Використовуйте
processдля журналів, статусу, вводу або втручання; не імітуйте планування через цикли sleep, timeout або повторне опитування. - Для роботи, яка має відбутися пізніше або за розкладом, використовуйте cron замість
шаблонів sleep/delay в
exec.
Config
tools.exec.notifyOnExit(типово: true): коли true, фонові сесії exec ставлять у чергу системну подію й запитують heartbeat після завершення.tools.exec.approvalRunningNoticeMs(типово: 10000): виводити одне повідомлення «виконується», коли exec із погодженням працює довше за це значення (0 вимикає).tools.exec.host(типово:auto; резолюється вsandbox, коли активне sandbox runtime, і вgatewayінакше)tools.exec.security(типово:denyдля sandbox,fullдля gateway + node, якщо не задано)tools.exec.ask(типово:off)- Виконання host exec без погодження є типовим для gateway + node. Якщо вам потрібна поведінка погоджень/allowlist, посильте і
tools.exec.*, і host~/.openclaw/exec-approvals.json; див. Exec approvals. - YOLO походить із типових значень політики хоста (
security=full,ask=off), а не зhost=auto. Якщо хочете примусово маршрутизувати на gateway або node, задайтеtools.exec.hostабо використайте/exec host=.... - У режимі
security=fullплюсask=offhost 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.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відхиляються для виконання на хості. Сам демон усе ще працює з мінімальним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на початок після завантаження профілю через внутрішню env-змінну (без shell-інтерполяції);tools.exec.pathPrependтут теж застосовується.host=node: до node надсилаються лише передані вами перевизначення env, які не заблоковано. Перевизначенняenv.PATHвідхиляються для виконання на хості й ігноруються node-хостами. Якщо вам потрібні додаткові записи PATH на node, налаштуйте середовище служби хоста node (systemd/launchd) або встановіть інструменти у стандартні розташування.
Перевизначення сесії (/exec)
Використовуйте /exec, щоб установлювати типові значення для сесії для host, security, ask і node.
Надішліть /exec без аргументів, щоб побачити поточні значення.
Приклад:
Модель авторизації
/exec обробляється лише для авторизованих відправників (channel allowlists/pairing плюс commands.useAccessGroups).
Він оновлює лише стан сесії і не записує config. Щоб жорстко вимкнути exec, забороніть його через політику
інструментів (tools.deny: ["exec"] або для окремого агента). Погодження хоста все ще застосовуються, якщо ви явно не задасте
security=full і ask=off.
Exec approvals (супровідний застосунок / хост node)
Sandboxed-агенти можуть вимагати погодження для кожного запиту перед тим, якexec запуститься на хості gateway або node.
Див. Exec approvals, щоб дізнатися про політику, allowlist і потік UI.
Коли погодження потрібні, інструмент 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, якщо не кожен сегмент верхнього рівня задовольняє allowlist (включно із safe bins).
Перенаправлення як і раніше не підтримуються.
Постійна довіра allow-always не обходить це правило: команда-ланцюжок усе одно вимагає, щоб кожен
сегмент верхнього рівня відповідав вимогам.
autoAllowSkills — це окремий зручний шлях в exec approvals. Це не те саме, що
ручні записи 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-форми eval коду все одно вимагали нового погодження.
Повні деталі політики та приклади див. у Exec approvals і Safe bins versus allowlist.
Приклади
Передній план:apply_patch
apply_patch — це підінструмент exec для структурованого редагування кількох файлів.
Він увімкнений типово для моделей OpenAI і OpenAI Codex. Використовуйте config лише
коли хочете вимкнути його або обмежити певними моделями:
- Доступний лише для моделей OpenAI/OpenAI Codex.
- Політика інструментів усе ще застосовується;
allow: ["write"]неявно дозволяєapply_patch. - Config знаходиться в
tools.exec.applyPatch. tools.exec.applyPatch.enabledтипово дорівнюєtrue; установітьfalse, щоб вимкнути інструмент для моделей OpenAI.tools.exec.applyPatch.workspaceOnlyтипово дорівнюєtrue(обмеження робочим простором). Установлюйтеfalseлише якщо ви свідомо хочете, щобapply_patchзаписував/видаляв файли поза каталогом робочого простору.
Пов’язане
- Exec Approvals — етапи погодження для shell-команд
- Sandboxing — запуск команд у sandboxed-середовищах
- Background Process — довготривалий exec та інструмент process
- Security — політика інструментів і elevated-доступ