skillshare v0.21.4 Release Notes
TL;DR
- Add a plugin now, choose Agents later. Keep a plugin in Skillshare without installing it anywhere, and pick the Agents when you are ready.
- Keep an MCP server without sending it to any Agent. Take a server out of use for a while and keep its settings.
- Turning a global MCP server off in one project now follows that project's Agents. It used to be written for Agents the project does not use.
- Set other
pi-mcp-adapterfields from Skillshare withpiOptions, such asexcludeToolsandapproveTools. - An MCP entry left behind by a deleted configuration can be taken over. The conflict used to name a file that was no longer there and offer no way out.
- Pi and OpenCode stop refusing plugins over their package name, and installing a plugin no longer reindents your
config.yaml.
Add a plugin without choosing Agents yet
Sometimes you want a plugin recorded before you have decided who should get it. Leave every Agent unticked in Add plugin and it stays in Skillshare, installed nowhere. Its row shows No Agents yet; tick an Agent there when you want it, and the install uses the source as it is at that moment, not as it was when you added it.
In the terminal, leave out --target, or confirm the picker with nothing selected:
skillshare plugin add ./my-plugin --no-tui # keep it in Skillshare; choose targets laterA plugin added this way stays managed when its last Agent is removed, so it does not disappear the moment you uninstall it everywhere. To drop it from Skillshare entirely:
skillshare plugin remove my-plugin # no --target; removes it once no Agent holds itThe plugin list also shows each version as a tag next to the name. After Check updates, a plugin whose source moved on shows 1.0.0 → 1.1.0 both in the list and in the preview.
Keep an MCP server without any Agent
A server had to go to at least one Agent, so the only way to stop using one everywhere was to delete it and type its settings again later. Untick every Agent in the server dialog and the server now stays in Skillshare while no Agent receives it. The next sync removes the entries it had, and ticking an Agent brings it back. Servers inside a project work the same way.
skillshare mcp edit context7 --target none # stays in Skillshare, written to no AgentIn config.yaml this is an empty list, targets: []. Leaving targets out still means "use the defaults", as before.
Turning a global server off in one project
A project can turn off a server that an Agent's global config defines. From the dashboard, that switch was saved with every Agent the global server reaches, including Agents the project does not use, and the saved list went stale as soon as the project's targets changed.
The switch no longer stores a list. It applies to the Agents the project uses that have a per-project switch: Claude Code, OpenCode, Kilo Code, and Pi with pi-mcp-adapter. Change the project's targets and the switch follows.
The project's MCP tab is also easier to read. A server that is off shows the logos of the Agents it is off in. When one of the project's Agents has no per-project switch, the row says the server still loads there. An entry saved by an earlier version gets Match the project, which updates it in one click.
The Sync page had its own confusion here. Claude Code keeps a project's switch in ~/.claude.json, so the change looked like the global server being added or removed in that file. It now says that the server is turned off or back on, and names the project.
Thanks to the reporter of #289, whose list this and several other fixes below came from.
Other pi-mcp-adapter settings
The adapter has per-server fields that Skillshare has no setting for, such as excludeTools and approveTools. They could only live in Pi's own file, on one machine. Put them under piOptions and Skillshare writes them into the server's entry as given:
piOptions:
excludeTools: ["*emulator*"]
approveTools: ["delete_*", "merge_pull_request"]skillshare mcp edit github --pi-options '{"excludeTools":["*emulator*"]}'The server dialog has a JSON box for them under Direct tools. It refuses text that is not a JSON object, and fields Skillshare already writes itself. Two things to know: the values are copied literally, so keep credentials in env or headers; and a field you remove from piOptions stays in Pi's file until you delete it there.
Picking individual tools for Direct tools needs no JSON. Choose Only these tools and type the names.
MCP entries left behind by a deleted configuration
Skillshare remembers which of your configurations wrote each MCP entry in an Agent's own config file, so two configurations can never quietly fight over the same server. If one of them tried to manage an entry another had written, you got a conflict naming the owning configuration, and only that configuration could release it.
That was the wrong answer when the owning configuration no longer existed. If you had renamed a project's .skillshare/ folder, moved a repository, or simply deleted an old setup, the conflict still pointed at a file you could not find, and the dashboard offered no way forward. The only apparent fix was to delete Skillshare's ownership state by hand, which quietly unmanages every other entry as well.
Such a conflict now says the entry is left over, names the configuration that is gone, and lets you settle it in place. Import from the Agent adopts the entry as it is; Replace with source overwrites it with yours. Both work in the terminal and from the conflict in the dashboard.
A configuration that merely cannot be read still counts as present — one on a drive that is not mounted has not gone anywhere, and its entries are not up for grabs.
Thanks to the reporter of #288 for the clear description.
Plugins that Pi and OpenCode can install
Both Agents install a package by path, so its name in package.json has no bearing on whether the install works. Two kinds of name were nonetheless treated as fatal:
- A scoped npm name such as
@owner/packagemade both Agents show the plugin as blocked. - A
package.jsonwith nonameat all blocked Pi, even when another manifest in the same folder named the plugin.
Both now install.
Your config.yaml keeps its indentation
Saving a plugin rewrote the whole configuration file with four-space indentation, which showed up as a large and unwanted diff in anything you version alongside it. Every YAML file Skillshare writes now uses two spaces — the configuration, skill and agent frontmatter, and audit-rules.yaml.
Smaller fixes
- OpenCode project settings kept in
.opencode/are used. A config file kept in that folder was ignored, and sync created a second one at the project root. - Agent logos show on Windows machines that report the wrong type for SVG files. A few larger logos, Antigravity among them, appeared as broken images.
- The dashboard follows your language in more places. enabled on the Skills page, In sync on the Extras page, the Kilo Code project warning and the error for an unreadable pasted snippet stayed in English.
- Going back to the global MCP targets asks first. It used to save at once and drop the project's own list.
skillshare upgradeshows download progress, so a slow connection no longer looks like a hang.