Compare commits

..

1 Commits

Author SHA1 Message Date
Emmanuel Atsé 33f72d73ee
Merge c51426bbc9 into ee47e30cf6 2026-05-23 07:56:44 +02:00
49 changed files with 1685 additions and 712 deletions

View File

@ -20,7 +20,7 @@
"skills": [
"./src/core-skills/bmad-help",
"./src/core-skills/bmad-brainstorming",
"./src/core-skills/bmad-spec",
"./src/core-skills/bmad-distillator",
"./src/core-skills/bmad-party-mode",
"./src/core-skills/bmad-shard-doc",
"./src/core-skills/bmad-advanced-elicitation",

View File

@ -18,7 +18,7 @@ Spusťte jakýkoli základní nástroj zadáním jeho názvu skillu (např. `bma
| [`bmad-help`](#bmad-help) | Task | Kontextové poradenství, co dělat dál |
| [`bmad-brainstorming`](#bmad-brainstorming) | Workflow | Facilitace interaktivních brainstormingových sezení |
| [`bmad-party-mode`](#bmad-party-mode) | Workflow | Orchestrace skupinových diskuzí více agentů |
| [`bmad-spec`](#bmad-spec) | Workflow | Distill any intent input into a SPEC kernel and companions, the canonical contract for downstream work (translation pending) |
| [`bmad-distillator`](#bmad-distillator) | Task | Bezeztrátová LLM-optimalizovaná komprese dokumentů |
| [`bmad-advanced-elicitation`](#bmad-advanced-elicitation) | Task | Iterativní zdokonalování LLM výstupu |
| [`bmad-review-adversarial-general`](#bmad-review-adversarial-general) | Task | Cynická revize hledající chybějící a chybné |
| [`bmad-review-edge-case-hunter`](#bmad-review-edge-case-hunter) | Task | Vyčerpávající analýza větvících cest pro neošetřené hraniční případy |
@ -97,6 +97,32 @@ Kouzlo se děje v nápadech 50100. Workflow povzbuzuje generování 100+ náp
**Výstup:** Real-time multi-agentní konverzace s udržovanými osobnostmi agentů
## bmad-distillator
**Bezeztrátová LLM-optimalizovaná komprese zdrojových dokumentů.** — Produkuje husté, tokenově efektivní destiláty, které zachovávají všechny informace pro následné LLM zpracování. Ověřitelné prostřednictvím round-trip rekonstrukce.
**Použijte když:**
- Dokument je příliš velký pro kontextové okno LLM
- Potřebujete tokenově efektivní verze výzkumů, specifikací nebo plánovacích artefaktů
- Chcete ověřit, že během komprese nebyly ztraceny žádné informace
**Jak to funguje:**
1. **Analýza** — Čte zdrojové dokumenty, identifikuje hustotu informací a strukturu
2. **Komprese** — Převádí prózu na hustý odrážkový formát, odstraňuje dekorativní formátování
3. **Ověření** — Kontroluje úplnost pro zajištění zachování všech informací
4. **Validace** (volitelné) — Round-trip rekonstrukční test dokazuje bezeztrátovou kompresi
**Vstup:**
- `source_documents` (povinné) — Cesty k souborům, složkám nebo glob vzory
- `downstream_consumer` (volitelné) — Co to konzumuje (např. „tvorba PRD“)
- `token_budget` (volitelné) — Přibližná cílová velikost
- `--validate` (příznak) — Spuštění round-trip rekonstrukčního testu
**Výstup:** Destilátové markdown soubory s reportem kompresního poměru (např. „3.2:1“)
## bmad-advanced-elicitation
**Iterativní zdokonalování LLM výstupu metodami elicitace.** — Vybírá z knihovny elicitačních technik pro systematické zlepšování obsahu více průchody.

View File

@ -36,7 +36,7 @@ BMad ships six named agents, each anchored to a phase of the BMad Method:
| 📋 **John**, Product Manager | Planning | PRD creation, epic/story breakdown, implementation readiness |
| 🎨 **Sally**, UX Designer | Planning | UX design specifications |
| 🏗️ **Winston**, System Architect | Solutioning | technical architecture, alignment checks |
| 💻 **Amelia**, Senior Engineer | Implementation | story execution, quick-dev, code review, sprint planning, [forensic investigation](./forensic-investigation.md) |
| 💻 **Amelia**, Senior Engineer | Implementation | story execution, quick-dev, code review, sprint planning |
They each have a hardcoded identity (name, title, domain) and a customizable layer (role, principles, communication style, icon, menu). You can rewrite Mary's principles or add menu items; you can't rename her — that's deliberate. Brand recognition survives customization so "hey Mary" always activates the analyst, regardless of how a team has shaped her behavior.

View File

@ -50,7 +50,7 @@ Avertissements critiques uniquement — perte de données, problèmes de sécuri
## Formats de tableau standards
**Phases :**
**Phases :**
```md
| Phase | Nom | Ce qui se passe |
@ -59,7 +59,7 @@ Avertissements critiques uniquement — perte de données, problèmes de sécuri
| 2 | Planification | Exigences — PRD ou spécification technique *(requis)* |
```
**Skills :**
**Skills :**
```md
| Skill | Agent | Objectif |
@ -243,7 +243,7 @@ votre-projet/
1. Titre + Accroche
2. Éléments (## pour chaque élément)
- Brève description (une phrase)
- **Skills :** ou **Infos clés :** sous forme de liste simple
- **Skills :** ou **Infos clés :** sous forme de liste simple
3. Universel/Partagé (## section) (optionnel)
```
@ -304,9 +304,9 @@ Starlight génère la navigation «Sur cette page» à droite à partir de
### Format de tableau
```md
## Nom de catégorie
```md
| Terme | Définition |
|--------------|------------------------------------------------------------------------------------------------------------|
| **Agent** | Personnalité IA spécialisée avec une expertise spécifique qui guide les utilisateurs dans les workflows. |

View File

@ -13,7 +13,7 @@ Une technique de revue où le réviseur *doit* trouver des problèmes. Pas de «
Il ne sagit pas dêtre négatif. Il sagit de forcer une analyse authentique au lieu dun coup dœil superficiel qui valide automatiquement ce qui a été soumis.
**La règle fondamentale :** Il doit trouver des problèmes. Zéro constatation déclenche un arrêt - réanalyse ou explique pourquoi.
**La règle fondamentale :** Il doit trouver des problèmes. Zéro constatation déclenche un arrêt - réanalyse ou explique pourquoi.
## Pourquoi Cela Fonctionne
@ -30,7 +30,7 @@ La revue contradictoire apparaît dans tous les workflows BMad - revue de code,
## Filtrage Humain Requis
Parce que lIA est *instruite* de trouver des problèmes, elle trouvera des problèmes - même lorsquils nexistent pas. Attendez-vous à des faux positifs : des détails présentés comme des problèmes, des malentendus sur lintention, ou des préoccupations purement hallucinées[^3].
Parce que lIA est *instruite* de trouver des problèmes, elle trouvera des problèmes - même lorsquils nexistent pas. Attendez-vous à des faux positifs : des détails présentés comme des problèmes, des malentendus sur lintention, ou des préoccupations purement hallucinées[^3].
**Cest vous qui décidez ce qui est réel.** Examinez chaque constatation, ignorez le bruit, corrigez ce qui compte.

View File

@ -11,7 +11,7 @@ Libérez votre créativité grâce à une exploration guidée.
Lancez `bmad-brainstorming` et vous obtenez un facilitateur créatif qui fait émerger vos idées - pas qui les génère pour vous. LIA agit comme coach et guide, utilisant des techniques éprouvées pour créer les conditions où votre meilleure réflexion émerge.
**Idéal pour :**
**Idéal pour :**
- Surmonter les blocages créatifs
- Générer des idées de produits ou de fonctionnalités

View File

@ -31,12 +31,12 @@ BMad embarque six agents nommés, chacun ancré à une phase de la méthode BMad
| Agent | Phase | Module |
|------------------------------------|----------------|-------------------------------------------------------------------------------------------------------------------------|
| 📊 **Mary**, Analyste daffaires | Analyse | étude de marché, brainstorming, product briefs, PRFAQs |
| 📚 **Paige**, Rédactrice technique | Analyse | documentation de projet, diagrammes, validation de docs |
| 📋 **John**, Chef de produit | Planification | création de PRD, décomposition epic/story, vérification de la préparation à limplémentation |
| 🎨 **Sally**, Designer UX | Planification | spécifications de design UX |
| 🏗️ **Winston**, Architecte système | Solutioning | architecture technique, vérifications dalignement |
| 💻 **Amelia**, Ingénieure senior | Implémentation | exécution de stories, quick-dev, revue de code, planification de sprint, [enquête de code](./forensic-investigation.md) |
| 📊 **Mary**, Analyste daffaires | Analyse | étude de marché, brainstorming, product briefs, PRFAQs |
| 📚 **Paige**, Rédactrice technique | Analyse | documentation de projet, diagrammes, validation de docs |
| 📋 **John**, Chef de produit | Planification | création de PRD, décomposition epic/story, vérification de la préparation à limplémentation |
| 🎨 **Sally**, Designer UX | Planification | spécifications de design UX |
| 🏗️ **Winston**, Architecte système | Solutioning | architecture technique, vérifications dalignement |
| 💻 **Amelia**, Ingénieure senior | Implémentation | exécution de stories, quick-dev, revue de code, planification de sprint, [enquête de code](./forensic-investigation.md) |
Chacun possède une identité codée en dur (nom, titre, domaine) et une couche personnalisable (rôle, principes, style de communication, icône, menu). Vous pouvez réécrire les principes de Mary ou ajouter des éléments de menu; vous ne pouvez pas la renommer — cest délibéré. La reconnaissance de marque persiste après personnalisation pour que «hey Mary» active toujours lanalyste, indépendamment de la façon dont une équipe a façonné son comportement.

View File

@ -24,35 +24,35 @@ La conversation continue aussi longtemps que vous le souhaitez. Posez des questi
### Remettre en question une mauvaise architecture
**Vous :** «Ok léquipe, notre dernier sprint a été un désastre. Le service dauthentification est tombé trois fois. Qui a cafouillé? »
**Vous :** «Ok léquipe, notre dernier sprint a été un désastre. Le service dauthentification est tombé trois fois. Qui a cafouillé? »
**Architecte :** «Le design était solide - authentification distribuée avec des fallbacks appropriés. Si limplémentation a dévié des specs... »
**Architecte :** «Le design était solide - authentification distribuée avec des fallbacks appropriés. Si limplémentation a dévié des specs... »
**Développeur :** «Jai suivi le document darchitecture à la lettre. Les specs ne prenaient pas en compte les race conditions lors de linvalidation de sessions concurrentes. »
**Développeur :** «Jai suivi le document darchitecture à la lettre. Les specs ne prenaient pas en compte les race conditions lors de linvalidation de sessions concurrentes. »
**PM :** «Vous avez tous les deux raté le vrai problème - nous navons pas validé les exigences de gestion des sessions dans le PRD. Cest de ma faute de ne pas lavoir repéré. »
**PM :** «Vous avez tous les deux raté le vrai problème - nous navons pas validé les exigences de gestion des sessions dans le PRD. Cest de ma faute de ne pas lavoir repéré. »
**TEA :** «Et jaurais dû le repérer dans les tests dintégration. Les scénarios de test ne couvraient pas linvalidation concurrente. »
**TEA :** «Et jaurais dû le repérer dans les tests dintégration. Les scénarios de test ne couvraient pas linvalidation concurrente. »
### Brainstorming créatif
**Vous :** «Comment rendre lonboarding magique au lieu dennuyeux? »
**Vous :** «Comment rendre lonboarding magique au lieu dennuyeux? »
**Designer UX :** «Commençons par la divulgation progressive - révélons les fonctionnalités au fur et à mesure que les utilisateurs en ont besoin, pas dun coup dans un tutoriel. »
**Designer UX :** «Commençons par la divulgation progressive - révélons les fonctionnalités au fur et à mesure que les utilisateurs en ont besoin, pas dun coup dans un tutoriel. »
**Storyteller :** «Et si lonboarding était une histoire? Chaque étape révèle le parcours dun personnage - lutilisateur EST le héros. »
**Storyteller :** «Et si lonboarding était une histoire? Chaque étape révèle le parcours dun personnage - lutilisateur EST le héros. »
**Game Designer :** «En partant de là - et si la première «quête» consistait à résoudre un vrai problème utilisateur? Ils apprennent en faisant quelque chose dutile. »
**Game Designer :** «En partant de là - et si la première «quête» consistait à résoudre un vrai problème utilisateur? Ils apprennent en faisant quelque chose dutile. »
### Décision technique
**Vous :** «Monolithe ou microservices pour le MVP[^1]? »
**Vous :** «Monolithe ou microservices pour le MVP[^1]? »
**Architecte :** «Commencez en monolithe. Les microservices ajoutent une complexité dont vous navez pas besoin à 1000 utilisateurs. »
**Architecte :** «Commencez en monolithe. Les microservices ajoutent une complexité dont vous navez pas besoin à 1000 utilisateurs. »
**PM :** «Daccord. Le time-to-market[^2] compte plus que la scalabilité théorique. »
**PM :** «Daccord. Le time-to-market[^2] compte plus que la scalabilité théorique. »
**Développeur :** «Monolithe avec des frontières de modules claires. On pourra extraire des services plus tard si nécessaire. »
**Développeur :** «Monolithe avec des frontières de modules claires. On pourra extraire des services plus tard si nécessaire. »
:::tip[Meilleures décisions]
De meilleures décisions grâce à des perspectives diverses. Bienvenue dans le party mode.

View File

@ -14,10 +14,10 @@ Lorsque plusieurs agents IA implémentent différentes parties dun système,
Sans architecture :
- Lagent A utilise REST avec `/users/{id}`
- Lagent B utilise des mutations GraphQL
- Résultat : Patterns dAPI incohérents, consommateurs confus
- Résultat : Patterns dAPI incohérents, consommateurs confus
Avec architecture :
- LADR[^1] spécifie : «Utiliser GraphQL pour toute communication client-serveur»
- LADR[^1] spécifie : «Utiliser GraphQL pour toute communication client-serveur»
- Tous les agents suivent le même pattern
### Conflits de conception de base de données
@ -25,7 +25,7 @@ Avec architecture :
Sans architecture :
- Lagent A utilise des noms de colonnes en snake_case
- Lagent B utilise des noms de colonnes en camelCase
- Résultat : Schéma incohérent, requêtes illisibles
- Résultat : Schéma incohérent, requêtes illisibles
Avec architecture :
- Un document de standards spécifie les conventions de nommage
@ -36,7 +36,7 @@ Avec architecture :
Sans architecture :
- Lagent A utilise Redux pour létat global
- Lagent B utilise React Context
- Résultat : Multiples approches de gestion détat, complexité
- Résultat : Multiples approches de gestion détat, complexité
Avec architecture :
- LADR spécifie lapproche de gestion détat
@ -56,8 +56,8 @@ Chaque choix technologique significatif est documenté avec :
### 2. Guidance spécifique aux FR/NFR[^2]
Larchitecture associe chaque exigence fonctionnelle à une approche technique :
- FR-001 : Gestion des utilisateurs → Mutations GraphQL
- FR-002 : Application mobile → Requêtes optimisées
- FR-001 : Gestion des utilisateurs → Mutations GraphQL
- FR-002 : Application mobile → Requêtes optimisées
### 3. Standards et conventions

View File

@ -20,7 +20,7 @@ Le fichier `project-context.md` résout ce problème en documentant ce que les a
Chaque workflow dimplémentation charge automatiquement `project-context.md` sil existe. Le workflow architecte le charge également pour respecter vos préférences techniques lors de la conception de larchitecture.
**Chargé par ces workflows :**
**Chargé par ces workflows :**
- `bmad-create-architecture` — respecte les préférences techniques pendant la phase de solutioning
- `bmad-create-story` — informe la création de stories avec les patterns du projet
- `bmad-dev-story` — guide les décisions dimplémentation

View File

@ -15,7 +15,7 @@ Il permet au modèle de sexécuter plus longtemps entre les points de contrô
Les interactions humaines dans la boucle sont nécessaires et coûteuses.
Les LLM actuels échouent encore de manière prévisible : ils interprètent mal lintention, comblent les lacunes avec des suppositions assurées, dérivent vers du travail non lié, et génèrent des résultats à réviser bruyants. En même temps, lintervention humaine constante limite la fluidité du développement. Lattention humaine est le goulot détranglement.
Les LLM actuels échouent encore de manière prévisible : ils interprètent mal lintention, comblent les lacunes avec des suppositions assurées, dérivent vers du travail non lié, et génèrent des résultats à réviser bruyants. En même temps, lintervention humaine constante limite la fluidité du développement. Lattention humaine est le goulot détranglement.
`bmad-quick-dev` rééquilibre ce compromis. Il fait confiance au modèle pour sexécuter sans surveillance sur de plus longues périodes, mais seulement après que le workflow ait créé une frontière suffisamment solide pour rendre cela sûr.
@ -25,7 +25,7 @@ Les LLM actuels échouent encore de manière prévisible : ils interprètent ma
Le workflow commence par compresser linteraction de la personne et du modèle à partir de la requête en un objectif cohérent. Lentrée peut commencer sous forme dune expression grossière de lintention, mais avant que le workflow ne sexécute de manière autonome, elle doit devenir suffisamment petite, claire et sans contradiction pour être exécutable.
Lintention peut prendre plusieurs formes : quelques phrases, un lien vers un outil de suivi de bugs, une sortie du mode planification, du texte copié depuis une session de chat, ou même un numéro de story depuis un fichier `epics.md` de BMAD. Dans ce dernier cas, le workflow ne comprendra pas la sémantique de suivi des stories de BMAD, mais il peut quand même prendre la story elle-même et lexécuter.
Lintention peut prendre plusieurs formes : quelques phrases, un lien vers un outil de suivi de bugs, une sortie du mode planification, du texte copié depuis une session de chat, ou même un numéro de story depuis un fichier `epics.md` de BMAD. Dans ce dernier cas, le workflow ne comprendra pas la sémantique de suivi des stories de BMAD, mais il peut quand même prendre la story elle-même et lexécuter.
Ce workflow nélimine pas le contrôle humain. Il le déplace vers un nombre réduit détapes à forte valeur :

View File

@ -44,12 +44,12 @@ Le dossier `_bmad/custom/` est initialement vide. Les fichiers napparaissent
Le résolveur applique quatre règles structurelles. Les noms de champ nont pas de traitement particulier — le comportement est déterminé uniquement par la forme de la valeur :
| Forme | Règle |
|-------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|
| Scalaire (chaîne, entier, booléen, flottant) | Loverride prévaut |
| Table | Fusion profonde (application récursive des mêmes règles) |
| Forme | Règle |
|---|---|
| Scalaire (chaîne, entier, booléen, flottant) | Loverride prévaut |
| Table | Fusion profonde (application récursive des mêmes règles) |
| Tableau de tables où chaque élément partage le **même** champ identifiant (chaque élément a `code`, ou chaque élément a `id`) | Fusionner par cette clé — les clés correspondantes **remplacent sur place**, les nouvelles clés **sajoutent** |
| Tout autre tableau (scalaires; tables sans identifiant; tableaux qui mélangent `code` et `id` entre les éléments) | **Ajouter** — éléments de base en premier, puis éléments déquipe, puis éléments utilisateur |
| Tout autre tableau (scalaires; tables sans identifiant; tableaux qui mélangent `code` et `id` entre les éléments) | **Ajouter** — éléments de base en premier, puis éléments déquipe, puis éléments utilisateur |
**Pas de mécanisme de suppression.** Les overrides ne peuvent pas effacer les éléments de base. Si vous devez supprimer un élément de menu par défaut, surchargez-le via son `code` avec une description ou un prompt sans effet. Si vous devez restructurer un tableau plus en profondeur, forkez le skill.
@ -86,10 +86,10 @@ _bmad/custom/
:::caution[Ne copiez PAS le `customize.toml` complet]
Les fichiers doverride sont **allégés**. Incluez uniquement les champs que vous modifiez — rien dautre. Chaque champ omis est hérité automatiquement de la couche inférieure (léquipe hérite des valeurs par défaut, lutilisateur de léquipe ou des valeurs par défaut).
Copier le `customize.toml` complet dans un override est contre-productif : la prochaine mise à jour livrera de nouvelles valeurs par défaut, mais votre fichier doverride figera les anciennes valeurs. Votre configuration séloignera silencieusement des valeurs par défaut à chaque mise à jour.
Copier le `customize.toml` complet dans un override est contre-productif : la prochaine mise à jour livrera de nouvelles valeurs par défaut, mais votre fichier doverride figera les anciennes valeurs. Votre configuration séloignera silencieusement des valeurs par défaut à chaque mise à jour.
:::
**Exemple — changer licône et ajouter un principe :**
**Exemple — changer licône et ajouter un principe :**
```toml
# _bmad/custom/bmad-agent-pm.toml
@ -158,7 +158,7 @@ activation_steps_append = [
**Pourquoi deux hooks?** Le préfixe sexécute avant la salutation pour que lagent puisse charger le contexte dont il a besoin pour personnaliser la salutation elle-même. Le suffixe sexécute après la salutation pour que lutilisateur ne reste pas devant un terminal vide pendant les scans lourds.
**Personnalisation du menu (fusion par `code`).** Le menu est un tableau de tables. Chaque élément possède un champ `code` (convention BMad). Le résolveur fusionne donc par code : les codes correspondants remplacent sur place, les nouveaux codes sajoutent.
**Personnalisation du menu (fusion par `code`).** Le menu est un tableau de tables. Chaque élément possède un champ `code` (convention BMad). Le résolveur fusionne donc par code : les codes correspondants remplacent sur place, les nouveaux codes sajoutent.
La syntaxe TOML pour les tableaux de tables utilise `[[agent.menu]]` pour chaque élément :
@ -182,13 +182,13 @@ Signaler tout écart et citer la section réglementaire pertinente.
Chaque élément de menu possède exactement un `skill` (invoque un skill enregistré) ou `prompt` (exécute le texte directement). Les éléments non listés dans votre override conservent leurs valeurs par défaut.
**Référencer des fichiers.** Quand le texte dun champ doit pointer vers un fichier (dans `persistent_facts`, `activation_steps_prepend`/`activation_steps_append`, ou le `prompt` dun élément de menu), utilisez un chemin complet partant de `{project-root}`. Même si le fichier se trouve à côté de votre override dans `_bmad/custom/`, écrivez le chemin complet : `{project-root}/_bmad/custom/info.md`. Lagent résout `{project-root}` à lexécution.
**Référencer des fichiers.** Quand le texte dun champ doit pointer vers un fichier (dans `persistent_facts`, `activation_steps_prepend`/`activation_steps_append`, ou le `prompt` dun élément de menu), utilisez un chemin complet partant de `{project-root}`. Même si le fichier se trouve à côté de votre override dans `_bmad/custom/`, écrivez le chemin complet : `{project-root}/_bmad/custom/info.md`. Lagent résout `{project-root}` à lexécution.
### 4. Personnel vs Équipe
**Fichier déquipe** (`bmad-agent-pm.toml`) : Versionné dans git. Partagé au sein de lorganisation. À utiliser pour les règles de conformité, le persona de lentreprise, les capacités personnalisées.
**Fichier déquipe** (`bmad-agent-pm.toml`) : Versionné dans git. Partagé au sein de lorganisation. À utiliser pour les règles de conformité, le persona de lentreprise, les capacités personnalisées.
**Fichier personnel** (`bmad-agent-pm.user.toml`) : Automatiquement ignoré par git. À utiliser pour les ajustements de ton, les préférences de workflow personnelles et les faits privés que lagent doit garder en tête.
**Fichier personnel** (`bmad-agent-pm.user.toml`) : Automatiquement ignoré par git. À utiliser pour les ajustements de ton, les préférences de workflow personnelles et les faits privés que lagent doit garder en tête.
```toml
# _bmad/custom/bmad-agent-pm.user.toml
@ -209,7 +209,7 @@ python3 {project-root}/_bmad/scripts/resolve_customization.py \
--key agent
```
**Prérequis** : Python 3.11+ (les versions antérieures nincluent pas `tomllib`). Pas de `pip install`, pas de `uv`, pas de virtualenv. Vérifiez avec `python3 --version`. Certaines plateformes (macOS sans Homebrew, Ubuntu 22.04) ont `python3` par défaut en 3.10 ou antérieur, vous devrez peut-être installer 3.11+ séparément.
**Prérequis** : Python 3.11+ (les versions antérieures nincluent pas `tomllib`). Pas de `pip install`, pas de `uv`, pas de virtualenv. Vérifiez avec `python3 --version`. Certaines plateformes (macOS sans Homebrew, Ubuntu 22.04) ont `python3` par défaut en 3.10 ou antérieur, vous devrez peut-être installer 3.11+ séparément.
`--skill` pointe vers le répertoire installé du skill (où se trouve `customize.toml`). Le nom du skill est déduit du basename du répertoire, et le script cherche automatiquement `_bmad/custom/{skill-name}.toml` et `{skill-name}.user.toml`.
@ -260,7 +260,7 @@ persistent_facts = [
on_complete = "Résumer le brief en trois points et proposer de l'envoyer par email via le skill gws-gmail-send."
```
Les mêmes conventions de champs sappliquent indifféremment aux agents et aux workflows : `activation_steps_prepend`/`activation_steps_append`, `persistent_facts` (avec refs `file:`) et les tables `[[…]]` de style menu avec `code`/`id` pour la fusion par clé. Le résolveur applique les mêmes quatre règles structurelles quelle que soit la clé de premier niveau. Les références dans SKILL.md suivent lespace de noms : `{workflow.activation_steps_prepend}`, `{workflow.persistent_facts}`, `{workflow.on_complete}`. Tout champ supplémentaire quun workflow expose (chemins de sortie, bascules, paramètres de revue, drapeaux détape) suit les mêmes règles de fusion basées sur la forme. Lisez le `customize.toml` du workflow pour voir ce qui est personnalisable.
Les mêmes conventions de champs sappliquent indifféremment aux agents et aux workflows : `activation_steps_prepend`/`activation_steps_append`, `persistent_facts` (avec refs `file:`) et les tables `[[…]]` de style menu avec `code`/`id` pour la fusion par clé. Le résolveur applique les mêmes quatre règles structurelles quelle que soit la clé de premier niveau. Les références dans SKILL.md suivent lespace de noms : `{workflow.activation_steps_prepend}`, `{workflow.persistent_facts}`, `{workflow.on_complete}`. Tout champ supplémentaire quun workflow expose (chemins de sortie, bascules, paramètres de revue, drapeaux détape) suit les mêmes règles de fusion basées sur la forme. Lisez le `customize.toml` du workflow pour voir ce qui est personnalisable.
### Ordre dactivation
@ -277,7 +277,7 @@ Après létape 6, le corps du workflow commence. Utilisez `activation_steps_p
### Périmètre de cette première passe
La personnalisation est déployée de manière incrémentale. Les champs documentés ci-dessus — `activation_steps_prepend`, `activation_steps_append`, `persistent_facts`, `on_complete` — sont la **surface de base** que chaque workflow personnalisable expose, et ils resteront stables dune version à lautre. Ils vous donnent un contrôle à grands traits dès aujourdhui : injecter des étapes pré/post, épingler du contexte fondamental, déclencher des actions de suivi.
La personnalisation est déployée de manière incrémentale. Les champs documentés ci-dessus — `activation_steps_prepend`, `activation_steps_append`, `persistent_facts`, `on_complete` — sont la **surface de base** que chaque workflow personnalisable expose, et ils resteront stables dune version à lautre. Ils vous donnent un contrôle à grands traits dès aujourdhui : injecter des étapes pré/post, épingler du contexte fondamental, déclencher des actions de suivi.
Au fil du temps, les workflows individuels exposeront des **points de personnalisation plus ciblés** adaptés à ce que le workflow fait réellement — par exemple des bascules par étape, des drapeaux détape, des chemins de templates de sortie ou des jalons de revue. Quand ils arriveront, ils viendront sajouter aux champs de base plutôt que de les remplacer, pour que les personnalisations que vous rédigez aujourdhui continuent de fonctionner.
@ -359,12 +359,12 @@ Loverride prévaut sur ce que chaque développeur a répondu lors de son inst
| Besoin | Utiliser |
|----------------------------------------------------------|-------------------------------------------------------------------------------|
| Ajouter des appels doutils MCP à chaque workflow de dev | Par skill : `_bmad/custom/bmad-agent-dev.toml` `persistent_facts` |
| Ajouter un élément de menu à un agent | Par skill : `_bmad/custom/bmad-agent-{role}.toml` `[[agent.menu]]` |
| Remplacer le template de sortie dun workflow | Par skill : `_bmad/custom/{workflow}.toml` override scalaire |
| Renommer le descripteur public dun agent | **Centrale** : `_bmad/custom/config.toml` `[agents.<code>]` |
| Ajouter un agent personnalisé ou fictif au registre | **Centrale** : `_bmad/custom/config.*.toml` nouvelle entrée `[agents.<code>]` |
| Figer les paramètres dinstallation pour léquipe | **Centrale** : `_bmad/custom/config.toml` `[modules.<code>]` ou `[core]` |
| Ajouter des appels doutils MCP à chaque workflow de dev | Par skill : `_bmad/custom/bmad-agent-dev.toml` `persistent_facts` |
| Ajouter un élément de menu à un agent | Par skill : `_bmad/custom/bmad-agent-{role}.toml` `[[agent.menu]]` |
| Remplacer le template de sortie dun workflow | Par skill : `_bmad/custom/{workflow}.toml` override scalaire |
| Renommer le descripteur public dun agent | **Centrale** : `_bmad/custom/config.toml` `[agents.<code>]` |
| Ajouter un agent personnalisé ou fictif au registre | **Centrale** : `_bmad/custom/config.*.toml` nouvelle entrée `[agents.<code>]` |
| Figer les paramètres dinstallation pour léquipe | **Centrale** : `_bmad/custom/config.toml` `[modules.<code>]` ou `[core]` |
Utilisez les deux espaces dans le même projet selon vos besoins.
@ -377,7 +377,7 @@ Pour des recettes orientées entreprise (façonner un agent à travers tous les
**La personnalisation napparaît pas?**
- Vérifiez que votre fichier se trouve dans `_bmad/custom/` avec le nom de skill correct
- Vérifiez la syntaxe TOML : les chaînes doivent être entre guillemets, les en-têtes de table utilisent `[section]`, les tableaux de tables utilisent `[[section]]`, et toute clé scalaire ou de tableau pour une table doit apparaître *avant* toute `[[sous-table]]` de cette table dans le fichier
- Vérifiez la syntaxe TOML : les chaînes doivent être entre guillemets, les en-têtes de table utilisent `[section]`, les tableaux de tables utilisent `[[section]]`, et toute clé scalaire ou de tableau pour une table doit apparaître *avant* toute `[[sous-table]]` de cette table dans le fichier
- Pour les agents, la personnalisation se trouve sous `[agent]` — les champs écrits sous cet en-tête appartiennent à `agent` jusquà ce quun autre en-tête de table commence
- Rappelez-vous que `agent.name` et `agent.title` sont en lecture seule; les overrides nont aucun effet

View File

@ -15,7 +15,7 @@ Ce guide couvre le flux de travail essentiel pour lintégration à des projet
- Accès à un IDE IA (Claude Code ou Cursor)
:::
## Étape 1 : Nettoyer les artefacts de planification terminés
## Étape 1 : Nettoyer les artefacts de planification terminés
Si vous avez terminé tous les epics et stories du PRD[^1] via le processus BMad, nettoyez ces fichiers. Archivez-les, supprimez-les, ou appuyez-vous sur lhistorique des versions si nécessaire. Ne conservez pas ces fichiers dans :
@ -23,7 +23,7 @@ Si vous avez terminé tous les epics et stories du PRD[^1] via le processus BMad
- `_bmad-output/planning-artifacts/`
- `_bmad-output/implementation-artifacts/`
## Étape 2 : Créer le contexte du projet
## Étape 2 : Créer le contexte du projet
:::tip[Recommandé pour les projets existants]
Générez `project-context.md` pour capturer les patterns et conventions de votre base de code existante. Cela garantit que les agents IA suivent vos pratiques établies lors de limplémentation des modifications.
@ -46,7 +46,7 @@ Vous pouvez examiner et affiner le fichier généré, ou le créer manuellement
[En savoir plus sur le contexte du projet](../explanation/project-context.md)
## Étape 3 : Maintenir une documentation de projet de qualité
## Étape 3 : Maintenir une documentation de projet de qualité
Votre dossier `docs/` doit contenir une documentation succincte et bien organisée qui représente fidèlement votre projet :
@ -57,9 +57,9 @@ Votre dossier `docs/` doit contenir une documentation succincte et bien organis
Pour les projets complexes, envisagez dutiliser le workflow `bmad-document-project`. Il offre des variantes dexécution qui analyseront lensemble de votre projet et documenteront son état actuel réel.
## Étape 4 : Obtenir de laide
## Étape 4 : Obtenir de laide
### BMad-Help : Votre point de départ
### BMad-Help : Votre point de départ
**Exécutez `bmad-help` chaque fois que vous nêtes pas sûr de la prochaine étape.** Ce guide intelligent :
@ -79,10 +79,10 @@ BMad-Help sexécute également **automatiquement à la fin de chaque workflow
Vous avez deux options principales selon lampleur des modifications :
| Portée | Approche recommandée |
|-------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Petites mises à jour ou ajouts** | Exécutez `bmad-quick-dev` pour clarifier lintention, planifier, implémenter et réviser dans un seul workflow. La méthode BMad complète en quatre phases est probablement excessive. |
| **Modifications ou ajouts majeurs** | Commencez avec la méthode BMad, en appliquant autant ou aussi peu de rigueur que nécessaire. |
| Portée | Approche recommandée |
| ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| **Petites mises à jour ou ajouts** | Exécutez `bmad-quick-dev` pour clarifier lintention, planifier, implémenter et réviser dans un seul workflow. La méthode BMad complète en quatre phases est probablement excessive. |
| **Modifications ou ajouts majeurs** | Commencez avec la méthode BMad, en appliquant autant ou aussi peu de rigueur que nécessaire. |
### Pendant la création du PRD

View File

@ -28,13 +28,13 @@ Avant de choisir une recette, comprenez où votre override se situe :
| **Workflow** (ex. product-brief, create-prd) | Section `[workflow]` de `_bmad/custom/{workflow-name}.toml` | Sapplique uniquement à lexécution de ce workflow |
| **Configuration centrale** | `[agents.*]`, `[core]`, `[modules.*]` dans `_bmad/custom/config.toml` | Registre des agents (qui est disponible pour party-mode, retrospective, elicitation), paramètres dinstallation figés pour toute lorganisation |
En règle générale : si la règle doit sappliquer partout où un ingénieur travaille sur le développement, personnalisez l'**agent dev**. Si elle sapplique uniquement quand quelquun rédige un product brief, personnalisez le **workflow product-brief**. Si elle change *qui participe* (renommer un agent, ajouter une voix personnalisée, imposer un chemin dartefact partagé), modifiez la **configuration centrale**.
En règle générale : si la règle doit sappliquer partout où un ingénieur travaille sur le développement, personnalisez l'**agent dev**. Si elle sapplique uniquement quand quelquun rédige un product brief, personnalisez le **workflow product-brief**. Si elle change *qui participe* (renommer un agent, ajouter une voix personnalisée, imposer un chemin dartefact partagé), modifiez la **configuration centrale**.
## Recette 1 : Façonner un agent à travers tous les workflows quil dispatche
## Recette 1 : Façonner un agent à travers tous les workflows quil dispatche
**Cas dusage :** Standardiser lutilisation des outils et les intégrations avec les systèmes externes pour que chaque workflow dispatché par un agent hérite du comportement. Cest le pattern le plus impactant.
**Cas dusage :** Standardiser lutilisation des outils et les intégrations avec les systèmes externes pour que chaque workflow dispatché par un agent hérite du comportement. Cest le pattern le plus impactant.
**Exemple : Amelia (agent dev) utilise toujours Context7 pour la documentation des bibliothèques, et se rabat sur Linear quand une story nest pas trouvée dans la liste des epics.**
**Exemple : Amelia (agent dev) utilise toujours Context7 pour la documentation des bibliothèques, et se rabat sur Linear quand une story nest pas trouvée dans la liste des epics.**
```toml
# _bmad/custom/bmad-agent-dev.toml
@ -49,17 +49,17 @@ persistent_facts = [
]
```
**Pourquoi ça marche :** Deux phrases suffisent à reconfigurer tous les workflows de dev de lorganisation, sans duplication par workflow ni modification du code source. Chaque nouvel ingénieur qui clone le dépôt hérite automatiquement des conventions.
**Pourquoi ça marche :** Deux phrases suffisent à reconfigurer tous les workflows de dev de lorganisation, sans duplication par workflow ni modification du code source. Chaque nouvel ingénieur qui clone le dépôt hérite automatiquement des conventions.
**Fichier déquipe vs fichier personnel :**
- `bmad-agent-dev.toml` : versionné dans git; sapplique à toute léquipe
- `bmad-agent-dev.user.toml` : ignoré par git; préférences personnelles ajoutées par-dessus
**Fichier déquipe vs fichier personnel :**
- `bmad-agent-dev.toml` : versionné dans git; sapplique à toute léquipe
- `bmad-agent-dev.user.toml` : ignoré par git; préférences personnelles ajoutées par-dessus
## Recette 2 : Imposer les conventions de lorganisation dans un workflow spécifique
## Recette 2 : Imposer les conventions de lorganisation dans un workflow spécifique
**Cas dusage :** Façonner le *contenu* de la sortie dun workflow pour quil réponde aux exigences de conformité, daudit ou des consommateurs en aval.
**Cas dusage :** Façonner le *contenu* de la sortie dun workflow pour quil réponde aux exigences de conformité, daudit ou des consommateurs en aval.
**Exemple : chaque product brief doit inclure des champs de conformité, et lagent connaît les conventions de publication de lorganisation.**
**Exemple : chaque product brief doit inclure des champs de conformité, et lagent connaît les conventions de publication de lorganisation.**
```toml
# _bmad/custom/bmad-product-brief.toml
@ -73,13 +73,13 @@ persistent_facts = [
]
```
**Ce qui se passe :** Les faits sont chargés durant létape 3 de lactivation du workflow. Quand lagent rédige le brief, il connaît les champs requis et le document de conventions enterprise. La valeur par défaut livrée (`file:{project-root}/**/project-context.md`) se charge toujours, car il sagit dun ajout.
**Ce qui se passe :** Les faits sont chargés durant létape 3 de lactivation du workflow. Quand lagent rédige le brief, il connaît les champs requis et le document de conventions enterprise. La valeur par défaut livrée (`file:{project-root}/**/project-context.md`) se charge toujours, car il sagit dun ajout.
## Recette 3 : Publier les livrables finis vers des systèmes externes
## Recette 3 : Publier les livrables finis vers des systèmes externes
**Cas dusage :** Une fois le livrable produit, le publier automatiquement vers les systèmes de référence de lentreprise (Confluence, Notion, SharePoint) et créer des tickets de suivi (Jira, Linear, Asana).
**Cas dusage :** Une fois le livrable produit, le publier automatiquement vers les systèmes de référence de lentreprise (Confluence, Notion, SharePoint) et créer des tickets de suivi (Jira, Linear, Asana).
**Exemple : les briefs sont automatiquement publiés vers Confluence et proposent la création facultative dun epic Jira.**
**Exemple : les briefs sont automatiquement publiés vers Confluence et proposent la création facultative dun epic Jira.**
```toml
# _bmad/custom/bmad-product-brief.toml
@ -112,18 +112,18 @@ et demander à l'utilisateur de publier manuellement.
"""
```
**Pourquoi `on_complete` et pas `activation_steps_append` :** `on_complete` sexécute exactement une fois, au stade terminal, après que le workflow a écrit sa sortie principale. Cest le bon moment pour publier des artefacts. `activation_steps_append` sexécute à chaque activation, avant que le workflow ne fasse son travail.
**Pourquoi `on_complete` et pas `activation_steps_append` :** `on_complete` sexécute exactement une fois, au stade terminal, après que le workflow a écrit sa sortie principale. Cest le bon moment pour publier des artefacts. `activation_steps_append` sexécute à chaque activation, avant que le workflow ne fasse son travail.
**Arbitrages :**
**Arbitrages :**
- **La publication Confluence est non-destructive** et sexécute toujours à la fin
- **La création depic Jira est visible par toute léquipe** et déclenche un processus de planification de sprint, conditionnez-la donc à la confirmation de lutilisateur
- **Dégradation gracieuse :** si les outils MCP échouent, passer la main à lutilisateur plutôt que de silencieusement abandonner le livrable
- **Dégradation gracieuse :** si les outils MCP échouent, passer la main à lutilisateur plutôt que de silencieusement abandonner le livrable
## Recette 4 : Remplacer le template de sortie par le vôtre
## Recette 4 : Remplacer le template de sortie par le vôtre
**Cas dusage :** La structure de sortie par défaut ne correspond pas au format attendu par votre organisation, ou différentes organisations dans le même dépôt ont besoin de templates différents.
**Cas dusage :** La structure de sortie par défaut ne correspond pas au format attendu par votre organisation, ou différentes organisations dans le même dépôt ont besoin de templates différents.
**Exemple : pointer le workflow product-brief vers un template appartenant à lentreprise.**
**Exemple : pointer le workflow product-brief vers un template appartenant à lentreprise.**
```toml
# _bmad/custom/bmad-product-brief.toml
@ -132,16 +132,16 @@ et demander à l'utilisateur de publier manuellement.
brief_template = "{project-root}/docs/enterprise/brief-template.md"
```
**Comment ça marche :** Le `customize.toml` du workflow est fourni avec `brief_template = "resources/brief-template.md"` (chemin relatif, résolu depuis la racine du skill). Votre override pointe vers un fichier sous `{project-root}`, donc lagent lit votre template à létape 4 au lieu de celui livré par défaut.
**Comment ça marche :** Le `customize.toml` du workflow est fourni avec `brief_template = "resources/brief-template.md"` (chemin relatif, résolu depuis la racine du skill). Votre override pointe vers un fichier sous `{project-root}`, donc lagent lit votre template à létape 4 au lieu de celui livré par défaut.
**Conseils pour la rédaction de templates :**
**Conseils pour la rédaction de templates :**
- Gardez les templates dans `{project-root}/docs/` ou `{project-root}/_bmad/custom/templates/` pour quils soient versionnés avec le fichier doverride
- Utilisez les mêmes conventions structurelles que le template livré (titres de sections, frontmatter); lagent sadapte à ce quil trouve
- Pour les dépôts multi-organisations, utilisez `.user.toml` pour permettre à chaque équipe de pointer vers ses propres templates sans toucher au fichier déquipe versionné dans git
## Recette 5 : Personnaliser le registre des agents
## Recette 5 : Personnaliser le registre des agents
**Cas dusage :** Changer *qui sera présent dans la pièce* pour les skills basés sur le registre comme `bmad-party-mode`, `bmad-retrospective` et `bmad-advanced-elicitation`, sans modifier le code source ni forker. Voici trois variantes courantes.
**Cas dusage :** Changer *qui sera présent dans la pièce* pour les skills basés sur le registre comme `bmad-party-mode`, `bmad-retrospective` et `bmad-advanced-elicitation`, sans modifier le code source ni forker. Voici trois variantes courantes.
### 5a. Renommer un agent BMad pour toute lorganisation
@ -197,18 +197,18 @@ document_output_language = "English"
Les paramètres personnels comme `user_name`, `communication_language` ou `user_skill_level` restent dans leur propre fichier `_bmad/config.user.toml` de chaque développeur. Le fichier déquipe ne doit pas les modifier.
**Pourquoi la configuration centrale vs le customize.toml par agent :** Les fichiers par agent façonnent la façon dont *un seul* agent se comporte quand il sactive. La configuration centrale façonne ce que les consommateurs du registre *voient* : quels agents existent, comment ils sappellent, à quelle équipe ils appartiennent, et les paramètres dinstallation partagés sur lesquels tout le dépôt saccorde. Deux surfaces, des rôles différents.
**Pourquoi la configuration centrale vs le customize.toml par agent :** Les fichiers par agent façonnent la façon dont *un seul* agent se comporte quand il sactive. La configuration centrale façonne ce que les consommateurs du registre *voient* : quels agents existent, comment ils sappellent, à quelle équipe ils appartiennent, et les paramètres dinstallation partagés sur lesquels tout le dépôt saccorde. Deux surfaces, des rôles différents.
## Renforcer les règles globales dans le fichier de session de votre IDE
Les personnalisations BMad se chargent quand un skill est activé. Beaucoup doutils IDE chargent aussi un fichier dinstructions global au **début de chaque session**, avant tout skill (`CLAUDE.md`, `AGENTS.md`, `.cursor/rules/`, `.github/copilot-instructions.md`, etc.). Pour les règles qui doivent sappliquer même en dehors des skills BMad, reproduisez-y les plus critiques.
**Quand les utiliser ensemble :**
**Quand les utiliser ensemble :**
- Une règle est suffisamment importante pour quune conversation simple (sans skill actif) doive la respecter
- Vous voulez une double sécurisation parce que les défauts des données dentraînement pourraient autrement détourner le modèle
- La règle est assez concise pour être répétée sans alourdir le fichier de session
**Exemple : une ligne dans le `CLAUDE.md` du dépôt renforçant la règle de lagent dev de la Recette 1.**
**Exemple : une ligne dans le `CLAUDE.md` du dépôt renforçant la règle de lagent dev de la Recette 1.**
```markdown
<!-- Toute lecture de documentation de bibliothèque passe par l'outil MCP context7
@ -227,7 +227,7 @@ Une phrase, chargée à chaque session. Elle sassocie à la personnalisation
Gardez le fichier IDE **concis**. Une douzaine de lignes bien choisies sont plus efficaces quune liste étendue. Les modèles le lisent à chaque tour, et le superflu noie linformation utile.
## Recette 6 : Patterns dintégration avancés
## Recette 6 : Patterns dintégration avancés
Plusieurs workflows BMad exposent une surface de configuration plus riche au-delà des bases couvertes dans les Recettes 15. Ces patterns — sources de connaissance à la demande, publication automatique des livrables, standards de documentation à la finalisation et templates interchangeables — apparaissent dans plusieurs workflows. Consultez le `customize.toml` dun workflow pour voir quels champs il expose; les exemples ci-dessous utilisent `bmad-prd` car il les expose tous, mais les mêmes patterns sappliquent partout où le champ apparaît.
@ -317,7 +317,7 @@ on_complete = """ ... """
persistent_facts = ["Toujours inclure une section 'Revue réglementaire' quand le domaine implique la santé, la finance ou les données d'enfants."]
```
Résultat : Mary charge la règle de revue réglementaire à lactivation de son persona. Quand lutilisateur choisit le product brief dans le menu, le workflow charge ses propres conventions par-dessus, écrit avec le template enterprise et publie vers Confluence à la fin. Chaque couche contribue, et aucune na nécessité de modifier le code source de BMad.
Résultat : Mary charge la règle de revue réglementaire à lactivation de son persona. Quand lutilisateur choisit le product brief dans le menu, le workflow charge ses propres conventions par-dessus, écrit avec le template enterprise et publie vers Confluence à la fin. Chaque couche contribue, et aucune na nécessité de modifier le code source de BMad.
## Dépannage

View File

@ -28,12 +28,12 @@ BMad-Help sappuie sur votre configuration installée. Pour les questions sur
Clonez ou ouvrez le [dépôt BMAD-METHOD](https://github.com/bmad-code-org/BMAD-METHOD) et posez vos questions à votre IA. Tout outil capable dutiliser des agents (Claude Code, Cursor, Windsurf, etc.) peut lire les sources et répondre directement à vos questions.
:::note[Exemple]
**Q :** «Quel est le moyen le plus rapide de construire quelque chose avec BMad? »
**Q :** «Quel est le moyen le plus rapide de construire quelque chose avec BMad? »
**R :** Utilisez le flux rapide : Lancez `bmad-quick-dev` — il clarifie votre intention, planifie, implémente, révise et présente les résultats dans un seul workflow, en sautant les phases de planification complètes.
**R :** Utilisez le flux rapide : Lancez `bmad-quick-dev` — il clarifie votre intention, planifie, implémente, révise et présente les résultats dans un seul workflow, en sautant les phases de planification complètes.
:::
**Conseils pour de meilleures réponses :**
**Conseils pour de meilleures réponses :**
- **Soyez précis** — «Que fait létape 3 du workflow PRD? » est mieux que «Comment fonctionne le PRD? »
- **Vérifiez les affirmations surprenantes** — Les LLM font parfois des erreurs. Consultez le fichier source ou posez la question sur Discord.
@ -46,14 +46,14 @@ Si votre IA ne peut pas lire des fichiers locaux (ChatGPT, Claude.ai, etc.), imp
Si ni BMad-Help ni la source nont répondu à votre question, vous avez maintenant une bien meilleure question à poser.
| Canal | Utilisé pour |
|-------------------------|--------------------------------------|
| Forum `help-requests` | Questions |
| `#suggestions-feedback` | Idées et demandes de fonctionnalités |
| Canal | Utilisé pour |
| ------------------------- | ------------------------------------------- |
| Forum `help-requests` | Questions |
| `#suggestions-feedback` | Idées et demandes de fonctionnalités |
**Discord :** [discord.gg/gk8jAdXWmj](https://discord.gg/gk8jAdXWmj)
**Discord :** [discord.gg/gk8jAdXWmj](https://discord.gg/gk8jAdXWmj)
**GitHub Issues :** [github.com/bmad-code-org/BMAD-METHOD/issues](https://github.com/bmad-code-org/BMAD-METHOD/issues)
**GitHub Issues :** [github.com/bmad-code-org/BMAD-METHOD/issues](https://github.com/bmad-code-org/BMAD-METHOD/issues)
*Toi!*
*Bloqué*
*dans la file dattente—*

View File

@ -51,7 +51,7 @@ Exécute linstallateur de préversion, qui fournit un snapshot plus récent d
Deux axes indépendants contrôlent ce qui se retrouve sur le disque.
### Axe 1 : canaux des modules externes
### Axe 1 : canaux des modules externes
Chaque module externe — bmb, cis, gds, tea, et tout module communautaire — sinstalle via lun des trois canaux suivants :
@ -63,7 +63,7 @@ Chaque module externe — bmb, cis, gds, tea, et tout module communautaire — s
Les canaux sont définis module par module. Vous pouvez exécuter bmb sur `next` tout en laissant cis sur `stable` — les options ci-dessous permettent de les combiner librement.
### Axe 2 : version du binaire de linstallateur
### Axe 2 : version du binaire de linstallateur
Le paquet npm `bmad-method` lui-même a deux dist-tags :
@ -88,10 +88,10 @@ Ils sont liés au binaire de linstallateur que vous avez exécuté :
Exécuter `npx bmad-method install` dans un répertoire contenant déjà `_bmad/` affiche un menu :
| Choix | Ce quil fait |
|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **Quick Update** | Réexécute linstallation avec vos paramètres existants. Rafraîchit les fichiers, applique les correctifs et les mises à niveau mineures du canal stable, refuse les mises à niveau majeures. Rapide, non interactif. |
| **Modify Install** | Flux interactif complet. Ajoutez ou retirez des modules, reconfigurez les paramètres, examinez et, si besoin, modifiez les canaux des modules existants. |
| Choix | Ce quil fait |
| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Quick Update** | Réexécute linstallation avec vos paramètres existants. Rafraîchit les fichiers, applique les correctifs et les mises à niveau mineures du canal stable, refuse les mises à niveau majeures. Rapide, non interactif. |
| **Modify Install** | Flux interactif complet. Ajoutez ou retirez des modules, reconfigurez les paramètres, examinez et, si besoin, modifiez les canaux des modules existants. |
### Invites de mise à niveau
@ -109,9 +109,9 @@ Avec `--yes`, les mises à niveau patch et mineure sappliquent automatiquemen
### Changer le canal dun module
**En mode interactif :** choisissez Modify → répondez **Oui** à «Review channel assignments? » → chaque module externe offre Conserver, Basculer vers stable, Basculer vers next, ou Épingler à un tag.
**En mode interactif :** choisissez Modify → répondez **Oui** à «Review channel assignments? » → chaque module externe offre Conserver, Basculer vers stable, Basculer vers next, ou Épingler à un tag.
**En ligne de commande :** les recettes dans la section suivante couvrent les cas courants.
**En ligne de commande :** les recettes dans la section suivante couvrent les cas courants.
## Installations CI non interactives
@ -120,7 +120,7 @@ Avec `--yes`, les mises à niveau patch et mineure sappliquent automatiquemen
| Option | Objectif |
|--------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `--yes`, `-y` | Ignorer toutes les invites; accepter les valeurs des options + les défauts |
| `--directory <chemin>` | Installer dans ce répertoire (défaut : répertoire de travail courant) |
| `--directory <chemin>` | Installer dans ce répertoire (défaut : répertoire de travail courant) |
| `--modules <a,b,c>` | Ensemble exact de modules. Core est ajouté automatiquement. Ce nest pas un delta — listez tout ce que vous voulez conserver. |
| `--tools <a,b>` | Sélection dIDE/outil. Requis pour les nouvelles installations `--yes`. Exécutez `--list-tools` pour les IDs valides. |
| `--list-tools` | Afficher tous les IDs doutils/IDE supportés (avec les répertoires cibles) et quitter. |
@ -135,7 +135,7 @@ Avec `--yes`, les mises à niveau patch et mineure sappliquent automatiquemen
| `--list-options [module]` | Afficher chaque clé `--set` pour les modules intégrés et officiels en cache local, puis quitter. Passez un code de module pour limiter à un seul module. |
| `--user-name`, `--communication-language`, `--document-output-language`, `--output-folder` | Raccourcis historiques équivalents à `--set core.<clé>=<valeur>` (toujours supportés) |
Priorité en cas de chevauchement des options : `--pin` bat `--next=` bat `--channel` / `--all-*` bat le défaut du registre (`stable`).
Priorité en cas de chevauchement des options : `--pin` bat `--next=` bat `--channel` / `--all-*` bat le défaut du registre (`stable`).
:::note[Exemple de résolution]
`--all-next --pin cis=v0.2.0` met bmb, gds et tea sur next tout en épinglant cis à v0.2.0.
@ -143,13 +143,13 @@ Priorité en cas de chevauchement des options : `--pin` bat `--next=` bat `--ch
### Recettes
**Installation par défaut — dernière version stable pour tout :**
**Installation par défaut — dernière version stable pour tout :**
```bash
npx bmad-method install --yes --modules bmm,bmb,cis --tools claude-code
```
**Installation entreprise verrouillée — reproductible à loctet près :**
**Installation entreprise verrouillée — reproductible à loctet près :**
```bash
npx bmad-method install --yes \
@ -158,7 +158,7 @@ npx bmad-method install --yes \
--tools claude-code
```
**Bleeding edge — externes sur le HEAD de main :**
**Bleeding edge — externes sur le HEAD de main :**
```bash
npx bmad-method install --yes --modules bmm,bmb --all-next --tools claude-code
@ -173,7 +173,7 @@ npx bmad-method install --yes --action update \
`--tools` est omis intentionnellement — `--action update` réutilise les outils configurés lors de la première installation.
**Mixer les canaux — bmb sur next, gds sur stable :**
**Mixer les canaux — bmb sur next, gds sur stable :**
```bash
npx bmad-method install --yes --action update \
@ -183,9 +183,9 @@ npx bmad-method install --yes --action update \
### Substitutions de config de module
`--set <module>.<clé>=<valeur>` vous permet de définir toute option de config de module de manière non interactive. Cette option est répétable et sadapte à chaque module — présent et futur. Loption est appliquée comme un correctif post-installation : linstallateur exécute dabord son flux normal, puis `--set` insère ou met à jour chaque valeur dans `_bmad/config.toml` (portée équipe) ou `_bmad/config.user.toml` (portée utilisateur), et dans `_bmad/<module>/config.yaml` pour que les valeurs déclarées soient conservées à la prochaine installation.
`--set <module>.<clé>=<valeur>` vous permet de définir toute option de config de module de manière non interactive. Cette option est répétable et sadapte à chaque module — présent et futur. Loption est appliquée comme un correctif post-installation : linstallateur exécute dabord son flux normal, puis `--set` insère ou met à jour chaque valeur dans `_bmad/config.toml` (portée équipe) ou `_bmad/config.user.toml` (portée utilisateur), et dans `_bmad/<module>/config.yaml` pour que les valeurs déclarées soient conservées à la prochaine installation.
**Exemple — installer bmm avec des connaissances projet et un niveau de compétence explicites :**
**Exemple — installer bmm avec des connaissances projet et un niveau de compétence explicites :**
```bash
npx bmad-method install --yes \
@ -195,7 +195,7 @@ npx bmad-method install --yes \
--set bmm.user_skill_level=expert
```
**Découvrir les clés disponibles pour un module :**
**Découvrir les clés disponibles pour un module :**
```bash
npx bmad-method install --list-options bmm
@ -203,10 +203,10 @@ npx bmad-method install --list-options bmm
`--list-options` (sans argument) liste chaque clé que linstallateur peut trouver localement — modules intégrés (`core`, `bmm`) plus tous les modules officiels actuellement en cache. Le cache est par machine et peut être vidé, donc les modules officiels précédemment installés napparaîtront pas sur un nouveau checkout ou un worker CI éphémère tant quils ne sont pas réinstallés. Les modules communautaires et personnalisés ne sont pas énumérés ici; lisez directement le `module.yaml` du module pour voir les clés quil déclare.
**Comment ça fonctionne :**
**Comment ça fonctionne :**
- **Routage.** Létape de correctif cherche `[modules.<module>] <clé>` (ou `[core] <clé>`) dans `config.user.toml` en premier; si elle y est trouvée, elle met à jour ce fichier. Sinon elle écrit dans le `config.toml` de portée équipe. Ainsi, les clés de portée utilisateur (ex. `core.user_name`, `bmm.user_skill_level`) finissent dans `config.user.toml` et les clés de portée équipe dans `config.toml`, correspondant à la partition utilisée par linstallateur.
- **Valeurs littérales.** La valeur est écrite exactement comme vous lavez fournie — aucun rendu de template `result:`. Pour obtenir la valeur résolue (ex. `{project-root}/research`), passez-la explicitement : `--set bmm.project_knowledge='{project-root}/research'`.
- **Valeurs littérales.** La valeur est écrite exactement comme vous lavez fournie — aucun rendu de template `result:`. Pour obtenir la valeur résolue (ex. `{project-root}/research`), passez-la explicitement : `--set bmm.project_knowledge='{project-root}/research'`.
- **Persistance, clés déclarées.** Les valeurs pour les clés déclarées dans `module.yaml` sont conservées entre les installations car elles sont aussi écrites dans `_bmad/<module>/config.yaml`, que linstallateur lit comme valeur par défaut de linvite lors de la prochaine exécution.
- **Persistance, clés non déclarées.** Une valeur pour une clé que le schéma du module ne déclare pas est enregistrée dans `config.toml` pour linstallation courante mais ne sera pas réécrite à la prochaine installation (le partitionneur strict au schéma du manifeste ignore les clés inconnues). Repassez `--set` pour quelle soit persistante, ou éditez `_bmad/config.toml` directement.
- **Pas de validation.** Les valeurs `single-select` ne sont pas vérifiées contre les choix autorisés, et les clés inconnues ne sont pas rejetées — la valeur fournie est écrite telle quelle.
@ -221,7 +221,7 @@ Les raccourcis historiques de core (`--user-name`, `--output-folder`, etc.) fonc
:::caution[Limitation de débit sur les IPs partagées]
Les appels anonymes à lAPI GitHub sont limités à 60/heure par IP. Une seule installation fait un appel API par module externe pour résoudre le tag stable. Les bureaux derrière NAT, les pools de runners CI et les VPN peuvent collectivement épuiser cette limite.
Définissez `GITHUB_TOKEN=<personal access token>` dans lenvironnement pour augmenter la limite à 5000/heure par compte. Tout PAT avec accès en lecture aux dépôts publics fonctionne; aucune portée spécifique nest requise.
Définissez `GITHUB_TOKEN=<personal access token>` dans lenvironnement pour augmenter la limite à 5000/heure par compte. Tout PAT avec accès en lecture aux dépôts publics fonctionne; aucune portée spécifique nest requise.
:::
## Ce qui a été installé

View File

@ -109,10 +109,10 @@ Plusieurs sources peuvent être séparées par des virgules :
Linstallateur utilise deux modes pour trouver les modules installables dans une source :
| Mode | Déclencheur | Comportement |
|------------|------------------------------------------------------|------------------------------------------------------------------------------------------------------------------|
| Découverte | La source contient `.claude-plugin/marketplace.json` | Liste tous les plugins du manifeste; vous choisissez lesquels installer |
| Direct | Aucun `marketplace.json` trouvé | Analyse le répertoire pour trouver des skills (sous-répertoires avec `SKILL.md`), les résout en un module unique |
| Mode | Déclencheur | Comportement |
| ----------- | ------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| Découverte | La source contient `.claude-plugin/marketplace.json` | Liste tous les plugins du manifeste; vous choisissez lesquels installer |
| Direct | Aucun `marketplace.json` trouvé | Analyse le répertoire pour trouver des skills (sous-répertoires avec `SKILL.md`), les résout en un module unique |
Le mode découverte est typique des modules publiés. Le mode direct est pratique pour pointer vers un répertoire de skills pendant le développement local.
@ -162,8 +162,8 @@ Le manifeste enregistre la source de chaque module personnalisé (`repoUrl` pour
Les modules personnalisés participent au flux de mise à jour normal :
- **Mise à jour rapide** (`--action quick-update`) : Rafraîchit tous les modules depuis leurs sources dorigine. Les modules Git sont re-téléchargés; les modules locaux sont relus depuis leur chemin source.
- **Mise à jour complète** : Relance la sélection de modules pour que vous puissiez ajouter ou retirer des modules personnalisés.
- **Mise à jour rapide** (`--action quick-update`) : Rafraîchit tous les modules depuis leurs sources dorigine. Les modules Git sont re-téléchargés; les modules locaux sont relus depuis leur chemin source.
- **Mise à jour complète** : Relance la sélection de modules pour que vous puissiez ajouter ou retirer des modules personnalisés.
## Créer vos propres modules

View File

@ -19,7 +19,7 @@ Utilisez le fichier `project-context.md` pour garantir que les agents IA respect
- Vous travaillez sur une base de code existante avec des patterns établis
- Vous remarquez que les agents prennent des décisions incohérentes entre les stories
## Étape 1 : Choisissez votre approche
## Étape 1 : Choisissez votre approche
**Création manuelle** — Idéal lorsque vous savez exactement quelles règles vous souhaitez documenter
@ -27,9 +27,9 @@ Utilisez le fichier `project-context.md` pour garantir que les agents IA respect
**Génération pour les projets existants** — Idéal pour découvrir les patterns dans les bases de code existantes
## Étape 2 : Créez le fichier
## Étape 2 : Créez le fichier
### Option A : Création manuelle
### Option A : Création manuelle
Créez le fichier à lemplacement `_bmad-output/project-context.md` :
@ -72,7 +72,7 @@ sections_completed: ['technology_stack', 'critical_rules']
- Tests d'intégration utilisent MSW pour le mock API
```
### Option B : Génération après larchitecture
### Option B : Génération après larchitecture
Exécutez le workflow dans une nouvelle conversation :
@ -82,7 +82,7 @@ bmad-generate-project-context
Le workflow analyse votre document darchitecture et vos fichiers projet pour générer un fichier de contexte qui capture les décisions prises.
### Option C : Génération pour les projets existants
### Option C : Génération pour les projets existants
Pour les projets existants, exécutez :
@ -92,7 +92,7 @@ bmad-generate-project-context
Le workflow analyse votre base de code pour identifier les conventions, puis génère un fichier de contexte que vous pouvez réviser et affiner.
## Étape 3 : Vérifiez le contenu
## Étape 3 : Vérifiez le contenu
Révisez le fichier généré et assurez-vous quil capture :

View File

@ -45,7 +45,7 @@ Les nouveaux skills v6 sont installés dans :
### 4. Migrer les artefacts de planification
**Si vous avez des documents de planification (Brief/PRD/UX/Architecture) :**
**Si vous avez des documents de planification (Brief/PRD/UX/Architecture) :**
Déplacez-les dans `_bmad-output/planning-artifacts/` avec des noms descriptifs :
@ -53,7 +53,7 @@ Déplacez-les dans `_bmad-output/planning-artifacts/` avec des noms descriptifs
- Incluez `brief`, `architecture`, ou `ux-design` selon le cas
- Les documents divisés peuvent être dans des sous-dossiers au nom descriptif
**Si vous êtes en cours de planification :** Envisagez de recommencer avec les workflows v6. Utilisez vos documents existants comme entrées — les nouveaux workflows de découverte progressive avec recherche web et le mode plan de lIDE produisent de meilleurs résultats.
**Si vous êtes en cours de planification :** Envisagez de recommencer avec les workflows v6. Utilisez vos documents existants comme entrées — les nouveaux workflows de découverte progressive avec recherche web et le mode plan de lIDE produisent de meilleurs résultats.
### 5. Migrer le développement en cours
@ -66,7 +66,7 @@ Si vous avez des stories[^3] créées ou implémentées :
## Résultat de la migration
**Structure unifiée v6 :**
**Structure unifiée v6 :**
```text
votre-projet/
@ -82,22 +82,22 @@ votre-projet/
## Migration des modules
| Module v4 | Statut v6 |
|-------------------------------|---------------------------------------------------|
| `.bmad-2d-phaser-game-dev` | Intégré dans le Module BMGD |
| `.bmad-2d-unity-game-dev` | Intégré dans le Module BMGD |
| `.bmad-godot-game-dev` | Intégré dans le Module BMGD |
| `.bmad-infrastructure-devops` | Obsolète — nouvel agent DevOps bientôt disponible |
| `.bmad-creative-writing` | Non migré — nouveau module v6 bientôt disponible |
| Module v4 | Statut v6 |
| ----------------------------- | ------------------------------------------------------ |
| `.bmad-2d-phaser-game-dev` | Intégré dans le Module BMGD |
| `.bmad-2d-unity-game-dev` | Intégré dans le Module BMGD |
| `.bmad-godot-game-dev` | Intégré dans le Module BMGD |
| `.bmad-infrastructure-devops` | Obsolète — nouvel agent DevOps bientôt disponible |
| `.bmad-creative-writing` | Non migré — nouveau module v6 bientôt disponible |
## Changements clés
| Concept | v4 | v6 |
|---------------|---------------------------------------------------------|------------------------------------------|
| Concept | v4 | v6 |
| ------------- | ------------------------------------- | ------------------------------------ |
| **Core** | `_bmad-core` correspondait en réalité à la méthode BMad | `_bmad/core/` est le framework universel |
| **Method** | `_bmad-method` | `_bmad/bmm/` |
| **Config** | Fichiers modifiés directement | `config.yaml` par module |
| **Documents** | Division en fragments obligatoire ou optionnelle | Totalement flexible, analyse automatique |
| **Method** | `_bmad-method` | `_bmad/bmm/` |
| **Config** | Fichiers modifiés directement | `config.yaml` par module |
| **Documents** | Division en fragments obligatoire ou optionnelle | Totalement flexible, analyse automatique |
## Glossaire

View File

@ -45,7 +45,7 @@ BMad fonctionne avec tout assistant de codage IA qui prend en charge les prompts
- **[Cursor](https://cursor.sh)** — Éditeur de code propulsé par lIA
- **[Codex CLI](https://github.com/openai/codex)** — Agent de codage en ligne de commande dOpenAI
Vous devriez être à laise avec les concepts de base du développement logiciel : gestion de versions, structure de projet et méthodologies agiles. Aucune expérience préalable des systèmes dagents de type BMad nest requise — cest précisément lobjet de cette documentation.
Vous devriez être à laise avec les concepts de base du développement logiciel : gestion de versions, structure de projet et méthodologies agiles. Aucune expérience préalable des systèmes dagents de type BMad nest requise — cest précisément lobjet de cette documentation.
## Rejoindre la communauté

View File

@ -32,21 +32,21 @@ Les déclencheurs de menu dagent utilisent deux types dinvocation différe
La plupart des déclencheurs chargent un fichier de workflow structuré. Tapez le code du déclencheur et lagent démarre le workflow, vous demandant de saisir les informations à chaque étape.
Exemples : `CP` (Create PRD), `DS` (Dev Story), `CA` (Create Architecture), `QD` (Quick Dev)
Exemples : `CP` (Create PRD), `DS` (Dev Story), `CA` (Create Architecture), `QD` (Quick Dev)
### Déclencheurs conversationnels (arguments requis)
Certains déclencheurs lancent une conversation libre au lieu dun workflow structuré. Ils sattendent à ce que vous décriviez ce dont vous avez besoin à côté du code du déclencheur.
| Agent | Déclencheur | Ce quil faut fournir |
|-----------------------------|-------------|-----------------------------------------------------------------|
| Rédacteur Technique (Paige) | `WD` | Description du document à rédiger |
| Rédacteur Technique (Paige) | `US` | Préférences ou conventions à ajouter aux standards |
| Rédacteur Technique (Paige) | `MG` | Description et type de diagramme (séquence, organigramme, etc.) |
| Rédacteur Technique (Paige) | `VD` | Document à valider et domaines à examiner |
| Rédacteur Technique (Paige) | `EC` | Nom du concept à expliquer |
| Agent | Déclencheur | Ce quil faut fournir |
| --- | --- | --- |
| Rédacteur Technique (Paige) | `WD` | Description du document à rédiger |
| Rédacteur Technique (Paige) | `US` | Préférences ou conventions à ajouter aux standards |
| Rédacteur Technique (Paige) | `MG` | Description et type de diagramme (séquence, organigramme, etc.) |
| Rédacteur Technique (Paige) | `VD` | Document à valider et domaines à examiner |
| Rédacteur Technique (Paige) | `EC` | Nom du concept à expliquer |
**Exemple :**
**Exemple :**
```text
WD Rédige un guide de déploiement pour notre configuration Docker

View File

@ -11,9 +11,9 @@ Les skills sont des prompts pré-construits qui chargent des agents, exécutent
BMad offre deux façons de démarrer un travail, chacune ayant un usage différent.
| Mécanisme | Comment linvoquer | Ce qui se passe |
|-------------------------------|---------------------------------------------------------------|------------------------------------------------------------------------------------------------|
| **Skill** | Tapez le nom du skill (ex. `bmad-help`) dans votre IDE | Charge directement un agent, exécute un workflow ou lance une tâche |
| Mécanisme | Comment linvoquer | Ce qui se passe |
| --- | --- | --- |
| **Skill** | Tapez le nom du skill (ex. `bmad-help`) dans votre IDE | Charge directement un agent, exécute un workflow ou lance une tâche |
| **Déclencheur du menu agent** | Chargez dabord un agent, puis tapez un code court (ex. `DS`) | Lagent interprète le code et démarre le workflow correspondant tout en préservant son persona |
Les déclencheurs du menu agent nécessitent une session agent active. Utilisez les skills lorsque vous savez quel workflow vous voulez. Utilisez les déclencheurs lorsque vous travaillez déjà avec un agent et souhaitez changer de tâche sans quitter la conversation.
@ -24,12 +24,12 @@ Lorsque vous exécutez `npx bmad-method install`, linstallateur lit les manif
Linstallateur utilise des modèles pour chaque type de skill :
| Type de skill | Ce que fait le fichier généré |
|-----------------------|--------------------------------------------------------------------------------|
| **Lanceur dagent** | Charge le fichier de persona de lagent, active son menu et reste en caractère |
| **Skill de workflow** | Charge la configuration du workflow et suit ses étapes |
| **Skill de tâche** | Charge un fichier de tâche autonome et suit ses instructions |
| **Skill doutil** | Charge un fichier doutil autonome et suit ses instructions |
| Type de skill | Ce que fait le fichier généré |
| --- | --- |
| **Lanceur dagent** | Charge le fichier de persona de lagent, active son menu et reste en caractère |
| **Skill de workflow** | Charge la configuration du workflow et suit ses étapes |
| **Skill de tâche** | Charge un fichier de tâche autonome et suit ses instructions |
| **Skill doutil** | Charge un fichier doutil autonome et suit ses instructions |
:::note[Relancer linstallateur]
Si vous ajoutez ou supprimez des modules, relancez linstallateur. Il régénère tous les fichiers de skill pour correspondre à votre sélection actuelle de modules.
@ -39,12 +39,12 @@ Si vous ajoutez ou supprimez des modules, relancez linstallateur. Il régén
Linstallateur écrit les fichiers de skill dans un répertoire spécifique à lIDE à lintérieur de votre projet. Le chemin exact dépend de lIDE que vous avez sélectionné lors de linstallation.
| IDE / CLI | Répertoire des skills |
|-------------|------------------------------------------------------------|
| Claude Code | `.claude/skills/` |
| Cursor | `.cursor/skills/` |
| Windsurf | `.windsurf/skills/` |
| Autres IDE | Consultez la sortie de linstallateur pour le chemin cible |
| IDE / CLI | Répertoire des skills |
| --- | --- |
| Claude Code | `.claude/skills/` |
| Cursor | `.cursor/skills/` |
| Windsurf | `.windsurf/skills/` |
| Autres IDE | Consultez la sortie de linstallateur pour le chemin cible |
Chaque skill est un répertoire contenant un fichier `SKILL.md`. Par exemple, une installation Claude Code ressemble à :
@ -89,16 +89,16 @@ Consultez [Agents](./agents.md) pour la liste complète des agents par défaut e
Les skills de workflow exécutent un processus structuré en plusieurs étapes sans charger dabord un persona dagent. Ils chargent une configuration de workflow et suivent ses étapes.
| Exemple de skill | Objectif |
|---------------------------------|------------------------------------------------------------------------------------------------------------------------------|
| `bmad-product-brief` | Créer ou mettre à jour un product brief[^3] — découverte guidée lorsque votre concept est clair |
| `bmad-prfaq` | Défi [PRFAQ Working Backwards](../explanation/analysis-phase.md#prfaq-working-backwards) pour éprouver votre concept produit |
| `bmad-prd` | Créer, mettre à jour ou valider un PRD[^1] |
| `bmad-create-architecture` | Concevoir larchitecture système |
| `bmad-create-epics-and-stories` | Créer des epics et des stories |
| `bmad-dev-story` | Implémenter une story |
| `bmad-code-review` | Effectuer une revue de code |
| `bmad-quick-dev` | Flux rapide unifié — clarifier lintention, planifier, implémenter, réviser, présenter |
| Exemple de skill | Objectif |
| --- | --- |
| `bmad-product-brief` | Créer ou mettre à jour un product brief[^3] — découverte guidée lorsque votre concept est clair |
| `bmad-prfaq` | Défi [PRFAQ Working Backwards](../explanation/analysis-phase.md#prfaq-working-backwards) pour éprouver votre concept produit |
| `bmad-prd` | Créer, mettre à jour ou valider un PRD[^1] |
| `bmad-create-architecture` | Concevoir larchitecture système |
| `bmad-create-epics-and-stories` | Créer des epics et des stories |
| `bmad-dev-story` | Implémenter une story |
| `bmad-code-review` | Effectuer une revue de code |
| `bmad-quick-dev` | Flux rapide unifié — clarifier lintention, planifier, implémenter, réviser, présenter |
Consultez la [Carte des workflows](./workflow-map.md) pour la référence complète des workflows organisés par phase.
@ -106,7 +106,7 @@ Consultez la [Carte des workflows](./workflow-map.md) pour la référence compl
Les tâches et outils sont des opérations autonomes qui ne nécessitent pas de contexte dagent ou de workflow.
**BMad-Help : Votre guide intelligent**
**BMad-Help : Votre guide intelligent**
`bmad-help` est votre interface principale pour découvrir quoi faire ensuite. Il inspecte votre projet, comprend les requêtes en langage naturel et recommande la prochaine étape requise ou optionnelle en fonction de vos modules installés.

View File

@ -5,7 +5,7 @@ sidebar:
order: 3
---
Chaque installation BMad comprend un ensemble de compétences principales utilisables en complément de tout ce que vous faites — des tâches et des workflows autonomes qui fonctionnent dans tous les projets, tous les modules et toutes les phases. Elles restent toujours disponibles, quels que soient les modules optionnels que vous installez.
Chaque installation BMad comprend un ensemble de compétences principales qui peuvent être utilisées conjointement avec tout ce que vous faites — des tâches et des workflows autonomes qui fonctionnent dans tous les projets, tous les modules et toutes les phases. Ceux-ci sont toujours disponibles, quels que soient les modules optionnels que vous installez.
:::tip[Raccourci Rapide]
Exécutez nimporte quel outil principal en tapant son nom de compétence (par ex., `bmad-help`) dans votre IDE. Aucune session dagent requise.
@ -13,63 +13,63 @@ Exécutez nimporte quel outil principal en tapant son nom de compétence (par
## Vue densemble
| Outil | Type | Objectif |
|-----------------------------------------------------------------------|----------|-------------------------------------------------------------------------------|
| [`bmad-help`](#bmad-help) | Tâche | Obtenir des conseils contextuels sur la prochaine étape |
| [`bmad-brainstorming`](#bmad-brainstorming) | Workflow | Faciliter des sessions de brainstorming interactives |
| [`bmad-party-mode`](#bmad-party-mode) | Workflow | Orchestrer des discussions de groupe multi-agents |
| [`bmad-spec`](#bmad-spec) | Workflow | Distiller toute formulation dintention en un noyau SPEC et fichiers associés |
| [`bmad-advanced-elicitation`](#bmad-advanced-elicitation) | Tâche | Soumettre la sortie LLM à des méthodes de raffinement itératives |
| [`bmad-review-adversarial-general`](#bmad-review-adversarial-general) | Tâche | Revue cynique qui traque ce qui manque et ce qui ne va pas |
| [`bmad-review-edge-case-hunter`](#bmad-review-edge-case-hunter) | Tâche | Analyse exhaustive des chemins de branchement pour les cas limites non gérés |
| [`bmad-editorial-review-prose`](#bmad-editorial-review-prose) | Tâche | Correction éditoriale clinique pour la clarté de communication |
| [`bmad-editorial-review-structure`](#bmad-editorial-review-structure) | Tâche | Édition structurelle — coupes, fusions et réorganisation |
| [`bmad-shard-doc`](#bmad-shard-doc) | Tâche | Diviser les fichiers markdown volumineux en sections organisées |
| [`bmad-index-docs`](#bmad-index-docs) | Tâche | Générer ou mettre à jour un index de tous les documents dans un dossier |
| Outil | Type | Objectif |
|-----------------------------------------------------------------------|----------|------------------------------------------------------------------------------|
| [`bmad-help`](#bmad-help) | Tâche | Obtenir des conseils contextuels sur la prochaine étape |
| [`bmad-brainstorming`](#bmad-brainstorming) | Workflow | Faciliter des sessions de brainstorming interactives |
| [`bmad-party-mode`](#bmad-party-mode) | Workflow | Orchestrer des discussions de groupe multi-agents |
| [`bmad-distillator`](#bmad-distillator) | Tâche | Compression sans perte optimisée pour LLM de documents |
| [`bmad-advanced-elicitation`](#bmad-advanced-elicitation) | Tâche | Pousser la sortie LLM à travers des méthodes de raffinement itératives |
| [`bmad-review-adversarial-general`](#bmad-review-adversarial-general) | Tâche | Revue cynique qui trouve ce qui manque et ce qui ne va pas |
| [`bmad-review-edge-case-hunter`](#bmad-review-edge-case-hunter) | Tâche | Analyse exhaustive des chemins de branchement pour les cas limites non gérés |
| [`bmad-editorial-review-prose`](#bmad-editorial-review-prose) | Tâche | Révision de copie clinique pour la clarté de communication |
| [`bmad-editorial-review-structure`](#bmad-editorial-review-structure) | Tâche | Édition structurelle — coupes, fusions et réorganisation |
| [`bmad-shard-doc`](#bmad-shard-doc) | Tâche | Diviser les fichiers markdown volumineux en sections organisées |
| [`bmad-index-docs`](#bmad-index-docs) | Tâche | Générer ou mettre à jour un index de tous les documents dans un dossier |
## bmad-help
**Votre guide intelligent pour la suite.** — Inspecte létat de votre projet, détecte ce qui a été fait et recommande la prochaine étape requise ou facultative.
**À utiliser quand :**
**Utilisez-le quand :**
- Vous avez terminé un workflow et voulez savoir quoi faire ensuite
- Vous avez terminé un workflow et voulez savoir ce qui suit
- Vous êtes nouveau sur BMad et avez besoin dorientation
- Vous êtes bloqué et voulez des conseils contextuels
- Vous avez installé de nouveaux modules et voulez voir ce qui est disponible
**Fonctionnement :**
**Fonctionnement :**
1. Analyse votre projet pour détecter les artefacts existants (PRD, architecture, stories, etc.)
1. Analyse votre projet pour les artefacts existants (PRD, architecture, stories, etc.)
2. Détecte quels modules sont installés et leurs workflows disponibles
3. Recommande les prochaines étapes par ordre de priorité — étapes requises dabord, puis facultatives
4. Présente chaque recommandation avec la commande de compétence et une brève description
**Entrée :** Requête optionnelle en langage naturel (par ex., `bmad-help J'ai une idée de SaaS, par où commencer ?`)
**Entrée :** Requête optionnelle en langage naturel (par ex., `bmad-help J'ai une idée de SaaS, par où commencer ?`)
**Sortie :** Liste priorisée des prochaines étapes recommandées avec les commandes de compétence
**Sortie :** Liste priorisée des prochaines étapes recommandées avec les commandes de compétence
## bmad-brainstorming
**Génère des idées variées grâce à des techniques créatives interactives.** — Une session de brainstorming facilitée qui charge des méthodes didéation éprouvées à partir dune bibliothèque de techniques et vous guide vers plus de 100 idées avant de les organiser.
**Génère des idées diverses à travers des techniques créatives interactives.** — Une session de brainstorming facilitée qui charge des méthodes didéation éprouvées depuis une bibliothèque de techniques et vous guide vers plus de 100 idées avant organisation.
**À utiliser quand :**
**Utilisez-le quand :**
- Vous commencez un nouveau projet et devez explorer lespace problème
- Vous êtes bloqué dans la génération didées et avez besoin de créativité structurée
- Vous voulez utiliser des cadres didéation éprouvés (SCAMPER, brainstorming inversé, etc.)
**Fonctionnement :**
**Fonctionnement :**
1. Configure une session de brainstorming avec votre sujet
2. Charge les techniques créatives à partir dune bibliothèque de méthodes
3. Vous guide de technique en technique, en générant des idées
4. Applique un protocole anti-biais — bascule de domaine créatif toutes les 10 idées pour éviter les biais de regroupement
2. Charge les techniques créatives depuis une bibliothèque de méthodes
3. Vous guide à travers technique après technique, générant des idées
4. Applique un protocole anti-biais — change de domaine créatif toutes les 10 idées pour éviter le regroupement
5. Produit un document de session en mode ajout uniquement avec toutes les idées organisées par technique
**Entrée :** Sujet de brainstorming ou énoncé de problème, fichier de contexte optionnel
**Entrée :** Sujet de brainstorming ou énoncé de problème, fichier de contexte optionnel
**Sortie :** `brainstorming-session-{date}.md` avec toutes les idées générées
**Sortie :** `brainstorming-session-{date}.md` avec toutes les idées générées
:::note[Cible de Quantité]
La magie se produit dans les idées 50100. Le workflow encourage la génération de plus de 100 idées avant organisation.
@ -77,127 +77,122 @@ La magie se produit dans les idées 50100. Le workflow encourage la générat
## bmad-party-mode
**Orchestre des discussions de groupe multi-agents.** — Charge tous les agents BMad installés et facilite une conversation naturelle où chaque agent apporte son expertise et sa personnalité uniques.
**Orchestre des discussions de groupe multi-agents.** — Charge tous les agents BMad installés et facilite une conversation naturelle où chaque agent contribue depuis son expertise et personnalité uniques.
**À utiliser quand :**
**Utilisez-le quand :**
- Vous avez besoin de multiples perspectives dexperts sur une décision
- Vous voulez que les agents remettent en question les hypothèses des autres
- Vous explorez un sujet complexe qui couvre plusieurs domaines
**Fonctionnement :**
**Fonctionnement :**
1. Charge le manifeste dagents avec toutes les personnalités dagents installées
2. Analyse votre sujet pour sélectionner les 23 agents les plus pertinents
3. Les agents contribuent à tour de rôle, avec des échanges spontanés et des désaccords
4. Alterne la participation des agents pour garantir des perspectives variées
3. Les agents prennent des tours pour contribuer, avec des échanges naturels et des désaccords
4. Fait rouler la participation des agents pour assurer des perspectives diverses au fil du temps
5. Quittez avec `goodbye`, `end party` ou `quit`
**Entrée :** Sujet de discussion ou question, ainsi que la spécification des personas que vous souhaitez faire participer (optionnel)
**Entrée :** Sujet de discussion ou question, ainsi que la spécification des personas que vous souhaitez faire participer (optionnel)
**Sortie :** Conversation multi-agents en temps réel conservant la personnalité de chaque agent
**Sortie :** Conversation multi-agents en temps réel avec des personnalités dagents maintenues
## bmad-spec
## bmad-distillator
**Distille toute formulation dintention en un contrat SPEC canonique pour le travail en aval.** — Accepte un brief, un PRD, un GDD, un RFC, un brain dump, une transcription, un dossier UX ou une entrée multi-source mixte et produit un `SPEC.md` structuré autour dun noyau de cinq champs (Pourquoi, Capacités, Contraintes, Non-objectifs, Signal de succès) ainsi que des fichiers compagnons pour le contenu essentiel qui ne trouve pas sa place dans le noyau.
**Compression sans perte optimisée pour LLM de documents sources.** — Produit des distillats denses et efficaces en tokens qui préservent toute linformation pour la consommation par des LLM en aval. Vérifiable par reconstruction aller-retour.
**À utiliser quand :**
**Utilisez-le quand :**
- Vous devez verrouiller le QUOI avant le COMMENT pour tout type de travail (logiciel, game design, recherche, éditorial, politique, entreprise)
- Vous souhaitez un contrat succinct optimisé pour les LLM, sans fioritures, que les compétences en aval peuvent consommer sans relire chaque artefact en amont
- Vous voulez valider ou mettre à jour une spécification existante
- Un document est trop volumineux pour la fenêtre de contexte dun LLM
- Vous avez besoin de versions économes en tokens de recherches, spécifications ou artefacts de planification
- Vous voulez vérifier quaucune information nest perdue pendant la compression
- Les agents auront besoin de référencer et de trouver fréquemment des informations dedans
**Fonctionnement :**
**Fonctionnement :**
1. Lit lentrée et tout document annexe lié
2. Distille en un noyau à cinq champs via un modèle configurable; redirige lexcédent vers des fichiers compagnons correctement nommés
3. Exécute une auto-validation en deux passes (règles de cohérence, puis préservation de chaque affirmation essentielle de la source)
4. Écrit `SPEC.md`, les compagnons associés, et un `.decision-log.md` sous `{output_folder}/specs/spec-{slug}/`
1. **Analyser** — Lit les documents sources, identifie la densité dinformation et la structure
2. **Compresser** — Convertit la prose en format dense de liste de points, supprime le formatage décoratif
3. **Vérifier** — Vérifie lexhaustivité pour sassurer que toute linformation originale est préservée
4. **Valider** (optionnel) — Le test de reconstruction aller-retour prouve la compression sans perte
La loi Spec impose huit règles : les capacités expriment à la fois lintention et le critère de succès; les intentions décrivent le QUOI, pas le COMMENT; les contraintes guident réellement les décisions; les non-objectifs sont explicites; les signaux de succès sont concrets; les identifiants de capacité sont stables; chaque affirmation essentielle de la source est préservée; la rédaction est concise.
**Entrée :**
**Entrée :**
- `input` (requis) — Chemin ou texte fourni directement. Idée vague, brain dump, PRD, GDD, RFC, brief, transcription, dossier de maquettes, multi-source mixte
- `slug` (optionnel) — Requis uniquement lorsque lentrée est succincte et quaucun slug ne peut être dérivé du nom de fichier source
- `target_spec_path` (optionnel) — Définir pour mettre à jour une spécification existante au lieu den créer une nouvelle
**Sortie :** Dossier de spécification contenant `SPEC.md`, les éventuels fichiers compagnons, et un `.decision-log.md`. Les appelants en mode headless reçoivent une réponse JSON avec le statut du résultat et la liste des fichiers écrits ou modifiés.
:::note[Contrat de mutation]
`bmad-spec` est le seul outil autorisé à écrire `SPEC.md` et les fichiers compagnons de la spécification. Les autres compétences produisent leurs propres artefacts natifs et invoquent `bmad-spec` en mode headless lorsquelles ont besoin dexprimer une intention sous forme de contrat canonique ou de proposer des mises à jour.
:::
- `source_documents` (requis) — Chemins de fichiers, chemins de dossiers ou motifs glob
- `downstream_consumer` (optionnel) — Ce qui va le consommer (par ex., «création de PRD»)
- `token_budget` (optionnel) — Taille cible approximative
- `--validate` (drapeau) — Exécuter le test de reconstruction aller-retour
**Sortie :** Fichier(s) markdown distillé(s) avec rapport de ratio de compression (par ex., "3.2:1")
## bmad-advanced-elicitation
**Soumet la sortie du LLM à des méthodes de raffinement itératives.** — Sélectionne à partir dune bibliothèque de techniques délicitation pour améliorer systématiquement le contenu en plusieurs passages.
**Passer la sortie du LLM à travers des méthodes de raffinement itératives.** — Sélectionne depuis une bibliothèque de techniques délicitation pour améliorer systématiquement le contenu à travers multiples passages.
**À utiliser quand :**
**Utilisez-le quand :**
- La sortie du LLM semble superficielle ou générique
- Vous voulez explorer un sujet sous plusieurs angles analytiques
- Vous raffinez un document critique et souhaitez une réflexion plus approfondie
- Vous voulez explorer un sujet depuis de multiples angles analytiques
- Vous raffinez un document critique et voulez une réflexion plus approfondie
**Fonctionnement :**
**Fonctionnement :**
1. Charge le registre de méthodes avec plus de 5 techniques délicitation
2. Sélectionne les 5 méthodes les mieux adaptées selon le type de contenu et la complexité
3. Présente un menu interactif — choisissez une méthode, remélangez, ou listez tout
4. Applique la méthode sélectionnée pour améliorer le contenu
5. Affiche à nouveau les options damélioration itérative jusquà ce que vous sélectionniez «Procéder»
5. Re-présente les options pour lamélioration itérative jusquà ce que vous sélectionniez «Procéder»
**Entrée :** Section de contenu à améliorer
**Entrée :** Section de contenu à améliorer
**Sortie :** Version améliorée du contenu avec les améliorations appliquées
**Sortie :** Version améliorée du contenu avec les améliorations appliquées
## bmad-review-adversarial-general
**Revue contradictoire qui part du principe que des problèmes existent et les traque.** — Adopte un regard de réviseur sceptique et blasé, sans aucune tolérance pour le travail bâclé. Cherche ce qui manque, pas seulement ce qui ne va pas.
**Revue contradictoire qui suppose que des problèmes existent et les recherche.** — Adopte une perspective de réviseur sceptique et blasé avec zéro tolérance pour le travail bâclé. Cherche ce qui manque, pas seulement ce qui ne va pas.
**À utiliser quand :**
**Utilisez-le quand :**
- Vous avez besoin dassurance qualité avant de finaliser un livrable
- Vous voulez éprouver une spécification, une story ou un document
- Vous voulez tester en conditions réelles une spécification, story ou document
- Vous voulez trouver des lacunes de couverture que les revues optimistes manquent
**Fonctionnement :**
**Fonctionnement :**
1. Lit le contenu avec un regard contradictoire et critique
2. Identifie les problèmes sur les plans de lexhaustivité, de la justesse et de la qualité
1. Lit le contenu avec une perspective contradictoire et critique
2. Identifie les problèmes à travers lexhaustivité, la justesse et la qualité
3. Recherche spécifiquement ce qui manque — pas seulement ce qui est présent et faux
4. Doit trouver un minimum de 10 problèmes ou réanalyser plus en profondeur
4. Doit trouver un minimum de 10 problèmes ou réanalyse plus profondément
**Entrée :**
**Entrée :**
- `content` (requis) — Diff, spécification, story, document ou tout artefact
- `also_consider` (optionnel) — Domaines supplémentaires à garder à lesprit
**Sortie :** Liste markdown de plus de 10 constatations avec descriptions
**Sortie :** Liste markdown de plus de 10 constatations avec descriptions
## bmad-review-edge-case-hunter
**Parcourt tous les chemins de branchement et les conditions limites, ne signale que les cas non gérés.** — Méthodologie pure de traçage de chemin[^1] qui dérive mécaniquement les classes de cas limites. Orthogonale à la revue contradictoire — centrée sur la méthode, pas sur lattitude.
**Parcours tous les chemins de branchement et les conditions limites, ne rapporte que les cas non gérés.** — Méthodologie pure de traçage de chemin[^1] qui dérive mécaniquement les classes de cas limites. Orthogonale à la revue contradictoire — centrée sur la méthode, pas sur lattitude.
**À utiliser quand :**
**À utiliser quand :**
- Vous souhaitez une couverture exhaustive des cas limites pour le code ou la logique
- Vous avez besoin dun complément à la revue contradictoire (méthodologie différente, résultats différents)
- Vous révisez un diff ou une fonction pour des conditions limites
**Fonctionnement :**
**Fonctionnement :**
1. Énumère tous les chemins de branchement dans le contenu
2. Dérive mécaniquement les classes de cas limites : else/default manquants, entrées non protégées, erreurs off-by-one, dépassements arithmétiques, conversions de type implicites, conditions de concurrence, dépassements de délai
3. Teste chaque chemin face aux protections existantes
4. Ne signale que les chemins non gérés — ignore silencieusement les chemins gérés
2. Dérive mécaniquement les classes de cas limites : else/default manquants, entrées non vérifiées, décalage dunité, overflow arithmétique, coercition implicite des types, conditions de concurrence, écarts de timeout
3. Teste chaque chemin contre les protections existantes
4. Ne rapporte que les chemins non gérés — ignore silencieusement les chemins gérés
**Entrée :**
**Entrée :**
- `content` (obligatoire) — Diff, fichier complet ou fonction
- `also_consider` (facultatif) — Domaines supplémentaires à garder à lesprit
- `also_consider` (facultatif) — Zones supplémentaires à garder à lesprit
**Sortie :** Tableau JSON des résultats, chacun avec `location`, `trigger_condition`, `guard_snippet` et `potential_consequence`
**Sortie :** Tableau JSON des résultats, chacun avec `location`, `trigger_condition`, `guard_snippet` et `potential_consequence`
:::note[Revue Complémentaire]
Exécutez à la fois `bmad-review-adversarial-general` et `bmad-review-edge-case-hunter` pour une couverture orthogonale. La revue contradictoire détecte les problèmes de qualité et de complétude; le chasseur de cas limites détecte les chemins non gérés.
@ -205,98 +200,99 @@ Exécutez à la fois `bmad-review-adversarial-general` et `bmad-review-edge-case
## bmad-editorial-review-prose
**Correction éditoriale clinique centrée sur la clarté de communication.** — Analyse le texte pour détecter les problèmes qui nuisent à la compréhension. Applique le Microsoft Writing Style Guide comme référence de base. Préserve la voix de lauteur.
**Relecture éditoriale clinique centrée sur la clarté de communication.** — Analyse le texte pour détecter les problèmes qui nuisent à la compréhension. Applique le Microsoft Writing Style Guide baseline. Préserve la voix de lauteur.
**À utiliser quand :**
**À utiliser quand :**
- Vous avez rédigé un document et souhaitez en polir le style
- Vous avez rédigé un document et souhaitez polir le style
- Vous devez assurer la clarté pour un public spécifique
- Vous voulez des corrections de communication sans modifier les choix stylistiques
**Fonctionnement :**
**Fonctionnement :**
1. Lit le contenu en ignorant les blocs de code et le frontmatter
2. Identifie les problèmes de communication (pas les préférences de style)
3. Dédoublonne les occurrences dun même problème à différents endroits
3. Déduit les doublons du même problème à différents emplacements
4. Produit un tableau de corrections en trois colonnes
**Entrée :**
**Entrée :**
- `content` (obligatoire) — Markdown, texte brut ou XML
- `style_guide` (facultatif) — Guide de style spécifique au projet
- `reader_type` (facultatif) — `humans` (par défaut) pour clarté/fluide, ou `llm` pour précision/consistance
**Sortie :** Tableau Markdown en trois colonnes : Texte original | Texte révisé | Modifications
**Sortie :** Tableau Markdown en trois colonnes : Texte original | Texte révisé | Modifications
## bmad-editorial-review-structure
**Édition structurelle — propose des coupes, fusions, réorganisations et condensations.** — Révise lorganisation du document et propose des changements substantiels pour améliorer la clarté et le flux avant la correction éditoriale.
**Édition structurelle — propose des coupes, fusions, déplacements et condensations.** — Révise lorganisation du document et propose des changements substantiels pour améliorer la clarté et le flux avant la révision de copie.
**À utiliser quand :**
**Utilisez-le quand :**
- Un document a été produit par plusieurs sous-processus et nécessite une cohérence structurelle
- Un document a été produit depuis de multiples sous-processus et a besoin de cohérence structurelle
- Vous voulez réduire la longueur du document tout en préservant la compréhension
- Vous devez identifier les violations de portée ou les informations critiques enfouies
**Fonctionnement :**
**Fonctionnement :**
1. Analyse le document contre 5 modèles de structure (Tutoriel, Référence, Explication, Prompt, Stratégique)
2. Identifie les redondances, violations de portée et informations enfouies
3. Produit des recommandations priorisées : COUPER, FUSIONNER, DÉPLACER, CONDENSER, QUESTIONNER, PRÉSERVER
4. Estime la réduction totale en mots et en pourcentage
3. Produit des recommandations priorisées : COUPER, FUSIONNER, DÉPLACER, CONDENSER, QUESTIONNER, PRÉSERVER
4. Estime la réduction totale en mots et pourcentage
**Entrée :**
**Entrée :**
- `content` (requis) — Document à réviser
- `purpose` (optionnel) — Objectif prévu (par ex., «tutoriel de démarrage rapide»)
- `target_audience` (optionnel) — Qui lit ceci
- `reader_type` (optionnel) — `humans` ou `llm`
- `length_target` (optionnel) — Réduction cible (par ex., «30% plus court»)
- `length_target` (optionnel) — Réduction cible (par ex., "30% plus court")
**Sortie :** Résumé du document, liste de recommandations priorisées et réduction estimée
**Sortie :** Résumé du document, liste de recommandations priorisées et réduction estimée
## bmad-shard-doc
**Fractionne les fichiers markdown volumineux en sections organisées.** — Utilise les en-têtes de niveau 2 comme points de découpe pour créer un dossier de fichiers de sections autonomes avec un index.
**Diviser les fichiers markdown volumineux en fichiers de sections organisés.** — Utilise les en-têtes de niveau 2 comme points de division pour créer un dossier de fichiers de sections autonomes avec un index.
**À utiliser quand :**
**Utilisez-le quand :**
- Un document markdown est devenu trop volumineux pour être géré efficacement (plus de 500 lignes)
- Vous voulez découper un document monolithique en sections navigables
- Vous voulez diviser un document monolithique en sections navigables
- Vous avez besoin de fichiers séparés pour lédition parallèle ou la gestion de contexte LLM
**Fonctionnement :**
**Fonctionnement :**
1. Valide que le fichier source existe et est au format markdown
2. Découpe sur les en-têtes de niveau 2 (`##`) en fichiers de sections numérotées
3. Crée un `index.md` avec le manifeste de sections et les liens
1. Valide que le fichier source existe et est markdown
2. Divise sur les en-têtes de niveau 2 (`##`) en fichiers de sections numérotées
3. Crée un `index.md` avec manifeste de sections et liens
4. Vous invite à supprimer, archiver ou conserver loriginal
**Entrée :** Chemin du fichier markdown source, dossier de destination optionnel
**Entrée :** Chemin du fichier markdown source, dossier de destination optionnel
**Sortie :** Dossier avec `index.md` et `01-{section}.md`, `02-{section}.md`, etc.
**Sortie :** Dossier avec `index.md` et `01-{section}.md`, `02-{section}.md`, etc.
## bmad-index-docs
**Génère ou met à jour un index de tous les documents dans un dossier.** — Analyse un répertoire, lit chaque fichier pour comprendre son objectif et produit un `index.md` organisé avec liens et descriptions.
**Générer ou mettre à jour un index de tous les documents dans un dossier.** — Analyse un répertoire, lit chaque fichier pour comprendre son objectif et produit un `index.md` organisé avec liens et descriptions.
**À utiliser quand :**
**Utilisez-le quand :**
- Vous avez besoin dun index léger pour un scan LLM rapide des documents disponibles
- Un dossier de documentation a grandi et nécessite une table des matières organisée
- Un dossier de documentation a grandi et a besoin dune table des matières organisée
- Vous voulez un aperçu auto-généré qui reste à jour
**Fonctionnement :**
**Fonctionnement :**
1. Analyse le répertoire cible pour tous les fichiers non cachés
2. Lit chaque fichier pour comprendre son objectif réel
3. Groupe les fichiers par type, objectif ou sous-répertoire
4. Génère des descriptions concises (310 mots chacune)
**Entrée :** Chemin du dossier cible
**Entrée :** Chemin du dossier cible
**Sortie :** `index.md` avec listes de fichiers organisées, liens relatifs et brèves descriptions
**Sortie :** `index.md` avec listes de fichiers organisées, liens relatifs et brèves descriptions
## Glossaire
[^1]: Path-tracing : méthode danalyse qui suit systématiquement tous les chemins dexécution possibles dans un programme pour identifier les cas non gérés.
[^1]: Path-tracing : méthode danalyse qui suit systématiquement tous les chemins dexécution possibles dans un programme pour identifier les cas non gérés.

View File

@ -15,11 +15,11 @@ Exécutez `npx bmad-method install` et sélectionnez les modules souhaités. L
Créez des agents personnalisés, des workflows et des modules spécifiques à un domaine avec une assistance guidée. BMad Builder est le méta-module pour étendre le framework lui-même.
- **Code :** `bmb`
- **npm :** [`bmad-builder`](https://www.npmjs.com/package/bmad-builder)
- **GitHub :** [bmad-code-org/bmad-builder](https://github.com/bmad-code-org/bmad-builder)
- **Code :** `bmb`
- **npm :** [`bmad-builder`](https://www.npmjs.com/package/bmad-builder)
- **GitHub :** [bmad-code-org/bmad-builder](https://github.com/bmad-code-org/bmad-builder)
**Fournit :**
**Fournit :**
- Agent Builder — créez des agents IA spécialisés avec une expertise et un accès aux outils personnalisés
- Workflow Builder — concevez des processus structurés avec des étapes et des points de décision
@ -30,11 +30,11 @@ Créez des agents personnalisés, des workflows et des modules spécifiques à u
Outils basés sur lIA pour la créativité structurée, lidéation et linnovation pendant le développement en phase amont. La suite fournit plusieurs agents qui facilitent le brainstorming, le design thinking et la résolution de problèmes en utilisant des cadres éprouvés.
- **Code :** `cis`
- **npm :** [`bmad-creative-intelligence-suite`](https://www.npmjs.com/package/bmad-creative-intelligence-suite)
- **GitHub :** [bmad-code-org/bmad-module-creative-intelligence-suite](https://github.com/bmad-code-org/bmad-module-creative-intelligence-suite)
- **Code :** `cis`
- **npm :** [`bmad-creative-intelligence-suite`](https://www.npmjs.com/package/bmad-creative-intelligence-suite)
- **GitHub :** [bmad-code-org/bmad-module-creative-intelligence-suite](https://github.com/bmad-code-org/bmad-module-creative-intelligence-suite)
**Fournit :**
**Fournit :**
- Agents Innovation Strategist, Design Thinking Coach et Brainstorming Coach
- Problem Solver et Creative Problem Solver pour la pensée systématique et latérale
@ -45,11 +45,11 @@ Outils basés sur lIA pour la créativité structurée, lidéation et l
Workflows de développement de jeux structurés adaptés pour Unity, Unreal, Godot et moteurs personnalisés. Supporte le prototypage rapide via Quick Dev et la production à grande échelle avec des sprints propulsés par epics.
- **Code :** `gds`
- **npm :** [`bmad-game-dev-studio`](https://www.npmjs.com/package/bmad-game-dev-studio)
- **GitHub :** [bmad-code-org/bmad-module-game-dev-studio](https://github.com/bmad-code-org/bmad-module-game-dev-studio)
- **Code :** `gds`
- **npm :** [`bmad-game-dev-studio`](https://www.npmjs.com/package/bmad-game-dev-studio)
- **GitHub :** [bmad-code-org/bmad-module-game-dev-studio](https://github.com/bmad-code-org/bmad-module-game-dev-studio)
**Fournit :**
**Fournit :**
- Workflow de génération de Document de Design de Jeu (GDD[^3])
- Mode Quick Dev pour le prototypage rapide
@ -60,11 +60,11 @@ Workflows de développement de jeux structurés adaptés pour Unity, Unreal, God
Stratégie de test de niveau entreprise, conseils dautomatisation et décisions de porte de release via un agent expert et neuf workflows structurés. TEA va bien au-delà du workflow QA intégré avec une priorisation basée sur les risques et une traçabilité des exigences.
- **Code :** `tea`
- **npm :** [`bmad-method-test-architecture-enterprise`](https://www.npmjs.com/package/bmad-method-test-architecture-enterprise)
- **GitHub :** [bmad-code-org/bmad-method-test-architecture-enterprise](https://github.com/bmad-code-org/bmad-method-test-architecture-enterprise)
- **Code :** `tea`
- **npm :** [`bmad-method-test-architecture-enterprise`](https://www.npmjs.com/package/bmad-method-test-architecture-enterprise)
- **GitHub :** [bmad-code-org/bmad-method-test-architecture-enterprise](https://github.com/bmad-code-org/bmad-method-test-architecture-enterprise)
**Fournit :**
**Fournit :**
- Agent Murat (Master Test Architect and Quality Advisor)
- Workflows pour la conception de tests, ATDD, lautomatisation, la revue de tests et la traçabilité

View File

@ -5,14 +5,14 @@ sidebar:
order: 6
---
BMad propose deux approches de test : un workflow QA[^1] intégré pour une génération rapide de tests et un module Test Architect installable pour une stratégie de test de qualité entreprise.
BMad propose deux approches de test : un workflow QA[^1] intégré pour une génération rapide de tests et un module Test Architect installable pour une stratégie de test de qualité entreprise.
## Lequel Choisir?
| Facteur | QA Intégré | Module TEA |
| Facteur | QA Intégré | Module TEA |
|-------------------------|----------------------------------------------|---------------------------------------------------------------------|
| **Idéal pour** | Projets petits et moyens, couverture rapide | Grands projets, domaines réglementés ou complexes |
| **Installation** | Rien à installer — inclus dans BMM | Installer séparément via `npx bmad-method install` |
| **Installation** | Rien à installer — inclus dans BMM | Installer séparément via `npx bmad-method install` |
| **Approche** | Générer les tests rapidement, itérer ensuite | Planifier dabord, puis générer avec traçabilité |
| **Types de tests** | Tests API et E2E | API, E2E, ATDD[^2], NFR, et plus |
| **Stratégie** | Chemin nominal + cas limites critiques | Priorisation basée sur les risques (P0-P3) |
@ -26,7 +26,7 @@ La plupart des projets devraient commencer avec le workflow QA intégré. Si vou
Le workflow QA intégré (`bmad-qa-generate-e2e-tests`) fait partie du module BMM (suite Agile), disponible via lagent Developer. Il génère rapidement des tests fonctionnels en utilisant le framework de test existant de votre projet — aucune configuration ni installation supplémentaire requise.
**Déclencheur :** `QA` (via lagent Developer) ou `bmad-qa-generate-e2e-tests`
**Déclencheur :** `QA` (via lagent Developer) ou `bmad-qa-generate-e2e-tests`
### Ce que le Workflow QA Fait
@ -65,9 +65,9 @@ Le workflow QA génère uniquement des tests. Pour la revue de code et la valida
TEA est un module autonome qui fournit un agent expert (Murat) et neuf workflows structurés pour des tests de qualité entreprise. Il va au-delà de la génération de tests pour inclure la stratégie de test, la planification basée sur les risques, les murs de qualité et la traçabilité des exigences.
- **Documentation :** [TEA Module Docs](https://bmad-code-org.github.io/bmad-method-test-architecture-enterprise/)
- **Installation :** `npx bmad-method install` et sélectionnez le module TEA
- **npm :** [`bmad-method-test-architecture-enterprise`](https://www.npmjs.com/package/bmad-method-test-architecture-enterprise)
- **Documentation :** [TEA Module Docs](https://bmad-code-org.github.io/bmad-method-test-architecture-enterprise/)
- **Installation :** `npx bmad-method install` et sélectionnez le module TEA
- **npm :** [`bmad-method-test-architecture-enterprise`](https://www.npmjs.com/package/bmad-method-test-architecture-enterprise)
### Ce que TEA Fournit
@ -97,8 +97,8 @@ TEA supporte également la priorisation basée sur les risques P0-P3 et des int
Le workflow Automate du QA intégré apparaît dans la Phase 4 (Implémentation) de la carte de workflow méthode BMad. Il est conçu pour sexécuter **après quun epic complet soit terminé** — une fois que toutes les stories dun epic ont été implémentées et revues. Une séquence typique :
1. Pour chaque story de lepic : implémenter avec Dev Story (`DS`), puis valider avec Code Review (`CR`)
2. Après la fin de lepic : générer les tests avec `QA` (via lagent Developer) ou le workflow Automate de TEA
1. Pour chaque story de lepic : implémenter avec Dev Story (`DS`), puis valider avec Code Review (`CR`)
2. Après la fin de lepic : générer les tests avec `QA` (via lagent Developer) ou le workflow Automate de TEA
3. Lancer la rétrospective (`bmad-retrospective`) pour capturer les leçons apprises
Le workflow QA travaille directement à partir du code source sans charger les documents de planification (PRD, architecture). Les workflows TEA peuvent sintégrer avec les artefacts de planification en amont pour la traçabilité.

View File

@ -20,7 +20,7 @@ la méthode BMad. Par ailleurs, si vous utilisez des modules ayant étendu la m
complémentaires non extensibles, `bmad-help` sadapte automatiquement pour couvrir tout ce qui est disponible et vous
fournir les meilleurs conseils en temps réel.
Note importante : chaque workflow ci-dessous peut être exécuté directement via un skill avec loutil de votre choix, ou
Note importante : chaque workflow ci-dessous peut être exécuté directement via un skill avec loutil de votre choix, ou
en chargeant dabord un agent depuis le menu des agents.
<iframe src="/workflow-map-diagram-fr.html" title="Diagramme de la carte des workflows de la méthode BMad" width="100%" height="100%" style="border-radius: 8px; border: 1px solid #334155; min-height: 900px;"></iframe>
@ -29,7 +29,7 @@ en chargeant dabord un agent depuis le menu des agents.
<a href="/workflow-map-diagram-fr.html" target="_blank" rel="noopener noreferrer">Ouvrir le diagramme dans un nouvel onglet ↗</a>
</p>
## Phase 1 : Analyse (Optionnelle)
## Phase 1 : Analyse (Optionnelle)
Explorez lespace problème et validez vos idées avant de vous lancer dans la planification. [**Découvrez ce que fait
chaque outil et quand lutiliser**](../explanation/analysis-phase.md).
@ -41,13 +41,13 @@ chaque outil et quand lutiliser**](../explanation/analysis-phase.md).
| `bmad-product-brief` | Formalisez la vision stratégique — idéal lorsque votre concept est bien défini | `product-brief.md` |
| `bmad-prfaq` | Working Backwards — mettez à lépreuve et affinez votre concept produit | `prfaq-{project}.md` |
## Phase 2 : Planification
## Phase 2 : Planification
Définissez ce quil faut construire et pour qui.
| Workflow | Objectif | Livrable |
|------------|--------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------|
| `bmad-prd` | Créez, mettez à jour ou validez un PRD[^1] — découverte accompagnée, trois intentions en un seul skill | Création/Mise à jour : `prd.md`, `addendum.md`, `decision-log.md`; Validation : `validation-report.html` + `.md` |
| `bmad-prd` | Créez, mettez à jour ou validez un PRD[^1] — découverte accompagnée, trois intentions en un seul skill | Création/Mise à jour : `prd.md`, `addendum.md`, `decision-log.md`; Validation : `validation-report.html` + `.md` |
| `bmad-ux` | Concevez lexpérience utilisateur (lorsque lUX compte) | `DESIGN.md`, `EXPERIENCE.md` |
:::tip[Trois intentions en un seul skill]
@ -58,21 +58,21 @@ Définissez ce quil faut construire et pour qui.
- **Valider** — évalue un PRD à laide dune liste de contrôle configurable et produit un rapport de constats structuré au format HTML
:::
:::tip[En amont : `bmad-product-brief`]
:::tip[En amont : `bmad-product-brief`]
`bmad-product-brief` (Phase 1) produit un `product-brief.md` que `bmad-prd` peut exploiter lors de la découverte, réduisant les redondances et gardant les deux documents alignés. Aucun des deux skills ne nécessite lautre — commencez directement par `bmad-prd` si vous savez déjà ce que vous construisez.
:::
## Phase 3 : Conception de la Solution
## Phase 3 : Conception de la Solution
Décidez comment le construire et décomposez le travail en stories.
| Workflow | Objectif | Livrable |
|---------------------------------------|---------------------------------------------------|---------------------------------|
| `bmad-create-architecture` | Rendez explicites les décisions techniques | `architecture.md` avec ADRs[^2] |
| `bmad-create-epics-and-stories` | Décomposez les exigences en tâches implémentables | Fichiers depic avec stories |
| `bmad-check-implementation-readiness` | Jalon de validation avant implémentation | Décision OK / RÉSERVES / ÉCHEC |
| Workflow | Objectif | Livrable |
|---------------------------------------|---------------------------------------------------|--------------------------------|
| `bmad-create-architecture` | Rendez explicites les décisions techniques | `architecture.md` avec ADRs[^2] |
| `bmad-create-epics-and-stories` | Décomposez les exigences en tâches implémentables | Fichiers depic avec stories |
| `bmad-check-implementation-readiness` | Jalon de validation avant implémentation | Décision OK / RÉSERVES / ÉCHEC |
## Phase 4 : Implémentation
## Phase 4 : Implémentation
Construisez, une story à la fois. Lautomatisation complète de la phase 4 arrive bientôt!
@ -110,7 +110,7 @@ optionnel peut être généré à la fin de la création de larchitecture, ou
éléments clés et les garder alignés avec les conventions en vigueur.
:::
**Comment le créer :**
**Comment le créer :**
- **Manuellement** — Créez `_bmad-output/project-context.md` avec votre stack technique et vos règles dimplémentation
- **Générez-le** — Exécutez `bmad-generate-project-context` pour lauto-générer à partir de votre architecture ou de votre codebase

View File

@ -26,14 +26,14 @@ Accélérez le développement de vos applications grâce à des workflows alimen
**Développez** → Laissez BMad-Help vous guider, workflow par workflow
:::
## Découvrez BMad-Help : votre guide intelligent
## Découvrez BMad-Help : votre guide intelligent
**BMad-Help est le moyen le plus rapide de démarrer avec BMad.** Pas besoin de mémoriser les workflows ou les phases — posez simplement votre question et BMad-Help saura :
- **Inspecter votre projet** pour voir ce qui a déjà été fait
- **Vous présenter vos options** en fonction des modules installés
- **Vous recommander la prochaine étape** — y compris la première tâche obligatoire
- **Répondre à vos questions**, par exemple : «Jai une idée de SaaS, par où commencer? »
- **Répondre à vos questions**, par exemple : «Jai une idée de SaaS, par où commencer? »
### Comment utiliser BMad-Help
@ -57,7 +57,7 @@ BMad-Help vous indiquera :
### Il intervient aussi dans les workflows
BMad-Help ne se contente pas de répondre aux questions — **il se lance automatiquement à la fin de chaque workflow** pour vous indiquer exactement la suite. Finies les devinettes et les recherches dans la doc : vous recevez des instructions claires sur le prochain workflow à exécuter.
BMad-Help ne se contente pas de répondre aux questions — **il se lance automatiquement à la fin de chaque workflow** pour vous indiquer exactement la suite. Finies les devinettes et les recherches dans la doc : vous recevez des instructions claires sur le prochain workflow à exécuter.
:::tip[Commencez ici]
Après avoir installé BMad, invoquez immédiatement le skill `bmad-help`. Il détectera les modules que vous avez installés et vous orientera vers le bon point de départ pour votre projet.
@ -123,7 +123,7 @@ Chaque workflow possède une **skill** que vous invoquez par son nom dans votre
Démarrez toujours un nouveau chat pour chaque workflow. Cela évite les problèmes liés aux limites de contexte de lIA.
:::
## Étape 1 : Élaborer votre plan
## Étape 1 : Élaborer votre plan
Parcourez les phases 1 à 3. **Utilisez un nouveau chat pour chaque workflow.**
@ -133,7 +133,7 @@ Avant de commencer, pensez à créer `project-context.md` pour documenter vos pr
Créez-le manuellement à lemplacement `_bmad-output/project-context.md`, ou générez-le après larchitecture avec `bmad-generate-project-context`. [En savoir plus](../explanation/project-context.md).
:::
### Phase 1 : Analyse (optionnelle)
### Phase 1 : Analyse (optionnelle)
Tous les workflows de cette phase sont optionnels. [**Vous ne savez pas lequel choisir?**](../explanation/analysis-phase.md)
@ -142,12 +142,12 @@ Tous les workflows de cette phase sont optionnels. [**Vous ne savez pas lequel c
- **product-brief** (`bmad-product-brief`) — Document fondateur recommandé une fois votre concept bien défini
- **prfaq** (`bmad-prfaq`) — Exercice Working Backwards pour tester et affiner votre concept produit
### Phase 2 : Planification (requise)
### Phase 2 : Planification (requise)
**Pour les voies BMad Method et Enterprise :**
**Pour les voies BMad Method et Enterprise :**
1. Exécutez `bmad-prd` dans un nouveau chat — précisez votre intention (Create / Update / Validate) ou laissez le skill vous la demander
2. Résultat : `prd.md`, `addendum.md`, `decision-log.md`
2. Résultat : `prd.md`, `addendum.md`, `decision-log.md`
:::note[Intentions de `bmad-prd`]
@ -157,7 +157,7 @@ Tous les workflows de cette phase sont optionnels. [**Vous ne savez pas lequel c
:::
**Pour la voie Quick Dev :**
**Pour la voie Quick Dev :**
- Exécutez `bmad-quick-dev` — ce workflow couvre la planification et limplémentation en une seule fois; vous pouvez passer directement à limplémentation
@ -165,13 +165,13 @@ Tous les workflows de cette phase sont optionnels. [**Vous ne savez pas lequel c
Si votre projet comporte une interface utilisateur, invoquez l'**agent UX Designer** (`bmad-agent-ux-designer`) et lancez le workflow de design UX (`bmad-ux`) après avoir créé votre PRD.
:::
### Phase 3 : Solutioning (BMad Method/Enterprise)
### Phase 3 : Solutioning (BMad Method/Enterprise)
**Créer larchitecture**
1. Invoquez l'**agent Architecte** (`bmad-agent-architect`) dans un nouveau chat
2. Exécutez `bmad-create-architecture` (`bmad-create-architecture`)
3. Résultat : document darchitecture avec les décisions techniques
3. Résultat : document darchitecture avec les décisions techniques
**Créer les epics et les stories**
@ -189,7 +189,7 @@ Les epics et stories sont désormais créés *après* larchitecture. Cela pro
2. Exécutez `bmad-check-implementation-readiness` (`bmad-check-implementation-readiness`)
3. Valide la cohérence de lensemble des documents de planification
## Étape 2 : Développer votre projet
## Étape 2 : Développer votre projet
Une fois la planification terminée, passez à limplémentation. **Chaque workflow doit être exécuté dans un nouveau chat.**
@ -205,7 +205,7 @@ Pour chaque story, répétez ce cycle dans de nouveaux chats :
|-------|-------|---------------------|---------------------|--------------------------------------|
| 1 | DEV | `bmad-create-story` | `bmad-create-story` | Créer le fichier story depuis lepic |
| 2 | DEV | `bmad-dev-story` | `bmad-dev-story` | Implémenter la story |
| 3 | DEV | `bmad-code-review` | `bmad-code-review` | Validation qualité *(recommandée)* |
| 3 | DEV | `bmad-code-review` | `bmad-code-review` | Validation qualité *(recommandée)* |
Après avoir terminé toutes les stories dun epic, invoquez l'**agent Développeur** (`bmad-agent-dev`) et exécutez `bmad-retrospective` (`bmad-retrospective`).
@ -238,7 +238,7 @@ your-project/
| Workflow | Commande | Agent | Objectif |
|---------------------------------------|---------------------------------------|-----------|-----------------------------------------------------------------|
| **`bmad-help`** ⭐ | `bmad-help` | Tous | **Votre guide intelligent — posez nimporte quelle question!** |
| **`bmad-help`** ⭐ | `bmad-help` | Tous | **Votre guide intelligent — posez nimporte quelle question!** |
| `bmad-prd` | `bmad-prd` | Tous | Créer, mettre à jour ou valider un PRD |
| `bmad-create-architecture` | `bmad-create-architecture` | Architect | Créer le document darchitecture |
| `bmad-generate-project-context` | `bmad-generate-project-context` | Analyst | Créer le fichier de contexte projet |
@ -265,7 +265,7 @@ Pas strictement. Une fois le flux maîtrisé, vous pouvez exécuter les workflow
## Obtenir de laide
:::tip[Premier réflexe : BMad-Help]
:::tip[Premier réflexe : BMad-Help]
**Invoquez `bmad-help` à tout moment** — cest le moyen le plus rapide de vous débloquer. Posez-lui nimporte quelle question :
- «Que dois-je faire après linstallation? »

View File

@ -20,7 +20,7 @@ This page lists the default BMM (Agile suite) agents that install with BMad Meth
| Analyst (Mary) | `bmad-analyst` | `BP`, `MR`, `DR`, `TR`, `CB`, `WB`, `DP` | Brainstorm, Market Research, Domain Research, Technical Research, Create Brief, PRFAQ Challenge, Document Project |
| Product Manager (John) | `bmad-pm` | `CP`, `VP`, `EP`, `CE`, `IR`, `CC` | Create/Validate/Edit PRD, Create Epics and Stories, Implementation Readiness, Correct Course |
| Architect (Winston) | `bmad-architect` | `CA`, `IR` | Create Architecture, Implementation Readiness |
| Developer (Amelia) | `bmad-agent-dev` | `DS`, `QD`, `QA`, `CR`, `SP`, `CS`, `ER`, `IN` | Dev Story, Quick Dev, QA Test Generation, Code Review, Sprint Planning, Create Story, Epic Retrospective, [Forensic Investigation](../explanation/forensic-investigation.md) |
| Developer (Amelia) | `bmad-agent-dev` | `DS`, `QD`, `QA`, `CR`, `SP`, `CS`, `ER` | Dev Story, Quick Dev, QA Test Generation, Code Review, Sprint Planning, Create Story, Epic Retrospective |
| UX Designer (Sally) | `bmad-ux-designer` | `CU` | Create UX Design |
| Technical Writer (Paige) | `bmad-tech-writer` | `DP`, `WD`, `US`, `MG`, `VD`, `EC` | Document Project, Write Document, Update Standards, Mermaid Generate, Validate Doc, Explain Concept |

View File

@ -18,7 +18,7 @@ Run any core tool by typing its skill name (e.g., `bmad-help`) in your IDE. No a
| [`bmad-help`](#bmad-help) | Task | Get context-aware guidance on what to do next |
| [`bmad-brainstorming`](#bmad-brainstorming) | Workflow | Facilitate interactive brainstorming sessions |
| [`bmad-party-mode`](#bmad-party-mode) | Workflow | Orchestrate multi-agent group discussions |
| [`bmad-spec`](#bmad-spec) | Workflow | Distill any intent input into a SPEC kernel and companions, the canonical contract for downstream work |
| [`bmad-distillator`](#bmad-distillator) | Task | Lossless LLM-optimized compression of documents |
| [`bmad-advanced-elicitation`](#bmad-advanced-elicitation) | Task | Push LLM output through iterative refinement methods |
| [`bmad-review-adversarial-general`](#bmad-review-adversarial-general) | Task | Cynical review that finds what's missing and what's wrong |
| [`bmad-review-edge-case-hunter`](#bmad-review-edge-case-hunter) | Task | Exhaustive branching-path analysis for unhandled edge cases |
@ -97,36 +97,32 @@ The magic happens in ideas 50100. The workflow encourages generating 100+ ide
**Output:** Real-time multi-agent conversation with maintained agent personalities
## bmad-spec
## bmad-distillator
**Distill any intent input into the canonical SPEC contract for downstream work.** Takes a brief, PRD, GDD, RFC, brain dump, transcript, UX folder, or mixed multi-source input and produces a `SPEC.md` carrying the five-field kernel (Why, Capabilities, Constraints, Non-goals, Success signal) plus companion files for load-bearing content that does not fit the kernel.
**Lossless LLM-optimized compression of source documents.** — Produces dense, token-efficient distillates that preserve all information for downstream LLM consumption. Verifiable through round-trip reconstruction.
**Use it when:**
- You need to lock the WHAT before the HOW for any kind of work (software, game design, research, editorial, policy, business).
- You want a LLM Optimized succinct, no-fluff contract that downstream skills can consume without re-reading every upstream artifact.
- You want to validate or update an existing spec.
- A document is too large for an LLM's context window
- You need token-efficient versions of research, specs, or planning artifacts
- You want to verify no information is lost during compression
- Agents will need to frequently reference and find information in it
**How it works:**
1. Reads the input and any ancillary linked materials.
2. Distills into the five-field kernel using a configurable template; routes overflow into appropriately-named companions.
3. Runs a two-pass self-validate (coherence rules, then preservation of every load-bearing source claim).
4. Writes `SPEC.md`, sibling companions, and a `.decision-log.md` under `{output_folder}/specs/spec-{slug}/`.
Spec Law enforces eight rules: capabilities carry both intent and success; intents are WHAT not HOW; constraints actually bend decisions; non-goals are explicit; success signals are concrete; capability IDs are stable; every load-bearing source claim is preserved; prose is lean.
1. **Analyze** — Reads source documents, identifies information density and structure
2. **Compress** — Converts prose to dense bullet-point format, strips decorative formatting
3. **Verify** — Checks completeness to ensure all original information is preserved
4. **Validate** (optional) — Round-trip reconstruction test proves lossless compression
**Input:**
- `input` (required) — path or inline text. Vague idea, brain dump, PRD, GDD, RFC, brief, transcript, mockup folder, mixed multi-source.
- `slug` (optional) — required only when input is sparse and no slug is derivable from a source filename.
- `target_spec_path` (optional) — set to update an existing spec instead of creating a new one.
- `source_documents` (required) — File paths, folder paths, or glob patterns
- `downstream_consumer` (optional) — What consumes this (e.g., "PRD creation")
- `token_budget` (optional) — Approximate target size
- `--validate` (flag) — Run round-trip reconstruction test
**Output:** Spec folder containing `SPEC.md`, any companion files, and a `.decision-log.md`. Headless callers receive a JSON response with the result status and the list of files written or modified.
:::note[Mutation contract]
`bmad-spec` is the only writer of `SPEC.md` and of spec-authored companions. Other skills produce their own native artifacts and invoke `bmad-spec` headless when they need to express intent as the canonical contract or propose updates.
:::
**Output:** Distillate markdown file(s) with compression ratio report (e.g., "3.2:1")
## bmad-advanced-elicitation

View File

@ -694,7 +694,15 @@ Review kiểu "devil's advocate" — giả định vấn đề luôn tồn tại
- Tìm những gì **còn thiếu**, không chỉ những gì sai
- Trực giao với Edge Case Hunter
### 8.4. Shard Large Documents — Tách file lớn
### 8.4. Distillator — Nén tài liệu cho LLM
```bash
bmad-distillator
```
Khi tài liệu quá lớn (PRD dài, Architecture phức tạp), Distillator nén nội dung tối ưu cho LLM mà không mất thông tin quan trọng.
### 8.5. Shard Large Documents — Tách file lớn
```bash
bmad-shard-doc

View File

@ -18,7 +18,7 @@ Chạy bất kỳ công cụ cốt lõi nào bằng cách gõ tên skill của n
| [`bmad-help`](#bmad-help) | Tác vụ | Nhận hướng dẫn có ngữ cảnh về việc nên làm gì tiếp theo |
| [`bmad-brainstorming`](#bmad-brainstorming) | Quy trình | Tổ chức các phiên brainstorming có tương tác |
| [`bmad-party-mode`](#bmad-party-mode) | Quy trình | Điều phối thảo luận nhóm nhiều agent |
| [`bmad-spec`](#bmad-spec) | Quy trình | Distill any intent input into a SPEC kernel and companions, the canonical contract for downstream work (translation pending) |
| [`bmad-distillator`](#bmad-distillator) | Tác vụ | Nén tài liệu tối ưu cho LLM mà không mất thông tin |
| [`bmad-advanced-elicitation`](#bmad-advanced-elicitation) | Tác vụ | Đẩy đầu ra của LLM qua các vòng tinh luyện lặp |
| [`bmad-review-adversarial-general`](#bmad-review-adversarial-general) | Tác vụ | Rà soát hoài nghi để tìm chỗ thiếu và chỗ sai |
| [`bmad-review-edge-case-hunter`](#bmad-review-edge-case-hunter) | Tác vụ | Phân tích toàn bộ nhánh rẽ để tìm trường hợp biên chưa được xử lý |
@ -97,6 +97,33 @@ Chạy bất kỳ công cụ cốt lõi nào bằng cách gõ tên skill của n
**Đầu ra:** Cuộc hội thoại nhiều agent theo thời gian thực, vẫn giữ nguyên cá tính từng agent
## bmad-distillator
**Nén tài liệu nguồn tối ưu cho LLM mà không mất thông tin.** Công cụ này tạo ra các bản chưng cất dày đặc, tiết kiệm token nhưng vẫn giữ nguyên toàn bộ thông tin cho LLM dùng về sau. Có thể xác minh bằng tái dựng hai chiều.
**Dùng khi:**
- Một tài liệu quá lớn so với context window của LLM
- Bạn cần phiên bản tiết kiệm token của tài liệu nghiên cứu, đặc tả hoặc artifact lập kế hoạch
- Bạn muốn xác minh rằng không có thông tin nào bị mất trong quá trình nén
- Các agent sẽ cần tham chiếu và tìm thông tin trong đó thường xuyên
**Cách hoạt động:**
1. **Analyze** — Đọc tài liệu nguồn, nhận diện mật độ thông tin và cấu trúc
2. **Compress** — Chuyển văn xuôi thành dạng bullet dày đặc, bỏ trang trí không cần thiết
3. **Verify** — Kiểm tra tính đầy đủ để đảm bảo mọi thông tin gốc còn nguyên
4. **Validate** *(tùy chọn)* — Tái dựng hai chiều để chứng minh nén không mất mát
**Đầu vào:**
- `source_documents` *(bắt buộc)* — Đường dẫn file, thư mục hoặc mẫu glob
- `downstream_consumer` *(tùy chọn)* — Thành phần sẽ dùng đầu ra này, ví dụ "PRD creation"
- `token_budget` *(tùy chọn)* — Kích thước mục tiêu gần đúng
- `--validate` *(cờ)* — Chạy kiểm tra tái dựng hai chiều
**Đầu ra:** Một hoặc nhiều file markdown distillate kèm báo cáo tỷ lệ nén, ví dụ `3.2:1`
## bmad-advanced-elicitation
**Đẩy đầu ra của LLM qua các phương pháp tinh luyện lặp.** Công cụ này chọn từ thư viện kỹ thuật elicitation để cải thiện nội dung một cách có hệ thống qua nhiều lượt.

View File

@ -18,7 +18,7 @@ sidebar:
| [`bmad-help`](#bmad-help) | Task | 基于项目上下文推荐下一步 |
| [`bmad-brainstorming`](#bmad-brainstorming) | Workflow | 引导式头脑风暴与想法扩展 |
| [`bmad-party-mode`](#bmad-party-mode) | Workflow | 多智能体协作讨论 |
| [`bmad-spec`](#bmad-spec) | Workflow | Distill any intent input into a SPEC kernel and companions, the canonical contract for downstream work (translation pending) |
| [`bmad-distillator`](#bmad-distillator) | Task | 无损压缩文档,提升 LLM 消费效率 |
| [`bmad-advanced-elicitation`](#bmad-advanced-elicitation) | Task | 通过多轮技法增强 LLM 输出 |
| [`bmad-review-adversarial-general`](#bmad-review-adversarial-general) | Task | 对抗式问题发现审查 |
| [`bmad-review-edge-case-hunter`](#bmad-review-edge-case-hunter) | Task | 边界与分支路径穷举审查 |
@ -80,6 +80,29 @@ sidebar:
**输入:** 讨论主题(可指定希望参与的角色)
**输出:** 多智能体实时对话过程
## bmad-distillator
**定位:** 在不丢失信息前提下压缩文档,降低 token 成本。
**适用场景:**
- 源文档超过上下文窗口
- 需要把研究/规格材料转成高密度引用版本
- 想验证压缩结果是否可逆
**工作机制:**
1. 分析源文档结构与信息密度
2. 压缩为高密度结构化表达
3. 校验信息完整性
4. 可选执行往返重构验证round-trip
**输入:**
- `source_documents`(必填)
- `downstream_consumer`(可选)
- `token_budget`(可选)
- `--validate`(可选标志)
**输出:** 精馏文档 + 压缩比报告
## bmad-advanced-elicitation
**定位:** 对已有 LLM 输出做第二轮深挖与改写强化。

View File

@ -52,8 +52,3 @@ bmad-bmm-sprint-planning
bmad-bmm-sprint-status
bmad-bmm-technical-research
bmad-bmm-validate-prd
# Removed skills (post-v6.7.x)
# bmad-distillator: superseded by bmad-spec (universal intent distiller with
# preservation-validated contract for downstream skills).
bmad-distillator

View File

@ -0,0 +1,177 @@
---
name: bmad-distillator
description: Lossless LLM-optimized compression of source documents. Use when the user requests to 'distill documents' or 'create a distillate'.
---
# Distillator: A Document Distillation Engine
## Overview
This skill produces hyper-compressed, token-efficient documents (distillates) from any set of source documents. A distillate preserves every fact, decision, constraint, and relationship from the sources while stripping all overhead that humans need and LLMs don't. Act as an information extraction and compression specialist. The output is a single dense document (or semantically-split set) that a downstream LLM workflow can consume as sole context input without information loss.
This is a compression task, not a summarization task. Summaries are lossy. Distillates are lossless compression optimized for LLM consumption.
## On Activation
1. **Validate inputs.** The caller must provide:
- **source_documents** (required) — One or more file paths, folder paths, or glob patterns to distill
- **downstream_consumer** (optional) — What workflow/agent consumes this distillate (e.g., "PRD creation", "architecture design"). When provided, use it to judge signal vs noise. When omitted, preserve everything.
- **token_budget** (optional) — Approximate target size. When provided and the distillate would exceed it, trigger semantic splitting.
- **output_path** (optional) — Where to save. When omitted, save adjacent to the primary source document with `-distillate.md` suffix.
- **--validate** (flag) — Run round-trip reconstruction test after producing the distillate.
2. **Route** — proceed to Stage 1.
## Stages
| # | Stage | Purpose |
|---|-------|---------|
| 1 | Analyze | Run analysis script, determine routing and splitting |
| 2 | Compress | Spawn compressor agent(s) to produce the distillate |
| 3 | Verify & Output | Completeness check, format check, save output |
| 4 | Round-Trip Validate | (--validate only) Reconstruct and diff against originals |
### Stage 1: Analyze
Run `scripts/analyze_sources.py --help` then run it with the source paths. Use its routing recommendation and grouping output to drive Stage 2. Do NOT read the source documents yourself.
### Stage 2: Compress
**Single mode** (routing = `"single"`, ≤3 files, ≤15K estimated tokens):
Spawn one subagent using `agents/distillate-compressor.md` with all source file paths.
**Fan-out mode** (routing = `"fan-out"`):
1. Spawn one compressor subagent per group from the analysis output. Each compressor receives only its group's file paths and produces an intermediate distillate.
2. After all compressors return, spawn one final **merge compressor** subagent using `agents/distillate-compressor.md`. Pass it the intermediate distillate contents as its input (not the original files). Its job is cross-group deduplication, thematic regrouping, and final compression.
3. Clean up intermediate distillate content (it exists only in memory, not saved to disk).
**Graceful degradation:** If subagent spawning is unavailable, read the source documents and perform the compression work directly using the same instructions from `agents/distillate-compressor.md`. For fan-out, process groups sequentially then merge.
The compressor returns a structured JSON result containing the distillate content, source headings, named entities, and token estimate.
### Stage 3: Verify & Output
After the compressor (or merge compressor) returns:
1. **Completeness check.** Using the headings and named entities list returned by the compressor, verify each appears in the distillate content. If gaps are found, send them back to the compressor for a targeted fix pass — not a full recompression. Limit to 2 fix passes maximum.
2. **Format check.** Verify the output follows distillate format rules:
- No prose paragraphs (only bullets)
- No decorative formatting
- No repeated information
- Each bullet is self-contained
- Themes are clearly delineated with `##` headings
3. **Determine output format.** Using the split prediction from Stage 1 and actual distillate size:
**Single distillate** (≤~5,000 tokens or token_budget not exceeded):
Save as a single file with frontmatter:
```yaml
---
type: bmad-distillate
sources:
- "{relative path to source file 1}"
- "{relative path to source file 2}"
downstream_consumer: "{consumer or 'general'}"
created: "{date}"
token_estimate: {approximate token count}
parts: 1
---
```
**Split distillate** (>~5,000 tokens, or token_budget requires it):
Create a folder `{base-name}-distillate/` containing:
```
{base-name}-distillate/
├── _index.md # Orientation, cross-cutting items, section manifest
├── 01-{topic-slug}.md # Self-contained section
├── 02-{topic-slug}.md
└── 03-{topic-slug}.md
```
The `_index.md` contains:
- Frontmatter with sources (relative paths from the distillate folder to the originals)
- 3-5 bullet orientation (what was distilled, from what)
- Section manifest: each section's filename + 1-line description
- Cross-cutting items that span multiple sections
Each section file is self-contained — loadable independently. Include a 1-line context header: "This section covers [topic]. Part N of M."
Source paths in frontmatter must be relative to the distillate's location.
4. **Measure distillate.** Run `scripts/analyze_sources.py` on the final distillate file(s) to get accurate token counts for the output. Use the `total_estimated_tokens` from this analysis as `distillate_total_tokens`.
5. **Report results.** Always return structured JSON output:
```json
{
"status": "complete",
"distillate": "{path or folder path}",
"section_distillates": ["{path1}", "{path2}"] or null,
"source_total_tokens": N,
"distillate_total_tokens": N,
"compression_ratio": "X:1",
"source_documents": ["{path1}", "{path2}"],
"completeness_check": "pass" or "pass_with_additions"
}
```
Where `source_total_tokens` is from the Stage 1 analysis and `distillate_total_tokens` is from step 4. The `compression_ratio` is `source_total_tokens / distillate_total_tokens` formatted as "X:1" (e.g., "3.2:1").
6. If `--validate` flag was set, proceed to Stage 4. Otherwise, done.
### Stage 4: Round-Trip Validation (--validate only)
This stage proves the distillate is lossless by reconstructing source documents from the distillate alone. Use for critical documents where information loss is unacceptable, or as a quality gate for high-stakes downstream workflows. Not for routine use — it adds significant token cost.
1. **Spawn the reconstructor agent** using `agents/round-trip-reconstructor.md`. Pass it ONLY the distillate file path (or `_index.md` path for split distillates) — it must NOT have access to the original source documents.
For split distillates, spawn one reconstructor per section in parallel. Each receives its section file plus the `_index.md` for cross-cutting context.
**Graceful degradation:** If subagent spawning is unavailable, this stage cannot be performed by the main agent (it has already seen the originals). Report that round-trip validation requires subagent support and skip.
2. **Receive reconstructions.** The reconstructor returns reconstruction file paths saved adjacent to the distillate.
3. **Perform semantic diff.** Read both the original source documents and the reconstructions. For each section of the original, assess:
- Is the core information present in the reconstruction?
- Are specific details preserved (numbers, names, decisions)?
- Are relationships and rationale intact?
- Did the reconstruction add anything not in the original? (indicates hallucination filling gaps)
4. **Produce validation report** saved adjacent to the distillate as `-validation-report.md`:
```markdown
---
type: distillate-validation
distillate: "{distillate path}"
sources: ["{source paths}"]
created: "{date}"
---
## Validation Summary
- Status: PASS | PASS_WITH_WARNINGS | FAIL
- Information preserved: {percentage estimate}
- Gaps found: {count}
- Hallucinations detected: {count}
## Gaps (information in originals but missing from reconstruction)
- {gap description} — Source: {which original}, Section: {where}
## Hallucinations (information in reconstruction not traceable to originals)
- {hallucination description} — appears to fill gap in: {section}
## Possible Gap Markers (flagged by reconstructor)
- {marker description}
```
5. **If gaps are found**, offer to run a targeted fix pass on the distillate — adding the missing information without full recompression. Limit to 2 fix passes maximum.
6. **Clean up** — delete the temporary reconstruction files after the report is generated.

View File

@ -0,0 +1,116 @@
# Distillate Compressor Agent
Act as an information extraction and compression specialist. Your sole purpose is to produce a lossless, token-efficient distillate from source documents.
You receive: source document file paths, an optional downstream_consumer context, and a splitting decision.
You must load and apply `../resources/compression-rules.md` before producing output. Reference `../resources/distillate-format-reference.md` for the expected output format.
## Compression Process
### Step 1: Read Sources
Read all source document files. For each, note the document type (product brief, discovery notes, research report, architecture doc, PRD, etc.) based on content and naming.
### Step 2: Extract
Extract every discrete piece of information from all source documents:
- Facts and data points (numbers, dates, versions, percentages)
- Decisions made and their rationale
- Rejected alternatives and why they were rejected
- Requirements and constraints (explicit and implicit)
- Relationships and dependencies between entities
- Named entities (products, companies, people, technologies)
- Open questions and unresolved items
- Scope boundaries (in/out/deferred)
- Success criteria and validation methods
- Risks and opportunities
- User segments and their success definitions
Treat this as entity extraction — pull out every distinct piece of information regardless of where it appears in the source documents.
### Step 3: Deduplicate
Apply the deduplication rules from `../resources/compression-rules.md`.
### Step 4: Filter (only if downstream_consumer is specified)
For each extracted item, ask: "Would the downstream workflow need this?"
- Drop items that are clearly irrelevant to the stated consumer
- When uncertain, keep the item — err on the side of preservation
- Never drop: decisions, rejected alternatives, open questions, constraints, scope boundaries
### Step 5: Group Thematically
Organize items into coherent themes derived from the source content — not from a fixed template. The themes should reflect what the documents are actually about.
Common groupings (use what fits, omit what doesn't, add what's needed):
- Core concept / problem / motivation
- Solution / approach / architecture
- Users / segments
- Technical decisions / constraints
- Scope boundaries (in/out/deferred)
- Competitive context
- Success criteria
- Rejected alternatives
- Open questions
- Risks and opportunities
### Step 6: Compress Language
For each item, apply the compression rules from `../resources/compression-rules.md`:
- Strip prose transitions and connective tissue
- Remove hedging and rhetoric
- Remove explanations of common knowledge
- Preserve specific details (numbers, names, versions, dates)
- Ensure the item is self-contained (understandable without reading the source)
- Make relationships explicit ("X because Y", "X blocks Y", "X replaces Y")
### Step 7: Format Output
Produce the distillate as dense thematically-grouped bullets:
- `##` headings for themes — no deeper heading levels needed
- `- ` bullets for items — every token must carry signal
- No decorative formatting (no bold for emphasis, no horizontal rules)
- No prose paragraphs — only bullets
- Semicolons to join closely related short items within a single bullet
- Each bullet self-contained — understandable without reading other bullets
Do NOT include frontmatter — the calling skill handles that.
## Semantic Splitting
If the splitting decision indicates splitting is needed, load `../resources/splitting-strategy.md` and follow it.
When splitting:
1. Identify natural semantic boundaries in the content — coherent topic clusters, not arbitrary size breaks.
2. Produce a **root distillate** containing:
- 3-5 bullet orientation (what was distilled, for whom, how many parts)
- Cross-references to section distillates
- Items that span multiple sections
3. Produce **section distillates**, each self-sufficient. Include a 1-line context header: "This section covers [topic]. Part N of M from [source document names]."
## Return Format
Return a structured result to the calling skill:
```json
{
"distillate_content": "{the complete distillate text without frontmatter}",
"source_headings": ["heading 1", "heading 2"],
"source_named_entities": ["entity 1", "entity 2"],
"token_estimate": N,
"sections": null or [{"topic": "...", "content": "..."}]
}
```
- **distillate_content**: The full distillate text
- **source_headings**: All Level 2+ headings found across source documents (for completeness verification)
- **source_named_entities**: Key named entities (products, companies, people, technologies, decisions) found in sources
- **token_estimate**: Approximate token count of the distillate
- **sections**: null for single distillates; array of section objects if semantically split
Do not include conversational text, status updates, or preamble — return only the structured result.

View File

@ -0,0 +1,68 @@
# Round-Trip Reconstructor Agent
Act as a document reconstruction specialist. Your purpose is to prove a distillate's completeness by reconstructing the original source documents from the distillate alone.
**Critical constraint:** You receive ONLY the distillate file path. You must NOT have access to the original source documents. If you can see the originals, the test is meaningless.
## Process
### Step 1: Analyze the Distillate
Read the distillate file. Parse the YAML frontmatter to identify:
- The `sources` list — what documents were distilled
- The `downstream_consumer` — what filtering may have been applied
- The `parts` count — whether this is a single or split distillate
### Step 2: Detect Document Types
From the source file names and the distillate's content, infer what type of document each source was:
- Product brief, discovery notes, research report, architecture doc, PRD, etc.
- Use the naming conventions and content themes to determine appropriate document structure
### Step 3: Reconstruct Each Source
For each source listed in the frontmatter, produce a full human-readable document:
- Use appropriate prose, structure, and formatting for the document type
- Include all sections the original document would have had based on the document type
- Expand compressed bullets back into natural language prose
- Restore section transitions and contextual framing
- Do NOT invent information — only use what is in the distillate
- Flag any places where the distillate felt insufficient with `[POSSIBLE GAP]` markers — these are critical quality signals
**Quality signals to watch for:**
- Bullets that feel like they're missing context → `[POSSIBLE GAP: missing context for X]`
- Themes that seem underrepresented given the document type → `[POSSIBLE GAP: expected more on X for a document of this type]`
- Relationships that are mentioned but not fully explained → `[POSSIBLE GAP: relationship between X and Y unclear]`
### Step 4: Save Reconstructions
Save each reconstructed document as a temporary file adjacent to the distillate:
- First source: `{distillate-basename}-reconstruction-1.md`
- Second source: `{distillate-basename}-reconstruction-2.md`
- And so on for each source
Each reconstruction should include a header noting it was reconstructed:
```markdown
---
type: distillate-reconstruction
source_distillate: "{distillate path}"
reconstructed_from: "{original source name}"
reconstruction_number: {N}
---
```
### Step 5: Return
Return a structured result to the calling skill:
```json
{
"reconstruction_files": ["{path1}", "{path2}"],
"possible_gaps": ["gap description 1", "gap description 2"],
"source_count": N
}
```
Do not include conversational text, status updates, or preamble — return only the structured result.

View File

@ -0,0 +1,51 @@
# Compression Rules
These rules govern how source text is compressed into distillate format. Apply as a final pass over all output.
## Strip — Remove entirely
- Prose transitions: "As mentioned earlier", "It's worth noting", "In addition to this"
- Rhetoric and persuasion: "This is a game-changer", "The exciting thing is"
- Hedging: "We believe", "It's likely that", "Perhaps", "It seems"
- Self-reference: "This document describes", "As outlined above"
- Common knowledge explanations: "Vercel is a cloud platform company", "MIT is an open-source license", "JSON is a data interchange format"
- Repeated introductions of the same concept
- Section transition paragraphs
- Formatting-only elements (decorative bold/italic for emphasis, horizontal rules for visual breaks)
- Filler phrases: "In order to", "It should be noted that", "The fact that"
## Preserve — Keep always
- Specific numbers, dates, versions, percentages
- Named entities (products, companies, people, technologies)
- Decisions made and their rationale (compressed: "Decision: X. Reason: Y")
- Rejected alternatives and why (compressed: "Rejected: X. Reason: Y")
- Explicit constraints and non-negotiables
- Dependencies and ordering relationships
- Open questions and unresolved items
- Scope boundaries (in/out/deferred)
- Success criteria and how they're validated
- User segments and what success means for each
- Risks with their severity signals
- Conflicts between source documents
## Transform — Change form for efficiency
- Long prose paragraphs → single dense bullet capturing the same information
- "We decided to use X because Y and Z" → "X (rationale: Y, Z)"
- Repeated category labels → group under a single heading, no per-item labels
- "Risk: ... Severity: high" → "HIGH RISK: ..."
- Conditional statements → "If X → Y" form
- Multi-sentence explanations → semicolon-separated compressed form
- Lists of related short items → single bullet with semicolons
- "X is used for Y" → "X: Y" when context is clear
- Verbose enumerations → parenthetical lists: "platforms (Cursor, Claude Code, Windsurf, Copilot)"
## Deduplication Rules
- Same fact in multiple documents → keep the version with most context
- Same concept at different detail levels → keep the detailed version
- Overlapping lists → merge into single list, no duplicates
- When source documents disagree → note the conflict explicitly: "Brief says X; discovery notes say Y — unresolved"
- Executive summary points that are expanded elsewhere → keep only the expanded version
- Introductory framing repeated across sections → capture once under the most relevant theme

View File

@ -0,0 +1,227 @@
# Distillate Format Reference
Examples showing the transformation from human-readable source content to distillate format.
## Frontmatter
Every distillate includes YAML frontmatter. Source paths are relative to the distillate's location so the distillate remains portable:
```yaml
---
type: bmad-distillate
sources:
- "product-brief-example.md"
- "product-brief-example-discovery-notes.md"
downstream_consumer: "PRD creation"
created: "2026-03-13"
token_estimate: 1200
parts: 1
---
```
## Before/After Examples
### Prose Paragraph to Dense Bullet
**Before** (human-readable brief excerpt):
```
## What Makes This Different
**The anti-fragmentation layer.** The AI tooling space is fracturing across 40+
platforms with no shared methodology layer. BMAD is uniquely positioned to be the
cross-platform constant — the structured approach that works the same in Cursor,
Claude Code, Windsurf, Copilot, and whatever launches next month. Every other
methodology or skill framework maintains its own platform support matrix. By
building on the open-source skills CLI ecosystem, BMAD offloads the highest-churn
maintenance burden and focuses on what actually differentiates it: the methodology
itself.
```
**After** (distillate):
```
## Differentiation
- Anti-fragmentation positioning: BMAD = cross-platform constant across 40+ fragmenting AI tools; no competitor provides shared methodology layer
- Platform complexity delegated to Vercel skills CLI ecosystem (MIT); BMAD maintains methodology, not platform configs
```
### Technical Details to Compressed Facts
**Before** (discovery notes excerpt):
```
## Competitive Landscape
- **Vercel Skills.sh**: 83K+ skills, 18 agents, largest curated leaderboard —
but dev-only, skills trigger unreliably (20% without explicit prompting)
- **SkillsMP**: 400K+ skills directory, pure aggregator with no curation or CLI
- **ClawHub/OpenClaw**: ~3.2K curated skills with versioning/rollback, small ecosystem
- **Lindy**: No-code AI agent builder for business automation — closed platform,
no skill sharing
- **Microsoft Copilot Studio**: Enterprise no-code agent builder — vendor-locked
to Microsoft
- **MindStudio**: No-code AI agent platform — siloed, no interoperability
- **Make/Zapier AI**: Workflow automation adding AI agents — workflow-centric,
not methodology-centric
- **Key gap**: NO competitor combines structured methodology with plugin
marketplace — this is BMAD's whitespace
```
**After** (distillate):
```
## Competitive Landscape
- No competitor combines structured methodology + plugin marketplace (whitespace)
- Skills.sh (Vercel): 83K skills, 18 agents, dev-only, 20% trigger reliability
- SkillsMP: 400K skills, aggregator only, no curation/CLI
- ClawHub: 3.2K curated, versioning, small ecosystem
- No-code platforms (Lindy, Copilot Studio, MindStudio, Make/Zapier): closed/siloed, no skill portability, business-only
```
### Deduplication Across Documents
When the same fact appears in both a brief and discovery notes:
**Brief says:**
```
bmad-help must always be included as a base skill in every bundle
```
**Discovery notes say:**
```
bmad-help must always be included as a base skill in every bundle/install
(solves discoverability problem)
```
**Distillate keeps the more contextual version:**
```
- bmad-help: always included as base skill in every bundle (solves discoverability)
```
### Decision/Rationale Compression
**Before:**
```
We decided not to build our own platform support matrix going forward, instead
delegating to the Vercel skills CLI ecosystem. The rationale is that maintaining
20+ platform configs is the biggest maintenance burden and it's unsustainable
at 40+ platforms.
```
**After:**
```
- Rejected: own platform support matrix. Reason: unsustainable at 40+ platforms; delegate to Vercel CLI ecosystem
```
## Full Example
A complete distillate produced from a product brief and its discovery notes, targeted at PRD creation:
```markdown
---
type: bmad-distillate
sources:
- "product-brief-bmad-next-gen-installer.md"
- "product-brief-bmad-next-gen-installer-discovery-notes.md"
downstream_consumer: "PRD creation"
created: "2026-03-13"
token_estimate: 1450
parts: 1
---
## Core Concept
- BMAD Next-Gen Installer: replaces monolithic Node.js CLI with skill-based plugin architecture for distributing BMAD methodology across 40+ AI platforms
- Three layers: self-describing plugins (bmad-manifest.json), cross-platform install via Vercel skills CLI (MIT), runtime registration via bmad-setup skill
- Transforms BMAD from dev-only methodology into open platform for any domain (creative, therapeutic, educational, personal)
## Problem
- Current installer maintains ~20 platform configs manually; each platform convention change requires installer update, test, release — largest maintenance burden on team
- Node.js/npm required — blocks non-technical users on UI-based platforms (Claude Co-Work, etc.)
- CSV manifests are static, generated once at install; no runtime scanning/registration
- Unsustainable at 40+ platforms; new tools launching weekly
## Solution Architecture
- Plugins: skill bundles with Anthropic plugin standard as base format + bmad-manifest.json extending for BMAD-specific metadata (installer options, capabilities, help integration, phase ordering, dependencies)
- Existing manifest example: `{"module-code":"bmm","replaces-skill":"bmad-create-product-brief","capabilities":[{"name":"create-brief","menu-code":"CB","supports-headless":true,"phase-name":"1-analysis","preceded-by":["brainstorming"],"followed-by":["create-prd"],"is-required":true}]}`
- Vercel skills CLI handles platform translation; integration pattern (wrap/fork/call) is PRD decision
- bmad-setup: global skill scanning installed bmad-manifest.json files, registering capabilities, configuring project settings; always included as base skill in every bundle (solves bootstrapping)
- bmad-update: plugin update path without full reinstall; technical approach (diff/replace/preserve customizations) is PRD decision
- Distribution tiers: (1) NPX installer wrapping skills CLI for technical users, (2) zip bundle + platform-specific README for non-technical users, (3) future marketplace
- Non-technical path has honest friction: "copy to right folder" requires knowing where; per-platform README instructions; improves over time as low-code space matures
## Differentiation
- Anti-fragmentation: BMAD = cross-platform constant; no competitor provides shared methodology layer across AI tools
- Curated quality: all submissions gated, human-reviewed by BMad + core team; 13.4% of community skills have critical vulnerabilities (Snyk 2026); quality gate value increases as ecosystem gets noisier
- Domain-agnostic: no competitor builds beyond software dev workflows; same plugin system powers any domain via BMAD Builder (separate initiative)
## Users (ordered by v1 priority)
- Module authors (primary v1): package/test/distribute plugins independently without installer changes
- Developers: single-command install on any of 40+ platforms via NPX
- Non-technical users: install without Node/Git/terminal; emerging segment including PMs, designers, educators
- Future plugin creators: non-dev authors using BMAD Builder; need distribution without building own installer
## Success Criteria
- Zero (or near-zero) custom platform directory code; delegated to skills CLI ecosystem
- Installation verified on top platforms by volume; skills CLI handles long tail
- Non-technical install path validated with non-developer users
- bmad-setup discovers/registers all plugins from manifests; clear errors for malformed manifests
- At least one external module author successfully publishes plugin using manifest system
- bmad-update works without full reinstall
- Existing CLI users have documented migration path
## Scope
- In: manifest spec, bmad-setup, bmad-update, Vercel CLI integration, NPX installer, zip bundles, migration path
- Out: BMAD Builder, marketplace web platform, skill conversion (prerequisite, separate), one-click install for all platforms, monetization, quality certification process (gated-submission principle is architectural requirement; process defined separately)
- Deferred: CI/CD integration, telemetry for module authors, air-gapped enterprise install, zip bundle integrity verification (checksums/signing), deeper non-technical platform integrations
## Current Installer (migration context)
- Entry: `tools/installer/bmad-cli.js` (Commander.js) → `tools/installer/core/installer.js`
- Platforms: `platform-codes.yaml` (~20 platforms with target dirs, legacy dirs, template types, special flags)
- Manifests: skill-manifest.csv is the current source of truth; agent essence lives in `_bmad/config.toml` (generated from each module.yaml's `agents:` block)
- External modules: `external-official-modules.yaml` (CIS, GDS, TEA, WDS) from npm with semver
- Dependencies: 4-pass resolver (collect → parse → resolve → transitive); YAML-declared only
- Config: prompts for name, communication language, document output language, output folder
- Skills already use directory-per-skill layout; bmad-manifest.json sidecars exist but are not source of truth
- Key shift: CSV-based static manifests → JSON-based runtime scanning
## Vercel Skills CLI
- `npx skills add <source>` — GitHub, GitLab, local paths, git URLs
- 40+ agents; per-agent path mappings; symlinks (recommended) or copies
- Scopes: project-level or global
- Discovery: `skills/`, `.agents/skills/`, agent-specific paths, `.claude-plugin/marketplace.json`
- Commands: add, list, find, remove, check, update, init
- Non-interactive: `-y`, `--all` flags for CI/CD
## Competitive Landscape
- No competitor combines structured methodology + plugin marketplace (whitespace)
- Skills.sh (Vercel): 83K skills, dev-only, 20% trigger reliability without explicit prompting
- SkillsMP: 400K skills, aggregator only, no curation
- ClawHub: 3.2K curated, versioning, small
- No-code platforms (Lindy, Copilot Studio, MindStudio, Make/Zapier): closed/siloed, no skill portability, business-only
- Market: $7.84B (2025) → $52.62B (2030); Agent Skills spec ~4 months old, 351K+ skills; standards converging under Linux Foundation AAIF (MCP, AGENTS.md, A2A)
## Rejected Alternatives
- Building own platform support matrix: unsustainable at 40+; delegate to Vercel ecosystem
- One-click install for non-technical v1: emerging space; guidance-based, improve over time
- Prior roadmap/brainstorming: clean start, unconstrained by previous planning
## Open Questions
- Vercel CLI integration pattern: wrap/fork/call/peer dependency?
- bmad-update mechanics: diff/replace? Preserve user customizations?
- Migration story: command/manual reinstall/compatibility shim?
- Cross-platform testing: CI matrix for top N? Community testing for rest?
- bmad-manifest.json as open standard submission to Agent Skills governance?
- Platforms NOT supported by Vercel skills CLI?
- Manifest versioning strategy for backward compatibility?
- Plugin author getting-started experience and tooling?
## Opportunities
- Module authors as acquisition channel: each published plugin distributes BMAD to creator's audience
- CI/CD integration: bmad-setup as pipeline one-liner increases stickiness
- Educational institutions: structured methodology + non-technical install → university AI curriculum
- Skill composability: mixing BMAD modules with third-party skills for custom methodology stacks
## Risks
- Manifest format evolution creates versioning/compatibility burden once third-party authors publish
- Quality gate needs defined process, not just claim — gated review model addresses
- 40+ platform testing environments even with Vercel handling translation
- Scope creep pressure from marketplace vision (explicitly excluded but primary long-term value)
- Vercel dependency: minor supply-chain risk; MIT license allows fork if deprioritized
```

View File

@ -0,0 +1,78 @@
# Semantic Splitting Strategy
When the source content is large (exceeds ~15,000 tokens) or a token_budget requires it, split the distillate into semantically coherent sections rather than arbitrary size breaks.
## Why Semantic Over Size-Based
Arbitrary splits (every N tokens) break coherence. A downstream workflow loading "part 2 of 4" gets context fragments. Semantic splits produce self-contained topic clusters that a workflow can load selectively — "give me just the technical decisions section" — which is more useful and more token-efficient for the consumer.
## Splitting Process
### 1. Identify Natural Boundaries
After the initial extraction and deduplication (Steps 1-2 of the compression process), look for natural semantic boundaries:
- Distinct problem domains or functional areas
- Different stakeholder perspectives (users, technical, business)
- Temporal boundaries (current state vs future vision)
- Scope boundaries (in-scope vs out-of-scope vs deferred)
- Phase boundaries (analysis, design, implementation)
Choose boundaries that produce sections a downstream workflow might load independently.
### 2. Assign Items to Sections
For each extracted item, assign it to the most relevant section. Items that span multiple sections go in the root distillate.
Cross-cutting items (items relevant to multiple sections):
- Constraints that affect all areas → root distillate
- Decisions with broad impact → root distillate
- Section-specific decisions → section distillate
### 3. Produce Root Distillate
The root distillate contains:
- **Orientation** (3-5 bullets): what was distilled, from what sources, for what consumer, how many sections
- **Cross-references**: list of section distillates with 1-line descriptions
- **Cross-cutting items**: facts, decisions, and constraints that span multiple sections
- **Scope summary**: high-level in/out/deferred if applicable
### 4. Produce Section Distillates
Each section distillate must be self-sufficient — a reader loading only one section should understand it without the others.
Each section includes:
- **Context header** (1 line): "This section covers [topic]. Part N of M from [source document names]."
- **Section content**: thematically-grouped bullets following the same compression rules as a single distillate
- **Cross-references** (if needed): pointers to other sections for related content
### 5. Output Structure
Create a folder `{base-name}-distillate/` containing:
```
{base-name}-distillate/
├── _index.md # Root distillate: orientation, cross-cutting items, section manifest
├── 01-{topic-slug}.md # Self-contained section
├── 02-{topic-slug}.md
└── 03-{topic-slug}.md
```
Example:
```
product-brief-distillate/
├── _index.md
├── 01-problem-solution.md
├── 02-technical-decisions.md
└── 03-users-market.md
```
## Size Targets
When a token_budget is specified:
- Root distillate: ~20% of budget (orientation + cross-cutting items)
- Remaining budget split proportionally across sections based on content density
- If a section exceeds its proportional share, compress more aggressively or sub-split
When no token_budget but splitting is needed:
- Aim for sections of 3,000-5,000 tokens each
- Root distillate as small as possible while remaining useful standalone

View File

@ -0,0 +1,300 @@
# /// script
# /// requires-python = ">=3.10"
# /// dependencies = []
# ///
"""Analyze source documents for the distillation generator.
Enumerates files from paths/folders/globs, computes sizes and token estimates,
detects document types from naming conventions, and suggests groupings for
related documents (e.g., a brief paired with its discovery notes).
Accepts: file paths, folder paths (scans recursively for .md/.txt/.yaml/.yml/.json),
or glob patterns. Skips node_modules, .git, __pycache__, .venv, _bmad-output.
Output JSON structure:
status: "ok" | "error"
files[]: path, filename, size_bytes, estimated_tokens, doc_type
summary: total_files, total_size_bytes, total_estimated_tokens
groups[]: group_key, files[] with role (primary/companion/standalone)
- Groups related docs by naming convention (e.g., brief + discovery-notes)
routing: recommendation ("single" | "fan-out"), reason
- single: 3 files AND 15K estimated tokens
- fan-out: >3 files OR >15K estimated tokens
split_prediction: prediction ("likely" | "unlikely"), reason, estimated_distillate_tokens
- Estimates distillate at ~1/3 source size; splits if >5K tokens
"""
from __future__ import annotations
import argparse
import glob
import json
import os
import re
import sys
from pathlib import Path
# Extensions to include when scanning folders
INCLUDE_EXTENSIONS = {".md", ".txt", ".yaml", ".yml", ".json"}
# Directories to skip when scanning folders
SKIP_DIRS = {
"node_modules", ".git", "__pycache__", ".venv", "venv",
".claude", "_bmad-output", ".cursor", ".vscode",
}
# Approximate chars per token for estimation
CHARS_PER_TOKEN = 4
# Thresholds
SINGLE_COMPRESSOR_MAX_TOKENS = 15_000
SINGLE_DISTILLATE_MAX_TOKENS = 5_000
# Naming patterns for document type detection
DOC_TYPE_PATTERNS = [
(r"discovery[_-]notes", "discovery-notes"),
(r"product[_-]brief", "product-brief"),
(r"research[_-]report", "research-report"),
(r"architecture", "architecture-doc"),
(r"prd", "prd"),
(r"distillate", "distillate"),
(r"changelog", "changelog"),
(r"readme", "readme"),
(r"spec", "specification"),
(r"requirements", "requirements"),
(r"design[_-]doc", "design-doc"),
(r"meeting[_-]notes", "meeting-notes"),
(r"brainstorm", "brainstorming"),
(r"interview", "interview-notes"),
]
# Patterns for grouping related documents
GROUP_PATTERNS = [
# base document + discovery notes
(r"^(.+?)(?:-discovery-notes|-discovery_notes)\.(\w+)$", r"\1.\2"),
# base document + appendix
(r"^(.+?)(?:-appendix|-addendum)(?:-\w+)?\.(\w+)$", r"\1.\2"),
# base document + review/feedback
(r"^(.+?)(?:-review|-feedback)\.(\w+)$", r"\1.\2"),
]
def resolve_inputs(inputs: list[str]) -> list[Path]:
"""Resolve input arguments to a flat list of file paths."""
files: list[Path] = []
for inp in inputs:
path = Path(inp)
if path.is_file():
files.append(path.resolve())
elif path.is_dir():
for root, dirs, filenames in os.walk(path):
dirs[:] = [d for d in dirs if d not in SKIP_DIRS]
for fn in sorted(filenames):
fp = Path(root) / fn
if fp.suffix.lower() in INCLUDE_EXTENSIONS:
files.append(fp.resolve())
else:
# Try as glob
matches = glob.glob(inp, recursive=True)
for m in sorted(matches):
mp = Path(m)
if mp.is_file() and mp.suffix.lower() in INCLUDE_EXTENSIONS:
files.append(mp.resolve())
# Deduplicate while preserving order
seen: set[Path] = set()
deduped: list[Path] = []
for f in files:
if f not in seen:
seen.add(f)
deduped.append(f)
return deduped
def detect_doc_type(filename: str) -> str:
"""Detect document type from filename."""
name_lower = filename.lower()
for pattern, doc_type in DOC_TYPE_PATTERNS:
if re.search(pattern, name_lower):
return doc_type
return "unknown"
def suggest_groups(files: list[Path]) -> list[dict]:
"""Suggest document groupings based on naming conventions."""
groups: dict[str, list[dict]] = {}
ungrouped: list[dict] = []
file_map = {f.name: f for f in files}
assigned: set[str] = set()
for f in files:
if f.name in assigned:
continue
matched = False
for pattern, base_pattern in GROUP_PATTERNS:
m = re.match(pattern, f.name, re.IGNORECASE)
if m:
# This file is a companion — find its base
base_name = re.sub(pattern, base_pattern, f.name, flags=re.IGNORECASE)
group_key = base_name
if group_key not in groups:
groups[group_key] = []
# Add the base file if it exists
if base_name in file_map and base_name not in assigned:
groups[group_key].append({
"path": str(file_map[base_name]),
"filename": base_name,
"role": "primary",
})
assigned.add(base_name)
groups[group_key].append({
"path": str(f),
"filename": f.name,
"role": "companion",
})
assigned.add(f.name)
matched = True
break
if not matched:
# Check if this file is a base that already has companions
if f.name in groups:
continue # Already added as primary
ungrouped.append({
"path": str(f),
"filename": f.name,
})
result = []
for group_key, members in groups.items():
result.append({
"group_key": group_key,
"files": members,
})
for ug in ungrouped:
if ug["filename"] not in assigned:
result.append({
"group_key": ug["filename"],
"files": [{"path": ug["path"], "filename": ug["filename"], "role": "standalone"}],
})
return result
def analyze(inputs: list[str], output_path: str | None = None) -> None:
"""Main analysis function."""
files = resolve_inputs(inputs)
if not files:
result = {
"status": "error",
"error": "No readable files found from provided inputs",
"inputs": inputs,
}
output_json(result, output_path)
return
# Analyze each file
file_details = []
total_chars = 0
for f in files:
size = f.stat().st_size
total_chars += size
file_details.append({
"path": str(f),
"filename": f.name,
"size_bytes": size,
"estimated_tokens": size // CHARS_PER_TOKEN,
"doc_type": detect_doc_type(f.name),
})
total_tokens = total_chars // CHARS_PER_TOKEN
groups = suggest_groups(files)
# Routing recommendation
if len(files) <= 3 and total_tokens <= SINGLE_COMPRESSOR_MAX_TOKENS:
routing = "single"
routing_reason = (
f"{len(files)} file(s), ~{total_tokens:,} estimated tokens — "
f"within single compressor threshold"
)
else:
routing = "fan-out"
routing_reason = (
f"{len(files)} file(s), ~{total_tokens:,} estimated tokens — "
f"exceeds single compressor threshold "
f"({'>' + str(SINGLE_COMPRESSOR_MAX_TOKENS) + ' tokens' if total_tokens > SINGLE_COMPRESSOR_MAX_TOKENS else '> 3 files'})"
)
# Split prediction
estimated_distillate_tokens = total_tokens // 3 # rough: distillate is ~1/3 of source
if estimated_distillate_tokens > SINGLE_DISTILLATE_MAX_TOKENS:
split_prediction = "likely"
split_reason = (
f"Estimated distillate ~{estimated_distillate_tokens:,} tokens "
f"exceeds {SINGLE_DISTILLATE_MAX_TOKENS:,} threshold"
)
else:
split_prediction = "unlikely"
split_reason = (
f"Estimated distillate ~{estimated_distillate_tokens:,} tokens "
f"within {SINGLE_DISTILLATE_MAX_TOKENS:,} threshold"
)
result = {
"status": "ok",
"files": file_details,
"summary": {
"total_files": len(files),
"total_size_bytes": total_chars,
"total_estimated_tokens": total_tokens,
},
"groups": groups,
"routing": {
"recommendation": routing,
"reason": routing_reason,
},
"split_prediction": {
"prediction": split_prediction,
"reason": split_reason,
"estimated_distillate_tokens": estimated_distillate_tokens,
},
}
output_json(result, output_path)
def output_json(data: dict, output_path: str | None) -> None:
"""Write JSON to file or stdout."""
json_str = json.dumps(data, indent=2)
if output_path:
Path(output_path).parent.mkdir(parents=True, exist_ok=True)
Path(output_path).write_text(json_str + "\n")
print(f"Results written to {output_path}", file=sys.stderr)
else:
print(json_str)
def main() -> None:
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter,
)
parser.add_argument(
"inputs",
nargs="+",
help="File paths, folder paths, or glob patterns to analyze",
)
parser.add_argument(
"-o", "--output",
help="Output JSON to file instead of stdout",
)
args = parser.parse_args()
analyze(args.inputs, args.output)
sys.exit(0)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,204 @@
"""Tests for analyze_sources.py"""
import json
import os
import tempfile
from pathlib import Path
from unittest.mock import patch
import pytest
# Add parent dir to path so we can import the script
import sys
sys.path.insert(0, str(Path(__file__).parent.parent))
from analyze_sources import (
resolve_inputs,
detect_doc_type,
suggest_groups,
analyze,
INCLUDE_EXTENSIONS,
SKIP_DIRS,
)
@pytest.fixture
def temp_dir():
"""Create a temp directory with sample files."""
with tempfile.TemporaryDirectory() as d:
# Create sample files
(Path(d) / "product-brief-foo.md").write_text("# Product Brief\nContent here")
(Path(d) / "product-brief-foo-discovery-notes.md").write_text("# Discovery\nNotes")
(Path(d) / "architecture-doc.md").write_text("# Architecture\nDesign here")
(Path(d) / "research-report.md").write_text("# Research\nFindings")
(Path(d) / "random.txt").write_text("Some text content")
(Path(d) / "image.png").write_bytes(b"\x89PNG")
# Create a subdirectory with more files
sub = Path(d) / "subdir"
sub.mkdir()
(sub / "prd-v2.md").write_text("# PRD\nRequirements")
# Create a skip directory
skip = Path(d) / "node_modules"
skip.mkdir()
(skip / "junk.md").write_text("Should be skipped")
yield d
class TestResolveInputs:
def test_single_file(self, temp_dir):
f = str(Path(temp_dir) / "product-brief-foo.md")
result = resolve_inputs([f])
assert len(result) == 1
assert result[0].name == "product-brief-foo.md"
def test_folder_recursion(self, temp_dir):
result = resolve_inputs([temp_dir])
names = {f.name for f in result}
assert "product-brief-foo.md" in names
assert "prd-v2.md" in names
assert "random.txt" in names
def test_folder_skips_excluded_dirs(self, temp_dir):
result = resolve_inputs([temp_dir])
names = {f.name for f in result}
assert "junk.md" not in names
def test_folder_skips_non_text_files(self, temp_dir):
result = resolve_inputs([temp_dir])
names = {f.name for f in result}
assert "image.png" not in names
def test_glob_pattern(self, temp_dir):
pattern = str(Path(temp_dir) / "product-brief-*.md")
result = resolve_inputs([pattern])
assert len(result) == 2
names = {f.name for f in result}
assert "product-brief-foo.md" in names
assert "product-brief-foo-discovery-notes.md" in names
def test_deduplication(self, temp_dir):
f = str(Path(temp_dir) / "product-brief-foo.md")
result = resolve_inputs([f, f, f])
assert len(result) == 1
def test_mixed_inputs(self, temp_dir):
file_path = str(Path(temp_dir) / "architecture-doc.md")
folder_path = str(Path(temp_dir) / "subdir")
result = resolve_inputs([file_path, folder_path])
names = {f.name for f in result}
assert "architecture-doc.md" in names
assert "prd-v2.md" in names
def test_nonexistent_path(self):
result = resolve_inputs(["/nonexistent/path/file.md"])
assert len(result) == 0
class TestDetectDocType:
@pytest.mark.parametrize("filename,expected", [
("product-brief-foo.md", "product-brief"),
("product_brief_bar.md", "product-brief"),
("foo-discovery-notes.md", "discovery-notes"),
("foo-discovery_notes.md", "discovery-notes"),
("architecture-overview.md", "architecture-doc"),
("my-prd.md", "prd"),
("research-report-q4.md", "research-report"),
("foo-distillate.md", "distillate"),
("changelog.md", "changelog"),
("readme.md", "readme"),
("api-spec.md", "specification"),
("design-doc-v2.md", "design-doc"),
("meeting-notes-2026.md", "meeting-notes"),
("brainstorm-session.md", "brainstorming"),
("user-interview-notes.md", "interview-notes"),
("random-file.md", "unknown"),
])
def test_detection(self, filename, expected):
assert detect_doc_type(filename) == expected
class TestSuggestGroups:
def test_groups_brief_with_discovery_notes(self, temp_dir):
files = [
Path(temp_dir) / "product-brief-foo.md",
Path(temp_dir) / "product-brief-foo-discovery-notes.md",
]
groups = suggest_groups(files)
# Should produce one group with both files
paired = [g for g in groups if len(g["files"]) > 1]
assert len(paired) == 1
filenames = {f["filename"] for f in paired[0]["files"]}
assert "product-brief-foo.md" in filenames
assert "product-brief-foo-discovery-notes.md" in filenames
def test_standalone_files(self, temp_dir):
files = [
Path(temp_dir) / "architecture-doc.md",
Path(temp_dir) / "research-report.md",
]
groups = suggest_groups(files)
assert len(groups) == 2
for g in groups:
assert len(g["files"]) == 1
def test_mixed_grouped_and_standalone(self, temp_dir):
files = [
Path(temp_dir) / "product-brief-foo.md",
Path(temp_dir) / "product-brief-foo-discovery-notes.md",
Path(temp_dir) / "architecture-doc.md",
]
groups = suggest_groups(files)
paired = [g for g in groups if len(g["files"]) > 1]
standalone = [g for g in groups if len(g["files"]) == 1]
assert len(paired) == 1
assert len(standalone) == 1
class TestAnalyze:
def test_basic_analysis(self, temp_dir):
f = str(Path(temp_dir) / "product-brief-foo.md")
output_file = str(Path(temp_dir) / "output.json")
analyze([f], output_file)
result = json.loads(Path(output_file).read_text())
assert result["status"] == "ok"
assert result["summary"]["total_files"] == 1
assert result["files"][0]["doc_type"] == "product-brief"
assert result["files"][0]["estimated_tokens"] > 0
def test_routing_single_small_input(self, temp_dir):
f = str(Path(temp_dir) / "product-brief-foo.md")
output_file = str(Path(temp_dir) / "output.json")
analyze([f], output_file)
result = json.loads(Path(output_file).read_text())
assert result["routing"]["recommendation"] == "single"
def test_routing_fanout_many_files(self, temp_dir):
# Create enough files to trigger fan-out (> 3 files)
for i in range(5):
(Path(temp_dir) / f"doc-{i}.md").write_text("x" * 1000)
output_file = str(Path(temp_dir) / "output.json")
analyze([temp_dir], output_file)
result = json.loads(Path(output_file).read_text())
assert result["routing"]["recommendation"] == "fan-out"
def test_folder_analysis(self, temp_dir):
output_file = str(Path(temp_dir) / "output.json")
analyze([temp_dir], output_file)
result = json.loads(Path(output_file).read_text())
assert result["status"] == "ok"
assert result["summary"]["total_files"] >= 4 # at least the base files
assert len(result["groups"]) > 0
def test_no_files_found(self):
output_file = "/tmp/test_analyze_empty.json"
analyze(["/nonexistent/path"], output_file)
result = json.loads(Path(output_file).read_text())
assert result["status"] == "error"
os.unlink(output_file)
def test_stdout_output(self, temp_dir, capsys):
f = str(Path(temp_dir) / "product-brief-foo.md")
analyze([f])
captured = capsys.readouterr()
result = json.loads(captured.out)
assert result["status"] == "ok"

View File

@ -1,126 +0,0 @@
---
name: bmad-spec
description: Distill any intent input into the SPEC kernel + companions — the canonical, preservation-validated machine contract for downstream work. Use when the user says "create a spec", "distill this into a spec", "validate this spec", or "update the spec".
---
# BMad Spec
## Overview
Canonical transformer for the BMad spec-kernel ecosystem. Takes any intent input — vague idea, brain dump, PRD, GDD, RFC, brief, Slack thread, customer email, meeting transcript, mockups, mixed multi-source — and produces **SPEC.md** carrying the five-field kernel (Why, Capabilities, Constraints, Non-goals, Success signal) plus companion files for load-bearing content that does not fit or would bloat the kernel with expansive line-item detail. Together they are the machine contract every downstream BMad skill consumes.
Multiple skills may call to update the same spec over time.
## Conventions
- Bare paths (e.g. `assets/spec-template.md`) resolve from the skill root.
- `{skill-root}` is this skill's install dir; `{project-root}` is the working dir.
- `{workflow.<name>}` resolves to fields in `customize.toml`.
## On Activation
1. Resolve customization: `python3 {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`. On failure, read `{skill-root}/customize.toml` directly.
2. Run `{workflow.activation_steps_prepend}`. Treat `{workflow.persistent_facts}` as foundational context (`file:` entries are loaded).
3. Load `{project-root}/_bmad/core/config.yaml` (and `config.user.yaml` if present), root level and `bmm` section. Resolve `{user_name}`, `{communication_language}`, `{document_output_language}`, `{planning_artifacts}`, `{project_name}`, `{date}`.
4. Detect mode. **Headless** when any of: no TTY, programmatic caller (another skill or non-interactive runner), or the first message pre-supplies all inputs and asks for an artifact path back. **Interactive** otherwise. In interactive mode, greet by `{user_name}` in `{communication_language}`, stay in that language, and mention that `bmad-party-mode` and `bmad-advanced-elicitation` are available for deeper exploration on any field.
5. Run `{workflow.activation_steps_append}`.
## Workspace
The spec is **always a folder** named `{workflow.spec_output_path}/{workflow.run_folder_pattern}`, resolving by default to `{output_folder}/specs/spec-{slug}/`.
`{slug}` describes the thing being specced, not the input shape:
- Source artifact already carries a slug (e.g., `prd-foo-bar-2026-05-23/`): inherit (`foo-bar`).
- Sparse, in-chat, or multi-source input: interactive asks; headless caller provides it as part of the input. If absent and underivable, headless blocks with `error_code: "missing_slug"`.
- Same slug = same folder. A second invocation with the same `{slug}` lands at the existing spec folder and updates in place, preserving capability IDs.
**No input.** Interactive: ask the user to share a file path, paste content, explain the idea in detail, or point to a source. Headless: respond with JSON containing `error_code: "insufficient_intent"`.
Inside the spec folder:
```
<spec-folder>/
SPEC.md ← uppercase, the kernel
<companion-1>.md ← optional, content-typed (e.g. glossary.md)
<companion-2>.md
.decision-log.md ← canonical memory for this spec
```
## The Operation
Read the input and its ancillary linked materials. If there is no input, follow the no-input branch in **Workspace** (ask or block). If a prior `SPEC.md` exists at the target folder, read it too — the operation becomes an update. Preserve capability IDs; new capabilities get the next unused `CAP-N`; never reuse retired IDs. Otherwise this is a create.
When the input is structured and pre-sorted (a PRD with an addendum, a GDD, a brief produced by an upstream BMad skill), trust the authored separation: lift kernel-fitting content into SPEC.md, lift overflow into appropriately-named companions. When the input is mixed (a brain dump, a transcript, an RFC, a customer email), do the sorting yourself: walk each claim, apply the three-lens load-bearing test (Spec Law rule 7), and route to the kernel field or a companion.
Distill the input into the five-field kernel using `{workflow.spec_template}` as the skeleton. When input is rich, extract directly — no elicitation. When input is sparse, choose: **express** (best-effort distill, every gap becomes an `open_questions[]` entry) or **guided** (walk the five fields with the user one at a time). Headless defaults to express and logs the choice. Interactive asks.
Write lean from the first pass: every sentence must earn its place. Decoration costs tokens and dilutes downstream readers.
If the input is genuinely too thin to distill (e.g. "an app for hikers" with no surrounding context), stop and suggest `bmad-prd` (or sibling ceremony skill). This skill distills; it does not coach.
## Load-bearing
A claim is **load-bearing** if any consumer (downstream skill, implementing agent, verification pass) would change a decision without it.
## Companions
When load-bearing content does not fit the five-field kernel, it lives in a companion. The kernel cites it; the companion holds it. Companions are part of the contract; every consumer reads `companions:` in SPEC.md frontmatter to discover them. Companions follow the same lean discipline as SPEC.md (Spec Law rule 8).
**Spawn a companion when the content needs more than one kernel-shape line:** multi-item catalogs (per-entity matrices like archetypes, drinks, modes, routes), tables, diagrams (always), editorial voice rules, long-form reference material the kernel cites by name (glossary, brownfield notes, project conventions). Single-line decision-benders stay in Constraints; intent+success pairs stay in Capabilities. If a kernel field is starting to bullet into sub-bullets, the content has outgrown the kernel and wants a companion.
Companions are either:
- **Spec-authored** companions are written by bmad-spec and live as **siblings of SPEC.md** (e.g., `glossary.md`, `patron-archetypes.md`). bmad-spec owns them and may edit them on update operations.
- **Adopted** companions are load-bearing artifacts written by an upstream skill that downstream still needs to read. bmad-spec references them into `companions:` by relative path but does NOT edit them (e.g., a `DESIGN.md` or `EXPERIENCE.md` from a UX run, an integration partner's API spec). The originating skill owns them.
Two rules govern companions:
1. **Name spec-authored companions for the content type they hold.** `glossary.md`, `<entity-class>.md` (e.g. `patron-archetypes.md`, `medication-routes.md`, `flight-modes.md`), `stack.md`, `conventions.md`, `brownfield.md`, `architecture-diagrams.md`, `state-machines.md`, `failure-modes.md`, `compliance-references.md`. The principle: "a reader should know what is inside before opening it." Adopted companions keep whatever name their originating skill gave them.
2. **Diagrams always land in a companion**, regardless of size. SPEC.md kernel holds prose only. Mermaid blocks, ASCII diagrams, and image references all live in a companion (e.g. `architecture-diagrams.md`), with sibling image files referenced from there.
Pre-existing project-wide docs (e.g. `project-context.md`) that downstream needs are listed as **adopted companions**, never duplicated into SPEC.md or a spec-authored companion.
## Spec Law
Every spec must satisfy these eight rules. The operation aims for them; the self-validate sweep enforces them.
1. **Each capability has both `intent` and `success`.** Missing either = not a capability.
2. **Intents describe WHAT, not HOW.** Implementation prescription belongs in a companion (stack, conventions).
3. **Constraints actually bend design decisions.** A "constraint" that rules nothing out is decoration.
4. **Non-goals are explicit.** At least one. Absence means downstream skills fill the vacuum.
5. **Success signal is concrete enough to test or demonstrate against.** "Users love it" doesn't qualify.
6. **Capability IDs are stable and unique.** Never reused, never renumbered.
7. **Preservation.** Every load-bearing source claim lands in SPEC.md or a companion. Wrapper ceremony does not.
8. **Lean prose.** Every sentence carries load-bearing content. Cut decoration, hedges, backstory, throat-clearing. Applies to SPEC.md, companions, and `.decision-log.md`.
## Self-Validate
After every create or update, sweep the resulting artifact in **two passes** before presenting.
**Pass 1 — Coherence.** Judge the spec against Spec Law rules 16 and 8. For anything that fails or feels weak, attempt to fix it without inventing content the input did not support. Calls made without direct confirmation become `assumptions[]`; gaps that could not be filled become `open_questions[]`.
**Pass 2 — Preservation.** Walk the source claim by claim. Confirm each load-bearing claim landed in SPEC.md or a companion. Wrapper-ceremony drops are logged under "Wrapper-only content" so the drop is on the record, not silent.
Append a one-paragraph verdict to `.decision-log.md` covering both passes. In interactive mode, review the verdict with the user. In headless mode, `.decision-log.md` is one of the files returned, so the caller (or its downstream LLM) reads the verdict there.
## Spec with no change signal
When the user points the skill at an existing spec folder (or its SPEC.md) with no change signal, offer to review assumptions or open questions, or determine what they want to do.
## Output
**Interactive** — share the spec folder path conversationally. Name the capability count, the companions produced, and the verdict in one or two sentences. If `assumptions[]` or `open_questions[]` are non-empty, list them (short — one line each) and invite the user to walk through them. Make clear that addressing them can update the source input (if it was a file), the spec, or both — whichever combination the user prefers. Do not dump JSON or present a wall of output.
**Headless** — return JSON per `assets/headless-schemas.md`.
Run `{workflow.on_complete}` if set.
## After Spec is Output
Any update to spec regarding assumptions, open questions, or other changes should be appended to that source's decision log also and offer to update the source.
## Frontmatter conventions
- `companions:` array of `.md` files downstream MUST read alongside SPEC.md to have the full contract. Paths may point inside the spec folder (spec-authored companions like `glossary.md`) or outside it (adopted companions like `../planning-artifacts/ux-designs/ux-foo-bar-2026-05-23/DESIGN.md`). The split between spec-authored and adopted is implicit by path; downstream treats both the same.
- `sources:` array of paths to files that were **fully absorbed** into the SPEC, with no remaining downstream value (e.g., a PRD whose every load-bearing claim is now in the kernel). Listed for audit and for bmad-spec to re-read on update. Downstream does NOT read these. Files that downstream still needs to read belong in `companions:`, not here.
- **Do not list** decision logs, README files, organizational artifacts, or any operational record of how upstream skills produced their artifacts. Those are not source content; they are process metadata that downstream consumers don't need.

View File

@ -1,33 +0,0 @@
# Headless JSON Response
The default invocation is headless: input goes in, JSON comes out. The contract is intentionally tiny — return the outcome and the files touched. Anything else a caller needs is inside those files (SPEC.md, companions, `.decision-log.md`).
## Success
```json
{
"status": "complete",
"files": [
"_bmad-output/specs/spec-quarter-drop/SPEC.md",
"_bmad-output/specs/spec-quarter-drop/glossary.md",
"_bmad-output/specs/spec-quarter-drop/.decision-log.md"
]
}
```
`files` lists every file written or modified in this run, in any order. The spec folder, kernel filename, decision log location, capabilities, companions, and verdict are all readable from those files; no need to re-encode them in the response.
## Blocked
```json
{
"status": "blocked",
"error_code": "insufficient_intent",
"reason": "Input was a one-line idea with no surrounding context; too thin to distill. Suggest bmad-prd to draw the vision out first."
}
```
Defined `error_code` values:
- `insufficient_intent` — input too thin to distill into a kernel.
- `missing_slug` — input is sparse or multi-source and no slug was provided by the caller or derivable from a source path.

View File

@ -1,49 +0,0 @@
---
id: SPEC-{slug}
companions: [] # files downstream MUST read alongside SPEC.md. Paths may point inside the spec folder (spec-authored) or outside it (adopted from an upstream skill).
sources: [] # files fully absorbed into the SPEC (audit only; downstream does NOT read these). Never decision logs.
---
> **Canonical contract.** This SPEC and the files in `companions:` are the complete, preservation-validated contract for what to build, test, and validate. Source documents listed in frontmatter are for traceability only — consult them only if you need narrative rationale or prose color this contract intentionally omits.
# {Spec Title}
## Why
{One paragraph naming the force behind this work. A spec can exist for any of:
- **a pain to solve** — a user or operator is stuck on a specific gap;
- **an opportunity to capture** — something newly possible we want to claim;
- **a vision to realize** — a thing we want to make exist because we want it to exist;
- **a mandate to meet** — a regulation, deprecation, deadline, or contractual obligation.
Name which (or which combination) applies, who is affected, and the backdrop that makes it matter now. This is the anchor every downstream trade-off resolves against.}
## Capabilities
- id: CAP-1
intent: {One sentence. "User or system can do X to achieve Y." WHAT, not HOW.}
success: {Testable or demonstrable criterion. Something a test or a real demonstration can decide.}
## Constraints
- {A non-negotiable that bends design. If it doesn't rule anything out, it doesn't belong.}
## Non-goals
- {Explicit out-of-scope item. At least one. Stops downstream from filling the vacuum.}
## Success signal
- {One or two sentences. World-change moment, not dashboard. Concrete enough to write a test or run a demonstration against.}
## Assumptions
<!-- Optional. Omit this section entirely if empty. Inferred calls made without direct confirmation from the input. -->
- {Statement of fact the Spec proceeded under, e.g. "Assumed mobile-first since input mentioned GPS but no platform."}
## Open Questions
<!-- Optional. Omit this section entirely if empty. Gaps the input did not resolve that need a human decision before downstream skills consume the Spec. -->
- {Question phrased so a human can answer it, e.g. "Is offline playback in scope for CAP-2?"}

View File

@ -1,53 +0,0 @@
# DO NOT EDIT -- overwritten on every update.
#
# Workflow customization surface for bmad-spec.
#
# Override files (not edited here):
# {project-root}/_bmad/custom/bmad-spec.toml (team)
# {project-root}/_bmad/custom/bmad-spec.user.toml (personal)
[workflow]
# --- Configurable below. Overrides merge per BMad structural rules: ---
# scalars: override wins • arrays: append
# Steps to run before the standard activation (config load, greet).
activation_steps_prepend = []
# Steps to run after greet but before the operation begins.
activation_steps_append = []
# Persistent facts the workflow keeps in mind for the whole run.
# Each entry is either a literal sentence, a skill prefixed with `skill:`,
# or a `file:`-prefixed path/glob whose contents are loaded as facts.
# Default points to a single top-level file; override in team/user TOML
# to widen the scope (e.g. `_bmad/**/project-context.md`) if needed.
persistent_facts = [
"file:{project-root}/project-context.md",
]
# Executed when the workflow completes. Scalar or array of instructions.
on_complete = ""
# Spec template. The five-field kernel skeleton. Override the path in
# team/user TOML to enforce a different shape (e.g. a hypothesis field
# for research initiatives, or a mechanics field for games).
spec_template = "assets/spec-template.md"
# Canonical filename for the kernel artifact inside the spec folder.
# Uppercase by convention to signal "the central source of truth."
spec_filename = "SPEC.md"
# Output path for spec folders. Lands directly under {output_folder}
# so bmad-spec works in core-only installs and matches the
# long-term BMad direction of grouping artifacts as siblings under
# {output_folder}/<type>/ rather than nested inside planning vs
# implementation folders.
spec_output_path = "{output_folder}/specs"
# Run-folder pattern inside spec_output_path. Resolved against the
# input-derived slug at activation. Same slug = same folder, so a
# second invocation updates the existing spec in place (capability
# IDs preserved). Override to add {date} or other components if a
# fresh dated history is preferred.
run_folder_pattern = "spec-{slug}"

View File

@ -9,5 +9,5 @@ Core,bmad-editorial-review-prose,Editorial Review - Prose,EP,Use after drafting
Core,bmad-editorial-review-structure,Editorial Review - Structure,ES,Use when doc produced from multiple subprocesses or needs structural improvement.,,[path],anytime,,,false,report located with target document,
Core,bmad-review-adversarial-general,Adversarial Review,AR,"Use for quality assurance or before finalizing deliverables. Code Review in other modules runs this automatically, but also useful for document reviews.",,[path],anytime,,,false,,
Core,bmad-review-edge-case-hunter,Edge Case Hunter Review,ECH,Use alongside adversarial review for orthogonal coverage — method-driven not attitude-driven.,,[path],anytime,,,false,,
Core,bmad-spec,Spec,SP,"Use to distill any intent input (brief, PRD, transcript, brain dump, design folder, mixed multi-source) into a succinct, no-fluff SPEC.md contract + companions that downstream work derives from. Locks the WHAT before the HOW. Works for software, game design, research, editorial, policy, business, anything intent-bearing. Validation mode also available.",,[path],anytime,,,false,{output_folder}/specs/spec-{slug},SPEC.md + companion files
Core,bmad-distillator,Distillator,DG,Use when you need token-efficient distillates that preserve all information for downstream LLM consumption.,,[path],anytime,,,false,adjacent to source document or specified output_path,distillate markdown file(s)
Core,bmad-customize,BMad Customize,BC,"Use when you want to change how an agent or workflow behaves — add persistent facts, swap templates, insert activation hooks, or customize menus. Scans what's customizable, picks the right scope (agent vs workflow), writes the override to _bmad/custom/, and verifies the merge. No TOML hand-authoring required.",,,anytime,,,false,{project-root}/_bmad/custom,TOML override files

1 module skill display-name menu-code description action args phase preceded-by followed-by required output-location outputs
9 Core bmad-editorial-review-structure Editorial Review - Structure ES Use when doc produced from multiple subprocesses or needs structural improvement. [path] anytime false report located with target document
10 Core bmad-review-adversarial-general Adversarial Review AR Use for quality assurance or before finalizing deliverables. Code Review in other modules runs this automatically, but also useful for document reviews. [path] anytime false
11 Core bmad-review-edge-case-hunter Edge Case Hunter Review ECH Use alongside adversarial review for orthogonal coverage — method-driven not attitude-driven. [path] anytime false
12 Core bmad-spec bmad-distillator Spec Distillator SP DG Use to distill any intent input (brief, PRD, transcript, brain dump, design folder, mixed multi-source) into a succinct, no-fluff SPEC.md contract + companions that downstream work derives from. Locks the WHAT before the HOW. Works for software, game design, research, editorial, policy, business, anything intent-bearing. Validation mode also available. Use when you need token-efficient distillates that preserve all information for downstream LLM consumption. [path] anytime false {output_folder}/specs/spec-{slug} adjacent to source document or specified output_path SPEC.md + companion files distillate markdown file(s)
13 Core bmad-customize BMad Customize BC Use when you want to change how an agent or workflow behaves — add persistent facts, swap templates, insert activation hooks, or customize menus. Scans what's customizable, picks the right scope (agent vs workflow), writes the override to _bmad/custom/, and verifies the merge. No TOML hand-authoring required. anytime false {project-root}/_bmad/custom TOML override files

View File

@ -177,14 +177,6 @@ def extract_key(data, dotted_key: str):
return current
def write_json_stdout(output):
"""Write JSON as UTF-8 so Windows cp1252 stdout can carry emoji icons."""
reconfigure = getattr(sys.stdout, "reconfigure", None)
if reconfigure is not None:
reconfigure(encoding="utf-8")
sys.stdout.write(json.dumps(output, indent=2, ensure_ascii=False) + "\n")
def main():
parser = argparse.ArgumentParser(
description="Resolve customization for a BMad skill using three-layer TOML merge.",
@ -231,7 +223,7 @@ def main():
else:
output = merged
write_json_stdout(output)
sys.stdout.write(json.dumps(output, indent=2, ensure_ascii=False) + "\n")
if __name__ == "__main__":

View File

@ -1,50 +0,0 @@
import json
import os
import subprocess
import sys
import tempfile
import unittest
from pathlib import Path
SCRIPT = Path(__file__).resolve().parents[1] / "resolve_customization.py"
class ResolveCustomizationStdoutTests(unittest.TestCase):
def test_writes_emoji_json_when_stdout_encoding_is_cp1252(self):
with tempfile.TemporaryDirectory() as temp_dir:
skill_dir = Path(temp_dir) / "emoji-agent"
skill_dir.mkdir()
(skill_dir / "customize.toml").write_text(
'[agent]\nname = "Emoji Agent"\nicon = "🧭"\n',
encoding="utf-8",
)
env = os.environ.copy()
env["PYTHONIOENCODING"] = "cp1252"
result = subprocess.run(
[
sys.executable,
str(SCRIPT),
"--skill",
str(skill_dir),
"--key",
"agent",
],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
env=env,
check=False,
)
stderr = result.stderr.decode("utf-8", errors="replace")
self.assertEqual(result.returncode, 0, msg=stderr)
output = result.stdout.decode("utf-8")
self.assertIn("🧭", output)
resolved = json.loads(output)
self.assertEqual(resolved["agent"]["icon"], "🧭")
if __name__ == "__main__":
unittest.main()

View File

@ -132,7 +132,7 @@
<div class="header">
<div class="header-badge">⚡ Carte des Workflows V6</div>
<h1>Méthode BMad</h1>
<p class="subtitle">Ingénierie du contexte pour le développement piloté par lIA</p>
<p class="subtitle">Ingénierie du contexte pour le développement piloté par l'IA</p>
</div>
<div class="flow-legend">→ les flèches montrent le flux des artefacts entre les workflows</div>
@ -206,7 +206,7 @@
<span class="output">prd.md →</span>
</div>
</div>
<div class="decision">Interface utilisateur?</div>
<div class="decision">Interface utilisateur ?</div>
<div class="workflow">
<div class="workflow-header">
<span class="workflow-name">create-ux-design</span>
@ -329,7 +329,7 @@
</div>
<div class="workflow-meta">
<div class="agent"><div class="agent-icon amelia">A</div><span class="agent-name">Amelia</span></div>
<span class="output">rapport dinvestigation</span>
<span class="output">rapport d'investigation</span>
</div>
</div>
</div>