bmad-module-skill-forge 2.2.0 → 4.0.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 +1 -1
- package/README.md +49 -49
- package/docs/404.md +10 -8
- package/docs/_data/pinned.yaml +22 -13
- package/docs/_internal/STABILITY.md +58 -35
- package/docs/agents.md +39 -53
- package/docs/architecture.md +65 -51
- package/docs/bmad-synergy.md +53 -51
- package/docs/campaign.md +127 -75
- package/docs/concepts.md +34 -28
- package/docs/examples.md +70 -68
- package/docs/forge-auto.md +34 -31
- package/docs/getting-started.md +118 -57
- package/docs/how-it-works.md +25 -21
- package/docs/index.md +15 -15
- package/docs/skill-model.md +70 -59
- package/docs/troubleshooting.md +143 -18
- package/docs/verifying-a-skill.md +87 -57
- package/docs/why-skf.md +24 -22
- package/docs/workflows.md +274 -110
- package/package.json +18 -10
- package/src/forger/preferences.yaml +8 -1
- package/src/knowledge/agentskills-spec.md +2 -0
- package/src/knowledge/ccc-bridge.md +40 -24
- package/src/knowledge/confidence-tiers.md +9 -5
- package/src/knowledge/overview.md +3 -3
- package/src/knowledge/progressive-capability.md +8 -8
- package/src/knowledge/provenance-tracking.md +9 -5
- package/src/knowledge/qmd-registry.md +3 -3
- package/src/knowledge/skf-knowledge-index.csv +2 -2
- package/src/knowledge/skill-lifecycle.md +18 -11
- package/src/knowledge/split-body-strategy.md +0 -3
- package/src/knowledge/tool-resolution.md +4 -2
- package/src/knowledge/version-paths.md +101 -15
- package/src/module-help.csv +3 -3
- package/src/module.yaml +10 -0
- package/src/shared/data/ast-grep-recipes.yaml +608 -0
- package/src/shared/data/ide-context-files.json +30 -0
- package/src/shared/health-check.md +31 -59
- package/src/shared/references/description-guard-protocol.md +12 -9
- package/src/shared/references/feasibility-report-schema.md +19 -13
- package/src/shared/references/headless-gate-convention.md +55 -3
- package/src/shared/references/output-contract-schema.md +19 -8
- package/src/shared/references/pipeline-contracts.md +94 -29
- package/src/shared/references/tessl-review.md +77 -0
- package/src/shared/scripts/schemas/skf-analyze-result-envelope.v1.json +194 -0
- package/src/shared/scripts/schemas/skf-audit-result-envelope.v1.json +192 -0
- package/src/shared/scripts/schemas/skf-brief-result-envelope.v1.json +32 -4
- package/src/shared/scripts/schemas/skf-campaign-result-envelope.v1.json +174 -0
- package/src/shared/scripts/schemas/skf-create-skill-result-envelope.v1.json +284 -0
- package/src/shared/scripts/schemas/skf-drop-skill-result-envelope.v1.json +164 -0
- package/src/shared/scripts/schemas/skf-export-result-envelope.v1.json +160 -0
- package/src/shared/scripts/schemas/skf-quick-skill-result-envelope.v1.json +261 -0
- package/src/shared/scripts/schemas/skf-refine-architecture-result-envelope.v1.json +192 -0
- package/src/shared/scripts/schemas/skf-rename-skill-result-envelope.v1.json +179 -0
- package/src/shared/scripts/schemas/skf-setup-result-envelope.v1.json +27 -11
- package/src/shared/scripts/schemas/skf-stack-result-envelope.v1.json +176 -0
- package/src/shared/scripts/schemas/skf-test-result-envelope.v1.json +173 -0
- package/src/shared/scripts/schemas/skf-update-result-envelope.v1.json +19 -5
- package/src/shared/scripts/schemas/skf-verify-stack-result-envelope.v1.json +180 -0
- package/src/shared/scripts/schemas/skill-brief.v1.json +34 -0
- package/src/shared/scripts/schemas/workspace-detection.v1.json +1 -1
- package/src/shared/scripts/skf-atomic-write.py +233 -64
- package/src/shared/scripts/skf-build-change-manifest.py +2753 -28
- package/src/shared/scripts/skf-ccc-git-hygiene.py +532 -0
- package/src/shared/scripts/skf-check-unit-records.py +184 -0
- package/src/shared/scripts/skf-check-workspace-drift.py +538 -9
- package/src/shared/scripts/skf-classify-changed-files.py +772 -0
- package/src/shared/scripts/skf-comention-pairs.py +1333 -123
- package/src/shared/scripts/skf-compare-file-hashes.py +267 -105
- package/src/shared/scripts/skf-count-imports.py +1867 -0
- package/src/shared/scripts/skf-count-tokens.py +1 -1
- package/src/shared/scripts/skf-derive-assembly-shape.py +21 -3
- package/src/shared/scripts/skf-description-guard.py +99 -11
- package/src/shared/scripts/skf-detect-docs.py +694 -2
- package/src/shared/scripts/skf-detect-language.py +486 -107
- package/src/shared/scripts/skf-detect-registry.py +887 -0
- package/src/shared/scripts/skf-detect-scripts-assets.py +197 -55
- package/src/shared/scripts/skf-detect-tools.py +209 -27
- package/src/shared/scripts/skf-detect-workspaces.py +506 -30
- package/src/shared/scripts/skf-disqualify-candidates.py +821 -182
- package/src/shared/scripts/skf-emit-brief-result-envelope.py +69 -191
- package/src/shared/scripts/skf-emit-result-envelope.py +1604 -106
- package/src/shared/scripts/skf-enumerate-stack-skills.py +986 -117
- package/src/shared/scripts/skf-extract-public-api.py +5247 -96
- package/src/shared/scripts/skf-extraction-inventory.py +1280 -0
- package/src/shared/scripts/skf-extraction-snapshot.py +664 -0
- package/src/shared/scripts/skf-fetch-temporal.py +674 -0
- package/src/shared/scripts/skf-find-cycles.py +97 -29
- package/src/shared/scripts/skf-find-test-report.py +476 -0
- package/src/shared/scripts/skf-forge-tier-rw.py +469 -205
- package/src/shared/scripts/skf-github-fetch.py +365 -0
- package/src/shared/scripts/skf-github-probe.py +700 -0
- package/src/shared/scripts/skf-hash-content.py +180 -20
- package/src/shared/scripts/skf-language-corpora.py +1 -1
- package/src/shared/scripts/skf-load-provenance.py +161 -27
- package/src/shared/scripts/skf-manifest-ops.py +1 -1
- package/src/shared/scripts/skf-merge-ccc-exclusions.py +2307 -223
- package/src/shared/scripts/skf-merge-doc-urls.py +143 -20
- package/src/shared/scripts/skf-names-present.py +221 -0
- package/src/shared/scripts/skf-pair-intersect.py +119 -28
- package/src/shared/scripts/skf-parse-gaps.py +1384 -0
- package/src/shared/scripts/skf-preapply.py +1 -1
- package/src/shared/scripts/skf-preflight.py +176 -28
- package/src/shared/scripts/skf-promote-staged.py +430 -0
- package/src/shared/scripts/skf-provenance-gap-dispatch.py +64 -8
- package/src/shared/scripts/skf-qmd-classify-collections.py +229 -45
- package/src/shared/scripts/skf-quick-batch.py +774 -0
- package/src/shared/scripts/skf-rebuild-managed-sections.py +972 -88
- package/src/shared/scripts/skf-recommend-scope-type.py +323 -156
- package/src/shared/scripts/skf-render-metadata-stats.py +156 -12
- package/src/shared/scripts/skf-render-quick-metadata.py +132 -28
- package/src/shared/scripts/skf-render-stack-metadata.py +976 -0
- package/src/shared/scripts/skf-resolve-authoritative-files.py +155 -14
- package/src/shared/scripts/skf-resolve-package.py +523 -106
- package/src/shared/scripts/skf-rewrite-skill-name.py +433 -47
- package/src/shared/scripts/skf-run-lock.py +577 -0
- package/src/shared/scripts/skf-scan-manifests.py +998 -57
- package/src/shared/scripts/skf-scan-skill-md-structure.py +1341 -37
- package/src/shared/scripts/skf-severity-classify.py +712 -108
- package/src/shared/scripts/skf-shape-detect.py +298 -204
- package/src/shared/scripts/skf-shard-body.py +9 -8
- package/src/shared/scripts/skf-skill-inventory.py +2412 -89
- package/src/shared/scripts/skf-skills-module.py +472 -0
- package/src/shared/scripts/skf-source-tree.py +1796 -0
- package/src/shared/scripts/skf-structural-diff.py +787 -121
- package/src/shared/scripts/skf-tessl-review.py +706 -0
- package/src/shared/scripts/skf-update-active-symlink.py +120 -67
- package/src/shared/scripts/skf-update-run-state.py +624 -0
- package/src/shared/scripts/skf-validate-brief-inputs.py +92 -29
- package/src/shared/scripts/skf-validate-brief-schema.py +23 -2
- package/src/shared/scripts/skf-validate-feasibility-report.py +577 -66
- package/src/shared/scripts/skf-validate-frontmatter.py +103 -26
- package/src/shared/scripts/skf-validate-output.py +712 -64
- package/src/shared/scripts/skf-validate-pins.py +1 -1
- package/src/shared/scripts/skf-verify-no-trace.py +116 -10
- package/src/shared/scripts/skf-verify-provenance-completeness.py +3945 -152
- package/src/shared/scripts/skf-write-skill-brief.py +406 -25
- package/src/shared/tool-requirements.yaml +201 -0
- package/src/skf-analyze-source/SKILL.md +41 -36
- package/src/skf-analyze-source/assets/skill-brief-schema.md +7 -8
- package/src/skf-analyze-source/customize.toml +36 -24
- package/src/skf-analyze-source/references/auto-docs-only.md +58 -20
- package/src/skf-analyze-source/references/continue.md +2 -13
- package/src/skf-analyze-source/references/discover-additional-source.md +147 -0
- package/src/skf-analyze-source/references/generate-briefs.md +121 -55
- package/src/skf-analyze-source/references/headless-contract.md +42 -15
- package/src/skf-analyze-source/references/identify-units.md +96 -110
- package/src/skf-analyze-source/references/init.md +73 -71
- package/src/skf-analyze-source/references/map-and-detect.md +123 -105
- package/src/skf-analyze-source/references/map-unit-exports.md +68 -0
- package/src/skf-analyze-source/references/recommend.md +51 -70
- package/src/skf-analyze-source/references/scan-project.md +60 -84
- package/src/skf-analyze-source/references/scan-root.md +39 -0
- package/src/skf-analyze-source/references/step-auto-scope-coexistence.md +47 -0
- package/src/skf-analyze-source/references/step-auto-scope-corpora.md +53 -0
- package/src/skf-analyze-source/references/step-auto-scope-split.md +91 -0
- package/src/skf-analyze-source/references/step-auto-scope.md +208 -293
- package/src/skf-analyze-source/references/step-shape-detect.md +14 -12
- package/src/skf-analyze-source/references/unit-detection-heuristics.md +37 -42
- package/src/skf-audit-skill/SKILL.md +43 -51
- package/src/skf-audit-skill/assets/drift-report-template.md +28 -3
- package/src/skf-audit-skill/customize.toml +41 -20
- package/src/skf-audit-skill/references/constituent-freshness.md +91 -0
- package/src/skf-audit-skill/references/doc-drift.md +141 -0
- package/src/skf-audit-skill/references/headless-contract.md +29 -0
- package/src/skf-audit-skill/references/health-check.md +2 -0
- package/src/skf-audit-skill/references/init.md +149 -210
- package/src/skf-audit-skill/references/re-index.md +103 -110
- package/src/skf-audit-skill/references/report.md +96 -33
- package/src/skf-audit-skill/references/semantic-diff.md +34 -25
- package/src/skf-audit-skill/references/severity-classify.md +79 -65
- package/src/skf-audit-skill/references/severity-rules.md +15 -6
- package/src/skf-audit-skill/references/structural-diff.md +80 -90
- package/src/skf-audit-skill/references/upstream-checkout.md +77 -0
- package/src/skf-audit-skill/scripts/render-drift-tables.py +712 -0
- package/src/skf-brief-skill/SKILL.md +37 -26
- package/src/skf-brief-skill/assets/description-voice-examples.md +1 -1
- package/src/skf-brief-skill/assets/scope-templates.md +18 -25
- package/src/skf-brief-skill/assets/skill-brief-schema.md +30 -23
- package/src/skf-brief-skill/customize.toml +48 -20
- package/src/skf-brief-skill/references/analyze-target.md +144 -127
- package/src/skf-brief-skill/references/confirm-brief.md +11 -9
- package/src/skf-brief-skill/references/draft-checkpoint.md +36 -17
- package/src/skf-brief-skill/references/gather-intent-ratify.md +68 -0
- package/src/skf-brief-skill/references/gather-intent.md +87 -182
- package/src/skf-brief-skill/references/headless-args.md +84 -16
- package/src/skf-brief-skill/references/health-check.md +1 -1
- package/src/skf-brief-skill/references/invocation-contract.md +18 -13
- package/src/skf-brief-skill/references/portfolio-similarity-check.md +1 -1
- package/src/skf-brief-skill/references/qmd-collection-registration.md +7 -10
- package/src/skf-brief-skill/references/scope-definition.md +123 -47
- package/src/skf-brief-skill/references/step-auto-brief.md +26 -100
- package/src/skf-brief-skill/references/step-auto-validate.md +20 -121
- package/src/skf-brief-skill/references/version-resolution.md +7 -10
- package/src/skf-brief-skill/references/write-brief.md +66 -57
- package/src/skf-campaign/SKILL.md +31 -34
- package/src/skf-campaign/assets/campaign-state-schema.json +25 -4
- package/src/skf-campaign/customize.toml +47 -16
- package/src/skf-campaign/references/campaign-contracts.md +39 -29
- package/src/skf-campaign/references/campaign-directive-spec.md +4 -2
- package/src/skf-campaign/references/health-check.md +7 -16
- package/src/skf-campaign/references/step-01-setup.md +46 -84
- package/src/skf-campaign/references/step-02-strategy.md +31 -30
- package/src/skf-campaign/references/step-03-pins.md +26 -18
- package/src/skf-campaign/references/step-04-provenance.md +24 -23
- package/src/skf-campaign/references/step-05-skill-loop.md +67 -48
- package/src/skf-campaign/references/step-06-batch.md +41 -34
- package/src/skf-campaign/references/step-07-capstone.md +40 -25
- package/src/skf-campaign/references/step-08-verify.md +28 -29
- package/src/skf-campaign/references/step-09-refine.md +29 -30
- package/src/skf-campaign/references/step-10-export.md +48 -36
- package/src/skf-campaign/references/step-11-maintenance.md +31 -34
- package/src/skf-campaign/references/step-resume.md +37 -68
- package/src/skf-campaign/scripts/campaign-deps.py +57 -18
- package/src/skf-campaign/scripts/campaign-parse-manifest.py +361 -54
- package/src/skf-campaign/scripts/campaign-provenance.py +96 -53
- package/src/skf-campaign/scripts/campaign-quality-gate.py +592 -0
- package/src/skf-campaign/scripts/campaign-render-batch.py +257 -49
- package/src/skf-campaign/scripts/campaign-render-kickoff.py +343 -50
- package/src/skf-campaign/scripts/campaign-report.py +204 -37
- package/src/skf-campaign/scripts/campaign-state.py +1128 -0
- package/src/skf-campaign/scripts/campaign-status.py +10 -74
- package/src/skf-campaign/scripts/campaign-validate-pins.py +30 -3
- package/src/skf-campaign/scripts/campaign-validate-state.py +34 -4
- package/src/skf-campaign/templates/campaign-brief-template.yaml +4 -5
- package/src/skf-campaign/templates/campaign-report-template.md +5 -1
- package/src/skf-campaign/templates/kickoff-template.md +0 -14
- package/src/skf-create-skill/SKILL.md +27 -20
- package/src/skf-create-skill/assets/compile-assembly-rules.md +11 -8
- package/src/skf-create-skill/assets/skill-sections.md +21 -11
- package/src/skf-create-skill/customize.toml +20 -8
- package/src/skf-create-skill/references/authoritative-files-protocol.md +36 -58
- package/src/skf-create-skill/references/batch-mode.md +81 -0
- package/src/skf-create-skill/references/ccc-index-check.md +27 -0
- package/src/skf-create-skill/references/compile.md +119 -70
- package/src/skf-create-skill/references/component-extraction.md +113 -91
- package/src/skf-create-skill/references/enrich.md +41 -23
- package/src/skf-create-skill/references/entry-points-by-hand.md +37 -0
- package/src/skf-create-skill/references/extract.md +204 -162
- package/src/skf-create-skill/references/extraction-patterns-by-hand.md +141 -0
- package/src/skf-create-skill/references/extraction-patterns-tracing.md +11 -11
- package/src/skf-create-skill/references/extraction-patterns.md +588 -201
- package/src/skf-create-skill/references/generate-artifacts.md +145 -93
- package/src/skf-create-skill/references/health-check.md +1 -1
- package/src/skf-create-skill/references/load-brief.md +53 -36
- package/src/skf-create-skill/references/relabel-rule.md +12 -0
- package/src/skf-create-skill/references/report.md +37 -57
- package/src/skf-create-skill/references/source-resolution-protocols.md +58 -169
- package/src/skf-create-skill/references/step-auto-shard.md +20 -93
- package/src/skf-create-skill/references/step-doc-rot.md +44 -60
- package/src/skf-create-skill/references/step-doc-sources.md +28 -19
- package/src/skf-create-skill/references/sub/ccc-discover.md +18 -7
- package/src/skf-create-skill/references/sub/fetch-docs.md +106 -59
- package/src/skf-create-skill/references/sub/fetch-temporal.md +53 -166
- package/src/skf-create-skill/references/tier-degradation-rules.md +18 -9
- package/src/skf-create-skill/references/validate.md +173 -99
- package/src/skf-create-skill/scripts/scan-doc-rot.py +232 -99
- package/src/skf-create-stack-skill/SKILL.md +29 -56
- package/src/skf-create-stack-skill/assets/metadata-contract.md +51 -0
- package/src/skf-create-stack-skill/assets/provenance-map-schema.md +15 -15
- package/src/skf-create-stack-skill/assets/stack-skill-template.md +23 -57
- package/src/skf-create-stack-skill/customize.toml +23 -12
- package/src/skf-create-stack-skill/references/compile-stack.md +57 -66
- package/src/skf-create-stack-skill/references/compose-mode-rules.md +24 -44
- package/src/skf-create-stack-skill/references/detect-integrations.md +92 -95
- package/src/skf-create-stack-skill/references/detect-manifests.md +46 -71
- package/src/skf-create-stack-skill/references/generate-output.md +138 -128
- package/src/skf-create-stack-skill/references/init.md +90 -32
- package/src/skf-create-stack-skill/references/integration-patterns.md +1 -17
- package/src/skf-create-stack-skill/references/invocation-contract.md +34 -0
- package/src/skf-create-stack-skill/references/manifest-patterns.md +32 -20
- package/src/skf-create-stack-skill/references/parallel-extract.md +112 -38
- package/src/skf-create-stack-skill/references/rank-and-confirm.md +57 -75
- package/src/skf-create-stack-skill/references/report.md +39 -33
- package/src/skf-create-stack-skill/references/validate.md +20 -39
- package/src/skf-drop-skill/SKILL.md +28 -51
- package/src/skf-drop-skill/customize.toml +44 -30
- package/src/skf-drop-skill/references/execute.md +83 -146
- package/src/skf-drop-skill/references/health-check.md +2 -0
- package/src/skf-drop-skill/references/invocation-contract.md +64 -0
- package/src/skf-drop-skill/references/report.md +46 -30
- package/src/skf-drop-skill/references/select.md +122 -124
- package/src/skf-drop-skill/scripts/dir-sizes.py +54 -26
- package/src/skf-drop-skill/scripts/drop-roster.py +322 -0
- package/src/skf-export-skill/SKILL.md +40 -62
- package/src/skf-export-skill/assets/managed-section-format.md +14 -50
- package/src/skf-export-skill/assets/snippet-format.md +3 -1
- package/src/skf-export-skill/customize.toml +42 -13
- package/src/skf-export-skill/references/generate-snippet.md +54 -46
- package/src/skf-export-skill/references/health-check.md +2 -0
- package/src/skf-export-skill/references/invocation-contract.md +15 -0
- package/src/skf-export-skill/references/load-skill.md +88 -62
- package/src/skf-export-skill/references/manifest-rebuild.md +9 -10
- package/src/skf-export-skill/references/multi-skill-mode.md +4 -4
- package/src/skf-export-skill/references/orphan-context-detection.md +13 -5
- package/src/skf-export-skill/references/orphan-row-detection.md +31 -22
- package/src/skf-export-skill/references/package.md +15 -73
- package/src/skf-export-skill/references/preflight-snippet-root-probe.md +51 -70
- package/src/skf-export-skill/references/result-envelope.md +31 -16
- package/src/skf-export-skill/references/summary.md +41 -17
- package/src/skf-export-skill/references/token-report.md +4 -12
- package/src/skf-export-skill/references/update-context.md +118 -237
- package/src/skf-forger/SKILL.md +61 -37
- package/src/skf-forger/bmad-skill-manifest.yaml +4 -1
- package/src/skf-forger/customize.toml +43 -0
- package/src/skf-forger/references/pipeline-mode.md +73 -18
- package/src/skf-forger/scripts/forge-status.py +299 -0
- package/src/skf-forger/scripts/parse-pipeline.py +322 -54
- package/src/skf-forger/scripts/pipeline-gate.py +428 -0
- package/src/skf-forger/scripts/pipeline-journal.py +1052 -0
- package/src/skf-quick-skill/SKILL.md +54 -53
- package/src/skf-quick-skill/assets/skill-template.md +4 -2
- package/src/skf-quick-skill/customize.toml +51 -20
- package/src/skf-quick-skill/references/batch-mode.md +74 -21
- package/src/skf-quick-skill/references/compile.md +30 -31
- package/src/skf-quick-skill/references/ecosystem-check.md +7 -57
- package/src/skf-quick-skill/references/finalize.md +69 -18
- package/src/skf-quick-skill/references/halt-contract.md +41 -29
- package/src/skf-quick-skill/references/health-check.md +5 -3
- package/src/skf-quick-skill/references/quick-extract.md +114 -45
- package/src/skf-quick-skill/references/registry-resolution.md +9 -64
- package/src/skf-quick-skill/references/resolve-target.md +116 -66
- package/src/skf-quick-skill/references/write-and-validate.md +79 -40
- package/src/skf-refine-architecture/SKILL.md +43 -53
- package/src/skf-refine-architecture/customize.toml +49 -20
- package/src/skf-refine-architecture/references/compile.md +97 -54
- package/src/skf-refine-architecture/references/exit-codes.md +30 -0
- package/src/skf-refine-architecture/references/finding-storage.md +21 -0
- package/src/skf-refine-architecture/references/gap-analysis.md +101 -38
- package/src/skf-refine-architecture/references/improvements.md +14 -20
- package/src/skf-refine-architecture/references/init.md +98 -57
- package/src/skf-refine-architecture/references/issue-detection.md +32 -39
- package/src/skf-refine-architecture/references/refinement-rules.md +37 -48
- package/src/skf-refine-architecture/references/report.md +65 -54
- package/src/skf-refine-architecture/scripts/skf-check-preservation.py +1619 -0
- package/src/skf-rename-skill/SKILL.md +19 -54
- package/src/skf-rename-skill/customize.toml +32 -26
- package/src/skf-rename-skill/references/execute.md +230 -184
- package/src/skf-rename-skill/references/exit-codes.md +7 -7
- package/src/skf-rename-skill/references/health-check.md +1 -7
- package/src/skf-rename-skill/references/invocation-contract.md +25 -0
- package/src/skf-rename-skill/references/report.md +63 -52
- package/src/skf-rename-skill/references/select.md +197 -115
- package/src/skf-rename-skill/scripts/skf-validate-rename-name.py +161 -21
- package/src/skf-setup/SKILL.md +26 -26
- package/src/skf-setup/customize.toml +14 -10
- package/src/skf-setup/references/auto-index.md +50 -63
- package/src/skf-setup/references/ccc-index.md +29 -90
- package/src/skf-setup/references/detect-and-tier.md +58 -67
- package/src/skf-setup/references/health-check.md +2 -0
- package/src/skf-setup/references/invocation-contract.md +14 -0
- package/src/skf-setup/references/report.md +43 -166
- package/src/skf-setup/references/tier-rules.md +5 -5
- package/src/skf-setup/references/write-config.md +34 -57
- package/src/skf-test-skill/SKILL.md +17 -57
- package/src/skf-test-skill/assets/output-section-formats.md +33 -34
- package/src/skf-test-skill/customize.toml +27 -13
- package/src/skf-test-skill/references/coherence-check.md +134 -62
- package/src/skf-test-skill/references/coverage-check-tiers.md +35 -0
- package/src/skf-test-skill/references/coverage-check.md +209 -264
- package/src/skf-test-skill/references/detect-mode.md +5 -5
- package/src/skf-test-skill/references/external-validators.md +94 -82
- package/src/skf-test-skill/references/health-check.md +6 -7
- package/src/skf-test-skill/references/init.md +164 -91
- package/src/skf-test-skill/references/invocation-contract.md +66 -0
- package/src/skf-test-skill/references/migration-section-rules.md +5 -2
- package/src/skf-test-skill/references/report.md +164 -142
- package/src/skf-test-skill/references/score.md +80 -107
- package/src/skf-test-skill/references/scoring-rules.md +42 -155
- package/src/skf-test-skill/references/source-access-protocol.md +18 -94
- package/src/skf-test-skill/references/step-hard-gate.md +51 -33
- package/src/skf-test-skill/scripts/aggregate-coherence.py +218 -30
- package/src/skf-test-skill/scripts/build-result-context.py +380 -0
- package/src/skf-test-skill/scripts/check-metadata-coherence.py +37 -4
- package/src/skf-test-skill/scripts/combine-external-scores.py +23 -6
- package/src/skf-test-skill/scripts/compute-score.py +223 -45
- package/src/skf-test-skill/scripts/gap-ledger.py +1666 -0
- package/src/skf-test-skill/scripts/hard-gate.py +203 -0
- package/src/skf-test-skill/scripts/load-coverage-inputs.py +1198 -0
- package/src/skf-test-skill/scripts/locate-export-segments.py +835 -0
- package/src/skf-test-skill/scripts/reconcile-coverage.py +547 -79
- package/src/skf-test-skill/scripts/score-signatures.py +479 -0
- package/src/skf-test-skill/scripts/stage-helper-payload.py +148 -0
- package/src/skf-test-skill/scripts/validate-inventory.py +311 -16
- package/src/skf-test-skill/scripts/verify-declared-numerator.py +133 -56
- package/src/skf-test-skill/templates/test-report-template.md +21 -15
- package/src/skf-update-skill/SKILL.md +38 -25
- package/src/skf-update-skill/customize.toml +27 -12
- package/src/skf-update-skill/references/detect-changes.md +253 -223
- package/src/skf-update-skill/references/gap-driven.md +336 -0
- package/src/skf-update-skill/references/health-check.md +31 -5
- package/src/skf-update-skill/references/init.md +254 -84
- package/src/skf-update-skill/references/invocation-contract.md +12 -0
- package/src/skf-update-skill/references/manual-section-rules.md +6 -23
- package/src/skf-update-skill/references/merge.md +182 -49
- package/src/skf-update-skill/references/re-extract.md +53 -262
- package/src/skf-update-skill/references/report.md +102 -35
- package/src/skf-update-skill/references/write.md +357 -155
- package/src/skf-update-skill/scripts/skf-new-file-diff.py +183 -46
- package/src/skf-verify-stack/SKILL.md +23 -42
- package/src/skf-verify-stack/assets/feasibility-report-template.md +11 -5
- package/src/skf-verify-stack/customize.toml +55 -22
- package/src/skf-verify-stack/references/coverage-patterns.md +17 -8
- package/src/skf-verify-stack/references/coverage.md +67 -64
- package/src/skf-verify-stack/references/exit-codes.md +21 -8
- package/src/skf-verify-stack/references/init.md +107 -62
- package/src/skf-verify-stack/references/integration-verification-rules.md +12 -13
- package/src/skf-verify-stack/references/integrations.md +106 -65
- package/src/skf-verify-stack/references/report.md +59 -42
- package/src/skf-verify-stack/references/requirements.md +32 -9
- package/src/skf-verify-stack/references/synthesize.md +53 -39
- package/src/skf-verify-stack/scripts/skf-coverage-tally.py +398 -52
- package/src/skf-verify-stack/scripts/skf-previous-report.py +330 -0
- package/src/skf-verify-stack/scripts/skf-report-delta.py +453 -49
- package/src/skf-verify-stack/scripts/skf-verdict-rollup.py +240 -27
- package/tools/cli/commands/install.js +11 -4
- package/tools/cli/commands/status.js +15 -3
- package/tools/cli/commands/update.js +11 -4
- package/tools/cli/lib/tool-check.js +320 -0
- package/tools/cli/lib/version-check.js +22 -9
- package/tools/cli/skf-cli.js +4 -1
- package/.gitattributes +0 -16
- package/.nvmrc +0 -1
- package/docs/_internal/RELEASING.md +0 -679
- package/release-audits/v1.0.0-launch-audit.md +0 -728
- package/src/skf-audit-skill/references/step-doc-drift.md +0 -177
- package/src/skf-brief-skill/references/headless-source-authority-detection.md +0 -26
- package/src/skf-campaign/manifest.yaml +0 -15
- package/src/skf-create-skill/assets/tessl-dismissal-rules.md +0 -106
- package/src/skf-create-skill/references/ecosystem-check.md +0 -74
- package/src/skf-drop-skill/references/headless-contract.md +0 -18
- package/src/skf-update-skill/references/merge-conflict-rules.md +0 -15
- package/src/skf-update-skill/references/remote-source-resolution.md +0 -98
- package/src/skf-update-skill/references/validate.md +0 -124
- package/tools/validate-docs-drift.js +0 -233
- package/tools/validate-docs-links.js +0 -665
package/README.md
CHANGED
|
@@ -12,16 +12,16 @@
|
|
|
12
12
|
[](https://www.npmjs.com/package/bmad-module-skill-forge)
|
|
13
13
|
[](https://opensource.org/licenses/MIT)
|
|
14
14
|
[](https://github.com/bmad-code-org/BMAD-METHOD)
|
|
15
|
-
[](https://www.python.org)
|
|
16
16
|
[](https://docs.astral.sh/uv/)
|
|
17
17
|
[](https://armelhbobdad.github.io/bmad-module-skill-forge/)
|
|
18
18
|
[](https://discord.gg/gk8jAdXWmj)
|
|
19
19
|
[](https://github.com/armelhbobdad/bmad-module-skill-forge/stargazers)
|
|
20
20
|
|
|
21
|
-
_Skill Forge analyzes your code repositories, documentation, and developer discourse to build verified instruction files for AI agents. Every instruction links back to its upstream
|
|
21
|
+
_Skill Forge analyzes your code repositories, documentation, and developer discourse to build verified instruction files for AI agents. Every instruction links back to its upstream: a specific `file:line` at a pinned commit when source is available, or a documentation URL when it isn't._
|
|
22
22
|
|
|
23
|
-
**If SKF fixes your agent's API guesses, give it a
|
|
24
|
-
**If it saved you an afternoon, [grab me a coffee ☕](https://buymeacoffee.com/armelhbobdad)
|
|
23
|
+
**If SKF fixes your agent's API guesses, give it a ⭐. It helps others find this tool.**
|
|
24
|
+
**If it saved you an afternoon, [grab me a coffee ☕](https://buymeacoffee.com/armelhbobdad). It helps me keep forging.**
|
|
25
25
|
|
|
26
26
|
</div>
|
|
27
27
|
|
|
@@ -29,7 +29,7 @@ _Skill Forge analyzes your code repositories, documentation, and developer disco
|
|
|
29
29
|
|
|
30
30
|
## The Problem
|
|
31
31
|
|
|
32
|
-
You ask an AI agent to use a library. It invents function names that don't exist. It guesses parameter types. You paste documentation into the context
|
|
32
|
+
You ask an AI agent to use a library. It invents function names that don't exist. It guesses parameter types. You paste documentation into the context, and it still gets details wrong. You write instructions by hand, and they go stale the moment the code changes.
|
|
33
33
|
|
|
34
34
|
This isn't an edge case. It's the default experience.
|
|
35
35
|
|
|
@@ -37,7 +37,7 @@ For the full story behind SKF, read [_Hallucination has a line number_](https://
|
|
|
37
37
|
|
|
38
38
|
## Before vs After
|
|
39
39
|
|
|
40
|
-
**Without SKF
|
|
40
|
+
**Without SKF**, your agent guesses:
|
|
41
41
|
|
|
42
42
|
```python
|
|
43
43
|
import cognee
|
|
@@ -46,7 +46,7 @@ import cognee
|
|
|
46
46
|
results = cognee.search("What does Cognee do?", mode="graph")
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
-
**With SKF
|
|
49
|
+
**With SKF**, your agent reads the verified skill:
|
|
50
50
|
|
|
51
51
|
```python
|
|
52
52
|
import cognee
|
|
@@ -60,24 +60,24 @@ results = await cognee.search(
|
|
|
60
60
|
)
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
-
The skill told the agent the real function name, the real parameters, and that the call is async
|
|
63
|
+
The skill told the agent the real function name, the real parameters, and that the call is async, all traced to the exact source line. This example is from the real [`oms-cognee`](https://github.com/armelhbobdad/oh-my-skills/blob/main/skills/oms-cognee/1.0.0/oms-cognee/SKILL.md) skill in [**oh-my-skills**](https://github.com/armelhbobdad/oh-my-skills), SKF's reference output. That skill predates provenance labels that follow the tool: its provenance map records `search` as read by eye, which SKF 3.0.0 cites as `[SRC:...]`, keeping `[AST:...]` for a definition an ast-grep rule matched. The [**Verifying a Skill**](#verifying-a-skill) section below shows how to walk the citation chain yourself.
|
|
64
64
|
|
|
65
65
|
## Install
|
|
66
66
|
|
|
67
|
-
Linux, Windows, and macOS supported ([platform details](https://armelhbobdad.github.io/bmad-module-skill-forge/getting-started/#platform-support)). Requires [Node.js](https://nodejs.org/) >= 22, [Python](https://www.python.org/) >= 3.
|
|
67
|
+
Linux, Windows, and macOS supported ([platform details](https://armelhbobdad.github.io/bmad-module-skill-forge/getting-started/#platform-support)). Requires [Node.js](https://nodejs.org/) >= 22, [Python](https://www.python.org/) >= 3.11, and [uv](https://docs.astral.sh/uv/) (Python package runner).
|
|
68
68
|
|
|
69
69
|
```bash
|
|
70
70
|
npx bmad-module-skill-forge install
|
|
71
71
|
```
|
|
72
72
|
|
|
73
|
-
You'll be
|
|
73
|
+
You'll be asked for a project name, where to save skills and workspace files, which IDEs you use, and whether to install learning material. When the install completes, open your IDE and start Ferris, the SKF agent. Type `/skf-forger` in Claude Code, Cursor and most other IDEs, or `$skf-forger` in Codex. IDEs that load skills on their own, such as GitHub Copilot, start Ferris when you ask for him. The installer prints the exact command for each IDE you picked. Then give Ferris the menu code `SF`; this page writes that step as `@Ferris SF`. Ferris reports the tools it found and your capability tier, which is how much analysis those tools allow. See the [docs](https://armelhbobdad.github.io/bmad-module-skill-forge/getting-started/) for other install methods.
|
|
74
74
|
|
|
75
75
|
## Quick Start
|
|
76
76
|
|
|
77
|
-
1. **Set up your environment:** `@Ferris SF` _(Setup Forge)_
|
|
78
|
-
2. **Zero-ceremony path:** `@Ferris forge-auto <repo-or-doc-url>` _(Forge-Auto)_
|
|
79
|
-
3. **Fast path:** `@Ferris QS <package-name>` _(Quick Skill)_
|
|
80
|
-
4. **Full quality path:** `@Ferris forge <
|
|
77
|
+
1. **Set up your environment:** `@Ferris SF` _(Setup Forge)_ detects your tools and sets your capability tier
|
|
78
|
+
2. **Zero-ceremony path:** `@Ferris forge-auto <repo-or-doc-url>` _(Forge-Auto)_ turns a repo or doc URL into a verified skill in one command. It scopes, briefs, compiles, tests and exports on its own. The test aims for a 90% score but still passes a skill that scores 80% or more, and records the shortfall in an evidence report.
|
|
79
|
+
3. **Fast path:** `@Ferris QS <package-name-or-github-url>` _(Quick Skill)_ writes a best-effort skill with no brief and no provenance map. `@Ferris forge-quick <package-name>` also tests and exports it.
|
|
80
|
+
4. **Full quality path:** `@Ferris forge <repo-url> <skill-name>` chains Brief → Create → Test → Export automatically. For maximum control, run the same steps one at a time and start a fresh session before each: `@Ferris BS` _(Brief Skill)_, `@Ferris CS` _(Create Skill)_, `@Ferris TS` _(Test Skill)_, `@Ferris EX` _(Export Skill)_.
|
|
81
81
|
|
|
82
82
|
For producing **many coordinated skills** across sessions, `@Ferris campaign` _(Campaign)_ orchestrates the whole set with dependency tracking and resume.
|
|
83
83
|
|
|
@@ -90,8 +90,8 @@ See the [workflows docs](https://armelhbobdad.github.io/bmad-module-skill-forge/
|
|
|
90
90
|
- **You use AI agents to write code** and they keep guessing API calls wrong
|
|
91
91
|
- **You maintain a library** and want to ship official, verified instruction files so AI agents use your API correctly
|
|
92
92
|
- **You manage a codebase with many dependencies** and want a consolidated "stack skill" that teaches your agent how all the pieces fit together
|
|
93
|
-
- **You use a SaaS API or closed-source tool** with no public code
|
|
94
|
-
- **You need different skills for different use cases** from the same target
|
|
93
|
+
- **You use a SaaS API or closed-source tool** with no public code: SKF can generate skills from documentation alone
|
|
94
|
+
- **You need different skills for different use cases** from the same target: compile multiple skills with different scopes from one repo or doc set (e.g., a core API skill and a migration guide skill)
|
|
95
95
|
|
|
96
96
|
## How SKF Compares
|
|
97
97
|
|
|
@@ -100,68 +100,68 @@ A skeptical reader is probably already considering one of these alternatives:
|
|
|
100
100
|
| | **Skill Forge** | MCP doc servers | Hand-edited `.cursorrules` | awesome-\* lists |
|
|
101
101
|
| -------------------------- | ----------------------------------------- | ----------------- | -------------------------- | ---------------- |
|
|
102
102
|
| Reproducible from upstream | AST + pinned commit (or pinned doc URL) | varies; opaque | whatever you wrote | none |
|
|
103
|
-
| Version-pinned & immutable | yes
|
|
103
|
+
| Version-pinned & immutable | yes, per-version directories | runtime-dependent | rots silently | no |
|
|
104
104
|
| Audit trail | `provenance-map.json` + test + evidence | depends on server | none | none |
|
|
105
105
|
| Runtime cost | zero (markdown + JSON) | a running process | zero | zero |
|
|
106
106
|
| Lifecycle tooling | rename, drop, update, export transactions | varies | file surgery | none |
|
|
107
|
-
| Falsifiable | yes
|
|
107
|
+
| Falsifiable | yes, three steps, 60 seconds | rarely | no | no |
|
|
108
108
|
|
|
109
109
|
The others aren't bad. They solve different problems. **SKF solves exactly one: the claim your agent is reading about a library was true at a specific commit on a specific day, and you can prove it in under a minute.**
|
|
110
110
|
|
|
111
111
|
## How Skill Forge Fixes This
|
|
112
112
|
|
|
113
|
-
SKF extracts real function signatures, types, and patterns from code, docs, and developer discourse
|
|
113
|
+
SKF extracts real function signatures, types, and patterns from code, docs, and developer discourse. Every instruction cites where it came from: the exact file and line for code, or the source document for docs and discussions. On top of that foundation:
|
|
114
114
|
|
|
115
|
-
1. **Version-pinned
|
|
116
|
-
2. **Lifecycle tooling
|
|
117
|
-
3. **Follows an open standard
|
|
115
|
+
1. **Version-pinned:** skills are stored per-version, so updating to v2.0 doesn't replace your v1.x skill. Compatible with [skills.sh](https://skills.sh) and [npx skills](https://www.npmjs.com/package/skills)
|
|
116
|
+
2. **Lifecycle tooling:** rename a skill, or deprecate or delete one version or the whole skill, without manual file surgery. Destructive operations are transactional.
|
|
117
|
+
3. **Follows an open standard:** skills comply with the [agentskills.io](https://agentskills.io) spec and work across Claude, Cursor, Copilot, and other AI agents
|
|
118
118
|
|
|
119
|
-
> **Every skill ships two files
|
|
119
|
+
> **Every skill ships two files: `SKILL.md` (the full instruction set, loaded on trigger) and `context-snippet.md` (an 80–120 token always-on index that the export step injects into `CLAUDE.md` / `AGENTS.md` / `.cursorrules`). Why both?** Per Vercel's agent evals, a docs index in passive context reached a **100% pass rate**, while skills reached **79%** only when the agent was told to use them, and 53% when it decided on its own (see [Skill Model → Dual-Output Strategy](https://armelhbobdad.github.io/bmad-module-skill-forge/skill-model/#dual-output-strategy)).
|
|
120
120
|
|
|
121
121
|
## Verifying a Skill
|
|
122
122
|
|
|
123
|
-
You can falsify any citation in an SKF-compiled skill in under a minute:
|
|
123
|
+
You can falsify any citation in an SKF-compiled skill in under a minute. Quick Skill output is the exception: it keeps no provenance map, so this audit does not apply to it.
|
|
124
124
|
|
|
125
|
-
1. **Open the skill's `provenance-map.json`**
|
|
126
|
-
2. **Open the skill's `metadata.json`**
|
|
125
|
+
1. **Open the skill's `provenance-map.json`** in the forge workspace (`forge-data/<skill>/<version>/` by default, not the skill folder). Find your symbol under `export_name` and read its `source_file` and `source_line`.
|
|
126
|
+
2. **Open the skill's `metadata.json`** (next to its `SKILL.md`) and read `source_commit` and `source_repo`.
|
|
127
127
|
3. **Jump to the upstream repo at that commit**, open that file, find that line. The signature in `SKILL.md` should match the one you're reading.
|
|
128
128
|
|
|
129
|
-
For docs-only skills, the audit shape is the same
|
|
129
|
+
For docs-only skills, the audit shape is the same: `provenance-map.json` still lists every symbol, but entries cite `[EXT:{url}]` instead of `file:line@SHA`, and step 3 becomes "open the doc URL and confirm the signature matches."
|
|
130
130
|
|
|
131
|
-
If it doesn't, that's a bug
|
|
131
|
+
If it doesn't, that's a bug. Open an issue and SKF will republish the skill with a fresh provenance map (a new commit SHA for source skills, a fresh fetch for docs-only). Falsifiability isn't a feature; it's the whole deal.
|
|
132
132
|
|
|
133
|
-
**Reference output: [oh-my-skills](https://github.com/armelhbobdad/oh-my-skills)
|
|
133
|
+
**Reference output: [oh-my-skills](https://github.com/armelhbobdad/oh-my-skills).** It holds four Deep-tier skills compiled by SKF (cocoindex, cognee, Storybook v10, uitripled), each shipping its full audit trail in-repo. Scores range from 99.0% to 99.49%. Every claim walks to an upstream line in under 60 seconds. Serves as both the worked example for this section and ongoing proof that the pipeline does what it says.
|
|
134
134
|
|
|
135
135
|
## Help SKF Improve
|
|
136
136
|
|
|
137
|
-
|
|
137
|
+
Every workflow ends with a health check. If it finds a problem in SKF's own instructions, it shows you the findings and, only if you approve, files bug reports as GitHub issues. Duplicates are detected, so reporting a known problem again is safe. Friction notes and gaps go to a local queue unless you choose to submit them too. **Please let workflows run to completion**, or [open an issue](https://github.com/armelhbobdad/bmad-module-skill-forge/issues/new/choose) directly. [Full details →](https://armelhbobdad.github.io/bmad-module-skill-forge/workflows/#terminal-step-health-check)
|
|
138
138
|
|
|
139
139
|
## Learn More
|
|
140
140
|
|
|
141
|
-
The docs are organized into three buckets
|
|
141
|
+
The docs are organized into three buckets: **Why** (start here), **Try** (do stuff), and **Reference** (look things up):
|
|
142
142
|
|
|
143
143
|
**Why**
|
|
144
144
|
|
|
145
|
-
- **[Why Skill Forge?](https://armelhbobdad.github.io/bmad-module-skill-forge/why-skf/)
|
|
146
|
-
- **[Verifying a Skill](https://armelhbobdad.github.io/bmad-module-skill-forge/verifying-a-skill/)
|
|
145
|
+
- **[Why Skill Forge?](https://armelhbobdad.github.io/bmad-module-skill-forge/why-skf/)**: What SKF is for, who it suits, and when it is the wrong tool
|
|
146
|
+
- **[Verifying a Skill](https://armelhbobdad.github.io/bmad-module-skill-forge/verifying-a-skill/)**: The 60-second audit recipe and scoring formula
|
|
147
147
|
|
|
148
148
|
**Try**
|
|
149
149
|
|
|
150
|
-
- **[Getting Started](https://armelhbobdad.github.io/bmad-module-skill-forge/getting-started/)
|
|
151
|
-
- **[Forge-Auto](https://armelhbobdad.github.io/bmad-module-skill-forge/forge-auto/)
|
|
152
|
-
- **[Campaign](https://armelhbobdad.github.io/bmad-module-skill-forge/campaign/)
|
|
153
|
-
- **[How It Works](https://armelhbobdad.github.io/bmad-module-skill-forge/how-it-works/)
|
|
154
|
-
- **[Examples](https://armelhbobdad.github.io/bmad-module-skill-forge/examples/)
|
|
155
|
-
- **[Workflows](https://armelhbobdad.github.io/bmad-module-skill-forge/workflows/)
|
|
150
|
+
- **[Getting Started](https://armelhbobdad.github.io/bmad-module-skill-forge/getting-started/)**: Install, first skill, prereqs, and config
|
|
151
|
+
- **[Forge-Auto](https://armelhbobdad.github.io/bmad-module-skill-forge/forge-auto/)**: The zero-ceremony path, one command from a repo or doc URL to a verified skill
|
|
152
|
+
- **[Campaign](https://armelhbobdad.github.io/bmad-module-skill-forge/campaign/)**: Orchestrate many coordinated skills across sessions with dependency tracking and resume
|
|
153
|
+
- **[How It Works](https://armelhbobdad.github.io/bmad-module-skill-forge/how-it-works/)**: Plain-English walkthrough of one skill being built, end to end
|
|
154
|
+
- **[Examples](https://armelhbobdad.github.io/bmad-module-skill-forge/examples/)**: Real-world scenarios with full command transcripts
|
|
155
|
+
- **[Workflows](https://armelhbobdad.github.io/bmad-module-skill-forge/workflows/)**: All 15 workflows with commands and connection diagrams
|
|
156
156
|
|
|
157
157
|
**Reference**
|
|
158
158
|
|
|
159
|
-
- **[Concepts](https://armelhbobdad.github.io/bmad-module-skill-forge/concepts/)
|
|
160
|
-
- **[Architecture](https://armelhbobdad.github.io/bmad-module-skill-forge/architecture/)
|
|
161
|
-
- **[Skill Model](https://armelhbobdad.github.io/bmad-module-skill-forge/skill-model/)
|
|
162
|
-
- **[Agents](https://armelhbobdad.github.io/bmad-module-skill-forge/agents/)
|
|
163
|
-
- **[BMAD Synergy](https://armelhbobdad.github.io/bmad-module-skill-forge/bmad-synergy/)
|
|
164
|
-
- **[Troubleshooting](https://armelhbobdad.github.io/bmad-module-skill-forge/troubleshooting/)
|
|
159
|
+
- **[Concepts](https://armelhbobdad.github.io/bmad-module-skill-forge/concepts/)**: Seven key terms, including provenance, confidence tiers and drift
|
|
160
|
+
- **[Architecture](https://armelhbobdad.github.io/bmad-module-skill-forge/architecture/)**: Runtime flow, 7 tools, workspace artifacts, security, and the design decisions behind them
|
|
161
|
+
- **[Skill Model](https://armelhbobdad.github.io/bmad-module-skill-forge/skill-model/)**: Capability tiers, confidence tiers, output format, dual-output strategy, ownership model
|
|
162
|
+
- **[Agents](https://armelhbobdad.github.io/bmad-module-skill-forge/agents/)**: Ferris, the single AI agent that runs every SKF workflow
|
|
163
|
+
- **[BMAD Synergy](https://armelhbobdad.github.io/bmad-module-skill-forge/bmad-synergy/)**: How SKF pairs with the BMAD Method's four phases and its optional modules: Test Architect (TEA), BMAD Builder (BMB), Game Dev Studio (GDS) and Creative Intelligence Suite (CIS)
|
|
164
|
+
- **[Troubleshooting](https://armelhbobdad.github.io/bmad-module-skill-forge/troubleshooting/)**: Common errors (forge setup, skill briefs, tier confidence, run locks, campaigns) and how to resolve them
|
|
165
165
|
|
|
166
166
|
## Acknowledgements
|
|
167
167
|
|
|
@@ -173,11 +173,11 @@ SKF builds on these excellent open-source tools:
|
|
|
173
173
|
| [GitHub CLI](https://cli.github.com/) | Source code access and repository intelligence (all tiers) |
|
|
174
174
|
| [ast-grep](https://github.com/ast-grep/ast-grep) | AST-based structural code extraction (Forge/Forge+/Deep tiers) |
|
|
175
175
|
| [ast-grep MCP](https://github.com/ast-grep/ast-grep-mcp) | MCP server for memory-efficient AST queries (recommended) |
|
|
176
|
-
| [cocoindex-code](https://github.com/cocoindex-io/cocoindex-code) | Semantic code search and file
|
|
176
|
+
| [cocoindex-code](https://github.com/cocoindex-io/cocoindex-code) | Semantic code search and file pre-ranking (Forge+; optional on Deep) |
|
|
177
177
|
| [QMD](https://github.com/tobi/qmd) | Local hybrid search engine for knowledge indexing (Deep tier) |
|
|
178
178
|
| [skill-check](https://github.com/thedaviddias/skill-check) | Skill validation, auto-fix, quality scoring, and security scanning |
|
|
179
179
|
| [Snyk Agent Scan](https://github.com/snyk/agent-scan) | Security scanning for prompt injection and data exposure (optional) |
|
|
180
|
-
| [tessl](https://tessl.io) |
|
|
180
|
+
| [tessl](https://tessl.io) | Opt-in Tessl Review: AI-judge scoring of description and content |
|
|
181
181
|
| [BMAD Method](https://github.com/bmad-code-org/BMAD-METHOD) | Agent-workflow framework that SKF extends as a module |
|
|
182
182
|
|
|
183
183
|
## Contributing
|
|
@@ -190,11 +190,11 @@ Past releases are documented in [CHANGELOG.md](CHANGELOG.md).
|
|
|
190
190
|
|
|
191
191
|
## License
|
|
192
192
|
|
|
193
|
-
MIT License
|
|
193
|
+
MIT License. See [LICENSE](LICENSE) for details.
|
|
194
194
|
|
|
195
195
|
---
|
|
196
196
|
|
|
197
|
-
**Skill Forge (SKF)
|
|
197
|
+
**Skill Forge (SKF)**: a standalone [BMAD](https://github.com/bmad-code-org/BMAD-METHOD) module for agent skill compilation.
|
|
198
198
|
|
|
199
199
|
[](https://github.com/armelhbobdad/bmad-module-skill-forge/graphs/contributors)
|
|
200
200
|
|
package/docs/404.md
CHANGED
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Page Not Found
|
|
3
|
-
description:
|
|
3
|
+
description: There is no page at this address. Use search or the links below to find what you need.
|
|
4
4
|
template: splash
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
## 404
|
|
7
|
+
## 404: no page at this address
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
There is no page at this address. This site has one rule for every claim: if it can't cite a source, we don't make it up. That goes for our own pages too, so we won't guess where you meant to go.
|
|
10
10
|
|
|
11
|
-
Try one of these
|
|
11
|
+
Try one of these pages instead, or use **Search** at the top of the page:
|
|
12
12
|
|
|
13
|
-
**Why
|
|
13
|
+
**Why:** [Why Skill Forge?](/docs/why-skf.md) · [Verifying a Skill](/docs/verifying-a-skill.md)
|
|
14
14
|
|
|
15
|
-
**Try
|
|
15
|
+
**Try:** [Getting Started](/docs/getting-started.md) · [Forge-Auto](/docs/forge-auto.md) · [Campaign](/docs/campaign.md) · [How It Works](/docs/how-it-works.md) · [Examples](/docs/examples.md) · [Workflows](/docs/workflows.md)
|
|
16
16
|
|
|
17
|
-
**Reference
|
|
17
|
+
**Reference:** [Concepts](/docs/concepts.md) · [Architecture](/docs/architecture.md) · [Skill Model](/docs/skill-model.md) · [Agents](/docs/agents.md) · [BMAD Synergy](/docs/bmad-synergy.md) · [Troubleshooting](/docs/troubleshooting.md)
|
|
18
|
+
|
|
19
|
+
Or start over from the [home page](/docs/index.md).
|
|
18
20
|
|
|
19
21
|
---
|
|
20
22
|
|
|
21
23
|
### Think this page should exist?
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
If a link on this site sent you here, that is a bug. Every change to these docs goes through a check that builds the site and confirms each link between our own pages leads to a real page, so a broken link should never ship. If one did, [open a bug report](https://github.com/armelhbobdad/bmad-module-skill-forge/issues/new/choose) with the URL you tried and the page that linked you here. If you typed the address, or followed a bookmark or a link from another site, the page may have moved or been renamed: search is the quickest way to find it.
|
package/docs/_data/pinned.yaml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Skill Forge
|
|
1
|
+
# Skill Forge: Pinned Canonical Anchors
|
|
2
2
|
#
|
|
3
3
|
# This file is the SINGLE SOURCE OF TRUTH for every version number, commit
|
|
4
4
|
# SHA, and library reference that the docs cite about oh-my-skills, the
|
|
@@ -8,8 +8,11 @@
|
|
|
8
8
|
# entry here and then run `npm run docs:validate-drift` from the SKF repo
|
|
9
9
|
# root. The script will:
|
|
10
10
|
#
|
|
11
|
-
# 1. Verify every skill below
|
|
12
|
-
#
|
|
11
|
+
# 1. Verify every skill below exists at the claimed version in
|
|
12
|
+
# $OMS/skills/<name>/<version>/<name>/metadata.json, and that its
|
|
13
|
+
# version, source_commit, confidence_tier and source_authority match.
|
|
14
|
+
# The other fields (source_repo, source_ref, upstream_commit_date,
|
|
15
|
+
# test_score, test_mode, language) are not checked.
|
|
13
16
|
# 2. Grep every docs/*.md for stale version strings and flag any that
|
|
14
17
|
# disagree with the anchors
|
|
15
18
|
#
|
|
@@ -17,25 +20,29 @@
|
|
|
17
20
|
# then fix the docs until the check is clean.
|
|
18
21
|
#
|
|
19
22
|
# Do NOT edit docs/*.md version references without updating this file
|
|
20
|
-
# first
|
|
23
|
+
# first. The drift check catches the mismatch when you run it. That's the point.
|
|
21
24
|
#
|
|
22
25
|
# File ignored by Astro/Starlight content collections because the parent
|
|
23
|
-
# directory starts with `_`.
|
|
26
|
+
# directory starts with `_`. Nothing reads it at build time: only
|
|
27
|
+
# tools/validate-docs-drift.js checks it, and release.yaml rewrites
|
|
28
|
+
# skf_version. CI does not run the drift check, and the check needs a local
|
|
29
|
+
# oh-my-skills checkout, so run `npm run docs:validate-drift` yourself.
|
|
24
30
|
|
|
25
|
-
# SKF package version
|
|
31
|
+
# SKF package version: matches the `version` field in package.json.
|
|
26
32
|
# Enforced two ways: (1) release.yaml bumps this line in the same commit
|
|
27
33
|
# as package.json + marketplace.json on every release; (2) validate-docs-drift.js
|
|
28
34
|
# cross-checks this value against package.json.version and fails on mismatch.
|
|
29
|
-
skf_version: "
|
|
35
|
+
skf_version: "4.0.0"
|
|
30
36
|
|
|
31
37
|
# Path to the oh-my-skills repo, resolved relative to this repo's root.
|
|
32
38
|
# Override at runtime with the OMS environment variable if oh-my-skills
|
|
33
39
|
# lives elsewhere on your machine.
|
|
34
40
|
oh_my_skills_path: "../oh-my-skills"
|
|
35
41
|
|
|
36
|
-
# Every oms-* skill currently shipped in oh-my-skills. The library
|
|
37
|
-
# (e.g. cognee) is the
|
|
38
|
-
# skill package name
|
|
42
|
+
# Every oms-* skill currently shipped in oh-my-skills. The `library` field
|
|
43
|
+
# (e.g. cognee) is the library name the docs use, and the drift check
|
|
44
|
+
# searches docs/*.md for it. The entry key is the skill package name, usually
|
|
45
|
+
# oms-<library>; oms-storybook-react-vite covers the storybook library.
|
|
39
46
|
skills:
|
|
40
47
|
oms-cognee:
|
|
41
48
|
library: cognee
|
|
@@ -90,9 +97,11 @@ skills:
|
|
|
90
97
|
language: "typescript"
|
|
91
98
|
|
|
92
99
|
# Libraries that are mentioned in docs as illustrative examples but don't
|
|
93
|
-
# have a corresponding oms-* skill.
|
|
94
|
-
#
|
|
95
|
-
#
|
|
100
|
+
# have a corresponding oms-* skill. Their versions are allowed to drift
|
|
101
|
+
# because they're illustration, not canonical. The drift check only searches
|
|
102
|
+
# for the `library` names under skills, so it already ignores every other
|
|
103
|
+
# library. This list matters only if one of these gains a skill: it then
|
|
104
|
+
# hides that library's drift until you remove it here.
|
|
96
105
|
illustrative_libraries:
|
|
97
106
|
- better-auth
|
|
98
107
|
- hono
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: SKF Stability & Public API Contract
|
|
3
|
-
description:
|
|
3
|
+
description: Which SKF surfaces SemVer covers, so that downstream consumers can pin against them, and which surfaces it excludes.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
> **Status:**
|
|
6
|
+
> **Status:** Stable. This contract took effect at v1.0.0 and was last amended at v3.0.0. Amendments follow [§ Changes to This Contract](#changes-to-this-contract), which also records what each one changed.
|
|
7
7
|
|
|
8
|
-
This document is the public API contract for `bmad-module-skill-forge
|
|
8
|
+
This document is the public API contract for `bmad-module-skill-forge`. 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": "^3.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, apart from the parts the release check reviews (see [§ @internal: Not Covered by SemVer](#internal--not-covered-by-semver)).
|
|
9
|
+
|
|
10
|
+
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 ([RFC 2119](https://www.rfc-editor.org/rfc/rfc2119), [RFC 8174](https://www.rfc-editor.org/rfc/rfc8174)) when, and only when, they appear in all capitals, as shown here.
|
|
9
11
|
|
|
10
12
|
## Covered Surfaces
|
|
11
13
|
|
|
12
|
-
The
|
|
14
|
+
The buckets below are the entirety of the public surface. Anything not explicitly listed here is `@internal` (see [§ @internal: Not Covered by SemVer](#internal--not-covered-by-semver)).
|
|
13
15
|
|
|
14
16
|
### CLI Command Surface
|
|
15
17
|
|
|
@@ -17,19 +19,19 @@ The CLI is invoked via `npx bmad-module-skill-forge <subcommand>` (one-shot) or
|
|
|
17
19
|
|
|
18
20
|
- **Subcommands**: `install`, `update`, `status`, `uninstall`. Renaming, removing, or changing the semantics of any subcommand is breaking.
|
|
19
21
|
- **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
|
|
22
|
+
- **Per-subcommand flags (other than `-h/--help`)**: none are currently part of this contract. Adding a new flag is additive (minor); removing or renaming a flag once added would be breaking.
|
|
21
23
|
- **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.
|
|
24
|
+
- **`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.
|
|
23
25
|
|
|
24
26
|
### Programmatic API of `tools/cli/skf-cli.js`
|
|
25
27
|
|
|
26
|
-
`tools/cli/skf-cli.js` is the CLI logic for `npx bmad-module-skill-forge` (invoked
|
|
28
|
+
`tools/cli/skf-cli.js` is the CLI logic for `npx bmad-module-skill-forge` (invoked through a thin `bin` wrapper at `tools/skf-npx-wrapper.js` that runs `skf-cli.js`) and for `npm run skf:<subcommand>`. It has **no programmatic export surface**: the file runs commander setup and calls `program.parse(process.argv)` as top-level side effects, and it has no `module.exports` block. `package.json` declares no `main` field, so a `require('bmad-module-skill-forge')` from Node finds no entry point and throws `MODULE_NOT_FOUND`; requiring the package is not a supported usage.
|
|
27
29
|
|
|
28
|
-
Programmatic embedding of SKF is explicitly `@internal
|
|
30
|
+
Programmatic embedding of SKF is explicitly `@internal`. If a programmatic API is ever added, it will be introduced through an explicit entry point in `package.json` and a `module.exports` block, with a minor version bump (additive).
|
|
29
31
|
|
|
30
32
|
### Skill Manifest & Frontmatter Contract
|
|
31
33
|
|
|
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
|
|
34
|
+
**`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`, a natural-language summary of at most 1024 characters that contains a `Use when` or `Use if` trigger clause, anywhere in the text and in any letter case, in which every quoted trigger names its object (`"drop a skill"`, never a bare verb such as `"drop"` or `"set up"`). Rule `SKILL-06` of [`tools/validate-skills.js`](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/tools/validate-skills.js) checks the length, the clause and the triggers; the `src/skf-*/SKILL.md` files in this repository are 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
35
|
|
|
34
36
|
**`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
37
|
|
|
@@ -57,67 +59,88 @@ The schema is strict — unknown keys are rejected. Renaming or removing a requi
|
|
|
57
59
|
|
|
58
60
|
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
61
|
|
|
60
|
-
- `_bmad/skf
|
|
61
|
-
- `_bmad/_config/skf-manifest.yaml
|
|
62
|
-
- `_bmad/_memory/forger-sidecar
|
|
63
|
-
- `_skf-learn
|
|
64
|
-
- `{skills_output_folder}
|
|
65
|
-
- `{forge_data_folder}
|
|
66
|
-
- `.gitignore` at project root
|
|
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
|
|
62
|
+
- `_bmad/skf/`: SKF module files.
|
|
63
|
+
- `_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 part of this contract.
|
|
64
|
+
- `_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).
|
|
65
|
+
- `_skf-learn/`: optional learning material; created only when the user opts into learning at install time.
|
|
66
|
+
- `{skills_output_folder}/`: default `skills/`, configurable via install prompt and persisted to `skf-manifest.yaml`.
|
|
67
|
+
- `{forge_data_folder}/`: default `forge-data/`, configurable via install prompt and persisted to `skf-manifest.yaml`.
|
|
68
|
+
- `.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.
|
|
69
|
+
- **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 this 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
70
|
|
|
69
71
|
### User-Facing Command Output Formats
|
|
70
72
|
|
|
71
|
-
|
|
73
|
+
This 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
74
|
|
|
73
75
|
- **`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
76
|
- **`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
77
|
- **`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
78
|
- **`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
79
|
|
|
78
|
-
Explicit non-commitments: ANSI color choices, exact prose wording, precise layout of tables or lists, and i18n prose variations are `@internal` and
|
|
80
|
+
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
81
|
|
|
80
82
|
### Engine & Platform Compatibility
|
|
81
83
|
|
|
82
84
|
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
85
|
|
|
84
|
-
|
|
86
|
+
The external tools SKF runs have minimum versions too, in `src/shared/tool-requirements.yaml` (installed as `_bmad/skf/shared/tool-requirements.yaml`), such as ast-grep >= 0.45.3 and git >= 2.15; a tool whose `minimum` is null has none. `skf install`, `skf update` and `skf status` report each tool against its minimum, and `skf-setup` counts no tier tool below its minimum toward the capability tier. Raising a tool's minimum, or giving a tool a minimum it did not have, is breaking. Lowering or removing a minimum is additive. Changing a tool's `tested` versions is neither. The release check compares these minimums with the last stable release, as it does the items of [§ Workflow Contract Surfaces](#workflow-contract-surfaces): a raised or new minimum needs a major release and a breaking change fragment that names the tool.
|
|
87
|
+
|
|
88
|
+
### Workflow Contract Surfaces
|
|
85
89
|
|
|
86
|
-
|
|
90
|
+
These are the parts of SKF's workflows that pipelines, scripts and saved Ferris commands depend on by name. Removing or renaming any item below is breaking (major), and adding one is additive (minor); for a flag, removing it means what the **Workflow flags** entry says:
|
|
87
91
|
|
|
88
|
-
-
|
|
89
|
-
- **
|
|
90
|
-
-
|
|
91
|
-
- **
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
92
|
+
- **Schema enum values and properties.** Every enum value and every property in the JSON schemas directly under `src/shared/scripts/schemas/` (installed under `_bmad/skf/shared/scripts/schemas/`): the skill brief, workspace detection, and the headless result envelope of every workflow, covered from 3.0.0 with its `status`, `exit_code` and `halt_reason` values and its properties: `skf-analyze-source` (`skf-analyze-result-envelope.v1.json`), `skf-audit-skill` (`skf-audit-result-envelope.v1.json`, whose `halt_reason` values include `helper-missing`, `provenance-invalid`, `source-unreadable` and `no-baseline`, and whose properties include `upstream_moved` and `upstream_ref`), `skf-brief-skill` (`skf-brief-result-envelope.v1.json`), `skf-campaign` (`skf-campaign-result-envelope.v1.json`), `skf-create-skill` (`skf-create-skill-result-envelope.v1.json`), `skf-create-stack-skill` (`skf-stack-result-envelope.v1.json`, whose `halt_reason` values include `helper-missing`, and whose properties include `run_id`, `result_path`, `headless_decisions` and `warnings`), `skf-drop-skill` (`skf-drop-skill-result-envelope.v1.json`), `skf-export-skill` (`skf-export-result-envelope.v1.json`), `skf-quick-skill` (`skf-quick-skill-result-envelope.v1.json`), `skf-refine-architecture` (`skf-refine-architecture-result-envelope.v1.json`), `skf-rename-skill` (`skf-rename-skill-result-envelope.v1.json`), `skf-setup` (`skf-setup-result-envelope.v1.json`), `skf-test-skill` (`skf-test-result-envelope.v1.json`), `skf-update-skill` (`skf-update-result-envelope.v1.json`) and `skf-verify-stack` (`skf-verify-stack-result-envelope.v1.json`). For example, the `status` values of `skf-setup-result-envelope.v1.json`.
|
|
93
|
+
- **Ferris menu codes.** The codes in the Code column of the Capabilities table in `src/skf-forger/SKILL.md`, such as `SF`, `CS` and `CA`. The descriptions beside them stay `@internal`.
|
|
94
|
+
- **Pipeline aliases.** The aliases in the alias table of `src/shared/references/pipeline-contracts.md`, such as `forge-auto` and `maintain`. An alias named on a "Deprecated alias:" line there still works and stays covered, so deprecating one is not breaking; removing it is. The rest of that file stays `@internal`.
|
|
95
|
+
- **Workflow flags.** Every flag, such as `--headless` and `--dry-run`, written in the Flags, Inputs, Headless inputs, Headless flag or Overrides row of a workflow's `SKILL.md` (`src/skf-<name>/SKILL.md`) or of its `references/invocation-contract.md` (where a headless contract moved out of `SKILL.md` keeps its rows), per workflow. A row moved from one of these files to the other moves no flag. A flag counts when it opens a backticked span, such as `--tier=<Quick>`, or is a long flag written without backticks, such as `--batch`. A flag written only elsewhere in those files, or only inside a longer backticked command such as `campaign resume [--from=<skill>]`, is not covered. A flag that enters a flag row is added, even when the workflow's files named it before. A covered flag is removed, and so breaking, when the Markdown of its workflow (`SKILL.md`, `references/`, `templates/` and `assets/`) no longer names it; a mention in a command that runs another program, in an argument the workflow hands to a helper script, or in a note that the flag was renamed or removed does not count. A flag that leaves every flag row while that Markdown still names it is listed for review at release time instead, unless a flag the workflow never named before enters its rows in the same release: that may be a rename, so it counts as a removal.
|
|
96
|
+
|
|
97
|
+
Each release checks this bucket mechanically: [`tools/covered-surfaces.js`](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/tools/covered-surfaces.js) compares these items with the last stable release, and the release workflow refuses a release that removes one unless it is a major release whose notes name the item. The same check also reports the workflow exit codes and the `halt_reason` and `error.phase` values written in the step files, required schema fields, preference keys and install config keys: a new exit code or preference key raises the minimum bump to minor, and the other changes are listed for review at release time. None of these is part of this contract beyond the `exit_code` and `halt_reason` values a result envelope schema lists (**Schema enum values and properties**, above), and promoting one later is an additive change.
|
|
98
|
+
|
|
99
|
+
## @internal — Not Covered by SemVer
|
|
100
|
+
|
|
101
|
+
The following surfaces are explicitly excluded from this contract. Changes to any of these MAY land in any release (patch, minor, or major) without constituting a "breaking change" from a SemVer perspective, except the parts that entries below name as reviewed by the release check. Downstream consumers SHOULD NOT pin against these surfaces.
|
|
102
|
+
|
|
103
|
+
- **`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.
|
|
104
|
+
- **Workflow step files and reference material under `src/skf-*/references/`**: the workflow authoring format is an SKF-internal authoring surface; step numbering, file names, prose and reference material can change. The exit-code tables and the `halt_reason` and `error.phase` values these files define are the exception: the release check reviews every change to them at each release, and a new workflow exit code needs at least a minor bump, while an `exit_code` or `halt_reason` value a result envelope schema lists is covered surface (see [§ Workflow Contract Surfaces](#workflow-contract-surfaces)).
|
|
105
|
+
- **`_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. The preference keys of `preferences.yaml` are the exception: the release check reviews every change to them at each release, and a new preference key needs at least a minor bump (see [§ Workflow Contract Surfaces](#workflow-contract-surfaces)).
|
|
106
|
+
- **Ferris agent persona prose and menu wording**: the in-product agent persona can be rephrased or restructured at any time.
|
|
107
|
+
The menu codes themselves are covered: see [§ Workflow Contract Surfaces](#workflow-contract-surfaces).
|
|
108
|
+
- **Exact chalk styling / ANSI color choices in command output**: stylistic; see the output-format bucket above for what is committed.
|
|
109
|
+
- **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.
|
|
110
|
+
- **Workflow `{communication_language}` / `{document_output_language}` template substitution**: an authoring convenience for workflow prose; the mechanism is internal.
|
|
111
|
+
- **Knowledge-base contents under `src/knowledge/`**: evolving reference material, not a schema.
|
|
112
|
+
- **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)).
|
|
113
|
+
- **Build and docs tooling (`tools/build-docs.js`, `website/`)**: internal build pipeline for the Starlight docs site; not a consumer surface.
|
|
114
|
+
- **`_bmad-output/` planning-artifact layout**: gitignored and never distributed; not shipped in the npm package.
|
|
99
115
|
|
|
100
116
|
## How to Use This Contract
|
|
101
117
|
|
|
102
118
|
Pin SKF as a dependency with caret-range major-version pinning to get minor and patch updates automatically:
|
|
103
119
|
|
|
104
120
|
```json
|
|
105
|
-
"bmad-module-skill-forge": "^
|
|
121
|
+
"bmad-module-skill-forge": "^3.0.0"
|
|
106
122
|
```
|
|
107
123
|
|
|
108
124
|
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
125
|
|
|
110
|
-
If a surface you depend on is
|
|
126
|
+
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
127
|
|
|
112
128
|
## Changes to This Contract
|
|
113
129
|
|
|
114
130
|
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 docs/_internal/STABILITY.md`.
|
|
115
131
|
|
|
132
|
+
What each version changed in this contract:
|
|
133
|
+
|
|
134
|
+
- **v1.0.0**: the contract took effect, with the first six buckets of [§ Covered Surfaces](#covered-surfaces).
|
|
135
|
+
- **v3.0.0**: added [§ Workflow Contract Surfaces](#workflow-contract-surfaces), which widens what the contract covers and removes nothing from it, so it is an additive change. It also adopted the BCP 14 keywords, stopped counting the workflow exit codes, `halt_reason` and `error.phase` values and preference keys that the release check reviews among the `@internal` surfaces free to change in any release, restated the `SKILL.md` description rule as rule `SKILL-06` checks it, trigger phrases that name their object included, named the headless result envelope schema of every workflow among the covered schemas, and recorded that `package.json` declares no `main` field, so requiring the package throws `MODULE_NOT_FOUND`. It also added the tool minimums of `tool-requirements.yaml` to [§ Engine & Platform Compatibility](#engine--platform-compatibility), so raising or adding one is breaking.
|
|
136
|
+
|
|
116
137
|
## References
|
|
117
138
|
|
|
118
139
|
- [agentskills.io spec](https://github.com/agentskills/agentskills) — external canonical source for the `SKILL.md` frontmatter grammar.
|
|
119
140
|
- [Semantic Versioning 2.0.0](https://semver.org/) — the SemVer semantics this contract commits to.
|
|
141
|
+
- [BCP 14](https://www.rfc-editor.org/info/bcp14) ([RFC 2119](https://www.rfc-editor.org/rfc/rfc2119) and [RFC 8174](https://www.rfc-editor.org/rfc/rfc8174)): the meaning of the requirement words this document writes in capitals.
|
|
120
142
|
- [`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/_internal/RELEASING.md`](RELEASING.md) — maintainer reference for the release pipeline (companion document: this file is about what ships, `RELEASING.md` is about how).
|
|
143
|
+
- [`docs/_internal/RELEASING.md`](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/docs/_internal/RELEASING.md) — maintainer reference for the release pipeline (companion document: this file is about what ships, `RELEASING.md` is about how). Linked by URL, not relatively: `RELEASING.md` is maintainer-only and excluded from the published npm tarball, while this file ships as the public API contract, so a relative link would dangle for anyone reading the installed package.
|
|
144
|
+
- [`tools/covered-surfaces.js`](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/tools/covered-surfaces.js) and [`changes/README.md`](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/changes/README.md): the release check for [§ Workflow Contract Surfaces](#workflow-contract-surfaces) and the change-fragment format the release notes are written in. Linked by URL: neither ships in the npm package.
|
|
122
145
|
- [`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
146
|
- [`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).
|