How dsh-skin-market behaves
DeepSeek Harness opens the market from Settings → Skin Market or Plugins → dsh-skin-market. The catalogue is fetched independently from the plugin update, checked when the market opens, approximately every five minutes while the page stays open, and again when it regains focus. The browser keeps the last valid catalogue for use during a network failure. Search and sorting cover the full catalogue, with list entries loaded in batches.
Catalogue installation targets are fixed to the recorded package version or complete 40-character commit. Before installation, dsh-skin-market validates the target and entry point. The market only installs skin identifiers listed in its catalogue; it does not accept arbitrary commands or installation addresses. Community inclusion is not a security endorsement.
Installing skins in DeepSeek Harness
npm skins use an install or install-and-use flow. On official Desktop, installation happens first and use is confirmed separately; cancelling that confirmation leaves the package installed but disabled. Entries marked for manual installation provide a complete fixed target for an agent and require confirmation in the Desktop Plugins → Add plugin view. A monorepo target must retain its &path:/subdirectory suffix. Conflicts with enabled skins should be checked before manual installation.
Commands and recovery
If a skin conflict makes the Web page unusable, stop the current DeepSeek Harness Web process, then run:
~/.dsh/profiles/web/node_modules/.bin/dsh-skin-market-reset --profile web
This command disables skins managed by dsh-skin-market and restores the default appearance, while retaining installed skin packages and the market. Do not run this Web profile command for official Desktop; use its plugin manager or the market instead. Avoid repeating an operation while the market is confirming its result.
Configuring dsh-skin-market
Setting DSH_SKIN_MARKET_LOCAL_CATALOG=1 makes a local build read the catalogue bundled with that build when starting dsh web. The README does not document other runtime configuration keys or defaults.
Written from the project's own documentation and kept in sync with it. Where the two disagree, the source is authoritative — read the README on GitHub