Le chaos
Voici un scénario que tout développeur utilisant des agents IA a vécu :
CLAUDE.mddit : « Utiliser TypeScript strict mode pour tout nouveau fichier »AGENTS.mddit : « Suivre les conventions du codebase existant »lessons.mddit : « Éviter les annotations de type excessives »
L'agent tombe sur un fichier JavaScript à modifier. Que fait-il ?
Il ne suit aucune instruction de manière cohérente. Il oscille. Un run : convertit en TypeScript. Le suivant : garde JavaScript. Le troisième : convertit sans types.
Ce n'est pas un bug du modèle. C'est de la physique.
Le problème à trois corps
En mécanique céleste, le problème à trois corps décrit trois objets exerçant une force gravitationnelle mutuelle. Contrairement au problème à deux corps, c'est chaotique — de petits changements donnent des résultats radicalement différents.
Avec deux sources, l'agent négocie une orbite stable. Avec trois — chaos.
Trois sources d'instructions concurrentes sans hiérarchie = comportement non déterministe.
Le papier AGENTS.md l'a mesuré. Le papier Pythia montre des performances oscillant entre 1,0 et 0,0.
La solution hiérarchique
La physique dit pas de solution générale. L'ingénierie dit : imposez une hiérarchie.
CLAUDE.md"] -->|surclasse| P2["📋 Priorité 2 — Procédural
AGENTS.md / SKILL.md"] P2 -->|surclasse| P3["🧠 Priorité 3 — Expérientiel
lessons.md"] P3 -->|surclasse| P4["⏳ Priorité 4 — Éphémère
todo.md / conversation"]
CLAUDE.mdgagne. Toujours. C'est la constitution.AGENTS.mdl'emporte surlessons.md.lessons.mdfournit des suggestions, pas des mandats.
Contrôleurs PID pour agents
Un contrôleur PID — le système de rétroaction le plus déployé en ingénierie :
- P (Proportionnel) : Réaction à l'erreur courante → Instructions de tâche
- I (Intégral) : Accumulation des erreurs passées →
lessons.md - D (Dérivé) : Prédiction de l'erreur future → Hooks/automatisation
L'integral windup
Quand la composante I accumule trop d'historique, elle dépasse la cible. Le système oscille. C'est exactement ce qui se passe avec lessons.md.
Mécanismes anti-windup :
- Clamping : Plafond intégral → Max règles par scope
- Intégration conditionnelle : N'accumuler que pour des problèmes vérifiés
- Back-calculation : Quand la sortie sature, élaguer
Un
lessons.mdsans anti-windup est un PID sans clamping. Il oscillera vers l'instabilité.
La solution d'ingénierie
1. Hiérarchie constitutionnelle
# Dans CLAUDE.md (Priorité 1)
HIÉRARCHIE D'INSTRUCTIONS :
1. Ce fichier fait autorité
2. AGENTS.md/SKILL.md = procédures
3. lessons.md = suggestions uniquement
4. En cas de conflit, la priorité supérieure gagne
2. Anti-windup pour les leçons
# En-tête lessons.md
MAX_RULES_PER_SCOPE: 10
TTL_DAYS: 60
## Format :
- Scope: [backend|frontend|api|tests]
- Ajouté: AAAA-MM-JJ
- Confiance: [haute|moyenne|basse]
- Expire: AAAA-MM-JJ
3. Frontières claires
- CLAUDE.md : Identité. ≤15 règles.
- AGENTS.md : Procédures projet.
- SKILL.md : Procédures tâche. À la demande.
- lessons.md : Corrections. Scopées. Datées. Plafonnées.
Guide d'implémentation
Étape 1 : Audit
- Lister chaque source d'instructions
- Catégoriser : identité, procédure, expérience, éphémère
- Identifier les contradictions
Étape 2 : Hiérarchie
- Statement de priorité dans CLAUDE.md
- Déplacer les règles au bon fichier
- Supprimer les doublons
Étape 3 : Anti-windup
- TTL sur chaque entrée
- Plafond 10 règles/scope
- Revue mensuelle
Le problème à trois corps n'a pas de solution générale. Mais une hiérarchie avec anti-windup transforme le chaos en boucle de contrôle stable.
Partie 3 de la Série Eureka. Précédent : Pourquoi les instructions attaquent votre code. Suivant : gcc pour le Markdown.
Checklist de durcissement complète | Digest sécurité hebdomadaire
