Soixante conteneurs sur un seul serveur
Une seule machine bare-metal fait tourner des dizaines à des centaines de conteneurs Hoody. La déduplication KSM et BTRFS rend le coût marginal quasi nul.
Une ligne cron traditionnelle lance reconcile.sh à 2h. Une ligne cron Hoody POST un prompt à hoody-agent. Le schedule est fixe. Le travail ne l'est pas. Les cas particuliers cessent d'être des branches que vous maintenez — ils deviennent du contexte que l'agent raisonne.
cinq matins · cinq décisions différentes · une ligne crontab
Hoody Cron est un crontab managé sur chaque container. Hoody Agent est un agent autonome intégré sur le même container. L'entrée cron curl l'agent. L'agent lit la date, lit les données, et décide ce que la journée demande. Les deux surfaces sont HTTP — le cron vit à /users/me/entries, l'agent à /api/v1/agent/tasks. Aucun glue code entre les deux.
# POST /api/v1/cron/users/me/entries { "schedule": "0 7 * * *", "command": "curl -X POST $AGENT/api/v1/agent/tasks \ -d @prompt.json", "comment": "morning-reports" }
# prompt.json — the body of the POST { "description": "Réconcilie les commandes d'hier. Remappe si le schéma a dérivé. Arrête et alerte l'astreinte si le score d'anomalie > 3. Si aujourd'hui est le dernier jour du mois, inclus la clôture mensuelle sur le ledger ajusté fiscalement.", "mode": "code" }
Deux POST et vous avez terminé. La ligne crontab ne change plus jamais — le seul fichier que vous maintenez est le prompt. Nouveau cas particulier ? Ajoute une phrase. Nouvelle règle d'anomalie ? Ajoute une phrase. Le schedule continue de se déclencher ; l'agent comprend ce que chaque déclenchement signifie.
La forme du travail que l'agent reçoit est toujours la même — une date, un dataset, un objectif. Ce qui change, c'est ce que l'agent décide d'en faire.
L'agent tourne après le déclenchement du cron. Il vérifie le calendrier — fin de mois, jour férié, clôture fiscale. Il échantillonne le dataset — schéma, volume, score d'anomalie. Il choisit l'action suivante avec ce contexte, pas depuis un if-tree statique que vous avez écrit il y a six mois.
Quand l'export d'hier ajoute une colonne refund_reason, un script casse et vous paie. L'agent lit le schéma, le mappe au champ legacy, et note le changement dans le résumé du run. La ligne crontab n'a jamais eu à le savoir.
Chaque run renvoie ce que l'agent a décidé et pourquoi. L'historique est en français — « skipped: pas de nouvelles données », « adapted: colonne refund ajoutée », « anomaly: pic de refunds +412%, astreinte alertée » — pas exit code 0 / exit code 1. Les logs du cron deviennent un journal.
Trois étapes — le cron se déclenche, l'agent raisonne, la décision atterrit. L'étape du milieu est celle que vous écriviez avant vous-même dans un script shell de 400 lignes avec dix-sept branches de cas particuliers. Maintenant c'est un prompt.
Hoody Cron lance l'entrée. La ligne crontab est un curl : POST /api/v1/agent/tasks avec le corps du prompt. Pas de retries écrits par vous, pas de plomberie de logging — le service cron injecte l'entrée dans le crontab système et suit le run.
L'agent reçoit la description, ouvre ses outils — terminal, files, sqlite, browser, exec — et choisit un plan d'action. Il peut exécuter, skip, adapter ou alerter. Les choix changent chaque jour. Les instructions, non.
Le run se termine. L'agent renvoie une ligne de résumé : rapports régénérés, skipped car pas de nouvelles données, arrêté sur anomalie. vous le lis sur votre téléphone au petit-déjeuner.
Le schedule n'a pas changé. Le script n'a pas changé. Ce qui a changé, c'est si vous, l'humain, deviez vous lever pour vous en occuper. Avec l'agent dans la boucle, la réponse est presque toujours non — et l'historique de runs vous dit pourquoi.
Hoody Cron et Hoody Agent sont deux services sur le même conteneur, tous deux joignables en HTTP. Les chiffres viennent des surfaces documentées — pas de benchmarks inventés.
Un curl dans le crontab, à l'infini. Le corps du prompt est la seule chose que vous réécris — et vous le fais dans un fichier JSON, pas en lançant crontab -e.
hoody-agent expose la surface complète — terminal exec, lecture/écriture de fichiers, requêtes sqlite, automation navigateur, contrôle de daemon — à la task de l'agent comme appels HTTP simples.
Aucun SDK entre le cron et l'agent. POST une URL, lit une autre. Les deux services vivent sur le même conteneur, donc l'appel est rapide en réseau local.
Hoody Cron supporte les expressions standards à 5 champs (* * * * *) et les macros (@hourly, @daily, @weekly, @monthly, @yearly). La création de task Hoody Agent est un POST /api/v1/agent/tasks ; les updates live streament sur /api/v1/agent/ws.
L'entrée cron ne lance pas le job — elle demande à un agent de comprendre le job.
L'ensemble des choses que vous écriviez dans reconcile.sh parce que cron savait seulement lancer des fichiers. Chacune est une branche, un flag, une config — dont le schedule n'a en réalité pas besoin de connaître. L'agent lit le jour et décide.
Arrêtez de maintenir des scripts cron. Commencez à maintenir des prompts. Le schedule se déclenche ; l'agent comprend.