Changelog
All notable changes to skillshare are documented here. For the full commit history, see GitHub Releases.
[0.19.1] - 2026-04-13
Bug Fixes
- Structured output no longer corrupted by update notices —
--json,-j, and--format json/sarif/markdownmodes could emit a trailing human-readable update notification into stdout, producing invalid JSON for downstream consumers. The update check is now skipped entirely in structured-output modes, and the notification itself writes to stderr as a safety net. Refs: #129
[0.19.0] - 2026-04-11
New Features
Agent Management
Agents are now a first-class resource type alongside skills. You can install, sync, audit, and manage agent files (.md) across agent-capable targets (Claude, Cursor, OpenCode, Augment) with the same workflow as skills.
-
Agents source directory — agents live in
~/.config/skillshare/agents/(or.skillshare/agents/in project mode).skillshare initcreates the directory automatically, andagents_sourceis a new config field that can be customizedskillshare init # creates skills/ and agents/
skillshare init -p # same for project mode -
Positional kind filter — most commands accept an
agentskeyword to scope the operation to agents only. Without it, commands operate on skills (existing behavior is unchanged)skillshare sync agents # sync agents only
skillshare sync --all # sync skills + agents + extras
skillshare list agents # list installed agents
skillshare check agents # detect drift on agent repos
skillshare update agents --all # update every agent
skillshare audit agents # scan agents for security issues
skillshare uninstall agents foo # uninstall a single agent
skillshare enable foo --kind agent
skillshare disable foo --kind agent -
Install agents from repos —
installauto-detects agents in three layouts:agents/convention subdirectory- mixed-kind repos with both
SKILL.mdandagents/ - pure-agent repos (root
.mdfiles, noSKILL.md)
skillshare install github.com/team/agents # auto-detect
skillshare install github.com/team/repo --kind agent # force agent mode
skillshare install github.com/team/repo --agent cr # specific agentsConventional files (
README.md,LICENSE.md,CHANGELOG.md) are automatically excluded -
Tracked agent repos — agents can be installed with
--trackfor git-pull updates, including nested discovery.check,update,doctor, anduninstallall recognise tracked agent repos, and the--group/-Gflag filters by repo group -
Agent sync modes — merge (default, per-file symlink), symlink (whole directory), and copy are all supported.
skillshare sync agentsskips targets that don't declare anagents:path and prints a warning -
.agentignoresupport — agents can be excluded via.agentignoreand.agentignore.localusing the same gitignore-style patterns as.skillignore. The Web UI Config page now has a dedicated.agentignoretab -
Agent audit —
skillshare auditscans agent files individually against the full audit rule set, with Skills/Agents tab switching in both the TUI and Web UI. Audit results carry akindfield so tooling can filter by resource type -
Agent backup and restore — sync automatically backs up agents before applying changes, in both global and project mode. The backup TUI and trash TUI tag agents with an
[A]badge and route restores to the correct source directory -
Project-mode agent support — every agent command works in project mode with
-p. Agents are reconciled alongside skills into.skillshare/ -
JSON output for agents —
install --jsonandupdate --jsonnow emit agent-aware payloads and apply the same audit block-threshold gate as skills. Useful for scripted agent workflowsskillshare update agents --json --audit-threshold high -
Kind badges — TUI and Web UI surface
[S]/[A]badges throughout (list, diff, audit, trash, backup, detail, update, targets pages) so you can tell at a glance what kind of resource you're looking at
Unified Web UI Resources
-
/resourcesroute — the old/skillspage is now/resources, with Skills and Agents tabs. Tab state persists to localStorage, and the underline tab style follows the active theme (playful mode gets wobble borders) -
Targets page redesign — equal Skills and Agents sections, with a modal picker for adding targets. Filter Studio links include a
?kind=param so you jump directly to the right context -
Update page redesign — a new three-phase flow (selecting → updating → done) with skills/agents tabs, group-based sorting, and status cards. EventSource streaming is properly cleaned up on page change
-
Filter Studio agent support — agent filters can be edited via
PATCH /api/targets/:name(agent_include,agent_exclude,agent_mode) and via the CLI through new flags onskillshare target <name>:skillshare target claude --add-agent-include "team-*"
skillshare target claude --remove-agent-include "team-*"
skillshare target claude --agent-mode copy # merge | symlink | copyThe UI Filter Studio is a single-context view driven by
?kind=skill|agent -
Audit cache — audit results are now cached with React Query and invalidated on mutation. The audit card icon colour follows the max severity, and the count no longer mixes agent totals with finding counts
-
Collect page scope switcher — a new segmented control lets you collect skills or agents from targets
Theme System
internal/themepackage — unified light/dark terminal palette with WCAG-AA-compliant light colours and softened dark primary. Resolution order:NO_COLOR>SKILLSHARE_THEME> OSC 11 terminal probe > dark fallback. All TUIs, list output, audit output, and plain CLI output now route through the themeSKILLSHARE_THEME=light skillshare list
SKILLSHARE_THEME=dark skillshare auditskillshare doctorincludes a theme check to help debug unreadable colours
Install & TUI Polish
-
Explicit
SKILL.mdURLs resolve to one skill — pasting a directblob/.../SKILL.mdURL now installs only that skill, bypassing the orchestrator pack prompt. Previously, the URL would trigger the full multi-select picker even though the intent was clearskillshare install https://github.com/team/repo/blob/main/frontend/tdd/SKILL.mdRefs: #124
-
Radio checklist follows the cursor — the single-select TUI (used for orchestrator selection, branch selection, and similar flows) now auto-selects the focused row. No more confusing empty-selection state — pressing Enter always confirms the item your cursor is on
-
Diff TUI — single-line items with group headers instead of the old verbose-per-item layout. Agent diffs are shown with an
[A]badge -
List TUI — entries are now grouped by tracked repo root and local top directory, with a new
k:kindfilter tag for quick agent/skill filtering inside the fuzzy filter
Centralized Metadata Store
.metadata.jsonreplaces sidecar files andregistry.yaml— installation metadata is now stored in a single atomic file per source (~/.config/skillshare/skills/.metadata.json). This fixes long-standing issues with grouped skill collisions (e.g. two skills both nameddevin different folders) where the old basename-keyed registry would mix them up- Automatic migration — the first load after upgrade reads any existing
registry.yamland per-skill.skillshare-meta.jsonsidecars, merges them into.metadata.json, and cleans up the old files. Idempotent — safe to run repeatedly - Full-path keys — lookups use the full source-relative path, so nested skills never collide
- No user action required; existing installs continue to work
- Automatic migration — the first load after upgrade reads any existing
Bug Fixes
- Sync extras no longer flood when
agentstarget overlaps — targets that declare an extras entry calledagentsare now skipped automatically when agent sync is active, preventing duplicate file writes - Nested agent discovery —
check agentsnow uses the recursive discovery engine, so agents in sub-folders (e.g.demo/code-reviewer.md) are detected correctly - Doctor drift count excludes disabled agents — agents disabled via
.agentignoreno longer count toward the drift total reported byskillshare doctor - Audit card mixes counts — the Web UI audit card no longer mixes agent counts with finding counts, and excludes
_cross-skillfrom the card total (shown separately) - Audit scans disabled agents too — the audit scan walks every agent file regardless of
.agentignorestate, so hidden agents still get checked - List TUI tab bar clipping — the tab bar no longer gets cut off in the split-detail layout on narrow terminals
- Sync extras indent — removed the stray space between the checkmark and the path in
syncextras output; summary headers are now consistent across skills, agents, and extras - UI skill detail agent mode — the detail page hides the Files section for agents (single-file resources), remembers the selected tab via localStorage, and shows the correct folder-view labels
- Sync page layout — the stats row and ignored-skills grouping are now easier to scan
- Button warning variant — the shared
Buttoncomponent now supports awarningvariant that was already referenced by several pages - Check progress bar pop-in — removed the loading progress bar that caused layout shift on the Skills page
- Tracked repo check status — the propagated check status is now applied to every item within the repo, not just the root
- Target name colouring in doctor — only the status word is coloured in
doctortarget output, not the full line
Breaking Changes
audit --allflag removed — use the positional kind filter instead:The oldskillshare audit # skills (default, unchanged)
skillshare audit agents # agents only--allflag is gone because audit now runs per kind and the Web UI has dedicated tabs
[0.18.9] - 2026-04-07
New Features
- Relative symlinks in project mode —
skillshare sync -pnow creates relative symlinks (e.g.,../../.skillshare/skills/my-skill) instead of absolute paths. This makes the project directory portable — rename it, move it, or clone it on another machine and all skill symlinks continue to work. Global mode continues to use absolute paths. Existing absolute symlinks are automatically upgraded to relative on the next sync
Bug Fixes
- Status version detection —
skillshare statusno longer reports! Skill: not found or missing versionwhen the version is stored undermetadata.versionin the SKILL.md frontmatter. Previously, thestatuscommand used its own local parser that only checked for a top-levelversion:key, whiledoctor(fixed in v0.18.7) andupgradealready used the correct shared parser
[0.18.8] - 2026-04-06
Bug Fixes
- Sync no longer deletes registry entries for installed skills — running
skillshare sync(or project-modesync -p) would silently removeregistry.yamlentries for skills whose source files were not present on disk. This meant that installing a skill and then syncing could erase the installation record entirely. Sync now leaves the registry untouched — onlyinstallanduninstallmanage registry entries
[0.18.7] - 2026-04-04
New Features
Folder-Level Target Display & Bulk Editing
-
Folder target aggregation — the Skills page grouped view now shows aggregated target info on each folder row. If all skills share the same target, it shows that target; mixed targets show the union with a warning badge;
Allis shown when no targets are set- Compact display: folders with 4+ targets show
N targetswith full list in tooltip
- Compact display: folders with 4+ targets show
-
Bulk set target — right-click any folder to set or remove the target for all skills in that subtree at once
Right-click folder → Available in... → claudeWrites
metadata.targetsto every SKILL.md in the folder. SelectingAllremoves the field. Disabled skills are skipped -
Single skill target editing — right-click any skill in grouped or grid view, or use the inline
Available indropdown in table view, to change which targets receive that skill
Right-Click Context Menu
-
Context menu on all views — right-click skills in grouped, grid, or table view for quick actions:
- Available in... — submenu to set target (hover-expand with 180ms intent delay)
- View Detail — navigate to skill detail page
- Enable / Disable — toggle skill visibility
- Uninstall — with confirmation dialog
-
Folder context menu — right-click folders in grouped view for
Folder available in...(batch target) — only target actions, no uninstall -
Submenu pattern — top-level items with sub-options expand on hover. Future actions (e.g. Move, Rename) can be added as flat items alongside
Table View Improvements
- Inline target selector — the table now has an
Available incolumn with an inline dropdown for one-click target switching — no context menu needed - Actions column —
⋯button opens a flat menu with View Detail, Enable/Disable, and Uninstall - Simplified layout — reduced from 7 columns to 5 by merging Path and Source into the Name cell. Path shows as a subtitle when different from the name; source shows as a clickable globe icon linking to the repo
- Persistent page size — the selected page size (10/25/50) is remembered across sessions
UX Polish
- Right-click tip banner — a one-time dismissible tip appears on first visit, explaining that right-click is available for actions. Styled with playful theme support (wobble borders, paper-warm background, slight tilt)
- Optimistic updates — all mutations (set target, enable/disable, uninstall) update the UI instantly with automatic rollback on error
- Active item highlight — when a context menu is open, the targeted skill or folder gets a hover-matching highlight
Bug Fixes
-
Config page dashed border clipping — in playful theme, the Structure panel's dashed borders were cut off at the right edge because the panel wrapper kept
overflow-hiddenafter expanding. Now usesoverflow-visiblewhen expanded -
Tracked repos in project-mode dashboard — the Web UI dashboard now shows tracked repositories when running in project mode (
skillshare ui -p), with Update and Uninstall actions -
Nested tracked repo update and uninstall — repos installed with a nested path (e.g.
org/_team-skills) can now be updated and uninstalled from both the CLI and Web UI. Previously, the server failed to resolve nested repo paths for these operations -
Project-mode uninstall cleans correct
.gitignore— uninstalling a tracked repo in project mode now removes entries from.skillshare/.gitignoreinstead of the global source.gitignore. Previously, stale ignore rules were left behind -
Registry prune no longer affects sibling repos — uninstalling a nested tracked repo (e.g.
org/_team-skills) no longer accidentally removes registry entries belonging to a sibling with the same basename (e.g.dept/_team-skills) -
Nested trash lifecycle — trash, restore, cleanup, and listing now work correctly for nested tracked repo names. Parent directories are created on restore and cleaned up after expiry
-
Dashboard tracked repo row polish — status indicators (
clean/modified) moved next to the repo name as compact badges. Action buttons use a smallerxssize to reduce visual weight -
Bulk target folder matching — setting targets on a folder with a trailing slash (e.g.
frontend/) no longer silently skips all skills. The server now normalizes folder paths before matching -
Doctor version detection —
skillshare doctorno longer reports! Skill: missing versionwhen the version is stored undermetadata.versionin the SKILL.md frontmatter. Previously, the inline parser only checked for a top-levelversion:key -
Target display on Skills page — the Skills page now correctly shows saved targets for each skill. Previously, the API did not parse SKILL.md frontmatter, so targets always appeared as
Alleven after being set -
Target editing respects tracked repos — setting targets via the context menu or batch folder action now skips tracked-repo skills. Previously, writing to SKILL.md inside a tracked repo would make the repo dirty and block future updates. Audit hash integrity is also preserved after target edits
-
Uninstall Repo from context menu — right-clicking a tracked-repo skill now shows
Uninstall Repoinstead of the individualUninstallaction (which would always fail with an error) -
Enable/disable with glob patterns — enabling a skill that was disabled by a glob or directory pattern in
.skillignore(or.skillignore.local) now correctly returns an error with guidance, instead of silently showing a success toast while the skill stays disabled -
Disabled tracked skills stay in Tracked view — disabling a tracked-repo skill via
.skillignoreno longer removes it from the Tracked tab. The discovery engine now correctly preserves theisInRepoflag for all disabled skills
[0.18.6] - 2026-04-01
Bug Fixes
-
UI batch uninstall now removes nested skill registry entries — previously, uninstalling grouped skills (e.g.
frontend/vue/vue-best-practices) from the Web UI left stale entries inregistry.yamlbecause the flat name (__) didn't match the stored path name (/). Uninstall now tracks the exact resolved path for accurate cleanup -
Sync prunes stale registry entries —
skillshare syncand the Web UI Sync page now automatically removeregistry.yamlentries for skills that no longer exist in the source directory. Covers manual deletions, not justuninstall. Skills hidden by.skillignoreare preserved -
Uninstall page search works as substring match — typing
mattin the filter box now matchesmattpocock/tdd(substring search). Previously, only glob patterns like*matt*worked. Glob syntax (*,?) still works when present -
Uninstall page shows path format — the confirmation dialog and result summary now display
frontend/vue/vue-best-practicesinstead offrontend__vue__vue-best-practices -
Updates page removes redundant status line — the "0 repo(s) and 20 skill(s) already up to date" line no longer appears when everything is already current (the empty state already says this)
[0.18.5] - 2026-04-01
New Features
--helpfor all commands — every command now supports--help/-hto show usage info, flags, and examples. Previously, commands likepush,pull,sync,status,collect,doctor, anduiwould execute instead of showing help when--helpwas passedskillshare push --help # shows usage instead of pushing
skillshare sync -h # shows flags and examples
skillshare ui --help # shows port/host options
[0.18.4] - 2026-03-31
New Features
Branch Support (--branch / -b)
-
Install from a specific branch — new
--branch/-bflag lets you clone from any branch instead of the remote default:skillshare install github.com/team/skills --branch develop --all
skillshare install github.com/team/skills --track --branch frontend- Works with both tracked repos (
--track) and regular skill installs - Branch is persisted in metadata —
updateandcheckautomatically use the correct branch - Same repo on different branches: use
--nameto avoid collisions:skillshare install github.com/team/skills --track --branch frontend --name team-frontend
skillshare install github.com/team/skills --track --branch backend --name team-backend - Supported in project mode (
-p) and config-driven rebuild (skillshare installwith no args) registry.yamlstores the branch for cross-device reproducibility
- Works with both tracked repos (
-
Branch in Web UI — the Install form shows a Branch input field (inline with Source) when a git source is detected. Skills page shows a branch badge on cards, and the Skill Detail page includes branch in the metadata section
-
Branch in CLI list —
skillshare listdetail panel shows the tracked branch when non-default -
Branch-aware check —
skillshare checkcompares against the correct remote branch ref, not just HEAD. JSON output includes abranchfield for tracked repos
Sync Accuracy
-
Accurate skill counts on Targets page — the expected skill count now reflects what sync actually resolves (after name collision and validation filtering), instead of the raw source count. Previously, targets using
standardnaming could show39032/64075 sharedwhen all resolved skills were actually in sync -
Skipped skill visibility — when skills are excluded by naming validation or collisions, the Targets page and Sync page now show a summary (e.g. "12345 skill(s) skipped, 456 name collision(s)") instead of silently dropping them. Suggests switching to
flatnaming to include all skills
Target Naming Mode
-
target_namingconfig option — choose how synced skill directories are named in targets. Set globally or per-target:target_naming: standard # use SKILL.md name as directory name
targets:
claude:
skills:
target_naming: flat # override: keep flattened prefix (default)flat(default) — nested skills likefrontend/devbecomefrontend__devin targetsstandard— uses the SKILL.mdnamefield directly (e.g.dev), following the Agent Skills specification- Standard mode validates that SKILL.md names match their directory name, warns and skips invalid skills
- Name collisions (e.g. two skills both named
dev) are detected and both are skipped with a warning - Switching from
flattostandardautomatically migrates existing managed entries (symlinks and copies are renamed in place) - If a local skill already occupies the bare name, the legacy flat entry is preserved with a warning
target_namingis ignored insymlinkmode (the entire source directory is linked)
-
Collision output redesigned — name conflict warnings are now deduplicated across targets and displayed as a compact summary instead of repeating each collision per target
Folder Tree View (Web UI)
-
Skills folder tree — the second layout on
/skillsis now a true folder tree with multi-level expand/collapse, matching your actual directory structure from--into:- Click any folder to expand/collapse its children
- Expand All / Collapse All buttons in the toolbar
- Sticky folder header — scrolling through a long folder keeps the folder name pinned at the top; click it to jump back
- Search-aware — filtering or searching auto-expands all matching folders; clearing restores your previous collapse state
- Hover tooltip on skill rows shows path, source, and install date (follows cursor, 1.5s delay)
- Collapse state persists across page reloads via localStorage
- Virtualized rendering handles 10,000+ skills with no performance impact
-
Skill detail button layout — the Enable/Update/Uninstall buttons no longer wrap awkwardly on narrow screens
Agent Target Paths
- Agent-specific paths — targets that support agents (Claude, Cursor, OpenCode, Augment) now declare separate
agents:paths in their configuration. This is groundwork for upcoming agent sync support
GitHub Actions
setup-skillshareaction — install skillshare in CI with a single step:- uses: runkids/setup-skillshare@v1
Bug Fixes
- CLI sync output no longer floods terminal — targets with thousands of naming validation warnings (common with
standardnaming and large skill sets) now print a compact summary instead of one line per skipped skill - Target dropdown lag removed — changing sync mode or target naming in the Web UI Targets page now updates instantly via optimistic cache update, instead of waiting 2 seconds for the API round-trip
Performance
- Cached branch lookups —
skillshare listcachesgitbranch queries per tracked repo, so listing 500 skills from the same repo runs 1 git command instead of 500
[0.18.3] - 2026-03-29
New Features
Enable / Disable Skills
-
skillshare enable/skillshare disable— temporarily hide skills from sync without uninstalling them. Adds or removes patterns in.skillignore:skillshare disable draft-* # hide from sync
skillshare enable draft-* # restore
skillshare disable my-skill -p # project mode
skillshare disable my-skill -n # dry-run preview -
TUI toggle — press
Einskillshare listto toggle the selected skill's enabled/disabled state. The change is written immediately without leaving the TUI. Disabled skills show a red disabled badge in the detail panel and a[disabled]suffix in compact view -
Web UI toggle — the Skill Detail page now shows an Enable/Disable button. The REST API exposes
POST /api/skills/{name}/enableandPOST /api/skills/{name}/disableendpoints
Target Config — Skills Sub-Key
- Per-resource-type configuration — target configs now support a
skillssub-key with its ownpath,mode,include, andexcludesettings. Existing flat-field configs are auto-migrated on first load — no manual editing needed:targets:
claude:
skills:
path: ~/.claude/skills
mode: merge
Upgrade Improvements
- Auto-sudo for protected paths —
skillshare upgradenow auto-detects when the binary is in a write-protected directory (e.g.,/usr/local/bin) and transparently re-executes withsudo(#105)
Bug Fixes
- Fixed
diffshowing skills with unsupportedtargetsvalues (e.g.,targets: ["*"]) as "source only" pending items — these skills are now correctly filtered out, matching the behavior ofsync - Fixed
collectignoring inherited sync mode when a target's mode was set at the global level — the command now resolves the effective mode before deciding whether to scan for local skills - Fixed
collectusing a stale manifest after switching a target fromcopytomergemode - Fixed
pullinfo message referencinggit stashinstead ofgit stash -u - Fixed config migration writing directly to the config file — now uses atomic write-to-temp + rename to prevent corruption on disk errors
[0.18.2] - 2026-03-28
New Features
Update Page Improvements
-
Sticky progress bar — the Update page now shows a real-time progress bar during batch updates with percentage, completed/total count, and ETA. The bar stays pinned to the top while scrolling through the item list
-
Auto-scroll to active item — during batch updates, the page automatically scrolls to the item currently being updated so you can follow the progress without manual scrolling
-
Purge stale skills — when a skill fails to update because its subdirectory no longer exists in the repository, a Purge button appears instead of Force Retry. Clicking it removes the stale skill from your source directory
Analyze & Install UX
-
Install picker improvements — the skill picker modal in Install and Analyze pages now auto-focuses the search field, shows clearer skill descriptions, and handles keyboard navigation better
-
Tooltip enhancements — tooltips across the dashboard now follow the cursor and stay within viewport bounds
Bug Fixes
- Fixed analyze page crash when a target has no skills (null targets array from API)
- Fixed redundant path line showing in the skill detail dialog on the Analyze page
- Fixed install source field not clearing after a successful installation
[0.18.1] - 2026-03-27
New Features
Analyze — Filter & Token Budget
-
--filterflag — filter skills by name or group path with case-insensitive substring matching. Works across all output modes:skillshare analyze claude --json --filter frontend # JSON with filtered_summary
skillshare analyze --filter marketing # TUI with pre-populated filter -
Dynamic token subtotals — the TUI stats line and Web UI now show always-loaded, on-demand, and total token sums for the current filtered set. In the TUI, the format changes to
5/50 skillswhen a filter is active -
Web UI filtered summary bar — when searching or filtering on the Analyze page, a summary bar appears above the table with token counts per category. The bar slides in/out with a smooth animation
-
JSON
filtered_summary— when--filteris used with--json, the output includesfilter,matched_count,total_count, and afiltered_summaryobject withalways_loaded,on_demand, andtotaltoken counts
Registry Location
- Registry moved to source directory —
registry.yamlnow lives at~/.config/skillshare/skills/registry.yaml(inside the source directory) instead of~/.config/skillshare/registry.yaml. This meansgit syncautomatically includes the registry, so tracked skill metadata is preserved across machines. Migration is automatic on first run (#103)
Bug Fixes
init --remoteskips skill prompt — wheninit --remoteclones a repo that already contains skills, the interactive "choose skills to install" prompt is now skipped since the remote already defines the skill set (#102)
Improvements
- Analyze Web UI polish — improved empty state with icon and helper text, fixed table height to prevent layout jumps when filtering, lint filter badge now shows readable rule names (e.g., "No Trigger Phrase" instead of
no-trigger-phrase)
[0.18.0] - 2026-03-26
New Features
Analyze Command — Context Window & Skill Quality
-
skillshare analyze— new command that calculates context window token usage for each target's skills. Shows two layers of cost: "always loaded" (name + description, loaded every request) and "on-demand" (skill body, loaded when triggered). Token estimates usechars / 4:skillshare analyze # interactive TUI
skillshare analyze claude # single target (auto-verbose)
skillshare analyze --verbose # top 10 largest descriptions
skillshare analyze --json # machine-readable output
skillshare analyze -p # project mode -
Skill quality lint —
analyzeruns 7 built-in lint rules against every skill, checking SKILL.md structure and description quality:- Errors: missing
name, missingdescription, empty body - Warnings: description too short (<50 chars), too long (>1024 chars), near limit (900–1024), missing trigger phrases (e.g., "Use when…")
Lint issues appear in the TUI (✗ for errors, ⚠ for warnings) and in
--jsonoutput aslint_issuesper skill - Errors: missing
-
Interactive TUI — full-screen bubbletea TUI with left skill list and right detail panel. Features include:
- Color-coded dots (red/yellow/green by percentile) indicating relative token cost
- Tab/Shift+Tab to switch between targets; identical targets are merged into groups
/to filter skills,sto cycle sort (tokens↓ → tokens↑ → name A→Z → Z→A)- Quality section in detail panel showing all lint findings with icons
-
--no-tuiflag — disable the interactive TUI and print plain text summary
Web UI — Analyze Page
- Analyze dashboard — new page in the web dashboard showing per-target token usage with a chart, skill table with token breakdown, and lint issue indicators
- Skill detail token breakdown — the Skill Detail page now shows always-loaded and on-demand token counts
GET /api/analyzeendpoint — REST API returning per-target context analysis with lint issues, skill paths, tracked status, and descriptions
Web UI — Update Page Improvements
- Sticky search filter — the search input on the Update page now sticks to the top when scrolling, making it easy to filter skills in long lists
- SplitButton actions — Update page action buttons replaced with a SplitButton component for cleaner interaction
Improvements
- Unified dialog styling — all modal dialogs (Confirm, File Viewer, Hub Manager, Keyboard Shortcuts, Skill Picker, Sync Preview, Update) now share consistent styling via a shared
DialogShellcomponent
[0.17.11] - 2026-03-25
New Features
Extras — Flatten Option
-
flattenfor extras targets — whenflatten: trueis set on an extras target, all files from subdirectories are synced directly into the target root instead of preserving the directory structure. This is useful for AI tools (e.g., Claude Code's/agents) that only discover files at the top level:extras:
- name: agents
targets:
- path: ~/.claude/agents
flatten: true # source/curriculum/tactician.md → target/tactician.md -
--flattenflag forextras init— enable flatten when creating a new extra:skillshare extras init agents --target ~/.claude/agents --flatten -
--flatten/--no-flattenforextras mode— toggle flatten on existing targets:skillshare extras agents --flatten
skillshare extras agents --no-flatten -
Flatten in TUI wizard — the
extras initinteractive wizard now includes a "Flatten files into target root? (y/N)" step after mode selection (skipped for symlink mode) -
Filename collision handling — when flatten causes files from different subdirectories to share the same name (e.g.,
team-a/agent.mdandteam-b/agent.md), the first file wins (sorted alphabetically) and subsequent collisions are skipped with a warning -
Fflatten toggle in TUI — pressFin the extras list TUI to toggle flatten on/off for a target. Single-target extras toggle directly; multi-target extras show a target picker first
Web UI — Flatten Support
- Flatten checkbox — the Extras page shows a flatten checkbox per target, both when creating extras and on existing targets. Disabled when mode is symlink
- Config editor validation — the YAML config editor warns when
flatten: trueis combined withmode: symlink - Target name field docs — clicking a target name in the config editor (both
name: claudeand short-form- agents) now shows the correct "target name" documentation instead of unrelated field docs
[0.17.10] - 2026-03-24
New Features
- Update notification in Web UI — a dialog appears on first visit when a newer CLI or skill version is available. Shows current and latest versions with a copyable
skillshare upgradecommand. Dismissed once per browser session
Bug Fixes
- Skill cards equal height — skill cards on the Skills page now stretch to equal height within each row
- Tour step target fix — the skill-filters tour step now correctly highlights its target element
[0.17.9] - 2026-03-20
New Features
- Force toggle on Extras page — a new Force button in the Extras page header lets you overwrite existing files when the sync mode has changed. Hover for a tooltip explaining what it does. Previously, skipped files could only be force-synced via the CLI (
skillshare sync extras --force)
Bug Fixes
- Config page assistant panel now scrollable — the right-side Structure/Diff panel now has a fixed 500px content area matching the editor height, enabling vertical scrolling when the YAML structure is long
- Removed false "Unknown target" warnings — the config editor no longer flags custom target names as unknown. Target names are user-defined and freely configurable — any name is valid
- Audit rules assistant panel scrollable — same fixed-height scrolling fix applied to the Audit Rules page's assistant panel
- Extras sync API response key — fixed the JSON response key from
resultstoextras, which prevented the Extras page from displaying sync results
Improvements
- Richer
targetsfield docs — thetargetsfield documentation example now shows all sub-fields (path,mode,include,exclude) with multiple targets - Filter Studio virtual scrolling — the skill preview list now uses virtual scrolling for smooth performance with large skill collections
- Force auto-resets after sync — the Force option on both the Sync and Extras pages automatically disables after a successful sync, preventing accidental overwrites on subsequent runs
- Smarter skip toast — when extras files are skipped, the toast suggests "enable Force to override" instead of a CLI command. If Force is already enabled, the hint is omitted
[0.17.8] - 2026-03-19
New Features
Extras — Configurable Source Paths
-
Custom extras source directory — extras source paths are now configurable instead of hardcoded. Add
extras_sourcetoconfig.yamlto set a global default, or use per-extrasourcefor individual overrides:extras_source: ~/my-extras # all extras default to here
extras:
- name: rules
source: ~/company-shared/rules # this one overrides extras_source
targets:
- path: ~/.claude/rules
- name: commands # uses extras_source (~/my-extras/commands/)
targets:
- path: ~/.cursor/commandsResolution priority: per-extra
source>extras_source> default (~/.config/skillshare/extras/<name>/) -
--sourceflag forextras init— specify a custom source directory when creating an extra:skillshare extras init rules --target ~/.claude/rules --source ~/company-shared/rules -
Source input in TUI wizard — the
extras initinteractive wizard now includes a source directory step between name and target input. Leave empty to use the default -
extras sourcecommand — show or set the globalextras_sourcedirectory from the CLI instead of editingconfig.yamlmanually:skillshare extras source # show current value
skillshare extras source ~/company-shared/extras # set new value -
--forceflag forextras init— overwrite an existing extra without needing toextras removefirst:skillshare extras init rules --target ~/.cursor/rules --force -
--sourcerejected in project mode —extras init --sourcenow returns a clear error in project mode instead of silently ignoring the flag. Project mode always uses.skillshare/extras/<name>/ -
source_typein JSON output —extras list --jsonandGET /api/extrasnow include asource_typefield (per-extra,extras_source, ordefault) indicating which level resolved the source path
Web UI — Extras Source
- Source type badge — the Extras page shows a
(per-extra)or(extras_source)badge next to non-default source paths - Source input in Add Extra modal — optional "Source path" field when creating extras from the dashboard
- API accepts
sourcefield —POST /api/extrasnow accepts an optionalsourcefield in the request body
Web UI — Config Editor Assistant Panel
- Context-aware assistant panel — the Config page now has a right-side panel that shows relevant information as you edit
config.yaml:- Field docs — move your cursor to any field and see its description, type, allowed values, and an example snippet. Covers all 28+ config fields (source, mode, targets, extras, audit, hub, log, tui, gitlab_hosts, and sub-fields)
- Structure tree — visual outline of your YAML structure with line numbers. Click any node to jump to that line in the editor
- Real-time validation — inline error markers for YAML syntax errors. Schema validation warns about unknown target names (with typo suggestions), invalid sync modes, and invalid audit settings
- Diff preview — see what changed since last save, with colored add/remove lines. Includes a "Revert All" button to reset to the last saved version
- The panel auto-switches between views by priority (errors → field docs → structure), or lock to Structure/Diff via the bottom bar
- Collapse the panel with the toggle button or
Cmd+B; save withCmd+S
- Empty config guide — when the editor is empty, the panel shows all available top-level fields as a quick reference
.skillignorepanel — the.skillignoretab shows a simplified panel with change count and the list of currently ignored skills (from all sources, including tracked repos)
Web UI — Audit Rules Assistant Panel
- YAML editor assistant panel — the Audit Rules page's YAML editor now has the same assistant panel as the Config page:
- Field docs — cursor-aware documentation for all audit rule fields (id, severity, pattern, message, regex, exclude, enabled) with allowed values and examples
- Regex tester — move your cursor to a
regex:field and the panel auto-switches to an inline regex tester. Paste test lines and see match results instantly with highlighted matches. Supports(?i)flag conversion from Go to JavaScript - Real-time validation — warns about invalid severity values, uncompilable regex patterns (with Go-specific syntax detection), and YAML syntax errors
- Structure tree + Diff preview — same as Config editor
- Three bottom-bar locks: Structure / Diff / Test
- Save button in header — the Save button is now in the page header (top-right) for better visibility
Bug Fixes
.skillignoresave no longer shows sync preview banner — the "Preview Sync" prompt after save is now only shown forconfig.yamlchanges, not.skillignore- Tracked repo ignores visible without root
.skillignore— previously, if the root.skillignorefile didn't exist, the API returned no ignore stats at all, hiding tracked repos' own.skillignoreentries. Now always reports all ignored skills regardless of whether a root file exists - Dirty state guard on tab switch — switching between
config.yamland.skillignoretabs with unsaved changes now shows a confirmation dialog instead of silently discarding edits
[0.17.7] - 2026-03-19
New Features
Web UI — Uninstall Skills Page
- Batch uninstall from the dashboard — a new "Uninstall Skills" page lets you remove multiple skills at once with filtering and multi-select. Filter by group directory, glob pattern (
*react*,frontend/*), or type (Tracked / GitHub / Local), then check the skills you want to remove and confirm:- Group dropdown narrows to a specific directory
- Glob pattern input with real-time matching (supports
*and?) - Type filter tabs with counts (matching the Skills page style)
- Select All / Deselect All for the current filtered view
- Tracked repos auto-escalate — selecting any skill inside a tracked repo selects the entire repo, with a force option for uncommitted changes
- Results show per-item success/failure with a "Run sync" reminder
- Batch uninstall API —
POST /api/uninstall/batchaccepts multiple skill names in a single request with skip-and-continue semantics. Includes registry cleanup, config reconciliation, and.gitignorebatch removal — matching the CLI's behavior
TUI — Target Remove Action
- Remove targets with
Rkey — the target list TUI (skillshare list --targets) now supports pressingRto remove a target from your config
Bug Fixes
- Sidebar no longer shifts on long skill lists — fixed a layout issue where scrolling to the bottom of the Skills page caused the sidebar to shift horizontally
[0.17.6] - 2026-03-19
Bug Fixes
- Sync auto-creates missing target directories with notification — v0.17.5 introduced a strict check that blocked sync when a target directory didn't exist (e.g.,
~/.claude/skillson a fresh Claude Code install). This prevented first-time users from syncing without manually creating directories (#87). Sync now auto-creates missing directories and shows what it did:Dry-run mode previews which directories would be created without actually creating them✓ claude: merged (99 linked, 0 local, 0 updated, 0 pruned)
ℹ Created target directory: ~/.claude/skills skillshare initcreates target directories — wheninitdetects an installed CLI tool (e.g.,~/.claude/exists) but the skills subdirectory is missing, it now creates it automatically instead of leaving it as "not initialized"
Web UI
- Sync Preview shows directory creation — the Config → Preview Sync modal and the Sync page now display a "directory created" or "directory will be created" badge per target when a target directory is auto-created
- Sync Preview stays open after sync — the Config → Preview Sync → Sync Now flow now shows sync results in the modal with a "Sync Complete" banner instead of immediately closing. This gives you time to review what changed before dismissing
[0.17.5] - 2026-03-18
New Features
Config Save Validation
- Semantic validation on config save —
PUT /api/confignow validates config semantics before writing, not just YAML syntax. Invalid configs return HTTP 400 with a descriptive error instead of saving silently and failing at sync time:- Source path must exist and be a directory
- Sync mode must be
merge,symlink, orcopy(global and per-target) - Target paths must exist and be directories
- CLI validation before sync —
skillshare syncvalidates config before starting. Invalid source path or sync mode exits immediately with a clear error instead of a cryptic filesystem error mid-sync - Config save warnings — when saving config with non-fatal issues, the API returns
{ success: true, warnings: [...] }. The Config page shows a warning toast with details
Sync Safety — No Auto-Create
- Sync no longer auto-creates target directories — previously,
syncwould silentlymkdir -pany missing target path. This masked typos (e.g.,~/.cusor/skillsinstead of~/.cursor/skills). Now sync fails fast with a clear error:This applies to all sync modes (merge, copy, symlink conversion) and also toError: target directory does not exist: /home/user/.cusor/skills--dry-run - Dry-run path validation —
sync --dry-runnow detects missing target paths and reports errors, matching the behavior of a real sync. Previously dry-run skipped existence checks
Web UI — Sync Warnings
- Sync pre-check warnings — the sync API response now includes a
warningsfield surfacing issues like empty source directories or missing target paths. Warnings appear as a yellow banner on the Sync page and in the Sync Preview modal - Dashboard full paths — the Source Directory card on the Dashboard now shows the full absolute path instead of abbreviating with
~/
Web UI — Config Save → Sync Preview
- Preview Sync from Config page — after saving
config.yamlor.skillignore, a banner appears above the editor offering to preview what sync will do. Click "Preview Sync" to open a modal showing a dry-run per target — which skills will be linked, updated, or pruned — before committing to the real sync:The banner auto-dismisses when you start editing again. Handles edge cases: no targets configured, everything already in sync, API errors with retry, and a refresh button to re-run the dry-runSave config → Banner: "Config updated — preview what sync will do?"
→ Modal shows dry-run results per target (compact badge view)
→ "Sync Now" to confirm, or Cancel to walk away
Web UI — Base Path for Reverse Proxy
--base-pathflag — serve the Web UI under a sub-path behind a reverse proxy (e.g., Nginx, Caddy):Also configurable viaskillshare ui --base-path /skillshare # UI at http://host/skillshare/SKILLSHARE_UI_BASE_PATHenvironment variable. All API routes, static assets, and client-side navigation automatically adjust to the base path
Skill Design Patterns — skillshare new Wizard
-
Design pattern templates —
skillshare newnow offers five structural design patterns for your skills, each with a tailored SKILL.md template and recommended directory structure:Pattern Description tool-wrapperTeach agent how to use a library/API generatorProduce structured output from a template reviewerScore/audit against a checklist inversionAgent interviews user before acting pipelineMulti-step workflow with checkpoints -
Interactive wizard — running
skillshare new my-skillwithout flags launches a TUI wizard that guides you through pattern, category, and directory scaffolding. Esc goes back to the previous step:skillshare new my-skill # Interactive wizard
skillshare new my-skill -P reviewer # Skip wizard, use reviewer pattern directly
skillshare new my-skill -P none # Plain template (previous behavior) -
Category tagging — optionally tag your skill with a use-case category (library, verification, data, automation, scaffold, quality, cicd, runbook, infra) stored as a
category:frontmatter field -
Scaffold directories — when using a pattern, the wizard offers to create recommended subdirectories (
references/,assets/,scripts/) with.gitkeepplaceholders. Auto-created when using-P
Web UI — New Skill Wizard
- Create skills from the dashboard — the Skills page now has a "+ New Skill" button that opens a step-by-step wizard at
/skills/new:The wizard dynamically skips steps based on your choices — selecting "none" pattern goes straight to confirm. Pattern and category selection use card grids with descriptions. Scaffold directories are toggle cards (all on by default). On success, navigates to the new skill's detail pageName → Pattern → Category → Scaffold → Confirm GET /api/skills/templates— new endpoint returning available patterns and categories. Used by the wizard, also available for custom integrationsPOST /api/skills— new endpoint to create a skill with name, pattern, category, and scaffold directories. Validates name format, checks for duplicates (409), and validates scaffold dirs against the pattern's allowed list
.skillignore.local — Local Override
.skillignore.local— a local-only override file that works alongside.skillignore. Place it in the same directory (source root or tracked repo root) to override patterns without modifying the shared.skillignore:Patterns from# _team-repo/.skillignore blocks private-*
# _team-repo/.skillignore.local un-ignores your own:
echo '!private-mine' > _team-repo/.skillignore.local
skillshare sync # private-mine is now discovered.skillignore.localare appended after.skillignore, so!negationrules naturally override the base file. Works at both the source root and repo level- CLI indicators —
sync,status, anddoctorshow.local activewhen a.skillignore.localis in effect. JSON output includes.localfile paths in thefilesarray
metadata.targets — Ecosystem-Aligned Frontmatter
metadata.targets— thetargetsfield in SKILL.md can now be placed under ametadata:block, aligning with the emerging agent skill ecosystem convention used across 30+ AI CLI tools:The top-level---
name: claude-prompts
description: Prompt patterns for Claude Code
metadata:
targets: [claude]
---targets:format continues to work. If both are present,metadata.targetstakes priority. This is a backward-compatible change — existing skills require no modification
New Target: Hermes Agent
- Hermes Agent — Nous Research's CLI is now a built-in target (56+ total). Global:
~/.hermes/skills, Project:.hermes/skills
[0.17.4] - 2026-03-17
New Features
Doctor JSON Output
doctor --json— structured JSON output for CI pipelines and automation. Returns per-check results with status, message, and details:Exit code 1 when errors are found, 0 for warnings-only or all-passskillshare doctor --json
skillshare doctor --json | jq '.summary' # Quick summary
skillshare doctor --json | jq -e '.summary.errors == 0' # CI gate
Web UI — Health Check Page
- Health Check page — new dashboard page at
/doctorshowing environment diagnostics with summary cards (pass/warnings/errors), filter toggles, expandable check details, and version info. Access from the sidebar under "System → Health Check" GET /api/doctor— new API endpoint returning the same structured JSON asdoctor --json
Root-Level .skillignore
- Root-level
.skillignore— place a.skillignorefile in the source root (e.g.~/.config/skillshare/skills/.skillignore) to hide skills and directories from all commands. Previously.skillignoreonly worked inside tracked repos (_repo/.skillignore); now it works at both levels:# ~/.config/skillshare/skills/.skillignore
draft-* # Hide all draft skills
_archived/ # Hide entire directory - SkipDir optimization — directories matching
.skillignorepatterns are now skipped entirely during discovery (not entered), improving performance for large source trees
Full Gitignore Syntax for .skillignore
-
Gitignore-compatible pattern matching —
.skillignorenow supports the full gitignore syntax instead of just exact names, prefixes, and trailing*. New supported features:Pattern Example Behavior ****/testMatch at any directory depth ??.mdMatch a single character [abc][Tt]estCharacter class !pattern!importantNegation — un-ignore a previously ignored skill /pattern/root-onlyAnchored to the .skillignore location pattern/build/Match directories only \#,\!\#fileEscaped literal characters # .skillignore — now supports gitignore syntax
**/temp # Ignore "temp" at any depth
test-* # Ignore all test- prefixed skills
!test-important # But keep test-important
vendor/ # Ignore vendor directories only
[Dd]raft* # Character class matching -
Parent directory inheritance — if a directory is ignored, all its contents are automatically ignored too.
vendorin.skillignorewill excludevendor/lib/deep/skillwithout needingvendor/** -
Safe directory skipping with negation — when negation patterns (
!) are present, skillshare avoids skipping parent directories prematurely, ensuring negated skills inside ignored directories are still discovered
.skillignore Visibility
statusshows .skillignore info — when a.skillignorefile exists,statusnow displays an extra line below the source path showing active pattern count and ignored skill count:Source: ~/.config/skillshare/skills (12 skills)
.skillignore: 5 patterns, 3 skills ignoredstatus --jsonincludes skillignore field — thesourceobject in JSON output now includes askillignorefield withactive,files,patterns,ignored_count, andignored_skillsdoctor --jsonskillignore check — a newskillignorecheck appears in the doctor output. Showspasswith pattern/ignored counts when.skillignoreexists, orinfostatus when absentinfostatus in doctor — new fourth status alongsidepass/warning/errorfor informational checks that are neither passing nor failing. Does not count toward errors or warnings
Web UI — .skillignore Editor
- Config page tabs — the Config page now has two tabs:
config.yamland.skillignore, switchable via the same pill toggle used on the Skills and Doctor pages. Each tab has independent save state .skillignoreeditor — full CodeMirror text editor for.skillignorewith live stats showing how many skills are currently ignored. Below the editor, an "Ignored Skills" summary shows which skills are excludedGET/PUT /api/skillignore— new API endpoints for reading and writing the.skillignorefile with ignore statistics
Web UI — Doctor Page Unification
- SegmentedControl filter — the Doctor page filter toggles (All/Error/Warning/Pass) now use the same
SegmentedControlcomponent as the Skills page, replacing the previous hand-styled buttons for visual consistency
Sync — .skillignore Ignored Skills
syncshows ignored skills — after sync completes, the CLI now lists skills excluded by.skillignorewith a source hint showing whether ignores come from the root-level file, repo-level files, or both:7 skill(s) ignored by .skillignore:
• _team/vendor/lib
• _team/feature-radar
• draft-wip
(from root .skillignore + 1 repo-level file)sync --jsonincludesignored_countandignored_skills— JSON output now includes the full list of ignored skills for automation and scriptingdoctorshows skillignore status — the Checking Environment section now displays.skillignorepattern count and ignored skill count (was previously JSON-only)- Web UI Sync page — a collapsible "Ignored by .skillignore" card appears on the Sync page showing which skills were excluded and whether the ignores come from root or repo-level files. An "ignored" badge also appears in the pending changes summary
Doctor Output Readability
- Visual spacing in
doctoroutput — config directory paths, source/environment checks, and skill validation checks are now separated by blank lines for easier scanning - Duplicate skill names truncated — when targets have overlapping skills isolated by filters,
syncnow shows only the first 5 names instead of dumping all (e.g., 14000+) on a single line
Bug Fixes
.skillignorerespected in all discovery paths —.skillignorepatterns were not applied during source discovery, causingdoctorto report false "unverifiable (no metadata)" warnings for intentionally excluded directories (e.g.,.venv/inside tracked repos). Discovery now consistently honors.skillignoreacross all commands (#83).skillignoredirectory-only patterns during install — patterns with trailing slash (e.g.,demo/) now correctly match directories duringskillshare installdiscovery, not just during sync- Quieter integrity checks —
doctorno longer warns about locally-created skills missing metadata (this is expected). Only installed skills with incomplete metadata are flagged, with skill names listed for easy identification - Doctor check labels — the web UI Health Check page shows human-readable labels ("Source Directory", "Sync Status") instead of raw identifiers (
source,sync_drift) - Doctor global mode in web UI —
skillshare ui -gnow correctly passes-gto the doctor subprocess, preventing it from auto-detecting project mode when the server's working directory contains.skillshare/config.yaml
[0.17.3] - 2026-03-16
New Features
Centralized Skills Repo
--config localfor project init —skillshare init -p --config localgitignoresconfig.yamlso each developer manages their own targets independently. Skills are shared via git, config stays local:# Creator: set up shared skills repo
skillshare init -p --config local --targets claude
skillshare install <skill> -p && git push
# Teammate: clone and configure own targets
git clone <repo> && cd <repo>
skillshare init -p
skillshare target add myproject ~/DEV/myproject/.claude/skills -p- Smart shared repo detection — when a teammate clones a shared skills repo and runs
skillshare init -p, skillshare auto-detects the shared repo pattern (config.yaml in .gitignore) and creates an empty config with guided next steps. No--config localflag needed for cloners
Init Source Path Prompt
- Interactive source path customization —
skillshare initnow asks whether you want to customize the source directory path instead of silently using the default (~/.config/skillshare/skills/). Use--sourceto skip the prompt in scripts:skillshare init # Prompts for source path
skillshare init --source ~/my-skills # Skips prompt
Target List Interactive TUI
- Interactive target browser —
skillshare target listnow launches a full-screen TUI with a split panel layout (target list on the left, detail panel on the right). Includes fuzzy filtering via/and keyboard navigation:skillshare target list # Interactive TUI (default on TTY)
skillshare target list --no-tui # Plain text output - Mode picker — press
Mon any target to change its sync mode (merge, copy, symlink) without leaving the TUI. Changes are saved to config immediately - Include/Exclude editor — press
IorEto open an inline pattern editor for the selected target. Add patterns witha, delete withd— changes persist to config on each action
Web UI — Filter Studio
- Filter Studio page — new dedicated page for managing target include/exclude filters at
/targets/{name}/filters. Two-column layout: edit glob patterns on the left, see a live preview of which skills will sync on the right. Click any skill in the preview to toggle it between include/exclude:Dashboard → Targets → Customize filters → (Filter Studio opens) - Always-visible filter summary — every target card on the Targets page now permanently displays a skill count line (
All 18 skillsor12/18 skills) with filter tag previews (max 3 tags,+N morefor overflow). Replaces the hidden ghost "Filters" button that nobody noticed - Skill Detail — Target Distribution — the skill detail sidebar now shows a "Target Distribution" card listing which targets this skill syncs to, with status indicators (synced, excluded, not included, SKILL.md targets mismatch). Links to Filter Studio for editing
- Live preview with search — Filter Studio's preview panel includes a search box to quickly find skills in the list, and updates in real-time (500ms debounce) as you add or remove patterns
GET /api/sync-matrix— new API endpoint returning the authoritative skill × target sync matrix with status and reason for each entry. Supports?target=filter.POST /api/sync-matrix/previewaccepts draft patterns for what-if preview without saving- Auto-commit on blur —
FilterTagInputnow automatically adds the typed pattern when the input loses focus, preventing the common mistake of typing a pattern but forgetting to press Enter
Web UI — Skill Detail Styling
- Post-it sidebar cards — Metadata, Files, Security, Target Distribution, and Target Sync cards in the skill detail sidebar now use semantic pastel backgrounds in playful theme (yellow, green, blue, cyan) with thumbtack pin decorations. Clean theme uses white backgrounds
- Hand-drawn manifest block — the SKILL.md manifest area uses a sketchy dashed border with tape decoration in playful theme
- Unified input borders — all text inputs, textareas, selects, and tag inputs now use consistent
border-2 border-mutedstyling withfocus:border-pencilacross the dashboard
Bug Fixes
- Web UI network error guidance — the web dashboard now shows a clear "restart
skillshare ui" message when the API server is unreachable, instead of a generic "Failed to fetch" error init --helpcompleteness —skillshare init --helpnow shows the--subdirflag and lists flags in the same order as the documentation- Project trash gitignore —
skillshare init -pnow automatically addstrash/to.skillshare/.gitignore, preventing soft-deleted skills from being accidentally committed. Existing projects are patched on the nextuninstallrun - Web UI target filter persistence — target include/exclude filters set via the web dashboard are now correctly persisted; previously, in-memory state could drift from disk after saving, causing subsequent page loads to show stale filter values
- Web UI extras list empty state — the extras list page now renders correctly when no extras are configured, fixing a missing tour target in the empty state
- Partial init repair auto-select —
skillshare init -pnow automatically selects all detected targets when repairing a partial initialization (.skillshare/exists butconfig.yamlis missing), instead of prompting you to pick from a checklist - Target list TUI help bar — scroll hints (
Ctrl+d/u) and help bar key ordering now follow the same convention as other TUIs (navigate → filter → scroll → actions → quit) - Web UI server stability — fixed a potential crash when concurrent API requests (e.g., multiple browser tabs) hit the dashboard while target config was being modified
[0.17.2] - 2026-03-14
New Features
Web UI Git Sync Enhancements
- Repository Info Card — the Git Sync page now displays a card showing the current repository URL, branch, and latest commit at the top of the page
- Branch switcher — switch between git branches directly from the Git Sync page without leaving the web dashboard
Web UI Backup & Sidebar
- Backup page restore UX — improved restore flow with clearer action buttons and confirmation dialogs
- Collapsible sidebar tools — sidebar tool sections can now be collapsed/expanded to reduce visual clutter
CLI TUI Improvements
- Trash TUI split panel — the trash list now uses the same left-right split panel layout as other TUIs, with a detail panel showing item info alongside the list
Bug Fixes
- Backup command spinner —
skillshare backupnow shows a progress spinner during backup operations instead of appearing frozen - Git Sync footer layout — Push/Pull action buttons are now pinned to the bottom of the page and no longer shift when content changes
Performance
- Restore TUI async size calculation — backup version sizes are now computed asynchronously in the background instead of blocking the TUI. Large backups with many versions no longer freeze the interface when browsing or selecting versions. Detail panel I/O is capped at 20 skills to prevent lag on large backups
[0.17.1] - 2026-03-13
New Features
Web UI Theme System
- Multi-theme support — the web dashboard now offers two visual styles and three color modes, switchable via the Theme button in the sidebar:
- Styles:
Clean(professional, minimal) andPlayful(hand-drawn borders, organic shapes) - Modes:
Light,Dark, andSystem(follows OS preference) - Preferences persist in localStorage across sessions. Default: Playful + Light
- Styles:
Init Source Subdirectory
- Subdirectory prompt during init —
skillshare initnow prompts whether to store skills in a subdirectory instead of the repository root. Useful when embedding skills inside a dotfiles or monorepo:This sets the source path toskillshare init --remote [email protected]:you/dotfiles.git --subdir skills~/.config/skillshare/skills/skills/, keeping the repo root free for README, CI config, and other non-skill files
Bug Fixes
- Collect skips
.git/directories —skillshare collectnow excludes.git/when copying skills from target to source. Previously, collecting a git-cloned repo (e.g.,obra/superpowersin~/.cursor/skills/) could produce only empty directories becausefilepath.Walkwould abort on.git/pack files - Actionable git error messages —
skillshare installandskillshare updatenow show context-specific guidance instead of raw exit codes when git operations fail:- Authentication failures suggest token env vars (
GITHUB_TOKEN,GITLAB_TOKEN, etc.), SSH URLs, orgh auth login - SSL certificate errors suggest custom CA bundle, SSH, or
GIT_SSL_NO_VERIFY - Token rejections distinguish between missing auth and expired/invalid tokens
- Divergent branch conflicts show the
fatal:line instead of justexit status 128
- Authentication failures suggest token env vars (
[0.17.0] - 2026-03-11
Breaking Changes
- Extras directory structure — extras source files are now stored under
extras/<name>/instead of directly under the config root. Existing directories are auto-migrated on firstsync extrasrun. No manual action required
New Features
First-Class Extras Command Group
Extras (non-skill resources like rules, prompts, commands) are now a first-class feature with their own command group:
extras init— create a new extra with interactive TUI wizard or CLI flags:skillshare extras init rules --target ~/.claude/rules --target ~/.cursor/rules
skillshare extras init prompts --target .claude/prompts --mode copy -pextras list— view all configured extras with sync status (synced,drift,not synced,no source). Interactive TUI with split-pane detail view, or--json/--no-tuioutputextras mode— change sync mode of an extra's target from CLI, TUI (Mkey), or Web UI:skillshare extras rules --mode copy # single target auto-resolved
skillshare extras mode rules --target ~/.claude/rules --mode copyextras remove— remove an extra from config (source files and synced targets are preserved)extras collect— reverse-sync local files from a target back into the extras source directory:skillshare extras collect rules --from ~/.claude/rules --dry-run- Project mode — all extras commands support
--project/-pfor.skillshare/scoped extras
Extras Integration with Existing Commands
status— shows extras file count and target count per extradoctor— checks that extras source directories exist and target parent directories are reachablediff --extras— per-file diff for extras targets;diff --allshows combined skills + extras diffsync extras --json— structured JSON output for programmatic consumptionsync --all -p— project-mode--allnow includes extras sync
Web UI Redesign
The web dashboard (skillshare ui) received a complete visual overhaul — replacing the hand-drawn aesthetic with a clean, minimal design:
- Redesigned design system — new DM Sans typography, clean border-radius, streamlined color palette with proper dark mode support
- Table view with pagination — skills and search results now offer a table view alongside the existing card/grouped views, with client-side pagination for large collections
- Sticky search and filters — SkillsPage toolbar stays pinned at the top while scrolling, with grouped view sticky headers
- Keyboard modifier shortcuts — press
?to see available shortcuts, with an on-screen HUD overlay showing active modifiers - Sync progress animation — visual feedback during sync operations
- Onboarding tour — step-by-step spotlight tour for first-time users, highlighting key features
- Shared UI components — new DialogShell, IconButton, Pagination, and SegmentedControl components for consistent interactions across pages
Web UI Extras Page
- New Extras page in the web dashboard with list, sync, remove, add-extra modal, and inline mode dropdown per target
- Dashboard card showing extras count, total files, and total targets
- REST API:
GET /api/extras,GET /api/extras/diff,POST /api/extras,POST /api/extras/sync,PATCH /api/extras/{name}/mode,DELETE /api/extras/{name}
Custom GitLab Domain Support
-
JihuLab auto-detection — hosts containing
jihulabin the name (e.g.,jihulab.com) are now automatically detected alongsidegitlab, so nested subgroup URLs work without any config -
gitlab_hostsconfig — declare self-managed GitLab hostnames so skillshare treats URLs with nested subgroup paths correctly. Hosts containinggitlaborjihulabin the name are detected automatically; this config is for other custom domains likegit.company.com:# ~/.config/skillshare/config.yaml (or .skillshare/config.yaml)
gitlab_hosts:
- git.company.com
- code.internal.io# With config above, full path is treated as repo (not owner/repo + subdir)
skillshare install git.company.com/team/frontend/uiWithout config, append
.gitas a workaround:git.company.com/team/frontend/ui.git -
SKILLSHARE_GITLAB_HOSTSenv var — comma-separated list of GitLab hostnames for CI/CD pipelines that don't have a config file:SKILLSHARE_GITLAB_HOSTS=git.company.com,code.internal.io skillshare install git.company.com/team/frontend/uiWhen both the env var and config file are set, their values are merged (deduplicated). Invalid entries in the env var are silently skipped
Bug Fixes
- GitLab subgroup URL parsing —
skillshare installnow correctly handles GitLab nested subgroup URLs with arbitrary depth. Previously, URLs likegitlab.com/group/subgroup/projectwere misinterpreted as repogroup/subgroupwith subdirproject. Now the entire path is treated as the repo path:To specify a subdir within a multi-segment repo, use# These all work now (previously failed)
skillshare install gitlab.com/group/subgroup/project
skillshare install onprem.gitlab.internal/org/sub1/sub2/project
skillshare install https://gitlab.com/group/subgroup/project.git.gitas the explicit boundary:Non-GitLab hosts (GHE, Gitea, etc.) retain the original# Clone group/subgroup/project, install from skills/my-skill subdir
skillshare install gitlab.com/group/subgroup/project.git/skills/my-skillowner/repo+ subdir behavior. GitLab web URLs with/-/tree/and Bitbucket/src/markers continue to work as before.--trackmode generates correct names for subgroup paths (e.g.,group-subgroup-project) - HTTPS fallback on non-GitLab hosts — fixed platform-aware HTTPS URL parsing that could misroute GitHub Enterprise and Gitea URLs with subdirectory paths
- Skill discovery in projects —
skillshare installnow skips known AI tool config directories (.claude/,.cursor/, etc.) when scanning a project directory for skills, preventing circular discovery and false duplicates - Sync collision message —
skillshare syncnow shows both duplicate skill names in collision warning messages for easier troubleshooting - Extras mode switch without
--force— changing an extra's sync mode (e.g., frommergetocopy) and re-syncing now automatically replaces old symlinks. Previously, leftover symlinks from the old mode were treated as conflicts requiring--force
[0.16.14] - 2026-03-09
New Features
Terminal Rendering Improvements
- SGR dim for consistent gray text — all dim/gray text across CLI and TUI now uses the SGR dim attribute (
\x1b[0;2m) instead of bright-black (\033[90m) or fixed 256-color grays. This adapts to any terminal theme — dark, light, or custom — instead of rendering too dark or invisible on certain configurations - Progress bar counter visibility — the file counter (e.g.
0/63947) now appears at a fixed position right after the percentage, preventing it from being pushed off-screen by long titles on narrow terminals:■■■■■■■■■■■■・・・・・ 69% 0/63947 Updating files - Progress bar accent color — progress bar now uses cyan (the project accent color) instead of orange, matching spinners, titles, and other interactive elements
Bug Fixes
- Fixed progress bar getting stuck at 99% on large scans (e.g. 63k+ skills) — parallel scan workers could race past the final frame, leaving the bar one tick short of 100%
- Fixed skill path segments (e.g.
security/insecurity/sarif-parsing) rendering as fixed 256-color gray in TUI list and audit views — now uses theme-adaptive dim
[0.16.13] - 2026-03-06
New Features
TUI Grouped Layout
- Grouped skill list —
skillshare listTUI now groups skills by tracked repo with visual separators. Each group shows the repo name and skill count. Standalone (local) skills appear in their own section. When only one group exists, separators are omitted for a cleaner view── runkids-my-skills (42) ──────────────
✓ security/skill-improver
! security/audit-demo-debug-exfil
── standalone (27) ─────────────────────
! react-best-practices - Grouped audit results —
skillshare auditTUI uses the same grouped layout. Panel height dynamically adjusts based on footer content, maximizing visible rows - Structured filter tags — filter skills precisely with
key:valuetags in the/filter input:Available tags:t:tracked g:security audit
→ type=tracked AND group contains "security" AND free text "audit"t:/type:(tracked/remote/local/github),g:/group:(substring),r:/repo:(substring). Multiple tags use AND logic. Tracked skills now show a repo-name badge so they remain identifiable even in filtered results without group headers
New Targets
- 3 new AI agent targets — Warp, Purecode AI (
purecode), and Witsy, bringing supported tools to 55+
Bug Fixes
- Fixed long skill names wrapping to multiple lines in list and audit TUIs — names now truncate with
…when exceeding column width - Fixed items at the bottom of the audit TUI list being hidden behind the footer
- Fixed detail panel showing duplicate information (installed date, repo name repeated across sections)
- Reduced color noise in audit CLI and TUI output — non-zero counts use semantic severity colors, zero counts are dimmed
- Fixed devcontainer wrapper not suppressing redirect banner for
-jshort flag
[0.16.12] - 2026-03-06
New Features
Structured JSON Output
--jsonflag on 8 more commands — structured JSON output for agent and CI/CD consumption, bringing total coverage to 12 commands:- Mutating:
sync,install,update,uninstall,collect - Read-only:
target list,status,diff
skillshare status --json # overview as JSON
skillshare list --json | jq '.[].name' # extract skill names
skillshare sync --json | jq '.details' # per-target sync details
skillshare install github.com/user/repo --json # non-interactive install- For mutating commands,
--jsonimplies--force(skips interactive prompts) - Fully silent: no spinners, no stderr progress — only pure JSON on stdout
- Previously supported:
audit --format json,log --json,check --json,list --json
- Mutating:
status --project --json— project-mode status now supports--jsonoutput
Bug Fixes
- Fixed
--jsonmode leaking spinner and progress text to stderr, breaking2>&1 | jq .pipelines - Fixed non-zero exit codes being swallowed in
--jsonerror paths - Fixed
status --jsonshowing hardcoded analyzer list instead of actual active analyzers - Fixed argument validation being skipped in
status --projectmode
Performance
- Parallelized git dirty checks —
status --jsonnow runs git status checks concurrently across tracked repos
[0.16.11] - 2026-03-05
New Features
Supply-Chain Trust Verification
- Metadata analyzer — new audit analyzer that cross-references SKILL.md metadata against the actual git source URL to detect social-engineering attacks:
publisher-mismatch(HIGH): skill claims an organization (e.g., "by Anthropic") but repo owner differsauthority-language(MEDIUM): skill uses authority words ("official", "verified") from an unrecognized source
skillshare audit # metadata analyzer runs by default
skillshare audit --analyzer metadata # run metadata analyzer only
Hardcoded Secret Detection
- 10 new audit rules (
hardcoded-secret-0throughhardcoded-secret-9) detect inline API keys, tokens, and passwords embedded in skill files:- Google API keys, AWS access keys, GitHub PATs (classic + fine-grained), Slack tokens, OpenAI keys, Anthropic keys, Stripe keys, PEM private key blocks, and generic
api_key/passwordassignments - Severity: HIGH — blocks installation at default threshold
skillshare audit # hardcoded secrets detected automatically
skillshare audit rules --pattern hardcoded-secret # list all secret rules - Google API keys, AWS access keys, GitHub PATs (classic + fine-grained), Slack tokens, OpenAI keys, Anthropic keys, Stripe keys, PEM private key blocks, and generic
Skill Integrity Verification
doctorintegrity check — verifies installed skills haven't been tampered with by comparing current file hashes against stored.skillshare-meta.jsonhashes:✓ Skill integrity: 5/6 verified
⚠ _team-repo__api-helper: 1 modified
⚠ Skill integrity: 1 skill(s) unverifiable (no metadata)
Web UI Streaming & Virtualization
- Real-time SSE streaming — all long-running web dashboard operations (audit, update, check, diff) now stream results via Server-Sent Events with per-item progress bars instead of waiting for the full batch
- Per-skill audit — audit individual skills directly from the skill detail page
- Virtualized scrolling — audit results and diff item lists now use virtual scrolling for smooth performance with large datasets (replaces "Show more" pagination)
Improvements
- SSL error guidance —
skillshare installnow detects SSL certificate errors and shows actionable options (custom CA bundle, SSH, or skip verification) - Cleaner TUI layout — removed detail panel box borders in list/log views for a cleaner, less cluttered appearance
[0.16.10] - 2026-03-04
New Features
Sync Extras
sync extrassubcommand — sync non-skill resources (rules, commands, memory files, etc.) from your config directory to arbitrary target paths:Each extra supports per-target sync modes (skillshare sync extras # sync all configured extras
skillshare sync extras --dry-run # preview without changes
skillshare sync extras --force # overwrite existing filessymlink,copy, ormerge). Configure inconfig.yaml:extras:
- name: rules
targets:
- path: ~/.claude/rules
- path: ~/.cursor/rules
mode: copysync --allflag — run skill sync and extras sync together in one command:skillshare sync --all
TUI Preferences
tuisubcommand — persistently enable or disable interactive TUI mode:When disabled, all commands fall back to plain text output. Setting is stored inskillshare tui # show current setting
skillshare tui off # disable TUI globally
skillshare tui on # re-enable TUIconfig.yaml.
Bug Fixes
- Fixed TUI detail panel bottom content being clipped in list view
Documentation
- Added sync extras documentation to website, built-in skill, and README
- Split monolith audit page into focused sub-pages for easier navigation
[0.16.9] - 2026-03-03
New Features
Audit Rules Management
audit rulessubcommand — browse, search, disable, enable, and override severity for individual rules or entire patterns:skillshare audit rules # interactive TUI browser
skillshare audit rules --format json # machine-readable listing
skillshare audit rules disable credential-access-ssh-private-key
skillshare audit rules disable --pattern prompt-injection
skillshare audit rules severity my-rule HIGH
skillshare audit rules reset # restore built-in defaults
skillshare audit rules init # create starter audit-rules.yaml- Audit Rules TUI — two-level interactive browser with accordion pattern groups, severity tabs (ALL/CRIT/HIGH/MED/LOW/INFO/OFF), text filter, and inline disable/enable/severity-override actions
- Pattern-level rule overrides —
audit-rules.yamlnow supports pattern-level entries (e.g.,prompt-injection: disabled: true) that apply to all rules under a pattern
Security Policy & Deduplication
--profileflag — preset security profiles that set block threshold and deduplication mode in one flag:Profiles:skillshare audit --profile strict # blocks on HIGH+, global dedupe
skillshare audit --profile permissive # blocks on CRITICAL only, legacy dedupedefault(CRITICAL threshold, global dedupe),strict(HIGH threshold, global dedupe),permissive(CRITICAL threshold, legacy dedupe)--dedupeflag — control finding deduplication:global(default) deduplicates across all skills using SHA-256 fingerprints;legacykeeps per-skill behavior- Policy display — active policy (profile, threshold, dedupe mode) shown in audit header, summary box, and TUI footer
Analyzer Pipeline
--analyzerflag — run only specific analyzers (repeatable):static,dataflow,tier,integrity,structure,cross-skill:skillshare audit --analyzer static --analyzer dataflow- Finding enrichment — JSON, SARIF, and Markdown outputs now include
ruleId,analyzer,category,confidence, andfingerprintfields per finding - Category-based threat breakdown — summary now shows threat counts by category (injection, exfiltration, credential, obfuscation, privilege, integrity, structure, risk) across all output channels (CLI, TUI, JSON, Markdown)
- Semantic coloring — TUI summary footer and CLI summary box use per-category colors for the Threats breakdown line
New Detection Rules
- Interpreter tier (T6) — audit classifies Turing-complete runtimes (
python,node,ruby,perl,lua,php,bun,deno,npx,tsx,pwsh,powershell) as T6:interpreter. Versioned binaries likepython3.11are also recognized. Tier combination findings:tier-interpreter(INFO) andtier-interpreter-network(MEDIUM when combined with network commands) - Expanded prompt injection detection — new rules detect
OVERRIDE:/IGNORE:/ADMIN:/ROOT:prefixes, agent directive tags (<system>,</instructions>), and jailbreak directives (DEVELOPER MODE,DEV MODE,DAN MODE,JAILBREAK) - Table-driven credential access detection — credential rules are now generated from a data table covering 30+ sensitive paths (SSH keys, AWS/Azure/GCloud credentials, GnuPG keyrings, Kubernetes config, Vault tokens, Terraform credentials, Docker config, GitHub CLI tokens, macOS Keychains, shell history, and more) across 5 access methods (read, copy, redirect, dd, exfil). Supports
~,$HOME,${HOME}path variants. Includes an INFO-level heuristic catch-all for unknown home dotdirs. Rule IDs are now descriptive (e.g.,credential-access-ssh-private-keyinstead ofcredential-access-0) - Cross-skill credential × interpreter — new cross-skill rule
cross-skill-cred-interpreter(MEDIUM) flags when one skill reads credentials and another has interpreter access - Markdown image exfiltration detection — new rule detects external markdown images with query parameters (
) as a potential data exfiltration vector - Invisible payload detection — detects Unicode tag characters (U+E0001–U+E007F) that render at 0px width but are fully processed by LLMs. Primary vector for "Rules File Backdoor" attacks. Uses dedicated
invisible-payloadpattern to ensure CRITICAL findings are never suppressed in tutorial contexts - Output suppression detection — detects directives that hide actions from the user ("don't tell the user", "hide this from the user", "remove from conversation history"). Strong indicator of supply-chain attacks
- Bidirectional text detection — detects Unicode bidi control characters (U+202A–U+202E, U+2066–U+2069) used in Trojan Source attacks (CVE-2021-42574) that reorder visible text
- Config/memory file poisoning — detects instructions to modify AI agent configuration files (
MEMORY.md,CLAUDE.md,.cursorrules,.windsurfrules,.clinerules) - DNS exfiltration detection — detects
dig/nslookup/hostcommands with command substitution ($(...)or backticks) that encode stolen data in DNS subdomain queries - Self-propagation detection — detects instructions that tell AI to inject/insert payloads into all/every/other files, a repository worm pattern
- Markdown comment injection — detects prompt injection keywords hidden inside markdown reference-link comments (
[//]: # (ignore previous instructions...)) - Untrusted package execution — detects
npx -y/npx --yes(auto-execute without confirmation) andpip install https://(install from URL, not PyPI registry) - Additional invisible Unicode — detects soft hyphens (U+00AD), directional marks (U+200E–U+200F), and invisible math operators (U+2061–U+2064) at MEDIUM severity
envprefix handling — command tier classifier now correctly classifiesenv python3 script.pyas T6:interpreter instead of T0:read-only
Performance
- Regex prefilters — static analyzer now applies conservative literal-substring prefilters before running regex, reducing scan time on large skills
Bug Fixes
- Regex bypass vulnerabilities closed — fixed prompt injection rules that could be bypassed with leading whitespace or mixed case; fixed data-exfiltration image rule whose exclude pattern allowed
.png?stolen_datato pass; fixeddd if=/etc/shadowbeing mislabeled asdestructive-commandsinstead ofcredential-access - SSH public key false positive —
~/.ssh/id_rsa.puband other.pubfiles no longer trigger CRITICAL credential-access findings (only private keys are flagged) - Catch-all regex bypass — fixed heuristic catch-all rule that could be silenced when a known credential path appeared on the same line as an unknown dotdir
- Structured output ANSI leak —
audit --format json/sarif/markdownno longer leaks pterm cursor hide/show ANSI codes into stdout - Severity-only merge no longer wipes rules — editing only severity in
audit-rules.yamlno longer drops the rule's regex patterns - Profile threshold fallback — profile presets now correctly set block threshold when config has no explicit
block_threshold - TreeSpinner ghost cursor — fixed missing
WithWriterthat caused cursor hide/show codes to leak on structured output - TUI summary overflow — category threat breakdown now renders on a separate line to prevent horizontal overflow on narrow terminals
[0.16.8] - 2026-03-02
New Features
audit --format— new--formatflag supportstext(default),json,sarif, andmarkdownoutput formats.--jsonis now deprecated:skillshare audit --format sarif # SARIF 2.1.0 for GitHub Code Scanning
skillshare audit --format markdown # Markdown report for GitHub Issues/PRs
skillshare audit --format json # Machine-readable JSON- Analyzability score — each audited skill now receives an analyzability percentage (how much of the skill's content can be statically analyzed). Shown per-skill in audit output and as an average in the summary
- Command safety tiering (T0–T5) — audit classifies shell commands by behavioral tier: T0 read-only, T1 mutating, T2 destructive, T3 network, T4 privilege, T5 stealth. Tier labels appear alongside pattern-based findings for richer context
- Dataflow taint tracking — audit detects cross-line exfiltration patterns: credential reads or environment variable access on one line followed by network sends (
curl,wget, etc.) on a subsequent line - Cross-skill interaction detection — when auditing multiple skills, audit now checks for dangerous capability combinations across skills (e.g., one skill reads credentials while another has network access). Results are also exposed in the REST API (
GET /api/audit) - Audit TUI filter — the
/filter in the audit TUI now searches across risk level, status (blocked/warning/clean), max severity, finding pattern names, and file names — not just skill names - Pre-commit hook —
.pre-commit-hooks.yamlfor the pre-commit framework. Runsskillshare audit -pon every commit to catch security issues before they land:repos:
- repo: https://github.com/runkids/skillshare
rev: v0.16.8
hooks:
- id: skillshare-audit - AstrBot target — new target for AstrBot AI assistant (
~/.astrbot/data/skills) - Cline target updated — Cline now uses the universal
.agents/skillsproject path
Performance
- Cross-skill analysis O(N) rewrite — cross-skill interaction detection rewritten from O(N²) pair-wise comparison to O(N) capability-bucket approach, significantly faster for large skill collections
Bug Fixes
- TUI gray text contrast — improved gray text readability on dark terminals by increasing ANSI color contrast
- Spinner on structured output —
auditnow shows progress spinner on stderr when using--format json/sarif/markdown, so structured stdout remains clean for piping - SARIF line-0 region — SARIF output no longer emits an invalid
regionobject for findings at line 0
[0.16.7] - 2026-03-02
Bug Fixes
- Preserve external symlinks during sync — sync (merge/copy mode) no longer deletes target directory symlinks created by dotfiles managers (e.g., stow, chezmoi, yadm). Previously, switching from symlink mode to merge/copy mode would unconditionally remove the target symlink, breaking external link chains. Now skillshare checks whether the symlink points to the source directory before removing it — external symlinks are left intact and skills are synced into the resolved directory
- Symlinked source directory support across all commands — all commands that walk the source directory (
sync,update,uninstall,list,diff,install,status,collect) now resolve symlinks before scanning. Skills managed through symlinked~/.config/skillshare/skills/(common with dotfiles managers) are discovered correctly everywhere. Chained symlinks (link → link → real dir) are also handled - Group operation containment guard —
uninstall --groupandupdate --groupnow reject group directories that are symlinks pointing outside the source tree, preventing accidental operations on external directories statusrecognizes external target symlinks —CheckStatusMergeno longer reports external symlinks as "conflict"; it follows the symlink and counts linked/local skills in the resolved directorycollectscans through external target symlinks —FindLocalSkillsnow follows non-source symlinks instead of skipping them, so local skills in dotfiles-managed target directories can be collectedupgradeprompt cleanup — upgrade prompts ("Install built-in skill?" and "Upgrade to vX?") no longer leave residual lines that break the tree-drawing layout
[0.16.6] - 2026-03-02
New Features
diffinteractive TUI — new bubbletea-based split-panel interface forskillshare diff: left panel lists targets with status icons (✓/!/✗), right panel shows categorized file-level diffs for the selected target. Supports fuzzy filter (/), detail scrolling (Ctrl+d/u), and narrow terminal fallback. Add--no-tuifor plain text outputdiff --patch— show unified text diffs for each changed file:skillshare diff --patchdiff --stat— show per-file change summary with added/removed line counts:skillshare diff --statdifffile-level detail — diff entries now include per-file data (added/removed/modified/renamed), source paths, modification times, and git-style status symbols (+/−/≠/→)diffstatistics summary — every diff run prints a summary line with total counts by category (e.g.,3 added, 1 modified, 2 removed)- Glob pattern matching —
install,update, anduninstallnow accept glob patterns (*,?,[...]) in skill name arguments; matching is case-insensitive:skillshare install repo -s "core-*"
skillshare update "team-*"
skillshare uninstall "old-??" trashinteractive TUI — bubbletea-based TUI with multi-select, fuzzy filter, and inline restore/delete/empty operations; includes SKILL.md preview in the detail panelrestoreinteractive TUI — two-phase TUI: target picker → version list with left-right split panel, showing skill diffs and descriptions in the detail panel. Add--helpflag and delete-backup action from TUIbackupversion listing —backupnow lists available backup versions per target and correctly follows top-level symlinks in merge-mode targets- Homebrew-aware version check — Homebrew users no longer see false "update available" notifications;
doctorand post-command checks now querybrew infoinstead of the GitHub Release API when installed via Homebrew - Devcontainer skill — new built-in skill that teaches AI assistants when and how to run CLI commands, tests, and debugging inside the devcontainer
- Red destructive confirmations — all destructive action confirmations (delete, empty, uninstall) now render in red across trash, restore, and list TUIs
Fixed
backup/restoremode flags —-gand-pflags now work correctly; previously-gwas misinterpreted as a target namediffhides internal metadata —.skillshare-meta.jsonis no longer shown in file-level diff outputdiff --statimplies--no-tui—--statnow correctly skips the TUI and prints to stdout
[0.16.5] - 2026-02-28
New Features
- Web UI: Dark theme — toggle between light and dark mode via the sun/moon button; persists to localStorage and respects
prefers-color-scheme - Web UI: Update page — dedicated page for batch-updating tracked skills with select-all, per-item progress tracking, and result summary
- Web UI: Security overview card — dashboard now shows a risk-level badge and severity breakdown; highlights critical findings with an accent card
- Web UI: Sync mode selector — change a target's sync mode (merge/symlink) directly from the Targets page dropdown
- Web UI: Install skill picker — skill descriptions from SKILL.md frontmatter are now shown inline in the picker modal; search also matches descriptions
upgradeversion transition —skillshare upgradenow shows clear before/after versions:Works for Homebrew, direct download, and skill installsUpgraded v0.16.3 → v0.16.5
Fixed
- Custom targets flagged as unknown —
checkanddoctorno longer warn about user-defined targets in global or project config (fixes #57) - Web UI: Modal scroll-away — clicking checkboxes in the skill picker no longer causes content to scroll out of view (replaced
overflow-hiddenwithoverflow-clip) - Web UI: Subdir URL discovery — install form now correctly discovers skills from git subdirectory URLs
- Web UI: Accessibility — added
aria-labels,htmlFor, focus trap for modals, andErrorBoundaryfor graceful error recovery
New Targets
- omp — oh-my-pi (
~/.omp/agent/skills,.omp/skills; alias:oh-my-pi) - lingma — Lingma (
~/.lingma/skills,.lingma/skills)
[0.16.4] - 2026-02-28
New Features
- Cross-path duplicate detection —
installnow detects when a repo is already installed at a different location and blocks the operation with a clear hint:skillshare install runkids/feature-radar --into feature-radar
# later...
skillshare install runkids/feature-radar
# ✗ this repo is already installed at skills/feature-radar/scan (and 2 more)
# Use 'skillshare update' to refresh, or reinstall with --force to allow duplicates - Same-repo skip — reinstalling a skill from the same repo now shows a friendly
⊘ skippedindicator instead of an error; skipped skills are grouped by directory with repo label in the summary - Web UI install dedup — the Web UI install endpoints enforce the same cross-path duplicate check as the CLI, returning HTTP 409 when duplicates are found
- 5 new audit rules — the security scanner now detects 36 patterns (up from 31):
fetch-with-pipe(HIGH) — detectscurl | bash,wget | sh, and pipes topython,node,ruby,perl,zsh,fiship-address-url(MEDIUM) — URLs with raw IP addresses that bypass DNS-based security; private/loopback ranges excludeddata-uri(MEDIUM) —data:URIs in markdown links that may embed executable content
- Unified batch summary —
install,uninstall, andupdatenow share a consistent single-line summary format with color-coded counts and elapsed time
Performance
- Batch gitignore operations —
.gitignoreupdates duringinstallreconciliation anduninstallare now batched into a single file read/write instead of one per skill; eliminates hang when.gitignoregrows large (100K+ lines) update --allgrouped skip — skills from the same repo are now skipped when installed metadata already matches remote state (commit or tree-hash match), avoiding redundant reinstall/copy; on large repos this eliminates the majority of workupdate --allbatch speed — removed a fixed 50ms per-skill delay in grouped batch iteration that dominated runtime on large skill sets (~90 min at 108K skills → seconds)update --allprogress visibility — batch progress bar now advances per-skill instead of per-repo, so it no longer appears stuck at 0% during large grouped updates; a scanning spinner and phase headers ([1/3] Pulling N tracked repos...) show which stage is runningstatusanddoctorat scale — both commands now run a single skill discovery pass instead of repeating it per-section (status: 7× → 1×, doctor: 5× → 1×); target status checks are cached so drift detection reuses the first result;doctoroverlaps its GitHub version check with local I/O; a spinner is shown during discovery so the CLI doesn't appear frozencollectscan speed — directory size calculation is no longer run eagerly during skill discovery; deferred to the Web UI handler where it is actually needed
Fixed
universaltarget path — corrected global path from~/.config/agents/skillsto~/.agents/skills(the shared agent directory used by multiple AI CLIs)initauto-includesuniversal—initandinit --discovernow automatically include theuniversaltarget whenever any AI CLI is detected; labeled as "shared agent directory" so users understand what it isuniversalcoexistence docs — added FAQ section explaining how skillshare andnpx skillscoexist on the same~/.agents/skillspath, including sync mode differences and name collision caveats--forcehint accuracy — the force hint now uses the actual repo URL (not per-skill subpath) and includes--intowhen applicableupdateroot-level skills — root-level skill repos (SKILL.md at repo root) no longer appear as stale/deleted during batch update; fixedSubdirnormalization mismatch between metadata ("") and discovery (".")pullproject mode leak —pullnow forces--globalfor the post-pull sync, preventing unintended project-mode auto-detection when run inside a project directorylistTUI action safety —audit,update, anduninstallactions in the skill list TUI now show a confirmation overlay before executing; actions pass explicit--global/--projectmode flags to prevent mode mismatch
Improvements
updatebatch summary — batch update summary now uses the same single-line stats format assyncwith color-coded counts- Command output spacing — commands now consistently print a trailing blank line after output for better terminal readability
[0.16.3] - 2026-02-27
Improvements
diffoutput redesign — actions are now labeled by what they do (add,remove,update,restore) with a grouped summary showing counts per action; overall summary line at the end- Install progress output — config and search installs now show tree-style steps with a summary line (installed/skipped/failed counts + elapsed time) and real-time git clone progress
- Web UI log stats bar — Log page now shows a stats bar with success rate and per-command breakdown
- Hub batch install progress — multi-skill installs from
search --hubnow show real-time git clone progress (cloning 45%,resolving 67%) instead of a static "installing..." label; only the active install is shown to keep the display compact - Hub risk badge colors — risk labels in hub search results are now color-coded by severity (green for clean, yellow for low, red for critical) in both the list and detail panel
- Hub batch failure output — failure details are classified by type (security / ambiguous / not found) with distinct icons; long audit findings and ambiguous path lists are truncated to 3 lines with a "(+N more)" summary
Performance
- Batch install reconcile — config reconciliation now runs once after all installs complete instead of after each skill, eliminating O(n²) directory walks that caused batch installs of large collections to appear stuck
- Repo-grouped cloning — skills from the same git repo are now cloned once and installed from the shared clone, reducing network requests for multi-skill repos
Fixed
- Race condition in
sync— targets sharing the same filesystem path no longer produce duplicate or missing symlinks - Race condition in
syncgroup key — canonicalized group key prevents non-deterministic sync results - Web UI stats on "All" tab — dashboard now computes stats from both ops and audit logs, not just ops
- Web UI last operation timestamp — timestamps are compared as dates instead of strings, fixing incorrect "most recent" ordering
log --stats --cmd audit— now correctly reads fromaudit.loginstead ofoperations.loglog max_entries: 0— setting max_entries to 0 now correctly means unlimited instead of deleting all entries- Oplog data loss — rewriteEntries now checks for write errors before truncating the original file
- TUI content clipping — detail panels in
listandlogTUIs now hard-wrap content and account for padding, preventing text from being clipped at panel edges - TUI footer spacing — list and log TUI footers have proper breathing room between action hints
- Copy mode symlink handling —
syncin copy mode now dereferences directory symlinks instead of copying broken link files; prevents missing content in targets like Windsurf that use file copying uninstall --allstale summary — spinner and confirm prompt now show correct noun type after skipping dirty tracked repos; added skip count message ("1 tracked repo skipped, 2 remaining"); fixed unnatural pluralization ("2 group(s)" → "2 groups")- Empty
list/logTUI —listandlogno longer open a blank interactive screen when there are no skills or log entries; they print a plain-text hint instead installquiet mode — tracked config dry-run messages are now suppressed in quiet mode
New Targets
- Verdent — added Verdent AI coding agent (
verdent)
[0.16.2] - 2026-02-26
New Features
diffcommand — new command to preview whatsyncwould change without modifying anything; parallel target scanning, grouped output for targets with identical diffs, and an overall progress bar:skillshare diff # all targets
skillshare diff claude # single target
skillshare diff -p # project mode- Interactive TUI for
audit—skillshare auditlaunches a bubbletea TUI with severity-colored results, fuzzy filter, and detail panel; progress bar during scanning; confirmation prompt for large scans (1,000+ skills) (skillshare audit --no-tuifor plain text) - Tree sidebar in
listTUI — detail panel now shows the skill's directory tree (up to 3 levels) with glamour-rendered markdown preview; SKILL.md pinned at top for quick reading - Log TUI: delete entries — press
spaceto select entries,dto delete with confirmation; supports multi-select (ato select all) - Log
--statsflag — aggregated summary with per-command breakdown, success rate, and partial/blocked status tracking:skillshare log --stats - Azure DevOps URL support — install from Azure DevOps repos using
ado:shorthand, full HTTPS (dev.azure.com), legacy HTTPS (visualstudio.com), or SSH v3 (ssh.dev.azure.com) URLs:skillshare install ado:myorg/myproject/myrepo
skillshare install https://dev.azure.com/org/proj/_git/repo
skillshare install [email protected]:v3/org/proj/repo AZURE_DEVOPS_TOKENenv var — automatic HTTPS token injection for Azure DevOps private repos, same pattern asGITHUB_TOKEN/GITLAB_TOKEN/BITBUCKET_TOKEN:export AZURE_DEVOPS_TOKEN=your_pat
skillshare install https://dev.azure.com/org/proj/_git/repo --trackupdate --prune— remove stale skills whose upstream source no longer exists (skillshare update --prune)- Stale detection in
check—skillshare checknow reports skills deleted upstream as "stale (deleted upstream)" instead of silently skipping them - Windows ARM64 cross-compile —
make build-windows/mise run build:windowsproduces Windows ARM64 binaries
Performance
- Parallel target sync — both global and project-mode
syncnow run target syncs concurrently (up to 8 workers) with a live per-target progress display - mtime fast-path for copy mode — repeat syncs skip SHA-256 checksums when source directory mtime is unchanged, making no-op syncs near-instant
- Cached skill discovery — skills are discovered once and shared across all parallel target workers instead of rediscovering per target
Improvements
- Batch progress for hub installs — multi-skill installs from
searchnow show per-skill status (queued/installing/done/error) with a live progress display - Log retention — operation log auto-trims old entries with configurable limits and hysteresis to avoid frequent rewrites
- Partial completion tracking —
sync,install,update, anduninstallnow log"partial"status when some targets succeed and others fail, instead of a blanket"error" - Unified TUI color palette — all bubbletea TUIs share a consistent color palette via shared
tcstruct
Fixed
upgradespinner nesting — brew output and GitHub release download steps now render cleanly inside tree spinners instead of breaking the layout
[0.16.1] - 2026-02-25
Improvements
- Async TUI loading for
list— skill list now loads inside the TUI with a spinner instead of blocking before rendering; metadata reads use a parallel worker pool (64 workers) for faster startup - Unified filter bar across all TUIs —
list,log, andsearchnow share the same filter UX: press/to enter filter mode,Escto clear,Enterto lock; search TUI suppresses action keys while typing to avoid accidental checkbox toggles - Colorized audit output — severity counts (CRITICAL/HIGH/MEDIUM/LOW/INFO), risk labels, and finding details are now color-coded by severity level
- Improved install output — single-skill and tracked-repo installs show inline tree steps (description, license, location) instead of a separate SkillBox; description truncation increased to 100 characters with visible ellipsis (
…) - Parallel uninstall discovery —
uninstall --alluses parallel git dirty checks (8 workers) for faster execution
Fixed
- Frozen terminal during
checkandupdate— header and spinners now appear immediately before filesystem scans, so users see feedback instead of a blank screen - Spinner flicker during
installclone — eliminated visual glitch when transitioning between clone and post-clone phases - Large operation log files crash
logTUI — JSONL parser now uses streamingjson.Decoderinstead of reading entire lines into memory, handling arbitrarily large log entries
[0.16.0] - 2026-02-25
Performance
- Per-skill tree hash comparison for
check—skillshare checknow uses blobless git fetches (~150-200 KB) and compares per-skill directory tree hashes instead of whole-commit hashes; detects updates to individual skills within monorepos without downloading full history (#46) - Parallel checking with bounded concurrency —
checkandcheck --allrun up to 8 concurrent workers; deduplicatesls-remotecalls for repos hosting multiple skills; progress bar now shows skill count instead of URL count (#46) - Sparse checkout for subdir installs —
install owner/repo/subdirusesgit sparse-checkout(git 2.25+) to clone only the needed subdirectory with--filter=blob:none; falls back to full clone on older git versions (fixes #46) - Batch update progress —
update --allnow shows a progress bar with the current skill name during batch operations
New Features
- Interactive TUI for
list—skillshare listlaunches a bubbletea TUI with fuzzy search, filter, sort, and a detail panel showing description, license, and metadata; inline actions: audit, update, and uninstall directly from the list (skillshare list --no-tuifor plain text) - Interactive TUI for
log—skillshare loglaunches a bubbletea TUI with fuzzy filter and detail panel for browsing operation history (skillshare log --no-tuifor plain text) - Interactive TUI for
search—skillshare searchresults now use a bubbletea multi-select checkbox interface instead of survey prompts - Interactive TUI for
init— target selection inskillshare initnow uses a bubbletea checklist with descriptions instead of survey multi-select - Skill registry separation — installed skill metadata moved from
config.yamltoregistry.yaml;config.yamlremains focused on user settings (targets, audit thresholds, custom targets); silent auto-migration on first v0.16.0 run — no user action required - Project-mode skills for this repo —
.skillshare/skills/ships 5 built-in project skills for contributors:cli-e2e-test,codebase-audit,implement-feature,update-docs,changelog; install withskillshare sync -pin the repo - Restore validation preview — Web UI restore modal now shows a pre-restore validation with conflict warnings, backup size, and symlink detection before committing (
POST /api/restore/validate) - Expanded detail panel in
listTUI — detail view now includes word-wrapped description and license field
Changed
- CLI visual language overhaul — all single-item operations (install, update, check) now use a consistent hierarchical layout with structured labels (
Source:,Items:,Skill:) and adaptive spinners; audit findings section only appears when findings exist checksingle-skill output — single skill/repo checks now use the same hierarchical tree layout asupdatewith spinner and step results instead of a progress barchecksummarizes clean results — up-to-date and local-only skills are now shown as summary counts (e.g., "3 up to date, 2 local") instead of listing each one individually- Symlink compat hint moved to
doctor— per-target mode hints removed fromsyncoutput;doctornow shows a universal symlink compatibility notice when relevant targets are configured - Web UI migrated to TanStack Query — all API calls use
@tanstack/react-querywith automatic caching, deduplication, and background refetching; Skills page uses virtual scrolling for large collections - Deprecated
openclaudetarget removed — replaced byopenclaw; existing configs usingopenclaudeshould update toopenclaw
Fixed
- Infinite loop in directory picker for large repos — bubbletea directory picker now handles repos with many subdirectories without hanging
- Leading slash in subdir path breaks tree hash lookup —
checknow normalizes//skills/footoskills/foofor consistent path matching update --allin project mode skipped nested skills — recursive skill discovery now enabled for project-modeupdate --all- Batch update path duplication —
update --allnow uses caller-provided destination paths to prevent doubled path segments file://URL subdir extraction —install file:///path/to/repo//subdirnow correctly extracts subdirectories via the//separator- Git clone progress missing in batch update — progress output now wired through to batch update operations
- Backup restore with symlinks —
ValidateRestorenow usesos.Lstatto correctly detect symlink targets instead of following them
[0.15.5] - 2026-02-23
Added
init --modeflag —skillshare init --mode copy(or-m copy) sets the default sync mode for all targets at init time; in interactive mode (TTY), a prompt offers merge / copy / symlink selection;init --discover --mode copyapplies the mode only to newly added targets, leaving existing targets unchanged (closes #42)- Per-target sync mode hint — after
syncanddoctor, a contextual hint suggestscopymode for targets known to have symlink compatibility issues (Cursor, Antigravity, Copilot, OpenCode); suppressed when only symlink-compatible targets are configured uninstall --all— remove all skills from source in one command; requires confirmation unless--forceis set; works in both global and project mode
Changed
- Improved CLI output — compact grouped audit findings (
× Ndedup), structured section labels, lighter update headers
Fixed
- Orphan real directories not pruned after uninstall —
syncin merge mode now writes.skillshare-manifest.jsonto track managed skills; afteruninstall, orphan directories (non-symlinks) that appear in the manifest are safely removed instead of kept with "unknown directory" warnings; user-created directories not in the manifest are still preserved (fixes #45) - Exclude filter not removing managed real directories — changing
excludepatterns now correctly prunes previously-managed real directories (not just symlinks) from targets; manifest entries are cleaned up to prevent stale ownership - MultiSelect filter text cleared after selection — filter text is now preserved after selecting an item in interactive prompts (e.g.,
installskill picker)
[0.15.4] - 2026-02-23
Added
- Post-update security audit gate —
skillshare updatenow runs a security audit after pulling tracked repositories; findings at or above the active threshold trigger rollback/block; interactive mode prompts for confirmation, non-interactive mode (CI) fails closed; use--skip-auditto bypass - Post-install audit gate for
--track—skillshare install --trackand tracked repo updates now run the same threshold-based security gate; fresh installs are removed on block, updates are rolled back viagit reset; use--skip-auditto bypass - Threshold override flags on
update—skillshare updatenow supports--audit-threshold,--threshold,-T(including shorthand aliases like-T h) for per-command blocking policy --diffflag forupdate—skillshare update team-skills --diffshows a file-level change summary after update; for tracked repos, includes line counts viagit diff; for regular skills, uses file hash comparison to show added/modified/deleted files- Content hash pinning —
installandupdatenow record SHA-256 hashes of all skill files in.skillshare-meta.json; subsequentauditruns detect tampering (content-tampered), missing files (content-missing), and unexpected files (content-unexpected) source-repository-linkaudit rule (HIGH) — detects markdown links labeled "source repo" or "source repository" pointing to external URLs, which may be used for supply-chain redirect attacks- Structural markdown link parsing for audit — audit rules now use a full markdown parser instead of regex, correctly handling inline links with titles, reference-style links, autolinks, and HTML anchors while skipping code fences, inline code spans, and image links; reduces false positives in
external-linkandsource-repository-linkrules (extends link-audit foundation from #39) - Severity-based risk floor — audit risk label is now the higher of the score-based label and a floor derived from the most severe finding (e.g., a single HIGH finding always gets at least a
highrisk label) - Severity-based color ramp — audit output now uses consistent color coding: CRITICAL → red, HIGH → orange, MEDIUM → yellow, LOW/INFO → gray; applies to batch summary, severity counts, and single-skill risk labels
- Audit risk score in
updateoutput — CLI and Web UI now display the risk label and score (e.g., "Security: LOW (12/100)") after updating regular skills; Web UI toast notifications include the same information for all update types
Fixed
- Uninstall group directory config cleanup — uninstalling a group directory (e.g.,
frontend/) now properly removes member skill entries (e.g.,frontend/react,frontend/vue) fromconfig.yamlvia prefix matching - Batch
update --allerror propagation — repos blocked by the security audit gate now count as "Blocked" in the batch summary and cause non-zero exit code --skip-auditpassthrough — the flag is now consistently honored for both tracked repos and regular skills duringupdateandinstall- Server rollback error reporting — Web UI update endpoint now implements post-pull threshold gate with automatic rollback on findings at/above threshold
- Audit rollback error accuracy — rollback failures now report whether the reset succeeded ("rolled back") or failed ("malicious content may remain") instead of silently ignoring errors
- Audit error propagation — file hash computation now propagates walk/hash errors instead of silently skipping, ensuring complete integrity baselines
[0.15.3] - 2026-02-22
Added
- Multi-name and
--groupforaudit—skillshare audit a b cscans multiple skills at once;--group/-Gflag scans all skills in a group directory (repeatable); names and groups can be mixed freely (e.g.skillshare audit my-skill -G frontend) external-linkaudit rule (closes #38) — newexternal-link-0rule (LOW severity) detects external URLs in markdown links ([text](https://...)) that may indicate prompt injection vectors or unnecessary token consumption; localhost and loopback links are excluded; completes #38 together with dangling-link detection from v0.15.1 (supersedes #39)- Auth tokens for hub search —
search --hubnow automatically usesGITHUB_TOKEN,GITLAB_TOKEN,BITBUCKET_TOKEN, orSKILLSHARE_GIT_TOKENwhen fetching private hub indexes; no extra configuration needed
Changed
pullmerges by default — when both local and remote have skills on first pull,pullnow attempts a git merge instead of failing; if the merge has conflicts, it stops with guidance;--forcestill replaces local with remote- Parallel audit scanning —
skillshare audit(all-skills scan) now runs up to 8 concurrent workers for faster results in both CLI and Web UI
Fixed
auditresolves nested skill names —skillshare audit nested__skillnow correctly finds skills by flat name or basename with short-name fallback- CodeX SKILL.md description over 1024 chars (fixes #40) — built-in skill description trimmed to stay within CodeX's 1024-character limit
[0.15.2] - 2026-02-22
Added
--auditflag forhub index—skillshare hub index --auditenriches the index with per-skill risk scores (0–100) and risk labels so teammates can assess skill safety before installing;searchdisplays risk badges in hub results; schema stays v1 with optional fields (omitted when--auditis not used)
Changed
hub index --auditparallel scanning — audit scans now run concurrently (up to 8 workers) for faster index generation on large skill collections
Fixed
init --remotetiming — initial commit is now deferred to after skill installation, preventing "Local changes detected" errors on firstpull; re-runninginit --remoteon existing config handles edge cases with proper timeout and error recovery- Auth error messages for
push/pull— authentication failures now show actionable hints (SSH URL, token env vars, credential helper) instead of misleading "pull first" advice; includes platform-specific syntax (PowerShell on Windows,exporton Unix) and links to docs with required token scopes per platform (GitLab, Bitbucket) - Git output parsing on non-English systems —
push,pull, andinitnow setLC_ALL=Cto force English git output, preventing locale-dependent string matching failures (e.g. "nothing to commit" not detected on Chinese/Japanese systems) - Skill version double prefix — versions like
v0.15.0in SKILL.md frontmatter no longer display asvv0.15.0
[0.15.1] - 2026-02-21
Added
- Dangling link detection in audit —
skillshare auditnow checks.mdfiles for broken local relative links (missing files or directories); producesLOWseverity findings with patterndangling-link; disable viaaudit-rules.yamlwith- id: dangling-link/enabled: false
Fixed
push/pullfirst-sync and remote flow — overhauledinit --remote,push, andpullto handle edge cases: re-runninginit --remoteon an existing config, pushing/pulling when remote has no commits yet, and conflicting remote URLs- Partial project init recovery — if
.skillshare/exists butconfig.yamlis missing, commands now repair config instead of failing
[0.15.0] - 2026-02-21
Added
- Copy sync mode —
skillshare target <name> --mode copysyncs skills as real files instead of symlinks, for AI CLIs that can't follow symlinks (e.g. Cursor, Copilot CLI); uses SHA256 checksums for incremental updates;sync --forcere-copies all; existing targets can switch between merge/copy/symlink at any time (#31, #2) - Private repo support via HTTPS tokens —
installandupdatenow auto-detectGITHUB_TOKEN,GITLAB_TOKEN,BITBUCKET_TOKEN, orSKILLSHARE_GIT_TOKENfor HTTPS clone/pull; no manual git config needed; tokens are never written to disk - Better auth error messages — auth failures now tell you whether the issue is "no token found" (with setup suggestions) or "token rejected" (check permissions/expiry); token values are redacted in output
Fixed
diffnow detects content changes in copy mode — previously only checked symlink presence; now compares file checksumsdoctorno longer flags copy-managed skills as duplicatestarget removein project mode cleans up copy manifest- Copy mode no longer fails on stray files in target directories or missing target paths
updateandchecknow honor HTTPS token auth — private repo pull/remote checks now auto-detectGITHUB_TOKEN,GITLAB_TOKEN,BITBUCKET_TOKEN, andSKILLSHARE_GIT_TOKEN(same as install)- Devcontainer project mode no longer pollutes workspace root —
sskeeps caller working directory and redirects-pfrom/workspaceto demo project - Project mode auto-repairs partial initialization — if
.skillshare/exists butconfig.yamlis missing, commands repair config instead of failing with "project already initialized"
Changed
agentstarget renamed touniversal— existing configs usingagentscontinue to work (backward-compatible alias); Kimi and Replit paths updated to match upstream docsGITHUB_TOKENnow used for HTTPS clone — previously only used for GitHub API (search, upgrade); now also used when cloning private repos over HTTPS
[0.14.2] - 2026-02-20
Added
- Multi-name and
--groupforupdate—skillshare update a b cupdates multiple skills at once;--group/-Gflag expands a group directory to all updatable skills within it (repeatable); positional names that match a group directory are auto-detected and expanded; names and groups can be mixed freely - Multi-name and
--groupforcheck—skillshare check a b cchecks only specified skills;--group/-Gflag works identically toupdate; no args = check all (existing behavior preserved); filtered mode includes a loading spinner for network operations - Security guide — new
docs/guides/security.mdcovering audit rules,.skillignore, and safe install practices; cross-referenced from audit command docs and best practices guide
Changed
- Docs diagrams migrated to Mermaid SVG — replaced ASCII box-drawing diagrams across 10+ command docs with Mermaid
handDrawnlook for better rendering and maintainability - Hub docs repositioned — hub documentation reframed as organization-first with private source examples
- Docker/devcontainer unified — consolidated version definitions, init scripts, and added
sandbox-logstarget; devcontainer now includes Node.js 24, auto-start dev servers, and adev-serversmanager script
[0.14.1] - 2026-02-19
Added
- Config YAML Schema — JSON Schema files for both global
config.yamland project.skillshare/config.yaml; enables IDE autocompletion, validation, and hover documentation via YAML Language Server;Save()automatically prepends# yaml-language-server: $schema=...directive; new configs fromskillshare initinclude the directive out of the box; existing configs get it on next save (any mutating command)
[0.14.0] - 2026-02-18
Added
- Global skill manifest —
config.yamlnow supports askills:section in global mode (previously project-only);skillshare install(no args) installs all listed skills; auto-reconcile keeps the manifest in sync after install/uninstall .skillignorefile — repo-level file to hide skills from discovery during install; supports exact match and trailing wildcard patterns; group matching via path-based comparison (e.g.feature-radarexcludes all skills under that directory)--excludeflag for install — skip specific skills during multi-skill install; filters before the interactive prompt so excluded skills never appear- License display in install — shows SKILL.md
licensefrontmatter in selection prompts and single-skill confirmation screen - Multi-skill and group uninstall —
skillshare uninstallaccepts multiple skill names and a repeatable--group/-Gflag for batch removal; groups use prefix matching; problematic skills are skipped with warnings; group directories auto-detected with sub-skill listing in confirmation prompt groupfield in skill manifest — explicitgroupfield separates placement from identity (previously encoded asname: frontend/pdf); automatic migration of legacy slash-in-name entries; both global and project reconcilers updated- 6 new audit security rules — detection for
eval/exec/Functiondynamic code, Python shell execution,process.envleaking, prompt injection in HTML comments, hex/unicode escape obfuscation; each rule includes false-positive guards - Firebender target — coding agent for JetBrains IDEs; paths:
~/.firebender/skills(global),.firebender/skills(project); target count now 49+ - Declarative manifest docs — new concept page and URL formats reference page
Fixed
- Agent target paths synced with upstream — antigravity:
global_skills→skills; augment:rules→skills; goose project:.agents/skills→.goose/skills - Docusaurus relative doc links — added
.mdextension to prevent 404s when navigating via navbar
Changed
- Website docs restructured — scenario-driven "What do you want to do?" navigation on all 9 section index pages; standardized "When to Use" and "See Also" sections across all 24 command docs; role-based paths in intro; "What Just Happened?" explainer in getting-started
- Install integration tests split by concern — tests reorganized into
install_basic,install_discovery,install_filtering,install_selection, andinstall_helpersfor maintainability
[0.13.0] - 2026-02-16
Added
- Skill-level
targetsfield — SKILL.md frontmatter now accepts atargetslist to restrict which targets a skill syncs to;checkvalidates unknown target names - Target filter CLI —
target <name> --add-include/--add-exclude/--remove-include/--remove-excludefor inline filter editing; Web UI inline filter editor on Targets page - XDG Base Directory support — respect
XDG_CONFIG_HOME,XDG_DATA_HOME,XDG_STATE_HOME; backups/trash stored in data dir, logs in state dir; automatic migration from legacy layout on first run - Windows legacy path migration — existing Windows installs at
~\.config\skillshare\are auto-migrated to%AppData%\skillshare\with config source path rewrite - Fuzzy subdirectory resolution —
install owner/repo/skill-namenow fuzzy-matches nested skill directories by basename when exact path doesn't exist, with ambiguity error for multiple matches listgrouped display — skills are grouped by directory with tree-style formatting;--verbose/-vflag for detailed output- Runtime UI download —
skillshare uidownloads frontend assets from GitHub Releases on first launch and caches at~/.cache/skillshare/ui/<version>/;--clear-cacheto reset;upgradepre-downloads UI assets
Changed
- Unified project target names — project targets now use the same short names as global (e.g.
claudeinstead ofclaude-code); old names preserved as aliases for backward compatibility - Binary no longer embeds UI — removed
go:embedand build tags; UI served exclusively from disk cache, reducing binary size - Docker images simplified — production and CI Dockerfiles no longer include Node build stages
Fixed
- Windows
DataDir()/StateDir()paths — now correctly fall back to%AppData%instead of Unix-style~/.local/paths - Migration result reporting — structured
MigrationResultwith status tracking; migration outcomes printed at startup - Orphan external symlinks after data migration —
syncnow auto-removes broken external symlinks (e.g. leftover from XDG/Windows path migration);--forceremoves all external symlinks; path comparison uses case-insensitive matching on Windows
Breaking Changes
- Windows paths relocated — config/data moves from
%USERPROFILE%\.config\skillshare\to%AppData%\skillshare\(auto-migrated) - XDG data/state split (macOS/Linux) — backups and trash move from
~/.config/skillshare/to~/.local/share/skillshare/; logs move to~/.local/state/skillshare/(auto-migrated) - Project target names changed —
claude-code→claude,gemini-cli→gemini, etc. (old names still work via aliases)
[0.12.6] - 2026-02-13
Added
- Per-target include/exclude filters (merge mode) —
include/excludeglob patterns are now supported in both global and project target configs - Comprehensive filter test coverage — added unit + integration tests for include-only, exclude-only, include+exclude precedence, invalid patterns, and prune behavior
- Project mode support for
doctor—doctornow supports auto-detect project mode plus explicit--project/--global
Changed
- Filter-aware diagnostics —
sync,diff,status,doctor, API drift checks, and Web UI target counts now compute expected skills using include/exclude filters - Web UI config freshness — UI API now auto-reloads config on requests, so browser refresh reflects latest
config.yamlwithout restartingskillshare ui - Documentation expanded — added practical include/exclude strategy guidance, examples, and project-mode
doctorusage notes
Fixed
- Exclude pruning behavior in merge mode — when a previously synced source-linked entry becomes excluded,
syncnow unlinks/removes it; existing local non-symlink target folders are preserved - Project
doctorbackup/trash reporting — now uses project-aware semantics (backups not used in project mode, trash checked from.skillshare/trash)
[0.12.5] - 2026-02-13
Fixed
target removemerge mode symlink cleanup — CLI now correctly detects and removes all skillshare-managed symlinks using path prefix matching instead of exact name matching; fixes nested/orphaned symlinks being left behindtarget removein Web UI — server API now handles merge mode targets (previously only cleaned up symlink mode)
[0.12.4] - 2026-02-13
Added
- Graceful shutdown — HTTP server handles SIGTERM/SIGINT with 10s drain period, safe for container orchestrators
- Server timeouts — ReadHeaderTimeout (5s), ReadTimeout (15s), WriteTimeout (30s), IdleTimeout (60s) prevent slow-client resource exhaustion
- Enhanced health endpoint —
/api/healthnow returnsversionanduptime_seconds - Production Docker image (
docker/production/Dockerfile) — multi-stage build,tiniPID 1, non-root user (UID 10001), auto-init entrypoint, healthcheck - CI Docker image (
docker/ci/Dockerfile) — minimal image forskillshare auditin pipelines - Docker dev profile —
make dev-docker-upruns Go API server in Docker for frontend development without local Go - Multi-arch Docker build —
make docker-build-multiarchproduces linux/amd64 + linux/arm64 images - Docker publish workflow (
.github/workflows/docker-publish.yml) — auto-builds and pushes production + CI images to GHCR on tag push make sandbox-status— show playground container status
Changed
- Compose security hardening — playground:
read_only,cap_drop: ALL,tmpfswith exec; all profiles:no-new-privileges, resource limits (2 CPU / 2G) - Test scripts DRY —
test_docker.shaccepts--onlineflag;test_docker_online.shis now a thin wrapper - Compose version check —
_sandbox_common.shverifies Docker Compose v2.20+ with platform-specific install hints .dockerignoreexpanded — excludes.github/,website/, editor temp files- Git command timeout — increased from 60s to 180s for constrained Docker/CI networks
- Online test timeout — increased from 120s to 300s
Fixed
- Sandbox
chmodfailure — playground volume init now uses--cap-add ALLto work withcap_drop: ALL - Dev profile crash on first run — auto-runs
skillshare initbefore starting UI server - Sandbox Dockerfile missing
curl— added for playground healthcheck
[0.12.2] - 2026-02-13
Fixed
- Hub search returns all results — hub/index search no longer capped at 20;
limit=0means no limit (GitHub search default unchanged) - Search filter ghost cards — replaced IIFE rendering with
useMemoto fix stale DOM when filtering results
Added
- Scroll-to-load in Web UI — search results render 20 at a time with IntersectionObserver-based incremental loading
[0.12.1] - 2026-02-13
Added
- Hub persistence — saved hubs stored in
config.yaml(both global and project), shared between CLI and Web UIhub add <url>— save a hub source (--labelto name it; first add auto-sets as default)hub list— list saved hubs (*marks default)hub remove <label>— remove a saved hubhub default [label]— show or set the default hub (--resetto clear)- All subcommands support
--project/--globalmode
- Hub label resolution in search —
search --hub <label>resolves saved hub labels instead of requiring full URLssearch --hub teamlooks up the "team" hub from configsearch --hub(bare) uses the config default, falling back to community hub
- Hub saved API — REST endpoints for hub CRUD (
GET/PUT/POST/DELETE /api/hub/saved) - Web UI hub persistence — hub list and default hub now persisted on server instead of browser localStorage
- Search fuzzy filter — hub search results filtered by fuzzy match on name + substring match on description and tags
- Tag badges in search —
#tagbadges displayed in both CLI interactive selector and Web UI hub search results - Web UI tag filter — inline filter input on hub search cards matching name, description, and tags
Changed
search --hub(bare flag) now defaults to community skillshare-hub instead of requiring a URL- Web UI SearchPage migrated from localStorage to server API for hub state
Fixed
audit <path>no longer fails with "config not found" in CI environments without a skillshare config
[0.12.0] - 2026-02-13
Added
- Hub index generation —
skillshare hub indexbuilds askillshare-hub.jsonfrom installed skills for private or team catalogs--fullincludes extended metadata (flatName, type, version, repoUrl, installedAt)--output/-oto customize output path;--source/-sto override scan directory- Supports both global and project mode (
-p/-g)
- Private index search —
skillshare search --hub <url>searches a hub index (local file or HTTP URL) instead of GitHub- Browse all entries with no query, or fuzzy-match by name/description/tags/source
- Interactive install prompt with
sourceand optionalskillfield support
- Hub index schema —
schemaVersion: 1withtagsandskillfields for classification and multi-skill repo support - Web UI hub search — search private indexes from the dashboard with a hub URL dropdown
- Hub manager modal for adding, removing, and selecting saved hub URLs (persisted in localStorage)
- Web UI hub index API —
GET /api/hub/indexendpoint for generating indexes from the dashboard - Hub index guide and command reference in documentation
Fixed
hub indexhelp text referenced incorrect--index-urlflag (now--hub)- Frontend
SearchResultTypeScript interface missingtagsfield
[0.11.6] - 2026-02-11
Added
- Auto-pull on
init --remote— when remote has existing skills, init automatically fetches and syncs them; no manualgit cloneorgit pullneeded - Auto-commit on
git init—initcreates an initial commit (with.gitignore) sopush/pull/stashwork immediately - Git identity fallback — if
user.name/user.emailaren't configured, sets repo-local defaults (skillshare@local) with a hint to set your own - Git remote error hints —
push,pull, andinit --remotenow show actionable hints for SSH, URL, and network errors - Docker sandbox
--baremode —make sandbox-barestarts the playground without auto-init for manual testing - Docker sandbox
--volumesreset —make sandbox-resetremoves the playground home volume for a full reset
Changed
init --remoteauto-detection — global-only flags (--remote,--source, etc.) now skip project-mode auto-detection, soinit --remoteworks from any directory- Target multi-select labels — shortened to
name (status)for readability; paths shown during detection phase instead
Fixed
init --remoteon second machine no longer fails with "Local changes detected" or merge conflictsinit --remoteproduces clean linear git history (no merge commits from unrelated histories)- Pro tip message only shown when built-in skill is actually installed
[0.11.5] - 2026-02-11
Added
--intoflag for install — organize skills into subdirectories (skillshare install repo --into frontendplaces skills underskills/frontend/)- Nested skill support in check/update/uninstall — recursive directory walk detects skills in organizational folders;
updateanduninstallresolve short names (e.g.,update vuefindsfrontend/vue/vue-best-practices) - Configurable audit block threshold —
audit.block_thresholdin config sets which severity blocks install (defaultCRITICAL);audit --threshold <level>overrides per-command - Audit path scanning —
skillshare audit <path>scans arbitrary files or directories, not only installed skills - Audit JSON output —
skillshare audit --jsonfor machine-readable results with risk scores --skip-auditflag for install — bypass security scanning for a single install command- Risk scoring — weighted risk score and label (clean/low/medium/high/critical) per scanned skill
- LOW and INFO severity levels — lighter-weight findings that contribute to risk score without blocking
- IBM Bob target — added to supported AI CLIs (global:
~/.bob/skills, project:.bob/skills) - JS/TS syntax highlighting in file viewer — Web UI highlights
.js,.ts,.jsx,.tsxfiles with CodeMirror - Project init agent grouping — agents sharing the same project skills path (Amp, Codex, Copilot, Gemini, Goose, etc.) are collapsed into a single selectable group entry
Changed
- Goose project path updated from
.goose/skillsto.agents/skills(universal agent directory convention) - Audit summary includes all severity levels — LOW/INFO counts, risk score, and threshold shown in summary box and log entries
Fixed
- Web UI nested skill update now uses full relative path instead of basename only
- YAML block scalar frontmatter (
>-,|,|-) parsed correctly in skill detail view - CodeMirror used for all non-markdown files in file viewer (previously plain
<pre>)
[0.11.4] - 2026-02-11
Added
- Customizable audit rules —
audit-rules.yamlexternalizes security rules for user overrides- Three-layer merge: built-in → global (
~/.config/skillshare/audit-rules.yaml) → project (.skillshare/audit-rules.yaml) - Add custom rules, override severity, or disable built-in rules per-project
skillshare audit --init-rulesto scaffold a starter rules file
- Three-layer merge: built-in → global (
- Web UI Audit Rules page — create, edit, toggle, and delete rules from the dashboard
- Log filtering — filter operation/audit logs by status, command, or keyword; custom dropdown component
- Docker playground audit demo — pre-loaded demo skills and custom rules for hands-on audit exploration
Changed
- Built-in skill is now opt-in —
initandupgradeno longer install the built-in skill by default; use--skillto include it - HIGH findings reclassified as warnings — only CRITICAL findings block
install; HIGH/MEDIUM are shown as warnings - Integration tests split into offline (
!online) and online (online) build tags for faster local runs
[0.11.0] - 2026-02-10
Added
- Security Audit —
skillshare audit [name]scans skills for prompt injection, data exfiltration, credential access, destructive commands, obfuscation, and suspicious URLs- CRITICAL findings block
skillshare installby default; use--forceto override - HIGH/MEDIUM findings shown as warnings with file, line, and snippet detail
- Per-skill progress display with tree-formatted findings and summary box
- Project mode support (
skillshare audit -p)
- CRITICAL findings block
- Web UI Audit page — scan all skills from the dashboard, view findings with severity badges
- Install flow shows
ConfirmDialogon CRITICAL block with "Force Install" option - Warning dialog displays HIGH/MEDIUM findings after successful install
- Install flow shows
- Audit API —
GET /api/auditandGET /api/audit/{name}endpoints - Operation log (persistent audit trail) — JSONL-based operations/audit logging across CLI + API + Web UI
- CLI:
skillshare log(--audit,--tail,--clear,-p/-g) - API: log list/clear endpoints for operations and audit streams
- Web UI: Log page with tabs, filters, status/duration formatting, and clear/refresh actions
- CLI:
- Sync drift detection —
statusanddoctorwarn when targets have fewer linked skills than source- Web UI shows drift badges on Dashboard and Targets pages
- Trash (soft-delete) workflow — uninstall now moves skills to trash with 7-day retention
- New CLI commands:
skillshare trash list,skillshare trash restore <name>,skillshare trash delete <name>,skillshare trash empty - Web UI Trash page for list/restore/delete/empty actions
- Trash API handlers with global/project mode support
- New CLI commands:
- Update preview command —
skillshare checkshows available updates for tracked repos and installed skills without modifying files - Search ranking upgrade — relevance scoring now combines name/description/stars with repo-scoped query support (
owner/repo[/subdir]) - Docs site local search — Docusaurus local search integrated for command/doc lookup
- SSH subpath support —
install git@host:repo.git//subdirwith//separator - Docs comparison guide — new declarative vs imperative workflow comparison page
Changed
- Install discovery + selection UX
- Hidden directory scan now skips only
.git(supports repos using folders like.curated/and.system/) install --skillfalls back to fuzzy matching when exact name lookup fails- UI SkillPicker adds filter input and filtered Select All behavior for large result sets
- Batch install feedback improved: summary toast always shown; blocked-skill retry targets only blocked items
- CLI mixed-result installs now use warning output and condensed success summaries
- Hidden directory scan now skips only
- Search performance + metadata enrichment — star/description enrichment is parallelized, and description frontmatter is used in scoring
- Skill template refresh —
newcommand template updated to a WHAT+WHEN trigger format with step-based instructions - Search command UX — running
searchwith no keyword now prompts for input instead of auto-browsing - Sandbox hardening — playground shell defaults to home and mounts source read-only to reduce accidental host edits
- Project mode clarity —
(project)labels added across key command outputs; uninstall prompt now explicitly says "from the project?" - Project tracked-repo workflow reliability
ProjectSkillnow supportstracked: truefor portable project manifests- Reconcile logic now detects tracked repos via
.git+ remote origin even when metadata files are absent - Tracked repo naming uses
owner-repostyle (for example,_openai-skills) to avoid basename collisions - Project
listnow uses recursive skill discovery for parity with global mode and Web UI
- Privacy-first messaging + UI polish — homepage/README messaging updated, dashboard quick actions aligned, and website hero/logo refreshed with a new hand-drawn style
ConfirmDialogcomponent supportswideprop and hidden cancel button- Sidebar category renamed from "Utilities" to "Security & Utilities"
- README updated with audit section, new screenshots, unified image sizes
- Documentation links and navigation updated across README/website
Fixed
- Web UI uninstall handlers now use trash move semantics instead of permanent deletion
- Windows self-upgrade now shows a clear locked-binary hint when rename fails (for example, when
skillshare uiis still running) mise.tomlui:buildpath handling fixed socd uidoes not leak into subsequent build steps- Sync log details now include target count, fixing blank details in some entries
- Project tracked repos are no longer skipped during reconcile when metadata is missing
[0.10.0] - 2026-02-08
Added
- Web Dashboard —
skillshare uilaunches a full-featured React SPA embedded in the binary- Dashboard overview with skill/target counts, sync mode, and version check
- Skills browser with search, filter, SKILL.md viewer, and uninstall
- Targets page with status badges, add/remove targets
- Sync controls with dry-run/force toggles and diff preview
- Collect page to scan and pick skills from targets back to source
- GitHub skill search with one-click install and batch install
- Config editor with YAML validation
- Backup/restore management with cleanup
- Git sync page with push/pull, dirty-file detection, and force-pull
- Install page supporting path, git URL, and GitHub shorthand inputs
- Update tracked repos from the UI with commit/diff details
- REST API at
/api/*— Gonet/httpbackend (30+ endpoints) powering the dashboard - Single-binary distribution — React frontend embedded via
go:embed, no Node.js required at runtime - Dev mode —
go build -tags devserves placeholder SPA; use Vite on:5173with/apiproxy for hot reload internal/git/info.go— git operations library (pull with change info, force-pull, dirty detection, stage/commit/push)internal/version/skill.go— local and remote skill version checking- Bitbucket/GitLab URL support —
installnow strips branch prefixes from Bitbucket (src/{branch}/) and GitLab (-/tree/{branch}/) web URLs internal/utils/frontmatter.go—ParseFrontmatterField()utility for reading SKILL.md metadata- Integration tests for
skillshare uiserver startup - Docker sandbox support for web UI (
--host 0.0.0.0, port 19420 mapping) - CI: frontend build step in release and test workflows
- Website documentation for
uicommand
Changed
- Makefile updated with
ui-build,build-ui,ui-devtargets .goreleaser.yamlupdated to include frontend build in release pipeline- Docker sandbox Dockerfile uses multi-stage build with Node.js for frontend assets
[0.9.0] - 2026-02-05
Added
- Project-level skills — scope skills to a single repository, shared via git
skillshare init -pto initialize project mode.skillshare/directory withconfig.yaml,skills/, and.gitignore- All core commands support
-pflag:sync,install,uninstall,update,list,status,target,collect
- Auto-detection — commands automatically switch to project mode when
.skillshare/config.yamlexists - Per-target sync mode for project mode — each target can use
mergeorsymlinkindependently --discoverflag — detect and add new AI CLI targets to existing project config- Tracked repos in project mode —
install --track -pclones repos into.skillshare/skills/ - Integration tests for all project mode commands
Changed
- Terminology: "Team Sharing" → "Organization-Wide Skills", "Team Edition" → "Organization Skills"
- Documentation restructured with dual-level architecture (Organization + Project)
- Unified project sync output format with global sync
[0.8.0] - 2026-01-31
Breaking Changes
Command Rename: pull <target> → collect <target>
For clearer command symmetry, pull is now exclusively for git operations:
| Before | After | Description |
|---|---|---|
pull claude | collect claude | Collect skills from target to source |
pull --all | collect --all | Collect from all targets |
pull --remote | pull | Pull from git remote |
New Command Symmetry
| Operation | Commands | Direction |
|---|---|---|
| Local sync | sync / collect | Source ↔ Targets |
| Remote sync | push / pull | Source ↔ Git Remote |
Remote (git)
↑ push ↓ pull
Source
↓ sync ↑ collect
Targets
Migration
# Before
skillshare pull claude
skillshare pull --remote
# After
skillshare collect claude
skillshare pull
[0.7.0] - 2026-01-31
Added
- Full Windows support (NTFS junctions, zip downloads, self-upgrade)
searchcommand to discover skills from GitHub- Interactive skill selector for search results
Changed
- Windows uses NTFS junctions instead of symlinks (no admin required)
[0.6.0] - 2026-01-20
Added
- Team Edition with tracked repositories
--trackflag forinstallcommandupdatecommand for tracked repos- Nested skill support with
__separator
[0.5.0] - 2026-01-16
Added
newcommand to create skills with templatedoctorcommand for diagnosticsupgradecommand for self-upgrade
Changed
- Improved sync output with detailed statistics
[0.4.0] - 2026-01-16
Added
diffcommand to show differencesbackupandrestorecommands- Automatic backup before sync
Changed
- Default sync mode changed to
merge
[0.3.0] - 2026-01-15
Added
pushandpull --remotefor cross-machine sync- Git integration in
initcommand
[0.2.0] - 2026-01-14
Added
installanduninstallcommands- Support for git repo installation
target addandtarget removecommands
[0.1.0] - 2026-01-14
Added
- Initial release
init,sync,status,listcommands- Symlink and merge sync modes
- Multi-target support