Tools
Ferramenta exec
Execute comandos de shell no workspace. Suporta execução em primeiro plano + em segundo plano via process.
Se process não for permitido, exec executa de forma síncrona e ignora yieldMs/background.
Sessões em segundo plano têm escopo por agente; process vê apenas sessões do mesmo agente.
Parâmetros
commandstringrequiredComando de shell a executar.
workdirstringDiretório de trabalho para o comando.
envobjectSubstituições de ambiente chave/valor mescladas sobre o ambiente herdado.
yieldMsnumberEnviar automaticamente o comando para segundo plano após este atraso (ms).
backgroundbooleanEnviar o comando imediatamente para segundo plano em vez de aguardar yieldMs.
timeoutnumberSubstitui o tempo limite de exec configurado para esta chamada. Defina timeout: 0 apenas quando o comando deve ser executado sem o tempo limite do processo exec.
ptybooleanExecuta em um pseudoterminal quando disponível. Use para CLIs que exigem TTY, agentes de codificação e UIs de terminal.
host'auto' | 'sandbox' | 'gateway' | 'node'Onde executar. auto resolve para sandbox quando um runtime de sandbox está ativo e para gateway caso contrário.
security'deny' | 'allowlist' | 'full'Modo de aplicação para execução em gateway / node.
ask'off' | 'on-miss' | 'always'Comportamento do prompt de aprovação para execução em gateway / node.
nodestringID/nome do Node quando host=node.
elevatedbooleanSolicita modo elevado — escapa do sandbox para o caminho configurado do host. security=full é forçado apenas quando elevado resolve para full.
Observações:
hostusaautocomo padrão: sandbox quando o runtime de sandbox está ativo para a sessão; caso contrário, Gateway.hostaceita apenasauto,sandbox,gatewayounode. Ele não é um seletor de hostname; valores parecidos com hostname são rejeitados antes da execução do comando.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. elevatedescapa do sandbox para o caminho configurado do host:gatewaypor padrão, ounodequandotools.exec.host=node(ou o padrão da sessão éhost=node). Ele só fica 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 Node pareado (aplicativo complementar ou host de 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.timeoutse aplica à execução em primeiro plano, em segundo plano,yieldMs, Gateway, sandbox esystem.runno Node. Se omitido, o OpenClaw usatools.exec.timeoutSec;timeout: 0explícito desabilita o tempo limite do processo exec para essa chamada.- Em hosts que não são Windows, exec usa
SHELLquando definido; seSHELLforfish, ele preferebash(oush) doPATHpara evitar scripts incompatíveis com fish, depois volta paraSHELLse nenhum deles existir. - Em hosts Windows, exec prefere a descoberta do PowerShell 7 (
pwsh) (Program Files, ProgramW6432, depois PATH), depois volta para o Windows PowerShell 5.1. - A execução no host (
gateway/node) rejeitaenv.PATHe substituições de loader (LD_*/DYLD_*) para impedir sequestro de binários ou código injetado. - O OpenClaw define
OPENCLAW_SHELL=execno ambiente do comando gerado (incluindo execução PTY e sandbox), para que regras de shell/perfil possam detectar o contexto da ferramenta exec. openclaw channels loginé bloqueado emexecporque é um fluxo interativo de autenticação de canal; execute-o em um terminal no host Gateway ou use a ferramenta de login nativa do canal pelo chat quando existir.- Importante: sandboxing vem desativado por padrão. Se sandboxing estiver desativado,
host=autoimplícito resolve paragateway.host=sandboxexplícito ainda falha fechado em vez de executar silenciosamente no host Gateway. Habilite sandboxing ou usehost=gatewaycom aprovações. - Verificações prévias de scripts (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 prévia é ignorada para esse arquivo. - Para trabalhos de longa duração que começam agora, inicie uma vez e conte com o despertar 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 emule agendamento com loops de sleep, loops de timeout ou polling repetido. - Para trabalhos que devem acontecer depois ou em uma programação, use cron em vez de
padrões de sleep/atraso com
exec.
Configuração
tools.exec.notifyOnExit(padrão: true): quando true, sessões exec enviadas para segundo plano enfileiram um evento de 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 sujeita a aprovação dura mais do que isso (0 desabilita).tools.exec.timeoutSec(padrão: 1800): tempo limite exec padrão por comando, em segundos.timeoutpor chamada o substitui;timeout: 0por chamada desabilita o tempo limite do processo exec.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 indefinido)tools.exec.ask(padrão:off)- Exec no host sem aprovação é o padrão para Gateway + Node. Se você quiser comportamento com aprovações/lista de permissões, restrinja tanto
tools.exec.*quanto o~/.openclaw/exec-approvals.jsondo host; veja Aprovações de exec. - YOLO vem dos padrões de política do host (
security=full,ask=off), não dehost=auto. Se quiser forçar o roteamento por Gateway ou Node, definatools.exec.hostou use/exec host=.... - No modo
security=fullcomask=off, exec no host segue diretamente a política configurada; não há camada extra de pré-filtro heurístico de ofuscação de comando nem rejeição por verificação prévia de script. tools.exec.node(padrão: indefinido)tools.exec.strictInlineEval(padrão: false): quando true, formas de avaliação inline de 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 exibem prompt a cada vez.tools.exec.pathPrepend: lista de diretórios a antepor aoPATHpara 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 Bins seguros.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 argv personalizada opcional por bin seguro (minPositional,maxPositional,allowedValueFlags,deniedFlags).
Exemplo:
{
tools: {
exec: {
pathPrepend: ["~/bin", "/opt/oss/bin"],
},
},
}
Tratamento de PATH
host=gateway: mescla oPATHdo seu shell de login ao ambiente exec. Substituições deenv.PATHsão rejeitadas para execução no host. O daemon em si ainda executa 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 antepõeenv.PATHapós carregar o perfil por meio de uma variável de ambiente interna (sem interpolação de shell);tools.exec.pathPrependtambém se aplica aqui.host=node: apenas substituições de env não bloqueadas que você passa 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 PATH adicionais em um Node, configure o ambiente do serviço host do Node (systemd/launchd) ou instale ferramentas em locais padrão.
Vinculação de Node por agente (use o índice da lista de agentes na configuração):
openclaw config get agents.list
openclaw config set agents.list[0].tools.exec.node "node-id-or-name"
UI de controle: a aba Nodes inclui um pequeno painel "Vinculação de Node exec" para as mesmas configurações.
Substituições de 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:
/exec host=auto security=allowlist ask=on-miss node=mac-1
Modelo de autorização
/exec só é respeitado para remetentes autorizados (allowlists/pareamento de canal mais commands.useAccessGroups).
Ele atualiza somente o estado da sessão e não grava configuração. Para desabilitar exec de forma rígida, negue-o via política de ferramenta
(tools.deny: ["exec"] ou por agente). Aprovações de host ainda se aplicam, a menos que você defina explicitamente
security=full e ask=off.
Aprovações de exec (aplicativo complementar / host de Node)
Agentes em sandbox podem exigir aprovação por solicitação antes que exec seja executado no host Gateway ou Node.
Veja Aprovações de exec para 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 de aprovado (ou negado / expirado),
o Gateway emite eventos de 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 de aprovação nativos, o agente deve confiar primeiro nessa
UI nativa e só incluir um comando /approve manual quando o resultado da ferramenta
disser explicitamente que aprovações por chat estão indisponíveis ou que a aprovação manual é o
único caminho.
Allowlist + bins seguros
A aplicação manual de allowlist corresponde a globs de caminho de binário resolvido e globs
de nome de comando simples. Nomes simples correspondem apenas a comandos invocados por PATH, então rg pode corresponder
a /opt/homebrew/bin/rg quando o comando é rg, mas não a ./rg ou /tmp/rg.
Quando security=allowlist, comandos de shell são permitidos automaticamente apenas se todos os segmentos de pipeline
estiverem na allowlist ou forem um bin seguro. Encadeamento (;, &&, ||) e redirecionamentos
são rejeitados no modo allowlist, a menos que todos os segmentos de nível superior satisfaçam a
allowlist (incluindo bins seguros). Redirecionamentos continuam sem suporte.
A confiança durável allow-always não ignora 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 de caminho. Para confiança estrita e explícita, mantenha autoAllowSkills desabilitado.
Use os dois controles para trabalhos diferentes:
tools.exec.safeBins: pequenos filtros de stream somente stdin.tools.exec.safeBinTrustedDirs: diretórios extras explícitos confiáveis para caminhos executáveis de bins seguros.tools.exec.safeBinProfiles: política argv explícita para bins seguros personalizados.- allowlist: confiança explícita para caminhos executáveis.
Não trate safeBins como uma lista de permissões genérica e não adicione binários de interpretadores/runtimes (por exemplo, python3, node, ruby, bash). Se precisar deles, use entradas explícitas na lista de permissões e mantenha os 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 binários de comportamento amplo, como jq, de volta a safeBins.
Se você permitir explicitamente interpretadores, habilite tools.exec.strictInlineEval para que formas de avaliação de código inline ainda exijam uma nova aprovação.
Para detalhes completos da política e exemplos, consulte Aprovações de Exec e Bins seguros versus lista de permissões.
Exemplos
Primeiro plano:
{ "tool": "exec", "command": "ls -la" }
Segundo plano + sondagem:
{"tool":"exec","command":"npm run build","yieldMs":1000}
{"tool":"process","action":"poll","sessionId":"<id>"}
A sondagem é para status sob demanda, não para loops de espera. Se o despertar por conclusão automática estiver habilitado, o comando poderá despertar a sessão quando emitir saída ou falhar.
Enviar teclas (estilo 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"]}
Enviar (enviar somente CR):
{ "tool": "process", "action": "submit", "sessionId": "<id>" }
Colar (entre delimitadores por padrão):
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }
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 somente
quando quiser desabilitá-la ou restringi-la a modelos específicos:
{
tools: {
exec: {
applyPatch: { workspaceOnly: true, allowModels: ["gpt-5.5"] },
},
},
}
Observações:
- Disponível somente para modelos OpenAI/OpenAI Codex.
- A política de ferramentas ainda se aplica;
allow: ["write"]permite implicitamenteapply_patch. deny: ["write"]não negaapply_patch; negueapply_patchexplicitamente ou usedeny: ["group:fs"]quando gravações de patch também devem ser bloqueadas.- A configuração fica em
tools.exec.applyPatch. tools.exec.applyPatch.enabledusatruecomo padrão; defina comofalsepara desabilitar a ferramenta para modelos OpenAI.tools.exec.applyPatch.workspaceOnlyusatruecomo padrão (contido no workspace). Defina comofalsesomente se você quiser intencionalmente queapply_patchgrave/exclua fora do diretório do workspace.
Relacionados
- Aprovações de Exec — barreiras de aprovação para comandos shell
- Sandboxing — execução de comandos em ambientes de sandbox
- Processo em Segundo Plano — ferramenta exec e process de longa execução
- Segurança — política de ferramentas e acesso elevado