BMAD-METHOD/docs/fr/how-to/customize-bmad.md

26 KiB
Raw Blame History

title description sidebar
Comment personnaliser BMad Personnalisez les agents et les workflows tout en préservant la compatibilité avec les mises à jour
order
8

Adaptez les personas dagents, injectez du contexte métier, ajoutez des capacités et configurez le comportement des workflows — le tout sans modifier les fichiers installés. Vos personnalisations sont préservées à chaque mise à jour.

:::tip[Vous ne voulez pas rédiger du TOML à la main? Utilisez bmad-customize] Le skill bmad-customize est un assistant de rédaction guidée pour les options de personnalisation par skill (agent/workflow) décrite dans ce document. Il scanne ce qui est personnalisable dans votre installation, vous aide à choisir la bonne surface (agent ou workflow) pour votre intention, écrit le fichier doverride pour vous et vérifie que la fusion a fonctionné. Les overrides de la configuration centrale (_bmad/custom/config.toml) ne sont pas couverts par la v1 du skill — rédigez-les manuellement en vous référant à la section Configuration centrale ci-dessous. Exécutez le skill chaque fois que vous souhaitez modifier un skill spécifique; ce document est la référence sur ce que chaque surface expose et comment fonctionne la fusion. :::

Quand utiliser cette fonctionnalité

  • Vous souhaitez changer la personnalité ou le style de communication dun agent
  • Vous devez fournir à un agent des faits persistants quil devra retenir (ex. «notre org est 100 % AWS»)
  • Vous souhaitez ajouter des étapes procédurales de démarrage que lagent doit exécuter à chaque session
  • Vous souhaitez ajouter des éléments de menu personnalisés qui déclenchent vos propres skills ou prompts
  • Votre équipe a besoin de personnalisations partagées versionnées dans git, avec des préférences personnelles ajoutées par-dessus

:::note[Prérequis]

  • BMad installé dans votre projet (voir Comment installer BMad)
  • Python 3.11+ sur votre PATH (pour le script de résolution — utilise tomllib de la bibliothèque standard, pas de pip install, pas de uv, pas de virtualenv)
  • Un éditeur de texte pour les fichiers TOML :::

Comment ça marche

Chaque skill personnalisable embarque un fichier customize.toml avec ses valeurs par défaut. Ce fichier définit la surface de personnalisation complète du skill — lisez-le pour voir ce qui est personnalisable. Ne modifiez jamais ce fichier. À la place, créez des fichiers doverride allégés contenant uniquement les champs que vous souhaitez changer.

Modèle doverride à trois couches

Priorité 1 (gagne) : _bmad/custom/{skill-name}.user.toml  (personnel, ignoré par git)
Priorité 2         : _bmad/custom/{skill-name}.toml       (équipe/org, versionné dans git)
Priorité 3 (base)  : customize.toml du skill              (valeurs par défaut)

Le dossier _bmad/custom/ est initialement vide. Les fichiers napparaissent que lorsquun utilisateur commence à personnaliser.

Règles de fusion (par forme, pas par nom de champ)

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)
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

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.

La convention code / id. BMad utilise code (code court comme "BP" ou "R1") et id (identifiant stable plus long) comme clés de fusion dans les tableaux de tables. Si vous rédigez un tableau de tables personnalisé destiné à être fusionné par clé plutôt que par simple ajout, choisissez une convention (soit code sur chaque élément, soit id sur chaque élément) et respectez-la dans tout le tableau. Mélanger code sur certains éléments et id sur dautres revient à un simple ajout — le résolveur ne devinera pas quelle clé utiliser pour la fusion.

Certains champs dagent sont en lecture seule

agent.name et agent.title sont présents dans customize.toml comme source de vérité, mais le SKILL.md de lagent ne les lit pas à lexécution — leur identité est codée en dur. Mettre name = "Bob" dans un fichier doverride na aucun effet. Si vous avez vraiment besoin dun agent avec un nom différent, copiez le dossier du skill, renommez-le et distribuez-le comme skill personnalisé.

Étapes

1. Trouver la surface de personnalisation du skill

Consultez le customize.toml du skill dans son répertoire dinstallation. Par exemple, lagent PM :

.claude/skills/bmad-agent-pm/customize.toml

(Le chemin varie selon lIDE — Cursor utilise .cursor/skills/, Cline utilise .cline/skills/, etc.)

Ce fichier est le schéma canonique. Chaque champ que vous voyez est personnalisable (à lexception des champs didentité en lecture seule mentionnés ci-dessus).

2. Créer votre fichier doverride

Créez le répertoire _bmad/custom/ à la racine de votre projet sil nexiste pas. Puis créez un fichier portant le même nom que le skill :

_bmad/custom/
  bmad-agent-pm.toml        # overrides d'équipe (versionnés dans git)
  bmad-agent-pm.user.toml   # préférences personnelles (ignoré par git)

:::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. :::

Exemple — changer licône et ajouter un principe :

# _bmad/custom/bmad-agent-pm.toml
# Uniquement les champs que je modifie. Tout le reste est hérité.

[agent]
icon = "🏥"
principles = [
  "Ne rien livrer qui ne puisse passer un audit FDA.",
]

Ceci ajoute le nouveau principe aux valeurs par défaut (en laissant les principes existants intacts) et remplace licône. Tous les autres champs restent inchangés.

3. Personnaliser selon vos besoins

Tous les exemples ci-dessous supposent le schéma dagent plat de BMad. Les champs se trouvent directement sous [agent] — pas de sous-tables metadata ou persona imbriquées.

Scalaires (icon, role, identity, communication_style). Les overrides scalaires prévalent. Vous navez besoin de définir que les champs que vous modifiez :

# _bmad/custom/bmad-agent-pm.toml

[agent]
icon = "🏥"
role = "Pilote la découverte produit pour un domaine de santé réglementé."
communication_style = "Précis, sensible à la réglementation, pose des questions orientées conformité tôt."

Faits persistants, principes, hooks dactivation (tableaux en mode ajout). Les quatre tableaux ci-dessous sont en ajout uniquement. Les éléments déquipe sexécutent après les valeurs par défaut, les éléments utilisateur sexécutent en dernier.

[agent]
# Faits statiques que l'agent garde en tête pendant toute la session — règles d'org,
# constantes de domaine, préférences utilisateur. Distinct du sidecar de mémoire runtime.
#
# Chaque entrée est soit une phrase littérale, soit une référence `file:` dont le
# contenu est chargé comme des faits (patterns glob supportés).
persistent_facts = [
  "Notre org est 100 % AWS — ne pas proposer GCP ni Azure.",
  "Tous les PRD nécessitent une validation légale avant le démarrage de l'ingénierie.",
  "Les utilisateurs cibles sont des cliniciens, pas des patients — formuler les exemples en conséquence.",
  "file:{project-root}/docs/compliance/hipaa-overview.md",
  "file:{project-root}/_bmad/custom/company-glossary.md",
]

# S'ajoute au système de valeurs de l'agent
principles = [
  "Ne rien livrer qui ne puisse passer un audit FDA.",
  "Valeur utilisateur d'abord, conformité toujours.",
]

# S'exécute AVANT l'activation standard (persona, persistent_facts, config, salutation).
# À utiliser pour les préchargements, vérifications de conformité, tout ce qui doit être
# en contexte avant que l'agent ne se présente.
activation_steps_prepend = [
  "Scanner {project-root}/docs/compliance/ et charger tout document lié à HIPAA comme contexte.",
]

# S'exécute APRÈS la salutation, AVANT le menu. Utiliser pour le chargement de contexte
# qui doit intervenir après le message d'accueil.
activation_steps_append = [
  "Lire {project-root}/_bmad/custom/company-glossary.md s'il existe.",
]

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.

La syntaxe TOML pour les tableaux de tables utilise [[agent.menu]] pour chaque élément :

# Remplacer l'élément CE existant par un skill personnalisé
[[agent.menu]]
code = "CE"
description = "Créer des Epics avec notre framework de livraison"
skill = "custom-create-epics"

# Ajouter un nouvel élément (le code RC n'existe pas dans les valeurs par défaut)
[[agent.menu]]
code = "RC"
description = "Exécuter une pré-vérification de conformité"
prompt = """
Lire {project-root}/_bmad/custom/compliance-checklist.md
et scanner tous les documents dans {planning_artifacts} en les comparant à celui-ci.
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.

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 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.

# _bmad/custom/bmad-agent-pm.user.toml

[agent]
persistent_facts = [
  "Toujours inclure une estimation approximative de complexité (faible/moyenne/élevée) en présentant les options.",
]

Comment fonctionne la résolution

À lactivation, le SKILL.md de lagent exécute un script Python partagé qui effectue la fusion à trois couches et renvoie le bloc résolu en JSON. Le script utilise le module tomllib de la bibliothèque standard Python (aucune dépendance externe), donc python3 suffit :

python3 {project-root}/_bmad/scripts/resolve_customization.py \
  --skill {skill-root} \
  --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.

--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.

Exemples dutilisation :

# Résoudre le bloc agent complet
python3 {project-root}/_bmad/scripts/resolve_customization.py \
  --skill /chemin/absolu/vers/bmad-agent-pm \
  --key agent

# Résoudre un seul champ
python3 {project-root}/_bmad/scripts/resolve_customization.py \
  --skill /chemin/absolu/vers/bmad-agent-pm \
  --key agent.icon

# Dump complet
python3 {project-root}/_bmad/scripts/resolve_customization.py \
  --skill /chemin/absolu/vers/bmad-agent-pm

La sortie est toujours en JSON. Si le script nest pas disponible sur une plateforme donnée, le SKILL.md demande à lagent de lire les trois fichiers TOML directement et dappliquer les mêmes règles de fusion.

Personnalisation des workflows

Les workflows (skills qui pilotent des processus multi-étapes comme bmad-product-brief) partagent le même mécanisme doverride que les agents. Leur surface personnalisable se trouve sous [workflow] au lieu de [agent] :

# _bmad/custom/bmad-product-brief.toml

[workflow]
# Même sémantique préfixe/suffixe que les agents — s'exécute avant et après les étapes
# d'activation propres au workflow. Les overrides s'ajoutent aux valeurs par défaut.
activation_steps_prepend = [
  "Charger {project-root}/docs/product/north-star-principles.md comme contexte.",
]

activation_steps_append = []

# Même sémantique littéral ou fichier que pour la variante agent. Chargé comme contexte
# fondamental pour la durée de l'exécution du workflow.
persistent_facts = [
  "Tous les briefs doivent inclure une section explicite de risque réglementaire.",
  "file:{project-root}/docs/compliance/product-brief-checklist.md",
]

# Scalaire : s'exécute une fois que le workflow a terminé son livrable principal. L'override prévaut.
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.

Ordre dactivation

Les workflows personnalisables exécutent leur activation dans une séquence fixe pour que vous sachiez exactement quand vos hooks se déclenchent :

  1. Résoudre le bloc [workflow] (fusion base → équipe → utilisateur)
  2. Exécuter activation_steps_prepend dans lordre
  3. Charger persistent_facts comme contexte fondamental pour lexécution
  4. Charger la configuration (_bmad/bmm/config.yaml) et résoudre les variables standard (nom du projet, langues, chemins, date)
  5. Saluer lutilisateur
  6. Exécuter activation_steps_append dans lordre

Après létape 6, le corps du workflow commence. Utilisez activation_steps_prepend quand vous avez besoin de contexte chargé avant que la salutation puisse être personnalisée; utilisez activation_steps_append quand le chargement est lourd et que vous préférez que lutilisateur voie la salutation dabord.

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.

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.

Si vous avez besoin dun réglage précis qui nest pas encore exposé, utilisez activation_steps_* et persistent_facts pour orienter le comportement, ou ouvrez une issue décrivant le point de personnalisation spécifique que vous souhaitez — ces demandes déterminent quels champs ciblés seront ajoutés ensuite.

Configuration centrale

Le customize.toml par skill couvre le comportement profond (hooks, menus, persistent_facts, overrides de persona pour un seul agent ou workflow). Une surface séparée couvre l'état transversal — les réponses dinstallation et le registre des agents que les skills externes comme bmad-party-mode, bmad-retrospective et bmad-advanced-elicitation consomment. Cette surface se trouve dans quatre fichiers TOML à la racine du projet :

_bmad/config.toml               (géré par l'installateur)  périmètre équipe : réponses d'installation + registre des agents
_bmad/config.user.toml          (géré par l'installateur)  périmètre utilisateur : user_name, langue, niveau de skill
_bmad/custom/config.toml        (rédigé manuellement)      overrides d'équipe (versionnés dans git)
_bmad/custom/config.user.toml   (rédigé manuellement)      overrides personnels (ignoré par git)

Fusion à quatre couches

Priorité 1 (gagne) : _bmad/custom/config.user.toml
Priorité 2         : _bmad/custom/config.toml
Priorité 3         : _bmad/config.user.toml
Priorité 4 (base)  : _bmad/config.toml

Mêmes règles structurelles que la personnalisation par skill (scalaires prévalent, tables fusionnent en profondeur, tableaux à clé code/id fusionnent par clé, autres tableaux sajoutent).

Répartition du contenu

Linstallateur répartit les réponses selon le scope: déclaré sur chaque prompt dans module.yaml :

  • Les sections [core] et [modules.<code>] — réponses dinstallation. Le scope team figure dans _bmad/config.toml; le scope user figure dans _bmad/config.user.toml.
  • [agents.<code>] — descripteur de lagent (code, name, title, icon, description, team) extrait du bloc agents: de chaque module.yaml. Toujours de scope équipe.

Règles de modification

  • _bmad/config.toml et _bmad/config.user.toml sont régénérés à chaque installation à partir des réponses collectées pendant le processus dinstallation. Traitez-les comme des sorties en lecture seule — les modifications directes seront écrasées à la prochaine installation. Pour changer une réponse dinstallation de manière durable, relancez linstallateur (il se souvient de vos réponses précédentes comme valeurs par défaut) ou surchargez la valeur dans _bmad/custom/config.toml.
  • _bmad/custom/config.toml et _bmad/custom/config.user.toml ne sont jamais modifiés par linstallateur. Cest lespace approprié pour les agents personnalisés, les overrides de descripteur dagent, les paramètres imposés par léquipe et toute valeur que vous souhaitez figer indépendamment des réponses dinstallation.

Exemple — Renommer un agent

# _bmad/custom/config.toml (versionné dans git, s'applique à tous les développeurs)

[agents.bmad-agent-pm]
description = "PM Santé — sensible à la réglementation, orienté parties prenantes, questions orientées FDA en premier."
icon = "🏥"

Le résolveur fusionne par-dessus le [agents.bmad-agent-pm] écrit par linstallateur. bmad-party-mode et tout autre utilisateur du registre récupèrent automatiquement la nouvelle description.

Exemple — Ajouter un agent fictif

# _bmad/custom/config.user.toml (personnel, ignoré par git)

[agents.kirk]
team = "startrek"
name = "Captain James T. Kirk"
title = "Starship Captain"
icon = "🖖"
description = "Commandant audacieux, enfreignant les règles. Parle en pauses dramatiques. Pense à voix haute sur le poids du commandement."

Pas de dossier de skill requis — le descripteur seul suffit pour que party-mode instancie Kirk comme voix. Filtrez par le champ team pour inviter uniquement léquipage de lEnterprise à une table ronde.

Exemple — Override des paramètres dinstallation du module

# _bmad/custom/config.toml

[modules.bmm]
planning_artifacts = "/shared/org-planning-artifacts"

Loverride prévaut sur ce que chaque développeur a répondu lors de son installation locale. Utile pour figer les conventions déquipe.

Quelle surface utiliser pour quel besoin

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]

Utilisez les deux espaces dans le même projet selon vos besoins.

Exemples concrets

Pour des recettes orientées entreprise (façonner un agent à travers tous les workflows quil gère, imposer les conventions dorganisation, publier les livrables vers Confluence et Jira, personnaliser le registre des agents et remplacer vos propres templates de sortie), consultez Comment étendre BMad pour votre organisation.

Dépannage

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
  • 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

Les mises à jour ont cassé votre personnalisation?

  • Avez-vous copié le customize.toml complet dans votre fichier doverride? Ne le faites pas. Les fichiers doverride ne doivent contenir que les champs que vous modifiez. Une copie complète fige les anciennes valeurs par défaut et dérive silencieusement à chaque version. Réduisez votre override aux seuls deltas.

Besoin de voir ce qui est personnalisable?

  • Exécutez le skill bmad-customize — il énumère chaque skill personnalisable installé dans votre projet, montre lesquels ont déjà des overrides et vous guide pour en ajouter ou en modifier.
  • Ou lisez directement le customize.toml du skill — chaque champ listé est personnalisable (sauf name et title)

Besoin de réinitialiser?

  • Supprimez votre fichier doverride de _bmad/custom/ — le skill revient à ses valeurs par défaut intégrées.