Skill directories deploy only .md files; every other companion is silently dropped, and three shipped artifacts already depend on whole-tree deploys.
Plan
Extend skill passthrough from "other .md files" to the whole tree: copy every non-SKILL.md file verbatim (extension and subdirectory structure preserved), skipping non-UTF-8 binaries with a warning. Compiled binaries stay in bin/ at the plugin root.
Changes
src/cli/assemble/sources.rs (walk_skill_dir, collect_skill_files): lift the .md-only filter for passthrough files; keep SKILL.md as the only assembled file.
- Docs: the forge-core UseForge rule already describes the whole-tree behavior; today it is aspirational. Artifacts broken by the gap:
ForgeSkill (its scripts/, agents/, eval-viewer/ never deploy, so the documented python -m scripts.<name> invocations fail at the deployed path), Plan/template.html (the HtmlPlan renderer's template), PullRequest/pull-request.mdschema (body validation schema).
Testing
Skill directories deploy only
.mdfiles; every other companion is silently dropped, and three shipped artifacts already depend on whole-tree deploys.Plan
Extend skill passthrough from "other
.mdfiles" to the whole tree: copy every non-SKILL.mdfile verbatim (extension and subdirectory structure preserved), skipping non-UTF-8 binaries with a warning. Compiled binaries stay inbin/at the plugin root.Changes
src/cli/assemble/sources.rs(walk_skill_dir,collect_skill_files): lift the.md-only filter for passthrough files; keep SKILL.md as the only assembled file.ForgeSkill(itsscripts/,agents/,eval-viewer/never deploy, so the documentedpython -m scripts.<name>invocations fail at the deployed path),Plan/template.html(the HtmlPlan renderer's template),PullRequest/pull-request.mdschema(body validation schema).Testing
forge installon a skill with a.mdschema, an.html, and ascripts/*.pycompanion deploys all three with structure preserved.mdcompanion behavior unchanged (assembled SKILL.md, verbatim companions)