Встроенные инструменты
Инструмент Exec
Запускает shell-команды в рабочем пространстве. Поддерживает выполнение в foreground + background через process. Если process запрещён, exec выполняется синхронно и игнорирует yieldMs/background. Фоновые сессии ограничены агентом; process видит только сессии от того же агента.
Параметры
command(обязательный)workdir(по умолчанию cwd)env(переопределения ключ/значение)yieldMs(по умолчанию 10000): автоматический переход в background после задержкиbackground(bool): немедленный переход в backgroundtimeout(секунды, по умолчанию 1800): завершение по истечении времениpty(bool): запускать в псевдотерминале, когда доступно (CLI только для TTY, coding agents, терминальные UI)host(sandbox | gateway | node): где выполнятьsecurity(deny | allowlist | full): режим принудительного применения дляgateway/nodeask(off | on-miss | always): запросы подтверждения дляgateway/nodenode(строка): id/имя узла дляhost=nodeelevated(bool): запросить привилегированный режим (хост gateway);security=fullпринудительно устанавливается только когда elevated разрешается вfull
Примечания:
hostпо умолчаниюsandbox.elevatedигнорируется, когда sandboxing выключен (exec уже выполняется на хосте).- Подтверждения для
gateway/nodeконтролируются файлом~/.openclaw/exec-approvals.json. nodeтребует подключённого узла (приложение companion или headless node host).- Если доступно несколько узлов, установите
exec.nodeилиtools.exec.nodeдля выбора одного. - На хостах не-Windows exec использует
SHELL, если он установлен; еслиSHELL—fish, он предпочитаетbash(илиsh) изPATH, чтобы избежать несовместимых с fish скриптов, затем возвращается кSHELL, если ни один из них не существует. - На хостах Windows exec предпочитает обнаружение PowerShell 7 (
pwsh) (Program Files, ProgramW6432, затем PATH), затем возвращается к Windows PowerShell 5.1. - Выполнение на хосте (
gateway/node) отклоняетenv.PATHи переопределения загрузчика (LD_*/DYLD_*), чтобы предотвратить подмену бинарников или внедрение кода. - OpenClaw устанавливает
OPENCLAW_SHELL=execв окружении запускаемой команды (включая PTY и выполнение в sandbox), чтобы правила shell/профиля могли обнаруживать контекст инструмента exec. - Важно: sandboxing по умолчанию выключен. Если sandboxing выключен и явно настроен/запрошен
host=sandbox, exec теперь завершается с ошибкой (fail closed) вместо тихого выполнения на хосте gateway. Включите sandboxing или используйтеhost=gatewayс подтверждениями. - Предварительные проверки скриптов (для распространённых ошибок синтаксиса shell в Python/Node) проверяют только файлы внутри границы эффективного
workdir. Если путь к скрипту разрешается внеworkdir, предварительная проверка для этого файла пропускается.
Конфигурация
tools.exec.notifyOnExit(по умолчанию: true): если true, фоновые сессии exec ставят в очередь системное событие и запрашивают heartbeat при выходе.tools.exec.approvalRunningNoticeMs(по умолчанию: 10000): отправляет одно уведомление «running», когда exec, требующий подтверждения, выполняется дольше этого времени (0 отключает).tools.exec.host(по умолчанию:sandbox)tools.exec.security(по умолчанию:denyдля sandbox,allowlistдля gateway + node, если не установлено)tools.exec.ask(по умолчанию:on-miss)tools.exec.node(по умолчанию: не установлено)tools.exec.pathPrepend: список директорий для добавления в началоPATHдля запусков exec (только gateway + sandbox).tools.exec.safeBins: безопасные бинарники только для stdin, которые могут выполняться без явных записей в allowlist. Подробности поведения см. в Safe bins.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
- macOS:
host=sandbox: запускаетsh -lc(login shell) внутри контейнера, поэтому/etc/profileможет сброситьPATH. OpenClaw добавляетenv.PATHпосле загрузки профиля через внутреннюю переменную окружения (без интерполяции shell);tools.exec.pathPrependтакже применяется здесь.host=node: только неперекрытые переопределения env, которые вы передаёте, отправляются на узел. Переопределенияenv.PATHотклоняются для выполнения на хосте и игнорируются узлами. Если вам нужны дополнительные записи PATH на узле, настройте окружение службы узла (systemd/launchd) или установите инструменты в стандартные расположения.
Привязка узла к агенту (используйте индекс в списке агентов в конфигурации):
openclaw config get agents.list
openclaw config set agents.list[0].tools.exec.node "node-id-or-name"
UI управления: вкладка Nodes включает небольшую панель «Exec node binding» для тех же настроек.