bmad-module-skill-forge 0.9.0 → 0.10.1-alpha.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/.claude-plugin/marketplace.json +39 -0
- package/.gitattributes +16 -0
- package/README.md +105 -38
- package/docs/404.md +13 -10
- package/docs/RELEASING.md +185 -0
- package/docs/STABILITY.md +123 -0
- package/docs/_data/pinned.yaml +98 -0
- package/docs/agents.md +16 -11
- package/docs/architecture.md +221 -0
- package/docs/bmad-synergy.md +11 -13
- package/docs/concepts.md +18 -108
- package/docs/examples.md +121 -80
- package/docs/getting-started.md +85 -147
- package/docs/how-it-works.md +25 -536
- package/docs/index.md +44 -27
- package/docs/skill-model.md +328 -0
- package/docs/troubleshooting.md +39 -0
- package/docs/verifying-a-skill.md +232 -0
- package/docs/why-skf.md +93 -0
- package/docs/workflows.md +119 -13
- package/package.json +25 -4
- package/src/README.md +23 -25
- package/src/forger/forge-tier.yaml +4 -2
- package/src/forger/preferences.yaml +7 -1
- package/src/knowledge/agentskills-spec.md +1 -1
- package/src/knowledge/architecture-verification.md +1 -1
- package/src/knowledge/ccc-bridge.md +16 -15
- package/src/knowledge/overview.md +11 -11
- package/src/knowledge/progressive-capability.md +3 -3
- package/src/knowledge/provenance-tracking.md +9 -3
- package/src/knowledge/qmd-registry.md +8 -8
- package/src/knowledge/skf-knowledge-index.csv +2 -2
- package/src/knowledge/skill-lifecycle.md +16 -1
- package/src/knowledge/split-body-strategy.md +1 -1
- package/src/knowledge/version-paths.md +17 -12
- package/src/module-help.csv +18 -17
- package/src/module.yaml +4 -0
- package/src/shared/health-check.md +372 -0
- package/src/shared/references/feasibility-report-schema.md +86 -0
- package/src/shared/references/headless-gate-convention.md +62 -0
- package/src/shared/references/output-contract-schema.md +35 -0
- package/src/shared/references/pipeline-contracts.md +102 -0
- package/src/shared/scripts/skf-atomic-write.py +370 -0
- package/src/shared/scripts/skf-manifest-ops.py +236 -0
- package/src/shared/scripts/skf-preflight.py +164 -0
- package/src/shared/scripts/skf-rebuild-managed-sections.py +201 -0
- package/src/shared/scripts/skf-severity-classify.py +163 -0
- package/src/shared/scripts/skf-skill-inventory.py +210 -0
- package/src/shared/scripts/skf-structural-diff.py +257 -0
- package/src/shared/scripts/skf-validate-frontmatter.py +318 -0
- package/src/shared/scripts/skf-validate-output.py +247 -0
- package/src/skf-analyze-source/SKILL.md +57 -0
- package/src/skf-analyze-source/assets/skill-brief-schema.md +125 -0
- package/src/skf-analyze-source/references/unit-detection-heuristics.md +124 -0
- package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-01-init.md +6 -66
- package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-01b-continue.md +4 -59
- package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-02-scan-project.md +7 -68
- package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-03-identify-units.md +6 -66
- package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-04-map-and-detect.md +7 -68
- package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-05-recommend.md +6 -66
- package/src/{workflows/analyze-source → skf-analyze-source}/steps-c/step-06-generate-briefs.md +14 -66
- package/src/skf-analyze-source/steps-c/step-07-health-check.md +22 -0
- package/src/skf-audit-skill/SKILL.md +59 -0
- package/src/{workflows/audit-skill/data → skf-audit-skill/assets}/drift-report-template.md +7 -7
- package/src/{workflows/audit-skill/data → skf-audit-skill/references}/severity-rules.md +11 -11
- package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-01-init.md +24 -68
- package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-02-re-index.md +36 -71
- package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-03-structural-diff.md +21 -63
- package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-04-semantic-diff.md +6 -65
- package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-05-severity-classify.md +5 -63
- package/src/{workflows/audit-skill → skf-audit-skill}/steps-c/step-06-report.md +10 -59
- package/src/skf-audit-skill/steps-c/step-07-health-check.md +22 -0
- package/src/skf-brief-skill/SKILL.md +53 -0
- package/src/{workflows/brief-skill/data → skf-brief-skill/assets}/scope-templates.md +23 -0
- package/src/skf-brief-skill/assets/skill-brief-schema.md +206 -0
- package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-01-gather-intent.md +6 -67
- package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-02-analyze-target.md +6 -66
- package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-03-scope-definition.md +12 -68
- package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-04-confirm-brief.md +5 -63
- package/src/{workflows/brief-skill → skf-brief-skill}/steps-c/step-05-write-brief.md +10 -69
- package/src/skf-brief-skill/steps-c/step-06-health-check.md +22 -0
- package/src/skf-create-skill/SKILL.md +63 -0
- package/src/{workflows/create-skill/data → skf-create-skill/assets}/compile-assembly-rules.md +60 -0
- package/src/{workflows/create-skill/data → skf-create-skill/assets}/skill-sections.md +92 -23
- package/src/skf-create-skill/assets/tessl-dismissal-rules.md +102 -0
- package/src/{workflows/create-skill/data → skf-create-skill/references}/extraction-patterns-tracing.md +13 -13
- package/src/{workflows/create-skill/data → skf-create-skill/references}/extraction-patterns.md +8 -3
- package/src/skf-create-skill/references/source-resolution-protocols.md +239 -0
- package/src/{workflows/create-skill/data → skf-create-skill/references}/tier-degradation-rules.md +8 -7
- package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-01-load-brief.md +25 -63
- package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-02-ecosystem-check.md +8 -64
- package/src/skf-create-skill/steps-c/step-03-extract.md +379 -0
- package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-03d-component-extraction.md +18 -35
- package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-04-enrich.md +12 -69
- package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-05-compile.md +71 -75
- package/src/skf-create-skill/steps-c/step-06-validate.md +267 -0
- package/src/{workflows/create-skill → skf-create-skill}/steps-c/step-07-generate-artifacts.md +30 -74
- package/src/skf-create-skill/steps-c/step-08-report.md +145 -0
- package/src/skf-create-skill/steps-c/step-09-health-check.md +23 -0
- package/src/{workflows/create-skill/steps-c → skf-create-skill/steps-c/sub}/step-02b-ccc-discover.md +8 -66
- package/src/skf-create-skill/steps-c/sub/step-03b-fetch-temporal.md +229 -0
- package/src/{workflows/create-skill/steps-c → skf-create-skill/steps-c/sub}/step-03c-fetch-docs.md +18 -42
- package/src/skf-create-stack-skill/SKILL.md +64 -0
- package/src/{workflows/create-stack-skill/data → skf-create-stack-skill/assets}/stack-skill-template.md +2 -1
- package/src/{workflows/create-stack-skill/data → skf-create-stack-skill/references}/compose-mode-rules.md +19 -5
- package/src/{workflows/create-stack-skill/data → skf-create-stack-skill/references}/integration-patterns.md +1 -1
- package/src/{workflows/create-stack-skill/data → skf-create-stack-skill/references}/manifest-patterns.md +10 -10
- package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-01-init.md +14 -55
- package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-02-detect-manifests.md +29 -63
- package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-03-rank-and-confirm.md +9 -59
- package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-04-parallel-extract.md +29 -64
- package/src/skf-create-stack-skill/steps-c/step-05-detect-integrations.md +164 -0
- package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-06-compile-stack.md +7 -60
- package/src/skf-create-stack-skill/steps-c/step-07-generate-output.md +328 -0
- package/src/{workflows/create-stack-skill → skf-create-stack-skill}/steps-c/step-08-validate.md +17 -63
- package/src/skf-create-stack-skill/steps-c/step-09-report.md +128 -0
- package/src/skf-create-stack-skill/steps-c/step-10-health-check.md +22 -0
- package/src/skf-drop-skill/SKILL.md +57 -0
- package/src/{workflows/drop-skill → skf-drop-skill}/steps-c/step-01-select.md +9 -69
- package/src/{workflows/drop-skill → skf-drop-skill}/steps-c/step-02-execute.md +30 -106
- package/src/skf-drop-skill/steps-c/step-03-report.md +83 -0
- package/src/skf-drop-skill/steps-c/step-04-health-check.md +22 -0
- package/src/skf-export-skill/SKILL.md +57 -0
- package/src/skf-export-skill/assets/managed-section-format.md +138 -0
- package/src/{workflows/export-skill/data → skf-export-skill/assets}/snippet-format.md +8 -12
- package/src/skf-export-skill/steps-c/step-01-load-skill.md +247 -0
- package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-02-package.md +5 -58
- package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-03-generate-snippet.md +15 -77
- package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-04-update-context.md +59 -133
- package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-05-token-report.md +4 -58
- package/src/{workflows/export-skill → skf-export-skill}/steps-c/step-06-summary.md +20 -64
- package/src/skf-export-skill/steps-c/step-07-health-check.md +22 -0
- package/src/skf-forger/SKILL.md +110 -0
- package/src/skf-forger/bmad-skill-manifest.yaml +11 -0
- package/src/skf-quick-skill/SKILL.md +56 -0
- package/src/{workflows/quick-skill/data → skf-quick-skill/references}/registry-resolution.md +6 -6
- package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-01-resolve-target.md +9 -62
- package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-02-ecosystem-check.md +5 -59
- package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-03-quick-extract.md +18 -61
- package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-04-compile.md +6 -60
- package/src/{workflows/quick-skill → skf-quick-skill}/steps-c/step-05-validate.md +58 -78
- package/src/skf-quick-skill/steps-c/step-06-write.md +73 -0
- package/src/skf-quick-skill/steps-c/step-07-health-check.md +22 -0
- package/src/skf-refine-architecture/SKILL.md +57 -0
- package/src/{workflows/refine-architecture/data → skf-refine-architecture/references}/refinement-rules.md +16 -16
- package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-01-init.md +6 -63
- package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-02-gap-analysis.md +29 -71
- package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-03-issue-detection.md +5 -65
- package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-04-improvements.md +5 -64
- package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-05-compile.md +5 -56
- package/src/{workflows/refine-architecture → skf-refine-architecture}/steps-c/step-06-report.md +14 -64
- package/src/skf-refine-architecture/steps-c/step-07-health-check.md +22 -0
- package/src/skf-rename-skill/SKILL.md +58 -0
- package/src/{workflows/rename-skill → skf-rename-skill}/steps-c/step-01-select.md +12 -73
- package/src/{workflows/rename-skill → skf-rename-skill}/steps-c/step-02-execute.md +32 -113
- package/src/skf-rename-skill/steps-c/step-03-report.md +83 -0
- package/src/skf-rename-skill/steps-c/step-04-health-check.md +22 -0
- package/src/skf-setup/SKILL.md +55 -0
- package/src/{workflows/setup-forge → skf-setup}/steps-c/step-01-detect-and-tier.md +6 -62
- package/src/{workflows/setup-forge → skf-setup}/steps-c/step-01b-ccc-index.md +9 -65
- package/src/{workflows/setup-forge → skf-setup}/steps-c/step-02-write-config.md +15 -60
- package/src/{workflows/setup-forge → skf-setup}/steps-c/step-03-auto-index.md +7 -66
- package/src/skf-setup/steps-c/step-04-report.md +92 -0
- package/src/skf-setup/steps-c/step-05-health-check.md +22 -0
- package/src/skf-test-skill/SKILL.md +59 -0
- package/src/skf-test-skill/references/migration-section-rules.md +114 -0
- package/src/skf-test-skill/references/scoring-rules.md +207 -0
- package/src/skf-test-skill/references/source-access-protocol.md +109 -0
- package/src/skf-test-skill/scripts/compute-score.py +310 -0
- package/src/skf-test-skill/steps-c/step-01-init.md +238 -0
- package/src/{workflows/test-skill → skf-test-skill}/steps-c/step-02-detect-mode.md +4 -62
- package/src/skf-test-skill/steps-c/step-03-coverage-check.md +347 -0
- package/src/skf-test-skill/steps-c/step-04-coherence-check.md +239 -0
- package/src/{workflows/test-skill → skf-test-skill}/steps-c/step-04b-external-validators.md +42 -77
- package/src/skf-test-skill/steps-c/step-05-score.md +266 -0
- package/src/skf-test-skill/steps-c/step-06-report.md +290 -0
- package/src/skf-test-skill/steps-c/step-07-health-check.md +25 -0
- package/src/skf-test-skill/templates/test-report-template.md +58 -0
- package/src/skf-update-skill/SKILL.md +58 -0
- package/src/{workflows/update-skill/data → skf-update-skill/references}/manual-section-rules.md +6 -6
- package/src/{workflows/update-skill/data → skf-update-skill/references}/merge-conflict-rules.md +5 -5
- package/src/skf-update-skill/references/remote-source-resolution.md +94 -0
- package/src/{workflows/update-skill → skf-update-skill}/steps-c/step-01-init.md +22 -69
- package/src/skf-update-skill/steps-c/step-02-detect-changes.md +255 -0
- package/src/skf-update-skill/steps-c/step-03-re-extract.md +336 -0
- package/src/{workflows/update-skill → skf-update-skill}/steps-c/step-04-merge.md +60 -72
- package/src/{workflows/update-skill → skf-update-skill}/steps-c/step-05-validate.md +5 -62
- package/src/skf-update-skill/steps-c/step-06-write.md +278 -0
- package/src/{workflows/update-skill → skf-update-skill}/steps-c/step-07-report.md +11 -66
- package/src/skf-update-skill/steps-c/step-08-health-check.md +22 -0
- package/src/skf-verify-stack/SKILL.md +60 -0
- package/src/skf-verify-stack/assets/feasibility-report-template.md +76 -0
- package/src/{workflows/verify-stack/data → skf-verify-stack/references}/coverage-patterns.md +12 -4
- package/src/skf-verify-stack/references/integration-verification-rules.md +78 -0
- package/src/skf-verify-stack/steps-c/step-01-init.md +178 -0
- package/src/{workflows/verify-stack → skf-verify-stack}/steps-c/step-02-coverage.md +27 -72
- package/src/skf-verify-stack/steps-c/step-03-integrations.md +179 -0
- package/src/{workflows/verify-stack → skf-verify-stack}/steps-c/step-04-requirements.md +14 -67
- package/src/skf-verify-stack/steps-c/step-05-synthesize.md +147 -0
- package/src/skf-verify-stack/steps-c/step-06-report.md +156 -0
- package/src/skf-verify-stack/steps-c/step-07-health-check.md +25 -0
- package/tools/cli/commands/install.js +1 -1
- package/tools/cli/commands/status.js +21 -23
- package/tools/cli/commands/uninstall.js +11 -19
- package/tools/cli/commands/update.js +2 -2
- package/tools/cli/lib/ide-skills.js +216 -0
- package/tools/cli/lib/installer.js +29 -52
- package/tools/cli/lib/manifest.js +11 -5
- package/tools/cli/lib/platform-codes.yaml +223 -0
- package/tools/cli/lib/ui.js +76 -47
- package/tools/validate-docs-drift.js +193 -0
- package/src/agents/forger.agent.yaml +0 -114
- package/src/workflows/README.md +0 -174
- package/src/workflows/analyze-source/data/skill-brief-schema.md +0 -125
- package/src/workflows/analyze-source/data/unit-detection-heuristics.md +0 -124
- package/src/workflows/analyze-source/workflow.md +0 -61
- package/src/workflows/audit-skill/workflow.md +0 -64
- package/src/workflows/brief-skill/data/skill-brief-schema.md +0 -159
- package/src/workflows/brief-skill/workflow.md +0 -58
- package/src/workflows/create-skill/data/source-resolution-protocols.md +0 -200
- package/src/workflows/create-skill/steps-c/step-03-extract.md +0 -301
- package/src/workflows/create-skill/steps-c/step-03b-fetch-temporal.md +0 -253
- package/src/workflows/create-skill/steps-c/step-06-validate.md +0 -254
- package/src/workflows/create-skill/steps-c/step-08-report.md +0 -176
- package/src/workflows/create-skill/workflow.md +0 -53
- package/src/workflows/create-stack-skill/steps-c/step-05-detect-integrations.md +0 -196
- package/src/workflows/create-stack-skill/steps-c/step-07-generate-output.md +0 -270
- package/src/workflows/create-stack-skill/steps-c/step-09-report.md +0 -145
- package/src/workflows/create-stack-skill/workflow.md +0 -59
- package/src/workflows/drop-skill/steps-c/step-03-report.md +0 -135
- package/src/workflows/drop-skill/workflow.md +0 -63
- package/src/workflows/export-skill/data/managed-section-format.md +0 -103
- package/src/workflows/export-skill/steps-c/step-01-load-skill.md +0 -237
- package/src/workflows/export-skill/workflow.md +0 -58
- package/src/workflows/quick-skill/steps-c/step-06-write.md +0 -179
- package/src/workflows/quick-skill/workflow.md +0 -58
- package/src/workflows/refine-architecture/workflow.md +0 -61
- package/src/workflows/rename-skill/steps-c/step-03-report.md +0 -132
- package/src/workflows/rename-skill/workflow.md +0 -64
- package/src/workflows/setup-forge/steps-c/step-04-report.md +0 -156
- package/src/workflows/setup-forge/workflow.md +0 -51
- package/src/workflows/test-skill/data/scoring-rules.md +0 -123
- package/src/workflows/test-skill/data/source-access-protocol.md +0 -51
- package/src/workflows/test-skill/steps-c/step-01-init.md +0 -217
- package/src/workflows/test-skill/steps-c/step-03-coverage-check.md +0 -280
- package/src/workflows/test-skill/steps-c/step-04-coherence-check.md +0 -271
- package/src/workflows/test-skill/steps-c/step-05-score.md +0 -222
- package/src/workflows/test-skill/steps-c/step-06-report.md +0 -207
- package/src/workflows/test-skill/templates/test-report-template.md +0 -28
- package/src/workflows/test-skill/workflow.md +0 -57
- package/src/workflows/update-skill/data/remote-source-resolution.md +0 -57
- package/src/workflows/update-skill/steps-c/step-02-detect-changes.md +0 -221
- package/src/workflows/update-skill/steps-c/step-03-re-extract.md +0 -256
- package/src/workflows/update-skill/steps-c/step-06-write.md +0 -265
- package/src/workflows/update-skill/workflow.md +0 -56
- package/src/workflows/verify-stack/data/feasibility-report-template.md +0 -63
- package/src/workflows/verify-stack/data/integration-verification-rules.md +0 -73
- package/src/workflows/verify-stack/steps-c/step-01-init.md +0 -179
- package/src/workflows/verify-stack/steps-c/step-03-integrations.md +0 -195
- package/src/workflows/verify-stack/steps-c/step-05-synthesize.md +0 -191
- package/src/workflows/verify-stack/steps-c/step-06-report.md +0 -197
- package/src/workflows/verify-stack/workflow.md +0 -61
- package/tools/cli/lib/compiler.js +0 -306
- package/tools/cli/lib/ide-commands.js +0 -244
- /package/src/{workflows/analyze-source → skf-analyze-source}/templates/analysis-report-template.md +0 -0
- /package/src/{workflows/quick-skill/data → skf-quick-skill/assets}/skill-template.md +0 -0
- /package/src/{workflows/setup-forge/data → skf-setup/references}/tier-rules.md +0 -0
- /package/src/{workflows/test-skill/data → skf-test-skill/assets}/output-section-formats.md +0 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: SKF Stability & Public API Contract
|
|
3
|
+
description: What SemVer covers at v1.0.0 — the surfaces downstream consumers may pin against, and the surfaces explicitly excluded.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
> **Status:** DRAFT — locks at v1.0.0 cut (Story 5.1 pre-flight audit). Review-window open until then.
|
|
7
|
+
|
|
8
|
+
This document is the public API contract for `bmad-module-skill-forge` at v1.0.0. It enumerates exactly which SKF surfaces [Semantic Versioning 2.0.0](https://semver.org/) covers and which are explicitly `@internal`. The goal is that a downstream consumer pinning `"bmad-module-skill-forge": "^1.0.0"` can identify — unambiguously — whether a given SKF change is breaking, additive, or internal. Breaking changes to covered surfaces require a major-version bump; additive changes to covered surfaces are minor bumps; changes to `@internal` surfaces are free to land in any release.
|
|
9
|
+
|
|
10
|
+
## Covered Surfaces
|
|
11
|
+
|
|
12
|
+
The five buckets below are the entirety of the v1.0.0 public surface. Anything not explicitly listed here is `@internal` (see [§ @internal — Not Covered by SemVer](#internal--not-covered-by-semver)).
|
|
13
|
+
|
|
14
|
+
### CLI Command Surface
|
|
15
|
+
|
|
16
|
+
The CLI is invoked via `npx bmad-module-skill-forge <subcommand>` (one-shot) or `npm run skf:<subcommand>` (post-install). Covered:
|
|
17
|
+
|
|
18
|
+
- **Subcommands**: `install`, `update`, `status`, `uninstall`. Renaming, removing, or changing the semantics of any subcommand is breaking.
|
|
19
|
+
- **Options**: `-V, --version` (top-level; prints the installed package version), `-h, --help` (top-level and per-subcommand; prints help output — commander-provided). Both are covered.
|
|
20
|
+
- **Per-subcommand flags (other than `-h/--help`)**: none are currently part of the v1.0.0 surface. Adding a new flag is additive (minor); removing or renaming a flag once added would be breaking.
|
|
21
|
+
- **Exit codes**: `0` on success — including user-cancel of `install` (Ctrl-C at a prompt or explicit decline at a confirm step) and "nothing to do" paths on `uninstall`; `1` on unhandled failure. Only `0` and `1` are reserved today; introducing additional exit-code values in the future is additive (minor) and will be called out in `CHANGELOG.md`.
|
|
22
|
+
- **`npm run skf:*` script aliases**: `skf:install`, `skf:update`, `skf:status`, `skf:uninstall` in `package.json` are the post-install convenience entry points. Renaming or removing any `skf:*` script is breaking. (Note: `release:*` scripts are NOT part of this contract — they are internal-to-maintainers and are being retired across Epic 4 and Epic 6.)
|
|
23
|
+
|
|
24
|
+
### Programmatic API of `tools/cli/skf-cli.js`
|
|
25
|
+
|
|
26
|
+
`tools/cli/skf-cli.js` is the CLI logic for `npx bmad-module-skill-forge` (invoked via a thin `bin` wrapper at `tools/skf-npx-wrapper.js` that execs `skf-cli.js`) and for `npm run skf:<subcommand>`. Though `package.json`'s `main` field points at `skf-cli.js`, it has **no programmatic export surface**. The file runs commander setup and calls `program.parse(process.argv)` as top-level side effects; it has no `module.exports` block. A `require('bmad-module-skill-forge')` from Node runs the CLI parser against the caller's `process.argv` — not a supported usage.
|
|
27
|
+
|
|
28
|
+
Programmatic embedding of SKF is explicitly `@internal` at v1.0.0. If a programmatic API is ever added, it will be introduced via an explicit `module.exports` block and a minor version bump (additive).
|
|
29
|
+
|
|
30
|
+
### Skill Manifest & Frontmatter Contract
|
|
31
|
+
|
|
32
|
+
**`SKILL.md` frontmatter.** SKF-shipped `SKILL.md` files conform to the [agentskills.io minimal frontmatter spec](https://github.com/agentskills/agentskills). Required fields are `name` (kebab-case) and `description` (one-line natural-language summary that terminates with an explicit trigger phrase — see the `src/skf-*/SKILL.md` files in this repo for live examples). SKF does NOT extend the agentskills.io spec; there are no SKF-specific frontmatter fields. If the agentskills.io spec evolves, SKF tracks upstream rather than forking.
|
|
33
|
+
|
|
34
|
+
**`bmad-skill-manifest.yaml` schema.** The agent-type skill manifest shape SKF uses is validated by a zod schema. A simplified transcription (see the live source on GitHub for exact error-map options and inline comments):
|
|
35
|
+
|
|
36
|
+
```js
|
|
37
|
+
const manifestSchema = z
|
|
38
|
+
.object({
|
|
39
|
+
type: z.enum(['agent', 'workflow', 'tool']), // required
|
|
40
|
+
name: createNonEmptyString('name'), // required
|
|
41
|
+
displayName: createNonEmptyString('displayName').optional(),
|
|
42
|
+
title: createNonEmptyString('title').optional(),
|
|
43
|
+
icon: z.string().optional(),
|
|
44
|
+
capabilities: z.string().optional(),
|
|
45
|
+
role: createNonEmptyString('role').optional(),
|
|
46
|
+
identity: createNonEmptyString('identity').optional(),
|
|
47
|
+
communicationStyle: createNonEmptyString('communicationStyle').optional(),
|
|
48
|
+
principles: createNonEmptyString('principles').optional(),
|
|
49
|
+
module: createNonEmptyString('module'), // required
|
|
50
|
+
})
|
|
51
|
+
.strict();
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
The schema is strict — unknown keys are rejected. Renaming or removing a required field, changing an enum value, or tightening an optional field into required is breaking. Adding a new optional field is additive. The `module` field identifies the owning module — consumers writing agent-type manifests that ship with SKF set it to `skf`; the field is required and its expected value for SKF-owned manifests is part of the contract.
|
|
55
|
+
|
|
56
|
+
### Installation Layout
|
|
57
|
+
|
|
58
|
+
When a consumer runs `skf install` in a project, SKF creates or modifies the following on-disk paths (some names are configurable at install time; defaults are shown). Renaming any path, changing a path's semantics, or removing a path from this list is breaking.
|
|
59
|
+
|
|
60
|
+
- `_bmad/skf/` — SKF module files.
|
|
61
|
+
- `_bmad/_config/skf-manifest.yaml` — install manifest. Format per `tools/cli/lib/manifest.js`; covered top-level keys: `version` (equals the SKF package version at install time — downstream tooling may read it to detect the installed SKF version), `installed_at`, `action`, `module`, `skf_folder`, `ides`, `skills_output_folder`, `forge_data_folder`, `directories[]`, `files.{skf,sidecar,ide_skills,learning,output}`. Downstream tooling that introspects an SKF install (e.g. to detect installed IDEs or list installed skills) reads this file; its top-level shape is the v1.0.0 contract.
|
|
62
|
+
- `_bmad/_memory/forger-sidecar/` — Ferris agent runtime state directory. The directory's existence and location are covered. File formats inside are `@internal` (not a downstream-consumable schema); `skf update` round-trips sidecar state between SKF versions — see `skf update` in [§ User-Facing Command Output Formats](#user-facing-command-output-formats) for the state-preservation commitment.
|
|
63
|
+
- `_skf-learn/` — optional learning material; created only when the user opts into learning at install time.
|
|
64
|
+
- `{skills_output_folder}/` — default `skills/`, configurable via install prompt and persisted to `skf-manifest.yaml`.
|
|
65
|
+
- `{forge_data_folder}/` — default `forge-data/`, configurable via install prompt and persisted to `skf-manifest.yaml`.
|
|
66
|
+
- `.gitignore` at project root — SKF appends `_bmad/_memory/` as an ignore entry (or creates the file if absent). Existing content is preserved; if the entry is already present, the file is left untouched. The appended entry name is part of the contract.
|
|
67
|
+
- **Per-IDE skill directories.** SKF installs skills to each configured IDE's conventional skills directory. The IDE → directory mapping is enumerated in `tools/cli/lib/platform-codes.yaml` under `platforms.<ide>.installer.target_dir`; the `platforms.<ide>.installer.target_dir` mapping is part of the v1.0.0 contract (other keys in that file are `@internal`). Renaming `platforms.*` or `installer.target_dir` is breaking; removing a platform's `target_dir` is breaking for consumers of that IDE; adding a new platform entry is additive (minor).
|
|
68
|
+
|
|
69
|
+
### User-Facing Command Output Formats
|
|
70
|
+
|
|
71
|
+
The v1.0.0 contract commits to the **information each command outputs** and to **exit-code semantics**, not to exact human-readable wording, ANSI color choices, or console layout. Downstream tooling that needs structured introspection of an install should read `_bmad/_config/skf-manifest.yaml` directly (see [§ Installation Layout](#installation-layout)), which IS committed verbatim.
|
|
72
|
+
|
|
73
|
+
- **`skf status`** SHALL convey: installation-present boolean, installed version string, forge-tier name (or a "not detected" equivalent), configured IDE list, workflow-skill count, sidecar state, and output-folder paths. Exit `0` on success; `1` on unhandled failure.
|
|
74
|
+
- **`skf install`** SHALL exit `0` on successful install and on user-cancel (Ctrl-C at a prompt or explicit decline at a confirm step); `1` on unhandled failure. The success path SHALL emit a success confirmation.
|
|
75
|
+
- **`skf update`** SHALL exit `0` on successful update and on "nothing to do" (no prior install detected); `1` on unhandled failure. `skf update` aims to preserve existing config and sidecar state across SKF versions; breaking migrations, when needed, will be called out in `CHANGELOG.md`.
|
|
76
|
+
- **`skf uninstall`** SHALL exit `0` on successful removal, on "nothing to do" (no prior install detected), and on user-declined confirmation. Exit `1` on unhandled failure.
|
|
77
|
+
|
|
78
|
+
Explicit non-commitments: ANSI color choices, exact prose wording, precise layout of tables or lists, and i18n prose variations are `@internal` and may change in minor releases.
|
|
79
|
+
|
|
80
|
+
### Engine & Platform Compatibility
|
|
81
|
+
|
|
82
|
+
SKF supports the Node.js major versions declared in `package.json` `engines.node` (currently `>=22.0.0`). Dropping a supported major is breaking; adding support for a new major is additive. Linux, macOS, and Windows are supported runtime platforms; dropping OS support is breaking. Adding support for a new platform is additive.
|
|
83
|
+
|
|
84
|
+
## @internal — Not Covered by SemVer
|
|
85
|
+
|
|
86
|
+
The following surfaces are explicitly excluded from the v1.0.0 contract. Changes to any of these may land in any release — patch, minor, or major — without constituting a "breaking change" from a SemVer perspective. Downstream consumers SHOULD NOT pin against these surfaces.
|
|
87
|
+
|
|
88
|
+
- **`tools/cli/lib/*` internal helper modules** — implementation detail of the CLI; not a library. Any refactor that preserves the observable CLI surface and install layout above is allowed.
|
|
89
|
+
- **Internal structure of workflow step files under `src/skf-*/steps-c/`** — the workflow authoring format is an SKF-internal authoring surface; step numbering, file names, and prose can change.
|
|
90
|
+
- **`_bmad/_memory/forger-sidecar/*.yaml` file schemas** — Ferris sidecar state. Stable as a runtime contract between SKF versions during one install's lifetime (so `skf update` works), but not a downstream-consumable schema.
|
|
91
|
+
- **Ferris agent persona prose and menu wording** — the in-product agent persona can be rephrased or restructured at any time.
|
|
92
|
+
- **Exact chalk styling / ANSI color choices in command output** — stylistic; see the output-format bucket above for what IS committed.
|
|
93
|
+
- **Internal logic of the `Installer` class in `tools/cli/lib/installer.js`** — private implementation; what's covered is the observable install layout, not how the files get there.
|
|
94
|
+
- **Workflow `{communication_language}` / `{document_output_language}` template substitution** — an authoring convenience for workflow prose; the mechanism is internal.
|
|
95
|
+
- **Knowledge-base contents under `src/knowledge/` and `src/skf-*/references/`** — evolving reference material, not a schema.
|
|
96
|
+
- **Test fixtures and test file layout under `test/`** — test organization is internal (except `test/schema/**`, which defines schemas covered by [§ Skill Manifest & Frontmatter Contract](#skill-manifest--frontmatter-contract)).
|
|
97
|
+
- **Build and docs tooling (`tools/build-docs.js`, `website/`)** — internal build pipeline for the Starlight docs site; not a consumer surface.
|
|
98
|
+
- **`_bmad-output/` planning-artifact layout** — gitignored and never distributed; not shipped in the npm package.
|
|
99
|
+
|
|
100
|
+
## How to Use This Contract
|
|
101
|
+
|
|
102
|
+
Pin SKF as a dependency with caret-range major-version pinning to get minor and patch updates automatically:
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
"bmad-module-skill-forge": "^1.0.0"
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
The caret range covers additive changes and internal refactors on covered surfaces, and any change on `@internal` surfaces. If you find that an SKF release broke a covered surface listed in this document, please open an issue at <https://github.com/armelhbobdad/bmad-module-skill-forge/issues> citing the relevant section — it is either a bug in SKF that needs reverting or a missed major-version bump.
|
|
109
|
+
|
|
110
|
+
If a surface you depend on is NOT explicitly enumerated in [§ Covered Surfaces](#covered-surfaces), treat it as `@internal` — if in doubt, it is `@internal`. If you believe a surface should be promoted from `@internal` to covered, open an issue with a use-case description; promotion is additive and can land in a minor release.
|
|
111
|
+
|
|
112
|
+
## Changes to This Contract
|
|
113
|
+
|
|
114
|
+
Shrinking the covered surface (removing a commitment) is a breaking change and requires a major-version bump. Expanding the covered surface (promoting an `@internal` surface to covered, or adding a new commitment) is additive and ships in a minor release. This document is versioned alongside the package; historical versions are visible via `git log docs/STABILITY.md`.
|
|
115
|
+
|
|
116
|
+
## References
|
|
117
|
+
|
|
118
|
+
- [agentskills.io spec](https://github.com/agentskills/agentskills) — external canonical source for the `SKILL.md` frontmatter grammar.
|
|
119
|
+
- [Semantic Versioning 2.0.0](https://semver.org/) — the SemVer semantics this contract commits to.
|
|
120
|
+
- [`CHANGELOG.md`](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/CHANGELOG.md) — release-by-release history; breaking changes are called out there.
|
|
121
|
+
- [`docs/RELEASING.md`](RELEASING.md) — maintainer reference for the release pipeline (companion document: this file is about what ships, `RELEASING.md` is about how).
|
|
122
|
+
- [`tools/cli/lib/platform-codes.yaml`](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/tools/cli/lib/platform-codes.yaml) — source of truth for the IDE → skills-directory mapping covered under [§ Installation Layout](#installation-layout).
|
|
123
|
+
- [`test/schema/agent.js`](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/test/schema/agent.js) — zod schema definitions for `bmad-skill-manifest.yaml` covered under [§ Skill Manifest & Frontmatter Contract](#skill-manifest--frontmatter-contract).
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Skill Forge — Pinned Canonical Anchors
|
|
2
|
+
#
|
|
3
|
+
# This file is the SINGLE SOURCE OF TRUTH for every version number, commit
|
|
4
|
+
# SHA, and library reference that the docs cite about oh-my-skills, the
|
|
5
|
+
# canonical SKF reference output.
|
|
6
|
+
#
|
|
7
|
+
# Every time a skill is recompiled in oh-my-skills, update the matching
|
|
8
|
+
# entry here and then run `npm run validate:docs-drift` from the SKF repo
|
|
9
|
+
# root. The script will:
|
|
10
|
+
#
|
|
11
|
+
# 1. Verify every skill below actually exists at the claimed version and
|
|
12
|
+
# commit in $OMS/skills/<name>/<version>/<name>/metadata.json
|
|
13
|
+
# 2. Grep every docs/*.md for stale version strings and flag any that
|
|
14
|
+
# disagree with the anchors
|
|
15
|
+
#
|
|
16
|
+
# If the drift check fails after a recompilation, update this file first,
|
|
17
|
+
# then fix the docs until the check is clean.
|
|
18
|
+
#
|
|
19
|
+
# Do NOT edit docs/*.md version references without updating this file
|
|
20
|
+
# first — the drift check will catch you. That's the point.
|
|
21
|
+
#
|
|
22
|
+
# File ignored by Astro/Starlight content collections because the parent
|
|
23
|
+
# directory starts with `_`. It is purely a build-time / CI-time anchor.
|
|
24
|
+
|
|
25
|
+
# SKF package version — matches the `version` field in package.json
|
|
26
|
+
skf_version: "0.10.0"
|
|
27
|
+
|
|
28
|
+
# Path to the oh-my-skills repo, resolved relative to this repo's root.
|
|
29
|
+
# Override at runtime with the OMS environment variable if oh-my-skills
|
|
30
|
+
# lives elsewhere on your machine.
|
|
31
|
+
oh_my_skills_path: "../oh-my-skills"
|
|
32
|
+
|
|
33
|
+
# Every oms-* skill currently shipped in oh-my-skills. The library key
|
|
34
|
+
# (e.g. cognee) is the user-facing library name; the entry key is the
|
|
35
|
+
# skill package name (oms-<library>).
|
|
36
|
+
skills:
|
|
37
|
+
oms-cognee:
|
|
38
|
+
library: cognee
|
|
39
|
+
version: "1.0.0"
|
|
40
|
+
source_repo: "https://github.com/topoteretes/cognee"
|
|
41
|
+
source_commit: "3c048aa4147776f14d4546704f986242554a9ef3"
|
|
42
|
+
source_ref: "v1.0.0"
|
|
43
|
+
upstream_commit_date: "2026-04-11"
|
|
44
|
+
test_score: 99.00
|
|
45
|
+
test_mode: "naive"
|
|
46
|
+
confidence_tier: "Deep"
|
|
47
|
+
source_authority: "community"
|
|
48
|
+
language: "python"
|
|
49
|
+
|
|
50
|
+
oms-cocoindex:
|
|
51
|
+
library: cocoindex
|
|
52
|
+
version: "0.3.37"
|
|
53
|
+
source_repo: "https://github.com/cocoindex-io/cocoindex"
|
|
54
|
+
source_commit: "87c5dbf087bfccca83791861db0d33519ef09677"
|
|
55
|
+
source_ref: "v0.3.37"
|
|
56
|
+
upstream_commit_date: "2026-03-31"
|
|
57
|
+
test_score: 99.0
|
|
58
|
+
test_mode: "naive"
|
|
59
|
+
confidence_tier: "Deep"
|
|
60
|
+
source_authority: "community"
|
|
61
|
+
language: "python"
|
|
62
|
+
|
|
63
|
+
oms-storybook-react-vite:
|
|
64
|
+
library: storybook
|
|
65
|
+
version: "10.3.5"
|
|
66
|
+
source_repo: "https://github.com/storybookjs/storybook"
|
|
67
|
+
source_commit: "e486d3826bcd40c52db1c766966d1c8ec16df6cb"
|
|
68
|
+
source_ref: "v10.3.5"
|
|
69
|
+
upstream_commit_date: "2026-04-07"
|
|
70
|
+
test_score: 99.49
|
|
71
|
+
test_mode: "naive"
|
|
72
|
+
confidence_tier: "Deep"
|
|
73
|
+
source_authority: "community"
|
|
74
|
+
language: "typescript"
|
|
75
|
+
|
|
76
|
+
oms-uitripled:
|
|
77
|
+
library: uitripled
|
|
78
|
+
version: "0.1.0"
|
|
79
|
+
source_repo: "https://github.com/moumen-soliman/uitripled"
|
|
80
|
+
source_commit: "a5ffb45be05335d2c547436664cfbfb8c22d04df"
|
|
81
|
+
source_ref: "HEAD"
|
|
82
|
+
upstream_commit_date: "2026-03-22"
|
|
83
|
+
test_score: 99.45
|
|
84
|
+
test_mode: "naive"
|
|
85
|
+
confidence_tier: "Deep"
|
|
86
|
+
source_authority: "community"
|
|
87
|
+
language: "typescript"
|
|
88
|
+
|
|
89
|
+
# Libraries that are mentioned in docs as illustrative examples but don't
|
|
90
|
+
# have a corresponding oms-* skill. The drift check IGNORES version
|
|
91
|
+
# mentions for these libraries — they're allowed to drift because they're
|
|
92
|
+
# illustration, not canonical.
|
|
93
|
+
illustrative_libraries:
|
|
94
|
+
- better-auth
|
|
95
|
+
- hono
|
|
96
|
+
- drizzle-orm
|
|
97
|
+
- spacetimedb-sdk
|
|
98
|
+
- serwist
|
package/docs/agents.md
CHANGED
|
@@ -3,32 +3,28 @@ title: Agents
|
|
|
3
3
|
description: Ferris agent reference — modes, capabilities, menu, and communication style
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Agents Reference
|
|
7
|
-
|
|
8
|
-
Ferris is the AI agent that runs all SKF workflows. You always interact with Ferris — he switches modes based on which workflow you invoke.
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
6
|
## Ferris — Skill Architect & Integrity Guardian
|
|
13
7
|
|
|
14
|
-
**ID:** `
|
|
8
|
+
**ID:** `skf-forger`
|
|
15
9
|
**Icon:** ⚒️
|
|
16
10
|
|
|
17
11
|
**Role:**
|
|
18
|
-
|
|
12
|
+
The only agent in SKF. Manages the entire skill compilation lifecycle. Ferris extracts, compiles, validates, and packages agent skills from code repositories, documentation, and developer discourse.
|
|
19
13
|
|
|
20
14
|
**When to Use:**
|
|
21
15
|
Ferris handles all SKF workflows. You always interact with Ferris — he switches modes based on which workflow you invoke.
|
|
22
16
|
|
|
23
17
|
**Key Capabilities:**
|
|
24
|
-
- AST
|
|
18
|
+
- AST-backed code extraction via ast-grep
|
|
25
19
|
- Semantic code discovery via cocoindex-code for intelligent file pre-ranking
|
|
26
20
|
- QMD knowledge search for temporal context and evidence
|
|
27
21
|
- agentskills.io specification compliance and validation
|
|
28
22
|
- GitHub source navigation and package-to-repo resolution
|
|
29
|
-
- Cross-
|
|
23
|
+
- Cross-library synthesis for stack skills and integration patterns
|
|
30
24
|
- Skill authoring best practices enforcement (third-person voice, consistent terminology, discovery optimization)
|
|
31
25
|
- Source-derived scripts and assets extraction with provenance tracking
|
|
26
|
+
- **Pipeline orchestration** — chain multiple workflows with automatic data forwarding and circuit breakers
|
|
27
|
+
- **Headless mode** — skip confirmation gates for power users and batch operations (`--headless` or `-H`)
|
|
32
28
|
|
|
33
29
|
**Workflow-Driven Modes:**
|
|
34
30
|
|
|
@@ -38,6 +34,7 @@ Ferris handles all SKF workflows. You always interact with Ferris — he switche
|
|
|
38
34
|
| **Surgeon** | Precise, semantic diffing, preserves [MANUAL] | US |
|
|
39
35
|
| **Audit** | Judgmental, drift reports, completeness scoring | AS, TS, VS |
|
|
40
36
|
| **Delivery** | Packaging, platform-aware, ecosystem-ready | EX |
|
|
37
|
+
| **Management** | Transactional rename/drop with platform context rebuild | RS, DS |
|
|
41
38
|
|
|
42
39
|
**Communication Style:**
|
|
43
40
|
- During work: structured reports with AST citations, no metaphor
|
|
@@ -72,9 +69,17 @@ MAINTAIN:
|
|
|
72
69
|
DELIVER:
|
|
73
70
|
[EX] Export Skill — Package for distribution
|
|
74
71
|
|
|
72
|
+
MANAGE:
|
|
73
|
+
[RS] Rename Skill — Rename across all versions (transactional)
|
|
74
|
+
[DS] Drop Skill — Deprecate or purge a skill version
|
|
75
|
+
|
|
75
76
|
[WS] Workflow Status — Show current lifecycle position
|
|
76
77
|
[KI] Knowledge Index — List available knowledge fragments
|
|
77
78
|
```
|
|
78
79
|
|
|
80
|
+
**Pipeline Aliases:**
|
|
81
|
+
|
|
82
|
+
Ferris chains multiple workflows in one command via named aliases (`forge`, `forge-quick`, `onboard`, `maintain`). The full alias table, expansion rules, and target-resolution contract live in [Workflows → Pipeline Mode](../workflows/#pipeline-mode) — the canonical source. Example: `@Ferris forge-quick cognee` chains Quick → Test → Export with automatic data forwarding.
|
|
83
|
+
|
|
79
84
|
**Memory:**
|
|
80
|
-
Ferris has a sidecar (`_bmad/_memory/forger-sidecar/`) that persists user preferences and tool availability across sessions.
|
|
85
|
+
Ferris has a sidecar (`_bmad/_memory/forger-sidecar/`) that persists user preferences and tool availability across sessions. Set `headless_mode: true` in preferences to make headless the default.
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Architecture
|
|
3
|
+
description: How Skill Forge runs — the BMAD-backed agent and workflow engine, tool ecosystem, workspace artifacts, security, and the design decisions behind them.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Skill Forge runs entirely inside the LLM context window through structured instructions. There is no external orchestrator — just an agent persona (Ferris), a set of workflows, and a curated knowledge base. This page covers the machinery. For an end-to-end walkthrough, see [How It Works](../how-it-works/). For what a skill contains, see [Skill Model](../skill-model/).
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## How BMAD Works
|
|
11
|
+
|
|
12
|
+
[BMAD](https://docs.bmad-method.org/) tackles complex, open-ended work by decomposing it into **repeatable workflows**. Every workflow is a sequence of small, explicit steps, so the AI takes the same route on every run. A **shared knowledge base** of standards and patterns backs those steps, keeping outputs consistent instead of improvised. The formula is simple: **structured steps + shared standards = reliable results**.
|
|
13
|
+
|
|
14
|
+
SKF plugs into BMAD the same way a specialist plugs into a team. It uses the same step-by-step workflow engine and shared standards, but focuses exclusively on skill compilation and quality assurance.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Building Blocks
|
|
19
|
+
|
|
20
|
+
Each workflow directory contains these files, and each has a specific job:
|
|
21
|
+
|
|
22
|
+
| File | What it does | When it loads |
|
|
23
|
+
|---------------------------|---------------------------------------------------------------------------------------------------------------------|---------------------------------------------------|
|
|
24
|
+
| `SKILL.md` | Human-readable entry point — goals, role definition, initialization sequence, invocation contract, routes to first step | Entry point per workflow |
|
|
25
|
+
| `steps-c/*.md` | **Create** steps — primary execution, 4–10 sequential files per workflow (the last one always chains to the shared health check) | One at a time (just-in-time) |
|
|
26
|
+
| `references/*.md` | Workflow-specific reference data — rules, patterns, protocols | Read by steps on demand |
|
|
27
|
+
| `assets/*.md` | Workflow-specific output formats — schemas, templates, heuristics | Read by steps on demand |
|
|
28
|
+
| `templates/*.md` | Output skeletons with placeholder vars — steps fill these in to produce the final artifact | Read by steps when generating output |
|
|
29
|
+
| `scripts/*.py` | Deterministic Python scripts — scoring, validation, structural diffing, manifest operations | Invoked by steps via `uv run` for reproducible computation |
|
|
30
|
+
|
|
31
|
+
**Module-level shared files** (not per-workflow — loaded by the agent or referenced across workflows):
|
|
32
|
+
|
|
33
|
+
| File | What it does | When it loads |
|
|
34
|
+
|---------------------------|---------------------------------------------------------------------------------------------------------------------|---------------------------------------------------|
|
|
35
|
+
| `skf-forger/SKILL.md` | Expert persona — identity, principles, critical actions, menu of triggers | First — always in context |
|
|
36
|
+
| `knowledge/skf-knowledge-index.csv` | Knowledge fragment index — id, name, tags, tier, file path | Read by steps to decide which fragments to load |
|
|
37
|
+
| `knowledge/*.md` | 14 reusable fragments + overview.md index — cross-cutting principles and patterns (e.g., `zero-hallucination.md`, `confidence-tiers.md`, `ccc-bridge.md`) | Selectively read into context when a step directs |
|
|
38
|
+
| `shared/scripts/*.py` | 7 cross-workflow Python scripts — preflight checks, manifest ops, managed-section rebuilds, frontmatter validation, severity classification, structural diffing, skill inventory | Invoked by any workflow that needs deterministic computation |
|
|
39
|
+
|
|
40
|
+
```mermaid
|
|
41
|
+
flowchart LR
|
|
42
|
+
U[User] --> A[Agent Persona]
|
|
43
|
+
A --> W[Workflow Entry: SKILL.md]
|
|
44
|
+
W --> S[Step Files: steps-c/]
|
|
45
|
+
S --> K[Knowledge Fragments<br/>skf-knowledge-index.csv → knowledge/*.md]
|
|
46
|
+
S --> D[References & Assets<br/>references/*.md, assets/*.md, templates/*.md]
|
|
47
|
+
S --> P[Scripts<br/>scripts/*.py, shared/scripts/*.py]
|
|
48
|
+
S --> O[Outputs: skills/, forge-data/, sidecar<br/>when a step writes output]
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Runtime flow
|
|
52
|
+
|
|
53
|
+
1. **Trigger** — User types `@Ferris CS` (or fuzzy match like `create-skill`). The agent menu in `skf-forger/SKILL.md` maps the trigger to the workflow path.
|
|
54
|
+
2. **Agent loads** — `skf-forger/SKILL.md` injects the persona (identity, principles, critical actions) into the context window. Sidecar files (`forge-tier.yaml`, `preferences.yaml`) are loaded for persistent state.
|
|
55
|
+
3. **Workflow loads** — `SKILL.md` presents the mode choice and routes to the first step file.
|
|
56
|
+
4. **Step-by-step execution** — Only the current step file is in context (just-in-time loading). Each step explicitly names the next one. The LLM reads, executes, saves output, then loads the next step. No future steps are ever preloaded.
|
|
57
|
+
5. **Sub-agent delegation** — When a step needs to process large files (full `SKILL.md` documents, multiple `references/*.md` files, parallel per-library extraction), it spawns sub-agents via the Agent tool instead of loading the content into the parent context. Each sub-agent receives a file path, extracts a compact JSON summary, and returns it. Up to 8 sub-agents run concurrently. The parent collects JSON summaries without ever loading the full source — context isolation by design, preventing one step's data from bloating the window for the next. Used in TS (coverage check), RA (gap analysis), VS (integration verification), AS (structural diff), and SS (parallel extraction).
|
|
58
|
+
6. **Knowledge injection** — Steps consult `skf-knowledge-index.csv` and selectively load fragments from `knowledge/` by tags and relevance. Cross-cutting principles (zero hallucination, confidence tiers, provenance) are loaded only when a step directs — not preloaded.
|
|
59
|
+
7. **Reference and asset injection** — Steps read `references/*.md` and `assets/*.md` files as needed (rules, patterns, schemas, heuristics). This is deliberate context engineering: only the data relevant to the current step enters the context window.
|
|
60
|
+
8. **Script execution** — Steps invoke deterministic Python scripts (`scripts/*.py`, `shared/scripts/*.py`) via `uv run` for computation that must be reproducible: scoring, structural diffing, manifest operations, frontmatter validation. The LLM prepares inputs, the script computes, the LLM uses the output. Same inputs always produce the same result.
|
|
61
|
+
9. **Templates** — When a step produces output (e.g., a skill brief or test report), it reads the template file and fills in placeholders with computed results. The template provides consistent structure; the step provides the content.
|
|
62
|
+
10. **Progress tracking** — Each step appends to an output file with state tracking. Resume mode reads this state and routes to the next incomplete step.
|
|
63
|
+
|
|
64
|
+
## Ferris Operating Modes
|
|
65
|
+
|
|
66
|
+
Ferris operates in five workflow-driven modes (mode is determined by which workflow is running, not conversation state):
|
|
67
|
+
|
|
68
|
+
| Mode | Workflows | Behavior |
|
|
69
|
+
|---------------|--------------------|-------------------------------------------------------------|
|
|
70
|
+
| **Architect** | SF, AN, BS, CS, QS, SS, RA | Exploratory, assembling, refining — discovers structure, scopes skills, and improves architecture |
|
|
71
|
+
| **Surgeon** | US | Precise, semantic diffing — preserves [MANUAL] sections during regeneration |
|
|
72
|
+
| **Audit** | AS, TS, VS | Judgmental, scoring — evaluates quality and detects drift |
|
|
73
|
+
| **Delivery** | EX | Validates package, generates snippets, injects into context files |
|
|
74
|
+
| **Management** | RS, DS | Transactional rename/drop — copy-verify-delete with platform context rebuild |
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Tool Ecosystem
|
|
79
|
+
|
|
80
|
+
### 7 Tools
|
|
81
|
+
|
|
82
|
+
| Tool | Wraps | Purpose |
|
|
83
|
+
|------|-------|---------|
|
|
84
|
+
| **`gh_bridge`** | GitHub CLI (`gh`) | Source code access, issue mining, release tracking, PR intelligence |
|
|
85
|
+
| **`skill-check`** | [thedaviddias/skill-check](https://github.com/thedaviddias/skill-check) | Validation + auto-fix (`check --fix`), quality scoring (0-100), security scan, split-body, diff comparison |
|
|
86
|
+
| **`tessl`** | [tessl](https://tessl.io) | Content quality review, actionability scoring, progressive disclosure evaluation, AI judge with suggestions |
|
|
87
|
+
| **`ast_bridge`** | ast-grep CLI | Structural extraction, custom AST queries, co-import detection |
|
|
88
|
+
| **`ccc_bridge`** | cocoindex-code | Semantic code search, project indexing, file discovery pre-ranking |
|
|
89
|
+
| **`qmd_bridge`** | QMD (local search) | BM25 keyword search, vector semantic search, collection indexing |
|
|
90
|
+
| **`doc_fetcher`** | Environment web tools | Remote documentation fetching for T3-confidence content. Tool-agnostic — uses whatever web fetching is available (Firecrawl, WebFetch, curl, etc.). Output quarantined as T3. |
|
|
91
|
+
|
|
92
|
+
Bridge names are **conceptual interfaces** used throughout workflow steps. Each bridge resolves to concrete MCP tools, CLI commands, or fallback behavior depending on the IDE environment. See [`src/knowledge/tool-resolution.md`](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/src/knowledge/tool-resolution.md) for the complete resolution table.
|
|
93
|
+
|
|
94
|
+
### Conflict Resolution
|
|
95
|
+
|
|
96
|
+
When tools disagree, higher priority wins for instructions. Lower priority is preserved as annotations:
|
|
97
|
+
|
|
98
|
+
| Priority | Source | Tool |
|
|
99
|
+
|----------|--------|------|
|
|
100
|
+
| 1 (highest) | AST extraction | `ast_bridge` |
|
|
101
|
+
| 1b | CCC discovery (pre-ranking) | `ccc_bridge` |
|
|
102
|
+
| 2 | QMD evidence | `qmd_bridge` |
|
|
103
|
+
| 3 | Source reading (non-AST) | `gh_bridge` |
|
|
104
|
+
| 4 | External documentation | `doc_fetcher` |
|
|
105
|
+
|
|
106
|
+
### Manifest Detection
|
|
107
|
+
|
|
108
|
+
Stack skill workflows detect project dependencies by scanning for manifest files. This isn't a tool — it's a reference pattern ([`skf-create-stack-skill/references/manifest-patterns.md`](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/src/skf-create-stack-skill/references/manifest-patterns.md)) consulted by workflow steps:
|
|
109
|
+
|
|
110
|
+
| Ecosystem | Manifest Files |
|
|
111
|
+
|-----------|----------------|
|
|
112
|
+
| JavaScript / TypeScript | `package.json` |
|
|
113
|
+
| Python | `requirements.txt`, `setup.py`, `pyproject.toml`, `Pipfile` |
|
|
114
|
+
| Rust | `Cargo.toml` |
|
|
115
|
+
| Go | `go.mod` |
|
|
116
|
+
| Java | `pom.xml`, `build.gradle` |
|
|
117
|
+
| Ruby | `Gemfile` |
|
|
118
|
+
| PHP | `composer.json` |
|
|
119
|
+
| .NET | `*.csproj` |
|
|
120
|
+
|
|
121
|
+
Detection runs at depth 0-1 from project root, excluding dependency trees (`node_modules/`, `.venv/`, `vendor/`), build output (`dist/`, `target/`, `__pycache__/`), and VCS directories.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Workspace Artifacts
|
|
126
|
+
|
|
127
|
+
Build artifacts are committable — another developer can reproduce the same skill:
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
forge-data/{skill-name}/
|
|
131
|
+
├── skill-brief.yaml # Compilation config (version-independent)
|
|
132
|
+
└── {version}/
|
|
133
|
+
├── provenance-map.json # Source map with AST bindings
|
|
134
|
+
├── evidence-report.md # Build audit trail
|
|
135
|
+
└── extraction-rules.yaml # Language-specific ast-grep schema
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
The `provenance-map.json` includes per-export `entries` with a `source_library` field identifying which library each export belongs to. For stack skills, it also includes an `integrations` array (cross-library patterns) and a `constituents` array (compose-mode only — tracks the compose-time snapshot of each source skill for staleness detection via metadata hash comparison). The `file_entries` array handles script/asset file-level provenance (SHA-256 hashes, source paths).
|
|
139
|
+
|
|
140
|
+
### Pipeline Result Contracts
|
|
141
|
+
|
|
142
|
+
Pipeline-facing workflows write a machine-readable result JSON file alongside their human-readable output. This enables reliable CI integration and pipeline chaining — downstream workflows or scripts can verify what the prior step produced without parsing markdown. Each run writes two files: a timestamped per-run record (`{skill-name}-result-{YYYYMMDD-HHmmss}.json`) that preserves the full audit trail across retries and aborts, and a stable `{skill-name}-result-latest.json` copy that pipeline consumers read without enumerating timestamps. The schema follows a consistent format: `skill`, `status` (success/failed/partial), `timestamp`, `outputs` (array of produced artifacts with type and path), and a skill-specific `summary` object.
|
|
143
|
+
|
|
144
|
+
`skills/` and `forge-data/` are committed. Agent memory (`_bmad/_memory/forger-sidecar/`) is gitignored.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Knowledge Base
|
|
149
|
+
|
|
150
|
+
SKF relies on a curated skill compilation knowledge base:
|
|
151
|
+
|
|
152
|
+
- Index: [`src/knowledge/skf-knowledge-index.csv`](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/src/knowledge/skf-knowledge-index.csv)
|
|
153
|
+
- Fragments: [`src/knowledge/`](https://github.com/armelhbobdad/bmad-module-skill-forge/tree/main/src/knowledge)
|
|
154
|
+
|
|
155
|
+
Workflows load only the fragments required for the current task to stay focused and compliant.
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Module Structure
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
src/
|
|
163
|
+
├── skf-forger/ # Agent skill (SKILL.md + manifest)
|
|
164
|
+
├── skf-setup/ # Setup skill (forge initialization)
|
|
165
|
+
├── skf-analyze-source/
|
|
166
|
+
├── skf-brief-skill/
|
|
167
|
+
├── skf-create-skill/
|
|
168
|
+
├── skf-quick-skill/
|
|
169
|
+
├── skf-create-stack-skill/
|
|
170
|
+
├── skf-verify-stack/
|
|
171
|
+
├── skf-refine-architecture/
|
|
172
|
+
├── skf-update-skill/
|
|
173
|
+
├── skf-audit-skill/
|
|
174
|
+
├── skf-test-skill/
|
|
175
|
+
├── skf-export-skill/
|
|
176
|
+
├── skf-rename-skill/
|
|
177
|
+
├── skf-drop-skill/
|
|
178
|
+
├── forger/
|
|
179
|
+
│ ├── forge-tier.yaml
|
|
180
|
+
│ ├── preferences.yaml
|
|
181
|
+
│ └── README.md
|
|
182
|
+
├── knowledge/
|
|
183
|
+
│ ├── skf-knowledge-index.csv
|
|
184
|
+
│ └── *.md (14 knowledge fragments + overview.md index)
|
|
185
|
+
├── shared/ # Cross-workflow resources
|
|
186
|
+
├── module.yaml # Module metadata (code, name, config vars)
|
|
187
|
+
└── module-help.csv # Skill menu for bmad-help integration
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Security
|
|
193
|
+
|
|
194
|
+
- All tool wrappers use array-style subprocess execution — no shell interpolation
|
|
195
|
+
- Input sanitization: allowlist characters for repo names, file paths, patterns
|
|
196
|
+
- File paths validated against project root (no directory traversal)
|
|
197
|
+
- **Source code never leaves the machine.** All processing is local (AST, QMD, validation).
|
|
198
|
+
- `doc_fetcher` informs users which URLs will be fetched externally before processing
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Ecosystem Alignment
|
|
203
|
+
|
|
204
|
+
SKF produces skills compatible with the [agentskills.io](https://agentskills.io) ecosystem:
|
|
205
|
+
|
|
206
|
+
- Full [specification](https://agentskills.io/specification) compliance
|
|
207
|
+
- Distribution via [`npx skills add/publish`](https://www.npmjs.com/package/skills)
|
|
208
|
+
- Compatible with [agentskills/agentskills](https://github.com/agentskills/agentskills) and [vercel-labs/skills](https://github.com/vercel-labs/skills)
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Appendix: Key Design Decisions
|
|
213
|
+
|
|
214
|
+
| Decision | Rationale |
|
|
215
|
+
|----------|-----------|
|
|
216
|
+
| **Solo agent (Ferris), not multi-agent** | One domain (skill compilation) doesn't benefit from handoffs. Shared knowledge base (AST patterns, provenance maps) is the core asset. |
|
|
217
|
+
| **Workflows drive modes, not conversation** | Ferris doesn't auto-switch based on question content. Invoke a workflow to change mode. Predictable behavior. |
|
|
218
|
+
| **Hub-and-spoke cross-knowledge** | Each skill covers one source repository. Stack skills compose cross-library integration patterns in `references/integrations/`, citing each library's own skill. |
|
|
219
|
+
| **Stack skill = compositional** | SKILL.md is the integration layer. references/ contains per-library + integration pairs. Partial regeneration on dependency updates. |
|
|
220
|
+
| **Snippet updates only at export** | Create/update write a draft `context-snippet.md` to `skills/`. Export regenerates the final `context-snippet.md` and publishes it to the platform context file (CLAUDE.md/AGENTS.md/.cursorrules). No managed-section updates in draft workflows. |
|
|
221
|
+
| **Bundle spec, version-pin at release** | Offline-capable. SKF ships with a vendored agentskills.io spec pinned at release time; spec drift is a maintainer concern handled at SKF release, not a runtime concern for users. |
|
package/docs/bmad-synergy.md
CHANGED
|
@@ -3,17 +3,13 @@ title: BMAD Synergy
|
|
|
3
3
|
description: How SKF workflows pair with BMAD CORE phases and optional modules (BMM, TEA, BMB, GDS, CIS) — integration patterns, entry points, and artifact flow
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
This page is for people already using [BMAD](https://docs.bmad-method.org/) who want to know where SKF workflows plug in. It assumes you know what BMM phases are, what TEA does, and what a BMAD module is. If any of that is new, start with the [BMAD docs](https://docs.bmad-method.org/) and then come back.
|
|
9
|
-
|
|
10
|
-
If you're new to SKF itself, read [Getting Started](../getting-started/) first. The rest of this page assumes you have SKF installed and have run `@Ferris SF`.
|
|
6
|
+
This page builds on BMAD concepts (BMM phases, TEA, modules). New to BMAD? Start with the [BMAD docs](https://docs.bmad-method.org/) first. New to SKF? Read [Getting Started](../getting-started/) instead.
|
|
11
7
|
|
|
12
8
|
---
|
|
13
9
|
|
|
14
10
|
## Launcher Skills vs Content Skills
|
|
15
11
|
|
|
16
|
-
A BMAD project that also uses SKF ends up with two different kinds of `SKILL.md` files living in the same
|
|
12
|
+
A BMAD project that also uses SKF ends up with two different kinds of `SKILL.md` files living in the same IDE skills directory. SKF supports 23 IDEs — Claude Code (`.claude/skills/`), Cursor (`.cursor/skills/`), GitHub Copilot (`.github/skills/`), Windsurf (`.windsurf/skills/`), Cline (`.cline/skills/`), Roo Code (`.roo/skills/`), Gemini CLI (`.gemini/skills/`), and 16 others — each with its own skill directory. See the [complete IDE → Context File mapping](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/src/skf-export-skill/assets/managed-section-format.md) for the full list. They look similar. They are not the same thing. This is the single most durable point of confusion, so get it straight up front.
|
|
17
13
|
|
|
18
14
|
| | BMAD launcher skill | SKF content skill |
|
|
19
15
|
|---|---|---|
|
|
@@ -23,7 +19,7 @@ A BMAD project that also uses SKF ends up with two different kinds of `SKILL.md`
|
|
|
23
19
|
| **Provenance** | Points to a BMAD workflow file inside `_bmad/` | Points to upstream repo commits, files, and line ranges |
|
|
24
20
|
| **Example** | `bmad-create-prd/SKILL.md` loads a PRD workflow | `hono-4.6.0/SKILL.md` contains verified Hono API signatures |
|
|
25
21
|
|
|
26
|
-
> BMAD skills *launch workflows*. SKF skills *are the workflows' output, frozen with citations*. Both coexist in the same
|
|
22
|
+
> BMAD skills *launch workflows*. SKF skills *are the workflows' output, frozen with citations*. Both coexist in the same IDE skills directory on purpose.
|
|
27
23
|
|
|
28
24
|
When a BMAD agent runs a workflow, that workflow can consult SKF content skills for verified API knowledge. The two kinds of skills compose — they don't compete.
|
|
29
25
|
|
|
@@ -124,7 +120,7 @@ This retrospective → update loop is the pattern that [Scenario A in Examples](
|
|
|
124
120
|
|
|
125
121
|
## SKF with Optional BMAD Modules
|
|
126
122
|
|
|
127
|
-
BMAD ships several [optional modules](https://
|
|
123
|
+
BMAD ships several [optional modules](https://github.com/orgs/bmad-code-org/repositories). Synergy with SKF ranges from very high (TEA) to narrow (CIS). This section is honest about both.
|
|
128
124
|
|
|
129
125
|
### TEA — Test Architect
|
|
130
126
|
|
|
@@ -146,9 +142,9 @@ Two concrete integrations:
|
|
|
146
142
|
- **Before Test Design / ATDD / Automate / Framework Scaffolding** — run `@Ferris CS` on whichever test library the strategy depends on (Playwright, Vitest, Pact, etc.). TEA's test-authoring agents then work against verified API surfaces instead of training-data approximations.
|
|
147
143
|
- **Before Release Gate** — run `@Ferris AS` on the skills the gate cites. If the skill has drifted from the current source, the drift report itself becomes evidence the gate can act on, and `@Ferris US` closes the loop.
|
|
148
144
|
|
|
149
|
-
### BMB —
|
|
145
|
+
### BMB — BMAD Builder
|
|
150
146
|
|
|
151
|
-
BMB authors extend BMAD with new agents, workflows, or entire modules. When a new module depends on third-party libraries, ship a verified companion skill alongside it:
|
|
147
|
+
BMB authors extend BMAD with new agents, workflows, or entire modules. SKF itself was built using BMB — it's a living proof-of-concept for the BMAD module architecture. When a new module depends on third-party libraries, ship a verified companion skill alongside it:
|
|
152
148
|
|
|
153
149
|
- During `module-builder`, run `@Ferris SS` on the module's declared stack. The resulting stack skill becomes part of the module's distribution — downstream users get both the BMAD module BMB built and the SKF content skill you compiled as its companion in a single install.
|
|
154
150
|
|
|
@@ -162,17 +158,19 @@ For narrative, character design, world-building, or genre research — no synerg
|
|
|
162
158
|
|
|
163
159
|
### CIS — Creative Intelligence Suite
|
|
164
160
|
|
|
165
|
-
|
|
161
|
+
Narrow but real synergy during the **brief-skill** phase. CIS's brainstorming coach, advanced elicitation, and party mode can sharpen scope decisions before compilation begins — especially when briefing a skill for a library you don't know well, or when multiple stakeholders disagree on what the skill should cover. The [oh-my-skills](https://github.com/armelhbobdad/oh-my-skills) repository uses BMAD Core + CIS alongside SKF: when briefing [`oms-storybook-react-vite`](https://github.com/armelhbobdad/oh-my-skills/blob/main/forge-data/oms-storybook-react-vite/skill-brief.yaml), CIS brainstorming, party mode, and advanced elicitation helped narrow a massive repo (Storybook supports Next.js, Astro, SvelteKit, and more — with extensive documentation for each) down to an accurate brief scoped specifically to React + Vite.
|
|
162
|
+
|
|
163
|
+
Beyond briefing, CIS and SKF don't overlap — CIS covers ideation, storytelling, and innovation strategy where there's no code to verify. Use CIS for the creative and strategic work, then bring SKF in once you're producing concrete technical artifacts.
|
|
166
164
|
|
|
167
165
|
---
|
|
168
166
|
|
|
169
167
|
## Delivery and Lifecycle in a BMAD Project
|
|
170
168
|
|
|
171
|
-
`@Ferris EX` is the **only workflow that introduces new skill context** into `CLAUDE.md
|
|
169
|
+
`@Ferris EX` is the **only workflow that introduces new skill context** into the three context files that serve all 23 IDEs: `CLAUDE.md` (Claude Code), `.cursorrules` (Cursor), and `AGENTS.md` (the remaining 21 IDEs — GitHub Copilot, Windsurf, Cline, Roo Code, Gemini CLI, and others). Each IDE also has its own skill root directory where skill files are installed (e.g., `.windsurf/skills/`, `.roo/skills/`, `.gemini/skills/`). Create-skill and update-skill produce draft artifacts that never touch those files directly — nothing reaches an agent's passive context until it has been through the EX gate. See [Skill Model → Dual-Output Strategy](../skill-model/#dual-output-strategy) for the architectural rationale.
|
|
172
170
|
|
|
173
171
|
This matters specifically in a BMAD project: you may have multiple BMAD modules, each with its own launcher skills, plus SKF content skills, all trying to contribute context. The write-guard means only verified, tested SKF skills ever reach an agent's passive context — nothing half-baked sneaks in. `@Ferris EX` injects managed sections that coexist cleanly with whatever BMAD's installer wrote in the same files.
|
|
174
172
|
|
|
175
|
-
For long-running BMAD projects, `@Ferris RS` (rename) and `@Ferris DS` (drop) keep the skill inventory clean as libraries get swapped, versions get deprecated, or naming conventions evolve across sprints. Both *rebuild* the existing managed sections in
|
|
173
|
+
For long-running BMAD projects, `@Ferris RS` (rename) and `@Ferris DS` (drop) keep the skill inventory clean as libraries get swapped, versions get deprecated, or naming conventions evolve across sprints. Both *rebuild* the existing managed sections in those context files so references stay consistent after a rename or drop — they never inject previously-unpublished content, so the EX gate still governs what initially enters those files.
|
|
176
174
|
|
|
177
175
|
---
|
|
178
176
|
|