bmad-module-skill-forge 1.9.0 → 2.0.1
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/.nvmrc +1 -1
- package/README.md +10 -5
- package/docs/_data/pinned.yaml +2 -2
- package/docs/agents.md +11 -2
- package/docs/architecture.md +5 -4
- package/docs/bmad-synergy.md +30 -7
- package/docs/campaign.md +172 -0
- package/docs/examples.md +7 -3
- package/docs/forge-auto.md +90 -0
- package/docs/getting-started.md +9 -0
- package/docs/how-it-works.md +6 -4
- package/docs/index.md +4 -3
- package/docs/skill-model.md +1 -1
- package/docs/troubleshooting.md +17 -1
- package/docs/verifying-a-skill.md +2 -2
- package/docs/why-skf.md +1 -1
- package/docs/workflows.md +64 -24
- package/package.json +2 -2
- package/src/knowledge/skill-lifecycle.md +1 -1
- package/src/module-help.csv +4 -3
- package/src/shared/data/language-corpora.json +32 -0
- package/src/shared/references/pipeline-contracts.md +6 -3
- package/src/shared/scripts/schemas/skill-brief.v1.json +6 -1
- package/src/shared/scripts/skf-comention-pairs.py +350 -0
- package/src/shared/scripts/skf-count-tokens.py +222 -0
- package/src/shared/scripts/skf-derive-assembly-shape.py +107 -0
- package/src/shared/scripts/skf-detect-docs.py +240 -4
- package/src/shared/scripts/skf-detect-language.py +82 -3
- package/src/shared/scripts/skf-detect-tools.py +105 -2
- package/src/shared/scripts/skf-emit-result-envelope.py +17 -0
- package/src/shared/scripts/skf-enumerate-stack-skills.py +111 -2
- package/src/shared/scripts/skf-extract-public-api.py +53 -0
- package/src/shared/scripts/skf-find-cycles.py +246 -0
- package/src/shared/scripts/skf-hash-content.py +487 -2
- package/src/shared/scripts/skf-language-corpora.py +100 -0
- package/src/shared/scripts/skf-manifest-ops.py +67 -1
- package/src/shared/scripts/skf-merge-doc-urls.py +244 -0
- package/src/shared/scripts/skf-preapply.py +1 -1
- package/src/shared/scripts/skf-rebuild-managed-sections.py +180 -0
- package/src/shared/scripts/skf-recommend-scope-type.py +1 -2
- package/src/shared/scripts/skf-render-metadata-stats.py +499 -0
- package/src/shared/scripts/skf-rewrite-skill-name.py +308 -0
- package/src/shared/scripts/skf-shape-detect.py +576 -25
- package/src/shared/scripts/skf-shard-body.py +461 -0
- package/src/shared/scripts/skf-skill-inventory.py +139 -3
- package/src/shared/scripts/skf-structural-diff.py +307 -67
- package/src/shared/scripts/skf-validate-brief-schema.py +41 -6
- package/src/shared/scripts/skf-validate-feasibility-report.py +234 -0
- package/src/shared/scripts/skf-validate-frontmatter.py +17 -12
- package/src/shared/scripts/skf-validate-output.py +443 -10
- package/src/shared/scripts/skf-validate-pins.py +3 -3
- package/src/shared/scripts/skf-verify-no-trace.py +214 -0
- package/src/shared/scripts/skf-verify-provenance-completeness.py +439 -0
- package/src/shared/scripts/skf-write-skill-brief.py +21 -5
- package/src/skf-analyze-source/SKILL.md +17 -32
- package/src/skf-analyze-source/assets/skill-brief-schema.md +1 -1
- package/src/skf-analyze-source/customize.toml +2 -0
- package/src/skf-analyze-source/references/auto-docs-only.md +116 -0
- package/src/skf-analyze-source/references/continue.md +8 -13
- package/src/skf-analyze-source/references/generate-briefs.md +28 -12
- package/src/skf-analyze-source/references/headless-contract.md +33 -0
- package/src/skf-analyze-source/references/health-check.md +1 -2
- package/src/skf-analyze-source/references/identify-units.md +25 -36
- package/src/skf-analyze-source/references/init.md +12 -25
- package/src/skf-analyze-source/references/map-and-detect.md +8 -20
- package/src/skf-analyze-source/references/recommend.md +4 -14
- package/src/skf-analyze-source/references/scan-project.md +3 -11
- package/src/skf-analyze-source/references/step-auto-scope.md +211 -197
- package/src/skf-analyze-source/references/step-shape-detect.md +20 -13
- package/src/skf-analyze-source/references/unit-detection-heuristics.md +2 -2
- package/src/skf-audit-skill/SKILL.md +9 -6
- package/src/skf-audit-skill/customize.toml +2 -0
- package/src/skf-audit-skill/references/init.md +58 -32
- package/src/skf-audit-skill/references/re-index.md +15 -34
- package/src/skf-audit-skill/references/report.md +11 -58
- package/src/skf-audit-skill/references/semantic-diff.md +4 -22
- package/src/skf-audit-skill/references/severity-classify.md +53 -87
- package/src/skf-audit-skill/references/step-doc-drift.md +49 -19
- package/src/skf-audit-skill/references/structural-diff.md +43 -68
- package/src/skf-brief-skill/SKILL.md +7 -36
- package/src/skf-brief-skill/assets/scope-templates.md +1 -1
- package/src/skf-brief-skill/assets/skill-brief-schema.md +1 -1
- package/src/skf-brief-skill/customize.toml +14 -0
- package/src/skf-brief-skill/references/analyze-target.md +13 -18
- package/src/skf-brief-skill/references/confirm-brief.md +2 -15
- package/src/skf-brief-skill/references/draft-checkpoint.md +8 -8
- package/src/skf-brief-skill/references/gather-intent.md +27 -24
- package/src/skf-brief-skill/references/headless-args.md +1 -1
- package/src/skf-brief-skill/references/health-check.md +1 -22
- package/src/skf-brief-skill/references/invocation-contract.md +37 -0
- package/src/skf-brief-skill/references/scope-definition.md +6 -15
- package/src/skf-brief-skill/references/step-auto-brief.md +22 -9
- package/src/skf-brief-skill/references/step-auto-validate.md +3 -7
- package/src/skf-brief-skill/references/version-resolution.md +1 -1
- package/src/skf-brief-skill/references/write-brief.md +19 -13
- package/src/skf-campaign/SKILL.md +121 -0
- package/src/skf-campaign/assets/campaign-state-schema.json +191 -0
- package/src/skf-campaign/customize.toml +75 -0
- package/src/skf-campaign/manifest.yaml +15 -0
- package/src/skf-campaign/references/campaign-contracts.md +67 -0
- package/src/skf-campaign/references/campaign-directive-spec.md +32 -0
- package/src/skf-campaign/references/health-check.md +35 -0
- package/src/skf-campaign/references/step-01-setup.md +121 -0
- package/src/skf-campaign/references/step-02-strategy.md +102 -0
- package/src/skf-campaign/references/step-03-pins.md +56 -0
- package/src/skf-campaign/references/step-04-provenance.md +63 -0
- package/src/skf-campaign/references/step-05-skill-loop.md +103 -0
- package/src/skf-campaign/references/step-06-batch.md +88 -0
- package/src/skf-campaign/references/step-07-capstone.md +63 -0
- package/src/skf-campaign/references/step-08-verify.md +75 -0
- package/src/skf-campaign/references/step-09-refine.md +83 -0
- package/src/skf-campaign/references/step-10-export.md +106 -0
- package/src/skf-campaign/references/step-11-maintenance.md +84 -0
- package/src/skf-campaign/references/step-resume.md +115 -0
- package/src/skf-campaign/scripts/.gitkeep +0 -0
- package/src/skf-campaign/scripts/campaign-deps.py +244 -0
- package/src/skf-campaign/scripts/campaign-parse-manifest.py +119 -0
- package/src/skf-campaign/scripts/campaign-provenance.py +247 -0
- package/src/skf-campaign/scripts/campaign-render-batch.py +199 -0
- package/src/skf-campaign/scripts/campaign-render-kickoff.py +158 -0
- package/src/skf-campaign/scripts/campaign-report.py +249 -0
- package/src/skf-campaign/scripts/campaign-status.py +162 -0
- package/src/skf-campaign/scripts/campaign-validate-pins.py +174 -0
- package/src/skf-campaign/scripts/campaign-validate-state.py +207 -0
- package/src/skf-campaign/templates/campaign-brief-template.yaml +34 -0
- package/src/skf-campaign/templates/campaign-report-template.md +54 -0
- package/src/skf-campaign/templates/kickoff-template.md +48 -0
- package/src/skf-create-skill/SKILL.md +15 -4
- package/src/skf-create-skill/assets/compile-assembly-rules.md +35 -34
- package/src/skf-create-skill/assets/skill-sections.md +9 -100
- package/src/skf-create-skill/assets/tessl-dismissal-rules.md +4 -13
- package/src/skf-create-skill/customize.toml +13 -0
- package/src/skf-create-skill/references/authoritative-files-protocol.md +7 -7
- package/src/skf-create-skill/references/compile.md +37 -47
- package/src/skf-create-skill/references/component-extraction.md +8 -35
- package/src/skf-create-skill/references/ecosystem-check.md +9 -25
- package/src/skf-create-skill/references/enrich.md +4 -17
- package/src/skf-create-skill/references/extract.md +20 -27
- package/src/skf-create-skill/references/extraction-patterns-tracing.md +1 -1
- package/src/skf-create-skill/references/extraction-patterns.md +10 -8
- package/src/skf-create-skill/references/generate-artifacts.md +20 -25
- package/src/skf-create-skill/references/health-check.md +2 -2
- package/src/skf-create-skill/references/load-brief.md +16 -18
- package/src/skf-create-skill/references/report.md +27 -14
- package/src/skf-create-skill/references/source-resolution-protocols.md +4 -4
- package/src/skf-create-skill/references/step-auto-shard.md +52 -25
- package/src/skf-create-skill/references/step-doc-rot.md +33 -15
- package/src/skf-create-skill/references/step-doc-sources.md +13 -4
- package/src/skf-create-skill/references/sub/ccc-discover.md +2 -13
- package/src/skf-create-skill/references/sub/fetch-docs.md +33 -46
- package/src/skf-create-skill/references/sub/fetch-temporal.md +5 -20
- package/src/skf-create-skill/references/tier-degradation-rules.md +6 -8
- package/src/skf-create-skill/references/validate.md +69 -29
- package/src/skf-create-skill/scripts/scan-doc-rot.py +245 -0
- package/src/skf-create-stack-skill/SKILL.md +15 -9
- package/src/skf-create-stack-skill/assets/provenance-map-schema.md +1 -1
- package/src/skf-create-stack-skill/customize.toml +10 -0
- package/src/skf-create-stack-skill/references/compile-stack.md +7 -8
- package/src/skf-create-stack-skill/references/compose-mode-rules.md +2 -13
- package/src/skf-create-stack-skill/references/detect-integrations.md +49 -54
- package/src/skf-create-stack-skill/references/detect-manifests.md +37 -30
- package/src/skf-create-stack-skill/references/generate-output.md +24 -75
- package/src/skf-create-stack-skill/references/init.md +9 -81
- package/src/skf-create-stack-skill/references/manifest-patterns.md +5 -35
- package/src/skf-create-stack-skill/references/parallel-extract.md +12 -27
- package/src/skf-create-stack-skill/references/rank-and-confirm.md +6 -6
- package/src/skf-create-stack-skill/references/report.md +27 -62
- package/src/skf-create-stack-skill/references/validate.md +35 -31
- package/src/skf-drop-skill/SKILL.md +20 -23
- package/src/skf-drop-skill/customize.toml +10 -0
- package/src/skf-drop-skill/references/execute.md +67 -36
- package/src/skf-drop-skill/references/headless-contract.md +18 -0
- package/src/skf-drop-skill/references/health-check.md +1 -13
- package/src/skf-drop-skill/references/report.md +44 -10
- package/src/skf-drop-skill/references/select.md +93 -48
- package/src/skf-drop-skill/scripts/dir-sizes.py +116 -0
- package/src/skf-export-skill/SKILL.md +17 -14
- package/src/skf-export-skill/assets/managed-section-format.md +2 -5
- package/src/skf-export-skill/customize.toml +10 -6
- package/src/skf-export-skill/references/generate-snippet.md +21 -35
- package/src/skf-export-skill/references/load-skill.md +44 -42
- package/src/skf-export-skill/references/multi-skill-mode.md +1 -1
- package/src/skf-export-skill/references/orphan-context-detection.md +11 -3
- package/src/skf-export-skill/references/package.md +27 -33
- package/src/skf-export-skill/references/preflight-snippet-root-probe.md +24 -5
- package/src/skf-export-skill/references/result-envelope.md +28 -0
- package/src/skf-export-skill/references/summary.md +11 -5
- package/src/skf-export-skill/references/token-report.md +42 -24
- package/src/skf-export-skill/references/update-context.md +32 -33
- package/src/skf-forger/SKILL.md +32 -39
- package/src/skf-forger/references/pipeline-mode.md +34 -0
- package/src/skf-forger/scripts/parse-pipeline.py +270 -0
- package/src/skf-quick-skill/SKILL.md +10 -60
- package/src/skf-quick-skill/customize.toml +9 -0
- package/src/skf-quick-skill/references/batch-mode.md +6 -4
- package/src/skf-quick-skill/references/compile.md +15 -52
- package/src/skf-quick-skill/references/ecosystem-check.md +5 -20
- package/src/skf-quick-skill/references/finalize.md +12 -6
- package/src/skf-quick-skill/references/halt-contract.md +54 -0
- package/src/skf-quick-skill/references/health-check.md +3 -4
- package/src/skf-quick-skill/references/quick-extract.md +7 -18
- package/src/skf-quick-skill/references/registry-resolution.md +1 -23
- package/src/skf-quick-skill/references/resolve-target.md +27 -34
- package/src/skf-quick-skill/references/write-and-validate.md +10 -25
- package/src/skf-refine-architecture/SKILL.md +16 -8
- package/src/skf-refine-architecture/customize.toml +9 -0
- package/src/skf-refine-architecture/references/compile.md +10 -8
- package/src/skf-refine-architecture/references/gap-analysis.md +21 -50
- package/src/skf-refine-architecture/references/health-check.md +1 -1
- package/src/skf-refine-architecture/references/improvements.md +9 -25
- package/src/skf-refine-architecture/references/init.md +9 -16
- package/src/skf-refine-architecture/references/issue-detection.md +10 -25
- package/src/skf-refine-architecture/references/refinement-rules.md +4 -16
- package/src/skf-refine-architecture/references/report.md +14 -11
- package/src/skf-rename-skill/SKILL.md +11 -21
- package/src/skf-rename-skill/customize.toml +10 -0
- package/src/skf-rename-skill/references/execute.md +112 -82
- package/src/skf-rename-skill/references/exit-codes.md +12 -0
- package/src/skf-rename-skill/references/report.md +16 -8
- package/src/skf-rename-skill/references/select.md +69 -42
- package/src/skf-rename-skill/scripts/skf-validate-rename-name.py +161 -0
- package/src/skf-setup/SKILL.md +21 -13
- package/src/skf-setup/customize.toml +10 -0
- package/src/skf-setup/references/auto-index.md +11 -10
- package/src/skf-setup/references/ccc-index.md +14 -15
- package/src/skf-setup/references/detect-and-tier.md +10 -8
- package/src/skf-setup/references/report.md +26 -32
- package/src/skf-setup/references/tier-rules.md +2 -32
- package/src/skf-setup/references/write-config.md +9 -10
- package/src/skf-test-skill/SKILL.md +10 -8
- package/src/skf-test-skill/customize.toml +2 -0
- package/src/skf-test-skill/references/coherence-check.md +19 -31
- package/src/skf-test-skill/references/coverage-check.md +111 -67
- package/src/skf-test-skill/references/detect-mode.md +10 -41
- package/src/skf-test-skill/references/external-validators.md +11 -19
- package/src/skf-test-skill/references/init.md +39 -21
- package/src/skf-test-skill/references/migration-section-rules.md +4 -4
- package/src/skf-test-skill/references/report.md +60 -40
- package/src/skf-test-skill/references/score.md +32 -64
- package/src/skf-test-skill/references/scoring-rules.md +6 -62
- package/src/skf-test-skill/references/source-access-protocol.md +15 -5
- package/src/skf-test-skill/references/step-hard-gate.md +1 -3
- package/src/skf-test-skill/scripts/aggregate-coherence.py +276 -0
- package/src/skf-test-skill/scripts/check-metadata-coherence.py +359 -0
- package/src/skf-test-skill/scripts/combine-external-scores.py +190 -0
- package/src/skf-test-skill/scripts/compute-score.py +135 -4
- package/src/skf-test-skill/scripts/reconcile-coverage.py +327 -0
- package/src/skf-test-skill/scripts/validate-inventory.py +251 -0
- package/src/skf-test-skill/scripts/verify-declared-numerator.py +192 -0
- package/src/skf-update-skill/SKILL.md +17 -5
- package/src/skf-update-skill/customize.toml +11 -6
- package/src/skf-update-skill/references/detect-changes.md +48 -36
- package/src/skf-update-skill/references/health-check.md +5 -11
- package/src/skf-update-skill/references/init.md +40 -32
- package/src/skf-update-skill/references/manual-section-rules.md +1 -2
- package/src/skf-update-skill/references/merge-conflict-rules.md +1 -52
- package/src/skf-update-skill/references/merge.md +13 -57
- package/src/skf-update-skill/references/re-extract.md +27 -25
- package/src/skf-update-skill/references/report.md +14 -7
- package/src/skf-update-skill/references/validate.md +32 -30
- package/src/skf-update-skill/references/write.md +86 -51
- package/src/skf-update-skill/scripts/skf-new-file-diff.py +167 -0
- package/src/skf-verify-stack/SKILL.md +11 -21
- package/src/skf-verify-stack/customize.toml +12 -3
- package/src/skf-verify-stack/references/coverage-patterns.md +1 -29
- package/src/skf-verify-stack/references/coverage.md +21 -10
- package/src/skf-verify-stack/references/exit-codes.md +14 -0
- package/src/skf-verify-stack/references/health-check.md +1 -1
- package/src/skf-verify-stack/references/init.md +20 -25
- package/src/skf-verify-stack/references/integration-verification-rules.md +10 -19
- package/src/skf-verify-stack/references/integrations.md +44 -49
- package/src/skf-verify-stack/references/report.md +28 -34
- package/src/skf-verify-stack/references/requirements.md +3 -3
- package/src/skf-verify-stack/references/synthesize.md +36 -39
- package/src/skf-verify-stack/scripts/skf-coverage-tally.py +196 -0
- package/src/skf-verify-stack/scripts/skf-report-delta.py +256 -0
- package/src/skf-verify-stack/scripts/skf-verdict-rollup.py +258 -0
- package/tools/cli/lib/ui.js +3 -2
- package/docs/deepwiki.md +0 -89
- package/src/skf-rename-skill/references/rebuild-context.md +0 -110
package/.nvmrc
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
24
|
package/README.md
CHANGED
|
@@ -73,8 +73,11 @@ You'll be prompted for project name, output folders, and IDE configuration. When
|
|
|
73
73
|
## Quick Start
|
|
74
74
|
|
|
75
75
|
1. **Set up your environment:** `@Ferris SF` _(Setup Forge)_ — detects your tools and sets your capability tier
|
|
76
|
-
2. **
|
|
77
|
-
3. **
|
|
76
|
+
2. **Zero-ceremony path:** `@Ferris forge-auto <repo-or-doc-url>` _(Forge-Auto)_ — one command turns a repo or doc URL into a verified skill (auto-scope, auto-brief, 90% quality gate, export)
|
|
77
|
+
3. **Fast path:** `@Ferris QS <package-name>` _(Quick Skill)_ — creates a verified skill in under a minute
|
|
78
|
+
4. **Full quality path:** `@Ferris forge <your-library>` chains Brief → Create → Test → Export automatically — or run manually: `@Ferris BS` → clear session → `@Ferris CS` for maximum control
|
|
79
|
+
|
|
80
|
+
For producing **many coordinated skills** across sessions, `@Ferris campaign` _(Campaign)_ orchestrates the whole set with dependency tracking and resume.
|
|
78
81
|
|
|
79
82
|
> **Tip:** Start a fresh conversation before each workflow, or use pipeline mode to chain them automatically. SKF workflows load significant context; clearing between them prevents interference.
|
|
80
83
|
|
|
@@ -111,7 +114,7 @@ SKF extracts real function signatures, types, and patterns from code, docs, and
|
|
|
111
114
|
2. **Lifecycle tooling** — rename skills and drop deprecated versions without manual file surgery. Destructive operations are transactional.
|
|
112
115
|
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
|
|
113
116
|
|
|
114
|
-
> **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
|
|
117
|
+
> **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, passive context achieves a **100% pass rate vs. 79% for active skills loaded alone** (see [Skill Model → Dual-Output Strategy](https://armelhbobdad.github.io/bmad-module-skill-forge/skill-model/#dual-output-strategy)).
|
|
115
118
|
|
|
116
119
|
## Verifying a Skill
|
|
117
120
|
|
|
@@ -129,7 +132,7 @@ If it doesn't, that's a bug — open an issue and SKF will republish the skill w
|
|
|
129
132
|
|
|
130
133
|
## Help SKF Improve
|
|
131
134
|
|
|
132
|
-
Workflows end with a health check that
|
|
135
|
+
Workflows end with a health check that files bug reports as GitHub issues (auto-deduped by fingerprint — re-reporting is safe); friction notes go to a local queue you can opt in to submit live. **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)
|
|
133
136
|
|
|
134
137
|
## Learn More
|
|
135
138
|
|
|
@@ -143,9 +146,11 @@ The docs are organized into three buckets — **Why** (start here), **Try** (do
|
|
|
143
146
|
**Try**
|
|
144
147
|
|
|
145
148
|
- **[Getting Started](https://armelhbobdad.github.io/bmad-module-skill-forge/getting-started/)** — Install, first skill, prereqs, and config
|
|
149
|
+
- **[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
|
|
150
|
+
- **[Campaign](https://armelhbobdad.github.io/bmad-module-skill-forge/campaign/)** — Orchestrate many coordinated skills across sessions with dependency tracking and resume
|
|
146
151
|
- **[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
|
|
147
152
|
- **[Examples](https://armelhbobdad.github.io/bmad-module-skill-forge/examples/)** — Real-world scenarios with full command transcripts
|
|
148
|
-
- **[Workflows](https://armelhbobdad.github.io/bmad-module-skill-forge/workflows/)** — All
|
|
153
|
+
- **[Workflows](https://armelhbobdad.github.io/bmad-module-skill-forge/workflows/)** — All 15 workflows with commands and connection diagrams
|
|
149
154
|
|
|
150
155
|
**Reference**
|
|
151
156
|
|
package/docs/_data/pinned.yaml
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# canonical SKF reference output.
|
|
6
6
|
#
|
|
7
7
|
# Every time a skill is recompiled in oh-my-skills, update the matching
|
|
8
|
-
# entry here and then run `npm run validate
|
|
8
|
+
# entry here and then run `npm run docs:validate-drift` from the SKF repo
|
|
9
9
|
# root. The script will:
|
|
10
10
|
#
|
|
11
11
|
# 1. Verify every skill below actually exists at the claimed version and
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
# Enforced two ways: (1) release.yaml bumps this line in the same commit
|
|
27
27
|
# as package.json + marketplace.json on every release; (2) validate-docs-drift.js
|
|
28
28
|
# cross-checks this value against package.json.version and fails on mismatch.
|
|
29
|
-
skf_version: "
|
|
29
|
+
skf_version: "2.0.1"
|
|
30
30
|
|
|
31
31
|
# Path to the oh-my-skills repo, resolved relative to this repo's root.
|
|
32
32
|
# Override at runtime with the OMS environment variable if oh-my-skills
|
package/docs/agents.md
CHANGED
|
@@ -34,7 +34,7 @@ Ferris handles all SKF workflows. You always interact with Ferris — he switche
|
|
|
34
34
|
| **Surgeon** | Precise, semantic diffing, preserves [MANUAL] | US |
|
|
35
35
|
| **Audit** | Judgmental, drift reports, completeness scoring | AS, TS, VS |
|
|
36
36
|
| **Delivery** | Packaging, platform-aware, ecosystem-ready | EX |
|
|
37
|
-
| **Management** | Transactional rename/drop with platform context rebuild | RS, DS |
|
|
37
|
+
| **Management** | Transactional rename/drop and multi-skill campaign orchestration with platform context rebuild | RS, DS, Campaign |
|
|
38
38
|
|
|
39
39
|
**Communication Style:**
|
|
40
40
|
- During work: structured reports with AST citations, no metaphor
|
|
@@ -72,14 +72,23 @@ DELIVER:
|
|
|
72
72
|
MANAGE:
|
|
73
73
|
[RS] Rename Skill — Rename across all versions (transactional)
|
|
74
74
|
[DS] Drop Skill — Deprecate or purge a skill version
|
|
75
|
+
[CA] Campaign — Orchestrate many coordinated skills across sessions (@Ferris campaign)
|
|
75
76
|
|
|
76
77
|
[WS] Workflow Status — Show current lifecycle position
|
|
77
78
|
[KI] Knowledge Index — List available knowledge fragments
|
|
79
|
+
|
|
80
|
+
PIPELINE ALIASES:
|
|
81
|
+
[forge-auto] Zero-ceremony skill from a repo or doc URL
|
|
82
|
+
[forge] Brief → Create → Test → Export
|
|
83
|
+
[forge-quick] Quick Skill → Test → Export
|
|
84
|
+
[maintain] Audit → Update → Test → Export
|
|
78
85
|
```
|
|
79
86
|
|
|
80
87
|
**Pipeline Aliases:**
|
|
81
88
|
|
|
82
|
-
Ferris chains multiple workflows in one command via named aliases (`forge`, `forge
|
|
89
|
+
Ferris chains multiple workflows in one command via named aliases (`forge-auto`, `forge`, `forge-quick`, `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.
|
|
90
|
+
|
|
91
|
+
`campaign` is not a chaining alias — it is a standalone orchestrator workflow (`@Ferris campaign`) that runs its own multi-stage pipeline internally, with dependency tracking and resume. See the [Campaign](../campaign/) page.
|
|
83
92
|
|
|
84
93
|
**Memory:**
|
|
85
94
|
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.
|
package/docs/architecture.md
CHANGED
|
@@ -22,8 +22,8 @@ Each workflow directory contains these files, and each has a specific job:
|
|
|
22
22
|
| File | What it does | When it loads |
|
|
23
23
|
|---------------------------|---------------------------------------------------------------------------------------------------------------------|---------------------------------------------------|
|
|
24
24
|
| `SKILL.md` | Human-readable entry point — goals, role definition, initialization sequence, invocation contract, routes to first step | Entry point per workflow |
|
|
25
|
-
| `references/*.md`
|
|
26
|
-
| `references/*.md`
|
|
25
|
+
| `references/*.md` (step files) | **Create** steps — primary execution, sequential step files per workflow (the last one always chains to the shared health check) | One at a time (just-in-time) |
|
|
26
|
+
| `references/*.md` (reference data) | Workflow-specific reference data — rules, patterns, protocols | Read by steps on demand |
|
|
27
27
|
| `assets/*.md` | Workflow-specific output formats — schemas, templates, heuristics | Read by steps on demand |
|
|
28
28
|
| `templates/*.md` | Output skeletons with placeholder vars — steps fill these in to produce the final artifact | Read by steps when generating output |
|
|
29
29
|
| `scripts/*.py` | Deterministic Python scripts — scoring, validation, structural diffing, manifest operations | Invoked by steps via `uv run` for reproducible computation |
|
|
@@ -35,7 +35,7 @@ Each workflow directory contains these files, and each has a specific job:
|
|
|
35
35
|
| `skf-forger/SKILL.md` | Expert persona — identity, principles, critical actions, menu of triggers | First — always in context |
|
|
36
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
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` |
|
|
38
|
+
| `shared/scripts/*.py` | Cross-workflow Python scripts — preflight checks, manifest ops, managed-section rebuilds, frontmatter/output validation, severity classification, structural diffing, skill inventory, result-envelope emission, language/docs/tools detection, content hashing, atomic writes (see [`src/shared/scripts/`](https://github.com/armelhbobdad/bmad-module-skill-forge/tree/main/src/shared/scripts)) | Invoked by any workflow that needs deterministic computation |
|
|
39
39
|
|
|
40
40
|
```mermaid
|
|
41
41
|
flowchart LR
|
|
@@ -71,7 +71,7 @@ Ferris operates in five workflow-driven modes (mode is determined by which workf
|
|
|
71
71
|
| **Surgeon** | US | Precise, semantic diffing — preserves [MANUAL] sections during regeneration |
|
|
72
72
|
| **Audit** | AS, TS, VS | Judgmental, scoring — evaluates quality and detects drift |
|
|
73
73
|
| **Delivery** | EX | Validates package, generates snippets, injects into context files |
|
|
74
|
-
| **Management** | RS, DS
|
|
74
|
+
| **Management** | RS, DS, CA | Transactional rename/drop — copy-verify-delete with platform context rebuild; campaign orchestration sequences workflows and tracks per-skill state |
|
|
75
75
|
|
|
76
76
|
---
|
|
77
77
|
|
|
@@ -175,6 +175,7 @@ src/
|
|
|
175
175
|
├── skf-export-skill/
|
|
176
176
|
├── skf-rename-skill/
|
|
177
177
|
├── skf-drop-skill/
|
|
178
|
+
├── skf-campaign/ # Multi-skill campaign orchestration (15th workflow)
|
|
178
179
|
├── forger/
|
|
179
180
|
│ ├── forge-tier.yaml
|
|
180
181
|
│ ├── preferences.yaml
|
package/docs/bmad-synergy.md
CHANGED
|
@@ -9,7 +9,7 @@ This page builds on BMAD concepts (BMM phases, TEA, modules). New to BMAD? Start
|
|
|
9
9
|
|
|
10
10
|
## Launcher Skills vs Content Skills
|
|
11
11
|
|
|
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
|
|
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.
|
|
13
13
|
|
|
14
14
|
| | BMAD launcher skill | SKF content skill |
|
|
15
15
|
|---|---|---|
|
|
@@ -29,15 +29,15 @@ When a BMAD agent runs a workflow, that workflow can consult SKF content skills
|
|
|
29
29
|
|
|
30
30
|
SKF works standalone — no BMAD installation required. If you found this page from a search and don't use the BMAD Method, this section is for you.
|
|
31
31
|
|
|
32
|
-
The fastest way to start is [`
|
|
32
|
+
The fastest way to start is [`forge-auto`](../forge-auto/). One command produces a verified skill in 3–5 minutes with zero configuration:
|
|
33
33
|
|
|
34
34
|
```
|
|
35
|
-
@Ferris
|
|
35
|
+
@Ferris forge-auto https://github.com/honojs/hono
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
-
That's it. No brief file, no scope decisions, no multi-step pipeline to learn.
|
|
38
|
+
That's it. No brief file, no scope decisions, no multi-step pipeline to learn. forge-auto handles analysis, scoping, compilation, testing (with a 90% quality gate), and export automatically. See the [forge-auto guide](../forge-auto/) for the full syntax and input types.
|
|
39
39
|
|
|
40
|
-
If you later adopt the BMAD Method, the skills you created via
|
|
40
|
+
If you later adopt the BMAD Method, the skills you created via forge-auto integrate seamlessly into BMM phases — they become the verified content skills that BMAD workflows consult during planning and implementation. The [phase-by-phase playbook](#skf-and-bmm-phase-by-phase-playbook) below shows exactly where each SKF workflow fits.
|
|
41
41
|
|
|
42
42
|
---
|
|
43
43
|
|
|
@@ -45,6 +45,8 @@ If you later adopt the BMAD Method, the skills you created via deepwiki integrat
|
|
|
45
45
|
|
|
46
46
|
BMM is BMAD's core [4-phase workflow](https://docs.bmad-method.org/) (Analysis → Planning → Solutioning → Implementation). SKF has five concrete entry points across those phases. The diagram below shows the end-to-end picture; the subsections that follow give the trigger, command, and artifact flow for each phase.
|
|
47
47
|
|
|
48
|
+
> **Atomic workflows vs pipeline aliases.** The playbook below maps each phase to an *atomic* SKF workflow (`AN`, `BS`, `QS`, `VS`, `CS`…) on purpose — in BMM you often want only part of the chain (a brief to feed a risk register, a quick reference for acceptance criteria). When you instead want the *finished, exported skill* in one command, reach for a pipeline alias: [`forge-auto`](../forge-auto/) collapses `AN → BS → CS → TS → EX` for a single library, and [`campaign`](../campaign/) orchestrates that whole chain across many dependencies. Rule of thumb: **atomic when you want a stage's artifact; alias when you want the verified skill.**
|
|
49
|
+
|
|
48
50
|
```mermaid
|
|
49
51
|
flowchart TD
|
|
50
52
|
P1[BMM Phase 1: Analysis<br/>product-brief · research] -.->|unfamiliar deps| AN[SKF: Analyze Source]
|
|
@@ -54,12 +56,16 @@ flowchart TD
|
|
|
54
56
|
P1 --> P2[BMM Phase 2: Planning<br/>create-prd]
|
|
55
57
|
P2 -.->|uncertain API| QS[SKF: Quick Skill]
|
|
56
58
|
QS -.->|verified API ref| P2
|
|
59
|
+
P2 -.->|"one command → exported skill (alias)"| DW[SKF: forge-auto]
|
|
60
|
+
DW -.->|verified skill| P2
|
|
57
61
|
|
|
58
62
|
P2 --> P3[BMM Phase 3: Solutioning<br/>create-architecture]
|
|
59
63
|
P3 -.->|declared stack| VS[SKF: Verify Stack]
|
|
60
64
|
VS --> RA[SKF: Refine Architecture]
|
|
61
65
|
RA -.->|refined arch| P3b[BMM: check-implementation-readiness]
|
|
62
66
|
P3 --> P3b
|
|
67
|
+
P3 -.->|"15+ deps (alias)"| CAMP[SKF: Campaign Orchestration]
|
|
68
|
+
CAMP -.->|verified stack| P3b
|
|
63
69
|
|
|
64
70
|
P3b --> P4[BMM Phase 4: Implementation<br/>create-story · dev-story]
|
|
65
71
|
P4 -.->|story libs| CS[SKF: Create Skill / Stack Skill]
|
|
@@ -90,6 +96,8 @@ flowchart TD
|
|
|
90
96
|
|
|
91
97
|
**Why now, not later:** Quick Skill is cheap insurance. It takes under a minute and prevents a whole class of "actually that function doesn't exist" moments during story writing.
|
|
92
98
|
|
|
99
|
+
**Want more than a quick reference?** When the PRD leans heavily on one library and you'd rather have a thorough, doc-enriched skill behind a 90% quality gate than a fast QS pass, run [`@Ferris forge-auto <repo>`](../forge-auto/) instead — one command produces the finished, exported skill (auto-scope, auto-brief, test, export) ready for BMM workflows to consult.
|
|
100
|
+
|
|
93
101
|
### Phase 3 — Solutioning
|
|
94
102
|
|
|
95
103
|
This is the highest-value integration. BMM's architect agent works from assumptions about the declared stack; SKF is how those assumptions become evidence-backed before the team commits to an implementation readiness check.
|
|
@@ -110,17 +118,30 @@ flowchart TD
|
|
|
110
118
|
VS -->|fail / gaps| RA[SKF: Refine Architecture]
|
|
111
119
|
RA -.->|refined draft| VS
|
|
112
120
|
RA --> READY
|
|
121
|
+
|
|
122
|
+
ARCH -.->|15+ dependencies| CAMPAIGN[SKF: Campaign Orchestration]
|
|
123
|
+
CAMPAIGN -->|"automates the full pipeline<br/>for all dependencies"| READY
|
|
113
124
|
```
|
|
114
125
|
|
|
115
126
|
The "Pre-Code Architecture Verification — Greenfield Confidence" scenario in [Examples](../examples/) walks through a concrete case of this loop.
|
|
116
127
|
|
|
128
|
+
#### Campaign Orchestration
|
|
129
|
+
|
|
130
|
+
**Trigger:** The architecture declares 15+ dependencies — too many for manual one-at-a-time pipeline runs.
|
|
131
|
+
|
|
132
|
+
**SKF command:** `@Ferris campaign`
|
|
133
|
+
|
|
134
|
+
**What flows back:** All declared dependencies are skilled in dependency order, verified for cross-skill consistency, and exported as a cohesive set. A campaign report summarizes per-skill quality scores and the overall outcome.
|
|
135
|
+
|
|
136
|
+
**Why now, not later:** Campaign automates at scale what the VS → RA → SS loop does for individual libraries. Running it during Solutioning means the entire stack is verified before implementation begins — no surprise API gaps mid-sprint.
|
|
137
|
+
|
|
117
138
|
### Phase 4 — Implementation
|
|
118
139
|
|
|
119
140
|
Two distinct triggers fire during Implementation, one at the start of each story and one after each retrospective.
|
|
120
141
|
|
|
121
142
|
**Trigger A (before `create-story`):** The story touches a library whose API isn't already in a content skill.
|
|
122
143
|
|
|
123
|
-
**SKF command:** `@Ferris CS` for a single library, or `@Ferris SS` when the story spans several dependencies.
|
|
144
|
+
**SKF command:** `@Ferris CS` for a single library, or `@Ferris SS` when the story spans several dependencies. If there's no brief yet and you want the skill in one shot, [`@Ferris forge-auto <repo>`](../forge-auto/) runs the full analyze → brief → compile → test → export chain from just the repo URL.
|
|
124
145
|
|
|
125
146
|
**What flows back:** A verified content skill the `dev-story` workflow can consult during implementation — no training-data guessing about function signatures.
|
|
126
147
|
|
|
@@ -182,7 +203,7 @@ Beyond briefing, CIS and SKF don't overlap — CIS covers ideation, storytelling
|
|
|
182
203
|
|
|
183
204
|
## Delivery and Lifecycle in a BMAD Project
|
|
184
205
|
|
|
185
|
-
`@Ferris EX` is the **only workflow that introduces new skill context** into the three context files that serve all
|
|
206
|
+
`@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.
|
|
186
207
|
|
|
187
208
|
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.
|
|
188
209
|
|
|
@@ -193,5 +214,7 @@ For long-running BMAD projects, `@Ferris RS` (rename) and `@Ferris DS` (drop) ke
|
|
|
193
214
|
## Where to Go Next
|
|
194
215
|
|
|
195
216
|
- [BMAD docs](https://docs.bmad-method.org/) — canonical reference for BMM phases, TEA workflows, BMB / GDS / CIS details, and the full module list
|
|
217
|
+
- [Forge-Auto](../forge-auto/) — the one-command alias that collapses analyze → brief → compile → test → export for a single library
|
|
218
|
+
- [Campaign](../campaign/) — orchestrate the full pipeline across many declared dependencies with dependency ordering and resume
|
|
196
219
|
- [Workflows](../workflows/) — complete SKF workflow reference with commands and connection diagrams
|
|
197
220
|
- [Examples](../examples/) — concrete scenarios including the BMM retrospective loop and greenfield architecture verification
|
package/docs/campaign.md
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Campaign Orchestration
|
|
3
|
+
description: Multi-library skill production with dependency tracking, file-based state, and resume
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Campaign orchestration drives the production of 15+ coordinated skills through the full SKF pipeline (brief, generate, compile, test, export) in dependency order. It sits at the top of the pipeline ladder — it does not produce skill artifacts directly but sequences the workflows that do.
|
|
7
|
+
|
|
8
|
+
When your architecture declares many dependencies, running individual pipelines one at a time is tedious and error-prone. Campaign automates the entire loop: it reads the dependency graph, sorts skills topologically, drives each one through the pipeline, enforces quality gates, and tracks state to disk so you can resume after a context death or session break.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Invocation
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
@Ferris campaign — start a new campaign
|
|
16
|
+
@Ferris campaign resume — resume from the last active skill
|
|
17
|
+
@Ferris campaign resume --from=<skill> — resume from a specific skill
|
|
18
|
+
@Ferris campaign status — read-only progress summary
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
- **`campaign`** starts a new campaign from stage 0 (Setup). If a `_campaign-state.yaml` already exists, Ferris offers a choice: resume the existing campaign or overwrite with a new one.
|
|
22
|
+
- **`campaign resume`** picks up where the last session left off. State is validated on load — if the state file is corrupted, the `.bak` file is used as a fallback.
|
|
23
|
+
- **`campaign status`** loads and validates the current state, prints the resume-detection summary plus the tail of the decision log, then stops — no backup, no mutation, no chaining. Use it to check on a long-running campaign without advancing it.
|
|
24
|
+
- **`--from=<skill>`** overrides the resume point to the named skill, useful when you want to re-process a specific skill without restarting the entire campaign.
|
|
25
|
+
|
|
26
|
+
### Override flags
|
|
27
|
+
|
|
28
|
+
| Flag | Effect |
|
|
29
|
+
|------|--------|
|
|
30
|
+
| `--headless` / `-H` | Auto-proceed every gate with its default action and emit structured output (see [Headless / Automation](#headless--automation)). |
|
|
31
|
+
| `--brief <file>` | Seed targets from a `campaign-brief.yaml` instead of interactive prompts. Implies `--headless`. |
|
|
32
|
+
| `--manifest <file>` | Seed targets from a plain-text `name,repo_url,tier,pin` manifest (one per line; trailing `;dep1,dep2` for `depends_on`). Implies `--headless`. |
|
|
33
|
+
| `--from=<skill>` | Resume override (see above). |
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Stages
|
|
38
|
+
|
|
39
|
+
Campaign runs through 11 stages (0–10). All stages auto-proceed except Export, which requires explicit approval before writing skills to disk.
|
|
40
|
+
|
|
41
|
+
| Stage | Name | Description | Auto-proceed |
|
|
42
|
+
|-------|------|-------------|--------------|
|
|
43
|
+
| 0 | Setup | Initialize campaign state, detect existing skills, and configure output paths | Yes |
|
|
44
|
+
| 1 | Strategy | Generate the campaign brief from architecture and dependency analysis | Yes |
|
|
45
|
+
| 2 | Pin Validation | Validate version pins for all declared dependencies | Yes |
|
|
46
|
+
| 3 | Provenance | Establish provenance records for each target library | Yes |
|
|
47
|
+
| 4 | Skill Loop | Drive each Tier A skill through its forge pipeline (AN → BS → CS → TS) in dependency order — export is deferred to the gated Export stage | Yes |
|
|
48
|
+
| 5 | Tier B Batch | Process Tier B skills (lower-priority or transitive dependencies) in batch mode | Yes |
|
|
49
|
+
| 6 | Capstone | Generate stack skill(s) that integrate individual skills into a cohesive project context | Yes |
|
|
50
|
+
| 7 | Verification | Run verification passes across all produced skills for cross-skill consistency | Yes |
|
|
51
|
+
| 8 | Refinement | Address gaps found during verification — re-run pipelines for skills that need improvement | Yes |
|
|
52
|
+
| 9 | Export | Write all verified skills to disk and update context files — **requires user approval** | No |
|
|
53
|
+
| 10 | Maintenance | Generate the campaign report and clean up temporary state | Yes |
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Key Concepts
|
|
58
|
+
|
|
59
|
+
### campaign-brief.yaml
|
|
60
|
+
|
|
61
|
+
A machine-generated brief that captures the full scope of the campaign: which libraries to skill, their version pins, dependency relationships, and quality targets. Created during the Strategy stage from your architecture document and dependency declarations.
|
|
62
|
+
|
|
63
|
+
### _campaign-state.yaml
|
|
64
|
+
|
|
65
|
+
The single source of truth for campaign progress. Every state mutation follows a read-backup-modify-write pattern — the current state is backed up before each write, so a crash during write never loses more than one operation. All progress tracking lives here, not in conversation context.
|
|
66
|
+
|
|
67
|
+
### _campaign-directive.md
|
|
68
|
+
|
|
69
|
+
A standing directive document that carries cross-cutting instructions for the campaign. See the [campaign directive spec](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/src/skf-campaign/references/campaign-directive-spec.md) for the full specification and usage patterns.
|
|
70
|
+
|
|
71
|
+
### Dependency Tracking
|
|
72
|
+
|
|
73
|
+
Campaign sorts skills topologically by their dependency graph. If skill B depends on skill A, skill A is produced first. This ensures downstream skills can reference upstream APIs during compilation.
|
|
74
|
+
|
|
75
|
+
### Tier A vs Tier B
|
|
76
|
+
|
|
77
|
+
- **Tier A** — primary dependencies declared in the architecture. Each gets a full individual pipeline run (AN → BS → CS → TS) during the Skill Loop stage; the tested skills are exported collectively at the gated Export stage.
|
|
78
|
+
- **Tier B** — secondary or transitive dependencies. Processed in batch during the Tier B Batch stage with lighter-touch quality requirements.
|
|
79
|
+
|
|
80
|
+
### Customization
|
|
81
|
+
|
|
82
|
+
Campaign ships a `customize.toml` workflow surface you can tune without forking the skill. The resolver merges three layers (scalars override, arrays append): the bundled `customize.toml`, then a committed team override at `_bmad/custom/<skill-name>.toml`, then a personal (gitignored) override at `_bmad/custom/<skill-name>.user.toml` — both under {project-root}. What you can set:
|
|
83
|
+
|
|
84
|
+
- **Quality-gate scalars** — `quality_gate_hard`, `quality_gate_soft_target`, `quality_gate_soft_fallback` (the thresholds above).
|
|
85
|
+
- **`campaign_workspace_path`** — relocate the entire campaign workspace (state, backup, brief, archive, decision log) to a shared volume without editing any step file; empty means the default `{forge_data_folder}/_campaign`.
|
|
86
|
+
- **`persistent_facts`** — literal sentences or `file:` references (globs supported) injected into every per-skill kickoff, so house style and guardrails reach the whole campaign.
|
|
87
|
+
- **Template overrides** — `report_template_path`, `kickoff_template_path`, `brief_template_path` for house-style copies.
|
|
88
|
+
- **`on_complete`** — a post-completion hook invoked with `--report-path=<…>` after the report finalizes; hook failures are logged but never fail the campaign.
|
|
89
|
+
- **`activation_steps_prepend` / `activation_steps_append`** — org-wide pre-flight or context-load steps around activation.
|
|
90
|
+
|
|
91
|
+
See the skill's [SKILL.md](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/src/skf-campaign/SKILL.md) for the full merge contract.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Quality Gates
|
|
96
|
+
|
|
97
|
+
Campaign enforces two types of quality gates:
|
|
98
|
+
|
|
99
|
+
The bar is **campaign-wide** — one set of thresholds applied to every skill, not a per-pipeline split:
|
|
100
|
+
|
|
101
|
+
- **Hard gate** (`zero-critical-high`) — zero critical or high-severity issues allowed. Any skill that fails the hard gate is flagged for manual intervention and blocks the campaign from proceeding past that skill.
|
|
102
|
+
- **Soft target** (default 90%) — the score a skill should reach.
|
|
103
|
+
- **Soft fallback** (default 80%) — the floor. A skill scoring at or above the fallback but below the target still proceeds; only a skill below the fallback is treated as a soft-gate miss.
|
|
104
|
+
|
|
105
|
+
All three are tunable via [customization](#customization); the per-campaign brief and any directive `## Quality Overrides` still take precedence at runtime.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Resume
|
|
110
|
+
|
|
111
|
+
Campaign is designed around the assumption that context will die. File-based state (`_campaign-state.yaml`) survives context death, session timeouts, and machine restarts.
|
|
112
|
+
|
|
113
|
+
When you resume:
|
|
114
|
+
|
|
115
|
+
1. Ferris validates the state file against the campaign schema
|
|
116
|
+
2. Completed skills are skipped automatically
|
|
117
|
+
3. The campaign picks up from the next incomplete skill in dependency order
|
|
118
|
+
4. All cross-skill context (dependency graph, quality scores, provenance records) is restored from disk
|
|
119
|
+
|
|
120
|
+
Use `--from=<skill>` to override the resume point if you need to re-process a specific skill.
|
|
121
|
+
|
|
122
|
+
### Re-invocation and recovery
|
|
123
|
+
|
|
124
|
+
- **`campaign` over an existing state** prompts resume-vs-overwrite. Choosing overwrite first archives the existing `_campaign-state.yaml` and `campaign-brief.yaml` to `archive/{name}-{timestamp}/` and logs it to the decision log, so a new campaign never silently clobbers an old one. In headless mode the default is **resume** — archive-and-overwrite happens only when `--brief`/`--manifest` explicitly seeds a new campaign.
|
|
125
|
+
- **Corrupt primary, valid `.bak`** — resume auto-recovers by restoring the backup over the primary and logging the recovery; if the backup is also unusable it HALTs (exit 9, `corrupt-state`) reporting both errors.
|
|
126
|
+
- **Primary behind the backup** — if the primary looks older than the `.bak` (a possible crash during the last write), Ferris offers `[R]ecover` from the backup or `[K]eep` the primary (the default; headless keeps the primary).
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Expected Output
|
|
131
|
+
|
|
132
|
+
A successful campaign produces:
|
|
133
|
+
|
|
134
|
+
- **Individual skill packages** — one per dependency, each tested and exported
|
|
135
|
+
- **Stack skill(s)** — capstone skills that integrate individual skills into a cohesive project context
|
|
136
|
+
- **Campaign report** (`campaign-report.md`) — a post-campaign summary with per-skill quality scores, dependency graph visualization, and overall campaign metrics
|
|
137
|
+
- **Headless envelope** (`SKF_CAMPAIGN_RESULT_JSON`) — a structured JSON result for automation consumers
|
|
138
|
+
|
|
139
|
+
The Export stage (stage 9) is the only non-auto-proceed stage. Ferris presents a summary of all skills to be written and waits for explicit approval before modifying any context files. In headless mode, the write-gate auto-resolves.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Headless / Automation
|
|
144
|
+
|
|
145
|
+
Campaign is a first-class headless front door for unattended, multi-session production. Add `--headless` / `-H` (or set `headless_mode: true` in preferences); `--brief`/`--manifest` imply it and seed targets non-interactively. In headless mode every confirmation gate auto-proceeds with its default action, each step emits a single-line JSON progress event to **stderr** on entry and exit (`{"stage":N,"name":"<slug>","status":"start|done"}`), and the terminal step emits the `SKF_CAMPAIGN_RESULT_JSON` envelope on stdout.
|
|
146
|
+
|
|
147
|
+
- **Cancel affordance** — at any interactive gate the operator can type `cancel`, `exit`, or `:q` to leave cleanly; the campaign HALTs with exit code 12 (`user-cancelled`), logs the cancellation, and leaves state intact and resumable. The Export gate is the exception: its own `[C]ancel` exits 11 (`export-cancelled`).
|
|
148
|
+
- **Exit codes** — every HARD HALT exits with a stable, documented code so automators branch on the failure class without grepping message text: `0` success, `3` invalid-state, `4` circular-deps, `5` invalid-pin, `6` inaccessible-repo, `7` dependency-deadlock, `8` missing-brief, `9` corrupt-state, `10` report-failure (degraded — the campaign still completes), `11` export-cancelled, `12` user-cancelled.
|
|
149
|
+
- **Error envelope** — on any HARD HALT the `SKF_CAMPAIGN_RESULT_JSON` envelope is emitted on stderr in its error variant, carrying `status: "error"`, `exit_code`, the `phase` (step slug), and an `error` object with `code` and `message`.
|
|
150
|
+
|
|
151
|
+
The full exit-code table and envelope schema live in the skill's [SKILL.md](https://github.com/armelhbobdad/bmad-module-skill-forge/blob/main/src/skf-campaign/SKILL.md) under "Exit Codes" and "Result Contract on HARD HALT".
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Timing
|
|
156
|
+
|
|
157
|
+
Campaign duration scales with the number of declared dependencies — each Tier A skill runs a full `AN → BS → CS → TS` pipeline, and Tier B skills run in batch. A campaign is explicitly designed to **span multiple sessions**: file-based state means you can stop after any skill and resume later without losing progress. Factors that affect total time:
|
|
158
|
+
|
|
159
|
+
- **Skill count and tier mix** — Tier A skills (a full pipeline each) dominate; Tier B batch processing is lighter per skill.
|
|
160
|
+
- **Dependency depth** — deep graphs serialize more work (downstream skills wait on upstream APIs); wide, shallow graphs spread more naturally across sessions.
|
|
161
|
+
- **Capstone breadth** — stack-skill composition (stage 6) grows with the number of constituent skills.
|
|
162
|
+
- **Forge tier** — Deep-tier projects (with QMD and CCC) spend more time per skill on enrichment.
|
|
163
|
+
|
|
164
|
+
Plan a campaign as multi-session work rather than a single sitting — the resume design above exists precisely so that context death between skills is a non-event.
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Related
|
|
169
|
+
|
|
170
|
+
- [Workflows](../workflows/) — pipeline mode mechanics, headless mode, circuit breakers
|
|
171
|
+
- [forge-auto](../forge-auto/) — zero-ceremony single-skill creation (campaign orchestrates many of these)
|
|
172
|
+
- [BMAD Synergy](../bmad-synergy/) — how campaign fits into BMAD Phase 3 as an orchestration layer
|
package/docs/examples.md
CHANGED
|
@@ -101,9 +101,9 @@ Need a specific version? Append `@version`:
|
|
|
101
101
|
Alex, a platform engineer, adopts BMAD for 10 microservices spanning TypeScript, Go, and Rust.
|
|
102
102
|
|
|
103
103
|
```
|
|
104
|
-
@Ferris SF
|
|
104
|
+
@Ferris SF # Setup — Deep tier detected
|
|
105
105
|
# — clear session —
|
|
106
|
-
@Ferris
|
|
106
|
+
@Ferris forge-auto https://github.com/acme/auth-service # one service: Analyze → Brief → Create → Test → Export
|
|
107
107
|
```
|
|
108
108
|
|
|
109
109
|
Or one workflow per session:
|
|
@@ -184,7 +184,11 @@ Skills accumulate over sprints. The agent's coverage improves each iteration.
|
|
|
184
184
|
|
|
185
185
|
Blondin, a platform lead, needs cross-service knowledge for 10 microservices so agents can navigate shared types and cross-calls.
|
|
186
186
|
|
|
187
|
-
|
|
187
|
+
```
|
|
188
|
+
@Ferris campaign # Orchestrate all 10 skills across sessions, in dependency order
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
Campaign reads the dependency graph, sorts the skills topologically, and drives each one through the full pipeline (brief, generate, compile, test) with quality gates enforced. State is written to disk, so Blondin can walk away and `@Ferris campaign resume` after a context death or a session break — picking up exactly where the last session stopped. One forge project, multiple QMD collections, hub-and-spoke skills with integration patterns. See [Campaign Orchestration](../campaign/) for the full stage-by-stage flow.
|
|
188
192
|
|
|
189
193
|
### Scenario C: External Dependency
|
|
190
194
|
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Forge-Auto
|
|
3
|
+
description: Zero-ceremony skill creation — one command turns a GitHub repo, doc URL, or pinned version into a verified skill
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Forge-Auto is a [pipeline alias](../workflows/#pipeline-aliases) that chains five workflows into a single command. Give it a repo URL, a documentation URL, or a pinned version, and it produces a verified skill in 3–5 minutes with zero configuration.
|
|
7
|
+
|
|
8
|
+
If you're new to SKF and want to try it without reading anything else, start here.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Invocation
|
|
13
|
+
|
|
14
|
+
Three input types, one command pattern:
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
@Ferris forge-auto https://github.com/honojs/hono — repo URL
|
|
18
|
+
@Ferris forge-auto https://docs.example.com — doc URL (docs-only)
|
|
19
|
+
@Ferris forge-auto https://github.com/honojs/hono --pin v4.6.0 — pinned version
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
- **Repo URL** — analyzes the full source repository, extracts exports, and compiles a skill from code + docs.
|
|
23
|
+
- **Doc URL** — skips source analysis entirely and builds the skill from documentation alone. Useful for closed-source libraries or when the docs are the canonical reference.
|
|
24
|
+
- **`--pin <version>`** — targets a specific release. The version tag is resolved during analysis so the resulting skill is locked to that exact API surface.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Pipeline Stages
|
|
29
|
+
|
|
30
|
+
forge-auto expands to `AN[auto] BS[auto] CS TS[min:90] EX`. The two analysis stages (AN, BS) run in [headless mode](../workflows/#headless-mode) via their `[auto]` flags — no confirmation gates, no interactive prompts. The compile, test, and export stages then proceed with their standard behaviors once the analysis context is ready.
|
|
31
|
+
|
|
32
|
+
| Stage | Workflow | Mode | What Happens |
|
|
33
|
+
|-------|----------|------|-------------|
|
|
34
|
+
| 1 | **Analyze Source** (AN) | `[auto]` | Scans the target, detects shape (`library-API`, `reference-app`, `language-reference`, `stack-compose`, or `unknown`), discovers exports, and generates a scope + brief automatically. |
|
|
35
|
+
| 2 | **Brief Skill** (BS) | `[auto]` | Enriches the auto-generated brief with doc detection results. No interactive scoping — the brief is assembled from AN's output. |
|
|
36
|
+
| 3 | **Create Skill** (CS) | standard | Compiles the skill from the enriched brief. Extracts exports, resolves documentation sources, validates structure. |
|
|
37
|
+
| 4 | **Test Skill** (TS) | `[min:90]` | Verifies completeness with a **90% quality threshold** (stricter than the default 80%). Fail halts the pipeline. |
|
|
38
|
+
| 5 | **Export Skill** (EX) | standard | Validates the package, generates context snippets, and injects into your IDE's context file. |
|
|
39
|
+
|
|
40
|
+
Data flows automatically between stages — the brief path from AN feeds BS, the skill name from CS feeds TS, and so on. See [Pipeline Mode](../workflows/#pipeline-mode) for the general mechanics.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Automatic Behaviors
|
|
45
|
+
|
|
46
|
+
forge-auto's `[auto]` flags activate several behaviors that normally require manual input:
|
|
47
|
+
|
|
48
|
+
- **Auto-scope** — shape detection (`library-API`, `reference-app`, `language-reference`, `stack-compose`) drives scope decisions, mapping onto `scope.type` values like `full-library`, `public-api`, and `reference-app`. No interactive scope confirmation.
|
|
49
|
+
- **Auto-brief** — the brief is generated and enriched with doc-detection results in one pass, without the interactive discovery flow that `BS` uses standalone.
|
|
50
|
+
- **Coexistence detection** — if a skill for the same target already exists, forge-auto detects it and offers three options: create alongside (new version), merge into the existing skill, or skip.
|
|
51
|
+
- **Auto-decomposition** — multi-package monorepos (>3 packages) flag a *decomposition candidate*; a cohesion check then decides whether to merge into one cohesive skill (the usual outcome — published monorepos are mostly cohesive) or split into N. Exceeding 500 exports also flags a candidate. The default leans toward a single skill, not one-per-package.
|
|
52
|
+
- **Language-reference handling** — for compiler, interpreter, or parser repos, AN classifies the target as a `language-reference`. For a *whole-language* reference (a compiler/interpreter), the skill's value is the language's prose — the guide and standard-library docs — not compiler internals, so AN seeds the canonical corpora. If none are found it records an honest **DEGRADED** caveat: the skill is low-value as code-only until you attach the language's guide and std/library docs (re-run with a doc URL, or enrich via `US`).
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Expected Output
|
|
57
|
+
|
|
58
|
+
A successful forge-auto run produces a complete skill package in your forge data directory, exported and ready for use. The skill includes:
|
|
59
|
+
|
|
60
|
+
- `SKILL.md` — the compiled skill with provenance-cited instructions
|
|
61
|
+
- `metadata.json` — version, source, confidence tier breakdown
|
|
62
|
+
- Context snippet injected into your IDE context file (CLAUDE.md, .cursorrules, AGENTS.md, etc.)
|
|
63
|
+
|
|
64
|
+
The quality threshold is 90% — if the skill scores below that, the pipeline halts at TS with a gap report. Run `@Ferris US` to address gaps, then `@Ferris TS EX` to re-test and export.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Timing
|
|
69
|
+
|
|
70
|
+
A typical library (50–200 exports) takes **3–5 minutes** end to end. Factors that increase time:
|
|
71
|
+
|
|
72
|
+
- Multi-package monorepos (>3 packages) flag a decomposition candidate; if the cohesion check splits the repo into N skills, add 1–3 minutes
|
|
73
|
+
- Doc-only targets depend on documentation site size and structure
|
|
74
|
+
- Deep-tier projects (with QMD and CCC) spend more time on enrichment
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Migration from `deepwiki` and `onboard`
|
|
79
|
+
|
|
80
|
+
This pipeline was briefly named `deepwiki`. It was renamed to **`forge-auto`** to avoid confusion with the [DeepWiki MCP](https://deepwiki.com) — `forge-auto` compiles a verified skill from source and **does not** call that MCP or ingest a generated wiki. `deepwiki` still works as a **deprecated alias** (it resolves to `forge-auto` and prints a one-time notice); prefer `forge-auto` going forward.
|
|
81
|
+
|
|
82
|
+
Before that, the auto pipeline replaced the older `onboard` alias. `onboard` has been removed — running it returns an error directing you to `forge-auto`. The key differences from `onboard`: it ran `AN CS TS EX` with standard (interactive) modes at an 80% quality threshold, whereas `forge-auto` adds auto-scope, auto-brief, a stricter quality gate (90% vs 80%), and accepts repo URLs and doc URLs — not just project paths.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Related
|
|
87
|
+
|
|
88
|
+
- [Workflows](../workflows/) — pipeline mode mechanics, headless mode, circuit breakers
|
|
89
|
+
- [Concepts](../concepts/) — provenance, confidence tiers, drift, version pinning
|
|
90
|
+
- [BMAD Synergy](../bmad-synergy/) — how forge-auto fits into BMAD phases, and standalone SKF usage
|
package/docs/getting-started.md
CHANGED
|
@@ -89,6 +89,13 @@ This detects your tools, sets your capability tier, and initializes the forge en
|
|
|
89
89
|
|
|
90
90
|
### 2. Generate your first skill
|
|
91
91
|
|
|
92
|
+
**Zero-ceremony path (forge-auto):**
|
|
93
|
+
```
|
|
94
|
+
@Ferris forge-auto https://github.com/honojs/hono
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
One command turns a repo URL (or a doc URL) into a verified skill — auto-scope, auto-brief, a 90% quality gate, and export, with no configuration. If you only read one thing, [start with forge-auto](../forge-auto/).
|
|
98
|
+
|
|
92
99
|
**Fastest path (Quick Skill):**
|
|
93
100
|
```
|
|
94
101
|
@Ferris QS https://github.com/bmad-code-org/BMAD-METHOD
|
|
@@ -183,6 +190,8 @@ Runtime configuration (tool detection, tier, and collection state) is managed by
|
|
|
183
190
|
|
|
184
191
|
## What's next?
|
|
185
192
|
|
|
193
|
+
- [Forge-Auto](../forge-auto/) — the zero-ceremony path: one command from repo or doc URL to a verified skill
|
|
194
|
+
- [Campaign](../campaign/) — orchestrate many coordinated skills across sessions with dependency tracking and resume
|
|
186
195
|
- [Agents](../agents/) — learn about Ferris
|
|
187
196
|
- [Workflows](../workflows/) — the full command reference
|
|
188
197
|
- [Examples](../examples/) — real-world scenarios with transcripts
|
package/docs/how-it-works.md
CHANGED
|
@@ -27,7 +27,7 @@ Ferris confirms the repository exists, detects its language, finds its version f
|
|
|
27
27
|
|
|
28
28
|
### 3. He extracts the API
|
|
29
29
|
|
|
30
|
-
He reads cognee's source code, identifies the public exports, and pulls out function signatures, parameter types, and return types.
|
|
30
|
+
He reads cognee's source code, identifies the public exports, and pulls out function signatures, parameter types, and return types. Quick Skill always extracts at community quality — it does the same job whatever tools you have installed, reading the source directly to ground every signature. Nothing is invented — if he can't cite it, he doesn't include it.
|
|
31
31
|
|
|
32
32
|
### 4. He writes the skill with receipts
|
|
33
33
|
|
|
@@ -41,16 +41,18 @@ await cognee.search( # [AST:cognee/api/v1/search/search.py:L26]
|
|
|
41
41
|
|
|
42
42
|
That tag means: *this came from AST extraction of this exact file at this exact line.* You can click through to the upstream source at the pinned commit and see it yourself.
|
|
43
43
|
|
|
44
|
-
### 5. You get
|
|
44
|
+
### 5. You get a skill package
|
|
45
45
|
|
|
46
|
-
Ferris writes a `SKILL.md` (the full instruction manual your agent loads on demand) and a `context-snippet.md` (an 80–120 token index). The snippet gets injected into your platform context file (`CLAUDE.md`, `AGENTS.md`, or `.cursorrules`)
|
|
46
|
+
Ferris writes a `SKILL.md` (the full instruction manual your agent loads on demand) and a `context-snippet.md` (an 80–120 token index) alongside it. The snippet is the always-on reminder — *"This skill exists; read it before writing cognee code."* — but it isn't wired in automatically: when you run `export-skill`, the snippet gets injected into your platform context file (`CLAUDE.md`, `AGENTS.md`, or `.cursorrules`). Both halves are load-bearing — see the [Dual-Output Strategy](../skill-model/#dual-output-strategy) for why.
|
|
47
47
|
|
|
48
48
|
### 6. The audit trail stays on disk
|
|
49
49
|
|
|
50
|
-
Alongside the skill, Ferris leaves a `
|
|
50
|
+
Alongside the skill, Ferris leaves a `metadata.json` (the pinned source, commit SHA, and export count) and a timestamped result contract recording exactly what was written. Commit these with the skill and any teammate — or any skeptic — can see what was built from which commit.
|
|
51
51
|
|
|
52
52
|
That's the whole pipeline. One trigger in, one verifiable skill out, every claim traceable back to a file and a commit.
|
|
53
53
|
|
|
54
|
+
Quick Skill is the fastest path, not the most thorough one. When you want a full audit trail — a `provenance-map.json` of every receipt and an `evidence-report.md` build log, both produced from a `skill-brief.yaml` — run the brief-driven [`create-skill`](../workflows/#create-skill-cs) path instead.
|
|
55
|
+
|
|
54
56
|
---
|
|
55
57
|
|
|
56
58
|
## Next
|