Planifier une maintenance nocturne
Planifiez un workflow de maintenance et reprenez la même exécution après une pause liée au quota.
Ce que montre l’exemple
Section intitulée « Ce que montre l’exemple »- Planification cronPublie un job par nuit, dans votre fuseau horaire.
- Files de jobs et workersExécute chaque job dans un processus worker séparé.
- Exécutions durablesEnregistre chaque tâche terminée dans un checkpoint.
- Pauses sur quotaMet en pause sur une limite d’usage au lieu d’échouer.
- Agents de secoursConfie le travail à un second agent quand la limite est atteinte.
- Réponses typéesValide le rapport final de l’agent.
Lancez un planificateur et un worker dans deux processus séparés qui partagent .outpost/jobs.sqlite. Le planificateur publie les jobs de maintenance et le worker les exécute. Enregistrez les deux scripts à côté de la configuration de la page Installation.
Planifier les nuits
Section intitulée « Planifier les nuits »Les deux planifications donnent le même runId à une même nuit, par exemple deps-2026-09-29. Le job de 07:00 reprend cette exécution si une limite d’usage l’a mise en pause.
Exécuter le workflow
Section intitulée « Exécuter le workflow »Définissez le rapport, l’agent et la tâche de mise à jour.
Publiez le rapport et traitez les jobs avec checkpoint dans worker.ts.
Exécuter le script
Section intitulée « Exécuter le script »Lancez chaque commande dans son propre terminal ou service. Ctrl+C arrête l’un ou l’autre proprement.
Comprendre les étapes
Section intitulée « Comprendre les étapes »Chaque lien indique qui transmet quoi à qui, dans le sens de la flèche.
Claude Code peut indiquer quand sa limite se réinitialise ; Codex ne le fait jamais. Une exécution arrêtée par Codex seul attend donc le job de 07:00. Avec l’agent de secours, la tâche ne se met en pause que si les deux agents atteignent leur limite, et la réinitialisation n’est connue que si les deux l’indiquent.
Les tâches terminées viennent toujours du checkpoint. resume: "retry-incomplete" autorise les autres à s’exécuter de nouveau : une tâche interrompue par l’arrêt du worker, ou une tâche qui a échoué pendant la nuit.
Si vous arrêtez le worker pendant une exécution, son job revient dans la file après le bail de 30 secondes. Le worker redémarré le reprend et continue à partir de la tâche interrompue.
Adapter l’exemple
Section intitulée « Adapter l’exemple »Une autre tâche de maintenance
Section intitulée « Une autre tâche de maintenance »Changez le brief et le schéma du rapport : corriger les avertissements du linter, supprimer du code mort, mettre à jour un changelog. Gardez une branche datée par exécution pour que chaque matin ait sa propre relecture.
Approuver avant de fusionner
Section intitulée « Approuver avant de fusionner »Ajoutez un defineApprovalTask() après update, puis une tâche qui fusionne la branche. Le job se termine paused et liste la validation dans pauses. Soumettez la décision avec workflow.start(), le runId et la version de la valeur du job.
Utiliser Redis
Section intitulée « Utiliser Redis »Remplacez createSqliteTaskQueue() par createBullMQTaskQueue() de Redis et BullMQ pour répartir les workers sur plusieurs machines. Donnez à chaque worker un nom worker unique.
Planifier depuis la CI
Section intitulée « Planifier depuis la CI »Sans planificateur permanent, un job de CI planifié peut appeler nightly(runId).start() avec les mêmes options checkpoint et onQuota. Stockez les checkpoints dans S3 ou R2 pour que l’exécution de CI suivante reprenne celle qui est en pause ; voir Exécuter en CI.
- Un worker tué sans arrêt propre ne libère pas la propriété du checkpoint. Le job suivant de cette exécution échoue tant que vous ne l’avez pas libérée avec
recoverWorkflowCheckpoint()(Exécutions durables). - Une tâche reprise continue la conversation capturée d’un agent unique. Avec un agent de secours, elle repart du premier candidat et du brief d’origine, sur la même branche.
- Un worker exécute les jobs un par un : le job de 07:00 attend donc derrière une exécution encore en cours. Avec plusieurs workers, ce job échoue tant que l’exécution tourne encore.
API : runSchedules · createCronSchedule · runQueueWorker · defineWorkflowJob · WorkflowQuotaPolicy · createFallbackAgent · defineJsonResponse.