agents-deck - Dashboard temps réel multi-agents IA
Dashboard temps réel pour orchestrer 3 à 5 agents de coding IA (Claude Code, Codex, Cursor, Kimi) tournant en parallèle. Répond à "qui fait quoi, qui est bloqué, qui attend qui" en un coup d'œil. Philosophie zero-DB : le repo Git est la base de données via fichiers YAML. Manifest auto-discovery (project.yml), 5 artefacts (Ticket, Backlog, Message, Reply, Changelog), 3 rôles (coordinator, executor, oversight). Status = location (le dossier d'un ticket EST son statut, git mv = transition). Dual source of truth (status.yml agent vs state.yml coordinator) avec détection de conflits. Isolation par branches/worktrees Git, ~17 500 LOC TypeScript.
Architecture Zero-DB : le repo Git est la base de données
Dashboard temps réel qui watch des fichiers YAML versionnés dans le repo cible. Aucune persistence propre.
Backend Node.js + Express
Serveur TypeScript de ~6 400 LOC. 32 parsers spécialisés (parser-yml-*, parser-state, parser-git, parser-messages...). Validation Ajv contre 14 schémas JSON Draft-07. Watcher chokidar + bus d'événements SSE pour push temps réel au front.
Frontend React + Vite
SPA de ~11 100 LOC. 37 composants, 10 pages, react-router 7, Tailwind + Radix UI, framer-motion. Live updates via EventSource. Switcher multi-projets (registre XDG local), modale détail agent (Tickets/Messages/Replies en 1 bundle).
Modèle de données YAML
5 artefacts (T_* ticket, B_* backlog, M_* message, R_* reply, C_* changelog) + 3 rôles (coordinator, executor, oversight). Un seul project.yml à la racine du repo cible déclare agents, phases, paths, conventions — le dashboard se reconfigure tout seul. Aucun hardcode.
Isolation Git + worktrees
Chaque agent travaille sur sa branche agent/<id>/active, optionnellement en worktree séparé monté :ro dans le container. Status d'un ticket = son dossier (planned/, working/, done/, ...) → git mv = transition d'état. Pas de champ qui peut dériver.
Fonctionnalités Clés
Manifest auto-discovery
Un seul project.yml à la racine déclare agents, phases, paths, rôles. Le dashboard se reconfigure tout seul, zéro hardcode. Fork sur un autre repo = copier project.yml.
Zero-DB philosophy
Aucune persistence propre. State reconstruit à chaque requête depuis YAML + git refs. Restart container = zéro perte. Backup = git push. Audit trail = git log.
Status = location
Le statut d'un ticket est son dossier (planned/drafts/blocked/working/waiting/done/cancelled). git mv = transition. Pas de champ qui peut dériver du disque.
Dual source of truth
status.yml (ce que l'agent dit qu'il fait) vs state.yml (ce que le coordinator attend). Divergence → conflict card sur le dashboard, investigation obligatoire.
Isolation par worktree
Chaque agent sur sa branche dédiée, optionnellement en worktree séparé. Monté :ro côté Docker. Deux agents ne peuvent jamais éditer le même fichier en même temps.
Server-Sent Events
Push temps réel des changements de fichiers vers le navigateur via chokidar + bus d'événements. Pas de polling, refresh sub-seconde.
State machine 6 états
closed > deploying > blocked > waiting_for_review > working > standby. Calculé depuis status.yml avec fallback git signals (commits ahead, last activity, dirty files).
Multi-projets via registry XDG
Switcher entre plusieurs repos observés. Registre local ~/.config/agents-deck/projects.json. API /api/v2/projects pour register/switch/remove.
Stack Technique
Serveur Express 4, modules ESM, build via tsc + tsx watch en dev
Parse YAML strict + validation contre 14 schémas JSON Draft-07
Watcher filesystem + bus d'événements + Server-Sent Events vers le navigateur
SPA, 37 composants, 10 pages, code-splitting par route
Design system, primitives accessibles (scroll-area, select, switch, tabs, tooltip)
Routes /v2/* (canonique YAML) + / (legacy) avec sidebar contextuelle
Build TypeScript dans builder, runtime Alpine avec git installé pour git status --porcelain
Une branche agent/<id>/active par agent, worktrees montés :ro dans le container
Résultats & Métriques
Performance Technique
Défis Techniques & Solutions
Éviter la dérive d'état
Coordination multi-agents sans bottleneck
Collision de fichiers entre agents
Restart sans perte de contexte
Compétences Démontrées
Architecture système
TypeScript backend
React frontend
Git tooling avancé
DevEx & packaging
Intéressé par ce projet ?
Contactez-moi pour discuter de projets similaires ou pour plus d'informations.