dsh-skill-panel
September 10, 2026 · View on GitHub
A DeepSeek Harness plugin. Adds a skill button to the sidebar. Clicking it opens a dialog that lists the skills loaded in the current session; hovering a row reveals a button that opens that skill's folder on disk.
Compatibility
Tested on DSH 0.1.5-rc.1 (web profile). Also runs on 0.1.2-rc.1 — those two
releases are what dsh.engines.dsh in package.json declares, so a host or
plugin manager can read the same range without parsing this file.
The plugin only uses documented plugin surfaces — the sidebar.footer.action
slot, remote.skills.list, and session.openWorkspacePath. It does not patch
DSH itself, so uninstalling it leaves nothing behind.
The folder button needs the host to expose SkillEntry.directoryPath. Stock DSH
does not expose it yet, so on a stock host the dialog still lists every skill
but the folder buttons stay hidden. (See Host-side
enhancement.)
Install
-
Add the plugin:
dsh plugin --profile web add github:lywusichen/dsh-skill-panel -
Restart DSH.
-
A skill icon appears at the bottom of the left sidebar, next to Settings. Click it to open the dialog.
What it does
- Lists the current session's skills: name, routing description, and a
user-onlybadge where applicable. The list is fetched per session and shares the composer's/skill cache. - Opens a skill's local directory in the host's default file manager.
- Keeps an open dialog in sync when skills change on disk. On DSH releases that
emit
skills/changethis is instant; on older cores it falls back to a 30 second poll. - Follows the web UI locale (simplified Chinese, English, Japanese).
Screenshots



Host-side enhancement
The folder button reads SkillEntry.directoryPath, a field added to the skill
catalog by a small host patch: the catalog projection copies the path from
skill.resourceBase when the skill is backed by a directory. Skills backed by a
URL or an opaque resource have no directory, so they render without the button.
On a host without that field the plugin degrades quietly — the dialog works, the button is simply absent.
Build
npm install # esbuild only
npm run build # bundles src/client.jsx -> lib/client.js
The client bundle is a single CJS file. @deepseek-ai/* and the react modules
stay external because the DSH shell provides them as platform-static modules.
Commit lib/client.js — git-hosted installs consume the built artifact
directly, without running a build.