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Переопределяет настроенный тайм-аут выполнения для этого вызова в секундах. Применяется к выполнению на переднем и заднем плане, yieldMs, Gateway, песочнице и выполнению system.run на Node. timeout: 0 отключает тайм-аут процесса выполнения для этого вызова.
ptybooleandefault: falseВыполнять в псевдотерминале, если он доступен. Используйте для CLI, работающих только с TTY, агентов программирования и терминальных интерфейсов.
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-вызывающие стороны, создающие инструменты выполнения с явным значением ask, не затрагиваются.
nodestringИдентификатор/имя Node при host=node.
elevatedbooleandefault: 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.
Конфигурация
| Ключ | По умолчанию | Примечания |
|---|---|---|
tools.exec.timeoutSec |
1800 |
Тайм-аут выполнения по умолчанию для каждой команды в секундах. Параметр timeout отдельного вызова переопределяет его; timeout: 0 отдельного вызова отключает тайм-аут процесса выполнения. |
tools.exec.host |
auto |
При активной среде песочницы принимает значение sandbox, в противном случае — gateway. |
tools.exec.security |
deny для песочницы, full для Gateway/узла, если не задано |
|
tools.exec.ask |
off |
|
tools.exec.mode |
не задано | Нормализованный параметр политики. См. раздел Режимы ниже. Нельзя использовать вместе с tools.exec.security/tools.exec.ask. |
tools.exec.reviewer.model |
основная модель настроенного агента | Необязательное переопределение провайдера/модели для проверки mode=auto. |
tools.exec.reviewer.timeoutMs |
30000 |
Тайм-аут каждого этапа подготовки и завершения модели проверки до перехода к человеку. |
tools.exec.node |
не задано | |
tools.exec.notifyOnExit |
true |
Если истинно, фоновые сеансы выполнения при завершении добавляют системное событие в очередь и запрашивают Heartbeat. |
tools.exec.approvalRunningNoticeMs |
10000 |
Выводить одно уведомление «выполняется», если выполнение, требующее одобрения, продолжается дольше указанного времени (0 отключает уведомление). |
tools.exec.strictInlineEval |
false |
См. Встроенное вычисление. |
tools.exec.commandHighlighting |
false |
Если истинно, запросы одобрения могут выделять в тексте команды распознанные парсером фрагменты команды. Задаётся глобально или для отдельного агента; политику одобрения не изменяет. |
tools.exec.pathPrepend |
не задано | Список каталогов, добавляемых в начало PATH для запусков выполнения (только Gateway и песочница). |
tools.exec.safeBins |
не задано | Безопасные исполняемые файлы, принимающие только stdin и способные запускаться без явных записей в списке разрешений. См. Безопасные исполняемые файлы. |
tools.exec.safeBinTrustedDirs |
/bin, /usr/bin |
Дополнительные явно указанные доверенные каталоги для проверок путей safeBins. Записи PATH никогда не считаются доверенными автоматически. |
tools.exec.safeBinProfiles |
не задано | Необязательная пользовательская политика argv для каждого безопасного исполняемого файла (minPositional, maxPositional, allowedValueFlags, deniedFlags). |
Выполнение на хосте без одобрения используется по умолчанию для Gateway и узла (security=full, ask=off) — это определяется значениями политики хоста по умолчанию, а не host=auto. Если требуется одобрение или поведение на основе списка разрешений, ужесточите как tools.exec.*, так и файл одобрений хоста; см. Одобрения выполнения. Чтобы принудительно направлять выполнение через Gateway или узел независимо от состояния песочницы, задайте tools.exec.host или используйте /exec host=....
Пример:
{ tools: { exec: { pathPrepend: ["~/bin", "/opt/oss/bin"], }, },}Режимы
tools.exec.mode — нормализованный параметр политики. При его задании выводятся значения security/ask; его нельзя использовать вместе с явно заданными tools.exec.security/tools.exec.ask.
| Режим | security | ask | Поведение |
|---|---|---|---|
deny |
deny |
off |
Выполнение запрещено. |
allowlist |
allowlist |
off |
Выполняются только команды из списка разрешений и безопасные команды; для остальных одобрение не запрашивается. |
ask |
allowlist |
on-miss |
Совпадения со списком разрешений выполняются напрямую; для всего остального запрашивается одобрение человека. |
auto |
allowlist |
on-miss |
Совпадения со списком разрешений и безопасными исполняемыми файлами выполняются напрямую; всё остальное перед запросом к человеку направляется встроенной автоматической системе проверки OpenClaw. |
full |
full |
off |
Проверка одобрения отсутствует. |
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) или установите инструменты в стандартные расположения.
Привязка узла для отдельного агента (используйте индекс агента в списке конфигурации):
openclaw config get agents.listopenclaw config set 'agents.list[0].tools.exec.node' "node-id-or-name"В Control UI страница Устройства содержит небольшую панель «Привязка узла выполнения» для тех же настроек.
Переопределения сеанса (/exec)
Используйте /exec, чтобы задать значения по умолчанию для отдельного сеанса для host, security, ask и node. Отправьте /exec без аргументов, чтобы показать текущие значения.
Пример:
/exec host=auto security=allowlist ask=on-miss node=mac-1/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, чтобы формы со встроенным вычислением кода по-прежнему требовали подтверждения проверяющего или явного подтверждения.
Полное описание политики и примеры см. в разделах Подтверждение выполнения и Безопасные исполняемые файлы и список разрешений.
Примеры
Интерактивный режим:
{ "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>" }Вставка (по умолчанию в режиме bracketed paste):
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }apply_patch
apply_patch — это подынструмент exec для структурированного редактирования нескольких файлов. Он включён по умолчанию и доступен для любого поставщика моделей; allowModels позволяет ограничить его использование. Используйте конфигурацию, только если хотите отключить его или ограничить определёнными моделями:
{ tools: { exec: { applyPatch: { workspaceOnly: true, allowModels: ["gpt-5.6-sol"] }, }, },}Примечания:
- Политика инструментов по-прежнему применяется;
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 для длительно выполняющихся процессов
- Безопасность — политика инструментов и повышенный доступ