Ferramenta Exec
Execute comandos de shell no workspace. Oferece suporte a execução em primeiro plano + em segundo plano viaprocess.
Se process não for permitido, exec é executado de forma síncrona e ignora yieldMs/background.
As sessões em segundo plano têm escopo por agente; process só vê sessões do mesmo agente.
Parâmetros
command(obrigatório)workdir(o padrão é cwd)env(substituições de chave/valor)yieldMs(padrão 10000): passa automaticamente para segundo plano após o atrasobackground(bool): envia imediatamente para segundo planotimeout(segundos, padrão 1800): encerra ao expirarpty(bool): executa em um pseudo-terminal quando disponível (CLIs somente TTY, agentes de coding, UIs de terminal)host(auto | sandbox | gateway | node): onde executarsecurity(deny | allowlist | full): modo de aplicação paragateway/nodeask(off | on-miss | always): prompts de aprovação paragateway/nodenode(string): id/nome do nó parahost=nodeelevated(bool): solicita modo elevado (sair do sandbox para o caminho de host configurado);security=fullsó é forçado quando elevado resolve parafull
hostusaautopor padrão: sandbox quando o runtime de sandbox está ativo para a sessão, caso contrário gateway.autoé a estratégia de roteamento padrão, não um curinga.host=nodepor chamada é permitido a partir deauto;host=gatewaypor chamada só é permitido quando nenhum runtime de sandbox está ativo.- Sem configuração extra,
host=autoainda “simplesmente funciona”: sem sandbox, ele resolve paragateway; com um sandbox ativo, ele permanece no sandbox. elevatedsai do sandbox para o caminho de host configurado:gatewaypor padrão, ounodequandotools.exec.host=node(ou quando o padrão da sessão éhost=node). Ele só está disponível quando o acesso elevado está habilitado para a sessão/provedor atual.- Aprovações de
gateway/nodesão controladas por~/.openclaw/exec-approvals.json. nodeexige um nó emparelhado (app complementar ou host de nó headless).- Se vários nós estiverem disponíveis, defina
exec.nodeoutools.exec.nodepara selecionar um. exec host=nodeé o único caminho de execução de shell para nós; o wrapper legadonodes.runfoi removido.- Em hosts que não sejam Windows, exec usa
SHELLquando definido; seSHELLforfish, ele preferebash(oush) dePATHpara evitar scripts incompatíveis com fish, e depois faz fallback paraSHELLse nenhum dos dois existir. - Em hosts Windows, exec prefere descobrir o PowerShell 7 (
pwsh) (Program Files, ProgramW6432 e depois PATH), e depois faz fallback para o Windows PowerShell 5.1. - A execução no host (
gateway/node) rejeita substituições deenv.PATHe de loaders (LD_*/DYLD_*) para impedir sequestro de binários ou código injetado. - O OpenClaw define
OPENCLAW_SHELL=execno ambiente do comando iniciado (incluindo execução com PTY e em sandbox), para que regras de shell/profile possam detectar o contexto da ferramenta exec. - Importante: o sandboxing fica desativado por padrão. Se o sandboxing estiver desativado, o
host=autoimplícito resolve paragateway.host=sandboxexplícito ainda falha de forma fechada em vez de executar silenciosamente no host gateway. Habilite o sandboxing ou usehost=gatewaycom aprovações. - Verificações preliminares de script (para erros comuns de sintaxe de shell em Python/Node) inspecionam apenas arquivos dentro do
limite efetivo de
workdir. Se um caminho de script resolver para fora deworkdir, a verificação preliminar será ignorada para esse arquivo. - Para trabalhos de longa duração que começam agora, inicie-os uma vez e conte com o
acionamento automático de conclusão quando ele estiver habilitado e o comando emitir saída ou falhar.
Use
processpara logs, status, entrada ou intervenção; não tente emular agendamento com loops de sleep, loops de timeout ou polling repetido. - Para trabalhos que devem acontecer mais tarde ou em um agendamento, use cron em vez de
padrões de sleep/delay com
exec.
Configuração
tools.exec.notifyOnExit(padrão: true): quando true, sessões exec em segundo plano enfileiram um evento do sistema e solicitam um heartbeat ao sair.tools.exec.approvalRunningNoticeMs(padrão: 10000): emite um único aviso de “em execução” quando uma execução exec protegida por aprovação ultrapassa esse tempo (0 desabilita).tools.exec.host(padrão:auto; resolve parasandboxquando o runtime de sandbox está ativo,gatewaycaso contrário)tools.exec.security(padrão:denypara sandbox,fullpara gateway + node quando não definido)tools.exec.ask(padrão:off)- Execução no host sem aprovação é o padrão para gateway + node. Se você quiser comportamento de aprovações/allowlist, restrinja tanto
tools.exec.*quanto o~/.openclaw/exec-approvals.jsondo host; veja Aprovações de Exec. - O modo YOLO vem dos padrões de política do host (
security=full,ask=off), não dehost=auto. Se você quiser forçar roteamento para gateway ou node, definatools.exec.hostou use/exec host=.... tools.exec.node(padrão: não definido)tools.exec.strictInlineEval(padrão: false): quando true, formas inline de avaliação por interpretador comopython -c,node -e,ruby -e,perl -e,php -r,lua -eeosascript -esempre exigem aprovação explícita.allow-alwaysainda pode persistir invocações benignas de interpretador/script, mas formas de avaliação inline ainda solicitam aprovação a cada vez.tools.exec.pathPrepend: lista de diretórios a acrescentar no início dePATHpara execuções exec (somente gateway + sandbox).tools.exec.safeBins: binários seguros somente-stdin que podem ser executados sem entradas explícitas de allowlist. Para detalhes de comportamento, veja Safe bins.tools.exec.safeBinTrustedDirs: diretórios explícitos adicionais confiáveis para verificações de caminho de executável emsafeBins. Entradas dePATHnunca são automaticamente confiáveis. Os padrões integrados são/bine/usr/bin.tools.exec.safeBinProfiles: política opcional de argv personalizada por safe bin (minPositional,maxPositional,allowedValueFlags,deniedFlags).
Tratamento de PATH
host=gateway: mescla oPATHdo seu shell de login ao ambiente de execução exec. Substituições deenv.PATHsão rejeitadas para execução no host. O próprio daemon ainda é executado com umPATHmínimo:- macOS:
/opt/homebrew/bin,/usr/local/bin,/usr/bin,/bin - Linux:
/usr/local/bin,/usr/bin,/bin
- macOS:
host=sandbox: executash -lc(shell de login) dentro do contêiner, então/etc/profilepode redefinirPATH. O OpenClaw acrescentaenv.PATHapós o carregamento do profile por meio de uma variável de ambiente interna (sem interpolação de shell);tools.exec.pathPrependtambém se aplica aqui.host=node: apenas as substituições de ambiente não bloqueadas que você passar são enviadas ao node. Substituições deenv.PATHsão rejeitadas para execução no host e ignoradas por hosts de node. Se você precisar de entradas adicionais em PATH em um node, configure o ambiente do serviço do host do node (systemd/launchd) ou instale ferramentas em locais padrão.
Substituições por sessão (/exec)
Use /exec para definir padrões por sessão para host, security, ask e node.
Envie /exec sem argumentos para mostrar os valores atuais.
Exemplo:
Modelo de autorização
/exec só é respeitado para remetentes autorizados (allowlists/emparelhamento de canal mais commands.useAccessGroups).
Ele atualiza apenas o estado da sessão e não grava configuração. Para desabilitar exec de forma rígida, negue-o pela
política de ferramentas (tools.deny: ["exec"] ou por agente). Aprovações do host ainda se aplicam, a menos que você defina explicitamente
security=full e ask=off.
Aprovações de Exec (app complementar / host de node)
Agentes em sandbox podem exigir aprovação por solicitação antes queexec seja executado no host gateway ou node.
Veja Aprovações de Exec para a política, a allowlist e o fluxo de UI.
Quando aprovações são exigidas, a ferramenta exec retorna imediatamente com
status: "approval-pending" e um id de aprovação. Depois que aprovada (ou negada / expirada),
o Gateway emite eventos do sistema (Exec finished / Exec denied). Se o comando ainda estiver
em execução após tools.exec.approvalRunningNoticeMs, um único aviso Exec running será emitido.
Em canais com cartões/botões nativos de aprovação, o agente deve contar primeiro com essa
UI nativa e incluir um comando manual /approve apenas quando o resultado da ferramenta
disser explicitamente que aprovações via chat não estão disponíveis ou que a aprovação manual é o
único caminho.
Allowlist + safe bins
A aplicação manual de allowlist corresponde apenas a caminhos resolvidos de binários (sem correspondência por basename). Quandosecurity=allowlist, comandos de shell só são permitidos automaticamente se cada segmento do pipeline estiver
na allowlist ou for um safe bin. Encadeamento (;, &&, ||) e redirecionamentos são rejeitados em
modo allowlist, a menos que cada segmento de nível superior satisfaça a allowlist (incluindo safe bins).
Redirecionamentos continuam sem suporte.
A confiança durável allow-always não contorna essa regra: um comando encadeado ainda exige que cada
segmento de nível superior corresponda.
autoAllowSkills é um caminho de conveniência separado em aprovações de exec. Não é o mesmo que
entradas manuais de allowlist por caminho. Para confiança estritamente explícita, mantenha
autoAllowSkills desabilitado.
Use os dois controles para tarefas diferentes:
tools.exec.safeBins: pequenos filtros de fluxo somente-stdin.tools.exec.safeBinTrustedDirs: diretórios adicionais explicitamente confiáveis para caminhos de executável de safe bins.tools.exec.safeBinProfiles: política explícita de argv para safe bins personalizados.- allowlist: confiança explícita para caminhos de executáveis.
safeBins como uma allowlist genérica e não adicione binários de interpretador/runtime (por exemplo python3, node, ruby, bash). Se você precisar deles, use entradas explícitas de allowlist e mantenha os prompts de aprovação habilitados.
openclaw security audit avisa quando entradas safeBins de interpretador/runtime não têm perfis explícitos, e openclaw doctor --fix pode criar entradas personalizadas ausentes em safeBinProfiles.
openclaw security audit e openclaw doctor também avisam quando você adiciona explicitamente de volta em safeBins binários de comportamento amplo, como jq.
Se você incluir explicitamente interpretadores na allowlist, habilite tools.exec.strictInlineEval para que formas inline de avaliação de código ainda exijam uma nova aprovação.
Para detalhes completos de política e exemplos, veja Aprovações de Exec e Safe bins versus allowlist.
Exemplos
Primeiro plano:apply_patch
apply_patch é uma subferramenta de exec para edições estruturadas em vários arquivos.
Ela é habilitada por padrão para modelos OpenAI e OpenAI Codex. Use configuração apenas
quando quiser desabilitá-la ou restringi-la a modelos específicos:
- Disponível apenas para modelos OpenAI/OpenAI Codex.
- A política de ferramentas ainda se aplica;
allow: ["write"]permite implicitamenteapply_patch. - A configuração fica em
tools.exec.applyPatch. tools.exec.applyPatch.enabledusatruepor padrão; defina comofalsepara desabilitar a ferramenta para modelos OpenAI.tools.exec.applyPatch.workspaceOnlyusatruepor padrão (contido no workspace). Defina comofalseapenas se você intencionalmente quiser queapply_patchgrave/exclua fora do diretório do workspace.
Relacionado
- Aprovações de Exec — gates de aprovação para comandos de shell
- Sandboxing — execução de comandos em ambientes isolados
- Processo em segundo plano — exec de longa duração e ferramenta process
- Segurança — política de ferramentas e acesso elevado