Skip to content

refactor(installer): discover skills by SKILL.md instead of manifest YAML#2082

Merged
alexeyv merged 1 commit intomainfrom
remove-skill-manifest-yaml
Mar 21, 2026
Merged

refactor(installer): discover skills by SKILL.md instead of manifest YAML#2082
alexeyv merged 1 commit intomainfrom
remove-skill-manifest-yaml

Conversation

@alexeyv
Copy link
Copy Markdown
Collaborator

@alexeyv alexeyv commented Mar 21, 2026

Summary

  • Remove all bmad-skill-manifest.yaml files — the installer now discovers skills by the presence of SKILL.md
  • Simplify manifest generator to derive skill metadata from directory structure instead of separate YAML files
  • Update custom handler and tests accordingly

Test plan

  • Run npm run quality — all tests pass
  • Install BMAD via CLI and verify skills are discovered correctly

🤖 Generated with Claude Code

…YAML

Switch skill discovery gate from requiring bmad-skill-manifest.yaml with
type: skill to detecting any directory with a valid SKILL.md (frontmatter
name + description, name matches directory name). Delete 34 stub manifests
that carried no data beyond type: skill. Agent manifests (9) are retained
for persona metadata consumed by agent-manifest.csv.
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 21, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: e8ac21da-84b2-4e23-b269-591e2920bf25

📥 Commits

Reviewing files that changed from the base of the PR and between c28206d and 02879f7.

📒 Files selected for processing (36)
  • src/bmm-skills/1-analysis/bmad-document-project/bmad-skill-manifest.yaml
  • src/bmm-skills/1-analysis/bmad-product-brief/bmad-skill-manifest.yaml
  • src/bmm-skills/1-analysis/research/bmad-domain-research/bmad-skill-manifest.yaml
  • src/bmm-skills/1-analysis/research/bmad-market-research/bmad-skill-manifest.yaml
  • src/bmm-skills/1-analysis/research/bmad-technical-research/bmad-skill-manifest.yaml
  • src/bmm-skills/2-plan-workflows/bmad-create-prd/bmad-skill-manifest.yaml
  • src/bmm-skills/2-plan-workflows/bmad-create-ux-design/bmad-skill-manifest.yaml
  • src/bmm-skills/2-plan-workflows/bmad-edit-prd/bmad-skill-manifest.yaml
  • src/bmm-skills/2-plan-workflows/bmad-validate-prd/bmad-skill-manifest.yaml
  • src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/bmad-skill-manifest.yaml
  • src/bmm-skills/3-solutioning/bmad-create-architecture/bmad-skill-manifest.yaml
  • src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/bmad-skill-manifest.yaml
  • src/bmm-skills/3-solutioning/bmad-generate-project-context/bmad-skill-manifest.yaml
  • src/bmm-skills/4-implementation/bmad-code-review/bmad-skill-manifest.yaml
  • src/bmm-skills/4-implementation/bmad-correct-course/bmad-skill-manifest.yaml
  • src/bmm-skills/4-implementation/bmad-create-story/bmad-skill-manifest.yaml
  • src/bmm-skills/4-implementation/bmad-dev-story/bmad-skill-manifest.yaml
  • src/bmm-skills/4-implementation/bmad-qa-generate-e2e-tests/bmad-skill-manifest.yaml
  • src/bmm-skills/4-implementation/bmad-quick-dev/bmad-skill-manifest.yaml
  • src/bmm-skills/4-implementation/bmad-retrospective/bmad-skill-manifest.yaml
  • src/bmm-skills/4-implementation/bmad-sprint-planning/bmad-skill-manifest.yaml
  • src/bmm-skills/4-implementation/bmad-sprint-status/bmad-skill-manifest.yaml
  • src/core-skills/bmad-advanced-elicitation/bmad-skill-manifest.yaml
  • src/core-skills/bmad-brainstorming/bmad-skill-manifest.yaml
  • src/core-skills/bmad-distillator/bmad-skill-manifest.yaml
  • src/core-skills/bmad-editorial-review-prose/bmad-skill-manifest.yaml
  • src/core-skills/bmad-editorial-review-structure/bmad-skill-manifest.yaml
  • src/core-skills/bmad-help/bmad-skill-manifest.yaml
  • src/core-skills/bmad-index-docs/bmad-skill-manifest.yaml
  • src/core-skills/bmad-init/bmad-skill-manifest.yaml
  • src/core-skills/bmad-party-mode/bmad-skill-manifest.yaml
  • src/core-skills/bmad-review-adversarial-general/bmad-skill-manifest.yaml
  • src/core-skills/bmad-review-edge-case-hunter/bmad-skill-manifest.yaml
  • src/core-skills/bmad-shard-doc/bmad-skill-manifest.yaml
  • test/test-installation-components.js
  • tools/cli/installers/lib/core/manifest-generator.js
💤 Files with no reviewable changes (35)
  • src/bmm-skills/2-plan-workflows/bmad-edit-prd/bmad-skill-manifest.yaml
  • src/core-skills/bmad-party-mode/bmad-skill-manifest.yaml
  • src/core-skills/bmad-shard-doc/bmad-skill-manifest.yaml
  • src/core-skills/bmad-advanced-elicitation/bmad-skill-manifest.yaml
  • src/bmm-skills/4-implementation/bmad-correct-course/bmad-skill-manifest.yaml
  • src/bmm-skills/1-analysis/bmad-product-brief/bmad-skill-manifest.yaml
  • src/bmm-skills/2-plan-workflows/bmad-create-ux-design/bmad-skill-manifest.yaml
  • src/bmm-skills/1-analysis/research/bmad-technical-research/bmad-skill-manifest.yaml
  • src/bmm-skills/1-analysis/bmad-document-project/bmad-skill-manifest.yaml
  • src/bmm-skills/4-implementation/bmad-create-story/bmad-skill-manifest.yaml
  • src/bmm-skills/1-analysis/research/bmad-domain-research/bmad-skill-manifest.yaml
  • src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/bmad-skill-manifest.yaml
  • src/bmm-skills/4-implementation/bmad-qa-generate-e2e-tests/bmad-skill-manifest.yaml
  • src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/bmad-skill-manifest.yaml
  • src/core-skills/bmad-review-edge-case-hunter/bmad-skill-manifest.yaml
  • src/core-skills/bmad-editorial-review-structure/bmad-skill-manifest.yaml
  • src/core-skills/bmad-review-adversarial-general/bmad-skill-manifest.yaml
  • src/bmm-skills/2-plan-workflows/bmad-validate-prd/bmad-skill-manifest.yaml
  • src/bmm-skills/2-plan-workflows/bmad-create-prd/bmad-skill-manifest.yaml
  • src/bmm-skills/4-implementation/bmad-quick-dev/bmad-skill-manifest.yaml
  • src/bmm-skills/3-solutioning/bmad-create-architecture/bmad-skill-manifest.yaml
  • src/bmm-skills/4-implementation/bmad-sprint-status/bmad-skill-manifest.yaml
  • src/core-skills/bmad-index-docs/bmad-skill-manifest.yaml
  • src/core-skills/bmad-brainstorming/bmad-skill-manifest.yaml
  • src/bmm-skills/4-implementation/bmad-sprint-planning/bmad-skill-manifest.yaml
  • src/core-skills/bmad-init/bmad-skill-manifest.yaml
  • src/core-skills/bmad-help/bmad-skill-manifest.yaml
  • src/bmm-skills/1-analysis/research/bmad-market-research/bmad-skill-manifest.yaml
  • src/bmm-skills/4-implementation/bmad-dev-story/bmad-skill-manifest.yaml
  • src/core-skills/bmad-distillator/bmad-skill-manifest.yaml
  • test/test-installation-components.js
  • src/bmm-skills/4-implementation/bmad-code-review/bmad-skill-manifest.yaml
  • src/bmm-skills/4-implementation/bmad-retrospective/bmad-skill-manifest.yaml
  • src/core-skills/bmad-editorial-review-prose/bmad-skill-manifest.yaml
  • src/bmm-skills/3-solutioning/bmad-generate-project-context/bmad-skill-manifest.yaml

📝 Walkthrough

Walkthrough

This PR removes type: skill declarations from 43 skill manifest files across the bmm-skills and core-skills directories, and refactors skill discovery logic in manifest-generator.js to treat SKILL.md as the canonical entrypoint rather than relying on manifest YAML files.

Changes

Cohort / File(s) Summary
Skill Manifest Declarations
src/bmm-skills/1-analysis/bmad-document-project/bmad-skill-manifest.yaml, src/bmm-skills/1-analysis/bmad-product-brief/bmad-skill-manifest.yaml, src/bmm-skills/1-analysis/research/bmad-domain-research/bmad-skill-manifest.yaml, src/bmm-skills/1-analysis/research/bmad-market-research/bmad-skill-manifest.yaml, src/bmm-skills/1-analysis/research/bmad-technical-research/bmad-skill-manifest.yaml, src/bmm-skills/2-plan-workflows/bmad-create-prd/bmad-skill-manifest.yaml, src/bmm-skills/2-plan-workflows/bmad-create-ux-design/bmad-skill-manifest.yaml, src/bmm-skills/2-plan-workflows/bmad-edit-prd/bmad-skill-manifest.yaml, src/bmm-skills/2-plan-workflows/bmad-validate-prd/bmad-skill-manifest.yaml, src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/bmad-skill-manifest.yaml, src/bmm-skills/3-solutioning/bmad-create-architecture/bmad-skill-manifest.yaml, src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/bmad-skill-manifest.yaml, src/bmm-skills/3-solutioning/bmad-generate-project-context/bmad-skill-manifest.yaml, src/bmm-skills/4-implementation/bmad-code-review/bmad-skill-manifest.yaml, src/bmm-skills/4-implementation/bmad-correct-course/bmad-skill-manifest.yaml, src/bmm-skills/4-implementation/bmad-create-story/bmad-skill-manifest.yaml, src/bmm-skills/4-implementation/bmad-dev-story/bmad-skill-manifest.yaml, src/bmm-skills/4-implementation/bmad-qa-generate-e2e-tests/bmad-skill-manifest.yaml, src/bmm-skills/4-implementation/bmad-quick-dev/bmad-skill-manifest.yaml, src/bmm-skills/4-implementation/bmad-retrospective/bmad-skill-manifest.yaml, src/bmm-skills/4-implementation/bmad-sprint-planning/bmad-skill-manifest.yaml, src/bmm-skills/4-implementation/bmad-sprint-status/bmad-skill-manifest.yaml
Removed type: skill declarations from bmm-skills manifest files across analysis, planning, solutioning, and implementation phases.
Core Skills Manifest Declarations
src/core-skills/bmad-advanced-elicitation/bmad-skill-manifest.yaml, src/core-skills/bmad-brainstorming/bmad-skill-manifest.yaml, src/core-skills/bmad-editorial-review-prose/bmad-skill-manifest.yaml, src/core-skills/bmad-editorial-review-structure/bmad-skill-manifest.yaml, src/core-skills/bmad-help/bmad-skill-manifest.yaml, src/core-skills/bmad-index-docs/bmad-skill-manifest.yaml, src/core-skills/bmad-init/bmad-skill-manifest.yaml, src/core-skills/bmad-party-mode/bmad-skill-manifest.yaml, src/core-skills/bmad-review-adversarial-general/bmad-skill-manifest.yaml, src/core-skills/bmad-review-edge-case-hunter/bmad-skill-manifest.yaml, src/core-skills/bmad-shard-doc/bmad-skill-manifest.yaml
Removed type: skill declarations from core-skills manifest files (11 files). Note: bmad-distillator had 15 lines of manifest content removed.
Discovery Logic Refactor
tools/cli/installers/lib/core/manifest-generator.js
Updated collectSkills() to treat directories as skill entrypoints based solely on SKILL.md presence and valid frontmatter (name and description match). Removed helper methods isNativeSkillDirType() and hasNativeSkillManifest(). Manifest YAML is now loaded only after SKILL.md validation; its type field is used strictly for install_to_bmad computation. Renamed _hasSkillManifestRecursive() to _hasSkillMdRecursive() for module scanning.
Test Fixtures
test/test-installation-components.js
Removed creation of bmad-skill-manifest.yaml files from temporary test fixtures in createTestBmadFixture and the "Unified Skill Scanner" test suite, simplifying fixture setup for skill-only scanning scenarios.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested reviewers

  • bmadcode
🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely summarizes the main change: refactoring skill discovery to use SKILL.md instead of manifest YAML files.
Description check ✅ Passed The description is well-related to the changeset, outlining the removal of manifest files, simplification of the manifest generator, and updates to tests.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch remove-skill-manifest-yaml

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@augmentcode
Copy link
Copy Markdown

augmentcode bot commented Mar 21, 2026

🤖 Augment PR Summary

Summary: Refactors the installer’s manifest generation so skills are discovered via SKILL.md frontmatter rather than bmad-skill-manifest.yaml markers.

Changes:

  • Removed `bmad-skill-manifest.yaml` files that only declared `type: skill` across the skill trees
  • Updated `ManifestGenerator.collectSkills()` to treat any directory with a valid `SKILL.md` as a skill; YAML is now optional for additional flags/metadata
  • Adjusted module detection to treat the presence of `SKILL.md` as evidence of a “skill-only” module
  • Updated installer tests/fixtures to stop creating skill manifest YAML files for SKILL.md-based skills

Technical Notes: Skill discovery now depends on SKILL.md YAML frontmatter containing name and description (with name matching the directory name); manifest YAML remains supported when present for fields like install_to_bmad and agent metadata.

🤖 Was this summary useful? React with 👍 or 👎

Copy link
Copy Markdown

@augmentcode augmentcode bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review completed. 3 suggestions posted.

Fix All in Augment

Comment augment review to trigger a new review at any time.

const skillMdPath = path.join(dir, skillFile);
const dirName = path.basename(dir);

const skillMeta = await this.parseSkillMd(skillMdPath, dir, dirName, debug);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If a directory contains a SKILL.md that exists but fails parseSkillMd validation, it won’t be added to skillClaimedDirs, so its workflow.md (and other files) can still be picked up by the workflow/task scanners and end up in the wrong manifest. Consider whether “SKILL.md present but invalid” should still block legacy scanning (or at least emit a non-debug warning) to avoid silently misclassifying broken skills as workflows.

Severity: medium

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

const manifest = await this.loadSkillManifest(dir);
if (this.hasNativeSkillManifest(manifest)) return true;
// Check for SKILL.md in this directory
if (entries.some((e) => !e.isDirectory() && e.name === 'SKILL.md')) return true;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

_hasSkillMdRecursive() treats any SKILL.md presence as a module signal without validating frontmatter, so scanInstalledModules() can include “skill-only” modules even when no valid skills will be discovered. Consider whether module detection should align with the same validation criteria used by collectSkills() to avoid polluting manifest.yaml/CSV outputs with empty modules.

Severity: low

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

* with name/description frontmatter.
* A directory is discovered as a skill when it contains a SKILL.md file with
* valid name/description frontmatter (name must match directory name).
* Manifest YAML is loaded only when present — for install_to_bmad and agent metadata.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR description says “Remove all bmad-skill-manifest.yaml files”, but the implementation still supports (and tests still rely on) manifest YAML for things like install_to_bmad and agent/workflow metadata. Might be worth clarifying in the PR description/changelog which YAML manifests are truly removed vs still supported/required.

Severity: low

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant