skillshare v0.30.8 Release Notes
TL;DR
- MCP clients can browse skill folders.
mcp serveaddsresources/directory/readand lists eachSKILL.mdinresources/list. - Tracked repositories this machine has not cloned keep their records, so an
installandpushon that machine no longer remove them everywhere. - Fields under
metadatano longer replace a skill's ownname,descriptionortagsin search, audit and the hub index. - The dashboard Doctor page names the check that is still running instead of stopping at an unlabeled placeholder.
- The desktop app can start the dashboard in your exact theme, including Dark + Clean and Playful dark.
MCP: browse skill folders
skillshare mcp serve now implements the optional directory part of the MCP Skills extension, and passes all 45 checks of the official conformance suite for it. (#895, #905)
- The server advertises
directoryRead: true.resources/directory/readwith a URI such asskill://_team/tools/pdflists that folder's direct entries. Empty folders are listed with the MIME typeinode/directory, and a file or an unknown folder returns-32602. resources/listlists each servedSKILL.mdwith the name and description from its frontmatter.- Both lists are sorted by URI, return up to 100 entries per page and continue with
nextCursor, under the same selection and refresh rules asskills/list.
{"jsonrpc": "2.0", "id": 1, "method": "resources/directory/read", "params": {"uri": "skill://_team/tools/pdf"}}Frontmatter returned by the server now follows YAML 1.2 rules, the way clients read the file themselves. updated: 2026-11-14 stays the text "2026-11-14" instead of becoming "2026-11-14T00:00:00Z", and 012 is 12 instead of octal 10. If a client compares these values, expect them to change. A skill with such a date under metadata is no longer left out of the Executor index at /.well-known/agent-skills/.
Tracked repositories across machines
pull brings tracked repository records but not their checkouts, which are git-ignored. On a machine without the checkout, the next install dropped the record and its audit acceptances, and the next push removed the repository on every machine. Global reconcile now keeps those records. (#823, #880)
skillshare install -g # clone the missing checkouts
skillshare uninstall _team -g # or drop the record instead- Dropping a record without a checkout removes only the record and its audit acceptances. Nothing goes to trash, so
trash restorecannot undo it.uninstall --jsonlists such names underrecord_only. - In global mode,
unlinkalso forgets the record and acceptances kept for that link name. status,check,updateanddoctorsuggest both options. Project mode suggestsinstall -pas before.- In the dashboard, such a repository shows No checkout on this machine, and Uninstall removes only its record.
Uninstalling a tracked repository also used to remove repositories installed into its group. With _team checked out and team/_b (installed with --into team) not cloned on this machine, uninstall _team -g removed team/_b's record and acceptances, and the next push lost it on every machine. It now removes only _team. (#898, #900)
Skill frontmatter: metadata stays separate
Some readers scanned SKILL.md line by line and took a name, description or tags written under metadata: as the skill's own, so a nested value could appear in search results, audit findings or the hub index. They now read only top-level fields, and custom data under metadata is kept as it is. (#894, #901)
hub index and hub draft now read tags the same way. Both accept a comma-separated value and a YAML list, and both ignore tags under metadata. (#909)
tags: [git, workflow] # same as: tags: git, workflow
metadata:
tags: [internal] # custom data, not hub tagsDashboard: Doctor and theme
The Doctor page stopped at an unlabeled placeholder while a slow check ran, most often the plugin check that asks each agent's CLI what is installed, and the checks after it waited. The plugin check, the skill source scan and the Git status check now show as a row with their name and Checking while the later checks finish, and the result replaces the row. GET /api/doctor/stream sends these as pending rows. CLI output is unchanged. (#870, #889)
The desktop app passed its theme in one ?theme= value, which cannot say Dark + Clean or Playful dark. On Linux, where the embedded page's storage is not kept between launches, the dashboard started in another theme and reported it back as if you had picked it. The dashboard now accepts ?mode=dark|light and ?style=clean|playful, which win over ?theme=, and tells the embedding app when a page starts. This needs the matching desktop app update. (runkids/skillshare-app#128)