github runkids/skillshare v0.30.0

latest releases: v0.30.5, v0.30.4, v0.30.3...
2 days ago

skillshare v0.30.0 Release Notes

TL;DR

  1. The dashboard refuses changes from other websites. A page you visit can no longer install, sync, push or upgrade through your local dashboard.
  2. The dashboard answers only at addresses you trust. localhost, IP addresses and the --host name work as before; any other domain name gets 403 until you trust it. This is the breaking change in this release.
  3. Reverse proxies get full access with --trusted-origin. Every page, MCP, Hooks and Plugins included, works through the domain you list.
  4. Codex picks up plugins that ship only a Claude manifest.

Breaking: trust the address you open the dashboard at

If you open the dashboard by localhost, 127.0.0.1 or a LAN IP such as http://192.168.1.20:19420, nothing changes.

If you open it by a domain name, it now returns 403 on every page until you trust that address. That covers a reverse proxy such as https://skills.example.com, a Tailscale or mDNS name, a hosts-file alias, and a Docker service name used from another container. Stop the dashboard and start it again with the address you open, keeping your other flags:

skillshare ui stop
skillshare ui start --trusted-origin https://skills.example.com

For a service, set the environment variable instead; separate several origins with commas:

SKILLSHARE_UI_TRUSTED_ORIGINS=https://skills.example.com skillshare ui start

A browser that is refused shows a page with the exact setting to copy, and the server log names each refused address once.

Why: a DNS rebinding page points a domain it controls at your machine, which makes its requests look like they came from the dashboard itself. The dashboard cannot tell your domain from an attacker's, so it now answers only at addresses that cannot be rebound and the ones you list. (#811)

New: trusted origins behind a reverse proxy

--trusted-origin (repeatable) or SKILLSHARE_UI_TRUSTED_ORIGINS (comma-separated) lists the exact origins the dashboard answers at: a scheme and host, plus the port when it is not the default, such as https://skills.example.com or http://nas.local:8080.

  • Every page works through a trusted origin. MCP, Hooks and Plugins, which used to refuse any domain name, work too.
  • The setting comes only from the command line or the environment, never config.yaml, so the dashboard cannot widen its own trust. ui start and restarts from the dashboard keep it.
  • The proxy must keep the browser's Host header, including its port. The Nginx example now forwards $http_host; Caddy keeps Host by default.
  • Anyone who can reach a trusted address can use the whole dashboard, so restrict who can reach the proxy.

Thanks to @LloydPowell771 for the request. See Reverse Proxy. (#809, #811)

Fixed: changes sent from other websites

A web page could submit a form or a no-cors request to the local dashboard without a preflight. When the browser let the request through, it could add targets, install skills, sync them to every agent, commit and push the source repository, or upgrade skillshare. Every change, and the update stream, now must come from the dashboard itself. curl and other clients that send no browser headers work as before. (#810)

Fixed: Codex and Claude-only plugins

skillshare plugin now offers Codex a package that has only .claude-plugin/plugin.json, such as Matt Pocock's skills. Codex reads that manifest itself and uses the parts it supports, such as skills and MCP servers. A package with none of those, such as one with only agents, is not offered to Codex. An explicit .codex-plugin/plugin.json or Agent Plugins manifest still comes first, and skillshare does not rewrite the package.

Thanks to @nathanvale for the report and the fix. (#805, #806, #808)

Contributors

@nathanvale @LloydPowell771

Don't miss a new skillshare release

NewReleases is sending notifications on new releases.