Agent Cockpit
Un orchestrateur d'agents IA qui tourne sur ma machine : une file de tâches, un arbre git isolé par tâche, et aucune action sensible sans mon accord.
Le problème
Faire travailler plusieurs agents de code en parallèle pose trois problèmes très concrets : ils se marchent dessus dans le même dépôt, ils consomment un quota qu'on ne voit pas, et quand l'un d'eux échoue à moitié, rien ne le dit. Les lancer à la main dans des terminaux séparés ne tient plus au-delà de deux ou trois tâches.
Architecture
Version texte
Application Tauri (macOS) — aucune donnée ne quitte la machine ├── UI React À décider · Tâches · Agents · Projets · Recherche ├── Runner local prend les tâches de la file, lance l'agent, rend le verrou ├── Store fichiers sous COCKPIT_DATA, pas de service distant └── git worktree un arbre de travail isolé par tâche Agent « ceo » : objectif → plan YAML (8 tâches max) → approbation → file
Les choix qui comptent
- Local d'abord, mono-utilisateur : l'hébergement sur VPS a été abandonné en cours de route. Moins de surface exposée, pas de jetons d'API en transit, pas de cloisonnement multi-tenant à sécuriser pour un outil qui n'a qu'un seul utilisateur.
- Un arbre git par tâche : deux agents ne peuvent pas se corrompre l'espace de travail, et le travail partiel d'une tâche interrompue survit à sa reprise.
- Périmètre d'autorisation explicite : chaque tâche déclare ce que l'agent a le droit de toucher. L'agent « ceo » décompose un objectif en un plan plafonné à huit tâches, mais ne crée rien : la validation humaine est un passage obligé, pas une option de confort.
- Équilibrage de quota : en mode automatique et sans contrainte métier, la tâche part vers l'agent le moins consommé du jour. Le coût estimé s'appuie sur les durées réellement observées et affiche « inconnu » plutôt qu'un chiffre inventé quand il n'y a pas d'historique.
- Empreinte de schéma : le runner et le serveur publient chacun une empreinte dérivée du schéma des tâches. Si elles divergent — typiquement un runner resté sur l'ancien code — l'interface affiche un bandeau rouge au lieu d'écrire des données que l'autre moitié du système ne sait pas relire.
- Reprise des tâches abandonnées : au démarrage, toute tâche tenue par un processus mort ou muet depuis trente minutes retourne à la file, verrou libéré et arbre de travail conservé.
La leçon
Un outil qui échoue en silence est pire qu'un outil qui plante. Quatre incidents successifs venaient tous d'un défaut invisible, jamais d'un défaut grave : un crash React sans garde-fou (écran noir), un runner qui tournait sur l'ancien code sans le signaler, un bouton « Valider » actif sur un plan inexploitable, une tâche figée par un verrou orphelin. Chaque correctif consiste à rendre l'état dégradé visible — garde-fou React, empreinte de schéma, blocage explicite, reprise automatique. Depuis, chaque fonctionnalité se conçoit en se demandant d'abord à quoi elle ressemble quand elle réussit à moitié.
État
- 148 tests automatisés
- 13 rôles d'agents configurés
Outil personnel en usage quotidien, pas un produit : il n'est pas déployé sur le cluster et n'est pas distribué. Chiffres relevés dans le dépôt le 21/09/2026.