Ferramenta Exec
Execute comandos de shell no workspace. Suporta execução em primeiro plano + segundo plano viaprocess.
Se process não for permitido, exec executa de forma síncrona e ignora yieldMs/background.
As sessões em segundo plano são delimitadas por agente; process só vê sessões do mesmo agente.
Parâmetros
command(obrigatório)workdir(padrão: cwd)env(substituições chave/valor)yieldMs(padrão 10000): coloca automaticamente em segundo plano após atrasobackground(bool): segundo plano imediatamentetimeout(segundos, padrão 1800): encerra ao expirarpty(bool): executa em um pseudo-terminal quando disponível (CLIs somente TTY, agentes de código, UIs de terminal)host(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 (host do Gateway);security=fullsó é forçado quando o elevado resolve parafull
hosttem como padrãosandbox.elevatedé ignorado quando o sandboxing está desativado (exec já roda no host).- As aprovações
gateway/nodesão controladas por~/.openclaw/exec-approvals.json. noderequer um nó pareado (aplicativo complementar ou host de nó headless).- Se vários nós estiverem disponíveis, defina
exec.nodeoutools.exec.nodepara selecionar um. - Em hosts não Windows, o exec usa
SHELLquando definido; seSHELLforfish, ele preferebash(oush) dePATHpara evitar scripts incompatíveis com fish, depois faz fallback paraSHELLse nenhum existir. - A execução no host (
gateway/node) rejeitaenv.PATHe substituições de loader (LD_*/DYLD_*) para evitar sequestro de binários ou código injetado. - Importante: o sandboxing está desativado por padrão. Se o sandboxing estiver desativado,
host=sandboxexecuta diretamente no host do gateway (sem contêiner) e não requer aprovações. Para exigir aprovações, execute comhost=gatewaye configure as aprovações do exec (ou habilite o sandboxing).
Configuração
tools.exec.notifyOnExit(padrão: true): quando true, sessões de exec em segundo plano enfileiram um evento de sistema e solicitam um heartbeat ao sair.tools.exec.approvalRunningNoticeMs(padrão: 10000): emite um único aviso “em execução” quando um exec com aprovação demora mais que isso (0 desativa).tools.exec.host(padrão:sandbox)tools.exec.security(padrão:denypara sandbox,allowlistpara gateway + nó quando não definido)tools.exec.ask(padrão:on-miss)tools.exec.node(padrão: não definido)tools.exec.pathPrepend: lista de diretórios a serem adicionados antes dePATHpara execuções do exec.tools.exec.safeBins: binários seguros somente stdin que podem rodar sem entradas explícitas na allowlist.
Manipulação de PATH
host=gateway: mescla seuPATHdo shell de login no ambiente do exec. Substituições deenv.PATHsão rejeitadas para execução no host. O daemon em si 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 adicionaenv.PATHantes após o carregamento de perfil via uma variável de ambiente interna (sem interpolação de shell);tools.exec.pathPrependtambém se aplica aqui.host=node: somente substituições de env não bloqueadas que você passar são enviadas ao nó. Substituições deenv.PATHsão rejeitadas para execução no host. Se você precisar de entradas adicionais no PATH em um nó, configure o ambiente do serviço do host do nó (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ó é respeitado para remetentes autorizados (allowlists de canal/pareamento mais commands.useAccessGroups).
Ele atualiza apenas o estado da sessão e não grava configuração. Para desativar o exec de forma definitiva, negue-o via
política de ferramentas (tools.deny: ["exec"] ou por agente). Aprovações no host ainda se aplicam, a menos que você defina explicitamente
security=full e ask=off.
Aprovações do Exec (aplicativo complementar / host do nó)
Agentes em sandbox podem exigir aprovação por solicitação antes queexec execute no gateway ou no host do nó.
Veja Exec approvals 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. Após 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 é emitido.
Allowlist + bins seguros
A aplicação da allowlist corresponde apenas a caminhos de binários resolvidos (sem correspondência por basename). Quandosecurity=allowlist, comandos de shell são auto-permitidos somente se cada segmento do pipeline estiver
na allowlist ou for um bin seguro. Encadeamentos (;, &&, ||) e redirecionamentos são rejeitados no
modo allowlist, a menos que cada segmento de nível superior satisfaça a allowlist (incluindo safe bins).
Redirecionamentos continuam não suportados.
Exemplos
Primeiro plano:apply_patch (experimental)
apply_patch é um subtool de exec para edições estruturadas em vários arquivos.
Habilite explicitamente:
- Disponível apenas para modelos OpenAI/OpenAI Codex.
- A política de ferramentas ainda se aplica;
allow: ["exec"]permite implicitamenteapply_patch. - A configuração fica em
tools.exec.applyPatch. tools.exec.applyPatch.workspaceOnlyé definido comotruepor padrão (contido no workspace). Defina comofalseapenas se você intencionalmente quiser queapply_patchgrave/exclua fora do diretório do workspace.