Pular para o conteúdo principal

Tarefas Agendadas e Cron Jobs

O PicoClaw armazena jobs agendados no workspace atual e pode executá-los como agent turns, entregas diretas ou comandos shell.

Tipos de Agendamento

A ferramenta cron suporta três formas de agendamento:

TipoDescriçãoÚnica vez?
at_secondsDispara uma única vez, relativa ao instante atual. O job é excluído após executar.Sim
every_secondsIntervalo recorrente, em segundos.Não
cron_exprExpressão cron padrão (ex.: 0 9 * * *).Não

Prioridade

Quando múltiplos campos de agendamento são fornecidos, a ferramenta usa esta ordem de prioridade: at_seconds > every_seconds > cron_expr.

Uso via CLI

O comando de CLI picoclaw cron add suporta apenas jobs recorrentes:

  • --every <seconds> -- intervalo recorrente
  • --cron '<expr>' -- expressão cron

Atualmente, não há uma flag de CLI para um job at de execução única. Jobs de execução única só podem ser criados através da ferramenta do agent.

Exemplos:

picoclaw cron add --name "Daily summary" --message "Summarize today's logs" --cron "0 18 * * *"
picoclaw cron add --name "Ping" --message "heartbeat" --every 300 --deliver

Modos de Execução

Os jobs são armazenados com um payload de mensagem e podem executar em três modos:

Agent Turn (deliver: false)

Este é o modo padrão da ferramenta cron.

Quando o job dispara, o PicoClaw reenvia a mensagem salva pelo agent loop como um novo agent turn. Use isso para trabalhos agendados que possam precisar de raciocínio, ferramentas ou uma resposta gerada.

Entrega Direta (deliver: true)

Quando o job dispara, o PicoClaw publica a mensagem salva diretamente no canal de destino e no destinatário, sem processamento pelo agent.

A flag de CLI picoclaw cron add --deliver usa este modo.

Execução de Comando

Quando um cron job inclui um campo command, o PicoClaw executa esse comando shell através da ferramenta exec e publica a saída do comando de volta no canal.

Para jobs de comando:

  • deliver é forçado para false quando o job é criado
  • A message salva torna-se apenas texto descritivo; a ação agendada é o comando shell
  • Jobs de comando requerem um canal interno
  • O comando atual da CLI picoclaw cron add não expõe uma flag command

Ações da Ferramenta

A ferramenta cron exposta ao agent suporta estas ações:

AçãoDescriçãoParâmetros obrigatórios
addCriar um novo job agendadomessage, mais um de at_seconds / every_seconds / cron_expr
listListar todos os jobs agendados habilitados--
removeRemover um job pelo IDjob_id
enableHabilitar um job desabilitadojob_id
disableDesabilitar um job (mantém no store)job_id

Parâmetros da Ferramenta

ParâmetroTipoObrigatórioDescrição
actionstringSimadd, list, remove, enable ou disable
messagestringPara addA mensagem de lembrete/tarefa a ser exibida quando disparada
commandstringNãoComando shell para executar diretamente
command_confirmbooleanNãoFlag de confirmação explícita para agendar um comando shell
at_secondsintegerNãoÚnica vez: segundos a partir de agora (ex.: 600 para 10 minutos)
every_secondsintegerNãoIntervalo recorrente em segundos (ex.: 3600 para cada hora)
cron_exprstringNãoExpressão cron (ex.: 0 9 * * *)
job_idstringPara remove/enable/disableID do job de destino

Configuração e Segurança

tools.cron

ConfigTipoPadrãoDescrição
enabledbooltrueRegistrar a ferramenta cron exposta ao agent
allow_commandbooltruePermitir jobs de comando sem confirmação extra
exec_timeout_minutesint5Timeout para execução de comandos agendados (0 = sem limite)

Se você desabilitar tools.cron.enabled, os usuários não poderão mais criar ou gerenciar jobs através da ferramenta do agent. O gateway continua iniciando o CronService, mas não instala o callback de execução de job. Como resultado, jobs devidos não chegam a rodar; jobs de execução única podem ser excluídos e jobs recorrentes podem ser reagendados sem executar seu payload.

Dependência de tools.exec

Jobs de comando agendados dependem de tools.exec.enabled (padrão: true).

Se tools.exec.enabled for false:

  • Novos jobs de comando são rejeitados pela ferramenta cron
  • Jobs de comando existentes publicam um erro "command execution is disabled" quando disparam

Comportamento de allow_command

tools.cron.allow_command tem padrão true. Esta não é uma chave de desligamento total. Se você definir allow_command como false, o PicoClaw ainda permite um job de comando quando o chamador passa explicitamente command_confirm: true.

Jobs de comando também requerem um canal interno. Lembretes que não são de comando não possuem essa restrição.

Exemplo de configuração:

{
"tools": {
"cron": {
"enabled": true,
"exec_timeout_minutes": 5,
"allow_command": true
},
"exec": {
"enabled": true
}
}
}

Persistência e Armazenamento

Os cron jobs são armazenados em:

<workspace>/cron/jobs.json

Por padrão, o workspace é:

~/.picoclaw/workspace

Se PICOCLAW_HOME estiver definido, o workspace padrão passa a ser:

$PICOCLAW_HOME/workspace

Tanto o gateway quanto os subcomandos da CLI picoclaw cron usam o mesmo arquivo cron/jobs.json.

Comportamento de armazenamento

  • Jobs at_seconds de execução única são excluídos após rodarem
  • Jobs recorrentes permanecem no store até serem removidos explicitamente
  • Jobs desabilitados permanecem no store e continuam aparecendo em picoclaw cron list

Ciclo de Vida do Job

Job created (enabled=true)
|
v
CronService computes nextRunAtMS
|
v
Timer fires when nextRunAtMS is reached
|
+-- at (one-time) ------> Execute -> Delete job
|
+-- every / cron -------> Execute -> Recompute nextRunAtMS

Cada job rastreia o estado de execução:

CampoDescrição
nextRunAtMsPróxima execução agendada
lastRunAtMsHorário de início da última execução
lastStatusok ou error
lastErrorMensagem de erro da última execução que falhou