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.
- package/CHANGELOG.md +59 -0
- package/README.md +46 -26
- package/SECURITY.md +1 -1
- package/osint-agent-package/agents/osint-investigator.md +3 -3
- package/osint-agent-package/skills/bmad-osint-investigate/osint/SKILL.md +51 -51
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/content-extraction.md +7 -7
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/platforms.md +2 -2
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/tools.md +31 -41
- package/package.json +24 -5
- package/readme-international/README.de.md +46 -26
- package/readme-international/README.es.md +47 -27
- package/readme-international/README.fr.md +46 -26
- package/src/bmad-plus/agents/agent-maker/SKILL.md +39 -14
- package/src/bmad-plus/agents/agent-orchestrator/SKILL.md +5 -1
- package/src/bmad-plus/data/role-triggers.yaml +34 -0
- package/src/bmad-plus/module-help.csv +2 -0
- package/src/bmad-plus/module.yaml +26 -4
- package/src/bmad-plus/packs/pack-animated/animated-website-agent.md +40 -14
- package/src/bmad-plus/packs/pack-animated/templates/animated-website-workflow.md +15 -12
- package/src/bmad-plus/packs/pack-backup/backup-agent.md +2 -1
- package/src/bmad-plus/packs/pack-backup/templates/backup-workflow.md +2 -0
- package/src/bmad-plus/packs/pack-design/SKILL.md +72 -0
- package/src/bmad-plus/packs/pack-design/bmad-skill-manifest.yaml +13 -0
- package/src/bmad-plus/packs/pack-design/design-engine.md +126 -0
- package/src/bmad-plus/packs/pack-design/intake.yaml +105 -0
- package/src/bmad-plus/packs/pack-memory/zecher-agent.md +1 -1
- package/src/bmad-plus/packs/pack-shield/README.md +1 -1
- package/src/bmad-plus/packs/pack-shield/SKILL.md +3 -3
- package/src/bmad-plus/packs/pack-shield/categories/industry-compliance/pci-dss-agent.md +1 -1
- package/src/bmad-plus/packs/pack-shield/shield-orchestrator.md +2 -2
- package/src/bmad-plus/skills/bmad-plus-autopilot/SKILL.md +7 -0
- package/src/bmad-plus/skills/bmad-plus-intake/SKILL.md +87 -0
- package/src/bmad-plus/skills/bmad-plus-intake/ref/intake-format.md +112 -0
- package/src/bmad-plus/skills/bmad-plus-parallel/SKILL.md +18 -0
- package/src/bmad-plus/skills/bmad-plus-swarm/SKILL.md +115 -0
- package/src/bmad-plus/skills/bmad-plus-swarm/ref/definition.md +188 -0
- package/tools/build/adapters.config.js +3 -1
- package/tools/build/generate-adapters.js +26 -2
- package/tools/build/generate.js +269 -7
- package/tools/build/intake-contract.js +522 -0
- package/tools/cli/bmad-plus-cli.js +2 -0
- package/tools/cli/commands/install.js +45 -11
- package/tools/cli/commands/intake.js +124 -0
- package/tools/cli/commands/nexus.js +2 -1
- package/tools/cli/commands/review.js +1 -1
- package/tools/cli/commands/swarm.js +119 -0
- package/tools/cli/commands/uninstall.js +17 -0
- package/tools/cli/commands/update.js +30 -1
- package/tools/cli/i18n.js +50 -30
- package/tools/cli/lib/intake.js +202 -0
- package/tools/cli/lib/pack-copy.js +95 -5
- package/tools/cli/lib/packs.js +102 -12
- package/tools/cli/lib/review.js +2 -1
- package/tools/cli/lib/swarm-deal.js +116 -0
- package/tools/cli/lib/swarm-defaults.js +6 -0
- package/tools/cli/lib/swarm-tally.js +195 -0
- package/tools/cli/lib/swarm-validate.js +589 -0
- package/tools/cli/lib/swarm.js +712 -0
- package/tools/cli/lib/update-dispatch.js +10 -2
- 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
|
-
[](https://www.npmjs.com/package/bmad-plus)
|
|
8
8
|
|
|
9
|
-
**Version 0.
|
|
9
|
+
**Version 0.23.1** · Node.js `>=20.0.0` · MIT
|
|
10
10
|
|
|
11
|
-
|
|
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.
|
|
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 |
|
|
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
|
-
|
|
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
|
-
|
|
191
|
+
## Nouveautés de la 0.23.1
|
|
181
192
|
|
|
182
|
-
|
|
193
|
+
Un site plus fidèle, des commandes plus régulières
|
|
183
194
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
-
|
|
187
|
-
-
|
|
188
|
-
-
|
|
189
|
-
-
|
|
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
|
-
|
|
220
|
-
- **
|
|
221
|
-
- **
|
|
222
|
-
- **
|
|
223
|
-
|
|
224
|
-
**
|
|
225
|
-
- **
|
|
226
|
-
- **
|
|
227
|
-
|
|
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
|
|
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 `
|
|
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
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
-
|
|
147
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
162
|
-
|
|
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
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
- `frames/
|
|
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
|
-
|
|
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
|
|
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 |
|
|
320
|
-
| Frames trop lourdes (>10MB) |
|
|
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
|
|
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
|
-
|
|
30
|
-
|
|
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 `
|
|
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.
|
|
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
|
-
|
|
54
|
+
7. Iterate based on user feedback (scroll speed, colors, content, etc.)
|
|
52
55
|
|
|
53
56
|
## Reference
|
|
54
57
|
|
|
55
|
-
See `
|
|
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
|
-
|
|
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.
|