skills.sh.json adds skill dirs
A repo can now list extra skill folders in the paths field of a root skills.sh.json. Both the clone-and-walk path and the GitHub blob fast path search them like skills/, up to three levels deep.
What changed. parseSkillsShPaths (src/skills-sh-config.ts) reads {"paths": ["./tools/skills"]}. It only accepts entries that start with ./ and stay inside the repo. Entries with backslashes, .. escapes or the repo root are dropped, and invalid JSON is ignored.
- On disk:
discoverSkillsadds the folders to its priority list before the deep-container set is built, so they are walked up to 3 levels deep. Plugin-manifest folders stay at depth 1. - GitHub fast path:
tryBlobInstalldownloadsskills.sh.jsononly if GitHub's file listing includes it, then passes the folders tofindSkillMdPathsas extra prefixes. ASKILL.mdsitting directly in a declared folder is skipped, which matches the disk walk.
Why it matters. Before, a skill outside the standard folders was found only by the fallback search, which runs only when nothing else is found. A repo with skills in skills/ and also in tools/skills/ lost the second set without any message. When names clash, the standard folders still win.
- minorFast path can silently drop declared skills if the config fetch fails
src/blob.tsL480–491
Also in Review nitPath containment is lexical; symlinked folders are not resolved
src/skills-sh-config.tsL34–41This is the same gap the existing skills/ folder and the plugin-manifest isContainedIn check already have, so it is not a new exposure.
- Files changed
- 5
- Lines
- +395 / -10
- New tests
- 16