Depuis quelques semaines, je construis un système d'agents IA autonomes avec OpenClaw pour gérer ma vie de dev : morning brief, monitoring Sentry, auto-amélioration nocturne…
Et chaque nuit, mon cron le plus important — celui qui extrait mes notes et améliore le système — plantait avec un timeout.
Le problème
Mon cron nightly-memory-extraction faisait 4 choses en une seule session :
- Extraire les faits importants de la journée → daily note
- Mettre à jour les apprentissages Sinaps (mon travail en alternance)
- Détecter les patterns d'erreurs →
patterns-learned.md - Consolider
MEMORY.md(la mémoire long-terme de l'agent)
Timeout configuré : 900 secondes. Résultat : le job mourait à ~16 minutes systématiquement.
"error": "cron: job execution timed out", "durationMs": 981008
La recherche
Avant de corriger, j'ai cherché si d'autres avaient le même problème. Reddit, Twitter, Substack — le consensus était clair.
@ZachHighley sur X :
"I had 50+ crons, 100+ scripts, ridiculous heartbeat bloat → audited and reduced to 15 crons → added a weekly audit to watch for bloat"
r/LocalLLaMA — "3 weeks with OpenClaw as daily driver" :
"Cron jobs can silently fail if prompts are too long or context gets compacted mid-task. The key insight: spawning isolated sessions for complex tasks works way better than cramming everything into one context."
"Watch any agent work on a complex task. For the first ten minutes, it's sharp. Around minute twenty or thirty — the agent starts repeating itself. It forgets."
Ce n'est pas un bug OpenClaw. C'est structurel : au-delà de ~20 minutes, n'importe quel LLM dégrade.
La solution : Single Responsibility pour les crons
Inspiré du principe SOLID appliqué aux agents : 1 cron = 1 responsabilité = 1 prompt court.
J'ai découpé mon monstre en 3 crons indépendants :
- 23h00 — nightly-1-extract : créer la daily note du jour → 39 secondes
- 23h20 — nightly-2-improve : patterns d'erreurs + MEMORY.md → 68 secondes
- 23h40 — nightly-3-sinaps : learning log → ~2 minutes
Résultat : 0 timeout. Chaque job fait une seule chose, en moins de 5 minutes.
Les règles que j'ai retenues
- Prompt court = pas de context compaction mid-task. Un prompt de 50 lignes avec 4 phases = risque élevé. Un prompt de 10 lignes avec 1 tâche = fiable.
- Haiku pour le mécanique, Sonnet pour le raisonnement. Lire/écrire des fichiers ne nécessite pas Claude Sonnet. 10x moins cher, plus rapide.
- Isolation = résilience. Avec 3 crons séparés, si l'un plante, les 2 autres tournent quand même.
- Toujours tester manuellement avant la nuit.
openclaw cron run <job-id>puisopenclaw cron runs <job-id>pour vérifier le résultat.