concepts

Boucles de coordination — révision et idéation entre plusieurs agents

Motifs de délégation multi-tours : comment brainclaw pilote les cycles de révision et de correction entre deux agents et exécute des boucles d'idéation où un agent critique un autre. Construit sur bclaw_coordinate + bclaw_loop.

La plupart des coordinations sont ponctuelles : on assigne un périmètre, l’agent travaille, l’agent livre. Mais deux motifs nécessitent une délégation multi-tours — où le travail rebondit de manière répétée jusqu’à convergence :

  • Boucle de révision — l’auteur écrit, le réviseur critique, l’auteur corrige, le réviseur revérifie. Chaque tour peut appliquer des modifications (mode symétrique) ou seul l’auteur peut (mode asymétrique).
  • Boucle d’idéation — le champion propose, le critique remet en question, le champion répond. Itère jusqu’à ce qu’une condition de sortie soit atteinte (consensus, max-itérations, limite de temps).

Les deux fonctionnent sur la même machinerie : bclaw_coordinate(intent=…) ouvre la boucle et déclenche le premier tour ; bclaw_loop(intent=…) pilote les tours suivants depuis le slot assigné.

Boucle de révision

La structure — claude-code est l’auteur, codex est le réviseur :

# L'auteur ouvre la révision (crée un candidat + ouvre une boucle)
bclaw_coordinate intent=review \
  open_loop=true \
  review_mode=symmetric \
  targetAgents=[codex] \
  task="Review the JWT refactor in src/auth/" \
  scope="src/auth/"
# → candidat cnd_abc, boucle lop_xyz, tour assigné à codex (slot=reviewer)

La session de Codex voit une review_request dans sa boîte de réception. Après avoir lu le diff :

# Tour du réviseur — soumettre les conclusions
bclaw_loop intent=complete_turn \
  loop_id=lop_xyz \
  artifacts=[{kind: "review_findings", body: "..."}]
# → tour fermé, prochain tour assigné à claude-code (slot=author) pour les corrections

Claude-code applique les corrections sur la même branche, puis pilote le tour suivant :

bclaw_loop intent=turn loop_id=lop_xyz
# → tour assigné : lire les conclusions, appliquer les corrections
bclaw_loop intent=complete_turn loop_id=lop_xyz \
  artifacts=[{kind: "fix_summary", body: "..."}]
# → la boucle converge ou est renvoyée au réviseur

Lorsque le réviseur dit LGTM :

bclaw_loop intent=close loop_id=lop_xyz verdict=approved
# → candidat accepté, boucle fermée, changement prêt à être fusionné

review_mode — symétrique vs asymétrique

ModeTour du réviseurTour de l’auteurCas d’utilisation
asymmetric (default)lit le diff, écrit les conclusionsapplique toutes les correctionsrévision de PR classique
symmetriclit le diff, écrit les conclusions ET applique lui-même des corrections symétriquesgère uniquement les corrections non symétriquesrévisions de spécifications / docs où le réviseur peut éditer à faible coût

Le mode symétrique réduit de moitié les allers-retours sur les documents et les changements de configuration — le réviseur corrige les fautes de frappe et les petites inexactitudes en ligne au lieu de les renvoyer.

Boucle d’idéation

bclaw_coordinate intent=ideate \
  targetAgents=[gemini, codex] \
  task="Should we ship the federation phase 1 in v1.6 or wait for v2?" \
  scope="federation"
# → boucle d'idéation avec graine de proposition, déclenche un tour de critique par critiqueur

Chaque critiqueur reçoit un bref filtré par contexte assemblé à partir de la mémoire du projet. Le filtre des critiques est délibérément asymétrique : ils lisent uniquement les catégories adversariales (pièges, mémos de feedback, notes d’exécution, historique de critiques antérieures, décisions connexes) — et non les documents de conception de soutien rédigés par le champion. Cela produit une pression adversariale utile même à partir d’un seul modèle.

Les critiques retournent des artefacts critique. L’avancement de phase de critiquesynthesis est conditionnel : ≥3 artefacts de critique sont requis avant que la boucle ne puisse progresser (événement phase_advance_blocked lorsque la condition échoue). Bloc d’itération :

cycle: 1
max_iterations: 3
exit_when:
  - consensus     # ≥(N-1)/N critiques alignés
  - timeout       # 24h depuis le dernier tour
  - max_iter      # cycle == max_iterations

Quel intent utiliser

IntentUtilisation
bclaw_coordinate intent=assignassignation de travail ponctuelle, pas de boucle
bclaw_coordinate intent=consultquestion asynchrone, pas d’affirmation
bclaw_coordinate intent=review (open_loop=true)multi-tours de révision et de correction
bclaw_coordinate intent=ideatemulti-tours de critique de proposition
bclaw_loop intent=turn / complete_turn / advance / closepiloter le tour de VOTRE slot dans une boucle ouverte
bclaw_loop intent=openanti-pattern — ouvre une boucle sans déclencher, rien ne s’exécute

Anti-pattern : ne jamais appeler bclaw_loop intent=open directement. Cela crée la structure de la boucle sans déclenchement, de sorte que le réviseur/critique ne reçoit jamais de tour. Ouvrez toujours via bclaw_coordinate(intent=review|ideate, open_loop=true) afin que le déclenchement ait lieu simultanément.

Voir parallel feature work pour les boucles de révision en production, et la section agent autonomy contract qui lie les transitions définies par protocole comme DOIVENT être exécutées (afin que le réviseur ne s’arrête pas pour demander à l’humain “dois-je envoyer cette réponse ?”).