bmad-plus 0.9.1 → 0.12.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 +60 -0
- package/README.md +1 -1
- package/osint-agent-package/skills/bmad-osint-investigate/osint/SKILL.md +30 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/assets/dossier-template.md +10 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/assets/lawful-basis-record.md +48 -0
- package/osint-agent-package/skills/bmad-osint-investigate/osint/references/gdpr-osint.md +48 -0
- package/package.json +3 -1
- package/tools/build/README.md +78 -0
- package/tools/build/adapters.config.js +117 -0
- package/tools/build/generate-adapters.js +485 -0
- package/tools/build/generate.js +284 -0
- package/tools/build/generated-adapters/.codex/AGENTS.md +121 -0
- package/tools/build/generated-adapters/.cursor/rules/bmad-plus.mdc +126 -0
- package/tools/build/generated-adapters/.opencode/AGENTS.md +121 -0
- package/tools/build/generated-adapters/AGENTS.md +119 -0
- package/tools/build/generated-adapters/CLAUDE.md +122 -0
- package/tools/build/generated-adapters/CONVENTIONS.md +121 -0
- package/tools/build/generated-adapters/GEMINI.md +126 -0
- package/tools/build/generated-adapters/README.md +79 -0
- package/tools/cli/bmad-plus-cli.js +11 -0
- package/tools/cli/commands/autoconfig.js +18 -1
- package/tools/cli/commands/doctor.js +12 -0
- package/tools/cli/commands/install.js +66 -0
- package/tools/cli/commands/memory-journal-cmd.js +311 -0
- package/tools/cli/commands/scan.js +18 -1
- package/tools/cli/commands/uninstall.js +3 -1
- package/tools/cli/commands/update.js +19 -2
- package/tools/cli/lib/README-memory-journal.md +125 -0
- package/tools/cli/lib/memory-journal.js +0 -0
- package/tools/cli/lib/packs.js +209 -114
- package/tools/cli/lib/python-provision.js +508 -0
- package/tools/cli/lib/validate.js +8 -3
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* BMAD+ Build — registry.yaml → pack artifacts generator (Pillar 1)
|
|
4
|
+
*
|
|
5
|
+
* Reads the root registry.yaml (the single source of truth) and generates the
|
|
6
|
+
* pack data currently hand-maintained in tools/cli/lib/packs.js:
|
|
7
|
+
* - PACKS (CLI pack definitions)
|
|
8
|
+
* - PACK_ORDER (install/display order)
|
|
9
|
+
* - EXPECTED_AGENTS (what `bmad-plus doctor` verifies after install)
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* node tools/build/generate.js # print generated packs module source
|
|
13
|
+
* node tools/build/generate.js --json # print { PACKS, PACK_ORDER, EXPECTED_AGENTS } as JSON
|
|
14
|
+
* node tools/build/generate.js --out <file> # write generated module source to <file>
|
|
15
|
+
* node tools/build/generate.js --check # verify registry.yaml reproduces the live
|
|
16
|
+
* # tools/cli/lib/packs.js exactly (exit 1 on drift)
|
|
17
|
+
*
|
|
18
|
+
* Author: Laurent Rochetta
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
'use strict';
|
|
22
|
+
|
|
23
|
+
const fs = require('node:fs');
|
|
24
|
+
const path = require('node:path');
|
|
25
|
+
const { isDeepStrictEqual } = require('node:util');
|
|
26
|
+
const yaml = require('js-yaml');
|
|
27
|
+
|
|
28
|
+
const REPO_ROOT = path.join(__dirname, '..', '..');
|
|
29
|
+
const DEFAULT_REGISTRY_PATH = path.join(REPO_ROOT, 'registry.yaml');
|
|
30
|
+
const DEFAULT_PACKS_MODULE_PATH = path.join(REPO_ROOT, 'tools', 'cli', 'lib', 'packs.js');
|
|
31
|
+
const PACKAGE_JSON_PATH = path.join(REPO_ROOT, 'package.json');
|
|
32
|
+
|
|
33
|
+
const INSTALL_LAYOUTS = ['loose', 'packaged'];
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Validate the minimal contract the generator relies on.
|
|
37
|
+
* Throws with a precise message on the first violation.
|
|
38
|
+
*/
|
|
39
|
+
function validateRegistry(registry) {
|
|
40
|
+
if (!registry || typeof registry !== 'object') {
|
|
41
|
+
throw new Error('registry.yaml: file is empty or not a YAML mapping');
|
|
42
|
+
}
|
|
43
|
+
if (!registry.packs || typeof registry.packs !== 'object') {
|
|
44
|
+
throw new Error('registry.yaml: missing top-level "packs" mapping');
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const seenOrders = new Set();
|
|
48
|
+
for (const [id, pack] of Object.entries(registry.packs)) {
|
|
49
|
+
const where = `registry.yaml: pack "${id}"`;
|
|
50
|
+
if (!pack || typeof pack !== 'object') throw new Error(`${where}: must be a mapping`);
|
|
51
|
+
if (!Number.isInteger(pack.order)) throw new Error(`${where}: missing integer "order"`);
|
|
52
|
+
if (seenOrders.has(pack.order)) throw new Error(`${where}: duplicate order ${pack.order}`);
|
|
53
|
+
seenOrders.add(pack.order);
|
|
54
|
+
|
|
55
|
+
if (!pack.cli || typeof pack.cli !== 'object') throw new Error(`${where}: missing "cli" block`);
|
|
56
|
+
for (const field of ['name', 'icon', 'desc']) {
|
|
57
|
+
if (typeof pack.cli[field] !== 'string' || pack.cli[field] === '') {
|
|
58
|
+
throw new Error(`${where}: missing cli.${field}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (!Array.isArray(pack.agents)) throw new Error(`${where}: "agents" must be a list`);
|
|
62
|
+
if (pack.skills !== undefined && !Array.isArray(pack.skills)) {
|
|
63
|
+
throw new Error(`${where}: "skills" must be a list`);
|
|
64
|
+
}
|
|
65
|
+
if (typeof pack.pack_dir !== 'string' || pack.pack_dir === '') {
|
|
66
|
+
throw new Error(`${where}: missing "pack_dir"`);
|
|
67
|
+
}
|
|
68
|
+
if (!INSTALL_LAYOUTS.includes(pack.install_layout)) {
|
|
69
|
+
throw new Error(`${where}: "install_layout" must be one of ${INSTALL_LAYOUTS.join('|')}`);
|
|
70
|
+
}
|
|
71
|
+
if (pack.install_layout === 'packaged' && !Array.isArray((pack.doctor || {}).pack_agents)) {
|
|
72
|
+
throw new Error(`${where}: packaged layout requires "doctor.pack_agents" list`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return registry;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Load + validate registry.yaml. */
|
|
79
|
+
function loadRegistry(registryPath = DEFAULT_REGISTRY_PATH) {
|
|
80
|
+
const raw = fs.readFileSync(registryPath, 'utf8');
|
|
81
|
+
return validateRegistry(yaml.load(raw));
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** Pack entries sorted by their declared `order`. */
|
|
85
|
+
function sortedPackEntries(registry) {
|
|
86
|
+
return Object.entries(registry.packs).sort((a, b) => a[1].order - b[1].order);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** Generate PACK_ORDER (array of pack ids, sorted by `order`). */
|
|
90
|
+
function buildPackOrder(registry) {
|
|
91
|
+
return sortedPackEntries(registry).map(([id]) => id);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Generate the PACKS object with the exact shape of tools/cli/lib/packs.js.
|
|
96
|
+
* Key-presence rules mirror the hand-written module:
|
|
97
|
+
* - `data` only when the registry pack declares a `data` key
|
|
98
|
+
* - `externalPackage` only when `external_package` is set
|
|
99
|
+
* - `required` only when true (other packs omit the key entirely)
|
|
100
|
+
*/
|
|
101
|
+
function buildPacks(registry) {
|
|
102
|
+
const packs = {};
|
|
103
|
+
for (const [id, p] of sortedPackEntries(registry)) {
|
|
104
|
+
const entry = {
|
|
105
|
+
name: p.cli.name,
|
|
106
|
+
icon: p.cli.icon,
|
|
107
|
+
agents: [...p.agents],
|
|
108
|
+
skills: [...(p.skills || [])],
|
|
109
|
+
};
|
|
110
|
+
if ('data' in p) entry.data = [...p.data];
|
|
111
|
+
if (p.external_package) entry.externalPackage = p.external_package;
|
|
112
|
+
entry.packDir = p.pack_dir;
|
|
113
|
+
entry.packSrcDir = p.pack_src_dir || 'packs';
|
|
114
|
+
if (p.required === true) entry.required = true;
|
|
115
|
+
entry.desc = p.cli.desc;
|
|
116
|
+
packs[id] = entry;
|
|
117
|
+
}
|
|
118
|
+
return packs;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Generate EXPECTED_AGENTS (consumed by `bmad-plus doctor`).
|
|
123
|
+
* - loose packs → agent DIRECTORIES checked under .agents/skills/
|
|
124
|
+
* - packaged packs → packDir checked, agent FILES checked inside it
|
|
125
|
+
*/
|
|
126
|
+
function buildExpectedAgents(registry) {
|
|
127
|
+
const expected = {};
|
|
128
|
+
for (const [id, p] of sortedPackEntries(registry)) {
|
|
129
|
+
if (p.install_layout === 'loose') {
|
|
130
|
+
expected[id] = { agents: [...p.agents], packDir: null };
|
|
131
|
+
} else {
|
|
132
|
+
expected[id] = { agents: [], packDir: p.pack_dir, packAgents: [...p.doctor.pack_agents] };
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return expected;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/** Convenience: all three artifacts at once. */
|
|
139
|
+
function buildAll(registry) {
|
|
140
|
+
return {
|
|
141
|
+
PACKS: buildPacks(registry),
|
|
142
|
+
PACK_ORDER: buildPackOrder(registry),
|
|
143
|
+
EXPECTED_AGENTS: buildExpectedAgents(registry),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Emit a drop-in replacement source for tools/cli/lib/packs.js.
|
|
149
|
+
* Evaluating this source yields exports deep-equal to the hand-written module.
|
|
150
|
+
*/
|
|
151
|
+
function generatePacksModuleSource(registry) {
|
|
152
|
+
const { PACKS, PACK_ORDER, EXPECTED_AGENTS } = buildAll(registry);
|
|
153
|
+
const j = (value) => JSON.stringify(value, null, 2);
|
|
154
|
+
return [
|
|
155
|
+
'/**',
|
|
156
|
+
' * BMAD+ Shared PACKS Module — AUTO-GENERATED, DO NOT EDIT.',
|
|
157
|
+
' * Source of truth: registry.yaml (repo root).',
|
|
158
|
+
' * Regenerate: node tools/build/generate.js --out tools/cli/lib/packs.js',
|
|
159
|
+
' *',
|
|
160
|
+
' * Author: Laurent Rochetta',
|
|
161
|
+
' */',
|
|
162
|
+
'',
|
|
163
|
+
`const PACKS = ${j(PACKS)};`,
|
|
164
|
+
'',
|
|
165
|
+
`const PACK_ORDER = ${j(PACK_ORDER)};`,
|
|
166
|
+
'',
|
|
167
|
+
`const EXPECTED_AGENTS = ${j(EXPECTED_AGENTS)};`,
|
|
168
|
+
'',
|
|
169
|
+
'module.exports = { PACKS, PACK_ORDER, EXPECTED_AGENTS };',
|
|
170
|
+
'',
|
|
171
|
+
].join('\n');
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/** Human-readable drill-down for a mismatching keyed object. */
|
|
175
|
+
function describeDiff(label, generated, current, mismatches) {
|
|
176
|
+
if (Array.isArray(generated) || Array.isArray(current)) {
|
|
177
|
+
mismatches.push(
|
|
178
|
+
`${label}: generated ${JSON.stringify(generated)} != current ${JSON.stringify(current)}`
|
|
179
|
+
);
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const ids = new Set([...Object.keys(generated || {}), ...Object.keys(current || {})]);
|
|
183
|
+
for (const id of ids) {
|
|
184
|
+
if (!(id in generated)) {
|
|
185
|
+
mismatches.push(`${label}.${id}: present in packs.js but missing from registry.yaml`);
|
|
186
|
+
} else if (!(id in current)) {
|
|
187
|
+
mismatches.push(`${label}.${id}: present in registry.yaml but missing from packs.js`);
|
|
188
|
+
} else if (!isDeepStrictEqual(generated[id], current[id])) {
|
|
189
|
+
mismatches.push(
|
|
190
|
+
`${label}.${id}: generated ${JSON.stringify(generated[id])} != current ${JSON.stringify(current[id])}`
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* `--check` mode: prove registry.yaml reproduces the live packs.js exactly,
|
|
198
|
+
* and that product.version matches package.json.
|
|
199
|
+
* Returns { ok, mismatches } — never throws on drift (only on unreadable input).
|
|
200
|
+
*/
|
|
201
|
+
function check({
|
|
202
|
+
registryPath = DEFAULT_REGISTRY_PATH,
|
|
203
|
+
packsModulePath = DEFAULT_PACKS_MODULE_PATH,
|
|
204
|
+
packageJsonPath = PACKAGE_JSON_PATH,
|
|
205
|
+
} = {}) {
|
|
206
|
+
const registry = loadRegistry(registryPath);
|
|
207
|
+
const current = require(packsModulePath);
|
|
208
|
+
const generated = buildAll(registry);
|
|
209
|
+
const mismatches = [];
|
|
210
|
+
|
|
211
|
+
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
212
|
+
if (!registry.product || registry.product.version !== pkg.version) {
|
|
213
|
+
const declared = registry.product ? registry.product.version : undefined;
|
|
214
|
+
mismatches.push(
|
|
215
|
+
`product.version: registry.yaml declares "${declared}" but package.json is "${pkg.version}"`
|
|
216
|
+
);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
for (const key of ['PACKS', 'PACK_ORDER', 'EXPECTED_AGENTS']) {
|
|
220
|
+
if (!isDeepStrictEqual(generated[key], current[key])) {
|
|
221
|
+
describeDiff(key, generated[key], current[key], mismatches);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
return { ok: mismatches.length === 0, mismatches };
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/* ── CLI ────────────────────────────────────────────────────────────────── */
|
|
229
|
+
|
|
230
|
+
function main(argv) {
|
|
231
|
+
const args = argv.slice(2);
|
|
232
|
+
|
|
233
|
+
if (args.includes('--check')) {
|
|
234
|
+
const result = check();
|
|
235
|
+
if (result.ok) {
|
|
236
|
+
console.log('OK — registry.yaml reproduces tools/cli/lib/packs.js exactly (no drift).');
|
|
237
|
+
return 0;
|
|
238
|
+
}
|
|
239
|
+
console.error('DRIFT DETECTED between registry.yaml and tools/cli/lib/packs.js:');
|
|
240
|
+
for (const m of result.mismatches) console.error(` - ${m}`);
|
|
241
|
+
return 1;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
const registry = loadRegistry();
|
|
245
|
+
|
|
246
|
+
if (args.includes('--json')) {
|
|
247
|
+
console.log(JSON.stringify(buildAll(registry), null, 2));
|
|
248
|
+
return 0;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
const source = generatePacksModuleSource(registry);
|
|
252
|
+
const outIdx = args.indexOf('--out');
|
|
253
|
+
if (outIdx !== -1) {
|
|
254
|
+
const outPath = args[outIdx + 1];
|
|
255
|
+
if (!outPath) {
|
|
256
|
+
console.error('--out requires a file path');
|
|
257
|
+
return 1;
|
|
258
|
+
}
|
|
259
|
+
fs.writeFileSync(path.resolve(outPath), source, 'utf8');
|
|
260
|
+
console.log(`Generated ${path.resolve(outPath)} from registry.yaml`);
|
|
261
|
+
return 0;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
console.log(source);
|
|
265
|
+
return 0;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
if (require.main === module) {
|
|
269
|
+
process.exitCode = main(process.argv);
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
module.exports = {
|
|
273
|
+
DEFAULT_REGISTRY_PATH,
|
|
274
|
+
DEFAULT_PACKS_MODULE_PATH,
|
|
275
|
+
loadRegistry,
|
|
276
|
+
validateRegistry,
|
|
277
|
+
buildPacks,
|
|
278
|
+
buildPackOrder,
|
|
279
|
+
buildExpectedAgents,
|
|
280
|
+
buildAll,
|
|
281
|
+
generatePacksModuleSource,
|
|
282
|
+
check,
|
|
283
|
+
main,
|
|
284
|
+
};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
<!-- AUTO-GENERATED by tools/build/generate-adapters.js — DO NOT EDIT. -->
|
|
2
|
+
<!-- Source of truth: registry.yaml → spine AGENTS.md. Regenerate: node tools/build/generate-adapters.js -->
|
|
3
|
+
|
|
4
|
+
# BMAD+ — Adapter for codex-cli
|
|
5
|
+
|
|
6
|
+
This file is a THIN adapter. The single source of truth for agents, packs,
|
|
7
|
+
skills, and workflows is the spine file: **AGENTS.md** (project root).
|
|
8
|
+
Read AGENTS.md first; this adapter only adds tool-specific invocation notes.
|
|
9
|
+
|
|
10
|
+
## Tool notes — codex-cli
|
|
11
|
+
|
|
12
|
+
- Codex CLI follows the AGENTS.md open standard (https://agents.md/).
|
|
13
|
+
- This file relays to the repo-root spine; prefer reading the spine directly when both exist.
|
|
14
|
+
|
|
15
|
+
## Project Context
|
|
16
|
+
|
|
17
|
+
This project uses BMAD+, an augmented AI-driven development framework.
|
|
18
|
+
Based on BMAD-METHOD v6.6.0 with multi-role agents, autopilot mode, and parallel execution.
|
|
19
|
+
|
|
20
|
+
<!-- Hand-authored project instructions — single source: tools/build/adapters.config.js. -->
|
|
21
|
+
<!-- Edit the config, then regenerate; never edit this file directly. -->
|
|
22
|
+
|
|
23
|
+
## Agents
|
|
24
|
+
|
|
25
|
+
To activate an agent, say its name or persona:
|
|
26
|
+
|
|
27
|
+
- **Atlas** (Strategist) — Business analysis + Product management
|
|
28
|
+
- **Forge** (Architect-Dev) — Architecture + Development + Documentation
|
|
29
|
+
- **Sentinel** (Quality) — QA + UX review
|
|
30
|
+
- **Nexus** (Orchestrator) — Sprint management + Autopilot + Parallel execution
|
|
31
|
+
- **Shadow** (OSINT) — Investigation + Scraping + Psychoprofiling (if OSINT pack installed)
|
|
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 (derived counts: see Registry facts below)
|
|
34
|
+
- **Miriam** (מרים) — Business Analyst — Strategic analysis, research, product briefs (Dev Studio)
|
|
35
|
+
- **Huldah** (חולדה) — Technical Writer — Documentation, diagrams, editorial review (Dev Studio)
|
|
36
|
+
- **Yosef** (יוסף) — Product Manager — PRD, requirements, feature prioritization (Dev Studio)
|
|
37
|
+
- **Rachel** (רחל) — UX Designer — User experience, wireframes, empathy mapping (Dev Studio)
|
|
38
|
+
- **Bezalel** (בצלאל) — System Architect — Architecture, ADRs, epics & stories (Dev Studio)
|
|
39
|
+
- **Oholiab** (אהליאב) — Senior Engineer — TDD, sprint, code review, implementation (Dev Studio)
|
|
40
|
+
- **Zecher** (זכר, Memory Guardian) — Memory Archivist — Persistent cross-session memory, consolidation, project scanning, context recall, session handoffs
|
|
41
|
+
|
|
42
|
+
## Skills
|
|
43
|
+
|
|
44
|
+
- Installed projects load skills from `.agents/skills/`; in this repository the sources live in `src/bmad-plus/skills/` and `src/bmad-plus/agents/`.
|
|
45
|
+
- Each agent has a SKILL.md with capabilities, activation protocol, and role-switching rules.
|
|
46
|
+
- Auto-activation triggers: `.agents/data/role-triggers.yaml` (source: `src/bmad-plus/data/role-triggers.yaml`).
|
|
47
|
+
|
|
48
|
+
## Project Structure
|
|
49
|
+
|
|
50
|
+
- `src/bmad-plus/` — Custom module (agents, skills, data)
|
|
51
|
+
- `monitor/` — Upstream monitoring system (VPS)
|
|
52
|
+
- `mcp-server/` — Audit 360° MCP Server
|
|
53
|
+
- `osint-agent-package/` — OSINT package
|
|
54
|
+
- `upstream/` — BMAD-METHOD reference clone
|
|
55
|
+
|
|
56
|
+
## Communication
|
|
57
|
+
|
|
58
|
+
- User name: laurent
|
|
59
|
+
- Default language: Français for user-facing content, English for code and technical docs.
|
|
60
|
+
|
|
61
|
+
## Commit Rules
|
|
62
|
+
|
|
63
|
+
- NEVER add "Co-Authored-By: Claude" or any AI co-author attribution.
|
|
64
|
+
- The sole author is Laurent Rochetta.
|
|
65
|
+
|
|
66
|
+
## Repository Maintenance Rule
|
|
67
|
+
|
|
68
|
+
When updating the main README.md (English), you MUST synchronously update all translations in the readme-international/ directory (fr, es, de).
|
|
69
|
+
|
|
70
|
+
## Memory Protocol (Karpathy Guardrails)
|
|
71
|
+
|
|
72
|
+
Agents MUST follow these behavioral principles:
|
|
73
|
+
|
|
74
|
+
### G1 — Think Before Coding
|
|
75
|
+
|
|
76
|
+
- State assumptions explicitly. If uncertain, ask.
|
|
77
|
+
- Check `.agents/memory/decisions.md` for prior decisions before re-deciding.
|
|
78
|
+
|
|
79
|
+
### G2 — Simplicity First
|
|
80
|
+
|
|
81
|
+
- Minimum code that solves the problem. Nothing speculative.
|
|
82
|
+
- Check `.agents/memory/patterns.md` for existing solutions.
|
|
83
|
+
|
|
84
|
+
### G3 — Surgical Changes
|
|
85
|
+
|
|
86
|
+
- Touch only what you must. Match existing style.
|
|
87
|
+
- Log surprises in `.agents/memory/lessons.md`.
|
|
88
|
+
|
|
89
|
+
### G4 — Goal-Driven Execution
|
|
90
|
+
|
|
91
|
+
- Define success criteria before implementing.
|
|
92
|
+
- Log non-obvious decisions in `.agents/memory/decisions.md`.
|
|
93
|
+
|
|
94
|
+
### Memory Files
|
|
95
|
+
|
|
96
|
+
- `.agents/memory/decisions.md` — Read at session start, write when making decisions
|
|
97
|
+
- `.agents/memory/lessons.md` — Write when something unexpected happens
|
|
98
|
+
- `.agents/memory/patterns.md` — Write when a reusable pattern is validated
|
|
99
|
+
- `.agents/memory/context.md` — Update at session end with project state
|
|
100
|
+
|
|
101
|
+
## Registry facts (computed from registry.yaml — never hand-typed)
|
|
102
|
+
|
|
103
|
+
- Product: BMAD+ v0.12.0 (derived from BMAD-METHOD v6.6.0)
|
|
104
|
+
- Models supported: claude, gpt, gemini, local (model-agnostic by contract)
|
|
105
|
+
- Packs (9): Core, OSINT, Maker, Shield, SEO, Memory, Dev Studio, Backup, Animated
|
|
106
|
+
- Installer agents (14 across all packs):
|
|
107
|
+
- Core (required): 4 installer agents — Core agents & skills
|
|
108
|
+
- OSINT: 1 installer agent — OSINT & investigation — 2 compliance frameworks
|
|
109
|
+
- Maker: 1 installer agent — Agent creation toolkit
|
|
110
|
+
- Shield: 1 installer agent — GRC compliance (25+ frameworks) — 27 specialized agents, 11 workflows, 26 compliance frameworks
|
|
111
|
+
- SEO: 3 installer agents — SEO audit & optimization — 1 compliance frameworks
|
|
112
|
+
- Memory: 1 installer agent — Persistent cross-session memory
|
|
113
|
+
- Dev Studio: 1 installer agent — SDLC automation (6 agents, 56+ skills) — 6 sub-agents, 38 workflows
|
|
114
|
+
- Backup: 1 installer agent — Backup & restore
|
|
115
|
+
- Animated: 1 installer agent — Animated website agents
|
|
116
|
+
|
|
117
|
+
## Key commands
|
|
118
|
+
|
|
119
|
+
- `bmad-help` — Show all available agents and skills
|
|
120
|
+
- `autopilot` — Launch the orchestrator (Nexus) in full pipeline mode
|
|
121
|
+
- `parallel` — Enable parallel multi-agent execution
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "BMAD+ agents adapter (generated from registry.yaml)"
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- AUTO-GENERATED by tools/build/generate-adapters.js — DO NOT EDIT. -->
|
|
7
|
+
<!-- Source of truth: registry.yaml → spine AGENTS.md. Regenerate: node tools/build/generate-adapters.js -->
|
|
8
|
+
|
|
9
|
+
# BMAD+ — Adapter for cursor
|
|
10
|
+
|
|
11
|
+
This file is a THIN adapter. The single source of truth for agents, packs,
|
|
12
|
+
skills, and workflows is the spine file: **AGENTS.md** (project root).
|
|
13
|
+
Read AGENTS.md first; this adapter only adds tool-specific invocation notes.
|
|
14
|
+
|
|
15
|
+
## Tool notes — cursor
|
|
16
|
+
|
|
17
|
+
- Cursor loads this rule from `.cursor/rules/` (`alwaysApply: true` in the frontmatter).
|
|
18
|
+
- Treat the spine as the single source of truth; this rule only adds Cursor-specific notes.
|
|
19
|
+
|
|
20
|
+
## Project Context
|
|
21
|
+
|
|
22
|
+
This project uses BMAD+, an augmented AI-driven development framework.
|
|
23
|
+
Based on BMAD-METHOD v6.6.0 with multi-role agents, autopilot mode, and parallel execution.
|
|
24
|
+
|
|
25
|
+
<!-- Hand-authored project instructions — single source: tools/build/adapters.config.js. -->
|
|
26
|
+
<!-- Edit the config, then regenerate; never edit this file directly. -->
|
|
27
|
+
|
|
28
|
+
## Agents
|
|
29
|
+
|
|
30
|
+
To activate an agent, say its name or persona:
|
|
31
|
+
|
|
32
|
+
- **Atlas** (Strategist) — Business analysis + Product management
|
|
33
|
+
- **Forge** (Architect-Dev) — Architecture + Development + Documentation
|
|
34
|
+
- **Sentinel** (Quality) — QA + UX review
|
|
35
|
+
- **Nexus** (Orchestrator) — Sprint management + Autopilot + Parallel execution
|
|
36
|
+
- **Shadow** (OSINT) — Investigation + Scraping + Psychoprofiling (if OSINT pack installed)
|
|
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 (derived counts: see Registry facts below)
|
|
39
|
+
- **Miriam** (מרים) — Business Analyst — Strategic analysis, research, product briefs (Dev Studio)
|
|
40
|
+
- **Huldah** (חולדה) — Technical Writer — Documentation, diagrams, editorial review (Dev Studio)
|
|
41
|
+
- **Yosef** (יוסף) — Product Manager — PRD, requirements, feature prioritization (Dev Studio)
|
|
42
|
+
- **Rachel** (רחל) — UX Designer — User experience, wireframes, empathy mapping (Dev Studio)
|
|
43
|
+
- **Bezalel** (בצלאל) — System Architect — Architecture, ADRs, epics & stories (Dev Studio)
|
|
44
|
+
- **Oholiab** (אהליאב) — Senior Engineer — TDD, sprint, code review, implementation (Dev Studio)
|
|
45
|
+
- **Zecher** (זכר, Memory Guardian) — Memory Archivist — Persistent cross-session memory, consolidation, project scanning, context recall, session handoffs
|
|
46
|
+
|
|
47
|
+
## Skills
|
|
48
|
+
|
|
49
|
+
- Installed projects load skills from `.agents/skills/`; in this repository the sources live in `src/bmad-plus/skills/` and `src/bmad-plus/agents/`.
|
|
50
|
+
- Each agent has a SKILL.md with capabilities, activation protocol, and role-switching rules.
|
|
51
|
+
- Auto-activation triggers: `.agents/data/role-triggers.yaml` (source: `src/bmad-plus/data/role-triggers.yaml`).
|
|
52
|
+
|
|
53
|
+
## Project Structure
|
|
54
|
+
|
|
55
|
+
- `src/bmad-plus/` — Custom module (agents, skills, data)
|
|
56
|
+
- `monitor/` — Upstream monitoring system (VPS)
|
|
57
|
+
- `mcp-server/` — Audit 360° MCP Server
|
|
58
|
+
- `osint-agent-package/` — OSINT package
|
|
59
|
+
- `upstream/` — BMAD-METHOD reference clone
|
|
60
|
+
|
|
61
|
+
## Communication
|
|
62
|
+
|
|
63
|
+
- User name: laurent
|
|
64
|
+
- Default language: Français for user-facing content, English for code and technical docs.
|
|
65
|
+
|
|
66
|
+
## Commit Rules
|
|
67
|
+
|
|
68
|
+
- NEVER add "Co-Authored-By: Claude" or any AI co-author attribution.
|
|
69
|
+
- The sole author is Laurent Rochetta.
|
|
70
|
+
|
|
71
|
+
## Repository Maintenance Rule
|
|
72
|
+
|
|
73
|
+
When updating the main README.md (English), you MUST synchronously update all translations in the readme-international/ directory (fr, es, de).
|
|
74
|
+
|
|
75
|
+
## Memory Protocol (Karpathy Guardrails)
|
|
76
|
+
|
|
77
|
+
Agents MUST follow these behavioral principles:
|
|
78
|
+
|
|
79
|
+
### G1 — Think Before Coding
|
|
80
|
+
|
|
81
|
+
- State assumptions explicitly. If uncertain, ask.
|
|
82
|
+
- Check `.agents/memory/decisions.md` for prior decisions before re-deciding.
|
|
83
|
+
|
|
84
|
+
### G2 — Simplicity First
|
|
85
|
+
|
|
86
|
+
- Minimum code that solves the problem. Nothing speculative.
|
|
87
|
+
- Check `.agents/memory/patterns.md` for existing solutions.
|
|
88
|
+
|
|
89
|
+
### G3 — Surgical Changes
|
|
90
|
+
|
|
91
|
+
- Touch only what you must. Match existing style.
|
|
92
|
+
- Log surprises in `.agents/memory/lessons.md`.
|
|
93
|
+
|
|
94
|
+
### G4 — Goal-Driven Execution
|
|
95
|
+
|
|
96
|
+
- Define success criteria before implementing.
|
|
97
|
+
- Log non-obvious decisions in `.agents/memory/decisions.md`.
|
|
98
|
+
|
|
99
|
+
### Memory Files
|
|
100
|
+
|
|
101
|
+
- `.agents/memory/decisions.md` — Read at session start, write when making decisions
|
|
102
|
+
- `.agents/memory/lessons.md` — Write when something unexpected happens
|
|
103
|
+
- `.agents/memory/patterns.md` — Write when a reusable pattern is validated
|
|
104
|
+
- `.agents/memory/context.md` — Update at session end with project state
|
|
105
|
+
|
|
106
|
+
## Registry facts (computed from registry.yaml — never hand-typed)
|
|
107
|
+
|
|
108
|
+
- Product: BMAD+ v0.12.0 (derived from BMAD-METHOD v6.6.0)
|
|
109
|
+
- Models supported: claude, gpt, gemini, local (model-agnostic by contract)
|
|
110
|
+
- Packs (9): Core, OSINT, Maker, Shield, SEO, Memory, Dev Studio, Backup, Animated
|
|
111
|
+
- Installer agents (14 across all packs):
|
|
112
|
+
- Core (required): 4 installer agents — Core agents & skills
|
|
113
|
+
- OSINT: 1 installer agent — OSINT & investigation — 2 compliance frameworks
|
|
114
|
+
- Maker: 1 installer agent — Agent creation toolkit
|
|
115
|
+
- Shield: 1 installer agent — GRC compliance (25+ frameworks) — 27 specialized agents, 11 workflows, 26 compliance frameworks
|
|
116
|
+
- SEO: 3 installer agents — SEO audit & optimization — 1 compliance frameworks
|
|
117
|
+
- Memory: 1 installer agent — Persistent cross-session memory
|
|
118
|
+
- Dev Studio: 1 installer agent — SDLC automation (6 agents, 56+ skills) — 6 sub-agents, 38 workflows
|
|
119
|
+
- Backup: 1 installer agent — Backup & restore
|
|
120
|
+
- Animated: 1 installer agent — Animated website agents
|
|
121
|
+
|
|
122
|
+
## Key commands
|
|
123
|
+
|
|
124
|
+
- `bmad-help` — Show all available agents and skills
|
|
125
|
+
- `autopilot` — Launch the orchestrator (Nexus) in full pipeline mode
|
|
126
|
+
- `parallel` — Enable parallel multi-agent execution
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
<!-- AUTO-GENERATED by tools/build/generate-adapters.js — DO NOT EDIT. -->
|
|
2
|
+
<!-- Source of truth: registry.yaml → spine AGENTS.md. Regenerate: node tools/build/generate-adapters.js -->
|
|
3
|
+
|
|
4
|
+
# BMAD+ — Adapter for opencode
|
|
5
|
+
|
|
6
|
+
This file is a THIN adapter. The single source of truth for agents, packs,
|
|
7
|
+
skills, and workflows is the spine file: **AGENTS.md** (project root).
|
|
8
|
+
Read AGENTS.md first; this adapter only adds tool-specific invocation notes.
|
|
9
|
+
|
|
10
|
+
## Tool notes — opencode
|
|
11
|
+
|
|
12
|
+
- OpenCode follows the AGENTS.md open standard (https://agents.md/).
|
|
13
|
+
- This file relays to the repo-root spine; prefer reading the spine directly when both exist.
|
|
14
|
+
|
|
15
|
+
## Project Context
|
|
16
|
+
|
|
17
|
+
This project uses BMAD+, an augmented AI-driven development framework.
|
|
18
|
+
Based on BMAD-METHOD v6.6.0 with multi-role agents, autopilot mode, and parallel execution.
|
|
19
|
+
|
|
20
|
+
<!-- Hand-authored project instructions — single source: tools/build/adapters.config.js. -->
|
|
21
|
+
<!-- Edit the config, then regenerate; never edit this file directly. -->
|
|
22
|
+
|
|
23
|
+
## Agents
|
|
24
|
+
|
|
25
|
+
To activate an agent, say its name or persona:
|
|
26
|
+
|
|
27
|
+
- **Atlas** (Strategist) — Business analysis + Product management
|
|
28
|
+
- **Forge** (Architect-Dev) — Architecture + Development + Documentation
|
|
29
|
+
- **Sentinel** (Quality) — QA + UX review
|
|
30
|
+
- **Nexus** (Orchestrator) — Sprint management + Autopilot + Parallel execution
|
|
31
|
+
- **Shadow** (OSINT) — Investigation + Scraping + Psychoprofiling (if OSINT pack installed)
|
|
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 (derived counts: see Registry facts below)
|
|
34
|
+
- **Miriam** (מרים) — Business Analyst — Strategic analysis, research, product briefs (Dev Studio)
|
|
35
|
+
- **Huldah** (חולדה) — Technical Writer — Documentation, diagrams, editorial review (Dev Studio)
|
|
36
|
+
- **Yosef** (יוסף) — Product Manager — PRD, requirements, feature prioritization (Dev Studio)
|
|
37
|
+
- **Rachel** (רחל) — UX Designer — User experience, wireframes, empathy mapping (Dev Studio)
|
|
38
|
+
- **Bezalel** (בצלאל) — System Architect — Architecture, ADRs, epics & stories (Dev Studio)
|
|
39
|
+
- **Oholiab** (אהליאב) — Senior Engineer — TDD, sprint, code review, implementation (Dev Studio)
|
|
40
|
+
- **Zecher** (זכר, Memory Guardian) — Memory Archivist — Persistent cross-session memory, consolidation, project scanning, context recall, session handoffs
|
|
41
|
+
|
|
42
|
+
## Skills
|
|
43
|
+
|
|
44
|
+
- Installed projects load skills from `.agents/skills/`; in this repository the sources live in `src/bmad-plus/skills/` and `src/bmad-plus/agents/`.
|
|
45
|
+
- Each agent has a SKILL.md with capabilities, activation protocol, and role-switching rules.
|
|
46
|
+
- Auto-activation triggers: `.agents/data/role-triggers.yaml` (source: `src/bmad-plus/data/role-triggers.yaml`).
|
|
47
|
+
|
|
48
|
+
## Project Structure
|
|
49
|
+
|
|
50
|
+
- `src/bmad-plus/` — Custom module (agents, skills, data)
|
|
51
|
+
- `monitor/` — Upstream monitoring system (VPS)
|
|
52
|
+
- `mcp-server/` — Audit 360° MCP Server
|
|
53
|
+
- `osint-agent-package/` — OSINT package
|
|
54
|
+
- `upstream/` — BMAD-METHOD reference clone
|
|
55
|
+
|
|
56
|
+
## Communication
|
|
57
|
+
|
|
58
|
+
- User name: laurent
|
|
59
|
+
- Default language: Français for user-facing content, English for code and technical docs.
|
|
60
|
+
|
|
61
|
+
## Commit Rules
|
|
62
|
+
|
|
63
|
+
- NEVER add "Co-Authored-By: Claude" or any AI co-author attribution.
|
|
64
|
+
- The sole author is Laurent Rochetta.
|
|
65
|
+
|
|
66
|
+
## Repository Maintenance Rule
|
|
67
|
+
|
|
68
|
+
When updating the main README.md (English), you MUST synchronously update all translations in the readme-international/ directory (fr, es, de).
|
|
69
|
+
|
|
70
|
+
## Memory Protocol (Karpathy Guardrails)
|
|
71
|
+
|
|
72
|
+
Agents MUST follow these behavioral principles:
|
|
73
|
+
|
|
74
|
+
### G1 — Think Before Coding
|
|
75
|
+
|
|
76
|
+
- State assumptions explicitly. If uncertain, ask.
|
|
77
|
+
- Check `.agents/memory/decisions.md` for prior decisions before re-deciding.
|
|
78
|
+
|
|
79
|
+
### G2 — Simplicity First
|
|
80
|
+
|
|
81
|
+
- Minimum code that solves the problem. Nothing speculative.
|
|
82
|
+
- Check `.agents/memory/patterns.md` for existing solutions.
|
|
83
|
+
|
|
84
|
+
### G3 — Surgical Changes
|
|
85
|
+
|
|
86
|
+
- Touch only what you must. Match existing style.
|
|
87
|
+
- Log surprises in `.agents/memory/lessons.md`.
|
|
88
|
+
|
|
89
|
+
### G4 — Goal-Driven Execution
|
|
90
|
+
|
|
91
|
+
- Define success criteria before implementing.
|
|
92
|
+
- Log non-obvious decisions in `.agents/memory/decisions.md`.
|
|
93
|
+
|
|
94
|
+
### Memory Files
|
|
95
|
+
|
|
96
|
+
- `.agents/memory/decisions.md` — Read at session start, write when making decisions
|
|
97
|
+
- `.agents/memory/lessons.md` — Write when something unexpected happens
|
|
98
|
+
- `.agents/memory/patterns.md` — Write when a reusable pattern is validated
|
|
99
|
+
- `.agents/memory/context.md` — Update at session end with project state
|
|
100
|
+
|
|
101
|
+
## Registry facts (computed from registry.yaml — never hand-typed)
|
|
102
|
+
|
|
103
|
+
- Product: BMAD+ v0.12.0 (derived from BMAD-METHOD v6.6.0)
|
|
104
|
+
- Models supported: claude, gpt, gemini, local (model-agnostic by contract)
|
|
105
|
+
- Packs (9): Core, OSINT, Maker, Shield, SEO, Memory, Dev Studio, Backup, Animated
|
|
106
|
+
- Installer agents (14 across all packs):
|
|
107
|
+
- Core (required): 4 installer agents — Core agents & skills
|
|
108
|
+
- OSINT: 1 installer agent — OSINT & investigation — 2 compliance frameworks
|
|
109
|
+
- Maker: 1 installer agent — Agent creation toolkit
|
|
110
|
+
- Shield: 1 installer agent — GRC compliance (25+ frameworks) — 27 specialized agents, 11 workflows, 26 compliance frameworks
|
|
111
|
+
- SEO: 3 installer agents — SEO audit & optimization — 1 compliance frameworks
|
|
112
|
+
- Memory: 1 installer agent — Persistent cross-session memory
|
|
113
|
+
- Dev Studio: 1 installer agent — SDLC automation (6 agents, 56+ skills) — 6 sub-agents, 38 workflows
|
|
114
|
+
- Backup: 1 installer agent — Backup & restore
|
|
115
|
+
- Animated: 1 installer agent — Animated website agents
|
|
116
|
+
|
|
117
|
+
## Key commands
|
|
118
|
+
|
|
119
|
+
- `bmad-help` — Show all available agents and skills
|
|
120
|
+
- `autopilot` — Launch the orchestrator (Nexus) in full pipeline mode
|
|
121
|
+
- `parallel` — Enable parallel multi-agent execution
|