π skillshare v0.17.0 Release Notes
Release date: 2026-03-11
TL;DR
v0.17.0 promotes extras from a sync sub-feature to a first-class citizen with its own command group, project mode support, and Web UI page:
extrascommand group βinit,list,remove,collectsubcommands for managing non-skill resources (rules, prompts, commands)- Interactive TUI wizard β
extras initwith step-by-step name β target β mode flow - Project mode β all extras commands support
-pfor.skillshare/-scoped extras - Deep integration β
status,doctor,diff,syncall gain extras awareness - Web UI redesign β complete visual overhaul with clean design, table view, keyboard shortcuts, onboarding tour
- Web UI Extras page β new Extras management page + Dashboard card + REST API endpoints
- Auto-migration β legacy flat directories (
configDir/rules/) automatically move toconfigDir/extras/rules/
Breaking Change
Extras source directory structure changed from flat to nested:
# Before (v0.16.x)
~/.config/skillshare/rules/
# After (v0.17.0)
~/.config/skillshare/extras/rules/
Auto-migration runs on first sync extras β no manual action needed.
New extras Command Group
extras init
Create a new extra resource type. Two modes:
# Interactive wizard
skillshare extras init
# CLI flags
skillshare extras init rules --target ~/.claude/rules --target ~/.cursor/rules
skillshare extras init prompts --target .claude/prompts --mode copy -pThe TUI wizard walks through: name β target path β sync mode β add more targets β confirm.
extras list
View all extras with sync status per target:
skillshare extras list
skillshare extras list --json -pStatus values: synced, drift, not synced, no source.
extras remove
Remove an extra from configuration. Source files and synced targets are preserved.
skillshare extras remove rules
skillshare extras remove prompts --force -pextras collect
Reverse-sync: copy local files from a target back into the extras source directory, replacing originals with symlinks.
skillshare extras collect rules
skillshare extras collect rules --from ~/.claude/rules --dry-runIntegration with Existing Commands
status
Now shows an Extras section with file count and target count per configured extra.
doctor
Checks that extras source directories exist and target parent directories are reachable. Reports warnings for missing sources.
diff includes extras
diff automatically includes per-file extras diff when extras are configured. No extra flags needed.
skillshare diff # skills + extras (if configured)
skillshare diff --json # JSON output includes extrassync extras --json
Structured JSON output for programmatic consumption:
skillshare sync extras --jsonsync --all -p
Project-mode --all now includes extras sync alongside skills.
Web UI
Visual Redesign
The web dashboard received a complete visual overhaul β replacing the hand-drawn aesthetic with a clean, minimal design:
- New design system β DM Sans typography, clean border-radius, streamlined color palette with proper dark mode support
- Table view with pagination β skills and search results offer a table view alongside card/grouped views, with client-side pagination
- Sticky search and filters β SkillsPage toolbar stays pinned at the top, with grouped view sticky headers
- Keyboard modifier shortcuts β press
?to see available shortcuts, with on-screen HUD overlay - Sync progress animation β visual feedback during sync operations
- Onboarding tour β step-by-step spotlight tour for first-time users
- Shared UI components β DialogShell, IconButton, Pagination, SegmentedControl for consistent interactions
Extras Page
New page at /extras in the web dashboard:
- List all extras with source path, file count, and per-target sync status
- Sync individual extras or all at once
- Add new extras via modal dialog (name + targets with path/mode)
- Remove extras from config
Dashboard Card
New stat card showing extras count, total files, and total targets with a link to the Extras page.
REST API
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/extras
| List extras with sync status |
| GET | /api/extras/diff
| Per-file diff (optional ?name=)
|
| POST | /api/extras
| Create new extra |
| POST | /api/extras/sync
| Sync extras |
| DELETE | /api/extras/{name}
| Remove extra |
Configuration
Global config (~/.config/skillshare/config.yaml)
extras:
- name: rules
targets:
- path: ~/.claude/rules
- path: ~/.cursor/rules
mode: copy
- name: prompts
targets:
- path: ~/.claude/promptsProject config (.skillshare/config.yaml)
extras:
- name: rules
targets:
- path: .claude/rulesSync modes
| Mode | Behavior |
|---|---|
merge (default)
| Per-file symlinks from target to source |
copy
| Per-file copies |
symlink
| Entire directory symlink |
Migration from v0.16.x
The extras directory layout changed from flat to nested. On first sync extras run, skillshare automatically migrates:
- Detects
configDir/<name>/matching a configured extra - Creates
configDir/extras/<name>/ - Moves all files to the new location
- Removes the old directory
The migration is idempotent β running it multiple times is safe. A warning is printed during migration.
Custom GitLab Domain Support
Also included from v0.16.15:
- JihuLab auto-detection β hosts containing
jihulab(e.g.,jihulab.com) are now auto-detected alongsidegitlabfor nested subgroup support gitlab_hostsconfig β declare self-managed GitLab hostnames so URLs are parsed with nested subgroup support:gitlab_hosts: - git.company.com - code.internal.io
SKILLSHARE_GITLAB_HOSTSenv var β comma-separated list for CI/CD pipelines without a config file; merged with config values- GitLab nested subgroup URL fix β URLs like
gitlab.com/group/subgroup/projectare now treated as the full repo path - HTTPS fallback fix β platform-aware HTTPS URL parsing no longer misroutes GitHub Enterprise and Gitea URLs
- Skill discovery in projects β
installnow skips known AI tool config directories (.claude/,.cursor/, etc.) during project scanning, preventing circular discovery - Sync collision message β
syncnow shows both duplicate skill names in collision warnings
Upgrade
skillshare upgrade
# or
brew upgrade skillshareNo manual steps required. Extras directories are auto-migrated on first use.
Changelog
- 773ce9b chore(ui): final cleanup β remove CSS stubs and compat shims
- 5aa7cb4 chore: update readme
- a8e2f9c docs(extras): document interactive TUI and --no-tui flag for extras list
- c6762bb docs(runbook): add runbook runner usage guide
- 8934e87 docs(runbook): document --steps and --from selective execution flags
- 81326ae docs(runbook): integrate runbook CLI into e2e skill and update atomgit runbook
- ba4f7c9 docs(runbook): migrate all 16 runbooks to typed assertion syntax
- 5dac1ca feat(config): add Extras field to ProjectConfig for project-mode extras
- 8f16a90 feat(config): add SKILLSHARE_GITLAB_HOSTS env var and cleanup
- 6ece5c3 feat(config): add extras directory migration from flat to nested layout
- 482778e feat(config): add extras name validation with reserved words and regex
- 2652920 feat(config): add extras source path derivation helpers
- a4d5261 feat(config): add gitlab_hosts for custom GitLab domain support
- cdf7263 feat(devcontainer): add runbook shortcut command
- 18ee110 feat(diff): add --extras and --all flags for extras diff
- 163548a feat(diff): integrate extras into diff TUI with separator and detail panel
- 4af609e feat(doctor): add extras source/target health checks
- 2a9ddb0 feat(extras): add TUI list item and delegate for extras list
- 990b4dc feat(extras): add TUI wizard for extras init, improve status display
- d756004 feat(extras): add extras reference docs, fix diff project mode, improve TUI
- a786c1f feat(extras): add init TUI wizard, collect command, and sync --json
- 947a5d3 feat(extras): add interactive TUI for extras list with browse, remove, sync, collect, and content viewer
- 405a2f9 feat(extras): add mode command for CLI, TUI, and Web UI
- 2826633 feat(install): auto-detect JihuLab hosts for nested subgroup support
- a80eadd feat(runbook): --fail-fast, verbose (-v/-vv), and --output flags
- e53ca07 feat(runbook): CLI entry with --report json, --dry-run, --no-tui flags
- 67ceed3 feat(runbook): JSON report writer
- ebab63a feat(runbook): add build lifecycle hook, verify all 17 runbooks
- 377aa0b feat(runbook): assertion matcher with negation and case-insensitive matching
- f919bfb feat(runbook): bash executor with stdout/stderr capture and timeout
- a988309 feat(runbook): enforce container-only execution with safety checks
- 2657974 feat(runbook): lifecycle hooks via --setup/--teardown and runbook.json
- 173c09d feat(runbook): markdown parser extracts steps, code blocks, and expected assertions
- 65fc6a0 feat(runbook): per-step timeout directive and env seeding from config
- a1ba7ea feat(runbook): plain text reporter for single and batch output
- a9053ee feat(runbook): regex (?m) default, heredoc-aware parser, remove set -e
- 9c2dcda feat(runbook): retry/depends directives, remove TUI, add skip reasons
- a4343df feat(runbook): runner engine wires parser, classifier, executor, and assertions
- b932dda feat(runbook): selective step execution with --steps and --from flags
- 1c23571 feat(runbook): session executor preserves shell variables across steps
- c848309 feat(runbook): step classifier categorizes auto/manual execution
- f97c67c feat(runbook): typed assertion engine with exit_code, regex, jq support
- f275435 feat(schema): add extras definition to config and project-config JSON schemas
- dae3f50 feat(server): add REST API endpoints for extras management
- acfbabd feat(skills): add ui-website-style skill with design system reference
- d8cc25a feat(status): show extras sync status in status output
- c02b918 feat(sync): add project mode support for sync extras and sync --all -p
- 0fcf6d1 feat(sync): update extras source path to extras// with auto-migration
- b2a9ebb feat(tools): scaffold runbook test runner with types
- 6903861 feat(ui): add Extras page, API client, and Dashboard card
- 92bf8b6 feat(ui): add copy-to-clipboard for skill paths
- cb8b5b5 feat(ui): add modifier keyboard shortcuts, HUD overlay, and sync progress animation
- be4c693 feat(ui): add step-by-step onboarding tour with spotlight overlay
- 99335cc feat(ui): add sticky group headers in SkillsPage grouped view
- d6cbfc8 feat(ui): add sticky search/filters toolbar on SkillsPage, clean up LogPage
- 3981bda feat(ui): add table view to SearchPage, fix Audit loading and alignment
- fff0711 feat(ui): add table view with pagination, virtualize grouped view, improve audit dialogs
- bcf72d5 feat(ui): apply oMLX button palette β dark primary, outline secondary
- e8a850d feat(ui): clean all pages β remove hand-drawn decorations
- 46265ae feat(ui): match oMLX style β dark sidebar active, clean borders, 8px btn radius
- 19a2720 feat(ui): redesign Select dropdown, add shared DialogShell/IconButton/Pagination/SegmentedControl
- 8f89913 feat(ui): rewrite CSS tokens β minimal palette, remove hand-drawn effects
- 06ca469 feat(ui): rewrite design tokens β radius, palette, clean CodeMirror theme
- cf92a22 feat(ui): simplify core components β Card, Button, Input, Badge
- ef4e51a feat(ui): simplify remaining components β remove hand-drawn styling
- 7b6f0e8 feat(ui): swap Google Fonts from Inter to DM Sans
- 04c669e feat(website): clean design system for docs pages and add mdproof blog post
- 18d54bd feat: implement extras init, list, and remove commands
- 7a6e787 fix(build): separate host and devcontainer binary output paths
- 0890fb3 fix(config): prevent env var gitlab_hosts from leaking into persisted config
- e589447 fix(devcontainer): resolve runbook paths against workspace root
- cc93c4f fix(extras): add y/N confirm prompt to remove, clean up empty dirs
- 5b224a1 fix(extras): remove unused width params, load fresh config in doRemove
- 9b0146a fix(extras): resolve lint warnings in extras list TUI
- 09ccd14 fix(extras): resolve tilde expansion, unify headers, add doctor target warnings
- e2a8c7d fix(install): platform-aware HTTPS fallback to preserve GHE subdir behavior
- 5369595 fix(install): skip target dotdirs during skill discovery
- bf9eaa5 fix(install): support GitLab nested subgroup URLs (#72)
- 7d4a6fd fix(runbook): address code review findings
- 06e9783 fix(runbook): hooks work in TUI mode, show status in plain reporter
- 314d6a3 fix(sync): show duplicate skill names in collision message, fix vertical spacing
- 43a6487 fix(test): enable per-runbook isolation in mdproof config
- 48f1d37 fix(test): improve extras runbooks with jq assertions, idempotency, and init cleanup
- 28d35e8 fix(ui): align CopyButton to design system, fix sidebar scroll, update lockfile
- bac2bc2 fix(ui): align GitSync, Search, Backup, Trash, AuditRules to design system
- d3b9890 fix(ui): align pages to design system β loading props, spacing, borders, click-to-toggle
- 6b2d947 fix(ui): allow Select dropdown to expand for full descriptions, improve TargetsPage filters
- dfd62ee fix(ui): compact TargetsPage card layout, remove version stat from dashboard
- d6616a7 fix(ui): improve SegmentedControl dark mode visibility, adjust sticky padding
- b4288ac fix(ui): redesign sidebar bottom bar with nav-consistent style
- 64a4c91 fix(ui): refine minimal redesign β dark mode B/W, link style, button polish
- 4c41443 fix(ui): refine sticky toolbar spacing, soften SegmentedControl and Input styles
- 095d076 fix(ui): remove all left-border stripes, fix modifier HUD bug, refine components
- bb6b3f5 fix(ui): replace useEffect with render-time state adjustment in SkillsTable
- 1e07a77 fix(ui): share copy button behavior
- ee38d34 refactor(diff): show extras by default, remove --extras/--all flags
- d97e5a7 refactor(extras): consolidate duplicate logic and fix sync --all --json output
- 4526b5a refactor(extras): extract buildExtrasListEntries for TUI reuse
- 9738e52 refactor(extras): extract remove helpers for TUI reuse
- 910a8d5 refactor(runbook): consolidate duplicate helpers and use status constants
- 478b4ee refactor(runbook): replace built-in runner with mdproof
- 3227400 refactor(ui): extract PageHeader component, tone down Badge and StatusBadge
- fb34809 refactor(ui): rename HandButtonβButton, HandInputβInput + remove deprecated aliases
- 7ade470 refactor(ui): rename oMLX references to skillshare-inspired
- 336bdb9 test(runbook): integration tests with self-contained and real runbook parsing
Notes
- Full changelog: https://github.com/runkids/skillshare/blob/main/CHANGELOG.md
- Security model docs: https://skillshare.runkids.cc/docs/guides/security
- Command reference: https://skillshare.runkids.cc/docs/commands