Skin manager for the DSH web GUI: discovers installed skins and switches the active one from a dedicated Settings page, mutually exclusive, hot-reloaded without restart.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:xiaoyangcheng84-svg/dsh-skin-manager
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
A lightweight skin manager for the DeepSeek Harness web GUI. It discovers
every installed skin (any package carrying a skin.json plus a prebuilt
client bundle), lists them in a dedicated Settings → Skins page, and lets
you switch the active skin with one click — mutually exclusive, hot-reloaded
without restarting dsh web.

Features
- Dynamic discovery — scans the web profile's
node_modulesfor packages withskin.json+ prebuiltlib/client.js. Newly installed skins appear automatically; no registry regeneration, no code changes. - Dedicated settings page — a
settings.sectionentry (idskins, order 20) in the settings sidebar, next to General / Models. - One-click apply — pick a skin and click Apply; the profile patch is rewritten and DSH's config watcher hot-reloads it within seconds. Refresh the page to activate.
- Mutually exclusive — exactly one skin is active at a time (the active
one gets an
insertrow, every other skin adisabled: truerow). - Restore default — the Default option disables every skin and returns to the stock DeepSeek Harness appearance.
Install
dsh plugin --profile web add github:xiaoyangcheng84-svg/dsh-skin-manager
Then restart dsh web (or rely on the market's hot install). Open
Settings → Skins after a page refresh.
Requires git for the
github:source install; alternatively install from a local checkout withdsh plugin --profile web add link:<path>.
Usage
- Open Settings → Skins.
- See Default plus every installed skin (e.g. 深海女仆工坊 / maid-atelier).
- Click Apply on a skin → click Refresh when prompted → the skin activates.
- Click Apply on Default to restore the stock look.
Skin package protocol
Any package is recognized as a skin when:
- it lives under the profile's
node_modules(top-level or@scope/name), - it ships a
skin.json(id,name,package,accent,bodyAttr,tagline, optionalwiring.id— the same fields used by dsh-deep-whale / dsh-web-ui skins), and - it ships a prebuilt client bundle (
exports["./client"]orlib/client.js).
How switching works
Switching rewrites the managed section of the profile's cordis.patch.yml
(between # --- dsh-skin-manager managed --- markers):
- active skin → an
- insert:row; - every other skin →
- id: <rowId>+disabled: true.
Non-skin user patch rows (e.g. dsh-market) are preserved untouched.
API
The host half mounts three routes under /api/skin-manager:
| Route | Method | Purpose |
|---|---|---|
/api/skin-manager/list |
GET | List installed skins + current active id |
/api/skin-manager/apply |
POST | { id } or { id: "official" } to switch |
/api/skin-manager/bundle |
GET | ?id=<skinId> serve a skin's client bundle |
Development
The client bundle is written directly in the __ModuleLoader__ bundle format
(the same shape tsdown emits for the shipped ui-* packages), so no build
step is required. lib/client.js may require only module-table entities
(platform seed words like react and registered client bundles).
License
MIT
Links
More in this category
dsh-market/dsh-market★ 266
(Recommended) The plugin market inside DSH: a Settings page to browse and search the full community catalog by category, with confirmed one-click installs and an installed-plugins view.
Sanqi-normal/dsh-webui-market-plugin★ 50
In-harness plugin market for the dsh web GUI: browse the awesome-dsh-plugin.com catalog and install/uninstall plugins into a profile from Settings → Plugins → Plugin Market.
whyihaveyou/dsh-suite#plugin-manager★ 27
In-app plugin store for the DSH Web UI: browse, search, one-click install, compat badges.
yyyyukari/dsh-plugin-workshop★ 23
Steam Workshop-style in-app plugin browser: search, hot/newest/trending (7/30/90-day) sorting, Chinese keyword mapping, bilingual descriptions and README translation, plugin-signature filtering, and one-click install/update.
Noob-stupid/dsh-plugin-hub★ 23
A plugin management panel: one-click enable/disable for installed plugins plus a GitHub dsh-plugin marketplace with details and one-click installs.
liqichen/dsh-plugin-manager★ 4
GUI in the DSH settings panel: toggle/delete MCP servers, browse and trash skills, and list built-in plugin packages — hot-applied without restart.