For each <name>/ dir in $target that has no matching skills/<name>/,
remove it. Catches stale installs after skill rename/retire
(motivating case: using-synology-ops just removed but install dir
lingered until manual rm).
Design choices:
- Combined flag (install + prune in one run), not standalone mode
- Prune always scans full target — does NOT respect -Names/positional
filter, since stale-cleanup is a global concern
- Prints `pruning: <name>` per removal, no confirmation prompt
- Default off — flag must be passed explicitly
[skip-tdd: wrapper] — shell glue wrapping Remove-Item / rm -rf with
a set-difference; verified via smoke-test on disposable target dir
(fake stale dirs created, full install + prune run via env-overridden
CLAUDE_SKILLS_DIR, post-state confirmed: stale dirs removed, valid
skills installed, using-synology-ops absent as expected).
Closes 1/3 of [install-ps1] acceptance (the --prune flag). The
remaining doc .wiki/concepts/install-cross-platform.md is deferred
to a follow-up commit.
Native cmdlet equivalent of install.sh: same behavior (copy each
skills/<name>/ into ~\.claude\skills\<name>\, skip if SKILL.md is
missing, support $env:CLAUDE_SKILLS_DIR override and -Names filter).
Removes bash dependency on Windows — no need to invoke git-bash from
pwsh, mirrors the existing build.sh / build.ps1 pair.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>