Execute comandos shell no workspace.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
exec é uma superfície shell mutável: comandos podem criar, editar ou excluir arquivos onde quer que o host selecionado ou o sistema de arquivos do sandbox permita. Desabilitar ferramentas de sistema de arquivos do OpenClaw, como write, edit ou apply_patch, não torna exec somente leitura.
Oferece suporte à execução em primeiro plano + 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 só vê sessões do mesmo agente.
Parâmetros
Comando shell a executar.
Diretório de trabalho do comando.
Substituições de ambiente de chave/valor mescladas sobre o ambiente herdado.
Coloca automaticamente o comando em segundo plano após este atraso (ms).
Coloca o comando em segundo plano imediatamente em vez de esperar por
yieldMs.Substitui o tempo limite de exec configurado para esta chamada. Defina
timeout: 0 somente quando o comando deve executar sem o tempo limite do processo exec.Executa em um pseudoterminal quando disponível. Use para CLIs somente TTY, agentes de codificação e UIs de terminal.
Onde executar.
auto resolve para sandbox quando um runtime de sandbox está ativo e para gateway caso contrário.Ignorado para chamadas normais de ferramentas. A segurança de
gateway / node é controlada por
tools.exec.security e ~/.openclaw/exec-approvals.json; o modo elevado pode
forçar security=full somente quando o operador concede explicitamente acesso elevado.Comportamento do prompt de aprovação para execução em
gateway / node.ID/nome do Node quando
host=node.Solicita modo elevado — escapa do sandbox para o caminho de host configurado.
security=full é forçado somente quando elevated resolve para full.hosttemautocomo 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 nome de host; valores parecidos com nomes de host são rejeitados antes de o comando executar.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, resolve paragateway; com um sandbox ativo, permanece no sandbox. elevatedescapa do sandbox para o caminho de host configurado:gatewaypor padrão, ounodequandotools.exec.host=node(ou 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. noderequer um node pareado (aplicativo companheiro 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 shell para nodes; o wrapper legadonodes.runfoi removido.timeoutse aplica à execução em primeiro plano, segundo plano,yieldMs, gateway, sandbox e nodesystem.run. Se omitido, o OpenClaw usatools.exec.timeoutSec;timeout: 0explícito desabilita o tempo limite do processo exec para essa chamada.- Em hosts não Windows, exec usa
SHELLquando definido; seSHELLforfish, ele preferebash(oush) dePATHpara evitar scripts incompatíveis com fish, depois recorre aSHELLse nenhum deles existir. - Em hosts Windows, exec prefere a descoberta do PowerShell 7 (
pwsh) (Program Files, ProgramW6432, depois PATH), depois recorre ao Windows PowerShell 5.1. - A execução no host (
gateway/node) rejeita substituições deenv.PATHe de loader (LD_*/DYLD_*) para impedir sequestro de binário 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 no chat quando existir.- Importante: o sandboxing fica desativado por padrão. Se o sandboxing estiver desativado,
host=autoimplícito resolve paragateway.host=sandboxexplícito ainda falha fechado em vez de executar silenciosamente no host gateway. Habilite o sandboxing ou usehost=gatewaycom aprovações. - Verificações de pré-voo de scripts (para erros comuns de sintaxe shell em Python/Node) inspecionam apenas arquivos dentro do
limite efetivo de
workdir. Se um caminho de script resolver para fora deworkdir, o pré-voo é ignorado para esse arquivo. - Para trabalho de longa duração que começa agora, inicie-o 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 trabalho que deve acontecer depois ou em uma agenda, 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 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 um exec com aprovação obrigatória executa por mais tempo 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 não definido)tools.exec.ask(padrão:off)- Exec de host sem aprovação é o padrão para gateway + node. Se quiser comportamento de aprovações/allowlist, restrinja tanto
tools.exec.*quanto o~/.openclaw/exec-approvals.jsondo host; consulte 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=fullmaisask=off, exec de 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 de pré-voo de script. tools.exec.node(padrão: não definido)tools.exec.strictInlineEval(padrão: false): quando true, formas de eval inline de interpretador, comopython -c,node -e,ruby -e,perl -e,php -r,lua -eeosascript -e, sempre exigem aprovação explícita.allow-alwaysainda pode persistir invocações benignas de interpretador/script, mas formas de inline-eval ainda solicitam aprovação a cada vez.tools.exec.commandHighlighting(padrão: false): quando true, prompts de aprovação podem destacar spans de comando derivados do parser no texto do comando. Defina comotrueglobalmente ou por agente para habilitar o destaque de texto de comando sem alterar a política de aprovação de exec.tools.exec.pathPrepend: lista de diretórios a antepor aPATHpara execuções de exec (somente gateway + sandbox).tools.exec.safeBins: binários seguros somente stdin que podem executar sem entradas explícitas de allowlist. Para detalhes de comportamento, consulte 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).
Tratamento de PATH
host=gateway: mescla oPATHdo seu shell de login ao ambiente de 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 ambiente 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 precisar de entradas PATH adicionais em um node, configure o ambiente de serviço do host de node (systemd/launchd) ou instale ferramentas em locais padrão.
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:
Modelo de autorização
/exec só é honrado 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 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 companheiro / host de node)
Agentes em sandbox podem exigir aprovação por solicitação antes queexec execute no gateway ou no host de node.
Consulte 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 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 de aprovação nativos, o agente deve confiar primeiro nessa
UI nativa e incluir apenas um comando manual /approve quando o resultado da ferramenta
disser explicitamente que aprovações por chat não estão disponí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 puro. Nomes puros correspondem apenas a comandos invocados por meio de PATH, entãorg pode corresponder a
/opt/homebrew/bin/rg quando o comando é rg, mas não a ./rg ou /tmp/rg.
Quando security=allowlist, comandos shell são permitidos automaticamente somente se cada segmento
do pipeline estiver na allowlist ou for um bin seguro. Encadeamento (;, &&, ||) e redirecionamentos
são rejeitados no modo allowlist, a menos que cada segmento de nível superior satisfaça a
allowlist (incluindo bins seguros). 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 nas aprovações de exec. Ele não é o mesmo que
entradas manuais de allowlist de caminho. Para confiança explícita estrita, mantenha autoAllowSkills desabilitado.
Use os dois controles para tarefas diferentes:
tools.exec.safeBins: filtros de fluxo pequenos, somente via stdin.tools.exec.safeBinTrustedDirs: diretórios confiáveis extras explícitos para caminhos de executáveis safe-bin.tools.exec.safeBinProfiles: política argv explícita para safe bins personalizados.- lista de permissões: confiança explícita para caminhos de executáveis.
safeBins como uma lista de permissões genérica e não adicione binários de intérprete/runtime (por exemplo, python3, node, ruby, bash). Se você precisar deles, use entradas explícitas de lista de permissões e mantenha os prompts de aprovação habilitados.
openclaw security audit avisa quando entradas safeBins de intérprete/runtime não têm perfis explícitos, e openclaw doctor --fix pode estruturar entradas safeBinProfiles personalizadas ausentes.
openclaw security audit e openclaw doctor também avisam quando você adiciona explicitamente bins de comportamento amplo, como jq, de volta a safeBins.
Se você permitir intérpretes explicitamente na lista de permissões, 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 Safe bins versus lista de permissões.
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 somente
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. 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 — gates de aprovação para comandos de shell
- Sandboxing — execução de comandos em ambientes sandbox
- Processo em segundo plano — exec de longa duração e ferramenta de processo
- Segurança — política de ferramentas e acesso elevado