Ferramenta exec
Execute comandos de shell no workspace. Oferece suporte à execução em primeiro plano + em segundo plano viaprocess.
Se process não for permitido, exec será executado de forma síncrona e ignorará 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(sobrescritas de chave/valor)yieldMs(padrão 10000): envia automaticamente para segundo plano após um atrasobackground(bool): enviar 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 node parahost=nodeelevated(bool): solicita modo elevado (sair do sandbox para o caminho de host configurado);security=fullsó é forçado quando elevated é resolvido 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 estiver ativo.- Sem configuração extra,
host=autoainda “simplesmente funciona”: sem sandbox ele é resolvido 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 o padrão da sessão éhost=node). Só está disponível quando o acesso elevado está habilitado para a sessão/provider atual.- Aprovações de
gateway/nodesão controladas por~/.openclaw/exec-approvals.json. nodeexige um node pareado (app complementar ou host node headless).- Se vários nodes estiverem disponíveis, defina
exec.nodeoutools.exec.nodepara selecionar um. exec host=nodeé o único caminho de execução de shell para nodes; o wrapper legadonodes.runfoi removido.- Em hosts que não sejam Windows, exec usa
SHELLquando definido; seSHELLforfish, ele preferebash(oush) doPATHpara evitar scripts incompatíveis com fish, e depois usaSHELLse nenhum deles existir. - Em hosts Windows, exec prefere descobrir o PowerShell 7 (
pwsh) (Program Files, ProgramW6432 e depois PATH), e então recua para o Windows PowerShell 5.1. - A execução no host (
gateway/node) rejeitaenv.PATHe sobrescritas de loader (LD_*/DYLD_*) para evitar sequestro de binários ou injeção de código. - O OpenClaw define
OPENCLAW_SHELL=execno ambiente do comando gerado (incluindo PTY e execução em sandbox) para que regras de shell/profile possam detectar o contexto da ferramenta exec. - Importante: o sandboxing está desativado por padrão. Se o sandboxing estiver desativado,
host=autoimplícito será resolvido paragateway.host=sandboxexplícito ainda falha em modo fechado em vez de executar silenciosamente no host do gateway. Ative o sandboxing ou usehost=gatewaycom aprovações. - As 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 for resolvido fora deworkdir, a verificação preliminar será ignorada para esse arquivo. - Para trabalhos de longa duração que começam agora, inicie uma vez e conte com o
despertar automático na conclusão quando isso estiver habilitado e o comando emitir saída ou falhar.
Use
processpara logs, status, entrada ou intervenção; não emule agendamento com loops de sleep, loops de timeout ou polling repetido. - Para trabalho que deve acontecer depois 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 de exec em segundo plano colocam um evento do sistema na fila e solicitam um heartbeat ao sair.tools.exec.approvalRunningNoticeMs(padrão: 10000): emite um único aviso de “em execução” quando um exec protegido por aprovação roda por mais tempo que isso (0 desativa).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 com aprovações/allowlist, restrinja tanto
tools.exec.*quanto o~/.openclaw/exec-approvals.jsondo host; consulte Aprovações do exec. - O modo YOLO vem dos padrões da política do host (
security=full,ask=off), não dehost=auto. Se você quiser forçar o roteamento por gateway ou node, definatools.exec.hostou use/exec host=.... - No modo
security=fullmaisask=off, a execução no host segue diretamente a política configurada; não há filtro heurístico extra de pré-verificação de ofuscação de comando. 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 inline-eval continuam solicitando aprovação a cada vez.tools.exec.pathPrepend: lista de diretórios a acrescentar no início dePATHpara execuções de exec (apenas gateway + sandbox).tools.exec.safeBins: binários seguros somente-stdin que podem ser executados sem entradas explícitas de allowlist. Para detalhes do comportamento, consulte Safe bins.tools.exec.safeBinTrustedDirs: diretórios explícitos adicionais confiáveis para verificações de caminho desafeBins. Entradas dePATHnunca são automaticamente confiáveis. Os padrões integrados são/bine/usr/bin.tools.exec.safeBinProfiles: política opcional personalizada de argv por safe bin (minPositional,maxPositional,allowedValueFlags,deniedFlags).
Tratamento de PATH
host=gateway: mescla oPATHdo seu shell de login no ambiente do exec. Sobrescritas deenv.PATHsão rejeitadas para execução no host. O próprio daemon ainda roda 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.PATHno início apó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 sobrescritas de env não bloqueadas que você passar são enviadas ao node. Sobrescritas deenv.PATHsão rejeitadas para execução no host e ignoradas por hosts node. Se você precisar de entradas adicionais em PATH em um node, configure o ambiente do serviço do host node (systemd/launchd) ou instale ferramentas em locais padrão.
Sobrescritas 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/pareamento de canais mais commands.useAccessGroups).
Ele atualiza apenas o estado da sessão e não grava configuração. Para desativar exec de forma rígida, negue-o via
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 do exec (app complementar / host node)
Agentes em sandbox podem exigir aprovação por solicitação antes queexec rode no host gateway ou node.
Consulte Aprovações do exec para ver a política, allowlist e 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 for 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 só incluir um comando manual /approve quando o resultado da ferramenta
disser explicitamente que aprovações por chat não estão disponíveis ou que aprovação manual é o
único caminho.
Allowlist + safe bins
A aplicação manual da allowlist corresponde apenas a caminhos de binário resolvidos (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 do exec. Não é o mesmo que
entradas manuais de allowlist por caminho. Para confiança estrita e explícita, mantenha autoAllowSkills desativado.
Use os dois controles para funções diferentes:
tools.exec.safeBins: pequenos filtros de stream somente-stdin.tools.exec.safeBinTrustedDirs: diretórios extras explicitamente confiáveis para caminhos executáveis de safe bins.tools.exec.safeBinProfiles: política explícita de argv para safe bins personalizados.- allowlist: confiança explícita para caminhos 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 prompts de aprovação habilitados.
openclaw security audit avisa quando entradas de interpretador/runtime em safeBins 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 bins de comportamento amplo, como jq, de volta em safeBins.
Se você permitir explicitamente interpretadores por allowlist, ative 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, consulte Aprovações do 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 vem habilitada por padrão para modelos OpenAI e OpenAI Codex. Use configuração apenas
quando quiser desativá-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; definafalsepara desativar a ferramenta para modelos OpenAI.tools.exec.applyPatch.workspaceOnlyusatruepor padrão (contido no workspace). Definafalseapenas se você quiser intencionalmente queapply_patchgrave/exclua fora do diretório do workspace.
Relacionado
- Aprovações do exec — gates de aprovação para comandos de shell
- Sandboxing — execução de comandos em ambientes com sandbox
- Processo em segundo plano — exec de longa duração e ferramenta process
- Segurança — política de ferramentas e acesso elevado