Tarefas agendadas (Cron)
Cron é o agendador integrado do Gateway. Ele persiste tarefas, ativa o agente no momento certo e pode entregar a saída de volta para um canal de chat ou endpoint de webhook.Início rápido
Como o cron funciona
- O cron é executado dentro do processo Gateway (não dentro do modelo).
- As tarefas persistem em
~/.openclaw/cron/jobs.json, então reinicializações não fazem os agendamentos se perderem. - Todas as execuções do cron criam registros de tarefa em segundo plano.
- Tarefas de execução única (
--at) são excluídas automaticamente após sucesso por padrão. - Execuções isoladas de cron fazem, em caráter best-effort, o fechamento de abas/processos de navegador rastreados para a sessão
cron:<jobId>quando a execução é concluída, para que automações de navegador destacadas não deixem processos órfãos. - Execuções isoladas de cron também se protegem contra respostas de confirmação obsoletas. Se o primeiro resultado for apenas uma atualização de status intermediária (
on it,pulling everything togethere dicas semelhantes) e nenhuma execução descendente de subagente ainda for responsável pela resposta final, o OpenClaw faz um novo prompt uma vez para obter o resultado real antes da entrega.
lost.
Tipos de agendamento
| Tipo | Flag da CLI | Descrição |
|---|---|---|
at | --at | Timestamp de execução única (ISO 8601 ou relativo como 20m) |
every | --every | Intervalo fixo |
cron | --cron | Expressão cron de 5 campos ou 6 campos com --tz opcional |
--tz America/New_York para agendamento por horário local.
Expressões recorrentes no início da hora são automaticamente escalonadas em até 5 minutos para reduzir picos de carga. Use --exact para forçar temporização precisa ou --stagger 30s para uma janela explícita.
Dia do mês e dia da semana usam lógica OR
As expressões cron são analisadas pelo croner. Quando os campos de dia do mês e dia da semana não são curingas, o croner faz correspondência quando qualquer um dos campos corresponde — não ambos. Esse é o comportamento padrão do Vixie cron.+ de dia da semana do Croner (0 9 15 * +1) ou agende com base em um campo e valide o outro no prompt ou comando da sua tarefa.
Estilos de execução
| Estilo | Valor de --session | Executa em | Melhor para |
|---|---|---|---|
| Sessão principal | main | Próximo turno de heartbeat | Lembretes, eventos do sistema |
| Isolada | isolated | cron:<jobId> dedicado | Relatórios, tarefas em segundo plano |
| Sessão atual | current | Vinculada na criação | Trabalho recorrente com contexto |
| Sessão personalizada | session:custom-id | Sessão nomeada persistente | Fluxos que se baseiam no histórico |
--wake now ou --wake next-heartbeat). Tarefas isoladas executam um turno dedicado do agente com uma sessão nova. Sessões personalizadas (session:xxx) persistem contexto entre execuções, permitindo fluxos como reuniões diárias que se baseiam em resumos anteriores.
Para tarefas isoladas, o encerramento do runtime agora inclui limpeza best-effort do navegador para essa sessão de cron. Falhas de limpeza são ignoradas para que o resultado real do cron ainda prevaleça.
Quando execuções isoladas de cron orquestram subagentes, a entrega também prefere a saída final descendente em vez de texto intermediário obsoleto do pai. Se descendentes ainda estiverem em execução, o OpenClaw suprime essa atualização parcial do pai em vez de anunciá-la.
Opções de payload para tarefas isoladas
--message: texto do prompt (obrigatório para isolada)--model/--thinking: substituições de modelo e nível de thinking--light-context: ignora a injeção do arquivo de bootstrap do workspace--tools exec,read: restringe quais ferramentas a tarefa pode usar
--model usa o modelo permitido selecionado para essa tarefa. Se o modelo solicitado não for permitido, o cron registra um aviso e volta para a seleção de modelo padrão/do agente dessa tarefa. Cadeias de fallback configuradas ainda se aplicam, mas uma substituição simples de modelo sem uma lista explícita de fallback por tarefa não acrescenta mais o primário do agente como um alvo extra oculto de nova tentativa.
A precedência de seleção de modelo para tarefas isoladas é:
- Substituição de modelo do hook do Gmail (quando a execução veio do Gmail e essa substituição é permitida)
modeldo payload por tarefa- Substituição de modelo da sessão cron armazenada
- Seleção de modelo padrão/do agente
params.fastMode, o cron isolado usa isso por padrão. Uma substituição armazenada de fastMode da sessão ainda prevalece sobre a configuração em qualquer direção.
Se uma execução isolada atingir uma transferência ativa de troca de modelo, o cron tenta novamente com o provedor/modelo trocado e persiste essa seleção ativa antes da nova tentativa. Quando a troca também traz um novo perfil de autenticação, o cron também persiste essa substituição de perfil de autenticação. As novas tentativas são limitadas: após a tentativa inicial mais 2 novas tentativas de troca, o cron aborta em vez de entrar em loop infinito.
Entrega e saída
| Modo | O que acontece |
|---|---|
announce | Entrega o resumo ao canal de destino (padrão para isolada) |
webhook | Envia payload do evento concluído por POST para uma URL |
none | Apenas interno, sem entrega |
--announce --channel telegram --to "-1001234567890" para entrega em canal. Para tópicos de fórum do Telegram, use -1001234567890:topic:123. Destinos de Slack/Discord/Mattermost devem usar prefixos explícitos (channel:<id>, user:<id>).
Para tarefas isoladas sob responsabilidade do cron, o executor é responsável pelo caminho final de entrega. O agente recebe um prompt para retornar um resumo em texto simples, e esse resumo é então enviado por announce, webhook ou mantido internamente para none. --no-deliver não devolve a entrega ao agente; ele mantém a execução interna.
Se a tarefa original disser explicitamente para enviar mensagem a algum destinatário externo, o agente deve indicar em sua saída quem/onde essa mensagem deve ir em vez de tentar enviá-la diretamente.
As notificações de falha seguem um caminho de destino separado:
cron.failureDestinationdefine um padrão global para notificações de falha.job.delivery.failureDestinationsubstitui isso por tarefa.- Se nenhum dos dois estiver definido e a tarefa já entregar via
announce, as notificações de falha agora usam esse destino principal de anúncio como fallback. delivery.failureDestinationsó é compatível com tarefassessionTarget="isolated"a menos que o modo principal de entrega sejawebhook.
Exemplos de CLI
Lembrete de execução única (sessão principal):Webhooks
O Gateway pode expor endpoints HTTP de webhook para gatilhos externos. Ative na configuração:Autenticação
Toda solicitação deve incluir o token do hook por cabeçalho:Authorization: Bearer <token>(recomendado)x-openclaw-token: <token>
POST /hooks/wake
Enfileire um evento do sistema para a sessão principal:text(obrigatório): descrição do eventomode(opcional):now(padrão) ounext-heartbeat
POST /hooks/agent
Execute um turno isolado do agente:message (obrigatório), name, agentId, wakeMode, deliver, channel, to, model, thinking, timeoutSeconds.
Hooks mapeados (POST /hooks/<name>)
Nomes de hook personalizados são resolvidos porhooks.mappings na configuração. Os mapeamentos podem transformar payloads arbitrários em ações wake ou agent com templates ou transformações em código.
Segurança
- Mantenha os endpoints de hook atrás de loopback, tailnet ou proxy reverso confiável.
- Use um token dedicado para hooks; não reutilize tokens de autenticação do gateway.
- Mantenha
hooks.pathem um subcaminho dedicado;/é rejeitado. - Defina
hooks.allowedAgentIdspara limitar o roteamento explícito deagentId. - Mantenha
hooks.allowRequestSessionKey=false, a menos que você precise de sessões selecionadas pelo chamador. - Se você ativar
hooks.allowRequestSessionKey, também definahooks.allowedSessionKeyPrefixespara restringir os formatos permitidos de chave de sessão. - Payloads de hook são encapsulados com limites de segurança por padrão.
Integração com Gmail PubSub
Conecte gatilhos da caixa de entrada do Gmail ao OpenClaw via Google PubSub. Pré-requisitos: CLIgcloud, gog (gogcli), hooks do OpenClaw ativados, Tailscale para o endpoint HTTPS público.
Configuração pelo assistente (recomendado)
hooks.gmail, ativa a predefinição do Gmail e usa Tailscale Funnel para o endpoint de push.
Inicialização automática do Gateway
Quandohooks.enabled=true e hooks.gmail.account está definido, o Gateway inicia gog gmail watch serve na inicialização e renova automaticamente o watch. Defina OPENCLAW_SKIP_GMAIL_WATCHER=1 para desativar isso.
Configuração manual única
- Selecione o projeto do GCP que possui o cliente OAuth usado por
gog:
- Crie o tópico e conceda acesso de push do Gmail:
- Inicie o watch:
Substituição de modelo do Gmail
Gerenciando tarefas
openclaw cron add|edit --model ...altera o modelo selecionado da tarefa.- Se o modelo for permitido, exatamente esse provedor/modelo chega à execução do agente isolado.
- Se não for permitido, o cron emite um aviso e retorna para a seleção de modelo padrão/do agente da tarefa.
- Cadeias de fallback configuradas ainda se aplicam, mas uma substituição simples com
--modelsem uma lista explícita de fallback por tarefa não recai mais para o modelo primário do agente como um alvo extra silencioso de nova tentativa.
Configuração
cron.enabled: false ou OPENCLAW_SKIP_CRON=1.
Nova tentativa de execução única: erros transitórios (limite de taxa, sobrecarga, rede, erro de servidor) tentam novamente até 3 vezes com backoff exponencial. Erros permanentes desativam imediatamente.
Nova tentativa recorrente: backoff exponencial (30s a 60m) entre novas tentativas. O backoff é redefinido após a próxima execução bem-sucedida.
Manutenção: cron.sessionRetention (padrão 24h) remove entradas de sessão de execuções isoladas. cron.runLog.maxBytes / cron.runLog.keepLines fazem poda automática dos arquivos de log de execução.
Solução de problemas
Sequência de comandos
O cron não dispara
- Verifique
cron.enablede a variável de ambienteOPENCLAW_SKIP_CRON. - Confirme se o Gateway está em execução contínua.
- Para agendamentos
cron, verifique o fuso horário (--tz) em relação ao fuso horário do host. reason: not-duena saída da execução significa que a execução manual foi verificada comopenclaw cron run <jobId> --duee a tarefa ainda não estava vencida.
O cron disparou, mas não houve entrega
- Modo de entrega
nonesignifica que nenhuma mensagem externa é esperada. - Destino de entrega ausente/inválido (
channel/to) significa que a saída foi ignorada. - Erros de autenticação do canal (
unauthorized,Forbidden) significam que a entrega foi bloqueada pelas credenciais. - Se a execução isolada retornar apenas o token silencioso (
NO_REPLY/no_reply), o OpenClaw suprime a entrega direta para saída externa e também suprime o caminho de fallback do resumo enfileirado, então nada é publicado de volta no chat. - Para tarefas isoladas controladas pelo cron, não espere que o agente use a ferramenta de mensagem como fallback. O executor é responsável pela entrega final;
--no-delivera mantém interna em vez de permitir um envio direto.
Cuidados com fuso horário
- Cron sem
--tzusa o fuso horário do host do gateway. - Agendamentos
atsem fuso horário são tratados como UTC. activeHoursdo heartbeat usa a resolução de fuso horário configurada.
Relacionado
- Automação e tarefas — todos os mecanismos de automação em um só lugar
- Tarefas em segundo plano — registro de tarefas para execuções de cron
- Heartbeat — turnos periódicos da sessão principal
- Fuso horário — configuração de fuso horário