Skip to content

Boucle équipe ​

Ce parcours sert à faire avancer une story, un épic ou un atelier d'évolutions par une boucle à trois rôles : un analyste, un développeur senior et un ingénieur QA se relaient sur le pipe OPALE. Vous y venez quand vous voulez que l'agent enchaîne le travail au lieu de le conduire pas à pas.

Le moteur n'exécute aucun agent lui-même : il rend le contrat de l'acte suivant, votre agent l'exécute (avec un sous-agent s'il en a), puis rapporte le résultat.

Ce que vous demandez à l'agent ​

💬 Vous demandez à l’agent

« Lance la boucle équipe sur l'épic courant. »

→ L’agent appelleeffortless_crew_init
  • goal = l’épic courant
💬 Vous demandez à l’agent

« Fais tourner l'équipe sur cette story seulement, avec pnpm test et pnpm lint comme barre. »

→ L’agent appelleeffortless_crew_init
  • goal = cette story
  • bar = {"test":"pnpm test","lint":"pnpm lint"}
💬 Vous demandez à l’agent

« Où en est la boucle ? Qui doit agir maintenant ? »

→ L’agent appelleeffortless_crew_status
💬 Vous demandez à l’agent

« Montre-moi la trace complète de ce qui s'est passé dans la boucle. »

→ L’agent appelleeffortless_crew_status
  • full = true
💬 Vous demandez à l’agent

« Classe la tâche TSK-03 en complexe, palier profond, effort élevé, et dis-moi quel modèle ça donne. »

→ L’agent appelleeffortless_task_classify
  • task_id = TSK-03
  • complexity = complex
  • capability_tier = deep
  • effort_level = high
💬 Vous demandez à l’agent

« Génère un profil de fournisseurs à partir du preset claude, pour ce projet seulement. »

→ L’agent appelleeffortless_provider_profile_init
  • family = claude
  • scope = project
💬 Vous demandez à l’agent

« Montre-moi les presets de fournisseurs disponibles et mon profil actuel. »

💬 Vous demandez à l’agent

« Lance la boucle autonome sur les tâches simples du backlog. »

→ L’agent appelleeffortless_loop_init
  • goal = les tâches simples du backlog

Ce que fait l'agent ​

Démarrer la boucle équipe ​

  1. effortless_crew_init reçoit goal (l'objectif, repris dans chaque consigne de rôle) et scope : story, epic (défaut), all ou workshop. max_rounds (100 par défaut) et max_epics (3 par défaut) plafonnent la boucle ; 0 veut dire illimité.
  2. bar déclare la barre mécanique : un objet qui associe un nom (test, lint, typecheck, build) à une commande, ou à un objet avec command et éventuellement cwd ou stack. Il faut au moins une commande, et elle doit pouvoir s'exécuter : une commande non mesurée ne serait jamais verte et le QA ne pourrait jamais rendre go.
  3. force: true écrase une boucle déjà initialisée.
  4. En périmètre all, quand il n'y a plus d'épic à livrer, la boucle entre dans l'atelier d'évolutions et gradue un axe en épic suivant, jusqu'à max_epics.

Faire un tour de boucle ​

  1. effortless_crew_step rend le contrat de l'acte courant : le rôle qui doit agir, le modèle et l'effort recommandés, la sortie attendue, et prompt_path, le chemin d'un fichier qui contient la consigne (une clé prompt). L'agent lit ce fichier avant de lancer le sous-agent. Appelé deux fois, effortless_crew_step rend deux fois la même chose : il n'avance rien. document vise un document de cadrage précis.
  2. Le rôle exécute l'acte.
  3. effortless_crew_report rapporte le résultat : role (analyst, developer ou qa, celui que l'étape attend), verdict (done pour l'analyste et le développeur, go ou no-go pour le QA), summary, et payload (la sortie structurée du rôle). Pour une charge trop volumineuse, payload_path désigne un fichier JSON à la place, jamais les deux.
  4. effortless_crew_report mesure la barre mécanique avant de rendre la main ; l'appel peut être long. Il rend directement l'acte suivant.
  5. À la livraison, le moteur commite lui-même le travail de la tâche, puis la clôture. Il répète le tour jusqu'à ce que le périmètre soit couvert ou qu'un plafond soit atteint. Trois no-go de suite arrêtent la boucle.

Suivre la boucle ​

  1. effortless_crew_status lit l'état sans rien changer : étape, rôle attendu, pointeur épic / story / tâche, compteurs, plafonds, raison de fin (scope_covered, epics_exhausted ou rounds_exhausted, null tant que la boucle tourne) et ledger daté des actes. Par défaut, seuls les derniers actes sont rendus ; full: true rend la trace complète.

Router une tâche vers un palier de modèle ​

  1. effortless_task_classify classe une tâche de la story active sur un ou plusieurs axes : complexity (simple ou complex), capability_tier (deep, standard ou light), effort_level (low, medium ou high). Il en faut au moins un ; un axe absent reste inchangé.
  2. effortless_task_route_show rend la recommandation résolue : palier et effort, traduits en modèle concret et en effort natif par votre profil de fournisseurs (profil du projet d'abord, puis profil global). Sans classement, le défaut est standard / medium. C'est une suggestion, jamais une obligation.

Régler les fournisseurs ​

  1. effortless_provider_presets_list liste les presets embarqués et personnalisés.
  2. effortless_provider_profile_show lit votre profil actif.
  3. effortless_provider_profile_init (re)génère le profil, une matrice palier × effort, depuis une famille de preset : claude, codex, gemini, mistral ou un nom libre. scope vaut global (défaut) ou project. Un profil existant n'est écrasé qu'avec force: true.

La boucle autonome ​

C'est une boucle plus simple, qui prend les tâches du backlog une à une.

  1. effortless_loop_init la démarre avec un goal.
  2. effortless_loop_step la fait avancer : Plan, Implémentation, Recette, Livraison. À la recette, elle joue test_command (par défaut, le cycle de test du modèle de la première stack). Une tâche non classée doit d'abord l'être, une tâche complexe se décompose en tâches simples. Quand les tests passent, la boucle tente de commiter la tâche. Après trop d'échecs de recette, elle s'arrête.

Ce que vous obtenez ​

  • Le travail avance tâche après tâche, avec un commit de livraison par tâche et une clôture quand l'épic est fini.
  • Un état de boucle et un ledger horodaté, relisibles à tout moment par effortless_crew_status.
  • Dans l'app, vous suivez la progression dans Tâches, Backlog et Tableau de bord.
  • Un profil de fournisseurs dans votre dossier personnel (profil global) ou dans le projet (profil projet).

Quand l'agent est refusé ​

SituationCe que dit le refusCe qu'il faut faire
Le projet est en mode semi-autoMessage « outil d'exécution désactivé », marqué gated, pour crew_init, crew_step, crew_report, loop_init, loop_stepPasser le projet en mode full.
Périmètre inconnucrew:scopeInvalidPasser scope parmi story, epic, all, workshop.
Aucun épic actifcrew:noActiveEpicActiver un épic avec effortless_epic_activate, ou relancer avec scope: "workshop".
Une boucle existe déjàcrew:alreadyInitializedPasser force: true pour l'écraser.
Aucune commande de barrecrew:barMissingPasser bar, par exemple {"test": "…", "lint": "…"}.
La barre ne peut pas s'exécutercrew:barUnrunnable, qui nomme l'exécutable fautifCorriger les commandes nommées dans bar, puis relancer.
cwd de la barre absolu ou hors du projetcrew:barCwdInvalidRelancer effortless_crew_init avec un bar.cwd relatif à la racine du projet.
Chemin d'une stack introuvablecrew:stackPathMissingCréer l'arborescence nommée, ou corriger le path de la stack avec effortless_stack_add.
Aucune boucle initialiséecrew:notInitializedLancer effortless_crew_init.
Rôle ou verdict inconnucrew:roleUnknown ou crew:verdictUnknownPasser role parmi analyst, developer, qa ; verdict parmi go, no-go, done.
Le rôle rapporté n'est pas celui attenducrew:roleMismatchRapporter avec le rôle attendu ; effortless_crew_step le nomme.
Rapport sur une étape sans acteurcrew:stageHasNoActorAppeler effortless_crew_step pour connaître l'acte réellement attendu.
payload et payload_path ensemblecrew:payloadPathEtPayloadN'en fournir qu'un des deux.
payload_path introuvable, hors du projet, trop gros ou mal formécrew:payloadPathIntrouvable, crew:payloadPathHorsPerimetre, crew:payloadPathTropGros, crew:payloadPathJsonInvalide, crew:payloadPathRacineNonObjetPointer un fichier JSON du projet dont la racine est un objet (4 Mio au plus).
Code déclaré absent de la branchecrew:filesNotIntegratedLancer effortless_worktree_reintegrate depuis le worktree qui porte le travail, puis relancer le rapport.
Le commit de livraison est refusécrew:commitRefusedLever la cause que git nomme dans le refus, puis relancer le rapport.
Livraison interrompue, rapport d'un autre rôlecrew:deliveryResumeRequiresQaGoReprendre par le rapport qa / go qui a pu l'amorcer.
Profil de fournisseurs déjà présentcreate:providerExistsPasser force: true pour l'écraser.
Portée de profil invalidecommon:scopeInvalidPasser scope à global ou project.
Profil de projet sans projetcommon:projectNotInitializedInitialiser le projet, ou viser la portée global.

Effortless — ArboRithm