assemble
Quatre modèles, une réponse, plusieurs tours. Chaque tour lit la meilleure réponse actuelle, la critique depuis un rôle donné, et écrit une version améliorée. La progression est stockée dans des fichiers, pas dans la conversation, donc chaque tour démarre avec un contexte frais (la technique Ralph Wiggum).
Commandes
| Commande | Action |
|---|---|
assemble <tâche> | Démarrer une session avec le calendrier par défaut (36 tours). |
assemble --quick <tâche> | Un seul bloc de 2 passes x 4 modèles (8 tours). |
assemble resume [<slug>] | Continuer la session inachevée la plus récente (ou nommée). |
assemble cancel [<slug>] | Mettre status: cancelled dans le fichier d'état et arrêter. |
assemble status | Afficher l'itération, le bloc, les éléments MUST ouverts et les modèles utilisés. |
Avant de commencer
- Charger
.assemble/config.jsons'il existe, sinonassets/config.example.json. - Choisir l'adaptateur de modèle (voir ci-dessous) et indiquer à l'utilisateur quels quatre modèles seront exécutés, et où le texte de la tâche sera envoyé. Si un modèle est en dehors de
allowedModels, ou silocalOnlyest vrai et qu'un modèle est distant, le retirer et le signaler. - Reformuler la tâche et les critères d'acceptation en un court paragraphe. Si la tâche n'est pas claire, demander à l'utilisateur avant de dépenser des tours.
- Créer
.assemble/<slug>/avectask.md,answer.md(vide), etstate.mdcomme décrit dansreferences/state-format.md. S'assurer que.assemble/est dans.gitignore.
Le calendrier
Un tour est un passage de modèle. Une passe est le passage des quatre modèles chacun à leur tour, dans l'ordre.
| Bloc | Passes | Tours | Total cumulé |
|---|---|---|---|
| 1 | 4 | 16 | 16 |
| 2 | 3 | 12 | 28 |
| 3 | 2 | 8 | 36 |
Après le tour 36, afficher le rapport et demander à l'utilisateur s'il souhaite exécuter un autre bloc. Ne jamais dépasser 36 tours sans demander.
Les rôles tournent à chaque passe pour que chaque modèle joue chaque rôle : dans la passe p (base 0), le modèle m joue roles[(m + p) % 4] depuis references/roles.md.
Chaque tour
Construire l'invite du tour uniquement à partir des fichiers, en utilisant references/handoff-format.md :
task.md- la
answer.mdactuelle - la critique du tour précédent (depuis le dernier
round-NN.md) - la carte de rôle pour ce tour
N'inclure ni les tours précédents, ni le modèle qui a écrit la réponse actuelle. Ensuite :
- Envoyer l'invite au modèle de ce tour en utilisant l'adaptateur choisi.
- Analyser la réponse en une critique (chaque problème étiqueté
MUSTouNICE), une réponse révisée et un verdict. - Si la tâche est du code et que des
checkssont configurés, appliquer la réponse révisée dans une copie temporaire, exécuter les vérifications, et ajouter les échecs à la critique comme élémentsMUST. - Écrire
round-NN.md(rôle, identifiant du modèle, critique, résultats des vérifications, verdict, taille du diff de lignes) et écraseranswer.mdavec la réponse révisée. - Mettre à jour
state.md: itération, bloc, passe, nombre deMUSTouverts et la séquence sans changement. - Donner à l'utilisateur une note de progression d'une ligne :
Tour 7/36 · sceptique · 2 MUST, 1 NICE · diff 14 lignes.
Si un modèle génère une erreur ou expire, le journaliser dans round-NN.md, sauter le tour et continuer. Si deux modèles échouent consécutivement, faire une pause et en informer l'utilisateur.
Arrêt
Un tour est considéré comme sans changement lorsqu'il ne soulève aucun élément MUST et modifie moins de noChangeLines lignes de answer.md.
Arrêter prématurément lorsque :
- quatre tours consécutifs (une passe complète) sont sans changement, ou
- un tour se termine par
<promise>CONVERGED</promise>et le tour suivant confirme sans aucun élémentMUST.
Si le nombre de MUST ouverts n'a pas diminué pendant un bloc entier, arrêter et écrire une courte note de « blocage » : ce qui bloque, ce qui a été essayé, et ce que l'utilisateur pourrait décider pour débloquer.
Rapport
Lorsque la session se termine, écrire .assemble/<slug>/report.md et l'afficher :
- la réponse finale
- les tours effectués et la raison de l'arrêt
- les principaux changements dans chaque bloc
- les éléments
NICEouverts - les modèles utilisés, avec les échecs
- une estimation approximative des tokens et du coût (somme des tailles d'invite et de réponse, multipliée par les prix du config s'ils sont fournis)
Adaptateurs de modèles
Utiliser le premier disponible, et indiquer à l'utilisateur lequel a été choisi.
- Sous-agents internes. Si l'hôte peut lancer des sous-agents et choisir leur modèle, en utiliser un par tour. Cursor peut mélanger les fournisseurs. Claude Code et Kiro n'offrent ici que des modèles Claude, donc les quatre seront des variantes de Claude.
- CLIs de fournisseurs. Exécuter
scripts/run-model.sh <id-modèle> <fichier-invite>une fois par tour. C'est l'option multi-fournisseur réelle. Vérifier que chaque CLI existe (command -v) avant le début de la session. - Modèle unique. Exécuter chaque tour soi-même, en jouant le rôle de ce tour. Lire uniquement les fichiers du tour, et traiter chaque tour comme un nouveau départ.
Des aides optionnelles spécifiques à l'outil, comme un hook d'arrêt pour Claude Code en mode non supervisé, se trouvent dans le dossier adapters/ du dépôt.