mindforge-cc 11.9.7 → 11.9.9
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/.agent/mindforge/health.md +7 -4
- package/.agent/mindforge/help.md +9 -5
- package/.agent/mindforge/install-skill.md +8 -6
- package/.agent/mindforge/marketplace.md +6 -0
- package/.agent/mindforge/security-scan.md +9 -4
- package/.agent/mindforge/skills-index.md +1 -1
- package/.agent/mindforge/status.md +5 -4
- package/.agent/skills/mindforge-join-discord/SKILL.md +9 -6
- package/.claude/commands/mindforge/health.md +7 -4
- package/.claude/commands/mindforge/help.md +9 -5
- package/.claude/commands/mindforge/install-skill.md +8 -6
- package/.claude/commands/mindforge/marketplace.md +6 -0
- package/.claude/commands/mindforge/security-scan.md +9 -4
- package/.claude/commands/mindforge/skills-index.md +1 -1
- package/.claude/commands/mindforge/status.md +5 -4
- package/.mindforge/config.json +1 -1
- package/.mindforge/dynamic-workflows/scripts/feature-planner.js +12 -0
- package/.mindforge/dynamic-workflows/scripts/incident-response.js +6 -0
- package/.mindforge/dynamic-workflows/scripts/onboard-codebase.js +9 -0
- package/.mindforge/dynamic-workflows/scripts/perf-optimize.js +6 -0
- package/.mindforge/dynamic-workflows/scripts/refactor-plan.js +3 -0
- package/.mindforge/dynamic-workflows/scripts/release-prep.js +9 -0
- package/.mindforge/dynamic-workflows/scripts/tdd-sprint.js +12 -0
- package/.mindforge/dynamic-workflows/scripts/verification-loop.js +6 -0
- package/.mindforge/org/skills/MANIFEST.md +32 -0
- package/.mindforge/personas/mf-executor.md +1 -1
- package/.mindforge/personas/mf-memory.md +1 -1
- package/.mindforge/personas/mf-tool.md +1 -1
- package/.mindforge/personas/swarm-templates.json +10 -20
- package/CHANGELOG.md +108 -0
- package/MINDFORGE-AGENTIC-SECURITY.md +189 -0
- package/MINDFORGE.md +2 -2
- package/README.md +271 -80
- package/RELEASENOTES.md +57 -0
- package/SECURITY.md +3 -2
- package/bin/governance/audit-verifier.js +12 -3
- package/bin/installer/harness-adapter-compliance.js +1 -1
- package/bin/installer-core.js +65 -8
- package/bin/mindforge-cli.js +2 -2
- package/bin/verify-audit.js +7 -1
- package/bin/wizard/theme.js +1 -1
- package/changelogs/v11.9.8.md +51 -0
- package/changelogs/v11.9.9.md +59 -0
- package/docs/References/commands.md +2 -2
- package/docs/References/config-reference.md +20 -35
- package/docs/References/sdk-api.md +10 -4
- package/docs/References/skills-api.md +9 -7
- package/docs/commands-reference.md +2 -2
- package/docs/faq.md +10 -7
- package/docs/getting-started.md +10 -4
- package/docs/sdk-reference.md +3 -3
- package/docs/security/SECURITY.md +14 -0
- package/docs/security/ZTAI-OVERVIEW.md +53 -0
- package/docs/security/penetration-test-results.md +36 -0
- package/docs/security/threat-model.md +148 -0
- package/docs/troubleshooting.md +14 -10
- package/docs/user-guide.md +12 -8
- package/docs/usp-features.md +60 -0
- package/package.json +4 -1
- package/subagents/README.md +38 -0
- package/.agent/skills/godmode/SKILL.md +0 -396
- package/.agent/skills/godmode/references/jailbreak-templates.md +0 -128
- package/.agent/skills/godmode/references/refusal-detection.md +0 -142
package/bin/installer-core.js
CHANGED
|
@@ -636,13 +636,16 @@ async function install(runtime, scope, options = {}) {
|
|
|
636
636
|
const assetMappings = [
|
|
637
637
|
{ key: 'skillsSubdir', src: src('.agent', 'skills'), label: 'skills' },
|
|
638
638
|
{ key: 'hooksSubdir', src: src('.agent', 'hooks'), label: 'hooks' },
|
|
639
|
-
{ key: 'personasSubdir', src: src('.mindforge', 'personas'), label: 'personas' },
|
|
640
639
|
// NB: on-disk dirs are capitalized (docs/References, docs/Templates). macOS is
|
|
641
640
|
// case-insensitive so lowercase used to "work" locally, but npm/Linux is
|
|
642
641
|
// case-sensitive — the lookup silently missed in production (UC: REFERENCES 0).
|
|
643
642
|
{ key: 'docsSubdir', src: src('docs', 'References'), label: 'references' },
|
|
644
643
|
{ key: 'docsSubdir', src: src('docs', 'Templates'), label: 'templates' }
|
|
645
644
|
];
|
|
645
|
+
// Mirrors the real copy logic in Section 2.1: personas are skipped under --minimal.
|
|
646
|
+
if (!minimal) {
|
|
647
|
+
assetMappings.push({ key: 'personasSubdir', src: src('.mindforge', 'personas'), label: 'personas' });
|
|
648
|
+
}
|
|
646
649
|
|
|
647
650
|
assetMappings.forEach(asset => {
|
|
648
651
|
const subDir = cfg[asset.key];
|
|
@@ -813,17 +816,25 @@ async function install(runtime, scope, options = {}) {
|
|
|
813
816
|
}
|
|
814
817
|
}
|
|
815
818
|
|
|
816
|
-
// ── 2.1 Install Enterprise Assets (Skills, Hooks, Personas)
|
|
819
|
+
// ── 2.1 Install Enterprise Assets (Skills, Hooks, Personas, Docs, Memory, Plugins) ──
|
|
817
820
|
if (scope === 'local' && !selfInstall) {
|
|
818
821
|
const assetTypes = [
|
|
819
822
|
{ key: 'skillsSubdir', src: src('.agent', 'skills'), label: 'skills' },
|
|
820
823
|
{ key: 'hooksSubdir', src: src('.agent', 'hooks'), label: 'hooks' },
|
|
821
|
-
{ key: 'personasSubdir', src: src('.mindforge', 'personas'), label: 'personas' },
|
|
822
824
|
{ key: 'docsSubdir', src: src('docs', 'References'), label: 'references' },
|
|
823
825
|
{ key: 'docsSubdir', src: src('docs', 'Templates'), label: 'templates' },
|
|
824
826
|
{ key: 'memorySubdir', src: src('.mindforge', 'memory'), label: 'memory' },
|
|
825
827
|
{ key: 'pluginsSubdir', src: src('.mindforge', 'plugins'), label: 'plugins' }
|
|
826
828
|
];
|
|
829
|
+
// 'personas' is gated on !minimal, not removed: this copy into <runtime>/personas/ (e.g.
|
|
830
|
+
// .claude/personas/) is a real, tested, documented per-harness asset delivery contract
|
|
831
|
+
// (bin/installer/harness-adapter-compliance.js's ADAPTER_RECORDS asserts a >=218-file floor
|
|
832
|
+
// here for every harness except copilot), not dead/unused. The bug was that it ran
|
|
833
|
+
// unconditionally regardless of --minimal, undermining --minimal's "no persona library"
|
|
834
|
+
// promise (README.md, docs/getting-started.md) by shipping the full persona set anyway.
|
|
835
|
+
if (!minimal) {
|
|
836
|
+
assetTypes.push({ key: 'personasSubdir', src: src('.mindforge', 'personas'), label: 'personas' });
|
|
837
|
+
}
|
|
827
838
|
|
|
828
839
|
assetTypes.forEach(asset => {
|
|
829
840
|
const subDir = cfg[asset.key];
|
|
@@ -882,7 +893,10 @@ async function install(runtime, scope, options = {}) {
|
|
|
882
893
|
if (minimal) {
|
|
883
894
|
const minimalEntries = new Set([
|
|
884
895
|
'MINDFORGE-SCHEMA.json',
|
|
885
|
-
|
|
896
|
+
// 'personas' deliberately excluded: --minimal's whole point is "no persona library"
|
|
897
|
+
// (README.md, docs/getting-started.md). It was accidentally left in this allowlist,
|
|
898
|
+
// so a --minimal install shipped the full 216-persona set anyway.
|
|
899
|
+
'engine', 'org', 'governance', 'integrations', 'skills', 'team'
|
|
886
900
|
]);
|
|
887
901
|
fsu.ensureDir(forgeDst);
|
|
888
902
|
for (const entry of fs.readdirSync(forgeSrc, { withFileTypes: true })) {
|
|
@@ -1079,6 +1093,13 @@ async function install(runtime, scope, options = {}) {
|
|
|
1079
1093
|
// install-manifests/install-state pair, which are build- and CI-side and have no business in a
|
|
1080
1094
|
// consumer project.
|
|
1081
1095
|
'bin/installer/hook-registration.js',
|
|
1096
|
+
// A thin (12-line) entry point whose only require is bin/governance/audit-verifier.js, which
|
|
1097
|
+
// already ships unconditionally via sovereignEngines above -- so this adds zero new surface,
|
|
1098
|
+
// just the one file consumers need to actually run "node bin/verify-audit.js" themselves.
|
|
1099
|
+
// Previously gated behind --with-utils for no functional reason: CLAUDE.md documents
|
|
1100
|
+
// "node bin/verify-audit.js" as a top-level command, not a --with-utils-only one, and a
|
|
1101
|
+
// fresh default install had the doc but not the script.
|
|
1102
|
+
'bin/verify-audit.js',
|
|
1082
1103
|
];
|
|
1083
1104
|
coreFiles.forEach(rel => {
|
|
1084
1105
|
const srcFile = src(...rel.split('/'));
|
|
@@ -1327,19 +1348,55 @@ async function run(args) {
|
|
|
1327
1348
|
bannerVersion = require('./utils/mindforge-version').resolveMindforgeVersion(process.cwd()).version;
|
|
1328
1349
|
} catch { /* a banner must never be the reason health cannot run */ }
|
|
1329
1350
|
|
|
1330
|
-
|
|
1351
|
+
const runtimes = runtime === 'all'
|
|
1352
|
+
? Object.keys(RUNTIMES)
|
|
1353
|
+
: runtime.split(',').map((r) => r.trim()).filter(Boolean);
|
|
1354
|
+
|
|
1355
|
+
const unknownRuntimes = runtimes.filter((rt) => !RUNTIMES[rt]);
|
|
1356
|
+
if (unknownRuntimes.length) {
|
|
1357
|
+
console.error(
|
|
1358
|
+
`Unknown runtime(s): ${unknownRuntimes.join(', ')}. Valid: ${Object.keys(RUNTIMES).join(', ')}, all`
|
|
1359
|
+
);
|
|
1360
|
+
process.exit(1);
|
|
1361
|
+
}
|
|
1362
|
+
|
|
1331
1363
|
// Print header and brand manifest
|
|
1332
1364
|
Theme.printHeader(bannerVersion);
|
|
1333
1365
|
Theme.printBrandManifest();
|
|
1334
|
-
//
|
|
1366
|
+
// `health` (routed here via --check — bin/mindforge-cli.js:33-37) advertises itself as "Verify
|
|
1367
|
+
// project health and installation integrity". Until now it only did the first half — this
|
|
1368
|
+
// npm-registry lookup — and returned before touching a single file on disk. Measured: in a fresh
|
|
1369
|
+
// --claude --local install with bin/governance/policy-engine.js deleted by hand, `mindforge health`
|
|
1370
|
+
// printed only "vX.Y.Z is the latest version" and exited 0 — the missing file was invisible to the
|
|
1371
|
+
// one command whose job is to say so.
|
|
1372
|
+
//
|
|
1373
|
+
// verifyInstall() already exists as the real per-runtime file check (used by install() at :1144,
|
|
1374
|
+
// see its own comment for why it was dead code before that). Reusing it here for a project's
|
|
1375
|
+
// EXISTING install — rather than inventing a second checker — means both callers agree on what
|
|
1376
|
+
// "installed" means.
|
|
1335
1377
|
if (isCheck) {
|
|
1336
1378
|
const { checkAndUpdate } = require('./updater/self-update');
|
|
1337
1379
|
await checkAndUpdate({ apply: false });
|
|
1380
|
+
|
|
1381
|
+
let anyMissing = false;
|
|
1382
|
+
for (const rt of runtimes) {
|
|
1383
|
+
const cfg = RUNTIMES[rt];
|
|
1384
|
+
const rtBaseDir = resolveBaseDir(rt, scope);
|
|
1385
|
+
const rtCmdsDir = norm(path.join(rtBaseDir, cfg.commandsSubdir));
|
|
1386
|
+
const verification = verifyInstall(rtBaseDir, rtCmdsDir, rt, scope);
|
|
1387
|
+
if (verification.ok) {
|
|
1388
|
+
Theme.printResolved(c.bold(`${rt} (${scope}): install verified (${verification.checked} required files present)`));
|
|
1389
|
+
} else {
|
|
1390
|
+
anyMissing = true;
|
|
1391
|
+
console.error(`\n ❌ ${rt} (${scope}): install verification failed — ${verification.missing.length} of ` +
|
|
1392
|
+
`${verification.checked} required file(s) missing:`);
|
|
1393
|
+
verification.missing.forEach(f => console.error(` ${f}`));
|
|
1394
|
+
}
|
|
1395
|
+
}
|
|
1396
|
+
if (anyMissing) process.exit(1);
|
|
1338
1397
|
return;
|
|
1339
1398
|
}
|
|
1340
1399
|
|
|
1341
|
-
const runtimes = runtime === 'all' ? Object.keys(RUNTIMES) : [runtime];
|
|
1342
|
-
|
|
1343
1400
|
for (const rt of runtimes) {
|
|
1344
1401
|
if (isUninstall) await uninstall(rt, scope, options);
|
|
1345
1402
|
else if (isUpdate) await install(rt, scope, { ...options, isUpdate: true });
|
package/bin/mindforge-cli.js
CHANGED
|
@@ -41,11 +41,11 @@ const COMMANDS = {
|
|
|
41
41
|
},
|
|
42
42
|
'pr-review': {
|
|
43
43
|
script: 'bin/review/cross-review-engine.js',
|
|
44
|
-
description: '
|
|
44
|
+
description: 'Alias for cross-review -- runs the same 2-model adversarial review engine'
|
|
45
45
|
},
|
|
46
46
|
'cross-review': {
|
|
47
47
|
script: 'bin/review/cross-review-engine.js',
|
|
48
|
-
description: 'Run
|
|
48
|
+
description: 'Run the 2-model adversarial cross-review engine (architect + security auditor)'
|
|
49
49
|
},
|
|
50
50
|
'classify': {
|
|
51
51
|
script: 'bin/change-classifier.js',
|
package/bin/verify-audit.js
CHANGED
|
@@ -3,7 +3,13 @@
|
|
|
3
3
|
const { verifyAuditChain } = require('./governance/audit-verifier');
|
|
4
4
|
const auditPath = process.argv[2] || '.planning/AUDIT.jsonl';
|
|
5
5
|
const result = verifyAuditChain(auditPath);
|
|
6
|
-
if (result.
|
|
6
|
+
if (result.missing) {
|
|
7
|
+
// Not a break: a project that has never written an audit entry has no chain to break. Measured
|
|
8
|
+
// before this branch existed: an absent log printed "❌ audit chain BROKEN at entry 0: unreadable:
|
|
9
|
+
// ENOENT..." and exited 1 — indistinguishable from real tamper detection to a brand-new user.
|
|
10
|
+
process.stdout.write(`ℹ️ no audit log yet at ${auditPath} — one will be created on first audited action\n`);
|
|
11
|
+
process.exit(0);
|
|
12
|
+
} else if (result.valid) {
|
|
7
13
|
process.stdout.write(`✅ audit chain valid: ${result.count} entries\n`);
|
|
8
14
|
process.exit(0);
|
|
9
15
|
} else {
|
package/bin/wizard/theme.js
CHANGED
|
@@ -76,7 +76,7 @@ const Theme = {
|
|
|
76
76
|
console.log(` ${this.colors.dim('│')}`);
|
|
77
77
|
console.log(` ${this.colors.dim('│')} ${this.colors.cyan('⭐ HELP US GROW:')}`);
|
|
78
78
|
console.log(` ${this.colors.dim('│')} - GitHub: ${this.colors.dim('https://github.com/sairam0424/MindForge')}`);
|
|
79
|
-
console.log(` ${this.colors.dim('│')} -
|
|
79
|
+
console.log(` ${this.colors.dim('│')} - Discussions: ${this.colors.dim('https://github.com/sairam0424/MindForge/discussions')}`);
|
|
80
80
|
console.log(` ${this.colors.dim('│')} - Docs: ${this.colors.dim('https://github.com/sairam0424/MindForge#documentation')}`);
|
|
81
81
|
console.log(` ${this.colors.dim('│')}`);
|
|
82
82
|
console.log(` ${this.colors.dim('—'.repeat(80))}\n`);
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [11.9.8] — 2026-09-21 — What the README claims, verified line by line
|
|
4
|
+
|
|
5
|
+
Patch release. v11.9.7's README rewrite got a literal, end-to-end audit: every command it
|
|
6
|
+
documents actually run — real `npx` installs, a real Homebrew install/uninstall cycle, a
|
|
7
|
+
real `npm i mindforge-sdk`, live registry checks — instead of re-reading the prose. 113
|
|
8
|
+
claims checked: 98 held up, 14 didn't, 1 couldn't be verified either way. All 14 confirmed
|
|
9
|
+
failures are fixed here.
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
**Two real bugs, not just docs**
|
|
14
|
+
|
|
15
|
+
- `--runtime claude,cursor` (or any comma-separated runtime list) crashed the installer
|
|
16
|
+
outright ("Cannot read properties of undefined (reading 'localDir')"). `--all` already
|
|
17
|
+
expanded into a real multi-runtime loop; a comma-separated `--runtime` value was never
|
|
18
|
+
split into it, so it was looked up as the literal key `RUNTIMES['claude,cursor']`, which
|
|
19
|
+
doesn't exist. Fixed, plus a graceful "Unknown runtime(s)" exit for typos instead of a raw
|
|
20
|
+
crash.
|
|
21
|
+
- `--minimal` claimed "no persona library" but shipped all 216 personas anyway — the
|
|
22
|
+
`minimalEntries` allowlist in `bin/installer-core.js` explicitly included `'personas'`.
|
|
23
|
+
Removed.
|
|
24
|
+
|
|
25
|
+
**Twelve documentation inaccuracies**
|
|
26
|
+
|
|
27
|
+
- Removed a `[--ads]` flag hint on `/mindforge:plan-phase` that was never wired into the
|
|
28
|
+
live command spec — it only exists in a much larger, never-ported legacy workflow file.
|
|
29
|
+
- Reworded the bare `npx mindforge-cc@latest` "auto-detects your runtime" claim: real
|
|
30
|
+
detection only runs inside the interactive TTY wizard (and even there it's a pre-selected
|
|
31
|
+
default you still confirm); every non-interactive invocation (CI, piped stdin, scripted)
|
|
32
|
+
hardcodes `--claude`.
|
|
33
|
+
- Disclosed that `/mindforge:health --repair` is documented in the command spec but not
|
|
34
|
+
wired into the CLI backing path — the flag is silently dropped, output is byte-identical
|
|
35
|
+
to plain `health`.
|
|
36
|
+
- Fixed `/mindforge:tokens --profile` — that flag doesn't exist; swapped in a real one
|
|
37
|
+
(`--optimise`) and listed the actual flag set.
|
|
38
|
+
- Disclosed that `node bin/mindforge-cli.js spawn <persona>` is a v1.0 stub that exits 1
|
|
39
|
+
with "NOT IMPLEMENTED", not a working scripted path.
|
|
40
|
+
- Corrected the License section's copyright holder to match `LICENSE` exactly.
|
|
41
|
+
- Fixed the architecture diagram's skill count: only 232 of the 355 skills live under
|
|
42
|
+
`.mindforge/` (engine tier); the other 123 are under `.agent/skills/` (extended tier).
|
|
43
|
+
- Corrected `bin/`'s "~22K LOC" claim to the measured ~32K raw / ~25K stripped-of-comments.
|
|
44
|
+
- Narrowed the Config reference doc-table row — that doc never mentions
|
|
45
|
+
`.mindforge/config.json`.
|
|
46
|
+
- Reworded the Threat model doc-table row — that file is explicitly historical (v1.0.0-era),
|
|
47
|
+
not re-reviewed against v11.x, and redirects to `SECURITY.md`.
|
|
48
|
+
- Reworded the USP-features doc-table row — that file has zero competitor comparison
|
|
49
|
+
content; it's the same honesty pass applied to MindForge's own features.
|
|
50
|
+
- Disclosed that the `mindforge-plugin-*` namespace has zero packages published under it
|
|
51
|
+
today.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [11.9.9] — 2026-09-23 — Release-readiness audit: 5 CRITICAL + 9 HIGH findings fixed
|
|
4
|
+
|
|
5
|
+
Patch release. An 8-agent audit workflow tested every MindForge surface (slash commands,
|
|
6
|
+
skills, personas, subagents, dynamic workflows, CLI/MCP, live install/verify/health) as a
|
|
7
|
+
release gate before shipping to real external users. Every finding was independently
|
|
8
|
+
re-verified against live code/commands before fixing, not trusted from the audit report
|
|
9
|
+
alone.
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
**CRITICAL**
|
|
14
|
+
|
|
15
|
+
- Removed the `godmode` skill entirely — a real, complete LLM jailbreak toolkit that was
|
|
16
|
+
shipping unconditionally in the published npm tarball, undisclosed anywhere in the docs.
|
|
17
|
+
- Rewrote `help.md`/`status.md`/`health.md`/`security-scan.md`: they claimed
|
|
18
|
+
PQAS/biometric-bypass/lattice-crypto signature verification was "active by default,"
|
|
19
|
+
directly contradicted by `quantum-crypto.js`'s own comments (simulated, off by default).
|
|
20
|
+
- Fixed `--minimal`: a second, unguarded persona-copy path in `installer-core.js` shipped
|
|
21
|
+
the full 218-file persona set regardless of `--minimal`. Gated on `!minimal` rather than
|
|
22
|
+
removed outright — the copy is a real, tested per-harness delivery contract, confirmed
|
|
23
|
+
against `harness-adapter-compliance.js`'s `ADAPTER_RECORDS`.
|
|
24
|
+
- Fixed `security-scan.md`'s "Sovereign Integrity Check," which called a CLI flag on a
|
|
25
|
+
module with no CLI entrypoint (always exits 0) — a CRITICAL gate that could never fail.
|
|
26
|
+
Replaced with the one real check (policy-engine tamper detection).
|
|
27
|
+
- Disclosed `bin/engine/skill-loader.js` as dead code (4 lines, zero callers). The real
|
|
28
|
+
trigger-matching mechanism is an LLM-followed protocol spec
|
|
29
|
+
(`.mindforge/engine/skills/loader.md`), not deterministic code.
|
|
30
|
+
|
|
31
|
+
**HIGH**
|
|
32
|
+
|
|
33
|
+
- `install-skill.md`: documented the literal action token (`install`/`register`/`audit`)
|
|
34
|
+
`bin/skill-registry.js` deliberately requires with no default.
|
|
35
|
+
- `marketplace.md`: disclosed that zero published packages exist today; labeled sample
|
|
36
|
+
output as illustrative, not reproducible.
|
|
37
|
+
- `status.md`: fixed a nonexistent-file reference (`AutoRunner.js` -> the real
|
|
38
|
+
`bin/autonomous/auto-runner.js`).
|
|
39
|
+
- `pr-review`/`cross-review`: was an unqualified alias with descriptions implying different
|
|
40
|
+
behavior — now honestly documented as the same 2-model adversarial review engine.
|
|
41
|
+
- 8 dynamic-workflow scripts (`feature-planner`, `tdd-sprint`, `onboard-codebase`,
|
|
42
|
+
`incident-response`, `release-prep`, `perf-optimize`, `refactor-plan`,
|
|
43
|
+
`verification-loop`): added null-guards after every dependent `agent()` call, matching
|
|
44
|
+
the pattern ~27 other scripts already use.
|
|
45
|
+
- `MANIFEST.md`: registered 32 engine-tier skills that existed on disk but were never
|
|
46
|
+
listed in the registration source of truth (`systematic-debugging`,
|
|
47
|
+
`test-driven-development`, and 30 others).
|
|
48
|
+
- 3 MF-series personas (`mf-tool`, `mf-memory`, `mf-executor`): replaced fictional tool
|
|
49
|
+
grants (`Database`, `API`, `task_boundary`, `commit_memory`,
|
|
50
|
+
`multi_replace_file_content`) with the real Claude Code tool vocabulary.
|
|
51
|
+
- `swarm-templates.json`: reconciled 11 dangling persona references (2 fixed by name
|
|
52
|
+
correction, 9 removed with no real equivalent); updated `docs/PERSONAS.md`'s
|
|
53
|
+
`data-privacy-engineer` writeup to match the real `privacy-engineer.md` persona it now
|
|
54
|
+
points to.
|
|
55
|
+
- `health` command: wired to `verifyInstall()` so it actually checks installation
|
|
56
|
+
integrity instead of only an npm-version lookup.
|
|
57
|
+
- `AUDIT.jsonl`: distinguished "no audit log yet" from "chain broken" so a brand-new
|
|
58
|
+
install doesn't report a false BROKEN status; shipped `verify-audit.js` by default (its
|
|
59
|
+
only dependencies already shipped unconditionally).
|
|
@@ -36,7 +36,7 @@ the complete, verified list.
|
|
|
36
36
|
| `/mindforge:note` | `note <text> [list|promote N]` | Zero-friction idea capture and todo promotion | v2.0.0 |
|
|
37
37
|
| `/mindforge:quick` | `quick` | Run a small, single-task plan without a full phase | |
|
|
38
38
|
| `/mindforge:status` | `status` | Show current phase, plan status, and next action | |
|
|
39
|
-
| `/mindforge:health` | `health
|
|
39
|
+
| `/mindforge:health` | `health` | Validate installation. `--repair` is documented but not wired into the CLI backing path — it's silently ignored, byte-identical to plain `health`. | |
|
|
40
40
|
| `/mindforge:review` | `review [N]` | Run a structured review pass for a phase | |
|
|
41
41
|
| `/mindforge:debug` | `debug [plan-id]` | Debug a failed plan with root-cause workflow | |
|
|
42
42
|
| `/mindforge:add-backlog` | `add-backlog <desc>` | Park ideas in 999.x "parking lot" | v2.0.0 |
|
|
@@ -70,7 +70,7 @@ the complete, verified list.
|
|
|
70
70
|
| `/mindforge:metrics` | `metrics [--phase N]` | Compute quality and throughput metrics | |
|
|
71
71
|
| `/mindforge:profile-team` | `profile-team` | Generate team skill and ownership profile | |
|
|
72
72
|
| `/mindforge:benchmark` | `benchmark [--skill X]` | Measure skill effectiveness | |
|
|
73
|
-
| `/mindforge:tokens` | `tokens [--
|
|
73
|
+
| `/mindforge:tokens` | `tokens [--phase N] [--session ID] [--window short\|medium\|long] [--optimise]` | Token usage profiling and optimisation (`--profile`/`--summary` don't exist) | |
|
|
74
74
|
|
|
75
75
|
### Integrations & distribution
|
|
76
76
|
|
|
@@ -24,7 +24,7 @@ and be followed by `=`. Prose bullets that merely mention `[KEY]` are not parsed
|
|
|
24
24
|
|
|
25
25
|
| Key | Example |
|
|
26
26
|
| :--- | :--- |
|
|
27
|
-
| `[VERSION]` | `11.9.
|
|
27
|
+
| `[VERSION]` | `11.9.8` — must match `^\d+\.\d+\.\d+$` |
|
|
28
28
|
| `[REACTIVE_MODE]` | `true` |
|
|
29
29
|
| `[PLANNER]` | `claude-opus-4-7` |
|
|
30
30
|
| `[EXECUTOR]` | `claude-sonnet-4-6` |
|
|
@@ -56,6 +56,9 @@ for older configs.
|
|
|
56
56
|
| `[VERIFIER]` | `VERIFIER_MODEL` | Testing and UAT verification. | `claude-sonnet-4-6` |
|
|
57
57
|
| `[SECURITY]` | `SECURITY_MODEL` | Sensitive security scanning. | `claude-opus-4-7` |
|
|
58
58
|
| `[DEBUG]` | — | Debugging and root-cause analysis. | `claude-opus-4-7` |
|
|
59
|
+
| `[RESEARCH]` | `RESEARCH_MODEL` | Domain research during planning. | `gemini-2.5-pro` |
|
|
60
|
+
| `[QA]` | `QA_MODEL` | Quality-assurance / test-writing tasks. | `claude-sonnet-4-6` |
|
|
61
|
+
| `[QUICK]` | `QUICK_MODEL` | Tier-1 budget-biased tasks. | — |
|
|
59
62
|
|
|
60
63
|
**Values are free-form strings** — the schema does not constrain them to a list, so a new model
|
|
61
64
|
id works without a framework upgrade. The ids shipped in `MINDFORGE.md` today are
|
|
@@ -91,13 +94,15 @@ than editing your registry to satisfy it.
|
|
|
91
94
|
|
|
92
95
|
These settings control the `/mindforge:auto` engine's behavior and performance.
|
|
93
96
|
|
|
97
|
+
> [!WARNING]
|
|
98
|
+
> `AUTONOMOUS_MODE_ENABLED`, `STUCK_DETECTION_TIMEOUT_MS`, `STEERING_CHECK_INTERVAL_MS`, and
|
|
99
|
+
> `NODE_REPAIR_ENABLED` do not appear anywhere in `.mindforge/MINDFORGE-SCHEMA.json`, and nothing
|
|
100
|
+
> in `bin/autonomous/` reads them — they are not currently configurable keys. Only the two rows
|
|
101
|
+
> below are real.
|
|
102
|
+
|
|
94
103
|
| Key | Description | Default |
|
|
95
104
|
| :--- | :--- | :--- |
|
|
96
|
-
| `AUTONOMOUS_MODE_ENABLED` | Global toggle for autonomous task execution. | `true` |
|
|
97
105
|
| `MAX_TASKS_PER_PHASE` | Limit on task expansion during planning. | `15` |
|
|
98
|
-
| `STUCK_DETECTION_TIMEOUT_MS` | Time before an agent is considered "looping" or stuck. | `300000` |
|
|
99
|
-
| `STEERING_CHECK_INTERVAL_MS` | How often the engine checks for user guidance. | `5000` |
|
|
100
|
-
| `NODE_REPAIR_ENABLED` | If true, the engine attempts to self-heal on failures. | `true` |
|
|
101
106
|
| `COMPACTION_THRESHOLD_PCT` | The context usage percentage at which to trigger compaction. | `70` |
|
|
102
107
|
|
|
103
108
|
---
|
|
@@ -111,8 +116,7 @@ Define the rules that code must follow to pass the `VERIFY` phase.
|
|
|
111
116
|
| `MIN_TEST_COVERAGE_PCT` | Required test coverage for any new module. | `80` |
|
|
112
117
|
| `MAX_FUNCTION_LINES` | Maximum lines allowed for a single function. | `40` |
|
|
113
118
|
| `MAX_CYCLOMATIC_COMPLEXITY` | Maximum complexity score (McCune) allowed. | `10` |
|
|
114
|
-
| `
|
|
115
|
-
| `ANTIPATTERN_SENSITIVITY` | Frequency at which suspicious patterns are flagged. | `0.7` |
|
|
119
|
+
| `BLOCK_ON_MEDIUM_SECURITY_FINDINGS` | Fail the gate if any medium security findings exist. | `true` |
|
|
116
120
|
|
|
117
121
|
---
|
|
118
122
|
|
|
@@ -136,37 +140,18 @@ Control reasoning snapshot retention for the Temporal Steering system.
|
|
|
136
140
|
| Key | Description | Default |
|
|
137
141
|
| :--- | :--- | :--- |
|
|
138
142
|
| `temporal.max_snapshots` | Maximum number of reasoning snapshots retained per session. | `50` |
|
|
139
|
-
| `temporal.max_age_days` | Snapshots older than this value (in days) are auto-pruned. | `
|
|
140
|
-
|
|
141
|
-
---
|
|
142
|
-
|
|
143
|
-
## 6. Rate Limiting (v11.0.0+)
|
|
144
|
-
|
|
145
|
-
Configure request rate limits for the dashboard and API endpoints.
|
|
146
|
-
|
|
147
|
-
| Key | Description | Default |
|
|
148
|
-
| :--- | :--- | :--- |
|
|
149
|
-
| `rate_limiting.dashboard_rpm` | Maximum requests per minute to dashboard endpoints. | `120` |
|
|
150
|
-
|
|
151
|
-
---
|
|
152
|
-
|
|
153
|
-
## 7. Session Configuration (v11.0.0+)
|
|
154
|
-
|
|
155
|
-
Control session token behaviour for dashboard authentication.
|
|
156
|
-
|
|
157
|
-
| Key | Description | Default |
|
|
158
|
-
| :--- | :--- | :--- |
|
|
159
|
-
| `session.token_expiry_hours` | Hours before a dashboard bearer token expires. | `24` |
|
|
143
|
+
| `temporal.max_age_days` | Snapshots older than this value (in days) are auto-pruned. | `7` |
|
|
160
144
|
|
|
161
145
|
---
|
|
162
146
|
|
|
163
|
-
##
|
|
164
|
-
|
|
165
|
-
Tune parallel wave execution behaviour.
|
|
147
|
+
## 6. Rate Limiting, Session Configuration, Wave Execution
|
|
166
148
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
149
|
+
> [!WARNING]
|
|
150
|
+
> `rate_limiting.dashboard_rpm`, `session.token_expiry_hours`, and
|
|
151
|
+
> `wave_execution.max_concurrency` are not present in the current `.mindforge/config.json` and
|
|
152
|
+
> nothing in the live `bin/` runtime reads them. The first two only ever existed as one-time
|
|
153
|
+
> values written by a historical migration (`bin/migrations/10.7.0-to-11.0.0.js`); the third
|
|
154
|
+
> doesn't appear anywhere in the codebase. Do not rely on setting any of these three today.
|
|
170
155
|
|
|
171
156
|
---
|
|
172
157
|
|
|
@@ -181,4 +166,4 @@ To ensure enterprise safety, several rules **cannot** be disabled via `MINDFORGE
|
|
|
181
166
|
5. **Critical Security Blocks:** High/Critical findings *will* block the `SHIP` command.
|
|
182
167
|
|
|
183
168
|
> [!WARNING]
|
|
184
|
-
> Attempting to disable these rules in your configuration will result in a silent enforcement of the defaults.
|
|
169
|
+
> Attempting to disable these rules in your configuration will result in a silent enforcement of the defaults.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# MindForge SDK API — Reference (
|
|
1
|
+
# MindForge SDK API — Reference (v11.9.8)
|
|
2
2
|
|
|
3
3
|
## Package
|
|
4
4
|
|
|
@@ -9,11 +9,17 @@
|
|
|
9
9
|
From `sdk/src/index.ts`:
|
|
10
10
|
|
|
11
11
|
- `MindForgeClient`
|
|
12
|
-
- `MindForgeEventStream`
|
|
13
|
-
- `
|
|
12
|
+
- `MindForgeEventStream` — SSE-based event stream (see below)
|
|
13
|
+
- `WebSocketEventStream` — WebSocket-based alternative; requires a global `WebSocket` (Node 22+,
|
|
14
|
+
a browser, or the optional `ws` package assigned to `globalThis.WebSocket` — the SDK declares
|
|
15
|
+
no runtime dependencies, so nothing is installed for you)
|
|
16
|
+
- `commands` — slash-command string builders
|
|
17
|
+
- `batch(commands: string[])` — joins an array of command strings with `&&`
|
|
14
18
|
- `MindForgeMemory`
|
|
15
19
|
- Types: `MindForgeConfig`, `PhaseResult`, `TaskResult`, `SecurityFinding`,
|
|
16
|
-
`GateResult`, `HealthReport`, `HealthIssue`, `MindForgeEvent`, `CommandOptions
|
|
20
|
+
`GateResult`, `HealthReport`, `HealthIssue`, `MindForgeEvent`, `CommandOptions`,
|
|
21
|
+
`AuditLogEntry`, `WaveExecutionResult`, `MigrationResult`, `StreamChunk`,
|
|
22
|
+
`StreamingExecutionResult`, `BatchExecutionRequest`, `BatchExecutionResult`
|
|
17
23
|
- `VERSION`
|
|
18
24
|
|
|
19
25
|
## MindForgeClient
|
|
@@ -13,12 +13,13 @@ Skills are domain knowledge packs loaded on demand. They are stored as
|
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
## SKILL.md schema (frontmatter)
|
|
16
|
-
Required fields
|
|
16
|
+
Required fields, enforced by `scripts/ci/validate-assets.js` and `tests/skills-platform.test.js`:
|
|
17
17
|
- `name`: string (stable in 1.x.x)
|
|
18
|
-
- `description`: string
|
|
19
|
-
- `triggers`: array of keywords
|
|
20
18
|
- `version`: semver string
|
|
21
|
-
- `
|
|
19
|
+
- `status`: string (e.g. `stable`)
|
|
20
|
+
- `triggers`: comma-separated keyword string, minimum 10 terms, unique across all engine skills
|
|
21
|
+
|
|
22
|
+
`description` and `owner` are commonly present but are **not** enforced as required fields.
|
|
22
23
|
|
|
23
24
|
Optional fields:
|
|
24
25
|
- `scope`: `core | org | project`
|
|
@@ -30,8 +31,9 @@ Example:
|
|
|
30
31
|
---
|
|
31
32
|
name: security-review
|
|
32
33
|
version: 1.0.0
|
|
34
|
+
status: stable
|
|
33
35
|
description: Secure coding review checklist and threat modeling prompts
|
|
34
|
-
triggers:
|
|
36
|
+
triggers: auth, payment, pii, encryption, secrets, credential, oauth, token, session, permission
|
|
35
37
|
owner: mindforge-core
|
|
36
38
|
scope: core
|
|
37
39
|
---
|
|
@@ -53,5 +55,5 @@ Skills can be published to the npm registry under `mindforge-skill-*`.
|
|
|
53
55
|
See `docs/skills-publishing-guide.md` for full workflow.
|
|
54
56
|
|
|
55
57
|
## Stability contract
|
|
56
|
-
As of v1.0.0, the `name` values of the
|
|
57
|
-
fields may be added in minor versions; removals require a major version bump.
|
|
58
|
+
As of v1.0.0, the `name` values of the 232 engine-tier skills (`.mindforge/skills/`) are stable.
|
|
59
|
+
New optional fields may be added in minor versions; removals require a major version bump.
|
|
@@ -171,8 +171,8 @@ mindforge <command> [options]
|
|
|
171
171
|
| `security-scan` | Validate configuration and run security checks |
|
|
172
172
|
| `health` | Verify project health and installation integrity |
|
|
173
173
|
| `headless` | Run MindForge agent in headless (non-interactive) mode |
|
|
174
|
-
| `pr-review` |
|
|
175
|
-
| `cross-review` | Run
|
|
174
|
+
| `pr-review` | Alias for `cross-review` — same 2-model adversarial review engine |
|
|
175
|
+
| `cross-review` | Run the 2-model adversarial cross-review engine (architect + security auditor) |
|
|
176
176
|
| `classify` | Classify changes into governance tiers |
|
|
177
177
|
| `approve` | Generate a governance approval signature to unblock Tier 3 gates |
|
|
178
178
|
| `validate-skill` | Run Level 1 & 2 validation on a SKILL.md file |
|
package/docs/faq.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# MindForge FAQ (v11.9.
|
|
1
|
+
# MindForge FAQ (v11.9.9)
|
|
2
2
|
|
|
3
3
|
## Is MindForge tied to Claude only?
|
|
4
4
|
No. MindForge supports Claude Code and Antigravity. Install with `--claude`,
|
|
@@ -39,7 +39,7 @@ Plugins are preferred for sharing and versioning.
|
|
|
39
39
|
|
|
40
40
|
## Dynamic Workflows
|
|
41
41
|
|
|
42
|
-
**Q: How many workflows does MindForge
|
|
42
|
+
**Q: How many workflows does MindForge include?**
|
|
43
43
|
35 pre-built multi-agent workflows across 5 tiers: Research (5), Dev (14), Ops (6), Intelligence (7), Beast (3).
|
|
44
44
|
|
|
45
45
|
**Q: How do I run a workflow?**
|
|
@@ -55,10 +55,13 @@ The `deep-research` workflow was removed before the v11.8.0 release (the superpo
|
|
|
55
55
|
## Version & Stability
|
|
56
56
|
|
|
57
57
|
**Q: What version is current?**
|
|
58
|
-
v11.9.
|
|
58
|
+
v11.9.9 — verify with `node bin/mindforge-cli.js --version`
|
|
59
59
|
|
|
60
|
-
**Q:
|
|
61
|
-
|
|
60
|
+
**Q: Was v11.9.0 production-stable?**
|
|
61
|
+
At that release: yes, by the IQ200 deep-audit (258 discrete checks across 14 dimensions),
|
|
62
|
+
258/258 passing, 0 CVEs, 0 test failures, 0 ESLint errors, 0 TypeScript errors. That was a
|
|
63
|
+
one-time, point-in-time audit rather than a repeated gate, so it is not re-run per release —
|
|
64
|
+
see "What is the test coverage?" below for the number that is.
|
|
62
65
|
|
|
63
66
|
**Q: Which npm dist-tag should I install?**
|
|
64
67
|
`latest` is every published release, including patches. `stable` tracks the newest
|
|
@@ -74,10 +77,10 @@ release behind. Check what each points at right now with `npm dist-tag ls mindfo
|
|
|
74
77
|
## Known Limitations
|
|
75
78
|
|
|
76
79
|
**Q: Why does `spawn architect` exit with an error?**
|
|
77
|
-
Spawn dispatch is not
|
|
80
|
+
Spawn dispatch is a v1.0 stub — still not implemented as of v11.9.8. Use `/mindforge:auto` or `/mindforge:next` from Claude Code instead.
|
|
78
81
|
|
|
79
82
|
**Q: Why does ZTAI show a Tier-3 warning?**
|
|
80
|
-
Tier-3 trust uses in-process key simulation in v11.
|
|
83
|
+
Tier-3 trust uses in-process key simulation in v11.x. `bin/governance/ztai-manager.js` warns on this itself: key material resides in the Node.js heap, not hardware-isolated — do not use Tier-3 trust for production credential workflows. `SECURITY_TIER_3_SIMULATED = true` is the documented v11.x behavior. Hardware TPM/HSM is planned for v12.x.
|
|
81
84
|
|
|
82
85
|
**Q: What is the test coverage?**
|
|
83
86
|
140 test files: 137 pass, 0 failures, 3 env-dependent skips (`browser.test.js` and
|
package/docs/getting-started.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# MindForge — Getting Started (v11.9.
|
|
1
|
+
# MindForge — Getting Started (v11.9.9)
|
|
2
2
|
|
|
3
3
|
This guide gets you from zero to a working MindForge project in under five minutes.
|
|
4
4
|
|
|
@@ -17,7 +17,8 @@ MindForge ships across several channels. Pick the one that matches how you work
|
|
|
17
17
|
Zero-config setup that scaffolds the full framework:
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
|
-
#
|
|
20
|
+
# Interactive wizard (TTY only) -- pre-selects a detected runtime, you confirm it.
|
|
21
|
+
# Non-interactive/CI/piped invocations skip the wizard and default to --claude.
|
|
21
22
|
npx mindforge-cc@latest
|
|
22
23
|
|
|
23
24
|
# Antigravity (local development)
|
|
@@ -29,6 +30,11 @@ npx mindforge-cc@latest --claude --local
|
|
|
29
30
|
|
|
30
31
|
After installation, the `mindforge` CLI command is available for runtime operations (health checks, security scans, headless execution, etc.).
|
|
31
32
|
|
|
33
|
+
If a `CLAUDE.md` already exists in the target directory, the installer backs it up
|
|
34
|
+
(`CLAUDE.md.backup-<timestamp>`) before writing its own — check that backup if you had custom
|
|
35
|
+
content there. Hooks are snapshotted by Claude Code at session start, so if the harness was
|
|
36
|
+
already open during install, restart it before expecting a newly-registered hook to fire.
|
|
37
|
+
|
|
32
38
|
**Global install** (system-wide `/mindforge` commands for your primary AI coding runtime):
|
|
33
39
|
|
|
34
40
|
```bash
|
|
@@ -106,7 +112,7 @@ MindForge adapts to your existing engineering environment via runtime flags:
|
|
|
106
112
|
|
|
107
113
|
**Run any workflow:**
|
|
108
114
|
```bash
|
|
109
|
-
node bin/mindforge-cli.js workflow list # browse all
|
|
115
|
+
node bin/mindforge-cli.js workflow list # browse all 35
|
|
110
116
|
node bin/mindforge-cli.js workflow info code-audit # details + phases
|
|
111
117
|
```
|
|
112
118
|
Or use slash commands: `/mindforge:wf-code-audit`
|
|
@@ -114,7 +120,7 @@ Or use slash commands: `/mindforge:wf-code-audit`
|
|
|
114
120
|
## Your First 5 Minutes with MindForge
|
|
115
121
|
|
|
116
122
|
1. **Verify install:** `node bin/mindforge-cli.js health`
|
|
117
|
-
2. **Check version:** `node bin/mindforge-cli.js --version` (should print `11.9.
|
|
123
|
+
2. **Check version:** `node bin/mindforge-cli.js --version` (should print `11.9.9`)
|
|
118
124
|
3. **List workflows:** `node bin/mindforge-cli.js workflow list`
|
|
119
125
|
4. **Run first slash command:** Open Claude Code → `/mindforge:status`
|
|
120
126
|
5. **Onboard your codebase:** Open Claude Code → `/mindforge:wf-onboard-codebase`
|
package/docs/sdk-reference.md
CHANGED
|
@@ -14,11 +14,11 @@ import {
|
|
|
14
14
|
} from 'mindforge-sdk';
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
Current SDK version: `11.9.
|
|
17
|
+
Current SDK version: `11.9.9`
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
21
|
-
## SDK Exports (v11.9.
|
|
21
|
+
## SDK Exports (v11.9.9)
|
|
22
22
|
|
|
23
23
|
```javascript
|
|
24
24
|
const {
|
|
@@ -28,7 +28,7 @@ const {
|
|
|
28
28
|
commands, // Command registry
|
|
29
29
|
batch, // Batch execution
|
|
30
30
|
MindForgeMemory, // Memory interface
|
|
31
|
-
VERSION // '11.9.
|
|
31
|
+
VERSION // '11.9.9'
|
|
32
32
|
} = require('mindforge-sdk');
|
|
33
33
|
// or: import { MindForgeClient, VERSION } from 'mindforge-sdk';
|
|
34
34
|
```
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# MindForge — Security Policy
|
|
2
|
+
|
|
3
|
+
> This file used to duplicate the repo's security policy and had drifted out of sync (it was
|
|
4
|
+
> still listing a `5.x.x`/`4.x.x`/`< 4.0.0` support table years behind the real `11.x` line). The
|
|
5
|
+
> canonical, kept-current security policy — supported versions, vulnerability reporting process,
|
|
6
|
+
> and the full "Security Features" / "Known Mitigations & Limitations" breakdown — lives at the
|
|
7
|
+
> repo root: **[`/SECURITY.md`](../../SECURITY.md)**. Read that file, not this one.
|
|
8
|
+
|
|
9
|
+
For the outward agentic-harness threat model (prompt injection, poisoned config/hooks/MCP,
|
|
10
|
+
supply-chain risk in skills/agents, sandboxing) see
|
|
11
|
+
**[`/MINDFORGE-AGENTIC-SECURITY.md`](../../MINDFORGE-AGENTIC-SECURITY.md)**.
|
|
12
|
+
|
|
13
|
+
For the current, honestly-labeled status of Zero-Trust Agentic Identity specifically, see
|
|
14
|
+
**[ZTAI Overview](./ZTAI-OVERVIEW.md)** — read its status banner first.
|