Dynamic Workflows — orchestration multi-agents scriptée
Dynamic Workflows (Claude Code 2.1.154+, mot-clé déclencheur ultracode) laissent Claude écrire un script JavaScript qui orchestre des sous-agents de façon déterministe (boucles, conditions, fan-out). Le script tourne en arrière-plan ; on suit l'exécution via /workflows.
⚠️ Opt-in coûteux : un workflow peut lancer des dizaines à centaines de sous-agents. Ne l'utiliser
que sur demande explicite (mot « ultracode », « use a workflow », « fan out agents ») ou quand le
palier de complexité ci-dessous est franchi.
Quand l'utiliser — les 3 paliers d'orchestration
| Palier |
Outil |
Concurrence |
Quand |
| 1 |
Sub-agent simple (Task/Agent) |
1 |
Une investigation isolée, garder le contexte principal propre |
| 2 |
Agent Teams (/team:audit, /team:sprint, /team:security) |
1 leader + ~3 workers |
Travail parallèle borné, synchrone, qui tient en un round |
| 3 |
Dynamic Workflows (ultracode) |
jusqu'à ~1000 sous-agents (cap concurrent ~16) |
La tâche dépasse le contexte d'un agent OU exige >4 workers OU une boucle/pipeline déterministe |
Heuristique break-even : dès que tu écrirais « lance N agents, puis pour chacun fais X, puis agrège » — c'est un workflow. Si N ≤ 4 et une seule passe suffit, reste sur Agent Teams.
Patterns composables (prompts minimaux)
- Fan-out & synthesize — N lecteurs en parallèle sur des sous-systèmes disjoints → un agent
synthétise. (audit, cartographie de code)
- Adversarial verification — chaque finding passé à ≥1 sceptique chargé de le réfuter ;
ne garder que les CONFIRMED. Le pattern qualité le plus important pour la génération autonome.
- Generate-and-filter — générer large (idées, candidats), puis filtrer par un juge.
- Classify-and-act — un classifieur route chaque item vers le traitement adapté.
- Pipeline — chaque item traverse toutes les étapes sans barrière (latence = pire chaîne, pas
somme des étapes). C'est le défaut multi-étapes.
- Loop-until-done / loop-until-dry — relancer des chercheurs jusqu'à K rounds sans nouveauté
(découverte de taille inconnue : bugs, edge cases).
Squelette type (review → verify)
const results = await pipeline(
DIMENSIONS,
d => agent(d.prompt, { phase: 'Review', schema: FINDINGS }),
review => parallel(review.findings.map(f => () =>
agent(`Adversarially verify: ${f.title}. Default refuted=true if unsure.`,
{ phase: 'Verify', schema: VERDICT }).then(v => ({ ...f, verdict: v }))))
)
const confirmed = results.flat().filter(Boolean).filter(f => f.verdict?.isReal)
pipeline() par défaut (pas de barrière) ; parallel() seulement quand l'étape N a besoin de TOUS les résultats de N-1 (dédup, early-exit, comparaison croisée). schema force une sortie structurée validée. Pour des éditions concurrentes de fichiers, isolation: 'worktree'.
Monitoring
/workflows : progression live (phases, agents, tokens).
- Le script revient avec un résultat agrégé ; lire ce résultat, décider la suite (souvent plusieurs
workflows en séquence : comprendre → concevoir → implémenter → revoir).
À ne pas confondre
- ralph-run (
/common:ralph-run) : boucle séquentielle mono-contexte jusqu'à une DoD — pas de
parallélisme. Pour une tâche qui dépasse ce modèle, basculer sur un Dynamic Workflow.
/effort ultracode : palier d'effort CLI (débit code max sur Opus 4.8) — orthogonal au
déclencheur ultracode des workflows, même si souvent utilisés ensemble.
Réutilisation & garde-fous (v2.1.166+)
- Essayer d'abord le workflow intégré
/deep-research (recherche multi-sources vérifiée) avant d'en
écrire un : beaucoup de besoins « fan-out web + synthèse » y sont déjà couverts.
- Sauvegarder un run éprouvé : dans
/workflows, presser s enregistre le script comme commande
réutilisable — projet (.claude/workflows/) ou perso (~/.claude/workflows/). Un paramètre args permet de le rejouer avec une entrée différente (question de recherche, chemin cible…).
- ⚠️ Sécurité — acceptEdits implicite : les sous-agents lancés par un workflow tournent **toujours en
mode acceptEdits et héritent de ton allowlist, quel que soit le mode de la session (y compris plan ou default). Les éditions de fichiers sont auto-approuvées.** Ne fan-out des agents qui écrivent qu'en zone maîtrisée (worktree isolé, cf. règle 11 sur l'hygiène des permissions).
- Coupe-circuit & coût :
disableWorkflows (settings.json) ou CLAUDECODEDISABLE_WORKFLOWS=1
désactivent la fonctionnalité ; /workflows affiche la consommation de tokens en direct (un workflow coûte significativement plus qu'un contexte unique — piloter avec un budget explicite).
Référence : Claude Code Workflows · voir aussi
@.claude/commands/common/sub-agents-patterns.md (tableau comparatif des orchestrations).