bmad-plus 0.12.2 → 0.13.0
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 +25 -0
- package/README.md +36 -8
- package/package.json +6 -4
- package/readme-international/README.de.md +37 -8
- package/readme-international/README.es.md +38 -9
- package/readme-international/README.fr.md +37 -8
- package/src/bmad-plus/agents/agent-orchestrator/SKILL.md +2 -0
- package/src/bmad-plus/module.yaml +270 -220
- package/src/bmad-plus/packs/pack-seo/scripts/seo_apis.py +8 -8
- package/src/bmad-plus/packs/pack-seo/scripts/seo_fetch.py +1 -2
- package/src/bmad-plus/packs/pack-seo/scripts/seo_report.py +0 -1
- package/src/bmad-plus/skills/bmad-plus-autopilot/SKILL.md +1 -1
- package/tools/bmad-plus-npx.js +4 -2
- package/tools/build/adapters.config.js +60 -51
- package/tools/build/check-counts.js +52 -54
- package/tools/build/check-install-contract.js +298 -0
- package/tools/build/generate-adapters.js +252 -56
- package/tools/build/generate.js +187 -10
- package/tools/build/generated-adapters/.codex/AGENTS.md +20 -7
- package/tools/build/generated-adapters/.cursor/rules/bmad-plus.mdc +20 -7
- package/tools/build/generated-adapters/.opencode/AGENTS.md +20 -7
- package/tools/build/generated-adapters/AGENTS.md +20 -7
- package/tools/build/generated-adapters/CLAUDE.md +20 -7
- package/tools/build/generated-adapters/CONVENTIONS.md +20 -7
- package/tools/build/generated-adapters/GEMINI.md +20 -7
- package/tools/build/module.template.yaml +82 -0
- package/tools/cli/bmad-plus-cli.js +16 -1
- package/tools/cli/commands/doctor.js +12 -40
- package/tools/cli/commands/install.js +108 -163
- package/tools/cli/commands/uninstall.js +173 -65
- package/tools/cli/commands/update-check.js +31 -0
- package/tools/cli/commands/update-policy.js +39 -0
- package/tools/cli/commands/update.js +102 -113
- package/tools/cli/i18n.js +60 -0
- package/tools/cli/lib/ide-config.js +4 -261
- package/tools/cli/lib/install-manifest.js +17 -0
- package/tools/cli/lib/installed-adapters.js +89 -0
- package/tools/cli/lib/npm-runner.js +177 -0
- package/tools/cli/lib/pack-copy.js +62 -66
- package/tools/cli/lib/packs.js +437 -3
- package/tools/cli/lib/update-check.js +153 -0
- package/tools/cli/lib/update-dispatch.js +182 -0
- package/tools/cli/lib/update-policy.js +90 -0
- package/tools/cli/lib/update-transaction.js +334 -0
package/tools/build/generate.js
CHANGED
|
@@ -3,17 +3,19 @@
|
|
|
3
3
|
* BMAD+ Build — registry.yaml → pack artifacts generator (Pillar 1)
|
|
4
4
|
*
|
|
5
5
|
* Reads the root registry.yaml (the single source of truth) and generates the
|
|
6
|
-
* pack data
|
|
6
|
+
* pack data in tools/cli/lib/packs.js and src/bmad-plus/module.yaml:
|
|
7
7
|
* - PACKS (CLI pack definitions)
|
|
8
8
|
* - PACK_ORDER (install/display order)
|
|
9
9
|
* - EXPECTED_AGENTS (what `bmad-plus doctor` verifies after install)
|
|
10
|
+
* - DERIVED (counts, display metadata, targets, Python provisioning)
|
|
10
11
|
*
|
|
11
12
|
* Usage:
|
|
12
13
|
* node tools/build/generate.js # print generated packs module source
|
|
13
|
-
* node tools/build/generate.js --json # print
|
|
14
|
+
* node tools/build/generate.js --json # print all generated data as JSON
|
|
14
15
|
* node tools/build/generate.js --out <file> # write generated module source to <file>
|
|
16
|
+
* --module-out <yaml> # also write generated module.yaml
|
|
15
17
|
* node tools/build/generate.js --check # verify registry.yaml reproduces the live
|
|
16
|
-
* #
|
|
18
|
+
* # packs.js and module.yaml (exit 1 on drift)
|
|
17
19
|
*
|
|
18
20
|
* Author: Laurent Rochetta
|
|
19
21
|
*/
|
|
@@ -28,9 +30,19 @@ const yaml = require('js-yaml');
|
|
|
28
30
|
const REPO_ROOT = path.join(__dirname, '..', '..');
|
|
29
31
|
const DEFAULT_REGISTRY_PATH = path.join(REPO_ROOT, 'registry.yaml');
|
|
30
32
|
const DEFAULT_PACKS_MODULE_PATH = path.join(REPO_ROOT, 'tools', 'cli', 'lib', 'packs.js');
|
|
33
|
+
const DEFAULT_MODULE_PATH = path.join(REPO_ROOT, 'src', 'bmad-plus', 'module.yaml');
|
|
34
|
+
const MODULE_TEMPLATE_PATH = path.join(__dirname, 'module.template.yaml');
|
|
31
35
|
const PACKAGE_JSON_PATH = path.join(REPO_ROOT, 'package.json');
|
|
32
36
|
|
|
33
37
|
const INSTALL_LAYOUTS = ['loose', 'packaged'];
|
|
38
|
+
const OWNED_COUNT_RE = /(?<![\w.-])\d+\+?[\s-]+(?:[A-Za-zÀ-ÿ-]+\s+){0,6}(?:agents?|skills?|workflows?|packs?|frameworks?|languages?|reference files)\b/gi;
|
|
39
|
+
const STANDARD_PREFIX_RE = /\b(?:ISO(?:\/IEC)?|IEC|SOC|NIST(?: SP)?|PCI(?: DSS)?|WCAG|Section)\s*$/i;
|
|
40
|
+
|
|
41
|
+
function hasOwnedCount(value) {
|
|
42
|
+
return [...value.matchAll(OWNED_COUNT_RE)].some((match) =>
|
|
43
|
+
!STANDARD_PREFIX_RE.test(value.slice(0, match.index))
|
|
44
|
+
);
|
|
45
|
+
}
|
|
34
46
|
|
|
35
47
|
/**
|
|
36
48
|
* Validate the minimal contract the generator relies on.
|
|
@@ -53,11 +65,22 @@ function validateRegistry(registry) {
|
|
|
53
65
|
seenOrders.add(pack.order);
|
|
54
66
|
|
|
55
67
|
if (!pack.cli || typeof pack.cli !== 'object') throw new Error(`${where}: missing "cli" block`);
|
|
56
|
-
for (const field of ['name', 'icon'
|
|
68
|
+
for (const field of ['name', 'icon']) {
|
|
57
69
|
if (typeof pack.cli[field] !== 'string' || pack.cli[field] === '') {
|
|
58
70
|
throw new Error(`${where}: missing cli.${field}`);
|
|
59
71
|
}
|
|
60
72
|
}
|
|
73
|
+
if (!pack.cli.desc && !pack.cli.desc_template) {
|
|
74
|
+
throw new Error(`${where}: missing cli.desc or cli.desc_template`);
|
|
75
|
+
}
|
|
76
|
+
for (const [field, value] of Object.entries({
|
|
77
|
+
'cli.desc': pack.cli.desc, 'cli.desc_template': pack.cli.desc_template,
|
|
78
|
+
summary: pack.summary, summary_template: pack.summary_template,
|
|
79
|
+
})) {
|
|
80
|
+
if (value !== undefined && (typeof value !== 'string' || hasOwnedCount(value))) {
|
|
81
|
+
throw new Error(`${where}: ${field} must use derived placeholders for owned count dimensions`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
61
84
|
if (!Array.isArray(pack.agents)) throw new Error(`${where}: "agents" must be a list`);
|
|
62
85
|
if (pack.skills !== undefined && !Array.isArray(pack.skills)) {
|
|
63
86
|
throw new Error(`${where}: "skills" must be a list`);
|
|
@@ -71,6 +94,21 @@ function validateRegistry(registry) {
|
|
|
71
94
|
if (pack.install_layout === 'packaged' && !Array.isArray((pack.doctor || {}).pack_agents)) {
|
|
72
95
|
throw new Error(`${where}: packaged layout requires "doctor.pack_agents" list`);
|
|
73
96
|
}
|
|
97
|
+
if (pack.personas !== undefined) {
|
|
98
|
+
if (!Array.isArray(pack.personas)) throw new Error(`${where}: personas must be a list`);
|
|
99
|
+
const roster = new Set([...pack.agents, ...(pack.sub_agents || [])]);
|
|
100
|
+
const ids = new Set();
|
|
101
|
+
for (const persona of pack.personas) {
|
|
102
|
+
if (!persona || ['id', 'name', 'role', 'description'].some((key) =>
|
|
103
|
+
typeof persona[key] !== 'string' || !persona[key].trim())) {
|
|
104
|
+
throw new Error(`${where}: each persona needs id, name, role and description`);
|
|
105
|
+
}
|
|
106
|
+
if (!roster.has(persona.id) || ids.has(persona.id)) {
|
|
107
|
+
throw new Error(`${where}: persona ${persona.id} is absent from its roster or duplicated`);
|
|
108
|
+
}
|
|
109
|
+
ids.add(persona.id);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
74
112
|
}
|
|
75
113
|
return registry;
|
|
76
114
|
}
|
|
@@ -99,6 +137,7 @@ function buildPackOrder(registry) {
|
|
|
99
137
|
* - `required` only when true (other packs omit the key entirely)
|
|
100
138
|
*/
|
|
101
139
|
function buildPacks(registry) {
|
|
140
|
+
const derived = buildDerived(registry);
|
|
102
141
|
const packs = {};
|
|
103
142
|
for (const [id, p] of sortedPackEntries(registry)) {
|
|
104
143
|
const entry = {
|
|
@@ -112,12 +151,130 @@ function buildPacks(registry) {
|
|
|
112
151
|
entry.packDir = p.pack_dir;
|
|
113
152
|
entry.packSrcDir = p.pack_src_dir || 'packs';
|
|
114
153
|
if (p.required === true) entry.required = true;
|
|
115
|
-
entry.desc =
|
|
154
|
+
entry.desc = derived.packs[id].desc;
|
|
116
155
|
packs[id] = entry;
|
|
117
156
|
}
|
|
118
157
|
return packs;
|
|
119
158
|
}
|
|
120
159
|
|
|
160
|
+
/** Recursively count reference files; sourceRoot is injectable for fixture trees. */
|
|
161
|
+
function countMarkdownFiles(dir) {
|
|
162
|
+
if (!fs.existsSync(dir)) return 0;
|
|
163
|
+
return fs.readdirSync(dir, { withFileTypes: true }).reduce((count, entry) => {
|
|
164
|
+
if (entry.isDirectory()) return count + countMarkdownFiles(path.join(dir, entry.name));
|
|
165
|
+
return count + Number(entry.isFile() && entry.name.endsWith('.md'));
|
|
166
|
+
}, 0);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
function renderSummary(pack, derived, field = 'summary') {
|
|
170
|
+
const template = field === 'summary' ? pack.summary_template : pack.cli.desc_template;
|
|
171
|
+
const fallback = field === 'summary' ? pack.summary : pack.cli.desc;
|
|
172
|
+
if (!template) return fallback || '';
|
|
173
|
+
const values = {
|
|
174
|
+
agent_count: derived.agentCount, installer_agent_count: derived.installerAgentCount,
|
|
175
|
+
sub_agent_count: derived.subAgentCount, workflow_count: derived.workflowCount,
|
|
176
|
+
framework_count: derived.frameworkCount, category_count: derived.categoryCount,
|
|
177
|
+
skill_count: derived.skillCount, reference_file_count: derived.referenceFiles,
|
|
178
|
+
};
|
|
179
|
+
return template.replace(/\{([a-z_]+)\}/g, (_match, key) => {
|
|
180
|
+
if (!(key in values)) throw new Error(`Unknown derived summary placeholder: ${key}`);
|
|
181
|
+
return String(values[key]);
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/** The one derivation engine; its JSON result is shipped for runtime consumers. */
|
|
186
|
+
function buildDerived(registry, { sourceRoot = path.join(REPO_ROOT, 'src', 'bmad-plus') } = {}) {
|
|
187
|
+
const packs = {};
|
|
188
|
+
const pythonPacks = {};
|
|
189
|
+
let installerAgents = 0;
|
|
190
|
+
let totalAgents = 0;
|
|
191
|
+
for (const [id, pack] of sortedPackEntries(registry)) {
|
|
192
|
+
const categories = pack.categories || [];
|
|
193
|
+
const categoryAgentCounts = categories.map((category) => (category.agents || []).length);
|
|
194
|
+
const categoryAgentCount = categoryAgentCounts.reduce((sum, count) => sum + count, 0);
|
|
195
|
+
const installerAgentCount = pack.agents.length;
|
|
196
|
+
const subAgentCount = (pack.sub_agents || []).length;
|
|
197
|
+
const facts = {
|
|
198
|
+
id, order: pack.order, name: pack.cli.name, displayName: pack.display_name || pack.cli.name,
|
|
199
|
+
required: pack.required === true, installerAgentCount, categoryAgentCount,
|
|
200
|
+
agentCount: categoryAgentCount || subAgentCount || installerAgentCount,
|
|
201
|
+
subAgentCount,
|
|
202
|
+
workflowCount: (pack.workflows || []).length + categories.reduce((sum, c) => sum + (c.workflows || []).length, 0),
|
|
203
|
+
frameworkCount: (pack.compliance_tags || []).length,
|
|
204
|
+
categoryCount: categories.length,
|
|
205
|
+
skillCount: (pack.skills || []).length,
|
|
206
|
+
referenceFiles: countMarkdownFiles(path.join(sourceRoot, pack.pack_src_dir || 'packs', pack.pack_dir, 'references')),
|
|
207
|
+
categoryAgentCounts,
|
|
208
|
+
personas: (pack.personas || []).map(({ id, name, role, description, alias }) => ({
|
|
209
|
+
id, name, role, description, ...(alias ? { alias } : {}),
|
|
210
|
+
})),
|
|
211
|
+
};
|
|
212
|
+
facts.summary = renderSummary(pack, facts);
|
|
213
|
+
facts.desc = renderSummary(pack, facts, 'description');
|
|
214
|
+
facts.description = facts.desc;
|
|
215
|
+
packs[id] = facts;
|
|
216
|
+
installerAgents += installerAgentCount;
|
|
217
|
+
totalAgents += new Set([
|
|
218
|
+
...pack.agents, ...(pack.sub_agents || []), ...categories.flatMap((c) => c.agents || []),
|
|
219
|
+
]).size;
|
|
220
|
+
if ((pack.runtime || []).includes('python')) {
|
|
221
|
+
const packagePath = pack.python_package || `src/bmad-plus/${pack.pack_src_dir || 'packs'}/${pack.pack_dir}`;
|
|
222
|
+
pythonPacks[id] = {
|
|
223
|
+
requirements: [...packagePath.split(/[\\/]/), 'requirements.txt'],
|
|
224
|
+
verifyModules: [...(pack.python_verify_modules || [])],
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
const { LANGUAGES } = require('../cli/i18n');
|
|
229
|
+
return {
|
|
230
|
+
product: {
|
|
231
|
+
code: registry.product.code, displayName: registry.product.display_name,
|
|
232
|
+
version: registry.product.version, derivedFrom: registry.product.derived_from,
|
|
233
|
+
},
|
|
234
|
+
packOrder: buildPackOrder(registry),
|
|
235
|
+
packCount: Object.keys(packs).length, installerAgents, totalAgents,
|
|
236
|
+
languages: Object.keys(LANGUAGES), packs, pythonPacks,
|
|
237
|
+
targets: {
|
|
238
|
+
spine: registry.targets.spine,
|
|
239
|
+
adapters: registry.targets.adapters.map(({ tool, file }) => ({ tool, file })),
|
|
240
|
+
models_supported: [...registry.targets.models_supported],
|
|
241
|
+
},
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/** Preserve project questions/compatibility separately from generated pack facts. */
|
|
246
|
+
function generateModuleSource(registry, templatePath = MODULE_TEMPLATE_PATH) {
|
|
247
|
+
const moduleConfig = yaml.load(fs.readFileSync(templatePath, 'utf8'));
|
|
248
|
+
const derived = buildDerived(registry);
|
|
249
|
+
moduleConfig.code = registry.product.code;
|
|
250
|
+
moduleConfig.packs = {};
|
|
251
|
+
for (const [id, pack] of sortedPackEntries(registry)) {
|
|
252
|
+
const facts = derived.packs[id];
|
|
253
|
+
const entry = {
|
|
254
|
+
name: facts.displayName, icon: pack.icon_emoji, description: facts.summary || facts.desc,
|
|
255
|
+
required: facts.required, agents: [...pack.agents], skills: [...(pack.skills || [])],
|
|
256
|
+
};
|
|
257
|
+
for (const key of ['data', 'external_package', 'orchestrator', 'categories', 'workflows',
|
|
258
|
+
'sub_agents', 'required_keys', 'optional_keys', 'cohabitation_warning']) {
|
|
259
|
+
if (key in pack) entry[key] = JSON.parse(JSON.stringify(pack[key]));
|
|
260
|
+
}
|
|
261
|
+
if (pack.install_layout === 'packaged') {
|
|
262
|
+
entry.packDir = pack.pack_dir;
|
|
263
|
+
entry.packSrcDir = pack.pack_src_dir || 'packs';
|
|
264
|
+
}
|
|
265
|
+
moduleConfig.packs[id] = entry;
|
|
266
|
+
}
|
|
267
|
+
moduleConfig.install_packs['multi-select'] = [
|
|
268
|
+
...derived.packOrder.filter((id) => !derived.packs[id].required).map((id) => ({
|
|
269
|
+
value: id, label: `${registry.packs[id].icon_emoji} ${derived.packs[id].displayName} — ${derived.packs[id].summary || derived.packs[id].desc}`,
|
|
270
|
+
})),
|
|
271
|
+
{ value: 'all', label: 'Tout installer' },
|
|
272
|
+
{ value: 'none', label: 'Aucun — Core uniquement' },
|
|
273
|
+
];
|
|
274
|
+
return '# AUTO-GENERATED from registry.yaml + tools/build/module.template.yaml — DO NOT EDIT.\n' +
|
|
275
|
+
yaml.dump(moduleConfig, { lineWidth: 110, noRefs: true });
|
|
276
|
+
}
|
|
277
|
+
|
|
121
278
|
/**
|
|
122
279
|
* Generate EXPECTED_AGENTS (consumed by `bmad-plus doctor`).
|
|
123
280
|
* - loose packs → agent DIRECTORIES checked under .agents/skills/
|
|
@@ -135,12 +292,13 @@ function buildExpectedAgents(registry) {
|
|
|
135
292
|
return expected;
|
|
136
293
|
}
|
|
137
294
|
|
|
138
|
-
/** Convenience: all
|
|
295
|
+
/** Convenience: all runtime artifacts at once. */
|
|
139
296
|
function buildAll(registry) {
|
|
140
297
|
return {
|
|
141
298
|
PACKS: buildPacks(registry),
|
|
142
299
|
PACK_ORDER: buildPackOrder(registry),
|
|
143
300
|
EXPECTED_AGENTS: buildExpectedAgents(registry),
|
|
301
|
+
DERIVED: buildDerived(registry),
|
|
144
302
|
};
|
|
145
303
|
}
|
|
146
304
|
|
|
@@ -149,7 +307,7 @@ function buildAll(registry) {
|
|
|
149
307
|
* Evaluating this source yields exports deep-equal to the hand-written module.
|
|
150
308
|
*/
|
|
151
309
|
function generatePacksModuleSource(registry) {
|
|
152
|
-
const { PACKS, PACK_ORDER, EXPECTED_AGENTS } = buildAll(registry);
|
|
310
|
+
const { PACKS, PACK_ORDER, EXPECTED_AGENTS, DERIVED } = buildAll(registry);
|
|
153
311
|
const j = (value) => JSON.stringify(value, null, 2);
|
|
154
312
|
return [
|
|
155
313
|
'/**',
|
|
@@ -166,13 +324,17 @@ function generatePacksModuleSource(registry) {
|
|
|
166
324
|
'',
|
|
167
325
|
`const EXPECTED_AGENTS = ${j(EXPECTED_AGENTS)};`,
|
|
168
326
|
'',
|
|
169
|
-
|
|
327
|
+
`const DERIVED = ${j(DERIVED)};`,
|
|
328
|
+
'',
|
|
329
|
+
'module.exports = { PACKS, PACK_ORDER, EXPECTED_AGENTS, DERIVED };',
|
|
170
330
|
'',
|
|
171
331
|
].join('\n');
|
|
172
332
|
}
|
|
173
333
|
|
|
174
334
|
/** Human-readable drill-down for a mismatching keyed object. */
|
|
175
335
|
function describeDiff(label, generated, current, mismatches) {
|
|
336
|
+
generated = generated || {};
|
|
337
|
+
current = current || {};
|
|
176
338
|
if (Array.isArray(generated) || Array.isArray(current)) {
|
|
177
339
|
mismatches.push(
|
|
178
340
|
`${label}: generated ${JSON.stringify(generated)} != current ${JSON.stringify(current)}`
|
|
@@ -202,8 +364,10 @@ function check({
|
|
|
202
364
|
registryPath = DEFAULT_REGISTRY_PATH,
|
|
203
365
|
packsModulePath = DEFAULT_PACKS_MODULE_PATH,
|
|
204
366
|
packageJsonPath = PACKAGE_JSON_PATH,
|
|
367
|
+
modulePath = DEFAULT_MODULE_PATH,
|
|
205
368
|
} = {}) {
|
|
206
369
|
const registry = loadRegistry(registryPath);
|
|
370
|
+
delete require.cache[require.resolve(packsModulePath)];
|
|
207
371
|
const current = require(packsModulePath);
|
|
208
372
|
const generated = buildAll(registry);
|
|
209
373
|
const mismatches = [];
|
|
@@ -216,11 +380,14 @@ function check({
|
|
|
216
380
|
);
|
|
217
381
|
}
|
|
218
382
|
|
|
219
|
-
for (const key of ['PACKS', 'PACK_ORDER', 'EXPECTED_AGENTS']) {
|
|
383
|
+
for (const key of ['PACKS', 'PACK_ORDER', 'EXPECTED_AGENTS', 'DERIVED']) {
|
|
220
384
|
if (!isDeepStrictEqual(generated[key], current[key])) {
|
|
221
385
|
describeDiff(key, generated[key], current[key], mismatches);
|
|
222
386
|
}
|
|
223
387
|
}
|
|
388
|
+
if (fs.readFileSync(modulePath, 'utf8').replace(/\r\n/g, '\n') !== generateModuleSource(registry)) {
|
|
389
|
+
mismatches.push('module.yaml: generated pack metadata differs from registry.yaml');
|
|
390
|
+
}
|
|
224
391
|
|
|
225
392
|
return { ok: mismatches.length === 0, mismatches };
|
|
226
393
|
}
|
|
@@ -233,7 +400,7 @@ function main(argv) {
|
|
|
233
400
|
if (args.includes('--check')) {
|
|
234
401
|
const result = check();
|
|
235
402
|
if (result.ok) {
|
|
236
|
-
console.log('OK — registry.yaml reproduces
|
|
403
|
+
console.log('OK — registry.yaml reproduces packs.js and module.yaml (no drift).');
|
|
237
404
|
return 0;
|
|
238
405
|
}
|
|
239
406
|
console.error('DRIFT DETECTED between registry.yaml and tools/cli/lib/packs.js:');
|
|
@@ -257,6 +424,11 @@ function main(argv) {
|
|
|
257
424
|
return 1;
|
|
258
425
|
}
|
|
259
426
|
fs.writeFileSync(path.resolve(outPath), source, 'utf8');
|
|
427
|
+
const moduleOutIdx = args.indexOf('--module-out');
|
|
428
|
+
if (moduleOutIdx !== -1) {
|
|
429
|
+
if (!args[moduleOutIdx + 1]) throw new Error('--module-out requires a file path');
|
|
430
|
+
fs.writeFileSync(path.resolve(args[moduleOutIdx + 1]), generateModuleSource(registry), 'utf8');
|
|
431
|
+
}
|
|
260
432
|
console.log(`Generated ${path.resolve(outPath)} from registry.yaml`);
|
|
261
433
|
return 0;
|
|
262
434
|
}
|
|
@@ -272,12 +444,17 @@ if (require.main === module) {
|
|
|
272
444
|
module.exports = {
|
|
273
445
|
DEFAULT_REGISTRY_PATH,
|
|
274
446
|
DEFAULT_PACKS_MODULE_PATH,
|
|
447
|
+
DEFAULT_MODULE_PATH,
|
|
448
|
+
MODULE_TEMPLATE_PATH,
|
|
275
449
|
loadRegistry,
|
|
276
450
|
validateRegistry,
|
|
277
451
|
buildPacks,
|
|
278
452
|
buildPackOrder,
|
|
279
453
|
buildExpectedAgents,
|
|
280
454
|
buildAll,
|
|
455
|
+
buildDerived,
|
|
456
|
+
renderSummary,
|
|
457
|
+
generateModuleSource,
|
|
281
458
|
generatePacksModuleSource,
|
|
282
459
|
check,
|
|
283
460
|
main,
|
|
@@ -28,16 +28,21 @@ To activate an agent, say its name or persona:
|
|
|
28
28
|
- **Forge** (Architect-Dev) — Architecture + Development + Documentation
|
|
29
29
|
- **Sentinel** (Quality) — QA + UX review
|
|
30
30
|
- **Nexus** (Orchestrator) — Sprint management + Autopilot + Parallel execution
|
|
31
|
-
- **Shadow** (OSINT) — Investigation + Scraping + Psychoprofiling (
|
|
32
|
-
- **Maker** (Agent Creator) — Design, build, validate, and package new BMAD+ agents
|
|
33
|
-
- **Shield** (GRC) — Compliance agents for GDPR, ISO 27001, SOC 2, HIPAA, EU AI Act, DORA, NIS2 and more (
|
|
31
|
+
- **Shadow** (OSINT) — Investigation + Scraping + Psychoprofiling (OSINT)
|
|
32
|
+
- **Maker** (Agent Creator) — Design, build, validate, and package new BMAD+ agents (Maker)
|
|
33
|
+
- **Shield** (GRC) — Compliance agents for GDPR, ISO 27001, SOC 2, HIPAA, EU AI Act, DORA, NIS2 and more (Shield)
|
|
34
|
+
- **SEO Scout** (Technical Scanner) — Crawling + technical inspection + performance (SEO)
|
|
35
|
+
- **SEO Chief** (Strategist & Reporter) — Scoring + strategy + reporting (SEO)
|
|
36
|
+
- **SEO Judge** (Content & AI Analyst) — Content quality + structured data + GEO analysis (SEO)
|
|
37
|
+
- **Zecher** (זכר, Memory Guardian) — Memory Archivist — Persistent cross-session memory, consolidation, project scanning, context recall, session handoffs (Memory)
|
|
34
38
|
- **Miriam** (מרים) — Business Analyst — Strategic analysis, research, product briefs (Dev Studio)
|
|
35
39
|
- **Huldah** (חולדה) — Technical Writer — Documentation, diagrams, editorial review (Dev Studio)
|
|
36
40
|
- **Yosef** (יוסף) — Product Manager — PRD, requirements, feature prioritization (Dev Studio)
|
|
37
41
|
- **Rachel** (רחל) — UX Designer — User experience, wireframes, empathy mapping (Dev Studio)
|
|
38
42
|
- **Bezalel** (בצלאל) — System Architect — Architecture, ADRs, epics & stories (Dev Studio)
|
|
39
43
|
- **Oholiab** (אהליאב) — Senior Engineer — TDD, sprint, code review, implementation (Dev Studio)
|
|
40
|
-
- **
|
|
44
|
+
- **Backup Manager** (Backup & Restore) — Timestamped backups, restoration, and rotation (Backup)
|
|
45
|
+
- **Animated Website Creator** (Website Builder) — Video-driven scrolling websites (Animated)
|
|
41
46
|
|
|
42
47
|
## Skills
|
|
43
48
|
|
|
@@ -98,19 +103,27 @@ Agents MUST follow these behavioral principles:
|
|
|
98
103
|
- `.agents/memory/patterns.md` — Write when a reusable pattern is validated
|
|
99
104
|
- `.agents/memory/context.md` — Update at session end with project state
|
|
100
105
|
|
|
106
|
+
## Framework updates
|
|
107
|
+
|
|
108
|
+
Once per session, check the installed framework before starting project work. If this is the BMAD+ source checkout, use `node tools/cli/bmad-plus-cli.js update-check --json`; otherwise use `npx --no-install bmad-plus update-check --json` from the project root.
|
|
109
|
+
If the command is unavailable or the result is off, unknown, offline or stale, continue the user task. Do not install a CLI just to perform this check or claim that an offline version is current.
|
|
110
|
+
When `updateAvailable` is true and `canAutoApply` is true, run the same CLI with `update --latest --auto`. This follows the project update policy; it does not grant permission to expand that policy.
|
|
111
|
+
When an update is available but automatic application is not eligible, explain the version and reason. An explicit request to update can be fulfilled with `update --latest --yes`; do not change the policy, overwrite customized files, or resolve conflicts without the user request covering that action.
|
|
112
|
+
After a successful update, reread the project spine and relevant installed skills, or start a fresh session if the client cannot reload them. Respect preserved local instructions. Check only once even when several adapters include this section.
|
|
113
|
+
|
|
101
114
|
## Registry facts (computed from registry.yaml — never hand-typed)
|
|
102
115
|
|
|
103
|
-
- Product: BMAD+ v0.
|
|
116
|
+
- Product: BMAD+ v0.13.0 (derived from BMAD-METHOD v6.6.0)
|
|
104
117
|
- Models supported: claude, gpt, gemini, local (model-agnostic by contract)
|
|
105
118
|
- Packs (9): Core, OSINT, Maker, Shield, SEO, Memory, Dev Studio, Backup, Animated
|
|
106
119
|
- Installer agents (14 across all packs):
|
|
107
120
|
- Core (required): 4 installer agents — Core agents & skills
|
|
108
121
|
- OSINT: 1 installer agent — OSINT & investigation — 2 compliance frameworks
|
|
109
122
|
- Maker: 1 installer agent — Agent creation toolkit
|
|
110
|
-
- Shield: 1 installer agent — GRC compliance (
|
|
123
|
+
- Shield: 1 installer agent — GRC compliance (26 frameworks) — 27 specialized agents, 11 workflows, 26 compliance frameworks
|
|
111
124
|
- SEO: 3 installer agents — SEO audit & optimization — 1 compliance frameworks
|
|
112
125
|
- Memory: 1 installer agent — Persistent cross-session memory
|
|
113
|
-
- Dev Studio: 1 installer agent — SDLC automation (6 agents,
|
|
126
|
+
- Dev Studio: 1 installer agent — SDLC automation (6 agents, specialized workflows) — 6 sub-agents, 38 workflows
|
|
114
127
|
- Backup: 1 installer agent — Backup & restore
|
|
115
128
|
- Animated: 1 installer agent — Animated website agents
|
|
116
129
|
|
|
@@ -33,16 +33,21 @@ To activate an agent, say its name or persona:
|
|
|
33
33
|
- **Forge** (Architect-Dev) — Architecture + Development + Documentation
|
|
34
34
|
- **Sentinel** (Quality) — QA + UX review
|
|
35
35
|
- **Nexus** (Orchestrator) — Sprint management + Autopilot + Parallel execution
|
|
36
|
-
- **Shadow** (OSINT) — Investigation + Scraping + Psychoprofiling (
|
|
37
|
-
- **Maker** (Agent Creator) — Design, build, validate, and package new BMAD+ agents
|
|
38
|
-
- **Shield** (GRC) — Compliance agents for GDPR, ISO 27001, SOC 2, HIPAA, EU AI Act, DORA, NIS2 and more (
|
|
36
|
+
- **Shadow** (OSINT) — Investigation + Scraping + Psychoprofiling (OSINT)
|
|
37
|
+
- **Maker** (Agent Creator) — Design, build, validate, and package new BMAD+ agents (Maker)
|
|
38
|
+
- **Shield** (GRC) — Compliance agents for GDPR, ISO 27001, SOC 2, HIPAA, EU AI Act, DORA, NIS2 and more (Shield)
|
|
39
|
+
- **SEO Scout** (Technical Scanner) — Crawling + technical inspection + performance (SEO)
|
|
40
|
+
- **SEO Chief** (Strategist & Reporter) — Scoring + strategy + reporting (SEO)
|
|
41
|
+
- **SEO Judge** (Content & AI Analyst) — Content quality + structured data + GEO analysis (SEO)
|
|
42
|
+
- **Zecher** (זכר, Memory Guardian) — Memory Archivist — Persistent cross-session memory, consolidation, project scanning, context recall, session handoffs (Memory)
|
|
39
43
|
- **Miriam** (מרים) — Business Analyst — Strategic analysis, research, product briefs (Dev Studio)
|
|
40
44
|
- **Huldah** (חולדה) — Technical Writer — Documentation, diagrams, editorial review (Dev Studio)
|
|
41
45
|
- **Yosef** (יוסף) — Product Manager — PRD, requirements, feature prioritization (Dev Studio)
|
|
42
46
|
- **Rachel** (רחל) — UX Designer — User experience, wireframes, empathy mapping (Dev Studio)
|
|
43
47
|
- **Bezalel** (בצלאל) — System Architect — Architecture, ADRs, epics & stories (Dev Studio)
|
|
44
48
|
- **Oholiab** (אהליאב) — Senior Engineer — TDD, sprint, code review, implementation (Dev Studio)
|
|
45
|
-
- **
|
|
49
|
+
- **Backup Manager** (Backup & Restore) — Timestamped backups, restoration, and rotation (Backup)
|
|
50
|
+
- **Animated Website Creator** (Website Builder) — Video-driven scrolling websites (Animated)
|
|
46
51
|
|
|
47
52
|
## Skills
|
|
48
53
|
|
|
@@ -103,19 +108,27 @@ Agents MUST follow these behavioral principles:
|
|
|
103
108
|
- `.agents/memory/patterns.md` — Write when a reusable pattern is validated
|
|
104
109
|
- `.agents/memory/context.md` — Update at session end with project state
|
|
105
110
|
|
|
111
|
+
## Framework updates
|
|
112
|
+
|
|
113
|
+
Once per session, check the installed framework before starting project work. If this is the BMAD+ source checkout, use `node tools/cli/bmad-plus-cli.js update-check --json`; otherwise use `npx --no-install bmad-plus update-check --json` from the project root.
|
|
114
|
+
If the command is unavailable or the result is off, unknown, offline or stale, continue the user task. Do not install a CLI just to perform this check or claim that an offline version is current.
|
|
115
|
+
When `updateAvailable` is true and `canAutoApply` is true, run the same CLI with `update --latest --auto`. This follows the project update policy; it does not grant permission to expand that policy.
|
|
116
|
+
When an update is available but automatic application is not eligible, explain the version and reason. An explicit request to update can be fulfilled with `update --latest --yes`; do not change the policy, overwrite customized files, or resolve conflicts without the user request covering that action.
|
|
117
|
+
After a successful update, reread the project spine and relevant installed skills, or start a fresh session if the client cannot reload them. Respect preserved local instructions. Check only once even when several adapters include this section.
|
|
118
|
+
|
|
106
119
|
## Registry facts (computed from registry.yaml — never hand-typed)
|
|
107
120
|
|
|
108
|
-
- Product: BMAD+ v0.
|
|
121
|
+
- Product: BMAD+ v0.13.0 (derived from BMAD-METHOD v6.6.0)
|
|
109
122
|
- Models supported: claude, gpt, gemini, local (model-agnostic by contract)
|
|
110
123
|
- Packs (9): Core, OSINT, Maker, Shield, SEO, Memory, Dev Studio, Backup, Animated
|
|
111
124
|
- Installer agents (14 across all packs):
|
|
112
125
|
- Core (required): 4 installer agents — Core agents & skills
|
|
113
126
|
- OSINT: 1 installer agent — OSINT & investigation — 2 compliance frameworks
|
|
114
127
|
- Maker: 1 installer agent — Agent creation toolkit
|
|
115
|
-
- Shield: 1 installer agent — GRC compliance (
|
|
128
|
+
- Shield: 1 installer agent — GRC compliance (26 frameworks) — 27 specialized agents, 11 workflows, 26 compliance frameworks
|
|
116
129
|
- SEO: 3 installer agents — SEO audit & optimization — 1 compliance frameworks
|
|
117
130
|
- Memory: 1 installer agent — Persistent cross-session memory
|
|
118
|
-
- Dev Studio: 1 installer agent — SDLC automation (6 agents,
|
|
131
|
+
- Dev Studio: 1 installer agent — SDLC automation (6 agents, specialized workflows) — 6 sub-agents, 38 workflows
|
|
119
132
|
- Backup: 1 installer agent — Backup & restore
|
|
120
133
|
- Animated: 1 installer agent — Animated website agents
|
|
121
134
|
|
|
@@ -28,16 +28,21 @@ To activate an agent, say its name or persona:
|
|
|
28
28
|
- **Forge** (Architect-Dev) — Architecture + Development + Documentation
|
|
29
29
|
- **Sentinel** (Quality) — QA + UX review
|
|
30
30
|
- **Nexus** (Orchestrator) — Sprint management + Autopilot + Parallel execution
|
|
31
|
-
- **Shadow** (OSINT) — Investigation + Scraping + Psychoprofiling (
|
|
32
|
-
- **Maker** (Agent Creator) — Design, build, validate, and package new BMAD+ agents
|
|
33
|
-
- **Shield** (GRC) — Compliance agents for GDPR, ISO 27001, SOC 2, HIPAA, EU AI Act, DORA, NIS2 and more (
|
|
31
|
+
- **Shadow** (OSINT) — Investigation + Scraping + Psychoprofiling (OSINT)
|
|
32
|
+
- **Maker** (Agent Creator) — Design, build, validate, and package new BMAD+ agents (Maker)
|
|
33
|
+
- **Shield** (GRC) — Compliance agents for GDPR, ISO 27001, SOC 2, HIPAA, EU AI Act, DORA, NIS2 and more (Shield)
|
|
34
|
+
- **SEO Scout** (Technical Scanner) — Crawling + technical inspection + performance (SEO)
|
|
35
|
+
- **SEO Chief** (Strategist & Reporter) — Scoring + strategy + reporting (SEO)
|
|
36
|
+
- **SEO Judge** (Content & AI Analyst) — Content quality + structured data + GEO analysis (SEO)
|
|
37
|
+
- **Zecher** (זכר, Memory Guardian) — Memory Archivist — Persistent cross-session memory, consolidation, project scanning, context recall, session handoffs (Memory)
|
|
34
38
|
- **Miriam** (מרים) — Business Analyst — Strategic analysis, research, product briefs (Dev Studio)
|
|
35
39
|
- **Huldah** (חולדה) — Technical Writer — Documentation, diagrams, editorial review (Dev Studio)
|
|
36
40
|
- **Yosef** (יוסף) — Product Manager — PRD, requirements, feature prioritization (Dev Studio)
|
|
37
41
|
- **Rachel** (רחל) — UX Designer — User experience, wireframes, empathy mapping (Dev Studio)
|
|
38
42
|
- **Bezalel** (בצלאל) — System Architect — Architecture, ADRs, epics & stories (Dev Studio)
|
|
39
43
|
- **Oholiab** (אהליאב) — Senior Engineer — TDD, sprint, code review, implementation (Dev Studio)
|
|
40
|
-
- **
|
|
44
|
+
- **Backup Manager** (Backup & Restore) — Timestamped backups, restoration, and rotation (Backup)
|
|
45
|
+
- **Animated Website Creator** (Website Builder) — Video-driven scrolling websites (Animated)
|
|
41
46
|
|
|
42
47
|
## Skills
|
|
43
48
|
|
|
@@ -98,19 +103,27 @@ Agents MUST follow these behavioral principles:
|
|
|
98
103
|
- `.agents/memory/patterns.md` — Write when a reusable pattern is validated
|
|
99
104
|
- `.agents/memory/context.md` — Update at session end with project state
|
|
100
105
|
|
|
106
|
+
## Framework updates
|
|
107
|
+
|
|
108
|
+
Once per session, check the installed framework before starting project work. If this is the BMAD+ source checkout, use `node tools/cli/bmad-plus-cli.js update-check --json`; otherwise use `npx --no-install bmad-plus update-check --json` from the project root.
|
|
109
|
+
If the command is unavailable or the result is off, unknown, offline or stale, continue the user task. Do not install a CLI just to perform this check or claim that an offline version is current.
|
|
110
|
+
When `updateAvailable` is true and `canAutoApply` is true, run the same CLI with `update --latest --auto`. This follows the project update policy; it does not grant permission to expand that policy.
|
|
111
|
+
When an update is available but automatic application is not eligible, explain the version and reason. An explicit request to update can be fulfilled with `update --latest --yes`; do not change the policy, overwrite customized files, or resolve conflicts without the user request covering that action.
|
|
112
|
+
After a successful update, reread the project spine and relevant installed skills, or start a fresh session if the client cannot reload them. Respect preserved local instructions. Check only once even when several adapters include this section.
|
|
113
|
+
|
|
101
114
|
## Registry facts (computed from registry.yaml — never hand-typed)
|
|
102
115
|
|
|
103
|
-
- Product: BMAD+ v0.
|
|
116
|
+
- Product: BMAD+ v0.13.0 (derived from BMAD-METHOD v6.6.0)
|
|
104
117
|
- Models supported: claude, gpt, gemini, local (model-agnostic by contract)
|
|
105
118
|
- Packs (9): Core, OSINT, Maker, Shield, SEO, Memory, Dev Studio, Backup, Animated
|
|
106
119
|
- Installer agents (14 across all packs):
|
|
107
120
|
- Core (required): 4 installer agents — Core agents & skills
|
|
108
121
|
- OSINT: 1 installer agent — OSINT & investigation — 2 compliance frameworks
|
|
109
122
|
- Maker: 1 installer agent — Agent creation toolkit
|
|
110
|
-
- Shield: 1 installer agent — GRC compliance (
|
|
123
|
+
- Shield: 1 installer agent — GRC compliance (26 frameworks) — 27 specialized agents, 11 workflows, 26 compliance frameworks
|
|
111
124
|
- SEO: 3 installer agents — SEO audit & optimization — 1 compliance frameworks
|
|
112
125
|
- Memory: 1 installer agent — Persistent cross-session memory
|
|
113
|
-
- Dev Studio: 1 installer agent — SDLC automation (6 agents,
|
|
126
|
+
- Dev Studio: 1 installer agent — SDLC automation (6 agents, specialized workflows) — 6 sub-agents, 38 workflows
|
|
114
127
|
- Backup: 1 installer agent — Backup & restore
|
|
115
128
|
- Animated: 1 installer agent — Animated website agents
|
|
116
129
|
|
|
@@ -26,16 +26,21 @@ To activate an agent, say its name or persona:
|
|
|
26
26
|
- **Forge** (Architect-Dev) — Architecture + Development + Documentation
|
|
27
27
|
- **Sentinel** (Quality) — QA + UX review
|
|
28
28
|
- **Nexus** (Orchestrator) — Sprint management + Autopilot + Parallel execution
|
|
29
|
-
- **Shadow** (OSINT) — Investigation + Scraping + Psychoprofiling (
|
|
30
|
-
- **Maker** (Agent Creator) — Design, build, validate, and package new BMAD+ agents
|
|
31
|
-
- **Shield** (GRC) — Compliance agents for GDPR, ISO 27001, SOC 2, HIPAA, EU AI Act, DORA, NIS2 and more (
|
|
29
|
+
- **Shadow** (OSINT) — Investigation + Scraping + Psychoprofiling (OSINT)
|
|
30
|
+
- **Maker** (Agent Creator) — Design, build, validate, and package new BMAD+ agents (Maker)
|
|
31
|
+
- **Shield** (GRC) — Compliance agents for GDPR, ISO 27001, SOC 2, HIPAA, EU AI Act, DORA, NIS2 and more (Shield)
|
|
32
|
+
- **SEO Scout** (Technical Scanner) — Crawling + technical inspection + performance (SEO)
|
|
33
|
+
- **SEO Chief** (Strategist & Reporter) — Scoring + strategy + reporting (SEO)
|
|
34
|
+
- **SEO Judge** (Content & AI Analyst) — Content quality + structured data + GEO analysis (SEO)
|
|
35
|
+
- **Zecher** (זכר, Memory Guardian) — Memory Archivist — Persistent cross-session memory, consolidation, project scanning, context recall, session handoffs (Memory)
|
|
32
36
|
- **Miriam** (מרים) — Business Analyst — Strategic analysis, research, product briefs (Dev Studio)
|
|
33
37
|
- **Huldah** (חולדה) — Technical Writer — Documentation, diagrams, editorial review (Dev Studio)
|
|
34
38
|
- **Yosef** (יוסף) — Product Manager — PRD, requirements, feature prioritization (Dev Studio)
|
|
35
39
|
- **Rachel** (רחל) — UX Designer — User experience, wireframes, empathy mapping (Dev Studio)
|
|
36
40
|
- **Bezalel** (בצלאל) — System Architect — Architecture, ADRs, epics & stories (Dev Studio)
|
|
37
41
|
- **Oholiab** (אהליאב) — Senior Engineer — TDD, sprint, code review, implementation (Dev Studio)
|
|
38
|
-
- **
|
|
42
|
+
- **Backup Manager** (Backup & Restore) — Timestamped backups, restoration, and rotation (Backup)
|
|
43
|
+
- **Animated Website Creator** (Website Builder) — Video-driven scrolling websites (Animated)
|
|
39
44
|
|
|
40
45
|
## Skills
|
|
41
46
|
|
|
@@ -96,19 +101,27 @@ Agents MUST follow these behavioral principles:
|
|
|
96
101
|
- `.agents/memory/patterns.md` — Write when a reusable pattern is validated
|
|
97
102
|
- `.agents/memory/context.md` — Update at session end with project state
|
|
98
103
|
|
|
104
|
+
## Framework updates
|
|
105
|
+
|
|
106
|
+
Once per session, check the installed framework before starting project work. If this is the BMAD+ source checkout, use `node tools/cli/bmad-plus-cli.js update-check --json`; otherwise use `npx --no-install bmad-plus update-check --json` from the project root.
|
|
107
|
+
If the command is unavailable or the result is off, unknown, offline or stale, continue the user task. Do not install a CLI just to perform this check or claim that an offline version is current.
|
|
108
|
+
When `updateAvailable` is true and `canAutoApply` is true, run the same CLI with `update --latest --auto`. This follows the project update policy; it does not grant permission to expand that policy.
|
|
109
|
+
When an update is available but automatic application is not eligible, explain the version and reason. An explicit request to update can be fulfilled with `update --latest --yes`; do not change the policy, overwrite customized files, or resolve conflicts without the user request covering that action.
|
|
110
|
+
After a successful update, reread the project spine and relevant installed skills, or start a fresh session if the client cannot reload them. Respect preserved local instructions. Check only once even when several adapters include this section.
|
|
111
|
+
|
|
99
112
|
## Registry facts (computed from registry.yaml — never hand-typed)
|
|
100
113
|
|
|
101
|
-
- Product: BMAD+ v0.
|
|
114
|
+
- Product: BMAD+ v0.13.0 (derived from BMAD-METHOD v6.6.0)
|
|
102
115
|
- Models supported: claude, gpt, gemini, local (model-agnostic by contract)
|
|
103
116
|
- Packs (9): Core, OSINT, Maker, Shield, SEO, Memory, Dev Studio, Backup, Animated
|
|
104
117
|
- Installer agents (14 across all packs):
|
|
105
118
|
- Core (required): 4 installer agents — Core agents & skills
|
|
106
119
|
- OSINT: 1 installer agent — OSINT & investigation — 2 compliance frameworks
|
|
107
120
|
- Maker: 1 installer agent — Agent creation toolkit
|
|
108
|
-
- Shield: 1 installer agent — GRC compliance (
|
|
121
|
+
- Shield: 1 installer agent — GRC compliance (26 frameworks) — 27 specialized agents, 11 workflows, 26 compliance frameworks
|
|
109
122
|
- SEO: 3 installer agents — SEO audit & optimization — 1 compliance frameworks
|
|
110
123
|
- Memory: 1 installer agent — Persistent cross-session memory
|
|
111
|
-
- Dev Studio: 1 installer agent — SDLC automation (6 agents,
|
|
124
|
+
- Dev Studio: 1 installer agent — SDLC automation (6 agents, specialized workflows) — 6 sub-agents, 38 workflows
|
|
112
125
|
- Backup: 1 installer agent — Backup & restore
|
|
113
126
|
- Animated: 1 installer agent — Animated website agents
|
|
114
127
|
|
|
@@ -29,16 +29,21 @@ To activate an agent, say its name or persona:
|
|
|
29
29
|
- **Forge** (Architect-Dev) — Architecture + Development + Documentation
|
|
30
30
|
- **Sentinel** (Quality) — QA + UX review
|
|
31
31
|
- **Nexus** (Orchestrator) — Sprint management + Autopilot + Parallel execution
|
|
32
|
-
- **Shadow** (OSINT) — Investigation + Scraping + Psychoprofiling (
|
|
33
|
-
- **Maker** (Agent Creator) — Design, build, validate, and package new BMAD+ agents
|
|
34
|
-
- **Shield** (GRC) — Compliance agents for GDPR, ISO 27001, SOC 2, HIPAA, EU AI Act, DORA, NIS2 and more (
|
|
32
|
+
- **Shadow** (OSINT) — Investigation + Scraping + Psychoprofiling (OSINT)
|
|
33
|
+
- **Maker** (Agent Creator) — Design, build, validate, and package new BMAD+ agents (Maker)
|
|
34
|
+
- **Shield** (GRC) — Compliance agents for GDPR, ISO 27001, SOC 2, HIPAA, EU AI Act, DORA, NIS2 and more (Shield)
|
|
35
|
+
- **SEO Scout** (Technical Scanner) — Crawling + technical inspection + performance (SEO)
|
|
36
|
+
- **SEO Chief** (Strategist & Reporter) — Scoring + strategy + reporting (SEO)
|
|
37
|
+
- **SEO Judge** (Content & AI Analyst) — Content quality + structured data + GEO analysis (SEO)
|
|
38
|
+
- **Zecher** (זכר, Memory Guardian) — Memory Archivist — Persistent cross-session memory, consolidation, project scanning, context recall, session handoffs (Memory)
|
|
35
39
|
- **Miriam** (מרים) — Business Analyst — Strategic analysis, research, product briefs (Dev Studio)
|
|
36
40
|
- **Huldah** (חולדה) — Technical Writer — Documentation, diagrams, editorial review (Dev Studio)
|
|
37
41
|
- **Yosef** (יוסף) — Product Manager — PRD, requirements, feature prioritization (Dev Studio)
|
|
38
42
|
- **Rachel** (רחל) — UX Designer — User experience, wireframes, empathy mapping (Dev Studio)
|
|
39
43
|
- **Bezalel** (בצלאל) — System Architect — Architecture, ADRs, epics & stories (Dev Studio)
|
|
40
44
|
- **Oholiab** (אהליאב) — Senior Engineer — TDD, sprint, code review, implementation (Dev Studio)
|
|
41
|
-
- **
|
|
45
|
+
- **Backup Manager** (Backup & Restore) — Timestamped backups, restoration, and rotation (Backup)
|
|
46
|
+
- **Animated Website Creator** (Website Builder) — Video-driven scrolling websites (Animated)
|
|
42
47
|
|
|
43
48
|
## Skills
|
|
44
49
|
|
|
@@ -99,19 +104,27 @@ Agents MUST follow these behavioral principles:
|
|
|
99
104
|
- `.agents/memory/patterns.md` — Write when a reusable pattern is validated
|
|
100
105
|
- `.agents/memory/context.md` — Update at session end with project state
|
|
101
106
|
|
|
107
|
+
## Framework updates
|
|
108
|
+
|
|
109
|
+
Once per session, check the installed framework before starting project work. If this is the BMAD+ source checkout, use `node tools/cli/bmad-plus-cli.js update-check --json`; otherwise use `npx --no-install bmad-plus update-check --json` from the project root.
|
|
110
|
+
If the command is unavailable or the result is off, unknown, offline or stale, continue the user task. Do not install a CLI just to perform this check or claim that an offline version is current.
|
|
111
|
+
When `updateAvailable` is true and `canAutoApply` is true, run the same CLI with `update --latest --auto`. This follows the project update policy; it does not grant permission to expand that policy.
|
|
112
|
+
When an update is available but automatic application is not eligible, explain the version and reason. An explicit request to update can be fulfilled with `update --latest --yes`; do not change the policy, overwrite customized files, or resolve conflicts without the user request covering that action.
|
|
113
|
+
After a successful update, reread the project spine and relevant installed skills, or start a fresh session if the client cannot reload them. Respect preserved local instructions. Check only once even when several adapters include this section.
|
|
114
|
+
|
|
102
115
|
## Registry facts (computed from registry.yaml — never hand-typed)
|
|
103
116
|
|
|
104
|
-
- Product: BMAD+ v0.
|
|
117
|
+
- Product: BMAD+ v0.13.0 (derived from BMAD-METHOD v6.6.0)
|
|
105
118
|
- Models supported: claude, gpt, gemini, local (model-agnostic by contract)
|
|
106
119
|
- Packs (9): Core, OSINT, Maker, Shield, SEO, Memory, Dev Studio, Backup, Animated
|
|
107
120
|
- Installer agents (14 across all packs):
|
|
108
121
|
- Core (required): 4 installer agents — Core agents & skills
|
|
109
122
|
- OSINT: 1 installer agent — OSINT & investigation — 2 compliance frameworks
|
|
110
123
|
- Maker: 1 installer agent — Agent creation toolkit
|
|
111
|
-
- Shield: 1 installer agent — GRC compliance (
|
|
124
|
+
- Shield: 1 installer agent — GRC compliance (26 frameworks) — 27 specialized agents, 11 workflows, 26 compliance frameworks
|
|
112
125
|
- SEO: 3 installer agents — SEO audit & optimization — 1 compliance frameworks
|
|
113
126
|
- Memory: 1 installer agent — Persistent cross-session memory
|
|
114
|
-
- Dev Studio: 1 installer agent — SDLC automation (6 agents,
|
|
127
|
+
- Dev Studio: 1 installer agent — SDLC automation (6 agents, specialized workflows) — 6 sub-agents, 38 workflows
|
|
115
128
|
- Backup: 1 installer agent — Backup & restore
|
|
116
129
|
- Animated: 1 installer agent — Animated website agents
|
|
117
130
|
|