La stack d'agents IA indispensable avec GPT-5.6 + Fable 5 (Guide du développeur)

@Av1dlive
ANGLAISil y a 2 jours · 13 juil. 2026
183K
145
27
38
380

TL;DR

Ce guide complet détaille un processus en 12 étapes pour construire une stack d'agents IA haute performance utilisant GPT-5.6 et Claude Fable 5, en se concentrant sur la vérification, le routage et la gestion des coûts.

Fable 5 + GPT-5.6 : La construction de A à Z d'un Agent Stack qui livre pendant que vous dormez

Voici la construction complète, dans l'ordre, avec un point de contrôle après chaque étape.

Mettez ces 12 constructions en favori avant d'oublier.

Introduction

Vous avez les deux modèles les plus performants jamais rendus accessibles au public, et vous les utilisez encore un à la fois, manuellement.

Trois choses ont changé le mois dernier.

  • Claude Fable 5 planifie à travers les étapes, délègue ses propres sous-agents et vérifie sa propre production. 10 $ par million de tokens en entrée, 50 $ en sortie.
  • GPT-5.6 est sorti le 9 juillet en trois niveaux permanents. Sol à 5 $ et 30 $, Terra à la moitié du prix de Sol, Luna à 1 $ et 6 $. OpenAI vend désormais la décision de routage comme produit.
  • Fable 5 a passé 19 jours de juin suspendu en vertu d'un arrêté d'exportation. La disponibilité est désormais une chose qui vous arrive.

Utilisés de manière nonchalante, ces modèles sont un moyen coûteux de générer des choses impressionnantes mais erronées.

Intégrés dans un système, ils sont ce qui se rapproche le plus d'un employé que vous puissiez louer. Les chiffres d'Anthropic pour les entreprises placent Claude Code à environ 13 $ par développeur et par jour d'activité. OpenAI évalue Codex entre 100 $ et 200 $ par mois.

Ce guide construit ce système en douze constructions : les fichiers réels, dans l'ordre, chacun testé avant publication, avec un point de contrôle après chaque étape pour que vous sachiez qu'une pièce fonctionne avant d'empiler la suivante.

Il est destiné à toute personne possédant un dépôt, un terminal et un accès à l'une ou l'autre CLI. Les exemples sont orientés code car les boucles ont grandi autour du code, mais le routeur, le conseiller et la porte fonctionnent de la même manière sur les factures et les rapports.

Lisez-le dans l'ordre, en effectuant les vérifications. Chaque construction prend 10 à 20 minutes, environ deux heures au total. Les 30 jours à la fin sont le calendrier pendant lequel le système gagne le droit de fonctionner sans vous.

Trois principes prédisent chaque décision de conception ci-dessous :

  1. Router aux frontières. L'effort avant le modèle. Un changement de modèle en cours de session brûle une remise de cache de 90 %. Augmenter l'effort de réflexion sur le même modèle ne coûte rien de plus en plomberie.
  2. Rien n'évalue son propre travail. Rédacteur, routeur, conseiller et relecteur sont des parties différentes, issues de lignées différentes lorsque c'est possible, et le vote final est un script bash.
  3. Terminé est un fait concernant l'environnement. Une suite de tests réussis, un fichier de tâches coché, une ligne de verdict. Jamais l'opinion du modèle sur lui-même.

La carte, et pourquoi la carte habituelle est erronée

L'ingénierie des boucles est un workflow agentique avec une condition d'arrêt explicite et une logique de nouvelle tentative. Le harnais décide quand le travail est terminé, au lieu de laisser le modèle décider "est-ce que j'ai fini".

L'image standard est la pile Loopcraft de swyx : cinq boucles imbriquées les unes dans les autres, exécution dans tâche dans produit dans système dans supervision, chacune avec sa propre sortie. C'est la meilleure que quiconque ait dessinée.

Je l'ai utilisée pendant des semaines. Puis j'ai essayé de construire en m'appuyant dessus, et elle a cassé à quatre endroits.

1) Problème un : les boucles ne s'imbriquent pas.

L'imbrication signifie qu'un tour de la boucle externe équivaut à une exécution complète de la boucle interne. Ce n'est pas ce qui se passe. La boucle système n'attend pas que la boucle produit se termine. Elle s'exécute le dimanche, que quelque chose soit livré ou non.

Vous pouvez interrompre un flux de tokens manuellement sans dérouler quatre couches. C'est une image de confinement dessinée sur un système qui effectue des transferts.

2) Problème deux : une boucle dessinée comme infinie est une facture.

L'original dessine la boucle produit de cette façon. En pratique, elle se termine sur un budget, sur un point de contrôle, ou sur quelqu'un qui perd patience.

Qualifier cela de "aucun par conception" cache l'endroit exact où l'argent fuit d'un système d'agents : une boucle à laquelle personne n'a dit comment s'arrêter.

3) Problème trois : il n'y a pas d'interruption d'urgence.

Chaque couche a une fin heureuse et aucune fin malheureuse. Les vraies boucles ont besoin des deux : comment elle se ferme quand ça marche, et comment elle s'arrête quand ça ne marche pas.

Chaque facture incontrôlée que j'ai vue était une boucle avec une sortie définie et une interruption d'urgence non définie.

4) Problème quatre : la vérification est absente, et c'est tout l'enjeu.

La vérification est le contrat entre les couches. Lorsqu'une boucle inférieure remet un rapport au lieu d'un fait à une boucle supérieure, la boucle supérieure se ferme sur un mensonge.

Cette seule lacune est la raison pour laquelle une boucle peut atteindre sa condition d'arrêt et être quand même erronée.

Voici la version sur laquelle je construis.

L'échelle des preuves

Six échelons, deux sorties chacun, et une règle : le contrôle descend sous forme d'objectifs, la preuve monte sous forme de faits, et aucun échelon ne peut se fermer sur un rapport provenant de l'échelon en dessous de lui.

Avid - inline image

Cinq lois découlent de la forme.

Chaque échelon a une interruption d'urgence, ou c'est une facture. Si vous ne pouvez pas nommer comment une boucle se termine mal, vous avez construit un abonnement. C'est pourquoi ralph.sh porte deux plafonds et l'essaim porte un plafond de cycle.

La preuve monte et le contrôle descend. Un échelon se ferme sur un fait produit en dessous de lui, jamais sur un résumé écrit en dessous de lui.

La porte de l'usine est cette loi en SQL. Deux relecteurs ont dit vert. La porte a quand même refusé, parce que personne n'avait produit une ligne de test réussie.

Un verdict est une opinion. Une ligne est une preuve.

Le coût par tour augmente d'environ dix fois par échelon.

Un bogue qui échappe à l'échelon 2 coûte dix fois plus à attraper à l'échelon 3, et cent fois plus à l'échelon 4.

C'est tout l'argument pour placer votre meilleure vérification aussi bas que possible sur l'échelle, ce qui explique pourquoi la porte est un script bash et non une réunion.

L'échelle de temps appartient au modèle, pas à l'échelon.

L'échelon 2 prenait des minutes en 2024, prend des heures en 2026, et prendra bientôt des jours. Concevez en fonction de la condition de sortie, jamais en fonction de l'horloge. C'est là que l'ancienne image vieillit le plus vite.

Seul l'échelon 5 n'a pas de condition de sortie, et c'est ce que signifie humain.

Vous vivez là. L'échelle existe pour gagner une phrase : une boucle peut atteindre sa condition d'arrêt et être quand même erronée.

Les tests passent, la porte passe au vert, les deux relecteurs signent, et le dernier commit est toujours une erreur. Chaque échelon en dessous de vous existe pour rendre cette vérification plus petite. Aucun d'eux ne peut vous l'enlever.

Prérequis

bash
1claude CLI (Claude Code) avec accès à Fable 5
2codex CLI avec accès à GPT-5.6 # ou le plugin officiel dans Claude Code
3python3, jq, git, gh, make, cron
4un dépôt avec une commande de test qui fonctionne aujourd'hui
5
6# optionnel, pour les flottes mixtes (CONSTRUCTION 7) :
7openai/codex-plugin-cc # officiel : exécuter Codex dans Claude Code
8claude-model-switch # proxy local : n'importe quel fournisseur derrière Claude Code
9CLIProxyAPI # envelopper les abonnements CLI en tant que points de terminaison API

Ce que vous construisez

markdown
1votre-depot/
2 CLAUDE.md # CONSTRUCTION 1 : constitution côté Claude
3 AGENTS.md # CONSTRUCTION 1 : constitution côté Codex
4 .claude/
5 skills/model-bench/SKILL.md # CONSTRUCTION 0 : prix, identifiants API, solutions de repli. le seul fichier avec des chiffres
6 skills/model-router/SKILL.md # CONSTRUCTION 4
7 skills/stuck-protocol/SKILL.md # CONSTRUCTION 5
8 skills/ship-gate/SKILL.md # CONSTRUCTION 2
9 agents/fable-expert.md # CONSTRUCTION 5
10 agents/fresh-eyes-reviewer.md # CONSTRUCTION 6
11 agents/sol-reviewer.md # CONSTRUCTION 6
12 agents/scout.md # CONSTRUCTION 7
13 loop/
14 ralph.sh # CONSTRUCTION 3 : le battement de cœur
15 two_lane.sh # CONSTRUCTION 6 : boucle de révision multi-fournisseur
16 PROMPT.md TASKS.md # CONSTRUCTION 3 : le protocole de travail
17 gate/
18 verify.sh # CONSTRUCTION 2 : vote final déterministe
19 eval_gate.py eval/cases.jsonl # CONSTRUCTION 2 : porte de changement de routage
20 router/
21 router.py # CONSTRUCTION 4
22 advisor_loop.py # CONSTRUCTION 5
23 ~/.codex/
24 config.toml # CONSTRUCTION 0 : profils luna/terra/sol
25 prompts/effort.md # /effort évaluer la tâche, nommer le siège
26 prompts/plan-stop.md # /plan-stop planifier, estimer le prix, puis s'arrêter
27 prompts/fable-advice.md # /fable-advice consultation d'expert multi-fournisseur
28 prompts/review-hostile.md # /review-hostile verdict en contexte vierge
29 prompts/compost.md # /compost les échecs deviennent des lois, chaque semaine
30 factory/
31 factory_gate.py # CONSTRUCTION 8 : tableau noir + porte d'achèvement
32 factory.sh # CONSTRUCTION 8 : brief -> implémenter -> réviser -> porte
33 factory.db # CONSTRUCTION 8 : les lignes qui décident
34 swarm/
35 swarm.sh # CONSTRUCTION 9 : planifier -> dispatcher -> noter -> replanifier
36 goals.jsonl # CONSTRUCTION 9 : un objectif par ligne, chacun avec sa vérification
37 system/
38 verify_goals.py # CONSTRUCTION 10 : revérification quotidienne, en permanence
39 goals/ # CONSTRUCTION 10 : un fichier par chose terminée
40 ROUTING.md # CONSTRUCTION 12 : la politique de routage complète, les deux harnais
41 progress.log # chaque construction s'ajoute ici
42 # optionnel (CONSTRUCTION 7) : proxy claude-model-switch sur localhost:4000,
43 # CLIProxyAPI pour envelopper les abonnements CLI en tant que points de terminaison API

CONSTRUCTION 0 : Configurer les moteurs

Définissez ces éléments avant d'écrire un fichier. Chaque chiffre ci-dessous a été vérifié par rapport aux pages de tarification officielles la semaine de la publication.

Le banc : chaque siège, juillet 2026

L'effectif auprès duquel le système embauche.

Les prix vivent dans un seul fichier de compétence, .claude/skills/model-bench/SKILL.md, chargé à la demande avant toute question de routage ou de coût. Aucun autre fichier ne contient de chiffre en dur.

Les prix ont changé trois fois au cours des six semaines précédant la rédaction de cet article. Un prix dans un article est erroné dès la publication. Un prix dans un fichier de compétence est modifiable en une édition.

Avid - inline image

La division qui décide de tout en aval :

  • Fable 5 mène le travail logiciel complexe. 80 % sur SWE-Bench Pro contre 64,6 % pour Sol, et il devance Sol en intelligence globale.
  • Sol mène le travail terminal et agentique. 88,8 % sur Terminal-Bench 2.1, et il domine l'indice de codage agentique pour environ un tiers du coût de Fable par tâche.

Cette division est la raison pour laquelle ce système est bi-fournisseur. Fable juge et planifie, Sol révise et pilote les terminaux, et aucun des deux ne fait la saisie en masse.

Avid - inline image

Deux sièges que les gens interprètent mal.

Opus 4.8 n'est pas l'ancien fleuron qui prend la poussière. C'est le repli automatique sous Fable et le défaut recommandé pour le codage agentique complexe. Votre système l'hérite, que vous le prévoyiez ou non.

Sonnet 5 au tarif de lancement est le meilleur rapport qualité-prix du tableau. Proche d'Opus 4.8 en capacité pour une fraction du prix d'entrée de Fable, c'est pourquoi il est l'exécuteur par défaut partout dans cette construction. Ce tarif expire le 31 août, et le fichier de compétence le sait déjà.

Ce fichier de compétence est le seul fichier du système qui contient un chiffre :

markdown
1---
2name: model-bench
3description: La grille tarifaire actuelle, les identifiants de modèle API et la chaîne de repli
4 pour chaque modèle que ce système peut embaucher. Charger avant toute décision de routage,
5 estimation de coût, question de budget, comparaison de modèle, ou lorsque l'utilisateur demande
6 le coût de quelque chose.
7---
8
9# Banc des modèles
10
11Source unique de vérité pour les prix et les identifiants API. Rien d'autre dans ce dépôt
12ne contient de prix en dur, donc lorsque les laboratoires modifient leurs tarifs, vous modifiez ce
13fichier et rien d'autre. Vérifié le 13/07/2026. Les prix changent. Revérifiez avant d'établir un budget.
14
15## Anthropic (API Messages, /v1/messages)
16
17Effort : output_config {"effort" : "low|medium|high|xhigh|max"}. La pensée adaptative
18est toujours activée pour Fable 5 et ne peut pas être désactivée. max_tokens plafonne la pensée
19PLUS le texte de réponse, donc définissez-le large (commencez près de 64k) sur élevé et au-dessus,
20sinon le modèle manque d'espace au milieu de sa réflexion.
21
22| Modèle | Entrée/Sortie par Mtok | Lecture cache | Siège |
23|---|---|---|---|
24| claude-fable-5 | 10 $ / 50 $ | 1,00 $ | chef d'orchestre, planificateur, conseiller, juge. Repli automatique sur opus-4-8 |
25| claude-opus-4-8 | 5 $ / 25 $ | 0,50 $ | chef d'orchestre sous règles de rétention |
26| claude-sonnet-5 | 2 $ / 10 $ (jusqu'au 31 août, puis 3 $ / 15 $) | n/a | exécuteur de codage par défaut |
27| claude-haiku-4-5 | 1 $ / 5 $ | 0,10 $ | éclaireurs, sous-agents, travail mécanique |
28
291M de contexte sur Fable, Opus 4.8, Sonnet 5, facturé au FORFAIT pour le contexte long, ce qui
30explique pourquoi les longues lectures sont routées ici. Sortie max 128K.
31
32## OpenAI (API Responses, /v1/responses)
33
34| Modèle | Entrée/Sortie par Mtok | En cache | Siège |
35|---|---|---|---|
36| gpt-5.6-sol | 5 $ / 30 $ | 0,50 $ | réviseur multi-fournisseur, travail terminal |
37| gpt-5.6-terra | 2,50 $ / 15 $ | 0,25 $ | pilote quotidien Codex (tester d'abord contre Luna vs Terra) |
38| gpt-5.6-luna | 1 $ / 6 $ | 0,10 $ | travail mécanique, ticks silencieux |
39
40Le contexte long au-dessus du seuil DOUBLE approximativement le prix d'entrée, contrairement aux
41tranches forfaitaires 1M d'Anthropic. Première famille avec des points d'arrêt de cache explicites ; les
42écritures coûtent 1,25x.
43
44## Poids ouverts (travailleurs en masse)
45
46| Modèle | Entrée/Sortie par Mtok | Hit de cache |
47|---|---|---|
48| deepseek-v4-flash | 0,14 $ / 0,28 $ | 0,0028 $ (environ 98 % de réduction) |
49| deepseek-v4-pro | 0,435 $ / 0,87 $ | n/a |
50| kimi-k2.7-code | 0,95 $ / 4,00 $ | 0,19 $ |
51
52## Remises cumulables
53 - les lectures du cache coûtent un dixième de la nouvelle entrée dans les deux laboratoires (environ 90 % de réduction)
54 - les écritures dans le cache sont rentabilisées après une lecture (5 min) ou deux (1 h)
55 - les API par lots sont à 50 % de réduction dans les deux sens
56 - le lot + la lecture du cache sur un préfixe répété atteignent près de 95 % de réduction
57 - le nouveau tokenizer d'Anthropic produit environ 30 % de tokens en plus pour le même texte, donc le coût effectif est supérieur au prix affiché. Budgetez sur le coût effectif.
58
59## Comment répondre à une question de coût
60 1. Estimez l'entrée et la sortie séparément. Les agents lisent environ 100 tokens pour chaque
61 1 token qu'ils écrivent, donc l'entrée domine et le taux de succès du cache décide de la facture.
62 2. Appliquez le taux de lecture du cache au préfixe répété, pas au taux de base.
63 3. Multipliez les chiffres d'Anthropic par environ 1,3 pour le tokenizer.
64 4. Citez une fourchette, nommez les hypothèses, dites quelle ligne de ce fichier vous avez utilisée.
65 5. Si le nombre dépasse le plafond quotidien du dépôt, dites-le AVANT d'exécuter quoi que ce soit.
66
67Ne présentez jamais un prix que vous n'avez pas lu dans ce fichier. Un modèle non listé ici n'est pas
68sur le banc, et en ajouter un est un changement de routage qui passe par la porte.

Sept faits qui changent la façon dont vous construisez :

  1. L'entrée mise en cache est à 90 % de réduction dans les deux laboratoires. Un horodatage dans votre prompt système le brûle à chaque appel. Préfixe stable, historique en ajout uniquement, toujours. Les agents lisent environ 100 tokens pour chaque 1 token qu'ils écrivent, donc cette remise constitue l'essentiel de votre facture.
  2. Les écritures dans le cache coûtent plus cher mais sont rapidement rentabilisées. L'écriture de 5 minutes d'Anthropic est facturée 1,25x et est rentabilisée après une seule lecture. GPT-5.6 est la première famille d'OpenAI avec des points d'arrêt de cache explicites et des écritures tarifées. Architectez autour du cache comme un programmeur système architecte autour d'une hiérarchie mémoire.
  3. Le nouveau tokenizer d'Anthropic produit environ 30 % de tokens en plus pour le même texte. Le prix effectif est supérieur au prix affiché. Budgetez sur le coût effectif.
  4. Un refus de sécurité de Fable 5 n'est pas une erreur. L'appel réussit et le travail atterrit sur Opus 4.8, par conception, dans moins de 5 % des sessions. Lisez ce qui s'est passé, pas seulement le code de sortie, et configurez la chaîne de repli avant d'en avoir besoin.
  5. Ne choisissez pas par défaut le niveau intermédiaire. Des tests indépendants ont montré que certains réglages Luna ou Sol surpassent toujours Terra sur la frontière coût-qualité. Testez Terra contre Luna sur votre propre trafic avant de payer pour cela.
  6. Les API par lots réduisent de moitié tout ce qui peut attendre le lendemain, et la remise se cumule avec la mise en cache : les préfixes répétés dans le travail par lots atteignent près de 95 % de réduction. Le brûleur de nuit dans la CONSTRUCTION 7 existe pour en tirer parti.
  7. La disponibilité est un risque opérationnel, pas une hypothèse. Fable 5 a perdu 19 jours en juin. Chaque référence de modèle ici a un repli : fable-5 tombe sur opus, sol tombe sur terra, et chaque repli est enregistré.

Le deuxième compteur : un siège n'est pas une clé API

Chaque chiffre ci-dessus est tarifé en dollars par million de tokens. C'est la bonne devise si vous payez par appel.

C'est la mauvaise si vous exécutez ceci sur un siège Codex Pro à 200 $ ou un siège Claude Max.

Sur un siège, le compteur est une fenêtre de cinq heures et une fenêtre hebdomadaire, évaluées ensemble, et une seule requête compte dans les deux.

Vous pouvez être à l'aise sur la semaine et quand même être bloqué pendant quatre heures, parce qu'un seul message a consommé la fenêtre courte.

Même doctrine. Devise différente. Trois paramètres décident de la part de fenêtre qu'un message peut prendre :

Avid - inline image

Le mode rapide est le coûteux, car il multiplie un nombre qui vient de devenir plus grand.

GPT-5.6 s'exécute beaucoup plus longtemps par message que 5.5. C'est surtout un cadeau. Cela rend aussi la consommation imprévisible.

  • Theo rapporte avoir brûlé plus de 200 000 $ de tokens sur Sol
  • Il a vu un seul message 5.6 prendre 15 % d'une fenêtre de cinq heures
  • Avec le multiplicateur, cela représente 40 % de la fenêtre en un seul message

La vitesse n'est pas gratuite. Ce qu'elle vous facture, ce sont les tokens que vous alliez de toute façon brûler. Relisez le multiplicateur dans la documentation sur la vitesse avant de lui faire confiance : il est publié par modèle, et il bouge.

L'ultra est le piège le plus subtil, car l'interface le classe là où vivent les niveaux d'effort, et il n'en fait pas partie.

  • Max est la profondeur. Un modèle, un problème, plus de temps sur une seule chaîne de raisonnement.
  • Ultra est la largeur. Le travail se ramifie vers quatre agents, puis est synthétisé.
  • Axes différents. Ultra n'est pas "plus que max."

Pointé sur une tâche qui ne se divise pas vraiment, ultra achète quatre agents dupliquant une seule investigation.

Cela vaut environ 3,1 points sur Terminal-Bench 2.1, de 88,8 à 91,9, pour une consommation digne d'une flotte. Désactivé jusqu'à ce que les frontières entre les sous-problèmes soient réelles.

Pourquoi Sol et Terra sont tous deux des choix par défaut corrects

Un rapport de terrain utilise Sol pour presque tout. Le banc ci-dessus fait de Terra le pilote quotidien de Codex. Les deux ont raison, et le compteur en est la raison.

  • La grille tarifaire indique que le coût de sortie de Sol est le double de celui de Terra
  • Le siège dit que vous avez déjà payé
  • Donc la seule question en jeu est le nombre de tours nécessaires pour atteindre le vert
  • Un modèle plus fort avec un effort moindre en a généralement besoin de moins

Le taux n'est pas le coût. Le coût est le taux multiplié par les tours-avant-vert, et le second terme est celui qui bouge.

Ce qui est la loi de la CONSTRUCTION 4 arrivant de l'autre direction : améliorez le siège avant de toucher au cadran. Sur un siège qui se lit comme Sol à haut sur le niveau à 200 $, Sol à bas en dessous. Mesurez avant de croire l'un ou l'autre.

Définissez les niveaux Codex maintenant :

text
1# ~/.codex/config.toml
2model = "gpt-5.6-terra" # pilote quotidien
3model_reasoning_effort = "medium"
4# service_tier = "fast" # LAISSER EN COMMENTAIRE. Le mode rapide facture 2,5x
5 # les crédits. exécutez /fast status pour confirmer que vous
6 # n'y êtes pas déjà.
7
8[profiles.fast] # travail mécanique. PAS "mode rapide" : ce
9model = "gpt-5.6-luna" # profil est un modèle moins cher, pas un compteur 2,5x
10model_reasoning_effort = "low" # Deux choses différentes, un seul mot.
11
12[profiles.deep] # planification, bogues vicieux, révisions
13model = "gpt-5.6-sol"
14model_reasoning_effort = "high"

VÉRIFICATION 0 : les deux CLI s'authentifient, et votre commande de test se termine avec le code 0 sur le dépôt actuel.

CONSTRUCTION 1 : Les constitutions

Ces modèles suivent des lois et optimisent autour des pourboires, donc chaque ligne a besoin d'un chiffre, d'un "jamais" ou d'une commande qui la vérifie.

Créez CLAUDE.md :

markdown
1# CLAUDE.md
2
3## JAMAIS (les exceptions nécessitent de demander d'abord)
4- Ne changez jamais de modèle en cours de session. Le routage se produit uniquement aux limites
5 de session et de sous-agent. Les changements en cours de tâche brûlent le cache.
6- Ne révisez jamais votre propre diff. La révision vient d'un contexte vierge ou d'une
7 lignée différente. Le réviseur de Devin attrape 2 bogues par PR d'agent
8 précisément parce qu'il ne partage rien avec le rédacteur.
9- Ne modifiez, n'affaiblissez et ne supprimez jamais un test pour le faire passer. ÉCHEC automatique.
10- Ne signalez jamais "terminé" à partir d'une auto-évaluation. Terminé = gate/verify.sh réussi.
11- N'effectuez jamais une quatrième consultation de conseiller. Trois échecs = BLOQUÉ, au tour de l'humain.
12- Ne fusionnez jamais un changement de routage ou de prompt que eval_gate.py a BLOQUÉ.
13- N'exécutez jamais une boucle sans les deux plafonds définis : MAX_ITERS et BUDGET_USD.
14- Ne supposez jamais qu'un modèle de pointe est disponible. Replis : fable-5 -> opus,
15 sol -> terra. Enregistrez chaque repli dans progress.log.
16- Ne créez jamais un sous-agent que vous n'avez pas demandé. Les enfants héritent du
17 modèle ET de l'effort du parent, donc une flotte créée avec empressement hérite du siège coûteux.
18
19## DISPATCH (la première correspondance gagne)
20| # | Tâche | Siège |
21|---|---|---|
22| 1 | planifier / architecturer / migrer | fable-5 planifie, sonnet exécute |
23| 2 | extraire / formater / tests / docs | haiku ou luna |
24| 3 | contexte de plus de 60k tokens | Niveau forfaitaire 1M d'Anthropic |
25| 4 | révision de code écrit par un agent | sol via codex, harnais natif |
26| 5 | ambigu | score de difficulté : 0-1 pas cher, 2 sonnet, 3+ pointe |
27| 6 | toujours incertain | exécuter une fois pas cher, vérifier, escalader une fois en cas d'échec |
28
29## TERMINÉ
30- Chaque tâche porte une done_when vérifiable par machine avant le début du travail.
31- Un réviseur en contexte vierge juge le cahier des charges par rapport au diff, rien d'autre.
32- gate/verify.sh détient le vote final. Deux désaccords
33 fabricant/vérificateur sur un élément -> arrêtez, mettez en file d'attente pour un humain.

Créez AGENTS.md à la racine du dépôt, les mêmes lois dans le dialecte de Codex. Gardez-le près de 100 lignes, une table des matières, pas une encyclopédie :

markdown
1# AGENTS.md
2
3## Commandes
4| Objectif | Commande |
5|---|---|
6| Tester | make test (cette commande est la définition de terminé) |
7| Linter | make lint |
8
9## Protocole de session
101. Lire progress.log et TASKS.md d'abord. 2. UNE tâche non cochée.
113. Implémenter, exécuter la SUITE complète, commiter uniquement en vert, message descriptif.
124. Cocher la tâche, ajouter une ligne à progress.log, s'arrêter.
13Les tests définissent "terminé". Ne jamais affaiblir, sauter ou supprimer un test. Test erroné =
14marquer la tâche comme BLOQUÉE et dire pourquoi.
15
16## Politique de modèle
17Par défaut : terra, effort moyen. Mécanique : profil fast (luna, faible).
18Planification et bogues vicieux : profil deep (sol, élevé).
19Effort avant modèle. Profil choisi au début de la session, jamais en cours de tâche.
20Mode rapide DÉSACTIVÉ (2,5x crédits). Ultra DÉSACTIVÉ. Aucun des deux n'est un niveau d'effort.
21Ne créer un sous-agent que lorsque je vous le demande. Les enfants héritent du modèle ET du
22niveau de raisonnement de cette session, donc une création empressée à effort élevé est toute
23une flotte à effort élevé.
24
25## Bloqué
26Signaux : deux fois la même erreur ; deux étapes sans progrès ; un test survivant à deux
27correctifs distincts. Puis /fable-advice. Maximum 3 consultations, puis BLOQUÉ.
28
29## Révision
30/review-hostile dans une session VIERGE avant toute fusion, ou la voie
31multi-fournisseur du côté Claude. Ne jamais fusionner votre propre travail non révisé.

Une doctrine doit vivre des deux côtés, sinon le harnais qui a les habitudes les plus laxistes gagne à chaque fois que vous changez d'outil.

VÉRIFICATION 1 : pour chaque ligne, demandez-vous si le modèle pourrait se conformer à 80 % et revendiquer le succès. Si oui, réécrivez-la avec un chiffre ou un "jamais". wc -l CLAUDE.md inférieur à 60.

CONSTRUCTION 2 : La porte

Un script bash doit détenir le vote final avant que quoi que ce soit d'autre n'existe, car chaque construction ultérieure l'assume.

Créez gate/verify.sh pour votre pile :

bash
1#!/usr/bin/env bash
2set -e
3npm run typecheck --if-present
4npm test --if-present
5npm run lint --if-present

Créez gate/eval_gate.py, la ceinture de sécurité pour chaque futur changement de routage ou de prompt. Il exécute 50 à 500 cas de test retenus via la configuration actuelle et la configuration proposée, avec des vérifications uniquement déterministes :

python
1for case in cases: # {prompt, must_include, must_not_include, max_words}
2 hits += passes(case, run_config(case.prompt))
3verdict = "SHIP" if new_score >= old_score - 0.02 else "BLOCKED"

Ensuite, rendez la porte incontournable en tant que compétence, .claude/skills/ship-gate/SKILL.md :

markdown
1---
2name: ship-gate
3description: Exécute la porte d'évaluation avant toute modification de routage, de modèle ou de prompt.
4 Utilisez lorsque l'utilisateur demande de changer les règles de routage, d'échanger un niveau de modèle, de modifier un prompt système,
5 d'ajuster les niveaux d'effort, ou de fusionner quoi que ce soit touchant au routeur, aux prompts ou à la configuration du modèle.
6---
7
8# Porte de mise en production
9
10Toute modification du routage ou des prompts est un pari sur la qualité tant que la porte ne dit pas le contraire. Cette compétence existe pour que ce pari ne soit jamais expédié en silence.
11
12 1. Localisez eval/cases.jsonl. S'il n'existe pas, ARRÊTEZ et dites à l'utilisateur de
13 construire d'abord 50 à 500 cas représentatifs, à partir du trafic réel. N'inventez pas
14 de cas vous-même.
15 2. Exécutez : python3 eval_gate.py eval/cases.jsonl, config actuelle vs proposée.
16 3. BLOQUÉ : rapportez les deux scores, listez les cas qui ont régressé, n'appliquez pas la
17 modification, suggérez la plus petite annulation qui débloque la porte.
18 4. EXPÉDIER : appliquez, et ajoutez une ligne à progress.log avec les deux scores.
19
20Règles strictes :
21 - Ne jamais outrepasser un verdict BLOQUÉ, même si on vous le demande gentiment. Escaladez vers l'humain
22 avec les cas en échec joints.
23 - Ne jamais modifier le fichier de cas dans la même session qu'une modification de routage. La porte
24 et la modification ne doivent pas partager un auteur.
25 - Les chiffres de coût ne sont pas une défense contre une baisse de qualité. La porte gagne.

La porte n'utilise que des vérifications déterministes, car elle ne doit jamais hériter du problème « qui vérifie le vérificateur ». Une modification de routage sans porte d'évaluation est une expérience de coût que vous menez sur vos clients.

VÉRIFICATION 2 : ./gate/verify.sh se termine avec 0 aujourd'hui, et eval_gate.py affiche EXPÉDIER lors de sa démo. Si verify.sh échoue maintenant, corrigez-le avant toute autre chose. Le système repose sur ce script.

CONSTRUCTION 3 : Le Battement de Cœur

Le modèle apporte l'intelligence. La boucle apporte la discipline.

  • Un contexte frais par itération tue la pourriture du contexte
  • Le dépôt porte toute la mémoire
  • Deux limites transforment un agent incontrôlable en une leçon à dix dollars

C'est la forme exacte derrière l'exécution des 16 boucles d'Anthropic qui a construit un compilateur C de 100 000 lignes pour environ 20 000 $, sans aucun modèle orchestrateur.

Créez loop/PROMPT.md :

markdown
1Lisez progress.log et TASKS.md. Choisissez EXACTEMENT UNE tâche non cochée.
2Implémentez-la. Exécutez les tests. Si vert : commitez avec un message
3descriptif, cochez la tâche, ajoutez une ligne à progress.log, arrêtez-vous.
4Si la même tâche échoue deux fois, marquez-la comme BLOQUÉE avec l'erreur et arrêtez-vous.
5Créez un fichier nommé DONE uniquement lorsque chaque tâche est cochée ET que la suite complète
6réussit. Ne modifiez jamais un test pour le faire passer.

Créez loop/ralph.sh :

bash
1#!/usr/bin/env bash
2set -u
3MAX_ITERS="${MAX_ITERS:-25}" # limite un : itérations
4BUDGET_USD="${BUDGET_USD:-10}" # limite deux : dollars
5MAX_FAILS=3; fails=0; spent=0; i=0
6
7while [ ! -f DONE ] && [ "$i" -lt "$MAX_ITERS" ]; do
8 i=$((i + 1))
9 # session fraîche à chaque itération : pas de mémoire en dehors du dépôt lui-même
10 claude -p "$(cat PROMPT.md)" --max-turns 30 \
11 --output-format json > out.json 2> err.log \
12 && fails=0 || fails=$((fails + 1))
13 [ "$fails" -ge "$MAX_FAILS" ] && exit 2 # disjoncteur
14 cost=$(jq -r '.total_cost_usd // 0' out.json)
15 spent=$(awk -v a="$spent" -v b="$cost" 'BEGIN{printf "%.4f", a+b}')
16 awk -v s="$spent" -v c="$BUDGET_USD" 'BEGIN{exit !(s>c)}' && exit 3 # limite
17 sleep 2
18done
19[ -f DONE ] && echo "fait en $i ticks, \$$spent" || echo "limite atteinte, \$$spent"

Remplacez la ligne claude par codex exec et la même boucle pilote GPT-5.6.

La carte de sortie est délibérée : 0 fait ou silencieux, 2 disjoncteur, 3 budget. Chaque alarme dans CONSTRUCTION 12 se déclenche sur ces codes.

La ligne de coût lit le rapport de coût JSON de la session elle-même, donc la limite est appliquée par le harnais par rapport à la dépense réelle, pas une estimation.

Comptez les arrêts dans ce prompt. Chaque branche se termine par un, et c'est la conception, pas un tic.

Cette génération tourne beaucoup plus longtemps par message que la précédente. C'est surtout un cadeau. Parfois une facture, car un modèle qui n'a plus besoin d'encouragement pour continuer emportera une tâche quatre étapes au-delà du point où vous vouliez l'examiner.

La boucle résout cela structurellement : une tâche par tick, arrêt net à la fin.

En mode interactif, vous devez le dire à voix haute. Deux prompts font le travail :

  • « écris le plan, puis arrête-toi et montre-moi avant de construire quoi que ce soit »
  • une fois le plan bon : « construis-le, teste-le, ouvre la PR, gère le premier tour de commentaires de relecture, puis arrête-toi »

Un modèle qui tourne longtemps n'est dangereux que si personne ne lui a dit où se trouvait la limite.

Les tâches longues échouent comme le contexte échoue, donc les itérations restent courtes et l'environnement fait la mémorisation. Fable 5 et les modèles Codex compactent désormais leur propre contexte en cours d'exécution, alors résistez à l'ajout de tuyauterie mémoire astucieuse ; la bonne quantité diminue chaque trimestre.

VÉRIFICATION 3 : deux toutes petites tâches réelles dans TASKS.md, un tick exécuté manuellement à BUDGET_USD=2. Confirmez un commit, une tâche cochée, une ligne de log, et que la boucle se termine au lieu de démarrer une deuxième tâche.

CONSTRUCTION 4 : Le Routeur Qui Gagne Sa Place (modèle, puis effort)

Le benchmark de routage le plus rigoureux de 2026, LLMRouterBench, a révélé que de nombreux routeurs, y compris commerciaux, ne parviennent pas à battre de manière fiable le choix du meilleur modèle unique. Donc, le routeur est coupable jusqu'à preuve d'innocence sur votre propre trafic.

La règle de décision, avant tout code. Ajoutez un routeur uniquement lorsque les deux conditions suivantes sont vraies :

  • Les niveaux bon marché et frontière montrent un écart de capacité par dollar d'environ cinq fois sur votre trafic
  • L'ensemble d'évaluation de la CONSTRUCTION 2 existe pour le surveiller

Si un modèle bien choisi bat votre routeur sur ces évaluations, supprimez le routeur et profitez de la simplicité.

Une fois qu'il a passé la barre, router/router.py exécute trois couches, décision la moins chère en premier. Notez que les niveaux nomment des places, jamais des prix : les tarifs proviennent de la compétence de banc d'essai à l'exécution, donc un changement de prix ne touche jamais votre routeur.

python
1TIERS = { # places, pas des nombres
2 "cheap": "gpt-5.6-luna", # ou claude-haiku-4-5
3 "mid": "claude-sonnet-5",
4 "frontier": "claude-fable-5", # ou gpt-5.6-sol
5}
6PRICES = load_bench(".claude/skills/model-bench/SKILL.md") # source unique de vérité
7
8RULES = [
9 (kind in {"extract", "format", "summarize"}, "cheap"),
10 (kind in {"plan", "architect", "migrate"}, "frontier"),
11 (context_length > 60_000, "mid"),
12]
13tier = layer1_rules(task) or layer2_classifier(task)
14if tier: return call(TIERS[tier], task)
15return cascade(task) # cheap d'abord, vérifier, escalader UNE FOIS en cas d'échec

La couche intermédiaire évalue la difficulté sur des marqueurs que vous pouvez lire : pourquoi, déboguer, course, blocage, refactoriser, sécurité, plus du code dans le prompt, une tentative antérieure échouée, et plus d'un sous-système touché.

Zéro ou un point va en cheap. Deux va en mid. Trois ou plus va en frontier. Le vérificateur de la cascade est déterministe et escalade exactement une fois.

Câblez les mêmes décisions dans le harnais pour qu'elles se déclenchent sans être invoquées, .claude/skills/model-router/SKILL.md. Notez que la compétence ne réénonce pas les règles, elle les lit, le même truc de source unique de vérité que le banc utilise pour les prix :

markdown
1---
2name: model-router
3description: Acheminez chaque tâche vers la bonne place et le bon effort avant de commencer le travail.
4 Utilisez au début de la session, avant de lancer des sous-agents, lorsque l'utilisateur demande quel modèle
5 utiliser, ou lorsqu'une tâche mélange planification et exécution.
6---
7
8# Routeur de modèle
9
10Lisez ROUTING.md et appliquez-le. N'improvisez pas de politique, et n'en réénoncez pas
11ici : ce fichier pourrirait, et le fichier de politique est celui qui est sous la porte d'évaluation.
12
13Trois choses que cette compétence applique en plus de ce fichier :
14
15 1. Acheminez uniquement aux frontières. Début de session et lancement de sous-agent. Un échange en cours de tâche
16 invalide le cache et refacture le contexte à dix fois le taux en cache.
17 2. À la fin de la session, ajoutez la part du niveau cheap à progress.log. Les économies ne se composent
18 qu'une fois que la majeure partie du trafic passe en cheap, donc ce nombre est celui à surveiller.
19 3. Toute modification de ROUTING.md passe par la compétence ship-gate. Aucune exception.

L'ordre de décision reflète le coût : d'abord une vérification gratuite, ensuite une estimation notée, enfin une expérience payante.

L'argent est dans la répartition du trafic, pas dans l'ingéniosité.

  • Envoyez 70 pour cent du travail à un niveau dix fois moins cher et la facture baisse d'environ deux tiers
  • Les rapports de production se situent entre 40 et 85 pour cent d'économies, et l'écart est presque entièrement dû à la répartition
  • Les économies ne se composent qu'après que la majeure partie du trafic passe en cheap

C'est pourquoi la part cheap dans progress.log est le seul nombre que ce système vous oblige à surveiller.

L'effort est le deuxième cadran

L'effort est le routage à un niveau inférieur : la même compétence, appliquée à la durée de réflexion du modèle au lieu du modèle qui tourne.

Chaque outil enterre le cadran sur un défaut différent. Élevé dans Claude Code. Moyen dans Codex. Caché dans la plupart des applications. Donc les gens laissent un réglage pour tout, et soit ils paient trop cher, soit ils ne réfléchissent pas assez.

Avid - inline image

Par défaut, mettez élevé et considérez le maximum comme un dernier recours, pas une démonstration de force.

  • La propre documentation d'effort d'Anthropic place le point idéal à élevé, et prévient que le maximum bascule dans la réflexion excessive
  • Un benchmark public de 26 tâches de codage a montré qu'élevé triplait à peu près la qualité de faible
  • Le même benchmark a montré que xhigh coûtait plus de deux fois plus pour un gain qui se remboursait rarement

Le modèle compte au moins autant que le cadran. Fable 5 à effort plus faible bat souvent les modèles plus anciens tournant à xhigh, donc atteignez le meilleur modèle avant le réglage plus élevé.

Deux réglages sont souvent confondus avec des échelons supérieurs de cette échelle. Aucun des deux n'en fait partie.

  • Max est la profondeur. Un modèle, un problème, plus de temps.
  • Ultra est la largeur. Une tâche déployée vers quatre agents parallèles, puis synthétisée.

Axes différents. Ultra n'est pas « plus que max », et le pointer sur une tâche qui ne se divise pas vraiment achète quatre agents qui dupliquent une seule investigation.

L'échelle ne se transpose pas d'une version à l'autre. Le même mot achète une quantité de réflexion différente sur un nouveau modèle par rapport à l'ancien.

En déplaçant une tâche familière vers une nouvelle place, commencez un échelon en dessous du réglage en lequel vous avez confiance. Ne montez que si la sortie le demande.

Un piège concerne spécifiquement les essaims.

Les sous-agents héritent du modèle du parent et de l'effort du parent. Une flotte issue d'un conducteur à effort max est une flotte à effort max, et elle draine une fenêtre en un seul message.

Épinglez-les dans leur propre frontmatter, et sachez dans quel harnais vous êtes lorsque vous le faites, car l'épingle n'est aussi bonne que le générateur qui la lit.

  • Côté Claude. Le frontmatter ci-dessous est le contrôle.
  • Côté Codex. 5.6 génère des enfants au même niveau de modèle et de raisonnement que le parent, et il génère avidement. Le cadran du parent est le cadran de la flotte.

Du côté Codex, les seuls vrais contrôles sont le réglage avec lequel vous avez ouvert la session, et une ligne dans AGENTS.md qui dit de ne pas générer sauf demande. Vérifiez lequel vous avez avant de faire confiance à l'un ou l'autre :

yaml
1name: scout
2model: haiku
3effort: low # les sous-agents héritent du parent. un essaim à effort max
4 # vide une fenêtre en un message. épinglez-les.

Réglez-le par outil : /effort dans Claude Code et le TUI Codex, un drapeau comme codex -e high, une ligne dans la configuration, ou le champ effort sur l'API.

Le routage de modèle décide qui pense. Le routage d'effort décide combien de temps, et le deuxième cadran est moins cher à tourner car rien d'autre dans la configuration ne change et le cache reste chaud. Dépensez l'effort là où la boucle bifurque. Partout ailleurs, c'est une taxe.

Suivez le seul nombre chaque semaine :

bash
1grep '^route' progress.log | awk -F'\t' \
2 '{r++; if($3!="frontier")c++} END{printf "cheap share: %.0f%%\n", c/r*100}'

ROUTING.md, la politique que les deux harnais lisent

Tout ce qui précède se condense en un seul fichier à la racine du dépôt.

markdown
1# ROUTING.md
2
3Le routage repose sur quatre décisions, et l'ordre est le point essentiel :
4 1. OÙ : quel harnais exécute le travail
5 2. QUAND : à quelle frontière la décision est prise
6 3. QUI : quel modèle occupe la place
7 4. COMBIEN : quel niveau d'effort ce modèle utilise
8La plupart des équipes ne discutent que du 3. L'argent est dans le 2 et le 4.
9
10## 1. OÙ : harnais avant modèle
11Un modèle post-entraîné dans un harnais fonctionne hors distribution ailleurs.
12Écart mesuré : 20,2 % natif contre 7,7 % étranger, mêmes poids.
13
14| Travail | Harnais | Pourquoi |
15|---|---|---|
16| écrire du code | le harnais natif du modèle | les rédacteurs se dégradent hors distribution |
17| relire du code | le harnais natif du relecteur | une relecture faible est pire qu'aucune |
18| lire, explorer | n'importe où | les lectures sont bon marché et vérifiables |
19| transformations mécaniques | n'importe où | si la vérification est déterministe, le harnais importe à peine |
20
21LOI : remappez librement les voies de lecture et de relecture. La voie d'écriture reste native du harnais jusqu'à ce que votre propre ensemble d'évaluation dise le contraire. Cette dérogation doit être une mesure, pas une préférence.
22
23## 2. QUAND : acheminez aux frontières, jamais à l'intérieur
24Un échange en milieu de session jette le cache de prompts. Les entrées en cache coûtent un dixième des entrées fraîches, donc un échange inutile refacture tout le contexte à dix fois le prix et n'achète rien.
25
26Frontières légales, les SEULS endroits où une décision de routage peut avoir lieu :
27 - début de session
28 - lancement de sous-agent
29 - un nouvel objectif dans l'essaim
30 - un transfert de relecture vers l'autre lignée
31 - un repli déclenché par une panne ou une sauvegarde
32
33Illégal partout ailleurs. Pas de routage par tour. Pas d'échange adaptatif en cours de tâche.
34La cascade a EXACTEMENT UNE escalade, et elle ouvre une nouvelle frontière.
35
36LOI : choisissez la place lorsque la frontière s'ouvre, puis restez jusqu'à la suivante.
37
38## 3. QUI : la procédure de décision (première correspondance gagne, enregistrez le résultat)
39
40Couche 1, règles. Gratuit. Vérifiez toujours d'abord.
41
42| Signal | Place |
43|---|---|
44| extraction / format / résumé / classification / tests | Haiku ou Luna, effort faible |
45| planification / architecture / migration / analyse des causes | Fable planifie, Sonnet exécute |
46| contexte de plus de 60k tokens | Niveau 1M Anthropic (tarif forfaitaire) |
47| relecture de code écrit par un agent | l'autre lignée, harnais natif |
48| objectif se divise en parties indépendantes | essaim : Fable écrit et note |
49
50Couche 2, le score. Un point chacun :
51 - contient pourquoi / déboguer / course / blocage / refactoriser / sécurité / optimiser
52 - touche plus d'un sous-système
53 - une tentative antérieure a déjà échoué
54 - la modification est irréversible ou orientée utilisateur
55 0-1 -> niveau cheap, effort faible. 2 -> Sonnet, moyen. 3+ -> frontier, élevé.
56
57Couche 3, la cascade. Exécutez cheap, vérifiez déterministement, escaladez EXACTEMENT UNE FOIS.
58Jamais deux fois. Un deuxième échec est un problème de spécification, et un modèle plus grand ne corrigera pas
59votre spécification.
60
61Les places et les replis se trouvent dans .claude/skills/model-bench/SKILL.md. Pas de prix ici.
62
63## 4. COMBIEN : routage de l'effort
64L'effort est le routage à un niveau inférieur. Le cadran le moins cher de ce fichier : rien d'autre
65ne change et le cache reste chaud.
66
67| Effort | Utilisez-le pour |
68|---|---|
69| faible | fautes de frappe, renommages, tri, extraction, TOUT sous-agent par défaut |
70| moyen | code de routine à partir d'une spécification claire, résumés, rédaction standard |
71| élevé | démontages, migrations, bogues tenaces, tout travail de conducteur (PAR DÉFAUT) |
72| max | uniquement le problème qu'élevé n'a pas réussi à résoudre |
73| ultra | PAS SUR CETTE ÉCHELLE. largeur, pas profondeur : 4 agents en parallèle. désactivé par défaut |
74
75 1. Par défaut, élevé. Le point idéal est là ; max bascule dans la réflexion excessive.
76 2. Un meilleur modèle bat un cadran plus élevé. Améliorez la place avant le réglage.
77 3. Les sous-agents HÉRITENT du modèle ET de l'effort du parent. Une flotte issue d'un
78 conducteur à effort max tourne à max et vide une fenêtre en un message. Épinglez
79 chaque sous-agent dans son propre frontmatter : effort: low. Là où le générateur
80 ignore l'épingle, le cadran du parent EST le cadran de la flotte. Vérifiez lequel vous avez.
81 4. Max est la profondeur. Ultra est la largeur. Ultra uniquement lorsque les sous-problèmes sont vraiment
82 indépendants, jamais par défaut, et pas du tout tant que le harnais génère trop.
83 5. L'échelle ne se transpose pas d'une version à l'autre. Sur un nouveau modèle, commencez un échelon
84 en dessous du réglage auquel vous faisiez confiance sur l'ancien.
85 6. Le mode rapide n'est pas non plus un niveau d'effort. Il achète de la latence à 2,5x crédits sur
86 des tokens que vous brûliez de toute façon. Désactivé.
87
88Le cadran se trouve à quatre endroits : /effort dans Claude Code et le TUI Codex, codex -e high,
89model_reasoning_effort dans la configuration, le champ effort sur l'API. Claude Code
90par défaut élevé, Codex par défaut moyen, la plupart des applications le cachent complètement, c'est pourquoi
91les équipes utilisent accidentellement un niveau pour tout.
92
93## 5. Replis : supposez que la frontière est en panne
94La disponibilité de la frontière n'est pas garantie, et une sauvegarde peut réacheminer un appel vers
95Opus 4.8 en cours d'exécution, dans moins de 5 % des sessions, sans erreur.
96 - Chaque place a un repli nommé. Aucune exception.
97 - Chaque repli est enregistré. Un réacheminement silencieux est un bogue, car vous pouvez
98 lire la sortie d'un modèle que vous n'avez pas choisi.
99 - NE JAMAIS itérer sur la sortie d'un modèle que vous n'avez pas choisi.
100
101## 6. Le nombre qui décide si tout cela a fonctionné
102Le coût mélangé est votre répartition du trafic, rien d'autre. 70 % cheap réduit la facture
103d'environ deux tiers. 10 % économise de la menue monnaie. La précision du routeur vaut
104bien plus que l'ingéniosité du routeur.
105
106Suivez-le avec la ligne unique dans CONSTRUCTION 4. En dessous de 50 %, les économies n'ont pas
107commencé à se composer. Corrigez la répartition avant de toucher à quoi que ce soit d'autre ici.
108
109## 7. La porte sur ce fichier
110LOI : aucune modification de ce fichier n'est expédiée sans que eval_gate.py réussisse sur 50 à 500
111cas retenus. Un verdict BLOQUÉ est définitif et ne peut pas être outrepassé en session.
112La porte et la modification ne doivent pas partager un auteur.
113
114## 8. Quand supprimer ce fichier
115Si un seul modèle bien choisi bat toute cette pile sur vos évaluations, supprimez le
116routeur et gardez la simplicité. Le benchmark de routage le plus rigoureux de 2026 a révélé
117que de nombreux routeurs, y compris commerciaux, ne parviennent pas à battre de manière fiable le choix du meilleur
118modèle unique.
119Mesurez d'abord. Acheminez ensuite. Supprimez avec joie.

VÉRIFICATION 4 : router.py s'exécute hors ligne et affiche une décision, une raison et la répartition. Vos notes contiennent la mesure de l'écart de 5x, ou une note datée indiquant que le routeur n'est pas encore justifié.

CONSTRUCTION 5 : L'Inversion du Conseiller

Le schéma classique met le modèle intelligent aux commandes et brûle des tokens frontière sur l'exécution en masse. Inversez-le.

Les résultats du conseiller d'Anthropic : Haiku avec un conseiller de classe Opus a plus que doublé son score sur un benchmark de navigation difficile, 41,2 contre 19,7 seul, à un coût par tâche 85 % inférieur à celui du niveau intermédiaire.

L'exécution est en vrac. Le conseil est en grammes.

Le harnais décide quand le conducteur est bloqué, jamais le conducteur, .claude/skills/stuck-protocol/SKILL.md :

markdown
1---
2name: stuck-protocol
3description: Escaladez vers le conseiller expert fable lorsque la progression stagne. Utilisez lorsque
4 la même erreur apparaît deux fois, lorsque deux étapes consécutives ne modifient aucun fichier tandis que
5 des erreurs persistent, lorsqu'un test échoue après deux tentatives de correction distinctes, ou lorsque l'utilisateur
6 dit que l'agent tourne en rond.
7---
8
9# Protocole de blocage (l'inversion du conseiller)
10
11Vous êtes le conducteur bon marché et c'est une fonctionnalité : l'exécution est en vrac, le conseil est
12en grammes. Mais les petits modèles sont trop confiants, donc ce n'est pas à vous de décider que vous allez
13bien. Vérifiez plutôt les signaux déterministes.
14
15Signaux de blocage (un seul déclenche le protocole) :
16 1. La même chaîne d'erreur sur deux étapes consécutives.
17 2. Deux étapes consécutives avec zéro fichier modifié tandis que des erreurs persistent.
18 3. Le même test échouant après deux tentatives de correction vraiment différentes.
19
20Procédure :
21 1. Comptez les consultations cette session. À 3, ARRÊTEZ : marquez la tâche comme BLOQUÉE avec
22 l'erreur jointe, résumez pour l'humain, passez à autre chose. Jamais une quatrième consultation.
23 2. Construisez le briefing, rien d'autre n'y entre :
24 OBJECTIF : une ligne
25 TENTATIVE x2 : les deux dernières tentatives, 200 caractères chacune
26 ERREUR : l'erreur exacte, 300 caractères
27 3. Lancez fable-expert avec le briefing. Il renvoie des conseils, pas du code.
28 4. Appliquez les conseils à l'étape suivante, avant toute action de votre cru.
29 5. Ajoutez une ligne à progress.log : consultation #N, ce qu'elle a dit, si cela a fonctionné.
30
31Règles strictes :
32 - Ne demandez jamais à l'expert d'effectuer le travail. Si la réponse contient une
33 implémentation complète, prenez l'idée et jetez le code.
34 - Ne gonflez jamais le briefing avec votre historique de raisonnement. La valeur de l'expert est un
35 contexte propre ; un briefing long l'empoisonne.
36 - Si les conseils échouent, cela compte comme l'une de vos deux tentatives vers la prochaine
37 consultation. Trois consultations échouées signifient que la tâche dépasse le niveau de compétence de cette session,
38 et le dire est la sortie correcte.

La place de l'expert, .claude/agents/fable-expert.md :

markdown
1---
2name: fable-expert
3description: Conseiller frontière pour les moments de blocage. Reçoit un briefing compact de
4 stuck-protocol, renvoie des conseils sous 600 tokens, n'effectue jamais le travail lui-même.
5model: claude-fable-5 # passez à opus si les règles de rétention vous mordent
6effort: high
7tools: Read, Grep, Glob # peut lire, ne peut jamais éditer
8---
9
10Vous êtes le consultant expert, pas l'entrepreneur. Un modèle moins cher conduit et
11a heurté un mur. Votre valeur est le jugement en grammes, et un contexte propre : vous ne savez
12rien de la façon dont le conducteur est arrivé ici, ce qui est exactement pourquoi votre lecture est plus
13précise.
14
15Vous recevez un briefing : OBJECTIF, les deux dernières TENTATIVES, et l'ERREUR. Si le briefing nomme
16des fichiers spécifiques, vous pouvez les lire. Vous ne pouvez rien éditer.
17
18 1. Si le briefing manque de quelque chose dont vous avez besoin, répondez avec UNE ligne nommant ce
19 qui manque. Ne devinez pas autour d'un trou.
20 2. Diagnostiquez avant de prescrire : une ou deux phrases sur ce qui ne va pas réellement.
21 3. Répondez ensuite dans ce format et rien après :
22 CONSEILS :
23 1. (correction la plus probable : quoi essayer, et pourquoi cela devrait fonctionner)
24 2. (solution de repli si 1 échoue)
25 3. (uniquement s'il existe une troisième voie vraiment distincte)
26 CONFIANCE : élevée | moyenne | faible
27 4. Moins de 600 tokens. Pas de blocs de code de plus de 10 lignes. Donnez l'idée, pas
28 l'implémentation. Si votre réponse contient une solution complète, vous avez échoué au rôle.
29 5. Si la tâche elle-même est mal conçue, dites-le dans l'élément 1 et recommandez quoi
30 dire à l'humain.
31
32Note de l'opérateur : si votre organisation ne peut pas accepter la rétention de classe Mythos, changez la ligne
33de modèle pour opus. Le rôle fonctionne de la même manière ; le résultat du conseiller a d'abord été prouvé avec
34des conseillers de classe Opus.

Et la même voie en sens inverse pour les sessions Codex, ~/.codex/prompts/fable-advice.md :

bash
1claude --model claude-fable-5 -p "Vous êtes un conseiller expert.
2 Un modèle moins cher conduit et est bloqué. BRIEFING : <objectif, deux
3 tentatives, erreur>. Répondez CONSEILS : jusqu'à 3 éléments numérotés,
4 moins de 600 tokens. Ne faites pas le travail."

Les petits modèles sont trop confiants, donc le harnais observe le comportement au lieu de demander.

Le briefing reste petit, car la valeur de l'expert est un contexte propre et un briefing long l'empoisonne.

Chaque consultation consomme quelques centaines de tokens de conseils. C'est pourquoi l'économie s'effondre : l'exécution des millions roule sur le niveau à 1 $, et le jugement arrive au gramme à 50 $ par million.

Cognition a publié l'échec en premier. Le plafond est fixé par le conducteur, pas par le conseiller, et le schéma n'a payé qu'après que leur conducteur se soit amélioré d'une génération.

Le problème ouvert est un conducteur qui remarque qu'il est bloqué. C'est pourquoi les signaux ci-dessus sont comportementaux, et pourquoi ils vivent dans le harnais.

VÉRIFICATION 5 : advisor_loop.py réussit ses assertions : le conducteur échoue deux fois de la même manière, une consultation est déclenchée, la tâche se termine, les consultations restent sous le plafond.

CONSTRUCTION 6 : Le Banc à Deux Voies

Rien ne note ses propres devoirs est une loi, et cette construction l'applique à travers les fournisseurs.

Les mêmes poids dans un harnais étranger chutent fort. Une mesure de 2026 a montré 20,2 % natif contre 7,7 % tiers.

Donc chaque relecteur fonctionne dans son propre environnement. Claude relit dans Claude Code. Sol relit via le CLI Codex.

Le juge interne, .claude/agents/fresh-eyes-reviewer.md :

markdown
1---
2name: fresh-eyes-reviewer
3description: Relecteur à contexte vierge. À invoquer après toute modification générée par un agent.
4 Ne partage aucun historique avec l'auteur, lit le diff lui-même, ne peut pas modifier.
5model: haiku # passer à opus quand le diff est critique
6effort: medium
7tools: Read, Grep, Glob, Bash
8---
9
10Vous n'avez aucun souvenir de la façon dont cette modification a été écrite, et c'est le but. Ne demandez
11pas le raisonnement de l'auteur. Ne faites confiance à aucun résumé. Seulement aux preuves.
12
13 1. git diff HEAD~1 (ou la plage donnée) et lisez chaque bloc.
14 2. Lisez le CONTENU COMPLET de chaque fichier modifié, pas seulement les blocs. Les bugs se cachent dans
15 les lignes inchangées autour d'une modification.
16 3. Exécutez la suite de tests nommée dans le README ou CLAUDE.md.
17 4. Traquez les trois échecs classiques d'un agent :
18 paresse : implémentations partielles, TODOs, traitement pour un seul cas
19 notation personnelle : tests affaiblis, assertions supprimées, suites ignorées
20 dérive : modifications hors du périmètre de la tâche indiquée
21 5. Verdict, dans ce format exact :
22 VERDICT : RÉUSSI ou ÉCHEC
23 BUGS : numérotés, chacun avec fichier:ligne et une raison d'une phrase
24 RISQUE : une phrase sur l'élément le plus risqué que cette modification touche
25
26Règles strictes : vous ne pouvez pas modifier les fichiers, vous ne pouvez pas relancer la tâche de l'auteur,
27et une liste BUGS vide avec VERDICT : ÉCHEC est invalide. Si les tests ne peuvent pas être exécutés, c'est un
28ÉCHEC automatique avec la raison.

Le juge inter-fournisseur, .claude/agents/sol-reviewer.md, est un canal qui exécute une commande et relaie le verdict textuellement. Sol est le relecteur ; ce fichier le met dans son propre harnais :

markdown
1---
2name: sol-reviewer
3description: Relecteur inter-fournisseur. Envoie le dernier commit à GPT-5.6 Sol via
4 la CLI Codex, dans le harnais natif de Sol, et relaie le verdict sans le modifier.
5model: haiku # canal uniquement. Sol est le relecteur.
6effort: low
7tools: Bash, Read
8---
9
10Vous êtes un canal, pas le relecteur. Les modèles d'une même famille partagent des angles morts ; cette
11voie existe parce que Sol ne partage pas ceux de Claude.
12
13 1. Vérifiez la CLI : codex --version. Si elle est absente, affichez VERDICT : ÉCHEC avec la raison
14 "codex CLI non installé" ainsi que le chemin d'installation (ou le plugin officiel :
15 /plugin marketplace add openai/codex-plugin-cc, /plugin install, /codex:review).
16 2. Lancez la relecture à effort élevé, dans le harnais natif de Sol :
17
18 codex --profile deep exec "Review the latest commit (git show HEAD) as a
19 hostile senior engineer who has never met the author. Read every touched
20 file IN FULL, not just the hunks. Hunt: partial implementations, weakened
21 or deleted tests, changes outside the stated task scope. End with exactly
22 'VERDICT: PASS' or 'VERDICT: FAIL' followed by numbered findings, each with
23 file:line and a one-sentence reason."
24
25 3. Sauvegardez la sortie complète dans .review_sol_<hash-court>.md.
26 4. Relaiez vers le haut : d'abord la ligne VERDICT, puis les constats TEXTUELLEMENT. Ne
27 résumez pas les constats, n'ajoutez pas de réassurance, ne discutez pas avec Sol.
28 Si le verdict est ÉCHEC, le parent décide quoi corriger. Vous ne décidez rien.
29
30Règles strictes : ne jamais modifier les fichiers, ne jamais relancer la tâche de l'auteur, ne jamais substituer
31votre propre relecture. Si codex échoue en cours d'exécution, signalez-le comme ÉCHEC avec stderr joint plutôt
32que de réessayer silencieusement plus d'une fois.

Pour l'CI, loop/two_lane.sh pilote tout l'échange, trois rounds maximum :

bash
1claude -p "Implement: $TASK. Run the tests. Commit when green."
2review=$(codex exec "Review HEAD ... VERDICT: PASS or FAIL plus findings.")
3grep -q "VERDICT: PASS" <<< "$review" && exit 0
4claude -p "A reviewer from another model family found these issues.
5 Fix every one, rerun tests, commit: $review"

Dans Claude Code, vous pouvez sauter le script entièrement.

OpenAI fournit un plugin Codex officiel pour Claude Code, disponible depuis mars 2026 et comptant environ vingt mille étoiles GitHub en neuf semaines. C'est le marché qui vous dit que la relecture inter-fournisseur est devenue courante. Installez-le une fois :

text
1/plugin marketplace add openai/codex-plugin-cc
2/plugin install codex@openai-codex
3/codex:setup

Trois actions dans n'importe quelle session Claude :

  • /codex:review pour un passage standard
  • mode adversarial, qui attaque délibérément vos décisions de conception
  • délégation en arrière-plan à Codex

Utilisez le mode adversarial pour tout ce qui est critique. Utilisez la délégation quand le travail est lourd en terminal, là où Sol est le plus fort.

Un nombre croissant de développeurs exécutent désormais GPT-5.6 Sol dans Claude Code, via le proxy du BUILD 7, et le préfèrent à Codex pour le travail quotidien.

Cela démontre la thèse : louez les poids, possédez le harnais.

Le hic, c'est la loi du harnais natif, car Sol dans Claude Code tourne en dehors de son environnement. Confirmez-le sur votre propre ensemble d'évaluation. Si vos évaluations disent que le harnais étranger gagne, vos évaluations priment sur le benchmark.

Trois propriétés rendent le relecteur précieux :

  • Contexte vierge. Il arrive sans aucun historique de l'auteur.
  • Lignée différente. Il ne partage pas les angles morts de l'auteur.
  • Harnais natif. Il juge à pleine puissance.

Un verdict atténué est un vérificateur cassé, donc le relais est textuel. Un troisième ÉCHEC avertit un humain au lieu de tenter un quatrième essai.

CHECK 6 : exécutez two_lane.sh, ou /codex:review sur votre dernier commit. Un VERDICT atterrit dans un fichier .review, et un ÉCHEC est renvoyé à la voie de l'auteur.

BUILD 7 : Fan-outs optionnels (installer quand la condition apparaît)

Scout swarm. Installez quand la recherche ou l'archéologie du codebase prend plus de 30 minutes de votre journée. Lancez-en trois en parallèle sur des tranches distinctes :

markdown
1---
2name: scout
3description: Lecteur parallèle bon marché pour les fan-outs de recherche. Lancez-en plusieurs à la fois
4 pour les études de codebase, les audits de dépendances, l'archéologie de logs, la recherche documentaire.
5 En lecture seule par doctrine ; les lectures se répartissent, les écritures restent mono-thread.
6model: haiku
7effort: low # garde d'héritage (BUILD 4) : un essaim qui hérite
8 # de l'effort maximum vide une fenêtre en un message
9tools: Read, Grep, Glob, Bash
10---
11
12Vous êtes l'un des nombreux lecteurs fonctionnant peut-être en parallèle. Étudiez votre tranche et
13rapportez de manière concise et précise. Seul votre message final revient au parent, alors
14gardez-le sous 400 mots et faites en sorte que chaque mot mérite sa place.
15
16 1. Réduisez votre mission à une seule tranche vous-même (un dossier, un sous-système,
17 une question), et dites ce que vous avez choisi.
18 2. Lectures uniquement : Read, Grep, Glob, et shell en lecture seule (ls, git log, git show, rg).
19 Ne jamais modifier, installer ou supprimer. Si la tâche nécessite une écriture, signalez-le, ne le
20 faites pas.
21 3. D'abord en largeur, puis en profondeur sur les deux ou trois points les plus chauds.
22
23Format du rapport, rien d'autre :
24 FINDINGS : jusqu'à 10 puces, chacune avec un fait et sa preuve (fichier:ligne, hash de commit
25 ou URL)
26 GAPS : ce que vous n'avez pas pu déterminer et pourquoi, afin que le parent sache ce qui reste obscur
27 HOTSPOT : le fichier ou la fonction unique qui mérite le plus d'attention, une ligne
28 sur pourquoi
29
30Ne commentez pas, ne proposez pas d'implémentations, ne rajoutez pas de remplissage. Un scout qui
31renvoie 300 mots utiles bat un scout qui en renvoie 3 000 mélangés, car
32tout ce que vous émettez atterrit dans la fenêtre de contexte du parent et le parent paie pour cela.

Les lectures se répartissent car les lecteurs parallèles se cumulent. La limite de mots existe parce que chaque rapport atterrit dans une fenêtre de contexte que le parent paie.

Les écritures ne se répartissent jamais. Une étude de 2026 à budget égal a montré que les agents uniques égalent les configurations multi-agents sur le raisonnement lorsque les tokens sont maintenus constants. Cette voie est réservée à la lecture.

Overnight burner. Installez quand TASKS.md contient dix éléments vérifiables ou plus. La compétence overnight-burner configure les fichiers, confirme les deux limites, vérifie que la commande de test s'exécute, puis lance ralph.sh. Interface matinale : git log, progress.log, coches.

Plan split. Installez quand les tokens de planification dominent la facture d'une session. Un paramètre dans Claude Code exécute un modèle de classe Opus pour le plan et Sonnet pour l'exécution. Planifiez sur la frontière au gramme, exécutez en gros.

Trio bench. Installez quand un changement retors mérite trois perspectives. Deux rôles lisent et un écrit, et le quatrième volet est un piège. Le canal se trouve en dessous.

Le canal pour les flottes mixtes

Deux pièces open source transforment une configuration à deux fournisseurs en une configuration multi-fournisseurs. Installez-les uniquement quand une condition appelle un troisième fournisseur.

claude-model-switch (open source, Rust, tourne sur localhost:4000). Un proxy local entre Claude Code et tout point de terminaison compatible Anthropic ou OpenAI.

  • Remappe les trois niveaux internes de Claude Code (haiku, sonnet, opus) vers les modèles que votre fournisseur propose
  • Change de fournisseur sans redémarrer, via rechargement de configuration
  • Livré comme plugin Claude Code avec des commandes slash
bash
1claude-model-switch init # pointe Claude Code vers le proxy
2claude-model-switch add openrouter sk-or-xxx
3claude-model-switch add glm \
4 --haiku glm-4.5-air --sonnet glm-4.7 --opus glm-5
5claude-model-switch use glm # par session, jamais en cours de tâche
6claude-model-switch orchestrate start --preset trio # planificateur/codeur/relecteur

Le preset trio est le bench du BUILD 7 rendu physique : trois volets tmux, chaque rôle sur un fournisseur différent, chacun adressable (orchestrate send coder "implement milestone 1"), avec réaffectation de rôle en cours de session si un fournisseur se dégrade.

CLIProxyAPI (open source). La même astuce, dans l'autre sens.

Il encapsule les connexions OAuth de ChatGPT Codex, Claude Code, Gemini et Grok en tant que points de terminaison API compatibles OpenAI, Claude et Gemini.

Traduction : les sièges d'abonnement que vous payez déjà deviennent des cibles API routables pour des scripts comme ralph.sh et two_lane.sh, sans clés API séparées. Les forks communautaires l'étendent à Factory et Amp, et des wrappers comme ccs ajoutent la commutation multi-comptes.

La loi qui régit les deux, d'après les données du BUILD 6 : un modèle remappé tourne dans un harnais étranger.

Remappez librement les voies de lecture et de relecture. Elles sont bon marché et vérifiables.

Gardez la voie qui écrit du code sur un modèle natif de son harnais, jusqu'à ce que votre propre ensemble d'évaluation prouve le contraire.

CHECK 7 : chaque fan-out installé a sa condition de déclenchement écrite à côté. Installer quoi que ce soit de spéculatif, c'est ainsi que les piles gonflent.

BUILD 8 : La Factory (l'achèvement devient un fait de base de données)

Tout ce qui précède prouve le travail sur le moment. La porte, le verdict et l'ensemble d'évaluation se déclenchent tous pendant l'exécution.

Dès que plus d'un agent touche un projet sur plus d'une session, vous avez besoin d'une preuve qui survive à l'exécution : qui a travaillé sur quoi, dans quel ordre, et si le dernier cycle de relecture a été validé.

Avid - inline image

Le modèle vient de la démo pi-factory (github.com/xpriment626/pi-factory). L'idée porteuse tient en une phrase

Un fil est une trace. Une ligne est une preuve. La porte lit les lignes.

progress.log est un journal. Le tableau noir est un grand livre. SQLite est le grand livre car il est interrogeable après que tout le monde a cessé de parler.

Créez factory/factory_gate.py. Il contient quatre tables (tickets, briefs, evidence, verdicts), une commande d'enregistrement que chaque agent appelle en travaillant, et la porte d'achèvement. Les conditions d'échec de la porte correspondent au travail lui-même :

python
1checks = [
2 (tickets == 0, "Aucun ticket n'a été enregistré."),
3 (done != tickets, "Tous les tickets ne sont pas terminés."),
4 (first_brief is None, "Aucun brief d'architecture n'a été enregistré."),
5 (first_brief > first_code, "Les preuves d'implémentation précèdent le brief."),
6 (code_ev == 0, "Aucune preuve de code de l'implémenteur n'a été enregistrée."),
7 (build_ok == 0, "Aucune preuve de commande de build réussie."),
8 (test_ok == 0, "Aucune preuve de commande de test réussie."),
9 (latest("architect") != "green", "Le dernier verdict de l'architecte n'est pas vert."),
10 (latest("reviewer") != "green", "Le dernier verdict du relecteur n'est pas vert."),
11]

Cette liste encode toute la doctrine.

  • L'ordre est imposé. Un brief qui postdate la première preuve de code est une violation, ce qui fait de "planifier avant de construire" un fait vérifiable plutôt qu'une habitude.
  • Les deux sièges de juges doivent être verts sur le même dernier cycle. Une approbation périmée ne peut pas porter un diff plus récent.
  • L'achèvement sans aucune ligne de test réussie est impossible, quelle que soit la confiance affichée dans la transcription.

Créez factory/factory.sh, qui câble les sièges que vous avez déjà construits dans l'ordre d'exécution et enregistre des lignes entre chaque étape :

bash
1G ticket "kanban board" "columns render, drag persists" # rows du planificateur
2G brief "$BRIEF" # AVANT tout code
3../loop/ralph.sh && G evidence code pass "loop completed" # BUILD 3 works
4npm test && G evidence test pass "npm test green"
5G verdict 1 architect green "layout matches brief" # siège Claude
6G verdict 1 reviewer green "tests pass, scope clean" # siège Sol, via codex
7python3 factory_gate.py gate factory.db # rows décident

Rien de nouveau n'est embauché.

Fable coupe les tickets et rédige le brief, en lecture seule. La boucle BUILD 3 implémente. Claude et Sol renvoient chacun un verdict depuis leur propre harnais. Le cycle se répète jusqu'à trois fois jusqu'à ce que les deux soient verts.

La factory est l'organigramme pour les employés que vous avez déjà.

Une exécution réelle, pas une maquette. Le second appel à la porte est l'argument entier de cette build :

text
1$ factory_gate.py record demo.db ticket "kanban-board" "columns render, drag persists"
2
3$ factory_gate.py gate demo.db
4GATE: REFUSÉE
5 - Tous les tickets ne sont pas terminés.
6 - Aucun brief d'architecture n'a été enregistré.
7 - Aucune preuve de code de l'implémenteur n'a été enregistrée.
8 - Aucune preuve de commande de build réussie.
9 - Aucune preuve de commande de test réussie.
10 - Aucun cycle de relecture n'a été enregistré.
11 exit: 1
12
13... les agents travaillent. chaque étape écrit une ligne ...
14
15$ factory_gate.py record demo.db brief "Stack: node+sqlite. /tasks CRUD."
16$ factory_gate.py record demo.db evidence code pass "src/board.js written"
17$ factory_gate.py record demo.db evidence build pass "npm run build exit 0"
18$ factory_gate.py record demo.db done "kanban-board"
19$ factory_gate.py record demo.db verdict 1 architect green "layout matches brief"
20$ factory_gate.py record demo.db verdict 1 reviewer green "scope clean"
21
22$ factory_gate.py gate demo.db
23GATE: REFUSÉE
24 - Aucune preuve de commande de test réussie.
25 exit: 1
26
27$ factory_gate.py record demo.db evidence test pass "npm test 33/33"
28
29$ factory_gate.py gate demo.db
30GATE: COMPLETE (1/1 tickets, cycle 1 green x2)
31 exit: 0

Les deux relecteurs ont dit vert. L'architecte a confirmé que la disposition correspondait au brief. Le relecteur a confirmé que le périmètre était propre.

Et la porte a quand même refusé, avec une ligne : aucune preuve de commande de test réussie. Personne n'avait exécuté les tests.

Un verdict est une opinion. Deux opinions ne sont toujours pas un fait. Une ligne de preuve de test réussie plus tard, la même porte renvoie COMPLETE et exit 0.

Les modèles défendent leur travail de manière convaincante, et une transcription capture l'argument plutôt que la vérité. Les lignes ne peuvent pas être contestées.

Quand la porte refuse, elle nomme exactement l'artefact manquant. Cela transforme "l'exécution a échoué" en "produisez une ligne de test réussie." Une tâche, pas un mystère.

Condition d'installation : plus d'une session d'écriture par jour, des cycles de relecture qui s'étendent sur plusieurs jours, ou un besoin de prouver a posteriori ce qui s'est passé. Pour un dépôt solo avec une boucle nocturne unique, BUILD 3 suffit et ceci est du superflu.

CHECK 8 : reproduisez la capture d'écran. Enregistrez tout sauf une ligne de test, et la porte doit refuser avec exactement une raison. Ajoutez la ligne et elle renvoie COMPLETE. Une porte qui passe sans elle est un lecteur de transcription.

BUILD 9 : L'Essaim (Fable planifie, la flotte exécute, Fable note)

Un pilote avec un conseiller couvre une tâche. Un objectif qui se divise en quatre parties indépendantes veut quatre travailleurs.

Mais une flotte ne garde sa direction que si un modèle planifie chaque objectif et note chaque résultat. C'est la seule raison d'être de cette build, et la raison pour laquelle les essaims échouent généralement sans elle.

L'échelon 3 rendu littéral. Fable écrit les objectifs, la flotte les exécute, Fable note chaque résultat par rapport à sa propre vérification, et le cycle suivant ne replanifie que les échecs.

Son abandon est la limite de cycles. Quand la limite est atteinte avec des échecs en suspens, c'est un problème de spécification qui revient à un humain, pas une raison d'exécuter un quatrième cycle.

Créez swarm/swarm.sh. Trois paramètres portent la doctrine :

bash
1FLEET=4 # les écritures ne se heurtent jamais : un espace de travail chacun
2WORKER_MODEL=claude-sonnet-5 # ou haiku / luna / kimi pour de l'exécution pure
3WORKER_EFFORT=low # NE JAMAIS hériter de l'effort du chef d'orchestre
4CONDUCTOR=claude-fable-5 # ou opus-4-8 si les règles de rétention mordent

Ces trois lignes sont explicites car la valeur par défaut ne l'est pas.

Une flotte qui hérite prend à la fois le modèle du chef d'orchestre et son effort. Un chef d'orchestre Fable à effort élevé qui engendre quatre travailleurs Fable à effort élevé pour faire un travail mécanique est la manière la plus chère possible de faire la chose la moins chère possible.

Définissez-les. Ne les laissez jamais par défaut.

Le fan-out inter-harnais est légal, et ce n'est pas l'exception à la première loi de ROUTING.md qu'il semble être.

  • Un chef d'orchestre Fable qui appelle codex exec exécute Sol dans Codex, nativement. C'est la loi respectée, pas contournée.
  • Ce qui brise la loi, c'est un sous-agent côté Claude portant une chaîne de modèle GPT, ou l'inverse.

Le harnais voyage avec le travailleur, pas avec le chef d'orchestre.

Le chef d'orchestre écrit des objectifs, jamais de code, et chaque objectif porte sa propre commande de vérification, donc "terminé" reste un fait :

json
1{"id":"strip-legacy-auth","spec":"supprimer le chemin d'auth v1 de routes/","check":"npm test -- tests/auth"}
2{"id":"migrate-sessions","spec":"déplacer le stockage de sessions vers le nouvel adaptateur","check":"npm test -- tests/session"}

Puis dispatchez, notez et replanifiez :

bash
1# dispatch : un espace de travail git par objectif, limité à FLEET en parallèle
2claude --model "$WORKER_MODEL" --effort "$WORKER_EFFORT" -p "Execute this spec
3 exactly. Do not expand scope. Run the tests. Commit only when green."
4
5# score : le chef d'orchestre note chaque objectif par rapport à SA PROPRE commande de vérification.
6# la confiance du travailleur n'est pas une preuve. le code de sortie en est une.
7bash -c "$chk" && echo "$id" >> passed.txt || misses=$((misses+1))
8
9# replan : le cycle suivant voit passed.txt et ne replanifie que ce qui a échoué

Siège par siège :

  • Sonnet 5 pour l'exécution de code
  • Haiku ou Luna pour le travail purement mécanique
  • Un travailleur open-weight comme Kimi quand le travail est répétitif et les poids gratuits
  • Sol quand le travail est lourd en terminal
  • Opus 4.8 au siège travailleur, uniquement quand un sous-agent a besoin de raisonner

Réservez Fable pour les deux tâches qu'aucun modèle bon marché ne peut faire : écrire les objectifs et les noter.

Une flotte est une stratégie de coût, jamais une stratégie d'intelligence.

Les exécutions multi-agents brûlent 3 à 10 fois plus de tokens pour un travail équivalent, et une étude de 2026 à budget égal a montré que les agents uniques les égalent en raisonnement lorsque les tokens sont maintenus constants.

Un essaim ne justifie sa place que lorsque les objectifs sont indépendants et principalement mécaniques. Les écritures restent mono-thread par espace de travail, les fusions se font en série, et un humain prend le dernier commit.

CHECK 9 : exécutez l'essaim sur un objectif qui se divise en trois. Un objectif cassé doit revenir ÉCHEC dans results.tsv et être replanifié au cycle 2, jamais déclaré terminé.

BUILD 10 : Échelon 4 (rien de ce qui a passé une fois n'est laissé sans surveillance)

Tout ce qui précède vérifie le travail pendant sa création. Rien ne remarque quand un travail fini cesse d'être vrai six semaines plus tard. Un objectif que vous vérifiez une fois est une hypothèse avec un horodatage.

L'échelon 4 a deux moitiés, et son abandon compte autant que sa sortie : si aucune proposition ne franchit la porte cette semaine, le système ne change pas, et c'est un succès.

Première moitié, objectifs permanents. Chaque chose terminée devient un invariant avec un prédicat, revérifié quotidiennement, pour toujours. Créez un fichier par chose terminée dans goals/ :

text
1predicate: npm test -- tests/auth 2>&1 | tail -1 | grep -q passing
2born: 2026-07-13
3status: satisfied
4last-pass: 2026-07-13
5on-violation: réveillez-moi. ne corrigez pas automatiquement.

Ensuite, system/verify_goals.py exécute le tout et exit 1 si un invariant est cassé, en nommant l'objectif, la date de sa dernière tenue, et la politique que vous avez définie :

python
1held = subprocess.run(["bash","-c",predicate], timeout=60).returncode == 0
2g["status"] = "satisfied" if held else "VIOLATED"
3# un timeout est une violation, pas un succès : un prédicat coûteux est un prédicat cassé

Les règles de prédicat sont strictes à dessein : une commande shell, exit 0 signifie que l'invariant tient, bon marché et en lecture seule.

Les adjectifs sont interdits. Si un shell ne peut pas le vérifier, un modèle non plus.

Les objectifs non-code fonctionnent de la même manière. test -s reports/$(date +%Y-%m)-review.md est un excellent objectif permanent pour un rapport mensuel.

Deuxième moitié, le compost. Une fois par semaine, lisez les déchets que le système a déjà produits : tâches BLOQUÉES, exécutions de porte échouées, portes de factory refusées, PRs annulées, objectifs violés.

Proposez ensuite au maximum trois changements. Une nouvelle loi pour la constitution. Une correction d'une compétence qui échoue toujours de la même manière. Ou un objectif permanent qui vous manquait.

Proposez seulement. Vous signez.

bash
1claude --model claude-fable-5 --effort high --allowedTools "Read,Grep,Glob" \
2 -p "Read this week's exhaust: BLOCKED lines in progress.log, GATE REFUSED
3 entries, VIOLATED goals, PRs closed unmerged. Extract AT MOST 3 proposals:
4 a new law (quote the incidents), a skill fix (same failure repeating), or a
5 standing goal we lacked. Propose only, do not edit anything. Clean week is a
6 valid answer, say so and stop."

Cet échelon se ferme uniquement lorsque les évaluations et les juges disent que le système s'est amélioré. Ce qui signifie que le système a besoin d'une mémoire de ses propres échecs pour s'améliorer.

L'exécution du compost est ce qui transforme un script en une institution.

Les objectifs permanents sont ce qui rend l'achèvement sûr. Le sentinelle détecte, le pipeline normal corrige, et rien ne pourrit en silence.

CHECK 10 : verify_goals.py démo nomme l'invariant cassé avec sa date de dernier passage et laisse l'invariant sain tranquille. Écrivez ensuite un objectif permanent réel pour la dernière chose que vous avez terminée.

BUILD 11 : Échelon 5 (votre siège, et pourquoi il n'est jamais vide)

L'échelon 5 porte votre nom pour une raison mécanique, pas sentimentale.

Une boucle peut atteindre sa condition d'arrêt et être encore fausse. Les tests passent, la porte devient verte, les deux relecteurs signent, et le dernier commit est toujours une erreur.

Chaque build en dessous de celle-ci existe pour réduire ce risque. Aucune ne l'élimine.

Vos devoirs permanents, tous bon marché :

  • Lisez la file d'attente avec un café : tâches BLOQUÉES, lignes GATE REFUSED, objectifs VIOLÉS, la part du niveau bon marché. Dix minutes.
  • Vérifiez le dernier commit avant qu'il ne soit fusionné. Pas tous les diffs, le dernier, celui dont le système était le plus confiant.
  • Signez ou rejetez les trois propositions de compost. C'est la seule façon dont les lois entrent dans la constitution.

Trois actions s'exécutent sur une cadence plutôt qu'à la demande, car elles coûtent de l'argent réel et paient en direction plutôt qu'en diffs :

Action une, la boucle de rétroaction du projet, mensuelle.

Pointez Fable sur ce que vous avez déjà livré, en lecture seule, et faites-lui écrire un plan d'amélioration détaillé. Confiez ensuite l'exécution de ce plan à Opus 4.8 ou Sol.

Le modèle coûteux fait la partie qui se cumule, le jugement sur ce qui doit changer, et jamais la partie qui ne le fait pas, la frappe.

bash
1claude --model claude-fable-5 --effort high --allowedTools "Read,Grep,Glob" \
2 -p "Review this project end to end. Write an improvement plan ranked by
3 leverage: what is fragile, what is over-built, what is missing, what should
4 be deleted. Do not write code. Output tasks with acceptance criteria." \
5 > plans/$(date +%F)-improvement.md

Jouez le deuxième, l'analyse comportementale, mensuelle.

Nourrissez-le avec votre propre historique de sessions et de projets sur les deux harnais, et demandez-lui de cartographier comment vous construisez et où vous bloquez.

C'est le seul rapport du système dont le sujet est vous. C'est généralement celui qui change le plus.

Jouez le troisième, l'audit du second cerveau, trimestriel. Pointez-le vers vos notes, vos documents et votre backlog, et demandez-lui ce que votre propre réflexion dit qu'il vaut la peine de construire ensuite et ce qui mérite d'être supprimé. Traitez le résultat comme une proposition, exactement comme du compost.

Les échelons ci-dessous optimisent l'exécution, et l'exécution est désormais la partie la moins coûteuse. La direction est l'intrant rare, et la direction est ce pour quoi il vaut la peine de payer un modèle de pointe. Achetez le jugement au gramme, l'exécution à la tonne, et gardez la dernière signature.

VÉRIFICATION 11 : exécutez le premier jeu sur votre propre dépôt. Si le plan ne nomme rien que vous saviez déjà fragile, vos fichiers de contexte sont trop minces, ce qui est un problème de CONSTRUCTION 1.

CONSTRUCTION 12 : Opérations

Les agents brûlent 10 à 100 fois plus de jetons qu'un appel de chat, et l'entrée domine à environ 100 pour 1.

Empilez les quatre leviers de la CONSTRUCTION 0 (division, mise en cache, traitement par lots, compaction) et les équipes signalent une réduction de 70 à 90 pour cent par rapport à leur base de référence non optimisée.

Pour être clair : 13 $ par développeur par jour actif est la moyenne d'entreprise de Claude Code, et 90 pour cent des utilisateurs restent sous 30 $.

Une ligne de discipline plutôt qu'un nouveau sous-système : une classe de tâche ne peut s'auto-fusionner qu'après 20 exécutions enregistrées avec un taux de réussite de 95 %, et une seule chute sous 90 % révoque bruyamment ce droit.

bash
1awk -F'\t' '$2=="fix-lint"{r++; if($3=="pass")p++}
2 END{printf "%d runs, %.0f%%\n", r, (r?p/r*100:0)}' progress.log

Dépense hebdomadaire, à partir des coûts par tick que ralph.sh enregistre déjà :

bash
1grep '^cost' progress.log | awk -F'\t' \
2 -v d="$(date -d '7 days ago' +%F)" \
3 '$2>=d{s+=$3} END{printf "week: $%.2f\n", s}'

Calculez le métabolisme avant de planifier une tâche cron. Le coût quotidien est le nombre de ticks multiplié par le coût moyen d'un tick.

Le siège qui gère le tick silencieux « rien à faire » décide de la facture. Des centimes sur le niveau bon marché, des dollars sur un modèle de pointe à effort élevé, pour la réponse identique « rien à faire ».

Fonctionner dans vos limites

Ces modèles brûlent les jetons rapidement, et la façon dont vous les faites fonctionner détermine la quantité de travail d'une journée qui aboutit avant que vous ne heurtiez un mur.

Tout d'abord, connaissez le mur.

  • Avec une clé API, le mur est la facture. progress.log la surveille déjà.
  • Avec un abonnement siège, le mur est une fenêtre de cinq heures et une fenêtre hebdomadaire évaluées ensemble. Aucune des deux n'apparaît dans le journal ci-dessus.

Surveillez le compteur sur lequel vous êtes réellement : le panneau d'utilisation dans les paramètres de Codex, /usage du côté de Claude, ou un moniteur comme ccusage ou codexbar placé dans un coin de l'écran.

Une limite que vous ne lisez jamais est une limite que vous découvrez en la heurtant, avec quatre heures restantes et rien à exécuter.

Six leviers, du moins cher au plus cher. La plupart agissent aux échelons 0 à 2, là où les jetons brûlent :

  1. Réduisez CLAUDE.md et AGENTS.md à l'essentiel. Chaque message les lit, ainsi que chaque compétence et outil que vous avez activé. Désactivez ce que vous n'utilisez pas ; un serveur MCP inutilisé est un impôt sur chaque message.
  2. Réduisez l'effort lorsque vous n'avez pas besoin du haut de l'échelle. Par défaut, moyen ou élevé. Réservez « max » pour les problèmes qui en ont besoin. Et confirmez que le mode rapide est désactivé pendant que vous y êtes, car il multiplie tout ce sur quoi vous tombez.
  3. Donnez au modèle des points d'arrêt clairs. Ces modèles fonctionnent longtemps par conception. Faites-leur terminer le plan et vérifier avant d'exécuter, ce qui est le vrai travail du mode planification.
  4. Gardez les sous-agents à un effort inférieur. Ils héritent du modèle parent et de son cadran, et un essaim en mode « max » vide une fenêtre en un seul message. La solution bon marché est une loi dans les deux constitutions : ne pas générer sauf sur demande.
  5. Gardez le modèle coûteux loin des tâches en vrac. Que Fable se trouve au-dessus comme chef d'orchestre à faible consommation de jetons, ou en consultation comme conseiller, il gagne son prix aux points de décision, jamais en tapant la millième ligne.
  6. Lisez ce qu'un message coûte, puis ajustez les cinq ci-dessus en fonction de ce nombre. C'est le seul levier qui vous indique lequel des cinq autres est votre problème.

Ensemble, ces leviers déterminent combien de temps vous pouvez faire fonctionner les meilleurs modèles avant que la limite ne vous arrête.

Cron, lorsque la semaine 2 commence :

bash
1# task loop: the daily tick, both caps set
20 7 * * 1-5 cd /path/to/repo/loop && BUDGET_USD=5 ./ralph.sh >> ../progress.log 2>&1
3
4# system loop: nothing that passed once goes unwatched
530 7 * * * cd /path/to/repo && python3 system/verify_goals.py goals/ >> progress.log 2>&1
6
7# system loop: failures become laws, once a week, proposals only
80 9 * * 1 cd /path/to/repo && codex --profile deep exec \
9 "$(cat ~/.codex/prompts/compost.md)" >> proposals/$(date +\%F).md 2>&1

Le manuel d'opérations. Chaque alarme, et que faire :

Avid - inline image

Le calendrier des 30 jours. Ne sautez pas les graduations ; chacune débloque la suivante.

Avid - inline image

Le Panneau de Commandement

Chaque boucle ici est accessible par une touche. Les commandes slash vivent dans ~/.codex/prompts/ du côté Codex, où le nom du fichier devient la commande, et dans .claude/skills/ du côté Claude. Les extraits CLI sont les versions sans tête que cron et CI exécutent.

Commandes slash Codex

Avid - inline image

/plan-stop et /effort se rentabilisent le plus rapidement. Tous deux dépensent quelques centaines de jetons pour vous empêcher d'en dépenser quelques centaines de milliers.

Ces modèles fonctionnent longtemps, donc le point de contrôle que vous voulez vient avant la dépense. /plan-stop renvoie le plan, les commandes « terminé quand », le rayon d'impact, le coût et la seule question qu'il poserait à un humain. Puis il s'arrête.

Placez les deux fichiers dans ~/.codex/prompts/, où le nom du fichier devient la commande.

effort.md devient /effort, le cadran d'acheminement rendu explicite :

markdown
1# /effort - choisir le niveau d'effort avant de dépenser
2
3Ne répondez pas encore à la tâche. Acheminez-la d'abord.
4
5Notez-la. Un point chacun :
6 - contient un pourquoi, un débogage, une course, un blocage, une refactorisation, un problème de sécurité
7 ou une optimisation
8 - touche plus d'un sous-système
9 - une tentative précédente a déjà échoué
10 - le changement est irréversible ou atterrit devant les utilisateurs
11
12Ensuite, mappez :
13
14| Score | Effort | Siège |
15|---|---|---|
16| 0-1 | faible | codex -e low, ou profile fast (Luna). Ne mettez jamais un siège de pointe dessus. |
17| 2 | moyen | Terra à moyen est le siège. |
18| 3+ | élevé | la valeur par défaut pour un vrai travail, et là où se trouve le point idéal. |
19
20Seulement si élevé a DÉJÀ été essayé et a échoué : recommandez max, et dites clairement
21ce que la réflexion supplémentaire est censée apporter. Le taux de base contre lequel vous argumentez
22est environ le double du coût pour un gain qui ne se rembourse généralement pas.
23
24Deux rappels avant de recommander une mise à niveau :
25 1. Un meilleur modèle à effort plus faible bat généralement un modèle plus faible à max. Changez
26 le siège avant le cadran.
27 2. Si cette tâche génère des sous-agents, indiquez leur effort explicitement (faible sauf
28 preuve du contraire). Les sous-agents héritent du parent, et une flotte à max vide une
29 fenêtre de contexte en un seul message.
30
31Sortie exactement :
32 EFFORT: faible | moyen | élevé | max
33 SIÈGE: <modèle>
34 POURQUOI: <une ligne, nommant les points qui ont marqué>
35 SOUS-AGENTS: <effort à fixer, ou aucun>
36Puis arrêtez-vous. L'humain exécute la tâche au niveau que vous avez nommé.

Une réponse réelle ressemble à ceci, et elle coûte quelques centaines de jetons pour en éviter quelques centaines de milliers :

text
1EFFORT: élevé
2SIÈGE: gpt-5.6-sol
3POURQUOI: contient "pourquoi", touche auth et sessions, tentative précédente échouée
4SOUS-AGENTS: faible

plan-stop.md devient /plan-stop, le point de contrôle avant la dépense :

markdown
1# /plan-stop - planifier le travail, puis s'arrêter
2
3Ces modèles fonctionnent longtemps. C'est une fonctionnalité quand le plan est bon et une façon coûteuse
4d'avoir tort quand il ne l'est pas. Cette commande achète le point de contrôle avant la dépense.
5
6Planifiez la tâche. Ne modifiez pas un seul fichier. N'exécutez pas une construction. Ne commencez pas.
7
8Produisez :
9 OBJECTIF : <une ligne>
10 HYPOTHÈSES : <ce que vous tenez pour acquis ; si elles sont fausses, le plan l'est aussi>
11 ÉTAPES : <numérotées, chacune représentant un commit de travail>
12 TERMINÉ QUAND : <la commande shell exacte qui prouve que chaque étape a atterri>
13 RAYON D'IMPACT : <fichiers et systèmes touchés ; nommez explicitement auth, paiements, migrations, configuration de production>
14 COÛT : <jetons ou dollars approximatifs, et quel siège exécute chaque étape>
15 INCONNUES : <ce que vous demanderiez à un humain si vous pouviez poser exactement une question>
16
17Puis arrêtez-vous et attendez.
18
19Règles pendant la planification :
20 - L'ambiguïté va dans INCONNUES. Ne la résolvez pas en devinant et en continuant. Une
21 devinette qui survit jusqu'à l'exécution coûte cent fois plus qu'une question.
22 - Si le plan a besoin d'un identifiant, d'un point de terminaison ou d'une convention qui n'est pas
23 écrite dans ce dépôt, arrêtez-vous et dites-le. N'en inventez jamais un.
24 - Si un TERMINÉ QUAND n'est pas une commande shell, réécrivez cette étape jusqu'à ce qu'elle le soit. Si un
25 shell ne peut pas le vérifier, un réviseur non plus.
26 - Si le rayon d'impact touche la liste d'interdiction dans AGENTS.md, dites-le en haut et
27 recommandez de le mettre en file d'attente pour un humain.
28
29Vous êtes payé pour le plan ici, pas pour la différence. Un plan court et honnête avec de vraies
30inconnues bat un plan confiant qui a supposé silencieusement la mauvaise chose.

fable-advice.md et review-hostile.md deviennent /fable-advice et /review-hostile. Les deux sont les miroirs côté Codex des fichiers que vous avez déjà écrits : le briefing de conseiller de la CONSTRUCTION 5, et le contrat de relecteur hostile de la CONSTRUCTION 6. Mêmes règles, mêmes plafonds, pointés dans l'autre sens à travers la ligne du fournisseur.

compost.md devient /compost, le constructeur institutionnel hebdomadaire de l'échelon 4 :

markdown
1# /compost - transformer les échecs de cette semaine en lois pour la semaine prochaine
2
3Lisez les déchets de cette semaine, en totalité, et rien d'autre :
4 - les lignes BLOQUÉES dans progress.log (tâches qui ont battu trois consultations de conseiller)
5 - les entrées PORTE : REFUSÉ (une exécution qui n'a pas pu prouver qu'elle était terminée)
6 - les objectifs permanents VIOLÉS (quelque chose de fini a cessé d'être vrai)
7 - les sorties de disjoncteur et de budget (codes 2 et 3)
8 - les PR ouvertes par la boucle et fermées non fusionnées (l'humain a discrètement été en désaccord)
9 - toute classe de tâche dont le taux de réussite est descendu en dessous de 90 pour cent
10
11Extrayez AU PLUS TROIS propositions. Trois est un plafond strict, pas un objectif. Une semaine propre est
12un résultat valide, et le dire est plus utile que fabriquer du travail.
13
14Chaque proposition est exactement l'une des suivantes :
15 1. Une NOUVELLE LOI pour CLAUDE.md ou AGENTS.md. Citez les incidents qu'elle aurait
16 empêchés. Une loi avec un seul incident derrière elle est une coïncidence ; attendez le
17 second.
18 2. UNE CORRECTION DE COMPÉTENCE, lorsque le même échec se répète au même endroit. Nommez la compétence,
19 le motif et la plus petite modification qui le brise.
20 3. UN OBJECTIF PERMANENT qui vous manquait, quand quelque chose a pourri silencieusement. Écrivez
21 le prédicat comme une commande shell, ou ne le proposez pas.
22
23Sortie :
24 SEMAINE : <dates>
25 DÉCHETS : <compteurs : bloqués, refusés, violés, annulés>
26 PROPOSITION n : <loi | correction de compétence | objectif permanent>
27 PREUVE : <les incidents, cités>
28 CHANGEMENT : <le texte exact ou le prédicat à ajouter>
29 COÛT DE NE PAS LE FAIRE : <une ligne>
30 VERDICT : <ce que vous feriez en premier si vous ne pouviez en faire qu'un>
31
32Règles strictes :
33 - Proposez UNIQUEMENT. Ne modifiez pas CLAUDE.md, AGENTS.md, une compétence ou un fichier d'objectif.
34 L'humain signe, ou cela n'arrive pas.
35 - Ne proposez pas une loi qui assouplit une porte, augmente un budget ou assouplit une interdiction.
36 Ce sont le système qui demande à pouvoir échouer plus confortablement.
37 - Déchets vides : dites « semaine propre » et arrêtez. Ne cherchez pas du travail pour justifier
38 l'exécution.

Extraits CLI

Gardez-les dans un fichier brouillon. Ce sont l'ensemble du système accessible depuis un terminal :

bash
1# the daily tick, capped in both dimensions
2BUDGET_USD=5 MAX_ITERS=20 ./loop/ralph.sh
3
4# plan first, spend later (the single highest-leverage habit here)
5codex -e high exec "$(cat ~/.codex/prompts/plan-stop.md)
6
7TASK: migrate the session store off the legacy adapter"
8
9# cross-vendor review of the last commit, in Sol's native harness
10codex --profile deep exec "$(cat ~/.codex/prompts/review-hostile.md)"
11
12# the mirrored lane: Codex stuck, Claude advises
13claude --model claude-fable-5 --effort high -p "$(cat ~/.codex/prompts/fable-advice.md)"
14
15# the goal loop: Fable plans, the fleet runs, Fable scores
16CYCLES=3 FLEET=4 WORKER_EFFORT=low ./swarm/swarm.sh "split the auth migration"
17
18# the system loop: nothing that passed once goes unwatched
19python3 system/verify_goals.py goals/ # exit 1 names what rotted
20python3 gate/eval_gate.py eval/cases.jsonl # exit 1 blocks the routing change
21
22# rung 3, the factory: rows decide, not transcripts
23./factory/factory.sh "build the kanban and notes app per PRD.md"
24python3 factory/factory_gate.py gate factory.db
25
26# the weekly institution-building run
27codex --profile deep exec "$(cat ~/.codex/prompts/compost.md)"
28
29# the one number that says whether any of this worked
30grep '^route' progress.log | awk -F'\t' \
31 '{n++; if($3!="frontier") c++} END{printf "cheap share: %.0f%%\n", c/n*100}'

La politique complète se trouve dans ROUTING.md de la CONSTRUCTION 4, que les deux harnais lisent.

Les Règles (imprimez ceci)

  1. Des lois, pas des astuces : un nombre, une interdiction ou une commande qui la vérifie.
  2. Le modèle est loué. La boucle est à vous. Vous vivez à l'échelon 5.
  3. Une boucle sans abandon est une facture. Deux plafonds sur chacune : itérations et dollars.
  4. Les preuves montent, le contrôle descend. Aucun échelon ne se ferme sur un rapport venant d'en dessous.
  5. Une boucle peut s'arrêter et être encore fausse. Vérifiez le dernier commit avant qu'il ne fusionne.
  6. Acheminez aux frontières. Effort avant modèle. Le cache vote contre le changement.
  7. Par défaut, élevé. Max est la profondeur, ultra est la largeur, le mode rapide est un impôt de 2,5x, et les sous-agents héritent du siège et du cadran du parent.
  8. Le routeur est coupable jusqu'à ce qu'il batte le meilleur modèle unique sur vos évaluations.
  9. Les économies sont la répartition du trafic. Surveillez la part bon marché, pas le tarif de base.
  10. L'exécution est en vrac, les conseils sont en grammes. Limitez les consultations à trois.
  11. Rien n'évalue son propre travail. Contexte frais, autre lignée, harnais natif.
  12. Un fil est une trace. Une ligne est une preuve. La porte lit les lignes.
  13. Ne modifiez jamais un test pour le réussir. Ne fusionnez jamais au-delà d'une porte BLOQUÉE.
  14. Un objectif que vous vérifiez une fois est une hypothèse avec un horodatage.
  15. Une graduation à la fois. Chaque mois, supprimez quelque chose.

Conclusion

Dans trente jours, si vous avez effectué les vérifications :

  • Une boucle livre du travail banal sans surveillance, derrière une porte déterministe
  • Un pilote bon marché contacte un expert de pointe uniquement lorsqu'il bloque
  • Chaque différence significative est jugée par un modèle qui ne l'a pas écrite
  • Un seul chiffre dans progress.log vous indique si l'économie se cumule

Les modèles n'ont jamais été la partie difficile. Un système qui reste honnête quand vous arrêtez de regarder est la partie difficile, et c'est pourquoi l'échelon 5 porte encore votre nom.

Commencez ce soir avec les vingt minutes qui le prouvent. Le verify.sh de la CONSTRUCTION 2. Un tick exécuté à la main de la CONSTRUCTION 3. Une relecture de l'autre lignée sur votre dernier commit.

La première fois qu'un relecteur qui ne partage aucun contexte avec l'écrivain trouve un vrai bug dans un travail dont vous étiez sûr qu'il était terminé, vous n'aurez pas besoin d'être convaincu pour le reste.

Construisez la porte ce soir. Répondez avec ce qu'elle a attrapé lors de la première exécution.

Avertissement

Écrit à partir des notes de recherche de l'auteur et de sources vérifiées, avec l'aide de Claude pour la rédaction et la vérification des faits. Tous les prix et comportements des modèles ont été vérifiés par rapport aux pages de prix et de documentation officielles la semaine de la publication ; ils changent, alors vérifiez avant d'établir un budget.

Cet article a été écrit à partir des notes de l'auteur comme mentionné dans le paragraphe précédent et édité avec Claude Opus 4.7.

Si vous souhaitez ajouter d'autres corrections, veuillez les ajouter dans les commentaires.

Remixer dans YouMind

Turn one viral article into a full content workflow

Collect the source, decode the pattern, create assets, draft the story, and distribute from one AI workspace.

Explore YouMind
Pour les créateurs

Transformez votre Markdown en un article 𝕏 impeccable

Quand vous publiez vos propres textes longs, la mise en forme 𝕏 des images, tableaux et blocs de code est pénible. YouMind transforme un brouillon Markdown complet en un article 𝕏 impeccable, prêt à publier.

Essayer Markdown vers 𝕏

D'autres patterns à décoder

Articles viraux récents

Explorer plus d'articles viraux