exec — це змінювана поверхня оболонки: команди можуть створювати, редагувати або видаляти файли всюди, де це дозволяє вибраний хост або файлова система пісочниці. Вимкнення файлових інструментів OpenClaw, як-от write, edit або apply_patch, не робить exec доступним лише для читання.
Підтримує виконання на передньому плані та у фоні через process. Якщо process заборонено, exec виконується синхронно та ігнорує yieldMs/background.
Фонові сеанси обмежені окремим агентом; process бачить лише сеанси того самого агента.
Параметри
Команда оболонки для запуску.
Робочий каталог для команди.
Перевизначення середовища у форматі ключ/значення, об’єднані поверх успадкованого середовища.
Автоматично перевести команду у фон після цієї затримки (мс).
Негайно перевести команду у фон замість очікування
yieldMs.Перевизначити налаштований тайм-аут exec для цього виклику. Установлюйте
timeout: 0 лише тоді, коли команда має виконуватися без тайм-ауту процесу exec.Запускати в псевдотерміналі, коли доступно. Використовуйте для CLI лише з TTY, агентів кодування та термінальних UI.
Де виконувати.
auto розв’язується як sandbox, коли активне середовище виконання пісочниці, і як gateway в інших випадках.Ігнорується для звичайних викликів інструментів. Безпека
gateway / node керується
tools.exec.security і файлом схвалень хоста; підвищений режим може
примусово встановити security=full лише тоді, коли оператор явно надає підвищений доступ.Базовий режим запиту береться з
tools.exec.ask і схвалень хоста.
Для модельних викликів із каналу ask на рівні виклику ігнорується, коли
ефективний запит хоста дорівнює off; інакше він може лише посилити режим
до суворішого. Довірені внутрішні/API-викликачі, які створюють інструменти exec з
явним значенням ask, не змінюються.Ідентифікатор/назва Node, коли
host=node.Запитати підвищений режим — вийти з пісочниці на налаштований шлях хоста.
security=full примусово встановлюється лише тоді, коли elevated розв’язується як full.hostза замовчуванням має значенняauto: пісочниця, коли середовище виконання пісочниці активне для сеансу, інакше Gateway.hostприймає лишеauto,sandbox,gatewayабоnode. Це не селектор імені хоста; значення, схожі на імена хостів, відхиляються до запуску команди.auto— це стандартна стратегія маршрутизації, а не wildcard.host=nodeна рівні виклику дозволено зauto;host=gatewayна рівні виклику дозволено лише тоді, коли не активне середовище виконання пісочниці.tools.exec.mode— це нормалізований регулятор політики. Значення:deny,allowlist,ask,autoіfull.autoзапускає детерміновані збіги списку дозволених/безпечних бінарних файлів напряму та маршрутизує всі решту випадків схвалення exec через нативного авторецензента OpenClaw перед запитом до людини.ask/ask=alwaysвсе ще щоразу запитує людину.- Без додаткової конфігурації
host=autoвсе одно “просто працює”: якщо пісочниці немає, він розв’язується якgateway; якщо пісочниця активна, він залишається в пісочниці. elevatedвиходить із пісочниці на налаштований шлях хоста:gatewayза замовчуванням абоnode, колиtools.exec.host=node(або типовий сеанс маєhost=node). Це доступно лише тоді, коли підвищений доступ увімкнено для поточного сеансу/провайдера.- Схвалення
gateway/nodeкеруються файлом схвалень хоста. nodeпотребує спареного вузла (супровідного застосунку або безголового хоста вузла).- Якщо доступно кілька вузлів, установіть
exec.nodeабоtools.exec.node, щоб вибрати один. exec host=node— це єдиний шлях виконання оболонки для вузлів; застарілу обгорткуnodes.runвилучено.timeoutзастосовується до виконання на передньому плані, у фоні,yieldMs, Gateway, пісочниці таsystem.runNode. Якщо його пропущено, 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-хостах не Windows команди exec bash і zsh використовують стартовий знімок. OpenClaw захоплює придатні до source
псевдоніми/функції та невеликий безпечний набір середовища з файлів запуску оболонки в
$OPENCLAW_STATE_DIR/cache/shell-snapshots/, а потім підключає цей знімок через source перед кожною командою exec. Змінні, схожі на секрети, виключаються; exec у пісочниці та Node не використовує цей знімок. УстановітьOPENCLAW_EXEC_SHELL_SNAPSHOT=0у середовищі процесу Gateway, щоб вимкнути цей шлях знімка. - Виконання на хості (
gateway/node) відхиляєenv.PATHі перевизначення завантажувача (LD_*/DYLD_*), щоб запобігти підміні бінарних файлів або ін’єкції коду. - OpenClaw встановлює
OPENCLAW_SHELL=execу середовищі породженої команди (включно з виконанням PTY і пісочницею), щоб правила оболонки/профілю могли виявляти контекст інструмента exec. - Для запусків із каналу OpenClaw також надає вузьке JSON-навантаження ідентичності відправника/чату в
OPENCLAW_CHANNEL_CONTEXT, коли канал надав ці ідентифікатори. openclaw channels loginзаблоковано зexec, оскільки це інтерактивний потік автентифікації каналу; запустіть його в терміналі на Gateway-хості або використайте нативний для каналу інструмент входу з чату, коли він існує.- Важливо: пісочниця вимкнена за замовчуванням. Якщо пісочницю вимкнено, неявний
host=autoрозв’язується якgateway. Явнийhost=sandboxвсе ще відмовляє закрито замість тихого запуску на Gateway-хості. Увімкніть пісочницю або використовуйтеhost=gatewayзі схваленнями. - Попередні перевірки скриптів (для поширених помилок синтаксису оболонки Python/Node) перевіряють лише файли всередині
ефективної межі
workdir. Якщо шлях скрипта розв’язується за межамиworkdir, попередня перевірка для цього файла пропускається. - Для довготривалої роботи, що починається зараз, запустіть її один раз і покладайтеся на автоматичне
пробудження після завершення, коли воно ввімкнене і команда виводить дані або завершується з помилкою.
Використовуйте
processдля журналів, стану, введення або втручання; не імітуйте планування циклами sleep, циклами тайм-аутів або повторним опитуванням. - Для роботи, яка має відбутися пізніше або за розкладом, використовуйте Cron замість
шаблонів sleep/затримки з
exec.
Конфігурація
tools.exec.notifyOnExit(за замовчуванням: true): коли true, фонові сеанси exec ставлять системну подію в чергу та запитують Heartbeat після виходу.tools.exec.approvalRunningNoticeMs(за замовчуванням: 10000): надсилати одне сповіщення “виконується”, коли 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. Якщо вам потрібна поведінка схвалень/списку дозволених, посильте і
tools.exec.*, і файл схвалень хоста; див. Схвалення exec. - YOLO походить зі стандартних значень політики хоста (
security=full,ask=off), а не зhost=auto. Якщо ви хочете примусово встановити маршрутизацію Gateway або Node, установітьtools.exec.hostабо використайте/exec host=.... - У режимі
security=fullплюсask=offexec на хості безпосередньо дотримується налаштованої політики; немає додаткового евристичного префільтра обфускації команд або шару відхилення попередньої перевірки скриптів. tools.exec.node(за замовчуванням: не встановлено)tools.exec.strictInlineEval(за замовчуванням: false): коли true, inline-форми eval інтерпретатора, як-отpython -c,node -e,ruby -e,perl -e,php -r,lua -eіosascript -e, потребують рецензента або явного схвалення. Уmode=autoзвичайний шлях схвалення exec може дозволити нативному авторецензенту дозволити явно низькоризикову одноразову команду; прямі викликиsystem.runна Node-хості все одно потребують явного схвалення, бо вони не можуть передати команду на маршрут схвалення людиною. Якщо рецензент запитує, запит переходить до людини.allow-alwaysвсе ще може зберігати доброякісні виклики інтерпретатора/скрипта, але inline-форми eval не стають довговічними правилами дозволу.tools.exec.commandHighlighting(за замовчуванням: false): коли true, запити схвалення можуть підсвічувати отримані парсером фрагменти команд у тексті команди. Установітьtrueглобально або для кожного агента, щоб увімкнути підсвічування тексту команди без зміни політики схвалення exec.tools.exec.pathPrepend: список каталогів, які потрібно додати на початокPATHдля запусків exec (лише Gateway + пісочниця).tools.exec.safeBins: stdin-only безпечні бінарні файли, які можуть запускатися без явних записів у списку дозволених. Докладніше про поведінку див. Безпечні бінарні файли.tools.exec.safeBinTrustedDirs: додаткові явні каталоги, яким довіряють для перевірок шляхівsafeBins. ЗаписиPATHніколи автоматично не вважаються довіреними. Вбудовані типові значення:/binі/usr/bin.tools.exec.safeBinProfiles: необов’язкова власна політика argv для кожного безпечного бінарного файла (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- Щоб запобігти перевизначенню пріоритетних шляхів конфігурацією оболонки користувача (як-от
~/.zshenvабо/etc/zshenv) під час запуску, записиtools.exec.pathPrependбезпечно додаються на початок остаточногоPATHвсередині команди оболонки безпосередньо перед виконанням.
- Щоб запобігти перевизначенню пріоритетних шляхів конфігурацією оболонки користувача (як-от
- macOS:
host=sandbox: запускаєsh -lc(login shell) всередині контейнера, тому/etc/profileможе скинутиPATH. OpenClaw додаєenv.PATHна початок після підключення профілю через внутрішню змінну середовища (без інтерполяції оболонки);tools.exec.pathPrependтакож застосовується тут.host=node: на вузол надсилаються лише неблоковані перевизначення середовища, які ви передаєте. Перевизначенняenv.PATHвідхиляються для виконання на хості та ігноруються Node-хостами. Якщо вам потрібні додаткові записи PATH на вузлі, налаштуйте середовище служби Node-хоста (systemd/launchd) або встановіть інструменти в стандартні місця.
Перевизначення сеансу (/exec)
Використовуйте /exec, щоб установити для кожного сеансу типові значення для host, security, ask і node.
Надішліть /exec без аргументів, щоб показати поточні значення.
Приклад:
Модель авторизації
/exec виконується лише для авторизованих відправників (списки дозволених каналів/сполучення плюс commands.useAccessGroups).
Він оновлює лише стан сесії і не записує конфігурацію. Авторизовані відправники зовнішніх каналів можуть
задати ці стандартні параметри сесії. Внутрішнім клієнтам gateway/webchat потрібен operator.admin, щоб зберегти їх.
Щоб жорстко вимкнути exec, забороніть його через політику інструментів (tools.deny: ["exec"] або для окремого агента). Схвалення хоста
все одно застосовуються, якщо ви явно не задасте security=full і ask=off.
Схвалення exec (супровідний застосунок / хост Node)
Агенти в пісочниці можуть вимагати схвалення для кожного запиту перед тим, якexec запуститься на gateway або хості Node.
Див. Схвалення exec щодо політики, списку дозволених і потоку UI.
Коли потрібні схвалення, інструмент exec негайно повертає
status: "approval-pending" та id схвалення. Після схвалення (або відхилення / тайм-ауту)
Gateway надсилає системні події прогресу й завершення команди лише для схвалених запусків
(Exec running / Exec finished). Відхилені або прострочені схвалення є кінцевими й не
пробуджують сесію агента системною подією відхилення.
У каналах із нативними картками/кнопками схвалення агент має спершу покладатися на цей
нативний UI і додавати ручну команду /approve лише тоді, коли результат інструмента
явно повідомляє, що схвалення в чаті недоступні або ручне схвалення є
єдиним шляхом.
Список дозволених + безпечні бінарні файли
Ручне застосування списку дозволених зіставляє globs розв’язаних шляхів до бінарних файлів і globs простих імен команд. Прості імена збігаються лише з командами, викликаними через PATH, томуrg може збігатися з
/opt/homebrew/bin/rg, коли команда — rg, але не з ./rg або /tmp/rg.
Коли security=allowlist, команди shell автоматично дозволяються лише якщо кожен сегмент конвеєра
є в списку дозволених або є безпечним бінарним файлом. Ланцюжки (;, &&, ||) і перенаправлення
відхиляються в режимі списку дозволених, якщо кожен сегмент верхнього рівня не задовольняє
список дозволених (включно з безпечними бінарними файлами). Перенаправлення залишаються непідтримуваними.
Тривала довіра allow-always не обходить це правило: ланцюжкова команда все одно потребує збігу кожного
сегмента верхнього рівня.
autoAllowSkills — це окремий зручний шлях у схваленнях exec. Це не те саме, що
ручні записи списку дозволених шляхів. Для суворої явної довіри залишайте autoAllowSkills вимкненим.
Використовуйте ці два елементи керування для різних завдань:
tools.exec.safeBins: малі потокові фільтри лише зі stdin.tools.exec.safeBinTrustedDirs: явні додаткові довірені каталоги для шляхів виконуваних безпечних бінарних файлів.tools.exec.safeBinProfiles: явна політика argv для користувацьких безпечних бінарних файлів.- список дозволених: явна довіра до шляхів виконуваних файлів.
safeBins як загальний список дозволених і не додавайте бінарні файли інтерпретаторів/середовищ виконання (наприклад, python3, node, ruby, bash). Якщо вони потрібні, використовуйте явні записи списку дозволених і залишайте запити схвалення ввімкненими.
openclaw security audit попереджає, коли записи safeBins для інтерпретаторів/середовищ виконання не мають явних профілів, а openclaw doctor --fix може створити каркас відсутніх користувацьких записів safeBinProfiles.
openclaw security audit і openclaw doctor також попереджають, коли ви явно додаєте назад до safeBins бінарні файли широкої поведінки, як-от jq.
Якщо ви явно додаєте інтерпретатори до списку дозволених, увімкніть tools.exec.strictInlineEval, щоб форми inline code-eval усе одно вимагали рецензента або явного схвалення.
Повні деталі політики та приклади див. у Схвалення exec і Безпечні бінарні файли порівняно зі списком дозволених.
Приклади
Передній план:apply_patch
apply_patch — це підіструмент exec для структурованих багатофайлових редагувань.
Він увімкнений за замовчуванням для моделей OpenAI і OpenAI Codex. Використовуйте конфігурацію лише
коли хочете вимкнути його або обмежити конкретними моделями:
- Доступно лише для моделей 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 — ворота схвалення для команд shell
- Пісочниця — запуск команд у середовищах пісочниці
- Фоновий процес — довготривалі exec та інструмент process
- Безпека — політика інструментів і підвищений доступ