Tools
Інструмент виконання
Запускайте команди оболонки в робочій області. exec — це змінювана поверхня оболонки: команди можуть створювати, редагувати або видаляти файли всюди, де це дозволяє вибраний хост або файлова система пісочниці. Вимкнення файлових інструментів OpenClaw, як-от write, edit або apply_patch, не робить exec доступним лише для читання.
Підтримує виконання на передньому плані та у фоні через process. Якщо process заборонено, exec виконується синхронно та ігнорує yieldMs/background.
Фонові сеанси обмежені окремим агентом; process бачить лише сеанси того самого агента.
Параметри
commandstringrequiredКоманда оболонки для запуску.
workdirstringdefault: cwdРобочий каталог для команди.
envobjectПеревизначення середовища у форматі ключ/значення, об'єднані поверх успадкованого середовища.
yieldMsnumberdefault: 10000Автоматично перевести команду у фон після цієї затримки (мс).
backgroundbooleandefault: falseНегайно перевести команду у фон замість очікування yieldMs.
timeoutnumberdefault: tools.exec.timeoutSecПеревизначити налаштований тайм-аут exec для цього виклику. Установлюйте timeout: 0 лише тоді, коли команда має виконуватися без тайм-ауту процесу exec.
ptybooleandefault: falseЗапускати в псевдотерміналі, коли доступно. Використовуйте для CLI лише з TTY, агентів кодування та термінальних UI.
host'auto' | 'sandbox' | 'gateway' | 'node'default: autoДе виконувати. auto розв'язується як sandbox, коли активне середовище виконання пісочниці, і як gateway в інших випадках.
security'deny' | 'allowlist' | 'full'Ігнорується для звичайних викликів інструментів. Безпека gateway / node керується
tools.exec.security і файлом схвалень хоста; підвищений режим може
примусово встановити security=full лише тоді, коли оператор явно надає підвищений доступ.
ask'off' | 'on-miss' | 'always'Базовий режим запиту береться з tools.exec.ask і схвалень хоста.
Для модельних викликів із каналу ask на рівні виклику ігнорується, коли
ефективний запит хоста дорівнює off; інакше він може лише посилити режим
до суворішого. Довірені внутрішні/API-викликачі, які створюють інструменти exec з
явним значенням ask, не змінюються.
nodestringІдентифікатор/назва Node, коли host=node.
elevatedbooleandefault: falseЗапитати підвищений режим — вийти з пісочниці на налаштований шлях хоста. 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).
Приклад:
{ 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- Щоб запобігти перевизначенню пріоритетних шляхів конфігурацією оболонки користувача (як-от
~/.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) або встановіть інструменти в стандартні місця.
Прив'язка Node для кожного агента (використовуйте індекс списку агентів у конфігурації):
openclaw config get agents.listopenclaw config set 'agents.list[0].tools.exec.node' "node-id-or-name"Control UI: вкладка Nodes містить невелику панель "Прив'язка Node exec" для тих самих налаштувань.
Перевизначення сеансу (/exec)
Використовуйте /exec, щоб установити для кожного сеансу типові значення для host, security, ask і node.
Надішліть /exec без аргументів, щоб показати поточні значення.
Приклад:
/exec host=auto security=allowlist ask=on-miss node=mac-1Модель авторизації
/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 і Безпечні бінарні файли порівняно зі списком дозволених.
Приклади
Передній план:
{ "tool": "exec", "command": "ls -la" }Фоновий режим + опитування:
{"tool":"exec","command":"npm run build","yieldMs":1000}{"tool":"process","action":"poll","sessionId":"<id>"}Опитування призначене для статусу на вимогу, а не для циклів очікування. Якщо автоматичне пробудження після завершення ввімкнено, команда може пробудити сесію, коли виводить дані або завершується з помилкою.
Надіслати клавіші (у стилі tmux):
{"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):
{ "tool": "process", "action": "submit", "sessionId": "<id>" }Вставити (у дужках за замовчуванням):
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }apply_patch
apply_patch — це підіструмент exec для структурованих багатофайлових редагувань.
Він увімкнений за замовчуванням для моделей OpenAI і OpenAI Codex. Використовуйте конфігурацію лише
коли хочете вимкнути його або обмежити конкретними моделями:
{ 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 — ворота схвалення для команд shell
- Пісочниця — запуск команд у середовищах пісочниці
- Фоновий процес — довготривалі exec та інструмент process
- Безпека — політика інструментів і підвищений доступ