Files
ange 7d3885a735 Doc : cahier de la v0.9.0, hooks stricts et contrat de MIAM pour la délégation
- Ajout de `docs/hooks-delegation.md`
- État de MIAM et des hooks, raisons de leur échec
- Treize hooks avec priorités, découpage atomique (`.claude/miam-plan.json`)
- Contrôle automatique des réponses (`controle`, `verdict`) et reprise sans suivi répété
- Section 11 : contrat livré par MIAM (PH2-H11) : paramètres, réponses et états `fin`, commande `reprise`
- Sept bouts à coder dans le plugin pour la v0.9.0, réveil après 11 min vérifié

Aucun code : spécification, seuils à confirmer.
2026-11-03 09:09:16 +01:00

3.8 KiB

À faire pour la prochaine version du plugin

Notes issues de la session MIAM du 2026-11-01. Rien n'est encore appliqué.

1. Autoriser le repli sur un subagent Haiku (demande de l'utilisateur)

plugins/miam/skills/deleguer/SKILL.md, ligne 24, dit « Pas de subagent ». Vérifier aussi le texte équivalent injecté par les hooks et la documentation (docs/agent-delegue.md, plugins/miam/README.md).

Nouvelle règle, ordre de délégation :

  1. MIAM d'abord, pour les tâches de son champ.
  2. Subagent model: "haiku", sans demander, pour une tâche longue et simple si MIAM est arrêté ou mal adapté : lire un gros document ou une longue sortie pour en tirer peu, recherche large dans le code, tests répétitifs.
  3. Claude principal pour ce qui demande le contexte de la conversation, pour la sécurité et pour la dépense.

Pas de subagent pour une petite tâche : un grep ou une lecture directe coûte moins cher qu'un agent qui repart de zéro.

À décider : le coût d'un subagent Haiku doit-il entrer dans les événements pilotage et dans le cumul, et comment le distinguer d'un pilotage de MIAM ?

2. Vérifier avant de déléguer, dresser le bilan après

À ajouter au skill deleguer :

  • Faisable ? OpenCode ne voit que le code commité et n'a pas de .venv utilisable : ne pas lui demander les tests.
  • Le preset tient ? Appeler modeles avant d'imposer un preset.
  • Rentable ? Pas de délégation si la consigne dépasse un tiers de la sortie attendue, ou si une recherche suffit.
  • Indépendant ? Ne pas importer un module pas encore livré : MIAM peut tourner depuis le dépôt qu'il modifie.
  • Après un lot : bilan des délégations, sans attendre la demande : coût, résultat, faute, règle ajoutée.

3. Rendre le cumul fiable (PH2-H10 de MIAM)

Le cumul mesure le volume, pas la justesse. Sur la session, 124 625 tokens évités sur 139 707 étaient fictifs.

  • Ne compter aucun gain pour une réponse vide ou tronquée.
  • Pouvoir marquer une délégation fausse comme rejetée, pour annuler son gain et compter sa vérification.
  • Ne pas compter comme évitée une lecture que Claude n'aurait pas faite, comme une relecture imposée au démarrage.

4. Imposer les règles par des hooks

La mémoire et les skills sont du texte que Claude peut ignorer : la règle « un seul suivi » était notée et il y a eu plus de 15 suivre. Ne garder en texte que ce qui demande du jugement ; ce qui se mesure passe dans tool.call, à côté de contrainte.ts, en fonctions pures testées.

À vérifier d'abord : tool.call peut-il refuser un appel avant son exécution ? Les rappels actuels arrivent après coup.

Contrôle Déclencheur Action
Suivi suivre à moins de N secondes du précédent, ou Nᵉ appel sur la même demande Refus, avec le délai à respecter
OpenCode et tests deleguer(moteur="opencode") dont la consigne demande de lancer pytest Refus, avec la raison
Preset deleguer(preset=…) sans modeles dans la session Refus
Rentabilité Consigne de plus de N caractères Rappel, le seuil reste à régler
Sortie longue Lecture ou commande non filtrée Rappel avant l'appel si possible, sinon après
Fin de lot Fin de tour après des délégations Injection du bilan mesuré : coût, échecs, reprises

Hors de portée d'un hook, à garder en texte : juger si une réponse est juste, ou si un grep suffisait. Chaque refus doit dire quoi faire à la place et se compter, pour régler les seuils sur des chiffres réels.

5. Relecture de démarrage

Si elle vient du plugin, la relecture de plan/Plan.md et plan/tasks-P2.md à chaque session coûte 62 000 tokens lus et a donné une réponse vide puis une réponse fausse. La remplacer par une consigne ciblée sur la demande en cours, ou par une recherche.