Commit Graph

609 Commits

Author SHA1 Message Date
Alex Verkhovsky 8d9ea3b95d refactor(installer): move isQuickUpdate into clean config
Add isQuickUpdate() to _buildConfig so the official path can check it
without reaching into customConfig. Replace all customConfig._quickUpdate
references with config.isQuickUpdate().
2026-03-21 05:28:39 -06:00
Alex Verkhovsky a9ba16cff5 refactor(installer): make _collectConfigs take clean config only
Move _quickUpdate short-circuit to the call site in install() so
_collectConfigs receives the clean config object and has no dependency
on customConfig. Uses config.hasCoreConfig() instead of inline check.
2026-03-21 05:26:19 -06:00
Alex Verkhovsky e41cc1f822 refactor(installer): extract _buildConfig method with hasCoreConfig()
Move config normalization into _buildConfig(originalConfig) so the gate
logic is a named, testable method. Add hasCoreConfig() on the returned
config object to replace the repeated coreConfig && Object.keys pattern.
2026-03-21 05:24:54 -06:00
Alex Verkhovsky 68f723d427 refactor(installer): normalize config gate and flatten core into module list
Split install() input into config (clean official fields) and customConfig
(full originalConfig copy for custom module concerns). Core is no longer
special-cased — it's just another module in config.modules that goes through
OfficialModules.install(). Deletes installCore(), copyCoreFiles(), copyFile(),
getFileList() dead code. Updates ui.js and quickUpdate() callers to keep core
in the modules list instead of setting installCore: true.
2026-03-21 05:23:02 -06:00
Alex Verkhovsky aa406419e7 refactor(installer): remove customModulePaths local variable
install() no longer stores the return value of discoverPaths —
this.customModules.paths is accessed directly throughout.
Remove customModulePaths parameter from _installCustomModules.
2026-03-21 04:53:29 -06:00
Alex Verkhovsky 4a76289b35 refactor(installer): make discoverPaths populate this.paths directly
discoverPaths now sets this.paths internally instead of returning
a Map that the caller feeds back via setPaths. Remove setPaths
and all 5 no-op setPaths calls in installer.js.
2026-03-21 04:47:46 -06:00
Alex Verkhovsky a7beab59b9 refactor(installer): move discoverCustomModulePaths into CustomModules
Rename to CustomModules.discoverPaths() and move from installer.js
into custom-modules.js where it belongs.
2026-03-21 04:43:58 -06:00
Alex Verkhovsky ea8c076e29 refactor(installer): split ModuleManager into OfficialModules and CustomModules
OfficialModules handles source resolution (core, bmm, external),
module install/update/remove, directory creation, and file copying.
CustomModules holds the custom module paths Map. findModuleSource
now knows core explicitly. install() accepts optional sourcePath
for custom modules that already know their source.
2026-03-21 04:35:47 -06:00
Alex Verkhovsky 2a9df6377e style(installer): replace lazy singletons with normal requires
Use top-level require and constructor instantiation for
ExternalModuleManager instead of module-scoped lazy singletons.
2026-03-21 04:15:51 -06:00
Alex Verkhovsky ad2833caf6 refactor(installer): move external module ops into ExternalModuleManager
Move cloneExternalModule, findExternalModuleSource, and
getExternalCacheDir from ModuleManager into ExternalModuleManager
where they belong. Replace this.moduleManager.isExternalModule()
calls with direct ExternalModuleManager.hasModule(). Remove
externalModuleManager instance from ModuleManager constructor.
2026-03-21 04:09:35 -06:00
Alex Verkhovsky 89812ec846 refactor(installer): remove dead state from ModuleManager
Remove setBmadFolderName (set to constant, never read),
setCoreConfig (set, never read), dead listAvailable branch
guarded by never-assigned this.bmadDir, and unused
BMAD_FOLDER_NAME import.
2026-03-21 04:01:22 -06:00
Alex Verkhovsky fba77e3e89 refactor(installer): split module install loop into official and custom passes
Extract _installOfficialModules and _installCustomModules from the
interleaved module installation loop. Each method works from its own
source list, eliminating the allModules merge-then-re-split pattern.
Remove unused destructuring of paths into local variables.
2026-03-21 03:59:23 -06:00
Alex Verkhovsky eade619d17 refactor(installer): remove dead dependency resolver
No skills declare cross-module dependencies. The resolver ran four
resolution passes on every install, but both consumers
(installCoreWithDependencies, installModuleWithDependencies) ignored
the resolution data and copied entire module directories anyway.
The sole non-dead consumer (installPartialModule) never fired.

Delete dependency-resolver.js (743 lines), three dead wrapper methods,
and all feeding/filtering logic in install(). Official modules now
call installCore/moduleManager.install directly.
2026-03-21 03:12:00 -06:00
Alex Verkhovsky 9f7ec48a89 refactor(installer): flatten custom/ directory into custom-handler.js
Single file doesn't need its own directory.
2026-03-21 02:45:20 -06:00
Alex Verkhovsky 472c1c9c22 refactor(installer): extract _collectConfigs and _discoverCustomModulePaths
Split the monolithic config collection block in install() into two
methods: _collectConfigs for official modules only, and
_discoverCustomModulePaths for custom module source discovery.
2026-03-21 02:36:51 -06:00
Alex Verkhovsky e8d041a51c refactor(installer): replace copyFileWithPlaceholderReplacement with copyFile
The placeholder replacement logic was removed long ago but the method
still did a pointless read-as-UTF8-then-write-unchanged dance with a
binary fallback. Just use fs.copy.
2026-03-21 02:22:34 -06:00
Alex Verkhovsky c92d84d74a style(installer): reorder methods to callers-above-callees convention 2026-03-21 02:21:40 -06:00
Alex Verkhovsky c31cea8c30 refactor(cli): remove dead _clearScreen param from displayLogo 2026-03-21 01:48:10 -06:00
Alex Verkhovsky 1a1909a7f9 refactor(installer): extract InstallPaths class for path init and validation
Replace inline path construction in install() with a dedicated class
that ensures all structural directories exist, validates permissions,
and provides derived-path methods for manifests and modules.
2026-03-21 01:47:20 -06:00
Alex Verkhovsky efca29485e docs: add JavaScript conventions guide
Establishes callers-above-callees function ordering rule
and references it from AGENTS.md.
2026-03-21 01:42:23 -06:00
Alex Verkhovsky 93a1e1dc46
refactor(installer): remove dead task/tool/workflow manifest code (#2083)
* refactor(installer): discover skills by SKILL.md instead of manifest 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.

* refactor(installer): remove dead task/tool/workflow manifest code

The remove-skill-manifest-yaml branch deleted the scanners that
discover tasks, tools, and workflows but left behind the code that
writes their manifest CSVs. Remove collectTasks/Tools/Workflows,
writeTaskManifest/ToolManifest/WorkflowManifest, their helpers, and
the now-unreachable getPreservedCsvRows/upgradeRowToSchema methods.
Update installer pre-registration and test assertions accordingly.
2026-03-21 00:12:40 -06:00
Alex Verkhovsky 31ae226bb4
refactor(installer): discover skills by SKILL.md instead of manifest YAML (#2082)
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.
2026-03-21 00:11:23 -06:00
Alex Verkhovsky c28206dca4
refactor(installer): remove dead agent compilation pipeline (#2080)
* refactor(installer): remove dead agent compilation pipeline

Delete 9 files (~2,600 lines) that compiled .agent.yaml to .md.
No .agent.yaml files exist in the source tree — agents now ship
as pre-built SKILL.md. Clean up all references in installer,
module manager, custom handler, base IDE, UI, and tests.

* refactor(custom-handler): remove dead install/copy/find methods

CustomHandler.install(), copyDirectory(), and findFilesRecursively()
are never called — custom modules are installed via moduleManager.install()
since Dec 2025. Also removes unused FileOps import and constructor.

Verified with before/after clean-installer comparison (codex + custom
modules with custom.yaml): output is identical.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(installer): remove dead compilation refs from docs and module manager

Address review findings from PR #2080 triage:
- Remove compile-agents from CLI action docs (en, fr, zh-cn)
- Remove dead vendorCrossModuleWorkflows() and .agent.yaml skip logic
- Clean stale compilation-era comments in manifest-generator

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 22:52:02 -06:00
Alex Verkhovsky 1cb913523e
refactor(installer): remove legacy workflow, task, and agent IDE generators (#2078)
* refactor(installer): remove legacy workflow, task, and agent IDE generators

All platforms now use skill_format exclusively. The old
WorkflowCommandGenerator, TaskToolCommandGenerator, and
AgentCommandGenerator code paths in _config-driven.js were
no-ops — collectSkills claims every directory before the
legacy collectors run, making their manifests empty.

Removed:
- workflow-command-generator.js (deleted)
- task-tool-command-generator.js (deleted)
- writeAgentArtifacts, writeWorkflowArtifacts, writeTaskToolArtifacts
- AgentCommandGenerator import from _config-driven.js
- Legacy artifact_types/agents/workflows/tasks result fields

Simplified installToTarget, installToMultipleTargets, printSummary,
and IDE manager detail builder to skills-only.

Updated test fixture to use SKILL.md format instead of old agent format.

* fix(installer): address PR review findings from #2078

- Fix temp dir leak in test fixture cleanup (use path.dirname)
- Fail loudly when skill_format missing instead of silent success
- Add workflow.md to test fixture for verbatim-copy coverage

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 15:18:47 -06:00
Murat K Ozcan 1786d1debc
fix: tea agent start (#2067)
* fix: tea agent start

* fix: addressed PR comment
2026-03-19 11:40:43 -05:00
Frank 3c8d865457
fix: update src/core and src/bmm path references to match renamed directories (#2053)
The v6.2.0 release renamed src/core to src/core-skills and src/bmm to
src/bmm-skills, but the installer CLI code still referenced the old
directory names, causing ENOENT crashes during installation.

Updated all path references across 7 files in tools/cli/ including
path.join() calls, string comparisons, regex patterns, and comments.

Fixes #2052

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Brian <bmadcode@gmail.com>
2026-03-18 19:29:16 -05:00
Alex Verkhovsky fd1e24c5c2 fix: address PR review findings in skill validator
- Guard against YAML comment lines in parseFrontmatterMultiline
- Broaden PATH-02 to detect any installed_path mention, not just variable refs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 14:35:52 -06:00
Alex Verkhovsky 4f1894908c refactor: tighten SKILL-04 regex, broaden WF-01/WF-02, remove forbidden names
- SKILL-04: require bmad- prefix, enforce single dashes via regex
  ^bmad-[a-z0-9]+(-[a-z0-9]+)*$, drop FORBIDDEN_NAME_SUBSTRINGS
- WF-01/WF-02: check all .md files (not just workflow.md) for stray
  name/description frontmatter, with tech-writer exception
- Update skill-validator.md prompt to match all rule changes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 08:02:01 -06:00
Alex Verkhovsky 7a214cc7d8 fix: tighten frontmatter parsing and add SKILL-07 body content check
- Require \n---\n (not just \n---) for closing frontmatter delimiter
  in both parseFrontmatter and parseFrontmatterMultiline, with fallback
  for files ending in \n---
- Add SKILL-07: SKILL.md must have non-empty body content after
  frontmatter (L2 instructions are required)
- Update rule count to 14

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 08:02:01 -06:00
Alex Verkhovsky ac5cb552c0 refactor: discover skills by walking src instead of hardcoded paths
Replace SKILL_LOCATIONS array and AGENT_LOCATION constant with a single
walk from SRC_DIR. Any directory under src/ containing SKILL.md is a
skill — no need to enumerate locations.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 08:02:00 -06:00
Alex Verkhovsky 22035ef015
Merge branch 'main' into feat-deterministic-skill-validator 2026-03-18 00:11:46 -06:00
Brian 0380656de6
refactor: consolidate agents into phase-based skill directories (#2050)
* refactor: consolidate agents into phase-based skill directories

Remove separate agent/workflow/skill directories (src/bmm/agents,
src/bmm/workflows, src/core/skills, src/utility/agent-components) and
reorganize all content into phase-based structures under src/bmm-skills
(1-analysis, 2-plan-workflows, 3-solutioning, 4-implementation) and
src/core-skills. Eliminates the agent/skill distinction by treating
agents as skills within their workflow phase.

* fix: update broken file references to use new bmm-skills paths

* docs: update all references for unified bmad-quick-dev workflow

Remove all references to the old separate bmad-quick-spec and
bmad-quick-dev-new-preview workflows. The new bmad-quick-dev is a
unified workflow that handles intent clarification, planning,
implementation, review, and presentation in a single run.

Updated files across English docs, Chinese translations, source
skill manifests, website diagram, and build tooling.
2026-03-18 01:01:33 -05:00
Alex Verkhovsky 5a1f356e2c feat(tools): add deterministic skill validator for CI
Add tools/validate-skills.js — a Node CLI that checks 13 deterministic
rules (SKILL-01–06, WF-01–02, PATH-02, STEP-01/06/07, SEQ-02) across
all skill directories. Runs in under a second, exits non-zero on HIGH+
findings in strict mode, and outputs JSON for the inference validator.

- Add validate:skills npm script to quality chain
- Update skill-validator.md with first-pass integration instructions
- Update AGENTS.md push gate documentation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 23:49:01 -06:00
Alex Verkhovsky f0c7cf41c7 chore: remove dead agent schema validation infrastructure
The *.agent.yaml format was replaced by SKILL.md-based agents.
Zero agent YAML files remain in src/, so remove the Zod schema,
validator CLI, fixture-based test suite (52 fixtures), unit tests,
CLI integration tests, and the CI steps that invoked them.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 20:20:12 -06:00
Alex Verkhovsky be6611570a
Merge branch 'main' into feat/add-ona-platform-support 2026-03-16 07:26:53 -06:00
Brian bed9052d49
Feat/conformant agent skills (#2021)
* feat(agents): convert all BMM agents to conformant skill structure

Replace legacy XML-based .agent.yaml files with new SKILL.md + bmad-manifest.json
format for all 9 BMM agents (analyst, architect, dev, pm, qa, sm,
quick-flow-solo-dev, ux-designer, tech-writer). Each agent now has:

- SKILL.md with persona, activation flow (bmad-init, project context, dynamic menu)
- bmad-manifest.json with capabilities referencing external skills
- bmad-skill-manifest.yaml for party-mode agent-manifest.csv generation

Tech-writer includes internal prompt files for write-document, mermaid-gen,
validate-doc, and explain-concept capabilities.

Also includes core bmad-init skill and removes legacy agent compilation tests
that referenced the old .agent.yaml format.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(installer): support new SKILL.md agent format in manifest generation

Update getAgentsFromDir to detect directories with bmad-skill-manifest.yaml
where type=agent and extract metadata directly from the YAML fields. This
allows the agent-manifest.csv to be populated from both old-format compiled
.md agents (XML parsing) and new-format SKILL.md agents (YAML manifest).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(installer): install type:agent skills to IDE native skills directory

The collectSkills scanner only recognized type:skill manifests, causing
new-format agents (type:agent in bmad-skill-manifest.yaml) to be added
to agent-manifest.csv but not installed to .claude/skills/. Now both
type:skill and type:agent are recognized as installable skills, while
collectAgents still processes type:agent dirs for the agent manifest
even when claimed by the skill scanner.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(installer): suppress canonicalId warning for type:agent skills

Agent-type skill manifests legitimately use canonicalId for agent-manifest
mapping (e.g., bmad-analyst). Only warn for regular type:skill manifests.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(skills): update analyst manifest and simplify bmad-init instructions

Switch analyst's create-brief menu entry to the new product-brief-preview
skill. Simplify bmad-init SKILL.md by removing hardcoded code fences and
making the script path relative to the skill directory.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(bmm): update tech-writer CSV refs to new skill path

The module-help.csv still referenced the old agent YAML path for
tech-writer entries. Update to skill:bmad-agent-tech-writer to match
the conformant skill structure.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 00:47:30 -05:00
Alex Verkhovsky 8e8432e138
Merge branch 'main' into main 2026-03-15 20:45:41 -06:00
Alex Verkhovsky 6dc9ce0090 chore(tools): remove Claude Code-specific sections from skill cheatsheet
Keep cheatsheet focused on the Agent Skills open standard only.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 18:30:39 -06:00
JasonYe d42de639bc add Qoder code agent support 2026-03-16 08:18:02 +08:00
Alex Verkhovsky 07f1a44c5c chore(tools): align Augment config with skill-validator as single source of truth
Replace duplicated workflow-era rules in .augment/code_review_guidelines.yaml
with a single reference to tools/skill-validator.md. Append the skill spec
cheatsheet to the validator with a link to the Agent Skills specification.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 17:41:54 -06:00
Alex Verkhovsky cb16a4fac2 fix(skills): strip redundant [workflow.md](workflow.md) links repo-wide
Replace `[workflow.md](workflow.md)` with bare `workflow.md` in all 34
SKILL.md files. Redundant markdown link syntax adds noise for LLM
consumers. Also update the validator example to match.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 11:24:57 -06:00
Alex Verkhovsky 098c96740c fix(skills): validation pass 2 — fix path, variable, and sequence issues across 32 files
Run skill-validator against all 36 skills on HEAD (42b1d0f6). Fixes:

- PATH-01: relative path corrections in product-brief-preview, brainstorming,
  distillator, generate-project-context, edit-prd, quick-dev-new-preview
- PATH-04: remove 5 intra-skill path variables from edit-prd
- REF-01: single-curly template vars → double-curly in create-architecture,
  create-epics-and-stories, create-story
- REF-02: fix dangling file refs in advanced-elicitation, validate-prd, edit-prd
- REF-03: update rule to prefer natural language `Invoke the skill` form;
  fix stale persona ref in qa-generate-e2e-tests
- SEQ-01: "skip to" → "proceed to" in quick-dev-new-preview
- SEQ-02: remove time estimates from document-project, quick-spec
- SKILL-06: add "Use when" trigger to review-edge-case-hunter
- STEP numbering: renumber step n="0.5" to integer sequence in retrospective

Also updates REF-03 rule in tools/skill-validator.md to clarify that
natural language invocation is canonical — no skill: prefix required.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 10:38:43 -06:00
Alex Verkhovsky 2a3708fd32
Merge branch 'main' into feat/add-ona-platform-support 2026-03-15 07:39:13 -06:00
Alex Verkhovsky e794a81ee2 feat(tools): add REF-03 skill invocation language rule to validator
Skills must be invoked with "invoke" language, not file-oriented verbs
like "read fully and follow", "execute", "run", or "load". These imply
document-level operations and are incorrect for skill references.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 06:40:10 -06:00
Alex Verkhovsky 2aa5cddbe6
Merge branch 'main' into feat/add-ona-platform-support 2026-03-15 06:35:23 -06:00
Alex Verkhovsky 02cfaf64a4 feat(tools): add PATH-05 skill encapsulation rule to validator
Add PATH-05: no file path references into another skill directory.
Skills are encapsulated — external consumers must use skill:name syntax,
not reach into internal files. Also tighten WF-03 to cross-reference
PATH-05 so vague "legitimate external path" no longer permits
cross-skill file paths.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 02:26:01 -06:00
Brian cbb8b98876
manifest generate will no longer fail when module has no agents and its first (#1998) 2026-03-15 01:46:16 -05:00
Brian 9fa51d996b
prototype preview of new version of product brief skill (#1959)
* prototype preview of new version of product brief skill

* chore: re-enable bmad-builder external module

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* config loading with existing location

* refactor: rename bmad-bmm-product-brief-preview to bmad-product-brief-preview

Drop the redundant bmm prefix from the product brief preview skill folder
to align with the standard naming convention.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* docs: add core tools reference and apply Diataxis style fixes

Add comprehensive reference doc for all 11 built-in core tools (tasks
and workflows) that ship with every BMad installation — bmad-help,
brainstorming, party-mode, distillator, advanced-elicitation, both
review tools, both editorial tools, shard-doc, and index-docs. Each
entry follows the Configuration Reference structure with purpose,
use cases, how it works, inputs, and outputs.

Style fixes across existing docs:
- reference/commands.md: convert #### headers to bold text, replace
  sparse task table with link to new core-tools reference
- how-to/get-answers-about-bmad.md: remove horizontal rule between
  sections (Diataxis violation)
- how-to/project-context.md: consolidate 4 consecutive tip admonitions
  into single admonition with bullet list, add AGENTS.md reference

Also includes:
- Add bmad-distillator task to core module with compression agents,
  format reference, splitting strategy, and analysis scripts
- Add Distillator entry to module-help.csv
- Rename supports-autonomous to supports-headless in product-brief
  manifest

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* core items to skills folder

* fix calls to invoke party mode

* fix calls to invoke party mode and AE as skills

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 00:05:53 -05:00
Alex Verkhovsky f4084ea199 feat(tools): add SKILL-05 name-matches-dir and REF-01 variable-defined rules
SKILL-05 checks that SKILL.md name matches the directory name.
REF-01 checks that every {variable} traces to frontmatter, config,
or runtime — exempts {{double-curly}} template placeholders.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 15:49:10 -06:00
Alex Verkhovsky 6ff29d4707 feat(tools): add inference-based skill validator
LLM-readable validation prompt covering 19 rules across 6 categories:
SKILL.md frontmatter, workflow.md hygiene, path resolution, step file
structure, sequential execution, and file reference integrity. Designed
to catch anti-patterns from mechanical workflow-to-skill conversions
(installed_path abuse, intra-skill path variables, metadata in wrong
frontmatter).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 15:18:55 -06:00