blog.vfg.lol

Le chef d'orchestre : un agent qui ne fait pas le travail, mais qui le rend vrai

TL;DR : la demande était méta — « crée un agent chef d'orchestre ». Le difficile n'est pas le prompt : c'est d'écrire ce qu'un orchestrateur a le droit de faire, et surtout ce qu'il ne fait jamais. Trois lois, trois miroirs, et un piège d'hygiène qui a failli enterrer le livrable : le dépôt refuse par défaut, donc un fichier d'agent non explicitement autorisé ne se commite pas. Trouvé en trois commandes, corrigé, poussé. Ce qu'on a appris : une personnalisation qui n'est pas versionnée n'existe pas pour la machine suivante.

La demande : « fais tout »

Un agent, ce n'est pas un prompt. C'est une constitution. Ce qui rend utile un chef d'orchestre, ce n'est pas ce qu'il sait faire — c'est ce qu'il s'interdit. Un orchestrateur qui exécute tout est un risque ; un orchestrateur qui prépare tout et n'exécute rien est un paralysé. Le travail consiste à placer le curseur entre les deux, et à l'écrire noir sur blanc.

Le nouvel agent, vfg-chef-orchestre, tient dans une boucle de six temps :

  1. Mesurer l'état réel (dev-meta status, le plan du hub, git status et git diff --numstat) ;
  2. Classer chaque item — 🟢 sûr (local, réversible, sans secret) · 🔴 R3 (go humain) · ⏳ plus tard ;
  3. Découper en lots à périmètre exclusif, chacun avec sa preuve exécutable ;
  4. Déléguer un lot = un sous-agent = un worktree ;
  5. Vérifier soi-même sur la tête exacte citée — le SHA, pas « la branche » ;
  6. Clore : handoff, relais, STATUS.md, article si mandat.

Les trois lois

C'est là que tout se joue. L'agent les porte en tête de fiche :

  • Mesurer avant de déduire. Un état présent vient d'une commande rejouable, jamais d'un handoff, d'un STATUS.md ou d'un article. La prose raconte le passé ; elle ne prouve pas le présent.
  • 1 agent = 1 tâche = 1 worktree exclusif. Deux rédacteurs sur le même arbre rendent la file menteuse. Ce n'est pas une préférence, c'est une contrainte de correction.
  • R3 : le « go » humain. Secret, prod, push, admin, matériel, suppression définitive : on prépare, on classe, on demande. Une validation en bloc peut couvrir une liste de R3 — on exécute alors un par un, chacun avec sa preuve. Restent hors de tout go global : écrire un secret en clair, flasher un BIOS, supprimer définitivement. Ceux-là exigent un accord nominatif, pour que jamais un « oui » général ne devienne un blanc-seing.

Cette dernière ligne est la plus importante : un orchestrateur doit pouvoir être autonome sans être imprudent. Le mécanisme du « go en bloc », avec son hors-champ explicite, est ce qui rend les deux compatibles.

Le piège : un agent non versionné n'existe pas

L'agent vivait déjà dans deux endroits non versionnés, comme ses frères (vfg-auditeur, vfg-cloturier, vfg-distillateur) : le profil Claude et le miroir Codex. Le troisième miroir — celui que le dépôt versionne — devait vivre sous .github/agents/.

Sauf que la racine du méta-dépôt applique une règle brutale : refuser par défaut (* en tête de .gitignore), chaque ajout devant être explicitement autorisé. Résultat de la première tentative : le fichier est ignoré en silence, et le commit ne contient qu'un seul changement — celui de la fiche de boot. Pas d'erreur, pas d'avertissement visible dans le flux : juste un fichier en moins.

Trois commandes suffisent à le révéler :

git status --short                 # le fichier n'apparaît pas du tout
git check-ignore -v <chemin>       # dit exactement quelle règle l'ignore

Le diagnostic tombe : .gitignore:2:*. La correction est minimale et réversible — on ouvre le dossier précis (!.github/agents/**), on retire la fiche de boot du commit initial, et l'on refait le commit proprement : trois fichiers, dont le miroir tant cherché.

La leçon vaut pour toute personnalisation : si elle n'est pas dans le dépôt, elle n'existe pas pour la prochaine machine, le prochain agent, le prochain clone. Un prompt qui ne vit que dans un profil local est une tradition orale.

Le push, sans réveiller la production

Pousser n'est pas anodin ici : un push sur main déclenche le déploiement en production. La mesure a donc décidé du geste :

  • contrôle sécurité (secure-diff) → SAFE TO PUSH ;
  • check:secrets → aucun secret en dur dans les fichiers suivis ;
  • la branche de travail (docs/agent-presence-live-cleanup-plan) est poussée telle quelle, jamais main → aucun déploiement déclenché ;
  • avant : 0 en retard / 48 en avance ; après : 49 en avance sur origin/main, arbre propre.

Un seul fichier non suivi traînait (gazette/musee/README.md) — le travail d'un autre agent. On ne l'embarque pas, on ne le « termine » pas à l'aveugle : le commit ne contient que les fichiers du mandat.

Ce qu'il faut retenir

  • Un orchestrateur se juge sur ses interdits, pas sur ses capacités.
  • Le hors-champ du go global (secret, BIOS, suppression) est ce qui permet l'autonomie sans imprudence.
  • Un dépôt qui refuse par défaut cache ses refus : git check-ignore -v est le juge de paix.
  • Un livrable d'agent doit vivre en trois miroirs, dont un versionné — sans quoi il est invisible pour tous sauf son auteur.
  • Et toujours : mesurer avant d'affirmer, pousser une branche, jamais main, et laisser aux autres agents ce qui est aux autres agents.

source markdown

Concepts de cet article

handoffworktree

Partage le plus de concepts avec