bmad-plus 0.22.0 → 0.23.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +46 -26
  3. package/SECURITY.md +1 -1
  4. package/osint-agent-package/agents/osint-investigator.md +3 -3
  5. package/osint-agent-package/skills/bmad-osint-investigate/osint/SKILL.md +51 -51
  6. package/osint-agent-package/skills/bmad-osint-investigate/osint/references/content-extraction.md +7 -7
  7. package/osint-agent-package/skills/bmad-osint-investigate/osint/references/platforms.md +2 -2
  8. package/osint-agent-package/skills/bmad-osint-investigate/osint/references/tools.md +31 -41
  9. package/package.json +24 -5
  10. package/readme-international/README.de.md +46 -26
  11. package/readme-international/README.es.md +47 -27
  12. package/readme-international/README.fr.md +46 -26
  13. package/src/bmad-plus/agents/agent-maker/SKILL.md +39 -14
  14. package/src/bmad-plus/agents/agent-orchestrator/SKILL.md +5 -1
  15. package/src/bmad-plus/data/role-triggers.yaml +34 -0
  16. package/src/bmad-plus/module-help.csv +2 -0
  17. package/src/bmad-plus/module.yaml +26 -4
  18. package/src/bmad-plus/packs/pack-animated/animated-website-agent.md +40 -14
  19. package/src/bmad-plus/packs/pack-animated/templates/animated-website-workflow.md +15 -12
  20. package/src/bmad-plus/packs/pack-backup/backup-agent.md +2 -1
  21. package/src/bmad-plus/packs/pack-backup/templates/backup-workflow.md +2 -0
  22. package/src/bmad-plus/packs/pack-design/SKILL.md +72 -0
  23. package/src/bmad-plus/packs/pack-design/bmad-skill-manifest.yaml +13 -0
  24. package/src/bmad-plus/packs/pack-design/design-engine.md +126 -0
  25. package/src/bmad-plus/packs/pack-design/intake.yaml +105 -0
  26. package/src/bmad-plus/packs/pack-memory/zecher-agent.md +1 -1
  27. package/src/bmad-plus/packs/pack-shield/README.md +1 -1
  28. package/src/bmad-plus/packs/pack-shield/SKILL.md +3 -3
  29. package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/pci-dss-agent.md +1 -1
  30. package/src/bmad-plus/packs/pack-shield/shield-orchestrator.md +2 -2
  31. package/src/bmad-plus/skills/bmad-plus-autopilot/SKILL.md +7 -0
  32. package/src/bmad-plus/skills/bmad-plus-intake/SKILL.md +87 -0
  33. package/src/bmad-plus/skills/bmad-plus-intake/ref/intake-format.md +112 -0
  34. package/src/bmad-plus/skills/bmad-plus-parallel/SKILL.md +18 -0
  35. package/src/bmad-plus/skills/bmad-plus-swarm/SKILL.md +115 -0
  36. package/src/bmad-plus/skills/bmad-plus-swarm/ref/definition.md +188 -0
  37. package/tools/build/adapters.config.js +3 -1
  38. package/tools/build/generate-adapters.js +26 -2
  39. package/tools/build/generate.js +269 -7
  40. package/tools/build/intake-contract.js +522 -0
  41. package/tools/cli/bmad-plus-cli.js +2 -0
  42. package/tools/cli/commands/install.js +45 -11
  43. package/tools/cli/commands/intake.js +124 -0
  44. package/tools/cli/commands/nexus.js +2 -1
  45. package/tools/cli/commands/review.js +1 -1
  46. package/tools/cli/commands/swarm.js +119 -0
  47. package/tools/cli/commands/uninstall.js +17 -0
  48. package/tools/cli/commands/update.js +30 -1
  49. package/tools/cli/i18n.js +50 -30
  50. package/tools/cli/lib/intake.js +202 -0
  51. package/tools/cli/lib/pack-copy.js +95 -5
  52. package/tools/cli/lib/packs.js +102 -12
  53. package/tools/cli/lib/review.js +2 -1
  54. package/tools/cli/lib/swarm-deal.js +116 -0
  55. package/tools/cli/lib/swarm-defaults.js +6 -0
  56. package/tools/cli/lib/swarm-tally.js +195 -0
  57. package/tools/cli/lib/swarm-validate.js +589 -0
  58. package/tools/cli/lib/swarm.js +712 -0
  59. package/tools/cli/lib/update-dispatch.js +10 -2
  60. package/tools/cli/lib/update-transaction.js +9 -6
@@ -4,16 +4,18 @@
4
4
  <a href="../README.md">English</a> | 🌐 <b>Français</b> | <a href="README.es.md">Español</a> | <a href="README.de.md">Deutsch</a>
5
5
  </div>
6
6
 
7
- [![Version](https://img.shields.io/badge/version-0.22.0-blue)](https://www.npmjs.com/package/bmad-plus)
7
+ [![Version](https://img.shields.io/badge/version-0.23.1-blue)](https://www.npmjs.com/package/bmad-plus)
8
8
 
9
- **Version 0.22.0** · Node.js `>=20.0.0` · MIT
9
+ **Version 0.23.1** · Node.js `>=20.0.0` · MIT
10
10
 
11
- Des workflows de développement IA propres à chaque projet, avec des rôles clairs, un contexte partagé, des mises à jour sûres et des adaptateurs pour vos outils de code.
11
+ Dix packs de rôles et de workflows IA propres à chaque projet (design, SEO, GRC, OSINT, mémoire), avec un intake qui pose les questions avant d’agir, des swarms sous budget, des mises à jour sûres et des adaptateurs pour sept outils de code IA
12
12
 
13
13
  [Site web](https://bmad-plus.rochetta.fr/fr/) · [Démarrer](https://bmad-plus.rochetta.fr/fr/docs/#start) · [Exemples](https://bmad-plus.rochetta.fr/fr/docs/#examples) · [Nouveautés](https://bmad-plus.rochetta.fr/fr/docs/#news)
14
14
 
15
15
  BMAD+ installe des instructions de projet, des rôles et des workflows pour l’outil de code IA que vous utilisez déjà. Par défaut, l’exécution est gérée par l’hôte : votre outil fournit le modèle, les autorisations, l’exécution des commandes et, le cas échéant, le travail d’agents en parallèle. Nexus peut aussi lancer une commande locale ou un processus Codex CLI explicitement planifié sous un superviseur au premier plan, enregistrer son résultat et exiger des vérifications indépendantes avant acceptation. Les autorisations de l’hôte continuent de s’appliquer ; il n’existe ni planificateur en arrière-plan ni intégration universelle au cycle de vie des hôtes. Les abonnements aux modèles et les accès API sont distincts.
16
16
 
17
+ BMAD+ propose dix packs. Demander d’abord : `bmad-plus intake` pose les questions d’un pack quelques-unes à la fois, propose des valeurs par défaut, consigne ce que vous ignorez et produit le brief sur lequel le pack travaille ensuite. Swarms : `bmad-plus swarm` distribue des unités simulées, remet un brief à chaque sous-agent, valide chaque réponse et ne compte que les valides, dans un budget que vous fixez. Atelier, le moteur de design du pack Design, construit, audite et refait des interfaces selon des règles vérifiables.
18
+
17
19
  Adaptateurs : Claude Code, Gemini CLI, Antigravity, Cursor, Codex CLI, OpenCode, Aider.
18
20
 
19
21
  ## Démarrer
@@ -39,7 +41,7 @@ Lancez l’installateur. Sélectionnez les adaptateurs de vos outils IA et les p
39
41
  **Dans le terminal du projet :**
40
42
 
41
43
  ```sh
42
- npx bmad-plus@0.22.0 install
44
+ npx bmad-plus@0.23.1 install
43
45
  ```
44
46
 
45
47
  L’installateur crée les instructions des agents, le socle partagé et les adaptateurs sélectionnés. Certains packs facultatifs nécessitent d’autres environnements ou des accès API.
@@ -97,11 +99,12 @@ Relisez les changements et les résultats des tests. L’assistant suit les auto
97
99
  | OSINT | Des workflows d’investigation pour recueillir des informations publiques et évaluer les sources. |
98
100
  | Maker | Un workflow pour concevoir, valider et distribuer vos propres agents BMAD+. |
99
101
  | Shield | Des workflows spécialisés en conformité et gouvernance, notamment RGPD et ISO 27001. |
100
- | SEO | Inspection technique, analyse de contenu et optimisation pour la recherche, avec des outils dédiés. |
102
+ | SEO | SEO classique et GEO, visibilité dans les réponses générées par IA : inspection technique et performance (Scout), qualité du contenu, données structurées et préparation à la recherche par IA (Judge), notation, stratégie et rapports (Chief). |
101
103
  | Memory | Notes de projet, décisions et transmissions entre sessions pour conserver le contexte utile. |
102
104
  | Dev Studio | Des rôles et workflows spécialisés en produit, design, ingénierie et documentation. |
103
105
  | Backup | Des instructions et utilitaires pour les sauvegardes horodatées, la restauration et la rotation. |
104
106
  | Animated | Un workflow dédié à la création de sites dont le défilement s’appuie sur la vidéo. |
107
+ | Design | Atelier, le moteur de design : construire, auditer et refondre des interfaces selon des règles vérifiables, interview d’abord. |
105
108
 
106
109
  ## Exemples
107
110
 
@@ -175,18 +178,28 @@ Lis AGENTS.md et la mémoire de projet disponible. Résume le dernier état vér
175
178
 
176
179
  Résultat attendu : une reprise courte et fondée sur des éléments vérifiés. Les notes apportent du contexte, à confronter au travail actuel.
177
180
 
178
- ## Nouveautés de la 0.22.0
181
+ ### Concevoir un écran avec Atelier
182
+
183
+ À utiliser avec le pack Design facultatif installé. Atelier pose d’abord ses questions, puis suit des règles vérifiables.
184
+
185
+ ```text
186
+ Atelier, fais la lecture design de la liste des factures de mon application, construis l’écran et termine par le verdict de pré-vol.
187
+ ```
188
+
189
+ Résultat attendu : la lecture design enregistrée, l’écran avec tous ses états couverts, et le verdict de pré-vol cité en dernière ligne.
179
190
 
180
- Ce qui sort de votre machine, déclaré et vérifié
191
+ ## Nouveautés de la 0.23.1
181
192
 
182
- BMAD+ déclare désormais chaque envoi de données et chaque processus qu’il lance, et sa CI refuse tout ce qui n’est pas déclaré. La page de recette et le rapport SEO ne chargent plus rien depuis d’autres sites, les appels OSINT passent uniquement en HTTPS, et Shield gagne un dossier de sécurité fondé sur des preuves exécutées et un registre des traitements IA. Rien ne change dans l’installation ou la mise à jour.
193
+ Un site plus fidèle, des commandes plus régulières
183
194
 
184
- - Le registre indique ce que BMAD+ envoie, à qui, quand et avec quel consentement ; SECURITY.md l’affiche et les instructions installées pour les agents le résument. Une vérification de build échoue quand un appel réseau ou un processus lancé n’est pas déclaré. BMAD+ n’a aucune télémétrie, et la vérification de mise à jour peut être désactivée.
185
- - La page de recette ne charge plus Google Fonts ni rien d’un autre site : l’ouvrir ne le signale à personne. Le build refuse une page qui le ferait, et un vrai navigateur contrôle chaque requête d’un passage. Le rapport HTML SEO s’ouvre aussi hors ligne.
186
- - La clé d’API Google du pack SEO voyage dans un en-tête de requête, jamais dans une URL, et n’apparaît pas dans les messages d’erreur. Les appels aux fournisseurs OSINT refusent tout sauf HTTPS et ne suivent jamais une redirection vers un autre hôte.
187
- - Les captures d’écran SEO n’atteignent que l’adresse vérifiée : Chromium ne résout rien d’autre, et les redirections ou ressources qui pointent ailleurs sont bloquées et listées.
188
- - Shield : bmad-plus assurance construit un dossier de sécurité dont chaque preuve est une vérification réellement exécutée, consignée dans un journal infalsifiable ; bmad-plus ai-register tient le registre des outils IA d’un projet et signale ceux qui n’y figurent pas ; six règles de revue nomment les contrôles de conformité qu’un changement touche.
189
- - Le serveur MCP ferme proprement les flux SSE quand un client part ou que le serveur s’arrête, et accepte les dates de jeton avec un décalage horaire.
195
+ Le site de documentation est refait en quatre langues, avec sept vidéos. Plusieurs commandes se comportent désormais exactement comme leurs pages le disent : les refus se lisent partout de la même façon, une revue de l’arbre de travail part de HEAD et le fichier de configuration est du YAML simple. Installation et mise à jour ne changent pas.
196
+
197
+ - Le site compte désormais 52 pages de documentation, chacune en anglais, français, espagnol et allemand, une landing refaite et sept vidéos de présentation avec sous-titres et transcriptions décrites, dont une étude de cas sur la refonte du site lui-même par un essaim d’agents.
198
+ - Une mise à jour --auto que la politique n’autorise pas est refusée avec le même message partout : Update refused: automatic-updates-not-authorized. Les refus pour inventaire de propriété ancien et pour conflits locaux suivent la même forme Update refused:.
199
+ - bmad-plus review scope --workspace part de HEAD quand vous ne donnez pas --base : relire du travail non commité n’échoue plus et n’embarque plus le dernier commit.
200
+ - _bmad/config.yaml est écrit en YAML simple (auto_role_activation: true, et non un !!bool 'true' typé), quelle que soit la version prise en charge de js-yaml qui l’écrit.
201
+ - Les fichiers d’instructions générés demandent de passer le contrôle de version sans le mentionner quand npx ne trouve pas de copie locale de bmad-plus ; les erreurs de Nexus portent une seule fois le préfixe Nexus: au lieu de deux.
202
+ - Shield nomme PCI DSS v4.0.1 partout, les compétences swarm annoncent trois types, la variante Bash du pack Backup affiche la taille de l’archive comme la variante PowerShell, et la description npm, les mots-clés et les crédits du README sont mis à jour.
190
203
 
191
204
  ## Historique des versions
192
205
 
@@ -194,9 +207,9 @@ Ces dates identifient les notes relues du CHANGELOG, pas les dates de publicatio
194
207
 
195
208
  | Version | Date des notes | Résumé relu |
196
209
  | --- | --- | --- |
210
+ | 0.23.1 | 2026-10-19 | Le site de documentation est refait en quatre langues, avec sept vidéos. Plusieurs commandes se comportent désormais exactement comme leurs pages le disent : les refus se lisent partout de la même façon, une revue de l’arbre de travail part de HEAD et le fichier de configuration est du YAML simple. Installation et mise à jour ne changent pas. |
211
+ | 0.23.0 | 2026-10-17 | Un pack déclare désormais les questions auxquelles il lui faut une réponse avant d’agir, et Nexus peut lancer un essaim de sous-agents, un panel simulé ou un jury, dans un budget que vous fixez. Atelier, le moteur de design, devient le dixième pack. Installation et mise à jour ne changent pas. |
197
212
  | 0.22.0 | 2026-09-29 | BMAD+ déclare désormais chaque envoi de données et chaque processus qu’il lance, et sa CI refuse tout ce qui n’est pas déclaré. La page de recette et le rapport SEO ne chargent plus rien depuis d’autres sites, les appels OSINT passent uniquement en HTTPS, et Shield gagne un dossier de sécurité fondé sur des preuves exécutées et un registre des traitements IA. Rien ne change dans l’installation ou la mise à jour. |
198
- | 0.21.0 | 2026-09-28 | Une revue enregistre désormais pourquoi elle s’est arrêtée et ce qu’elle a consommé, écrit un contrôle lisible par une étape de CI, et reprend sur le périmètre qu’elle a scellé. Le récupérateur SEO ne se connecte qu’aux adresses qu’il a validées, et le serveur MCP passe au SDK officiel sous Python 3.12. Rien ne change dans l’installation ou la mise à jour. |
199
- | 0.20.0 | 2026-09-28 | bmad-plus review donne désormais au relecteur les règles qui s’appliquent aux fichiers modifiés, fixe la profondeur d’une revue avant qu’elle commence, compare une revue avec une précédente sans déclarer corrigée une remarque non vérifiée, et masque les identifiants dans ce qu’il écrit. Rien ne change dans l’installation ou la mise à jour. |
200
213
 
201
214
  [Historique des versions et guide de mise à jour](https://bmad-plus.rochetta.fr/fr/docs/#changelog) · [Toutes les versions publiées sur npm](https://www.npmjs.com/package/bmad-plus?activeTab=versions)
202
215
 
@@ -216,14 +229,21 @@ Le pack OSINT est encadré : toute recherche sur une personne nommée exige une
216
229
  **Créateur**
217
230
  - **BMAD+** créé par [Laurent Rochetta](https://github.com/lrochetta) ([LinkedIn](https://www.linkedin.com/in/laurentrochetta/))
218
231
 
219
- **Packs originaux** (créés par Laurent Rochetta)
220
- - **Dev Studio** — 6 agents SDLC spécialisés : Miriam (analyste métier), Huldah (rédactrice technique), Yosef (chef de produit), Rachel (designer UX), Bezalel (architecte système), Oholiab (ingénieur senior) — 38 workflows couvrant tout le cycle, du brainstorming au déploiement
221
- - **SEO Engine** — 3 agents (Scout, Chief, Judge), pipeline d’audit en 6 phases, boucle d’optimisation PageSpeed, intégrations Google Search Console et GA4
222
- - **Memory Pack** — agent Zecher pour une mémoire persistante entre les sessions, avec scanner de projets
223
-
224
- **Sources externes et inspirations**
225
- - **BMAD-METHOD** par [bmad-code-org](https://github.com/bmad-code-org/BMAD-METHOD) — méthodologie multi-agents d’origine (MIT)
226
- - **Shield GRC** — 27 agents de conformité et 11 workflows adaptés des [compétences GRC de Hemant Naik](https://github.com/Sushegaad/Claude-Skills-Governance-Risk-and-Compliance) (MIT)
227
- - **Pipeline OSINT** basé sur [smixs/osint-skill](https://github.com/smixs/osint-skill) (MIT)
232
+ **Écrit par Laurent Rochetta**
233
+ - **Extensions de Core** — Autopilot, Parallel et Sync (0.1.0), exécution durable de Nexus (0.15.0), recettes d’acceptation humaine (`uat`, 0.16.0), revues vérifiables (0.19.0), et en 0.23.0 l’intake de pack (`bmad-plus intake`) et le runtime de swarm (`bmad-plus swarm`), avec les champs du registre et la barrière de déclencheurs qui les alimentent
234
+ - **Dev Studio** — 6 agents SDLC spécialisés : Miriam (analyste métier), Huldah (rédactrice technique), Yosef (chef de produit), Rachel (designer UX), Bezalel (architecte système), Oholiab (ingénieur senior) — 38 workflows, écrits comme instructions BMAD+ originales ; les noms des personas et la filiation des workflows reconnaissent BMAD-METHOD 6.6.0 (MIT). Le registre du pack est `src/bmad-plus/packs/pack-dev-studio/upstream-sync.yaml`
235
+ - **Maker** — concevoir, construire, valider et empaqueter vos propres agents BMAD+ (2026-03-17)
236
+ - **Design** — Atelier, bâti sur le paquet npm public de l’auteur [design-skill](https://github.com/lrochetta/design-skill) (MIT) : le paquet fournit les trois skills et leurs règles, BMAD+ ajoute le persona, l’intake et l’aiguillage
237
+ - **Memory** — agent Zecher pour une mémoire persistante entre les sessions, avec scanner de projets et détection de cerveau ; les Karpathy guardrails qu’il intègre sont adaptés, voir plus bas
238
+ - **SEO** — 3 agents (Scout, Chief, Judge), pipeline d’audit en 6 phases, boucle d’optimisation PageSpeed, intégrations Google Search Console et GA4 ; la version 2.0 a reconstruit le premier agent d’audit SEO, écrit chez Oveanet, et conservé son playbook PageSpeed
239
+ - **Backup** et **Animated** — sauvegardes de projet horodatées et sites web à défilement vidéo ; écrits chez Oveanet, la société de Laurent Rochetta, et intégrés à BMAD+ en 0.2.0 (2026-03-18) avec le premier agent SEO
240
+
241
+ **Dérivé de BMAD-METHOD** (MIT)
242
+ - **BMAD-METHOD** par [bmad-code-org](https://github.com/bmad-code-org/BMAD-METHOD) — méthodologie multi-agents d’origine (MIT) ; BMAD+ est un dérivé indépendant, pas une version officielle
243
+ - **Core** — Atlas, Forge, Sentinel et Nexus : BMAD+ est né d’un fork de BMAD-METHOD 6.2.0 et a été étendu par Laurent Rochetta (voir Extensions de Core ci-dessus). Les quatre personas suivent son format de persona et reprennent une partie de la formulation de ses personas analyste (Atlas), architecte (Forge), QA (Sentinel) et scrum master (Nexus) ; la fusion de rôles en un persona commutable et l’activation automatique sont des ajouts de BMAD+
244
+
245
+ **Adapté d’autres projets open source**
246
+ - **Shield** — 27 agents de conformité + 11 workflows adaptés des [compétences GRC de Hemant Naik](https://github.com/Sushegaad/Claude-Skills-Governance-Risk-and-Compliance) (MIT), avec leurs 79 fichiers de référence ; les workflows RGPD et AI Act s’inspirent aussi de l’architecture du catalogue de compétences [Lawve.ai](https://lawve.ai) (Oliver Schmidt-Prietz). L’orchestrateur, la cartographie entre référentiels, les modèles de rapport, le dossier d’assurance, le registre des traitements IA et les règles de revue de conformité sont des ajouts de BMAD+
247
+ - **OSINT** — pipeline et assistants Python adaptés de [smixs/osint-skill](https://github.com/smixs/osint-skill) (MIT) ; la barrière de base légale et la notice juridique sont des ajouts de BMAD+
228
248
  - **Intégration Apify** — assistant OSINT inspiré des [compétences d’agent Apify](https://github.com/apify/agent-skills) (licence Apache-2.0 déclarée en amont ; voir les mentions)
229
- - **Karpathy Guardrails** — adaptation pour le Memory Pack des [recommandations communautaires de forrestchang](https://github.com/multica-ai/andrej-karpathy-skills), inspirées d’Andrej Karpathy (MIT déclarée en amont)
249
+ - **Karpathy Guardrails** — adaptation pour Memory des [recommandations communautaires de forrestchang](https://github.com/multica-ai/andrej-karpathy-skills), inspirées d’Andrej Karpathy (MIT déclarée en amont)
@@ -135,20 +135,33 @@ pack: {pack-name}
135
135
  ```
136
136
 
137
137
  #### 3. `pack-definition.yaml`
138
- A ready-to-merge snippet for `module.yaml`:
138
+ A ready-to-merge snippet for the `packs:` mapping of `registry.yaml`, the single source of truth
139
+ for packs and agents. `order` must be an integer no other pack uses, `cli.icon` a non-empty
140
+ string, and `summary` must not hard-code a count of agents, skills or workflows (the build
141
+ derives those):
139
142
 
140
143
  ```yaml
141
144
  {pack-name}:
142
- name: "{Pack Display Name}"
143
- icon: "{icon}"
144
- description: "{description}"
145
+ order: {next free integer}
146
+ display_name: "{Pack Display Name}"
147
+ icon_emoji: "{icon}"
148
+ cli: { name: "{Short CLI name}", icon: "{one letter}", desc: "{CLI description}" }
145
149
  required: false
146
- agents:
147
- - agent-{name}
150
+ runtime: [node]
151
+ summary: "{one sentence, no counts}"
152
+ agents: [agent-{name}]
153
+ personas:
154
+ - { id: agent-{name}, name: {PersonaName}, role: {Title}, description: "{description}" }
148
155
  skills: []
149
- required_keys: [] # if any API keys needed
156
+ install_layout: loose
157
+ compliance_tags: []
158
+ required_keys: [] # only if API keys are needed
150
159
  ```
151
160
 
161
+ `install_layout: loose` copies the agent directory `agents/agent-{name}/` into the project. A
162
+ pack that ships its files in one folder uses `install_layout: packaged` with `pack_dir`,
163
+ `pack_src_dir` and `doctor.pack_agents` instead: see the existing `backup` entry.
164
+
152
165
  #### 4. `INTEGRATION.md`
153
166
  Instructions for integrating the agent into BMAD+:
154
167
 
@@ -158,14 +171,26 @@ Instructions for integrating the agent into BMAD+:
158
171
  ## Files to copy
159
172
  - `agents/agent-{name}/` → `src/bmad-plus/agents/agent-{name}/`
160
173
 
161
- ## module.yaml update
162
- Add the pack definition from `pack-definition.yaml` to the `packs:` section.
174
+ ## Register the pack (registry first)
175
+ `registry.yaml` is the single source of truth. Never edit the files generated from it
176
+ (`tools/cli/lib/packs.js`, the pack metadata of `src/bmad-plus/module.yaml`, `AGENTS.md` and the
177
+ other adapters).
178
+ - New pack: add the entry from `pack-definition.yaml` under `packs:` in `registry.yaml`.
179
+ - New agent in an existing pack: add its id to that pack's `agents:` list and a line to its
180
+ `personas:` list (and to `doctor.pack_agents` when the pack uses the packaged layout).
163
181
 
164
182
  ## module-help.csv update
165
- Add: bmad-plus-agent-{name},"{help text}"
166
-
167
- ## installer update
168
- Add pack to `PACKS` object in `tools/cli/commands/install.js`
183
+ This file is maintained by hand. Add to `src/bmad-plus/module-help.csv`:
184
+ bmad-plus-agent-{name},"{help text}"
185
+
186
+ ## Regenerate and check
187
+ From the repository root, in this order:
188
+ 1. `npm run build` regenerates `tools/cli/lib/packs.js` and `src/bmad-plus/module.yaml`.
189
+ 2. `node tools/build/generate-adapters.js --adopt` regenerates `AGENTS.md` and the tool adapters
190
+ (`CLAUDE.md`, `GEMINI.md`, ...) with the new roster.
191
+ 3. `npm run build:check`, `node tools/build/generate-adapters.js --check --adopt` and
192
+ `npm run check:counts` must report no drift; `npm run check:triggers` too if you added
193
+ role triggers to `src/bmad-plus/data/role-triggers.yaml`.
169
194
 
170
195
  ## Test
171
196
  Run `npx bmad-plus install --packs {pack-name}` in a test project.
@@ -175,7 +200,7 @@ Run `npx bmad-plus install --packs {pack-name}` in a test project.
175
200
  After generating, run a self-check:
176
201
  - [ ] SKILL.md follows v6 format
177
202
  - [ ] Manifest has all required fields
178
- - [ ] Pack definition is valid YAML
203
+ - [ ] Pack definition is a valid `registry.yaml` pack entry (unique `order`, `cli`, `personas`)
179
204
  - [ ] Capabilities have unique 2-letter codes
180
205
  - [ ] Integration guide is complete
181
206
 
@@ -73,6 +73,8 @@ authorization and completed work when changing depth.
73
73
 
74
74
  Read `execution_mode` and `checkpoints` from `_bmad/config.yaml` before starting the pipeline. The checkpoint keys are `discovery`, `architecture`, `story`, and `delivery`.
75
75
 
76
+ **Pack pipelines.** When the request or the context names a pack that declares `pipelines` in the registry (the spine's facts section counts them on the pack's line and lists each pipeline's steps on a `- Pipelines (<pack>)` line; read the steps there), run that pipeline instead of the generic phases for that pack: its steps in order, each step's `workflow` or `agent` from the pack, each step's `gate` applied with the checkpoint behavior below. When the pack also declares an `intake`, run it first with the `bmad-plus-intake` skill and do not start the first step while a must-have is neither answered nor marked unknown with its risk; the rendered brief is the input of every step.
77
+
76
78
  **Checkpoint behavior** (configurable):
77
79
  - `require_approval` (🔴 STOP): Check whether the existing user authorization covers the concrete next action. If approval is still required, present the reviewable checkpoint and wait; do not ask again for an action already authorized. If an external channel is configured and sending is authorized, also notify through it.
78
80
  - `notify_only` (🟡 INFO): Report progress in the session and continue. If an external channel is configured and sending is authorized, also notify through it.
@@ -101,7 +103,9 @@ Focuses on: detecting parallelizable tasks, launching agents in parallel, confli
101
103
  - **Reallocate**: Agent finishes early → assign next available task
102
104
  - **Escalate**: A task exhausts its attempt limit or cannot be reconciled → report the condition, current evidence and preserved changes. Continue independent authorized work when possible. An external notification still needs configuration and authorization.
103
105
 
104
- > 💡 **Auto-activates** when: multiple independent stories are queued, or when `{parallel_execution}` is enabled and batch work is detected.
106
+ **Swarms.** A pack that ships a swarm definition (a panel of simulated units, a jury of lenses, a fanout of disjoint scopes) is run through `bmad-plus swarm` and the `bmad-plus-swarm` skill, one wave of session sub-agents at a time, each reading its brief as its whole instruction; a fanout can instead be exported as a Nexus plan for durable host attempts. Stay within `swarm.budget` from `_bmad/config.yaml`; beyond it, ask the user before `init --approved`. Paid media generation is never covered by that budget.
107
+
108
+ > 💡 **Auto-activates** when: multiple independent stories are queued, when `{parallel_execution}` is enabled and batch work is detected, or when a pack's swarm is declared or a panel is requested.
105
109
 
106
110
  When auto-activating a role, **announce it**: "💡 I'm switching to [Role] mode — [reason]. Say 'skip' to stay in current mode."
107
111
 
@@ -211,6 +211,7 @@ orchestrator:
211
211
  contexts:
212
212
  - "new_project_idea"
213
213
  - "execution_mode_autopilot"
214
+ - "pack_pipeline_declared"
214
215
 
215
216
  parallel-supervisor:
216
217
  patterns:
@@ -223,6 +224,8 @@ orchestrator:
223
224
  - "independent_stories_detected"
224
225
  - "multi_task_queue"
225
226
  - "parallel_execution_enabled"
227
+ - "swarm_declared"
228
+ - "panel_requested"
226
229
  reasoning:
227
230
  - "stories_have_no_shared_dependencies"
228
231
  - "workload_can_be_distributed"
@@ -278,3 +281,34 @@ seo:
278
281
  - "competitive_gap_analysis"
279
282
  reasoning:
280
283
  - "findings_need_prioritized_scoring"
284
+
285
+ design:
286
+ default_role: design-engine
287
+ auto_triggers:
288
+ design-engine:
289
+ # Level 1 — Pattern matching (keywords in user request). The persona picks its
290
+ # role (Builder, Reviewer, Redesigner) from the request; the pack has one agent.
291
+ # The vocabulary is the pack's own: bare "design", "UI" or "interface" belong to
292
+ # Forge's architect role and Sentinel's UX review, which coexist with this pack.
293
+ patterns:
294
+ - "Atelier"
295
+ - "/design"
296
+ - "design tokens"
297
+ - "maquette"
298
+ - "wireframe"
299
+ - "landing page"
300
+ - "make it look good"
301
+ - "accessibilité"
302
+ - "accessibility"
303
+ - "refonte"
304
+ - "redesign"
305
+ # Level 2 — Contextual (situations detected during work)
306
+ contexts:
307
+ - "frontend_changes"
308
+ - "new_page"
309
+ - "new_component"
310
+ - "design_tokens_missing"
311
+ # Level 3 — Reasoning chain (discoveries during execution)
312
+ reasoning:
313
+ - "ui_looks_generic"
314
+ - "accessibility_unverified"
@@ -9,3 +9,5 @@ bmad-plus-agent-shadow,"Talk to Shadow — your OSINT Intelligence Analyst. Inve
9
9
  bmad-plus-sync,"Synchronize BMAD+ with upstream BMAD-METHOD. Check for updates, analyze changes via AI, and merge compatible updates. Uses VPS MCP Server for git operations."
10
10
  bmad-plus-agent-maker,"Talk to Maker — your Agent Creator. Designs, builds, and packages new BMAD+ compatible agents from a natural language description. Outputs ready-to-integrate packages."
11
11
  bmad-plus-uat,"Human acceptance recipes (recette): turn a delivery into a step-by-step page a person plays, read their run, classify every failure, and gate the delivery on it."
12
+ bmad-plus-intake,"Pack intake: ask the questions a pack needs before it acts, in the user's language and a few at a time, record each answer, default or unknown, and render the brief the pack works from."
13
+ bmad-plus-swarm,"Run a swarm of sub-agents under a budget: deal simulated buyers or a jury, brief one sub-agent per unit, file and check their answers, tally them with the disclosure first. Use for panels, juries and fanouts."
@@ -22,7 +22,7 @@ install_packs:
22
22
  - value: maker
23
23
  label: 🧬 Agent Creator — Design, build, validate, and package new BMAD+-compatible agents.
24
24
  - value: shield
25
- label: 🛡️ Shield — GRC Compliance — 27 compliance agents + 11 workflows across 26+ frameworks.
25
+ label: 🛡️ Shield — GRC Compliance — 27 compliance agents + 11 workflows across 27+ frameworks.
26
26
  - value: seo
27
27
  label: 🔍 SEO Audit 360 — 3 agents (Scout, Chief, Judge) + 6-phase audit + PageSpeed loop.
28
28
  - value: memory
@@ -35,6 +35,10 @@ install_packs:
35
35
  label: 🗂️ Universal Backup — Timestamped ZIP backup with smart exclusions.
36
36
  - value: animated
37
37
  label: 🎬 Animated Website — Luxury scroll-driven website from video.
38
+ - value: design
39
+ label: >-
40
+ 🎨 Design — Atelier builds, audits and redesigns interfaces under checkable rules: intake first,
41
+ semantic tokens, WCAG AA, every state covered, pre-flight before delivery.
38
42
  - value: all
39
43
  label: Tout installer
40
44
  - value: none
@@ -116,8 +120,10 @@ packs:
116
120
  - agent-orchestrator
117
121
  skills:
118
122
  - bmad-plus-autopilot
123
+ - bmad-plus-intake
119
124
  - bmad-plus-parallel
120
125
  - bmad-plus-sync
126
+ - bmad-plus-swarm
121
127
  - bmad-plus-uat
122
128
  data:
123
129
  - role-triggers.yaml
@@ -130,13 +136,14 @@ packs:
130
136
  - agent-shadow
131
137
  skills: []
132
138
  external_package: osint-agent-package
133
- required_keys:
134
- - APIFY_API_TOKEN
135
139
  optional_keys:
140
+ - APIFY_API_TOKEN
136
141
  - PERPLEXITY_API_KEY
137
142
  - EXA_API_KEY
138
143
  - TAVILY_API_KEY
139
144
  - JINA_API_KEY
145
+ - PARALLEL_API_KEY
146
+ - BRIGHTDATA_MCP_URL
140
147
  maker:
141
148
  name: Agent Creator
142
149
  icon: 🧬
@@ -149,7 +156,7 @@ packs:
149
156
  shield:
150
157
  name: Shield — GRC Compliance
151
158
  icon: 🛡️
152
- description: 27 compliance agents + 11 workflows across 26+ frameworks.
159
+ description: 27 compliance agents + 11 workflows across 27+ frameworks.
153
160
  required: false
154
161
  agents:
155
162
  - shield-orchestrator
@@ -332,3 +339,18 @@ packs:
332
339
  skills: []
333
340
  packDir: pack-animated
334
341
  packSrcDir: packs
342
+ design:
343
+ name: Design
344
+ icon: 🎨
345
+ description: >-
346
+ Atelier builds, audits and redesigns interfaces under checkable rules: intake first, semantic tokens,
347
+ WCAG AA, every state covered, pre-flight before delivery.
348
+ required: false
349
+ agents:
350
+ - design-engine
351
+ skills: []
352
+ cohabitation_warning: >-
353
+ Overlaps Sentinel's UX-review role and Dev Studio's Rachel (UX Designer); when this pack is installed
354
+ its rules govern visual design and accessibility, and the others hand those over.
355
+ packDir: pack-design
356
+ packSrcDir: packs
@@ -7,10 +7,12 @@ Tu es un expert en création de sites web animés de luxe. Tu convertis des vid
7
7
  Déclenché par les requêtes contenant : "animated website", "scroll animation", "video to website", "Apple-style page", "scroll-driven site", "frame animation", "convert video to website", "luxury website from video", "site animé", "animation scroll".
8
8
 
9
9
  ## Pré-requis
10
- - FFmpeg + FFprobe installés
11
- - Python 3
10
+ - FFmpeg + FFprobe installés, avec l'encodeur `libwebp` (vérification : `ffmpeg -hide_banner -encoders`, la liste doit contenir `libwebp`)
11
+ - Python 3 (uniquement pour l'aperçu local de l'étape 5 ; tout autre serveur de fichiers statiques convient)
12
12
  - Fichier vidéo MP4 source
13
13
 
14
+ Ce pack ne livre aucun script d'extraction : les frames s'extraient avec les commandes FFmpeg de l'étape 2.
15
+
14
16
  ---
15
17
 
16
18
  ## Processus Complet
@@ -44,24 +46,38 @@ Recommander le nombre de frames :
44
46
 
45
47
  ### Étape 2 — Extraire et optimiser les frames
46
48
 
47
- Utiliser le script `extract_frames.py` :
49
+ Deux commandes FFmpeg suffisent (aucun script à installer). Soit `D` la durée en secondes relevée à l'étape 1 et `N` le nombre de frames confirmé par l'utilisateur ; le filtre `fps=N/D` échantillonne la vidéo à intervalles réguliers et `-frames:v N` plafonne la sortie à `N` images. Créer d'abord les dossiers de sortie, FFmpeg ne les crée pas.
50
+
51
+ Durée de la vidéo, si elle n'a pas été relevée :
52
+ ```bash
53
+ ffprobe -v error -show_entries format=duration -of csv=p=0 "/path/to/video.mp4"
54
+ ```
48
55
 
49
- **Windows :**
56
+ **Windows (PowerShell) :**
50
57
  ```powershell
51
- python scripts/extract_frames.py --input "C:/path/to/video.mp4" --output "output/frames" --frames 120 --quality 80
58
+ New-Item -ItemType Directory -Force "output/frames/desktop", "output/frames/mobile"
59
+ ffmpeg -i "C:/path/to/video.mp4" -vf "fps=120/12.4,scale=1920:1080:force_original_aspect_ratio=increase,crop=1920:1080" -c:v libwebp -quality 80 -compression_level 6 -frames:v 120 -start_number 0 "output/frames/desktop/frame-%04d.webp"
60
+ ffmpeg -i "C:/path/to/video.mp4" -vf "fps=120/12.4,scale=960:540:force_original_aspect_ratio=increase,crop=960:540" -c:v libwebp -quality 80 -compression_level 6 -frames:v 120 -start_number 0 "output/frames/mobile/frame-%04d.webp"
52
61
  ```
53
62
 
54
63
  **Mac/Linux :**
55
64
  ```bash
56
- python3 scripts/extract_frames.py --input "/path/to/video.mp4" --output "output/frames" --frames 120 --quality 80
65
+ mkdir -p output/frames/desktop output/frames/mobile
66
+ ffmpeg -i "/path/to/video.mp4" -vf "fps=120/12.4,scale=1920:1080:force_original_aspect_ratio=increase,crop=1920:1080" -c:v libwebp -quality 80 -compression_level 6 -frames:v 120 -start_number 0 "output/frames/desktop/frame-%04d.webp"
67
+ ffmpeg -i "/path/to/video.mp4" -vf "fps=120/12.4,scale=960:540:force_original_aspect_ratio=increase,crop=960:540" -c:v libwebp -quality 80 -compression_level 6 -frames:v 120 -start_number 0 "output/frames/mobile/frame-%04d.webp"
57
68
  ```
58
69
 
59
- Le script produit :
60
- - `frames/desktop/` — WebP 1920x1080
61
- - `frames/mobile/` — WebP 960x540
62
- - `frames/manifest.json` — métadonnées
70
+ Les exemples supposent `N = 120` et `D = 12.4` : remplacer `120/12.4` et `-frames:v 120` par les valeurs réelles. `-quality 80` est la qualité WebP (1-100).
71
+
72
+ Résultat :
73
+ - `frames/desktop/` — WebP 1920x1080, `frame-0000.webp` à `frame-<N-1>.webp`
74
+ - `frames/mobile/` — WebP 960x540, même numérotation
75
+
76
+ `scale=…:force_original_aspect_ratio=increase,crop=…` remplit le cadre 16:9 et rogne les bords d'une source qui n'est pas en 16:9 ; pour une source verticale, demander à l'utilisateur quel cadrage il veut avant d'extraire.
63
77
 
64
- **Budget payload :** Desktop < 10MB, Mobile < 5MB.
78
+ Écrire ensuite `frames/manifest.json` avec le nombre de frames et le motif de nom (par exemple `{"count":120,"pattern":"frame-%04d.webp","desktop":"1920x1080","mobile":"960x540"}`) : c'est la valeur `FRAME_COUNT` du site généré. Vérifier que le nombre de fichiers de chaque dossier est égal à `N`.
79
+
80
+ **Budget payload :** Desktop < 10MB, Mobile < 5MB. Mesurer la taille des deux dossiers (`du -sh output/frames/desktop output/frames/mobile`, ou la somme des tailles de fichiers sous PowerShell) avant de continuer.
65
81
 
66
82
  ### Étape 3 — Contenu des 6 sections
67
83
 
@@ -126,6 +142,16 @@ python3 -m http.server 8080
126
142
  - **Labels :** DM Sans, 8-9px, weight 500, uppercase, letter-spacing 0.25-0.35em
127
143
  - **Hero :** `clamp(42px, 5.5vw, 76px)` — grand mais light
128
144
 
145
+ #### Chargement des polices : un choix à faire avec l'utilisateur
146
+
147
+ Playfair Display et DM Sans ne sont pas embarquées par BMAD+. Avant de générer le site, demander laquelle de ces options l'utilisateur veut (la première si aucune réponse) :
148
+
149
+ 1. **Polices système (défaut).** Ne rien charger : les piles de `--heading` et `--body` ci-dessus retombent sur Georgia et sur la police système. Aucune requête externe.
150
+ 2. **Polices auto-hébergées.** L'utilisateur fournit les fichiers `.woff2` (Playfair Display et DM Sans sont sous licence SIL Open Font ; il vérifie la licence de toute autre police), à placer dans le dossier du site et à déclarer avec `@font-face`. Aucune requête vers un tiers.
151
+ 3. **Google Fonts.** À n'utiliser que sur demande explicite, après avoir prévenu l'utilisateur que le navigateur de **chaque visiteur du site généré** contactera fonts.googleapis.com et fonts.gstatic.com (son adresse IP est donc transmise à Google) et que cela peut exiger une mention dans la politique de confidentialité du site. Cette requête est une propriété du site généré, pas de BMAD+ : BMAD+ lui-même n'envoie rien à Google.
152
+
153
+ Balise à insérer uniquement pour l'option 3 :
154
+
129
155
  ```html
130
156
  <link href="https://fonts.googleapis.com/css2?family=DM+Sans:ital,wght@0,300;0,400;0,500;0,600;1,300;1,400&family=Playfair+Display:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400&display=swap" rel="stylesheet">
131
157
  ```
@@ -213,7 +239,7 @@ Fichier HTML unique. Ordre structurel :
213
239
 
214
240
  ```
215
241
  HTML :
216
- 1. Google Fonts link
242
+ 1. Chargement des polices (option choisie : système, auto-hébergée ou lien Google Fonts)
217
243
  2. <style> — tout le CSS
218
244
  3. Cursor custom divs (#cursor-dot, #cursor-ring)
219
245
  4. Film grain overlay
@@ -316,8 +342,8 @@ Avant livraison, vérifier :
316
342
  | Problème | Solution |
317
343
  |---------|---------|
318
344
  | FFmpeg non trouvé | `winget install FFmpeg` (Win), `brew install ffmpeg` (Mac) |
319
- | Pas de libwebp | Reinstaller FFmpeg ou installer Pillow |
320
- | Frames trop lourdes (>10MB) | `--quality 60` ou `--frames 90` |
345
+ | Pas de libwebp | Installer une build de FFmpeg qui inclut `libwebp` (`ffmpeg -hide_banner -encoders` doit le lister) |
346
+ | Frames trop lourdes (>10MB) | `-quality 60` ou `-frames:v 90` (avec `fps=90/D`) |
321
347
  | Animation saccadée | Réduire frames, vérifier DPR cap à 2, réduire particules |
322
348
  | Flash blanc entre frames | Vérifier extraction, fallback nearest-frame |
323
349
  | Canvas blanc sur mobile | Vérifier existence des frames mobile, chemin FRAME_DIR |
@@ -8,32 +8,33 @@ Converts an MP4 video into a luxury scroll-driven animated website with canvas f
8
8
 
9
9
  ## Pre-requisites
10
10
 
11
- 1. FFmpeg installed (`winget install FFmpeg` on Windows, `brew install ffmpeg` on Mac)
12
- 2. Python 3 installed
11
+ 1. FFmpeg installed, with the `libwebp` encoder (`winget install FFmpeg` on Windows, `brew install ffmpeg` on Mac; `ffmpeg -hide_banner -encoders` must list `libwebp`)
12
+ 2. Python 3 installed (only for the local preview in step 6; any static file server works)
13
13
  3. Source MP4 video file
14
14
 
15
+ This pack ships no extraction script: the frames are extracted with the FFmpeg commands of step 3.
16
+
15
17
  ## Steps
16
18
 
17
19
  1. Ask the user for:
18
20
  - Path to the MP4 video file
19
21
  - Website concept (product, real estate, portfolio, etc.)
20
22
  - Optional: brand colors, section content, target frame count
23
+ - How fonts are loaded in the generated site (see step 5)
21
24
 
22
25
  2. Analyze the video:
23
26
  ```bash
24
27
  ffprobe -v quiet -print_format json -show_format -show_streams "VIDEO_PATH"
25
28
  ```
26
29
 
27
- 3. Extract frames using the script:
30
+ 3. Extract the frames with FFmpeg. `DURATION` is the video length in seconds from step 2; create the two output folders first (`mkdir -p OUTPUT_DIR/frames/desktop OUTPUT_DIR/frames/mobile`):
28
31
  ```bash
29
- python3 scripts/extract_frames.py \
30
- --input "VIDEO_PATH" \
31
- --output "OUTPUT_DIR/frames" \
32
- --frames FRAME_COUNT \
33
- --quality 80
32
+ ffmpeg -i "VIDEO_PATH" -vf "fps=FRAME_COUNT/DURATION,scale=1920:1080:force_original_aspect_ratio=increase,crop=1920:1080" -c:v libwebp -quality 80 -compression_level 6 -frames:v FRAME_COUNT -start_number 0 "OUTPUT_DIR/frames/desktop/frame-%04d.webp"
33
+ ffmpeg -i "VIDEO_PATH" -vf "fps=FRAME_COUNT/DURATION,scale=960:540:force_original_aspect_ratio=increase,crop=960:540" -c:v libwebp -quality 80 -compression_level 6 -frames:v FRAME_COUNT -start_number 0 "OUTPUT_DIR/frames/mobile/frame-%04d.webp"
34
34
  ```
35
+ Then write `OUTPUT_DIR/frames/manifest.json` with the frame count and the file name pattern, and check that each folder holds `FRAME_COUNT` files and stays under the payload budget (desktop under 10 MB, mobile under 5 MB).
35
36
 
36
- 4. Generate the complete index.html following the design system in `agent/animated-website-agent.md`:
37
+ 4. Generate the complete index.html following the design system in `animated-website-agent.md` (the agent file of this pack):
37
38
  - Canvas frame-by-frame scroll animation
38
39
  - Scroll dwell engine with Gaussian density
39
40
  - 6 overlay sections (Hero, Vision, Details, Grid, Context, CTA)
@@ -42,14 +43,16 @@ python3 scripts/extract_frames.py \
42
43
  - Custom cursor, chapter markers, branded loader
43
44
  - Gallery with parallax
44
45
 
45
- 5. Serve and preview:
46
+ 5. Fonts. Use system fonts by default. Self-hosted `.woff2` files are the alternative that sends nothing to a third party. Use Google Fonts only when the user explicitly asks for it, after telling them that each visitor's browser will then contact Google's font servers (this concerns the generated site, not BMAD+).
47
+
48
+ 6. Serve and preview:
46
49
  ```bash
47
50
  cd OUTPUT_DIR
48
51
  python3 -m http.server 8080
49
52
  ```
50
53
 
51
- 6. Iterate based on user feedback (scroll speed, colors, content, etc.)
54
+ 7. Iterate based on user feedback (scroll speed, colors, content, etc.)
52
55
 
53
56
  ## Reference
54
57
 
55
- See `agent/animated-website-agent.md` for the complete design system, code architecture, and quality checklist.
58
+ See `animated-website-agent.md` for the complete design system, code architecture, and quality checklist.
@@ -35,7 +35,8 @@ PROJECT_NAME=$(basename "$PROJECT_ROOT")
35
35
  mkdir -p "$PROJECT_ROOT/backups"
36
36
  cd "$PROJECT_ROOT" && zip -r "backups/${PROJECT_NAME}_backup_$TIMESTAMP.zip" . \
37
37
  -x "backups/*" "node_modules/*" ".git/*" "vendor/*" "__pycache__/*" "*.backup_*"
38
- echo "✅ Backup: ${PROJECT_NAME}_backup_$TIMESTAMP.zip"
38
+ SIZE=$(du -h "backups/${PROJECT_NAME}_backup_$TIMESTAMP.zip" | cut -f1)
39
+ echo "✅ Backup: ${PROJECT_NAME}_backup_$TIMESTAMP.zip ($SIZE)"
39
40
  ```
40
41
 
41
42
  ### 2. `/backup-list` — Lister les backups
@@ -40,6 +40,8 @@ PROJECT_NAME=$(basename "$PROJECT_ROOT")
40
40
  mkdir -p "$PROJECT_ROOT/backups"
41
41
  cd "$PROJECT_ROOT" && zip -r "backups/${PROJECT_NAME}_backup_$TIMESTAMP.zip" . \
42
42
  -x "backups/*" "node_modules/*" ".git/*" "vendor/*" "__pycache__/*" "*.backup_*"
43
+ SIZE=$(du -h "backups/${PROJECT_NAME}_backup_$TIMESTAMP.zip" | cut -f1)
44
+ echo "Backup: ${PROJECT_NAME}_backup_$TIMESTAMP.zip ($SIZE)"
43
45
  ```
44
46
 
45
47
  2. Confirm the backup was created and report the file name and size.