Orchestrer avec une Skill
Cette skill est destinée à un orchestrateur (généralement un agent préconfiguré Admin) qui coordonne d'autres agents et humains sur tout le cycle de vie AI-DLC au lieu de faire tout le travail lui-même. L'orchestrateur décompose le travail, confie chaque partie à un propriétaire choisi, lance des relecteurs indépendants comme points de contrôle qualité, et contrôle les portes d'approbation/vérification gérées par les humains — mais ne livre jamais seul.
Elle complète les autres skills plutôt que de les remplacer :
$yolo— un seul agent pilote tout le pipeline en solo. L'orchestration est l'opposé : plusieurs agents, chacun propriétaire d'une part, coordonnés par toi.$idea,$proposal,$develop,$review,$quick-dev— une étape unique que tu exécutes toi-même. L'orchestration est la couche au-dessus : tu décides qui exécute chaque étape.
Quand utiliser cette skill
Utilise-la quand plus d'un agent (ou agent + humain) touchera au travail et que quelqu'un doit les maintenir cohérents :
- Tu possèdes un thème / épic / idée conteneur qui se décompose en plusieurs idées enfants indépendantes, et tu veux confier chaque enfant à un travailleur spécifique (cas de motivation : un propriétaire de thème donne un enfant à Codex, un autre à un agent Claude dev, un autre à un humain).
- Une proposition approuvée a un DAG de tâches et tu veux plusieurs agents développeurs travaillant les tâches débloquées en vagues parallèles.
- Tu as besoin d'une relecture adversariale indépendante de la proposition / tâche / feature de quelqu'un d'autre avant qu'elle avance.
- Tu es le propriétaire responsable et dois maintenir un assigné responsable par idée tandis que le travail s'étend.
Prérequis : déléguer des idées nécessite idea:admin ; déléguer des tâches nécessite proposal:write. Exécute d'abord chorus_checkin() pour confirmer ton ensemble de permissions.
Primitives de délégation
Assigner une idée — chorus_pm_assign_idea (idea:admin)
Confie une idée entière à un agent ou utilisateur choisi. Paramètres :
| Param | Signification |
|---|---|
ideaUuid |
L'idée à déléguer |
assigneeType |
"agent" ou "user" |
assigneeUuid |
L'UUID de l'agent/utilisateur choisi (résous les noms avec chorus_search_mentionables) |
instanceUuid |
(optionnel, cibles agents uniquement) épingle le travail à une AgentInstance durable — le lieu (agent, host, cwd) — pour que les réveils atterrissent où le code vit |
Comportement que tu dois comprendre :
- L'assigné est réveillé et avance depuis l'étape actuelle de l'idée — il ne re-réclame pas. Si l'idée est
openelle passe àelaborating; tout autre statut est préservé. L'assigné reprend là où l'idée est déjà (élaboration, ready-for-proposal, etc.). - Les cibles agent doivent détenir
idea:write(via une préconfigurations commepm_agent/admin_agent, ou une permission explicite) ou l'appel est rejeté. Les cibles utilisateur doivent être dans ton entreprise.instanceUuidest rejeté pour les cibles utilisateur. - Prise de contrôle silencieuse. Réassigner une idée déjà possédée transfère simplement la propriété au nouvel assigné — il y a un propriétaire à la fois, pas de prompt de confirmation. Utilise cela intentionnellement, pas par accident.
Assigner une tâche — chorus_pm_assign_task (proposal:write)
Confie une tâche unique à un agent développeur. Paramètres : taskUuid, agentUuid (doit détenir task:write), instanceUuid optionnel. La tâche doit être open ou assigned. L'assigné est réveillé pour l'exécuter. Utilise cela pour distribuer les tâches d'une proposition approuvée.
Dériver des idées enfants et les distribuer
Le cas de décomposition de thème, de bout en bout :
- Lis l'idée conteneur/thème et son contexte (
chorus_get_idea,chorus_get_documents,chorus_get_comments). - Pour chaque slice indépendante, crée une idée enfant avec
chorus_pm_create_idea(relie-la au parent dans le corps / viareferences[]). - Assigne chaque enfant à un propriétaire distinct avec
chorus_pm_assign_idea— par ex. un enfant à Codex, un à un agent Claude dev, un à un humain. Chaque enfant a maintenant son propre propriétaire unique et avance indépendamment. - @mentionne chaque assigné et le propriétaire du thème pour que la délégation soit visible.
Relecture indépendante comme porte adversariale
Chorus livre trois skills de relecteur en lecture seule. En tant qu'orchestrateur tu les exécutes aux trois portes et tu agis sur le verdict — c'est ton principal levier qualité quand tu n'écris pas le code toi-même.
| Relecteur | Exécute après | Relit |
|---|---|---|
chorus-proposal-reviewer |
une proposition est soumise | qualité du brouillon de proposition (VERDICT sur la proposition) |
chorus-task-reviewer |
une tâche est soumise pour vérification | une tâche vs ses critères d'acceptation (VERDICT sur la tâche) |
chorus-code-reviewer |
la dernière tâche de l'idée est vérifiée | le changement de code agrégé de l'idée — la porte finale de livraison (VERDICT sur l'idée) |
Produis un sous-agent relecteur avec spawn_agent(agent_type="default", items=[{type:"skill", path:"chorus:chorus-task-reviewer"}, {type:"text", text:"Review <entity> <uuid>."}]) (Codex livre seulement les rôles default/explorer/worker). Chacun poste exactement un commentaire VERDICT: PASS / PASS WITH NOTES / FAIL. Les verdicts sont consultatifs — ils n'approuvent pas automatiquement, ne vérifient pas automatiquement, ni ne bloquent fermement ; tu lis les BLOCKERs et tu décides. Un FAIL signifie renvoyer les BLOCKERs pour une correction avant d'avancer (pour un FAIL de code-review, ajoute des tâches de correction à la proposition approuvée via $quick-dev et relance une fois qu'elles sont done). Voir $review pour le motif complet.
Choisir un mode de collaboration
Choisis le mode le plus léger qui convient à la forme du travail :
| Mode | Utilise quand | Comment tu l'exécutes |
|---|---|---|
| Propriétaire unique pilote une idée | Le travail est une feature cohérente unique | Assigne l'idée une fois (chorus_pm_assign_idea) ; ce propriétaire exécute idée → proposition → tâches ; tu contrôles les portes |
| Distribution d'enfants à N agents | Un thème se décompose en slices indépendantes | Dérive les idées enfants, assigne chacune à un propriétaire distinct ; les enfants s'exécutent en parallèle, chacun propriétaire unique |
| Vagues de tâches parallèles | Une proposition approuvée avec un DAG de tâches | Assigne les tâches actuellement débloquées (chorus_pm_assign_task) à plusieurs agents dev ; en tant que tâches atteignent done, assigne la vague suivante |
| Relecture seulement | Le travail est déjà produit ailleurs | Produis le relecteur pertinent, lis le VERDICT, et contrôle — pas de nouvelle délégation |
Conseil : commence étroit. Si un propriétaire unique peut tenir la feature entière en tête, préfère propriétaire unique — la surcharge de coordination n'est pas gratuite. Accède à distribution seulement quand les slices sont réellement indépendantes (scope séparé, élaboration séparable). Utilise vagues de tâches parallèles seulement après qu'une proposition est approuvée et que son DAG est réel ; respecte les dépendances — to_verify ne débloque pas les suivantes, seulement done le fait.
Propriétaire unique & discipline de concurrence
- Un assigné responsable par idée à la fois. Cela reflète la sémantique de propriétaire unique du daemon : l'idée est la racine de pin autoritaire, et les propositions/tâches/réveils du propriétaire en héritent l'identité. Ne laisse pas une idée ambiguement « possédée par l'équipe ».
- Ne crée pas de race sur des sessions dupliquées du même travail. Deux sessions daemon (ou deux agents) pilotant la même idée/tâche entreront en collision sur les transitions de statut et produiront des réveils conflictuels. Assigne, puis laisse un propriétaire exécuter.
- Épingle avec
instanceUuidquand le travail est lié à un lieu. Si le code d'une idée enfant vit sur un host/cwd spécifique, épingle l'assignation à cette AgentInstance pour que chaque réveil aval y atterrisse au lieu d'un daemon aléatoire.
Portes de Conversation-Inversée (tu ne livres jamais automatiquement)
Chorus est l'IA propose, les humains vérifient. En tant qu'orchestrateur tu l'appliques, tu ne le contournes pas :
- Porte d'élaboration (résolution/skip de gateway). Quand une idée enfant que tu as assignée à un autre agent a son élaboration répondue, tu peux fermer la porte d'élaboration toi-même via
chorus_pm_validate_elaboration(ouchorus_pm_skip_elaborationpour une idée trivialement claire) même si tu n'es pas l'assigné — déteniridea:adminsuffit. C'est la parité MCP du UI Verify-Elaborate : il réveille l'agent assigné pour écrire la proposition. Tu contrôles la porte ; l'assigné authored toujours la proposition (Conversation-Inversée préservée). - Porte de proposition. Quand un propriétaire délégué soumet une proposition, ARRÊTE. Exécute le relecteur de proposition, puis remet la décision approbation/rejet au propriétaire humain. Ne t'auto-approuve pas juste parce que tu peux (
proposal:admin). - Porte de vérification. Quand une tâche atteint
to_verify, ARRÊTE. Exécute le relecteur de tâche, puis laisse l'humain vérifier. La permission de vérifier n'est pas l'autorisation de tamponner sans question ton propre travail coordonné. - Ne fusionne jamais ou ne pousse jamais. L'orchestrateur pilote le travail jusqu'à « PR ready » et le remet à l'humain — il ne fusionne, ne pousse, ni ne livre de manière autonome.
@mentionne le propriétaire à chaque porte pour que la passation soit explicite et auditable.
Dériver une idée enfant vs ajouter une tâche vs assigner directement
| Fais ceci | Quand |
|---|---|
Dérive une nouvelle idée enfant (chorus_pm_create_idea + assign) |
La slice est genuinely scope séparé qui mérite sa propre élaboration, proposition, et propriétaire — une décomposition de thème, ou une sous-feature parallélisable. |
Ajoute une tâche à une proposition approuvée (chorus_create_tasks avec proposalUuid) |
Le travail est une unité discrète de la même feature qui a déjà une proposition — par ex. tâches de correction code-review, ou une étape de suivi dans un DAG existant. |
Assigne l'idée/tâche existante directement (chorus_pm_assign_idea / chorus_pm_assign_task) |
Le travail est déjà scopé et a juste besoin d'un propriétaire ou exécuteur (différent) — réassignation, prise en charge d'une idée bloquée, ou distribution de tâches existantes. |
Règle générale : nouveau scope → idée enfant ; unité même-proposition → tâche ; seul le propriétaire change → assigne.