République
Française
Retour d'expérience · beta.gouv.fr
Les outils, les agents, le chemin d'un ticket · et ce qui guide mes choix
Charles d'Oiron · Octobre 2026

L'ingénieur
Le projet
9 ans
d'existence, lancé en décembre 2017 à Argenteuil
±150 000
signalements traités par an, un message toutes les 10 secondes
9 027
utilisateurs actifs : 5 977 aidants, 3 050 opérateurs, 9 opérateurs partenaires
79 %
des blocages résolus en moins de 7 jours
Mai 2026
Octobre 2026
+1 M
de lignes migrées, neuf ans d'historique, rien de perdu
70 000
fichiers migrés d'un hébergeur à l'autre
15 000
comptes repris, cinq rôles, permissions conservées
< 20 min
de bascule en production, quasiment sans coupure
Le talk de mai est disponible sur demande. Ici, on part du dépôt tel qu'il était en mai, et on regarde comment il avance depuis.
01 · Depuis mai
Mai 2026 · fin de la refonte
Octobre 2026 · où j'en suis
L'idée du talk : je délègue aux agents tout le chemin du ticket à la MR, et je ne garde que la décision. Ça tient parce que les règles vivent dans le code, pas dans mes consignes.
01 · Depuis mai
| Mai 2026 · fin de refonte | Octobre 2026 | ||
|---|---|---|---|
| Lignes de code | 41 k | 65 k | +58 % |
| Lignes de tests | 46 k | 71 k | toujours plus de tests que de code |
| Cas de test | 1 838 | 3 156 | 269 fichiers .spec |
| Procédures tRPC | 81 · 10 routeurs | ~120 · 17 routeurs | chaque routeur a son spec |
| Pages | 28 | 38 | |
| Commits | 1 123 depuis mai 2025 | ||
Snapshot develop · octobre 2026 · périmètre src/ hors generated/
02 · Le poste de pilotage
T3 Code + Opus 5.5. Quand je suis au bureau, je travaille avec les agents en direct.
T3 Code + Opus 5.5, les mêmes threads. Je lance une modification ou je suis un agent depuis n'importe où, téléphone compris.
Les tâches planifiées y tournent, Mac fermé : le tri du soir et le batch du matin.
Un orchestrateur au-dessus de Claude Code : des threads, un worktree git par thread, des tâches planifiées, et un MCP pour que les agents se lancent entre eux. Je ne tape plus dans un terminal, je relis des conversations.
02 · Le poste de pilotage
Hermes est un agent dédié au serveur. Il ne touche jamais au code métier.
hermes-ask "l'erreur exacte". Hermes agit, répond, l'agent reprendUn CLAUDE.md global sur le VPS : tous les agents, tous les dépôts. Les hooks git y sont désactivés, la CI est le juge final.
Un agent bloqué n'attend pas que je sois là : il demande à Hermes.
03 · Les outils
| Outil | Ce que l'agent y fait | Depuis |
|---|---|---|
| MCP Notion | lit le ticket, les retours « À traiter », les priorités, les décisions | mai |
| MCP Figma | lit la maquette liée au ticket, en sort le markup DSFR | mai |
| MCP Sentry | lit les erreurs de production, remonte à la cause | mai |
| MCP t3-code | lance des threads, planifie des tâches, délègue à d'autres agents | nouveau |
glab | ouvre la MR, lit la CI, répond aux commentaires | nouveau |
olga-notion | écrit dans Notion sous l'identité d'Olga, jamais sous la mienne | nouveau |
agent-browser | pilote un vrai navigateur pour vérifier un parcours | nouveau |
hermes-ask | demande de l'aide sur l'environnement | nouveau |
03 · Les outils
En mai : 9 sections, un guide complet. En octobre, il a maigri. Tout inventaire a été retiré : il pointe vers la source.
function, interface, jamais any« Pour tout inventaire, lire la source plutôt que ce fichier. » Les routeurs sont dans _app.ts, les utilitaires dans src/utils/, les factories dans src/test/mocks/.
Une liste dans CLAUDE.md est fausse au bout de deux semaines. Un pointeur ne l'est jamais.
03 · Les outils
pstack est le plugin Claude Code de Lauren Tan. À chaque session, il injecte une règle de tri :
Feature et refactoring : Opus. Bug, perf, décision dure : Fable. Mécanique triviale : un modèle rapide.
Décision contestée : quatre modèles en débat (Opus, Fable, Sonnet, Haiku), puis synthèse.
Un agent ne compte jamais sa propre relecture comme une validation. Sans relecteur indépendant, la MR reste bloquée.
03 · Les outils
| Skill | Ce qu'elle fait |
|---|---|
| notion-issue | prend un ticket Notion : lit les retours, la maquette Figma, implémente, teste, vérifie dans le navigateur |
| verify-aplus | lance l'app, connecte un compte de test, rejoue le parcours dans un vrai navigateur, garde les captures |
| sync-verify-cards | chaque soir, détecte ce que les commits ont changé dans les parcours et prépare les corrections de la carte |
| sentry-issues | liste et analyse les erreurs de production |
| compare-branches | compare develop et main, écrit le changelog pour l'équipe |
| explain-to-pm | explique un bug ou un choix technique en langage produit |
| react-best-practices | les règles de performance de Vercel, versionnées pour que tout le monde les ait |
Une skill est un dossier Markdown plus des scripts, dans .claude/skills/. Elle part dans le dépôt public, donc elle est relue comme du code.
04 · Les agents
Notion
Tâche planifiée. À 18 h elle trie le backlog. Après le batch elle rend compte sur chaque ticket. Elle écrit sous sa propre identité.
Le VPS
Tient le serveur. Débloque les agents qui butent sur l'environnement. Me prévient sur Telegram.
GitLab
Relit chaque MR, en français, avant moi. L'agent qui a écrit le code lui répond.
Celui qui écrit le code, un thread par ticket, un worktree par thread. T3 lance les threads, planifie Olga, et fait tourner les batchs. C'est lui qu'on suit dans la partie suivante.
Et en arrière-plan, Renovate propose les mises à jour de dépendances, sans jamais fusionner seul.
05 · Le chemin d'un ticket
| Quand | Étape | Qui | Ce qui se passe |
|---|---|---|---|
| En journée | 1 · Alix | Mattermost | L'équipe discute, Alix propose le ticket |
| 2 · Ticket | Notion | Créé au nom du demandeur, avec le contexte | |
| 18 h | 3 · Tri | Olga | Marque 🟢 les tickets prêts, sans relecture de ma part |
| 8 h | 4 · Batch | T3 Code | Une MR par ticket prêt, trois agents en parallèle |
| La matinée | 5 · Le code | Claude Code · pstack | Playbook selon la complexité, sous-agents, implémentation |
| 6 · La preuve | tests · verify-aplus | Tests ciblés, puis le parcours rejoué dans un vrai navigateur | |
| La journée | 7 · La MR | GitLab · CodeRabbit · Olga | CI, relecture automatique, compte rendu sur le ticket |
| 8 · Fusion | L'ingénieur · Scalingo | Je relis et je fusionne ; develop en recette, main en production |
Fil Mattermost · exemple 1 · exemple 2
Une machine à états que les agents lisent et écrivent :
🟢 prêt pour le batch · 🔍 MR à relire · ❓ question en attente
Plus les retours « À traiter », les priorités ⭐️, et le lien vers la maquette Figma.
Un ticket est prêt si :
Olga lit tout, ne commente rien. Sa seule écriture est le 🟢.
Elle garde une mémoire : elle ne repose jamais un 🟢 qu'on a retiré.
Personne ne relit son tri. Un ticket mal trié coûte une MR inutile, c'est pour ça que la règle est « dans le doute, pas prêt ».
D'abord
Les MR relues avec des « modifs à faire » : nouveaux commits sur la même MR.
Ensuite
Les tickets dont la ❓ a reçu une réponse : ils reprennent là où ils s'étaient arrêtés.
Enfin
Les nouveaux 🟢, six au plus par matin.
Un thread T3 par ticket, un git worktree par thread, une branche partie de develop. Deux agents ne peuvent pas se marcher dessus : ils n'ont rien en commun.
Trois threads en même temps, les autres font la queue. À la fin, un tableau : ticket · MR · CI · blocages.
notion-issue : lit le ticket, les retours, la maquette Figmapstack : juge la complexité, choisit le playbook, lance ses sous-agentstsc, eslint, jest sur les fichiers touchés ; la suite complète, c'est le travail de la CIverify-aplus : la preuve dans un vrai navigateurElle lance l'app, se connecte avec un compte de test, rejoue le parcours avec agent-browser, et garde les captures comme preuve.
Sa carte features/README.md décrit chaque parcours : sélecteurs réels, pièges connus. Un changement de parcours met la fiche à jour dans le même commit, et un bot vérifie chaque soir qu'elle n'a pas dérivé.
Chaque MR
Typecheck, lint, tests avec couverture. Rouge : l'agent corrige avant de demander une relecture.
Sur main seulement : SAST, Semgrep, détection de secrets, audit des dépendances, SonarCloud.
Chaque MR
Une relecture automatique en français. L'agent répond aux commentaires.
Notion
Un commentaire sur le ticket : ce qui a changé, la MR, les captures. 🟢 devient 🔍, ou ❓ si un point bloque.
Dans la configuration des agents, glab mr merge, glab mr approve, le force-push, le push sur develop et --no-verify sont refusés. L'agent ne peut pas, même s'il le voulait.
Équipe produit · Alix
L'équipe produit les écrit dans Notion, ou Alix les crée depuis un fil Mattermost quand on y trouve un problème ou une spec.
Olga
Olga pose les 🟢 à 18 h. Personne ne repasse derrière.
L'ingénieur
develop part en recette, main en production, sur Scalingo.
Une relecture « modifs à faire » repart le lendemain en famille B. Une réponse à une ❓ repart en famille C. Une erreur Sentry redevient un ticket.
06 · Ce qui guide mes choix
« Le débit vient de la confiance, pas du nombre d'agents ouverts. »
« Toujours choisir le chemin le plus court, parce que c’est le meilleur. »
Lauren Tan (@poteto), autrice de pstack
Ouvrir plus de terminaux ne m'a jamais fait avancer plus vite : je passais le temps gagné à relire. Ce qui augmente le débit, c'est de pouvoir ne pas relire ce que les machines ont déjà prouvé.
06 · Ce qui guide mes choix
| Où vit la règle | Ce qui se passe si on la viole | Exemples | |
|---|---|---|---|
| 1 | Le code | L'erreur ne compile pas | TypeScript strict, types dérivés de tRPC, Zod, refus durs dans les scripts |
| 2 | Les machines | L'erreur casse la CI | lint, tests, CI, liste d'interdits des agents |
| 3 | Les consignes | L'agent doit s'en souvenir | CLAUDE.md, skills, tri d'Olga |
| 4 | L'ingénieur | Il faut que je la voie | relecture, fusion |
Mon travail, depuis mai : faire monter chaque règle d'un cran. Les choix rigides de la refonte (tout typé, tout testé) sont ce qui rend l'agent utile aujourd'hui.
06 · Ce qui guide mes choix
Dire
« Ne cours pas, ne monte pas là. » Ça marche avec deux enfants et un adulte qui regarde. Avec trente enfants, on passe la récré à crier, et ils n'écoutent plus.
Aménager
Une barrière, un portail, un sol souple, des jeux là où on veut qu'ils aillent. Plus besoin de surveiller : le chemin naturel est le chemin sûr. Et ça tient avec trente enfants comme avec trois cents.
Avec des agents, c'est pareil. Une consigne dans CLAUDE.md se répète et s'oublie. Un type, un lint, un worktree, une liste d'interdits : l'agent prend le chemin le plus court, et ce chemin est le bon. Le dev passe moins de temps à crier, plus de temps à aménager la cour.
06 · Ce qui guide mes choix
Chaque problème que je fais disparaître, c'est une chose de moins à surveiller, donc une chose de plus que je peux confier aux agents sans relire. Le débit ne vient pas du nombre d'agents, il vient de la confiance que j'ai dans ce qu'ils rendent.
Pendant ce talk
—
signalements créés
—
messages postés par les opérateurs et les aidants
—
utilisateurs actifs sur la dernière heure
Relevé en direct par la commande Mattermost de l'équipe, au début et à la fin du talk.
Lundi
aplus.beta.gouv.fr
Charles d'Oiron
beta.gouv.fr · Octobre 2026