exec — это изменяющая файловую систему поверхность оболочки: команды могут создавать, редактировать или удалять файлы везде, где это разрешает файловая система выбранного хоста или песочницы. Отключение инструментов файловой системы OpenClaw, таких как write, edit или apply_patch, не переводит exec в режим только для чтения.
Поддерживает выполнение на переднем и заднем плане через process. Если process запрещён, exec выполняется синхронно и игнорирует yieldMs/background. Фоновые сеансы ограничены областью агента; process видит только сеансы того же агента.
Параметры
string
обязательно
Команда оболочки для выполнения.
string
по умолчанию:"cwd"
Рабочий каталог команды.
object
Переопределения переменных окружения в формате ключ/значение, накладываемые поверх унаследованного окружения.
number
по умолчанию:"10000"
Автоматически переводить команду в фоновый режим после этой задержки (мс).
boolean
по умолчанию:"false"
Немедленно перевести команду в фоновый режим вместо ожидания
yieldMs.number
по умолчанию:"tools.exec.timeoutSec"
Переопределяет настроенный тайм-аут выполнения для этого вызова в секундах. Применяется к выполнению на переднем и заднем плане,
yieldMs, Gateway, песочнице и выполнению system.run на Node. timeout: 0 отключает тайм-аут процесса выполнения для этого вызова.boolean
по умолчанию:"false"
Выполнять в псевдотерминале, если он доступен. Используйте для CLI, работающих только с TTY, агентов программирования и терминальных интерфейсов.
'auto' | 'sandbox' | 'gateway' | 'node'
по умолчанию:"auto"
Где выполнять команду.
auto разрешается в sandbox, когда среда выполнения песочницы активна, и в gateway в противном случае.'deny' | 'allowlist' | 'full'
Игнорируется для обычных вызовов инструментов. Безопасность
gateway/node управляется tools.exec.security и файлом разрешений хоста; режим повышенных привилегий может принудительно установить security=full только в том случае, если оператор явно предоставляет повышенный доступ.'off' | 'on-miss' | 'always'
Базовый режим запроса определяется
tools.exec.ask и разрешениями хоста. Для вызовов модели, инициированных каналом, значение ask конкретного вызова игнорируется, когда эффективный режим запроса хоста — off; в противном случае оно может только ужесточить режим. Доверенные внутренние/API-вызывающие стороны, создающие инструменты выполнения с явным значением ask, не затрагиваются.string
Идентификатор/имя Node при
host=node.boolean
по умолчанию:"false"
Запросить режим повышенных привилегий: выйти из песочницы в настроенный путь хоста.
security=full принудительно устанавливается только тогда, когда режим повышенных привилегий разрешается в full.hostпринимает толькоauto,sandbox,gatewayилиnode. Это не средство выбора имени хоста; значения, похожие на имена хостов, отклоняются до запуска команды.- Значение
host=nodeдля отдельного вызова разрешено изauto; значениеhost=gatewayдля отдельного вызова разрешено только при отсутствии активной среды выполнения песочницы. - Без дополнительной конфигурации
host=autoпо-прежнему «просто работает»: при отсутствии песочницы оно разрешается вgateway; при активной песочнице остаётся в ней. elevatedобеспечивает выход из песочницы в настроенный путь хоста: по умолчаниюgatewayилиnode, когдаtools.exec.host=node(либо значение сеанса по умолчанию —host=node). Это доступно только тогда, когда для текущего сеанса/провайдера включён повышенный доступ.- Разрешения
gateway/nodeуправляются файлом разрешений хоста. nodeтребует сопряжённого Node (приложения-компаньона или безголового хоста Node). Если доступно несколько Node, задайтеexec.nodeилиtools.exec.node, чтобы выбрать один из них.exec host=node— единственный путь выполнения команд оболочки для Node; устаревшая обёрткаnodes.runудалена.- На хостах, отличных от Windows, выполнение использует
SHELL, если он задан; еслиSHELLимеет значениеfish, предпочтение отдаётсяbash(илиsh) изPATH, чтобы избежать несовместимых с fish конструкций bash, а если ни один из них не существует, используетсяSHELL. - На хостах Windows выполнение предпочитает обнаружение PowerShell 7 (
pwsh) (Program Files, затем ProgramW6432, затем PATH), после чего использует Windows PowerShell 5.1 как резервный вариант. - На хостах Gateway, отличных от Windows, команды выполнения bash и zsh используют снимок среды запуска. OpenClaw сохраняет доступные для подключения псевдонимы/функции и небольшой безопасный набор переменных окружения из файлов запуска оболочки в
$OPENCLAW_STATE_DIR/cache/shell-snapshots/, а затем подключает этот снимок перед каждой командой выполнения. Переменные, похожие на секреты, исключаются; выполнение в песочнице и на Node этот снимок не использует. Чтобы отключить этот путь снимка, задайтеOPENCLAW_EXEC_SHELL_SNAPSHOT=0в окружении процесса Gateway. - Выполнение на хосте (
gateway/node) отклоняетenv.PATHи переопределения загрузчика (LD_*/DYLD_*), чтобы предотвратить подмену исполняемых файлов или внедрение кода. - OpenClaw задаёт
OPENCLAW_SHELL=execв окружении запускаемой команды (включая выполнение в PTY и песочнице), чтобы правила оболочки/профиля могли определять контекст инструмента выполнения. - Для запусков, инициированных каналом, OpenClaw также предоставляет в
OPENCLAW_CHANNEL_CONTEXTограниченную полезную нагрузку JSON с идентификационными данными отправителя/чата, если канал передал эти идентификаторы. execне может выполнять команды оболочкиopenclaw channels loginили/approve:openclaw channels login— интерактивный процесс аутентификации канала, а/approveдолжен проходить через обработчик команд подтверждения, а не через оболочку. Выполняйте вход в канал в терминале на хосте Gateway или используйте инструмент агента для входа в конкретный канал, если он существует (например,whatsapp_login).- Важно: песочница по умолчанию отключена. Если песочница отключена, неявное значение
host=autoразрешается вgateway. Явное значениеhost=sandboxпо-прежнему приводит к безопасному отказу вместо неявного выполнения на хосте Gateway. Включите песочницу или используйтеhost=gatewayс разрешениями. - Предварительные проверки скриптов (на распространённые ошибки синтаксиса оболочки Python/Node) проверяют только файлы внутри эффективной границы
workdir. Если путь скрипта разрешается за пределамиworkdir, предварительная проверка этого файла пропускается. Предварительная проверка также полностью пропускается, когдаhost=gateway, а эффективная политика —security=fullсask=off. - Для длительной работы, начинающейся сейчас, запустите её один раз и полагайтесь на автоматическое пробуждение по завершении, если оно включено и команда выводит данные или завершается с ошибкой. Используйте
processдля журналов, состояния, ввода или вмешательства; не имитируйте планирование циклами sleep, циклами тайм-аутов или повторным опросом. - Для работы, которая должна выполняться позже или по расписанию, используйте Cron вместо шаблонов сна/задержки
exec.
Конфигурация
Выполнение на хосте без одобрения используется по умолчанию для Gateway и узла (
security=full, ask=off) — это определяется значениями политики хоста по умолчанию, а не host=auto. Если требуется одобрение или поведение на основе списка разрешений, ужесточите как tools.exec.*, так и файл одобрений хоста; см. Одобрения выполнения. Чтобы принудительно направлять выполнение через Gateway или узел независимо от состояния песочницы, задайте tools.exec.host или используйте /exec host=....
Пример:
Режимы
tools.exec.mode — нормализованный параметр политики. При его задании выводятся значения security/ask; его нельзя использовать вместе с явно заданными tools.exec.security/tools.exec.ask.
ask/ask=always по-прежнему каждый раз запрашивает одобрение человека независимо от режима.
Одобрение автоматической проверки действует однократно. На Gateway OpenClaw передаёт системе проверки разрешённый путь к исполняемому файлу и привязывает выполнение к этому же пути. Команды, которые невозможно свести к одному контролируемому плану выполнения, — например, heredoc-конструкции, подстановки оболочки или неподдерживаемое экранирование оболочек-обёрток, — переходят к одобрению человеком, даже если модель в противном случае разрешила бы их.
Одобрения команд сервера приложений Codex, которые ещё не определены явной политикой среды выполнения или встроенной политикой, направляются человеку. OpenClaw не запускает для этих запросов настроенную систему проверки выполнения, поскольку Codex не предоставляет контролируемый разрешённый исполняемый файл, позволяющий привязать решение проверки к команде, которую выполняет Codex.
Встроенное вычисление (strictInlineEval)
Когда tools.exec.strictInlineEval имеет значение true, встроенные формы вычисления интерпретатора требуют проверки или явного одобрения: python -c, node -e, ruby -e, perl -e, php -r, lua -e, osascript -e и аналогичные формы в других поддерживаемых интерпретаторах и средствах передачи команд (awk, find -exec, make, sed, xargs и других). В режиме mode=auto обычный путь одобрения выполнения может позволить встроенной автоматической системе проверки разрешить явно низкорисковую одноразовую команду; прямые вызовы system.run на хосте узла по-прежнему требуют явного одобрения, поскольку они не могут передать команду в маршрут одобрения человеком. Если система проверки запрашивает одобрение, запрос направляется человеку. allow-always по-прежнему может сохранять безопасные вызовы интерпретаторов и скриптов, но формы встроенного вычисления не превращаются в постоянные правила разрешения.
Обработка PATH
host=gateway: объединяетPATHвашей оболочки входа с окружением выполнения. Переопределения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(оболочку входа) внутри контейнера, поэтому/etc/profileможет сброситьPATH. OpenClaw добавляетenv.PATHв начало после загрузки профиля через внутреннюю переменную окружения (без интерполяции оболочки);tools.exec.pathPrependприменяется и здесь.host=node: узлу передаются только указанные вами незаблокированные переопределения окружения. Переопределенияenv.PATHотклоняются при выполнении на хосте и игнорируются хостами узлов. Если на узле нужны дополнительные записи PATH, настройте окружение службы хоста узла (systemd/launchd) или установите инструменты в стандартные расположения.
Переопределения сеанса (/exec)
Используйте /exec, чтобы задать значения по умолчанию для отдельного сеанса для host, security, ask и node. Отправьте /exec без аргументов, чтобы показать текущие значения.
Пример:
/exec учитывается только для авторизованных отправителей (списки разрешений каналов/сопряжение вместе с commands.useAccessGroups). Он обновляет только состояние сеанса и не записывает конфигурацию. Авторизованные отправители внешних каналов могут задавать эти значения сеанса по умолчанию. Внутренним клиентам Gateway и веб-чата требуется operator.admin, чтобы сохранять их.
Чтобы полностью отключить выполнение, запретите его в политике инструментов (tools.deny: ["exec"] или для отдельного агента). Одобрения хоста по-прежнему применяются, если явно не заданы security=full и ask=off.
Одобрения выполнения (сопутствующее приложение / хост узла)
Агенты в песочнице могут требовать одобрения каждого запроса перед запускомexec на Gateway или хосте узла. Политика, список разрешений и процесс в интерфейсе описаны в разделе Одобрения выполнения.
Когда требуется одобрение человеком, потоки хоста узла и потоки Gateway без встроенной поддержки немедленно возвращают status: "approval-pending" и идентификатор одобрения. Потоки Gateway в нативном чате и веб-интерфейсе вместо этого могут ожидать одобрение в текущем потоке и после него возвращать окончательный результат команды. Результат approval-pending означает, что команда ещё не запущена, поэтому предупреждения о переходе к выполнению на переднем плане появляются только в том случае, если одобренная команда действительно выполняется в текущем потоке. Одобренные асинхронные запуски создают системные события о ходе и завершении команды (Exec running / Exec finished); отклонённые запросы и запросы с истёкшим тайм-аутом являются конечными и не пробуждают сеанс агента системным событием об отказе.
В каналах с нативными карточками/кнопками подтверждения агент должен в первую очередь полагаться на этот нативный интерфейс и включать команду для ручного подтверждения /approve только в том случае, если результат инструмента явно указывает, что подтверждения в чате недоступны или ручное подтверждение — единственный вариант.
Список разрешений и безопасные исполняемые файлы
При ручном применении списка разрешений сопоставляются шаблоны полного пути к исполняемому файлу и шаблоны только имени команды. Имена без пути соответствуют только командам, запускаемым через PATH, поэтомуrg может соответствовать /opt/homebrew/bin/rg, когда команда имеет вид rg, но не ./rg или /tmp/rg.
Когда security=allowlist, команды оболочки разрешаются автоматически, только если каждый сегмент конвейера входит в список разрешений или является безопасным исполняемым файлом. Цепочки (;, &&, ||) и перенаправления отклоняются в режиме списка разрешений, если не каждый сегмент верхнего уровня удовлетворяет списку разрешений (включая безопасные исполняемые файлы). Перенаправления по-прежнему не поддерживаются. Постоянное доверие allow-always не позволяет обойти это правило: для цепочки команд по-прежнему требуется соответствие каждого сегмента верхнего уровня.
autoAllowSkills — это отдельный упрощённый механизм подтверждения выполнения, а не то же самое, что записи путей в ручном списке разрешений. Для строгого явного доверия оставьте autoAllowSkills отключённым.
Используйте эти элементы управления для разных задач:
tools.exec.safeBins: небольшие потоковые фильтры, принимающие данные только через stdin.tools.exec.safeBinTrustedDirs: дополнительные явно доверенные каталоги для путей к безопасным исполняемым файлам.tools.exec.safeBinProfiles: явная политика argv для пользовательских безопасных исполняемых файлов.- allowlist: явное доверие путям к исполняемым файлам.
safeBins как универсальный список разрешений и не добавляйте двоичные файлы интерпретаторов/сред выполнения (например, python3, node, ruby, bash). Если они необходимы, используйте явные записи списка разрешений и оставьте запросы подтверждения включёнными.
openclaw security audit предупреждает, если для записей интерпретаторов/сред выполнения safeBins отсутствуют явные профили, а openclaw doctor --fix может создать заготовки недостающих пользовательских записей safeBinProfiles. openclaw security audit и openclaw doctor также предупреждают, если вы явно добавляете исполняемые файлы с широкими возможностями, такие как jq, обратно в safeBins (jq может читать данные окружения и загружать код jq из модулей или файлов запуска, поэтому вместо этого предпочтительнее использовать явные записи списка разрешений или запуски с обязательным подтверждением). jq запрещён в качестве безопасного исполняемого файла, даже если он явно указан. Если вы явно добавляете интерпретаторы в список разрешений, включите tools.exec.strictInlineEval, чтобы формы со встроенным вычислением кода по-прежнему требовали подтверждения проверяющего или явного подтверждения.
Полное описание политики и примеры см. в разделах Подтверждение выполнения и Безопасные исполняемые файлы и список разрешений.
Примеры
Интерактивный режим:apply_patch
apply_patch — это подынструмент exec для структурированного редактирования нескольких файлов. Он включён по умолчанию и доступен для любого поставщика моделей; allowModels позволяет ограничить его использование. Используйте конфигурацию, только если хотите отключить его или ограничить определёнными моделями:
- Политика инструментов по-прежнему применяется;
allow: ["write"]неявно разрешаетapply_patch. deny: ["write"]не запрещаетapply_patch; явно запретитеapply_patchили используйтеdeny: ["group:fs"], если запись исправлений также должна быть заблокирована.- Конфигурация находится в
tools.exec.applyPatch. tools.exec.applyPatch.enabledпо умолчанию имеет значениеtrue; установите значениеfalse, чтобы отключить инструмент.tools.exec.applyPatch.workspaceOnlyпо умолчанию имеет значениеtrue(только в пределах рабочего пространства). Установите значениеfalse, только если намеренно хотите разрешитьapply_patchзаписывать/удалять данные за пределами каталога рабочего пространства.tools.exec.applyPatch.allowModels— необязательный список разрешённых идентификаторов моделей (кратких, напримерgpt-5.4, или полных, напримерopenai/gpt-5.4). Если он задан, инструмент получают только соответствующие модели; если не задан, инструмент получают все модели.
Связанные разделы
- Подтверждение выполнения — запросы подтверждения для команд оболочки
- Изоляция — выполнение команд в изолированных средах
- Фоновый процесс — инструменты exec и process для длительно выполняющихся процессов
- Безопасность — политика инструментов и повышенный доступ