📂 skillshare v0.15.5 Release Notes
Release date: 2026-02-23
TL;DR
v0.15.5 focuses on onboarding friction reduction, CLI output polish, and a critical bug fix:
init --modeflag — choose merge / copy / symlink at init timeuninstall --all— remove all skills at once- Improved CLI output — compact grouped audit findings, structured sections, lighter headers
- Manifest-based orphan cleanup — fixes orphan directory cleanup after uninstall (#45)
ssenvdevcontainer workflow — isolated testing environments
What's New
1) init --mode flag
Previously, changing sync mode required a separate target --mode command after init. Now you can set it at init time:
# Set copy mode for all targets at init (non-interactive)
skillshare init --mode copy
# Short flag
skillshare init -m copy
# Interactive prompt (TTY detected)
skillshare init
# → Sync mode preference
# [1] merge (per-skill symlinks, preserves local skills)
# [2] copy (real files, compatibility-first)
# [3] symlink (entire directory linked)
# Enter choice [1]:
# Project mode
skillshare init -p -m copy
# Discover new targets with copy mode (existing targets unchanged)
skillshare init --discover -m copyThe interactive prompt only appears when a TTY is detected, so CI pipelines are not affected.
2) Per-target sync mode hint
After sync and doctor, if you have targets with known symlink compatibility issues (Cursor, Antigravity, Copilot, OpenCode) still using merge or symlink mode, a subtle hint suggests switching:
Hint: tune sync mode per target when needed
skillshare target cursor --mode copy && skillshare sync
The hint is suppressed when only symlink-compatible targets (Claude, Codex, etc.) are configured, keeping output clean for simple setups.
3) Devcontainer: ssenv isolated environments
New ssenv tool for creating isolated skillshare environments inside the dev container. Each environment gets its own XDG directories (HOME, XDG_CONFIG_HOME, XDG_DATA_HOME, etc.), allowing parallel testing without interference.
# Create and switch to an isolated environment
ssnew demo
ssuse demo
# Run commands in isolation (separate config, skills, targets)
ss init
ss install github.com/someone/skills
ss sync
ss status
# Switch back to original environment
ssback
# List / delete environments
ssls
ssenv delete demo --forceShortcuts: ssnew, ssuse, ssback, ssls, sshelp are available in interactive shells for quick access.
Use cases:
- Test install/sync/audit flows without touching your working config
- Reproduce user-reported issues in a clean environment
- Run parallel test scenarios (e.g. one env per sync mode)
4) uninstall --all
Remove every skill from source in one command:
skillshare uninstall --all # Interactive confirmation
skillshare uninstall --all --force # Skip confirmation
skillshare uninstall --all -p # Project mode
skillshare uninstall --all -n # Preview (dry-run)Cannot be combined with skill names or --group.
5) Improved CLI output
- Compact audit findings — grouped by severity + message with
× Ndedup and location list; use--audit-verboseoninstallfor full detail - Structured sections — consistent section labels throughout (
── Audit Findings ──,── Next Steps ──, etc.) - Lighter update headers — single-item updates use flowing
StepStartstyle instead of bordered box
6) Manifest-based orphan cleanup in merge mode (fixes #45)
After uninstalling skills, sync previously left orphan real directories (non-symlinks) in targets with "unknown directory" warnings. This happened because PruneOrphanLinks only identified managed directories by naming patterns (__ nested separator, _ tracked repo prefix) — simple names like pdf or code-reviewer were treated as user-created.
Now, sync in merge mode writes .skillshare-manifest.json (the same file already used by copy mode) to track all managed skills. On prune:
- In manifest → safely removed (skillshare-managed)
- Not in manifest → preserved with warning (user-created)
This also fixes a related edge case: changing exclude patterns now correctly prunes previously-managed real directories, not just symlinks.
Backward compatible: targets without a manifest fall back to the existing naming-pattern heuristic.
7) Hardened devcontainer entrypoints
ensure-skillshare-linux-binary.shnow validates binary architecture and falls back gracefullysetup.shimprovements for robustness during container rebuildstart-dev.shhardened for edge cases in service startup
Changelog
- 4c628e9 Add devcontainer ssenv workflow and AI test guide
- 7ab4c62 Harden devcontainer skillshare entrypoints
- 42c383d docs(changelog): add uninstall --all, compact audit display, structured sections
- 7dc7d9a docs(changelog): add v0.15.5 entry for init --mode and per-target hint
- 0694fbd docs(guides): add skill design guide with determinism and CLI wrapper patterns
- 06c14b6 feat(init): add --mode flag and per-target compatibility hints
- 7de15b0 feat(install): add SectionLabel and structured audit-blocked output for single-item handlers
- a0c859a feat(install): compress batch output for --audit-verbose and dry-run skill list
- 25f8617 feat(ui): add Audit Findings section label for single-skill install/update
- a15f87f feat(ui): add SectionLabel("Next Steps") to all remaining single-item handlers
- 537e293 feat(ui): add SectionLabel, fix StepFail ANSI passthrough, skip short elapsed
- 93aa257 feat(uninstall): add --all flag to remove all skills from source
- 95ad577 feat(update): add section labels and improve project batch output
- 81a43a0 fix(ux): keep filter text after selection in MultiSelect prompts
- 3721d69 fix: prune orphaned real directories in merge mode via manifest (#45)
- 7e1b29a refactor(devcontainer): dedupe ssenv shortcut setup and unify mode prompt
- 70502ec refactor(ui): compact audit findings display with grouping and risk score
- b91a6fc refactor(ui): replace HeaderBox with lightweight headers in update command
- d150f74 refactor(ui): use SectionLabel unconditionally in batch result display