Инструмент Exec
Запуск команд оболочки в рабочем пространстве. Поддерживает выполнение на переднем и фоновом плане черезprocess.
Если process запрещён, exec выполняется синхронно и игнорирует yieldMs/background.
Фоновые сеансы ограничены агентом; process видит только сеансы того же агента.
Параметры
command(обязательно)workdir(по умолчанию cwd)env(переопределения ключ/значение)yieldMs(по умолчанию 10000): автоматический перевод в фон после задержкиbackground(bool): сразу в фонtimeout(секунды, по умолчанию 1800): завершить по истечении срокаpty(bool): запуск в псевдотерминале при наличии (CLI, работающие только с TTY, кодинговые агенты, терминальные UI)host(sandbox | gateway | node): где выполнятьsecurity(deny | allowlist | full): режим принудительного применения дляgateway/nodeask(off | on-miss | always): запросы подтверждения дляgateway/nodenode(string): id/имя узла дляhost=nodeelevated(bool): запрос повышенного режима (хост шлюза Gateway);security=fullпринудительно применяется только когда повышенный режим разрешается вfull
hostпо умолчанию равенsandbox.elevatedигнорируется, когда sandboxing выключен (exec уже выполняется на хосте).- Подтверждения
gateway/nodeконтролируются~/.openclaw/exec-approvals.json. nodeтребует сопряжённый узел (сопутствующее приложение или headless хост узла).- Если доступно несколько узлов, задайте
exec.nodeилиtools.exec.nodeдля выбора одного. - На хостах, отличных от Windows, exec использует
SHELLпри наличии; еслиSHELLравноfish, он предпочитаетbash(илиsh) изPATH, чтобы избежать скриптов, несовместимых с fish, затем откатывается кSHELL, если ни один не существует. - Выполнение на хосте (
gateway/node) отклоняетenv.PATHи переопределения загрузчика (LD_*/DYLD_*) для предотвращения подмены бинарников или внедрённого кода. - Важно: sandboxing по умолчанию выключен. Если sandboxing выключен,
host=sandboxвыполняется напрямую на хосте шлюза Gateway (без контейнера) и не требует подтверждений. Чтобы требовать подтверждения, запускайте сhost=gatewayи настройте подтверждения exec (или включите sandboxing).
Конфигурация
tools.exec.notifyOnExit(по умолчанию: true): если true, фоновые сеансы exec ставят системное событие в очередь и запрашивают сигнал keepalive при завершении.tools.exec.approvalRunningNoticeMs(по умолчанию: 10000): выдаёт одно уведомление «выполняется», если exec с подтверждением выполняется дольше этого времени (0 — отключает).tools.exec.host(по умолчанию:sandbox)tools.exec.security(по умолчанию:denyдля sandbox,allowlistдля Gateway (шлюз) + узла, если не задано)tools.exec.ask(по умолчанию:on-miss)tools.exec.node(по умолчанию: unset)tools.exec.pathPrepend: список каталогов для добавления в началоPATHпри запусках exec.tools.exec.safeBins: безопасные бинарники «только stdin», которые могут выполняться без явных записей allowlist.
Обработка PATH
host=gateway: объединяетPATHвашей login-оболочки в окружение 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-оболочку) внутри контейнера, поэтому/etc/profileможет сброситьPATH. OpenClaw добавляетenv.PATHпосле обработки профиля через внутреннюю переменную окружения (без интерполяции оболочки); здесь также применяетсяtools.exec.pathPrepend.host=node: на узел отправляются только непредотвращённые переопределения окружения, которые вы передаёте. Переопределенияenv.PATHотклоняются для выполнения на хосте. Если вам нужны дополнительные записи PATH на узле, настройте окружение службы хоста узла (systemd/launchd) или установите инструменты в стандартные расположения.
Переопределения сеанса (/exec)
Используйте /exec для задания на уровне сеанса значений по умолчанию для host, security, ask и node.
Отправьте /exec без аргументов, чтобы показать текущие значения.
Пример:
Модель авторизации
/exec учитывается только для авторизованных отправителей (allowlist каналов/сопряжение плюс commands.useAccessGroups).
Он обновляет только состояние сеанса и не записывает конфиг. Чтобы жёстко отключить exec, запретите его через
политику инструментов (tools.deny: ["exec"] или для конкретного агента). Подтверждения на хосте всё равно применяются, если вы явно не зададите
security=full и ask=off.
Подтверждения Exec (сопутствующее приложение / хост узла)
Агенты в sandbox могут требовать подтверждение для каждого запроса перед тем, какexec будет выполнен на хосте шлюза Gateway или хосте узла.
См. Подтверждения Exec — политика, allowlist и поток UI.
Когда подтверждения требуются, инструмент exec немедленно возвращает
status: "approval-pending" и id подтверждения. После подтверждения (или отказа / тайм-аута)
Gateway (шлюз) отправляет системные события (Exec finished / Exec denied). Если команда всё ещё
выполняется после tools.exec.approvalRunningNoticeMs, отправляется одно уведомление Exec running.
Allowlist + безопасные бинарники
Принудительное применение allowlist сопоставляет только разрешённые пути бинарников (без сопоставления по имени файла). Когдаsecurity=allowlist, команды оболочки автоматически разрешаются только если каждый сегмент конвейера
разрешён allowlist или является безопасным бинарником. Цепочки (;, &&, ||) и перенаправления отклоняются в режиме allowlist,
если каждый сегмент верхнего уровня не удовлетворяет allowlist (включая safe bins).
Перенаправления по-прежнему не поддерживаются.
Примеры
На переднем плане:apply_patch (экспериментально)
apply_patch — это подинструмент exec для структурированных правок в нескольких файлах.
Включите его явно:
- Доступно только для моделей OpenAI/OpenAI Codex.
- Политика инструментов по‑прежнему применяется;
allow: ["exec"]неявно разрешаетapply_patch. - Конфигурация находится в
tools.exec.applyPatch. tools.exec.applyPatch.workspaceOnlyпо умолчанию имеет значениеtrue(в пределах workspace). Установите значениеfalseтолько если вы намеренно хотите, чтобыapply_patchзаписывал/удалял файлы за пределами каталога workspace.