Gateway
Execução em segundo plano e ferramenta de processo
OpenClaw executa comandos de shell por meio da ferramenta exec e mantém tarefas de longa duração na memória. A ferramenta process gerencia essas sessões em segundo plano.
ferramenta exec
Parâmetros principais:
command(obrigatório)yieldMs(padrão 10000): envia automaticamente para segundo plano após este atrasobackground(bool): envia imediatamente para segundo planotimeout(segundos, padrãotools.exec.timeoutSec): encerra o processo após esse tempo limite; definatimeout: 0somente para desabilitar o tempo limite do processo exec para essa chamadaelevated(bool): executa fora da sandbox se o modo elevado estiver habilitado/permitido (gatewaypor padrão, ounodequando o destino do exec fornode)- Precisa de um TTY real? Defina
pty: true. workdir,env
Comportamento:
- Execuções em primeiro plano retornam a saída diretamente.
- Quando enviado para segundo plano (explicitamente ou por tempo limite), a ferramenta retorna
status: "running"+sessionIde uma cauda curta. - Execuções em segundo plano e com
yieldMsherdamtools.exec.timeoutSec, a menos que a chamada forneça umtimeoutexplícito. - A saída é mantida na memória até que a sessão seja consultada ou limpa.
- Se a ferramenta
processnão for permitida,execexecuta de forma síncrona e ignorayieldMs/background. - Comandos exec iniciados recebem
OPENCLAW_SHELL=execpara regras de shell/perfil sensíveis ao contexto. - Para trabalhos de longa duração que começam agora, inicie-os uma vez e conte com o despertar de conclusão automático quando ele estiver habilitado e o comando emitir saída ou falhar.
- Se o despertar de conclusão automático não estiver disponível, ou se você precisar de confirmação de sucesso silencioso para um comando que saiu corretamente sem saída, use
processpara confirmar a conclusão. - Não emule lembretes ou acompanhamentos atrasados com loops de
sleepou consultas repetidas; use cron para trabalhos futuros.
Ponte de processo filho
Ao iniciar processos filhos de longa duração fora das ferramentas exec/process (por exemplo, respawns de CLI ou auxiliares do Gateway), anexe o auxiliar de ponte de processo filho para que os sinais de término sejam encaminhados e os listeners sejam desconectados ao sair/erro. Isso evita processos órfãos no systemd e mantém o comportamento de desligamento consistente entre plataformas.
Substituições de ambiente:
OPENCLAW_BASH_YIELD_MS: yield padrão (ms)OPENCLAW_BASH_MAX_OUTPUT_CHARS: limite de saída em memória (chars)OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS: limite de stdout/stderr pendente por stream (chars)OPENCLAW_BASH_JOB_TTL_MS: TTL para sessões finalizadas (ms, limitado a 1 min-3 h)OPENCLAW_PROCESS_INPUT_WAIT_IDLE_MS: limite de saída ociosa antes que sessões em segundo plano graváveis sejam marcadas como provavelmente aguardando entrada (padrão 15000 ms)
Configuração (preferida):
tools.exec.backgroundMs(padrão 10000)tools.exec.timeoutSec(padrão 1800)tools.exec.cleanupMs(padrão 1800000)tools.exec.notifyOnExit(padrão true): enfileira um evento de sistema + solicita Heartbeat quando um exec em segundo plano sai.tools.exec.notifyOnExitEmptySuccess(padrão false): quando true, também enfileira eventos de conclusão para execuções em segundo plano bem-sucedidas que não produziram saída.
ferramenta process
Ações:
list: sessões em execução + finalizadaspoll: drena a nova saída de uma sessão (também relata o status de saída)log: lê a saída agregada e mostra dicas de recuperação de entrada (compatível comoffset+limit)write: envia stdin (data,eofopcional)send-keys: envia tokens de teclas explícitos ou bytes para uma sessão baseada em PTYsubmit: envia Enter / retorno de carro para uma sessão baseada em PTYpaste: envia texto literal, opcionalmente envolvido no modo de colagem com colcheteskill: termina uma sessão em segundo planoclear: remove uma sessão finalizada da memóriaremove: encerra se estiver em execução; caso contrário, limpa se estiver finalizada
Observações:
- Somente sessões em segundo plano são listadas/persistidas na memória.
- Sessões são perdidas na reinicialização do processo (sem persistência em disco).
- Logs de sessão só são salvos no histórico do chat se você executar
process poll/loge o resultado da ferramenta for registrado. processé escopado por agente; ele só vê sessões iniciadas por esse agente.- Use
poll/logpara status, logs, confirmação de sucesso silencioso ou confirmação de conclusão quando o despertar de conclusão automático não estiver disponível. - Use
logantes de recuperar uma CLI interativa para que a transcrição atual, o estado de stdin e a dica de espera por entrada fiquem visíveis juntos. - Use
write/send-keys/submit/paste/killquando precisar de entrada ou intervenção. process listinclui umnamederivado (verbo do comando + destino) para varreduras rápidas.process list,pollelogrelatamwaitingForInputsomente quando a sessão ainda tem stdin gravável e ficou ociosa por mais tempo que o limite de espera por entrada.process logusaoffset/limitbaseados em linhas.- Quando
offsetelimitsão omitidos, ele retorna as últimas 200 linhas e inclui uma dica de paginação. - Quando
offseté fornecido elimité omitido, ele retorna deoffsetaté o fim (sem limitar a 200). - A consulta é para status sob demanda, não para agendamento por loop de espera. Se o trabalho deve acontecer depois, use cron em vez disso.
Exemplos
Execute uma tarefa longa e consulte depois:
{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }{ "tool": "process", "action": "poll", "sessionId": "<id>" }Inspecione uma sessão interativa antes de enviar entrada:
{ "tool": "process", "action": "log", "sessionId": "<id>" }Inicie imediatamente em segundo plano:
{ "tool": "exec", "command": "npm run build", "background": true }Envie stdin:
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }Envie teclas PTY:
{ "tool": "process", "action": "send-keys", "sessionId": "<id>", "keys": ["C-c"] }Envie a linha atual:
{ "tool": "process", "action": "submit", "sessionId": "<id>" }Cole texto literal:
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }