DeepSeek Harness plugin

dsh-skill-hub

In-GUI skill hub for DeepSeek Harness: browse, search, toggle, inspect, diagnose and scaffold local skills from the official ctx.skills registry, plus a skill market with tracked source sync and one-click update-all.

Jump to install

Source facts

Repository
cheshireez/dsh-skill-hub
Latest update
Aug 18, 2026
Category
Skills
GitHub stars
3

Install

Start with a prompt that asks an agent to read the source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to read the page and repository first.

Do not install anything yet. Read this DeepSeek Harness plugin and explain what it does, which files, networks, or credentials it can access, and how to install and remove it.

Plugin page: https://deepseekplugins.org/plugins/cheshireez/dsh-skill-hub
GitHub: https://github.com/cheshireez/dsh-skill-hub
Plugin: dsh-skill-hub
Author: cheshireez
Install command: dsh plugin --profile web add dsh-skill-hub

Do not run the install command until I confirm.

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer3 files
README.mdSource · read only

dsh-skill-hub

[中文版](README.zh.md) | [English](README.md)

<p align="center"> <a href="https://www.npmjs.com/package/dsh-skill-hub"><img alt="npm version" src="https://img.shields.io/npm/v/dsh-skill-hub?color=2f81f7&label=npm"></a> <img alt="downloads" src="https://img.shields.io/npm/dm/dsh-skill-hub"> <img alt="license" src="https://img.shields.io/npm/l/dsh-skill-hub"> <img alt="node" src="https://img.shields.io/badge/node-%3E%3D22.19-339933"> <a href="https://github.com/cheshireez/dsh-skill-hub/actions"><img alt="CI" src="https://img.shields.io/github/actions/workflow/status/cheshireez/dsh-skill-hub/ci.yml?branch=main"></a> </p>

<p align="center"> <img src="https://raw.githubusercontent.com/cheshireez/dsh-skill-hub/main/promo/real-skill-hub.png" alt="dsh-skill-hub panel" width="640"> </p>

In-GUI skill hub for DeepSeek Harness (dsh). Browse the full local skill catalog from the official ctx.skills registry, toggle skills on/off, inspect their bodies, understand why a skill is missing, install from the built-in market, and scaffold new ones — all from the dsh web GUI.

> A skill manager beyond the read-only browser. The host half runs in the dsh process and speaks only > official SDKs; the browser half renders inside the GUI through official slots. No dsh source changes.

> Disclaimer — source tracking, market sync, and the restorable trash are implemented by this > plugin; they are not guarantees of the dsh runtime itself. Screenshots may lag the latest UI.

Table of Contents

  • [Why another skill manager?](#why-another-skill-manager)
  • [Features](#features)
  • [Quick start](#quick-start)
  • [How it works](#how-it-works)
  • [Usage](#usage)
  • [Troubleshooting](#troubleshooting)
  • [HTTP API](#http-api)
  • [Development](#development)
  • [Community](#community)
  • [License](#license)

Why another skill manager?

dsh-skill-manager is a read-only browser, dsh-skill-importer and dsh-find-skill focus on importing and market-style installs. dsh-skill-hub fills the gap between them: a full catalog you can actually manage.

Capabilitydsh-skill-manager (read-only)dsh-skill-hub (this plugin)
Catalog sourceself-scans disk, user roots onlyofficial ctx.skills registry: project / custom / user / bundled + third-party providers
Browse / search✅ (group by tags or by source repo, search + filter in one row)
Workspace skills✅ (enter a project path → its .dsh/skills & .agents/skills appear, read-only)
Enable / disable✅ (renames SKILL.md; file never deleted, always restorable; per-group tri-state switches)
Inspect skill body
Discovery diagnostics✅ (missing frontmatter / missing name/description / invalid name — each reason listed)
New-skill wizard✅ (writes to ~/.dsh/skills or ~/.agents/skills)
Invocation statistics✅ (per-skill call counts read from session logs; group headers summarize)
Upstream source tracking✅ (repo + commit snapshot; check updates, sync, follow upstream deletion into a restorable trash; delete/restore keeps source + scene membership)
Market✅ (unified market list: built-in curated catalog + custom repos; scan, one-click import, per-source installed/updatable badges, one-click update-all)
Live updatesfilesystem-provider watcher, with a 5s panel poll as fallback

Features

Catalog & switches — manage local skills

> Browse everything, change anything you own. The full registry is visible and searchable; > writes are confined to your user-level roots and never delete files.

  • Full catalog — every skill the official registry knows: project .dsh/skills & .agents/skills,

custom roots, user ~/.dsh/skills & ~/.agents/skills, bundled, and third-party providers.

  • Search & grouping — one row combines search, source filter, and flat/grouped view; groups are

user tags (scenes) plus source collections (auto-aggregated by upstream repo); uncategorized stays visible.

  • Workspace discovery — known workspaces (from dsh’s workspace registry) are merged into the

default view and grouped in a project-level tree (per project, optionally split into .dsh/.agents); the header path field pins the view to one workspace.

  • Group switches — every group header carries a sliding switch: enable/disable the whole group in

one click. Closing a group whose member is also enabled elsewhere opens a conflict dialog (close all / keep on → the group falls into a half-filled mixed state). Read-only skills are skipped with per-name reports.

  • Enable / disable — disable renames SKILL.md out of discovery (tracked in a sidecar file), so

the change survives restarts and is trivially reversible. Files are never deleted.

  • Skill detail — read a skill’s body straight from disk, with its source card (repo, commit,

check/sync/follow-delete actions).

  • New-skill wizard — scaffold a valid skill into ~/.dsh/skills or ~/.agents/skills from the GUI.

Market & updates

> Add a repo, install in one click, stay updated forever. Imports are tracked upstream > automatically; updates surface per source and can be applied all at once.

  • Unified market list — one list on the Market tab: built-in catalog entries show a description

and an Add button until added; once added (or custom sources entered by hand) the same row becomes a full source row. No duplicate entries.

  • Scan → install — scan any repo’s skills/ and design-templates/ roots, tick the skills you

want, import with one click. Imports record the upstream repo/commit automatically.

  • State badges — every source row aggregates its state: installed count, updatable count, and

deleted-upstream count.

  • Check all / update all — “Check all” refreshes every source (release + skill diffs); “Update

all” syncs every source with pending updates in one pass (per-source failures are reported, never fatal). A daily auto-check (24h, timestamped in localStorage) covers the “forgot to click” case; manual buttons are never throttled.

  • Source tracking — per-source check (1–2 GitHub API requests, 5-minute server throttle), sync

selected skills (overwrite confirm), and follow upstream deletion into a restorable trash. Deleting and restoring a tracked skill keeps its source and scene membership (snapshotted in the trash entry). Personal skills (no source) are never tracked.

  • Self-update check — the panel header checks the plugin’s own latest GitHub release.

Stats & diagnostics

> Know what your agents actually use. Invocation counts come from your own session logs — > no telemetry leaves the machine.

  • Invocation statistics — per-skill call counts and last-used times read from session logs

(optional; absent session-query deployments simply omit the data); group headers summarize.

  • Discovery diagnostics — the catalog reports why a skill was ignored (missing YAML

frontmatter, missing name/description, illegal name), per skill.

  • Settings card — enable the plugin, toggle the agent announcement, and adjust panel display

preferences from Settings → 插件 → Skill Hub.

Quick start

dsh plugin --profile web add dsh-skill-hub

Restart dsh web, open Settings → 技能, and on the Market tab pick a repo from the built-in catalog (or paste an owner/repo), scan it, tick the skills you want, and import. They are tracked upstream from then on: check for updates and sync with one click.

A skill is just a directory with a SKILL.md — the panel can also scaffold one for you:

---
name: my-skill
description: One line describing when the agent should use this skill.
---
# my-skill

What the skill does, when to use it, and what output is expected.

Requires Node ^22.19.0 || >=24.0.0 and a dsh web deployment (0.1.0-rc.7 SDK family).

How it works

 GitHub repo ──scan / import──▶ ~/.dsh/skills (user level)
      ▲                            │
      │ check / sync / delete      ▼
      │                ctx.skills registry ◀── skill-hub provider (registers user + project roots)
      │                            │ snapshot / get
      └────── daily auto-check     ▼
                      /api/skill-hub/* routes ──▶ Browser panel (Settings → 技能)
FileResponsibility
src/index.tshost entry: inject [webServer, skills, systemPrompt, settings]; registers the dsh-skill-hub settings namespace; system-prompt announcement
src/routes.tsdeclarative route wrapper: /api/skill-hub/* (loopback / method / master-switch / JSON-body fences handled once; handlers stay business-only)
src/store.tssidecar state ~/.dsh/dsh-skill-hub.json v3 (disabled, tags, sources, market sources, trash; versioned v1→v2→v3 migrations)
src/repo.tsGitHub discovery/import + source tracking (latest commit, tree diff, manifest)
src/skillfs.tsroot resolution / toggle rename / trash & restore / scaffold / diagnostics
src/stats.tsinvocation stats: session logs → per-skill call counts (optional sessionQuery)
src/protocol.tshost ↔ browser shared API contract (types + endpoint table)
src/client/browser half: settings card + skill hub panel. State and flows live in useSkillHub.ts; views are thin components (SourcesView / ScenesView / MarketView / SkillRow / dialogs / …). CSS Modules, Apple-style
  • Host half uses only official SDKs: ctx.skills.snapshot()/get(), ctx.webServer.register(),

ctx.systemPrompt.section(). No dsh source is modified.

  • Browser half mounts through official slots: a Settings → 技能 section and a

Settings → 插件 → Skill Hub configuration card.

  • Configuration is dsh-native. Since rc.7 the host serves every registered settings namespace to

the web client (the old namespace allowlist is gone), so the plugin registers a dsh-skill-hub settings namespace and the card reads/writes it through the official settings transport — the configurable-plugins tab dispatches the card by that namespace, and the host consumes the same resolved value (single source of truth). Installations upgraded from the older sidecar-configured build migrate their saved config into the namespace once.

Usage

Open Settings → 技能 (Skill Hub) in the dsh web GUI. Three tabs:

  • 来源 (Sources) — the skill list, flat or grouped: a project-level tree (workspaces merged by

default, per project optionally split into .dsh/.agents) plus source collections and uncategorized. Search, source filter and sort share one row; group headers carry tri-state switches; the source-group badge doubles as the re-check entry. (see the screenshot at the top)

  • 场景 (Scenes) — your own enable/disable units (e.g. a “Godot” scene vs a “Java” scene): create

tags, assign members, and flip a whole scene on/off with one switch.

<p align="center"> <img src="https://raw.githubusercontent.com/cheshireez/dsh-skill-hub/main/promo/real-skill-hub-scenes.png" alt="场景 tab" width="560"> </p>

  • 市场 (Market) — one unified list: built-in curated repos (Add button until added) and your

custom sources; scan to install, check for updates, update all in one pass.

<p align="center"> <img src="https://raw.githubusercontent.com/cheshireez/dsh-skill-hub/main/promo/real-skill-hub-catalog.png" alt="市场 tab" width="560"> </p>

Everywhere: work space field in the header (enter a project path to see its read-only project skills), trash section (restorable, restores source + scene membership), diagnostics section (why a skill is missing), and the new-skill form.

The plugin’s own switches live on the Settings → 插件 → Skill Hub card:

FieldMeaning
Enable pluginMaster switch: routes, provider, and announcement all go live with this.
Announce to agentAdds a system-prompt section so agents know how to collaborate when users mention skill management.
Model / user dot colorsOverride the blue/green invocation dot colors used in the panel.
Show invocation countShow per-skill call-count chips when session stats are available.
Show last-used timeShow relative last-used time on each skill row.
Show group summariesShow count/last-used summaries after group titles.

Troubleshooting

  • ⚠️ duplicate loader entry id: skill-hub — the plugin was mounted twice (for example both

through dsh plugin add and a local file: install). Keep exactly one installation method; on upgrade, replace rather than add.

  • A skill is not in the catalog — open the 发现诊断 (diagnostics) section: missing

frontmatter, a name mismatch with the directory, or an over-short description are each listed with their reason.

  • Update check shows nothing — the server throttles checks (5 min per source) and the panel

auto-checks once per day; manual buttons are never throttled.

  • Read-only boundary — only user-level skills (~/.dsh/skills, ~/.agents/skills) are writable;

project, bundled, and runtime skills are displayed read-only.

HTTP API

All endpoints are loopback-only (127.0.0.1/localhost) and JSON.

EndpointMethodPurpose
/api/skill-hub/catalog?cwd=GETFull catalog: skills, disabled list, discovery diagnostics (cwd adds project skills).
/api/skill-hub/skill?name=&cwd=GETOne skill’s detail (path, provider, body).
/api/skill-hub/skill/deletePOSTMove a skill into the restorable trash (snapshots source + scenes).
/api/skill-hub/togglePOSTEnable/disable a writable skill ({name, enabled}).
/api/skill-hub/toggle-batchPOSTEnable/disable a whole group in one write ({names, enabled}).
/api/skill-hub/createPOSTScaffold a new skill ({name, description?, root?}).
/api/skill-hub/statsGETPer-skill invocation counts (unavailable when session-query is absent).
/api/skill-hub/configGET/POSTPlugin runtime config ({enabled, announceToAgent}); null clears an override.
/api/skill-hub/groupsGETUser tags + source collections + origin map.
/api/skill-hub/tagPOSTCreate/rename a tag group.
/api/skill-hub/tag/deletePOSTDelete a tag group.
/api/skill-hub/tag/membersPOSTSet a tag’s member list.
/api/skill-hub/marketGETThe user’s market source repos.
/api/skill-hub/market/sourcePOSTAdd a market source ({repo}).
/api/skill-hub/market/source/deletePOSTRemove a market source.
/api/skill-hub/market/source/refPOSTPin a market source to a release/branch ref.
/api/skill-hub/market/checkGETCheck market sources for newer releases (throttled).
/api/skill-hub/market/source/syncPOSTAlign a market source to its pinned ref; returns tracked skills.
/api/skill-hub/repo?repo=GETDiscover importable skills in a GitHub repo.
/api/skill-hub/repo/importPOSTImport selected repo skills (records the source + default scene).
/api/skill-hub/sourcesGETSource records, derived origins/collections, trash.
/api/skill-hub/sources/checkPOSTCheck upstream updates (throttled, 5 min).
/api/skill-hub/sources/syncPOSTSync selected (or all) skills of a source.
/api/skill-hub/sources/deletePOSTFollow upstream deletion (moves to trash).
/api/skill-hub/sources/restorePOSTRestore a trashed skill (re-attaches source + scenes).
/api/skill-hub/sources/trash/clearPOSTPermanently clear the trash.
/api/skill-hub/updateGETCheck the plugin’s own latest release.

Development

npm install
npm run typecheck   # tsc --noEmit
npm test            # vitest (152 tests across 8 suites)
npm run build       # tsc declarations + tsdown bundles (lib/index.js + lib/client.js)
npm pack            # build the installable tarball (dsh-skill-hub-<version>.tgz)

> Local testing: do not run two dsh web instances against the same > $DSH_HOME and the same project directory at the same time. dsh rc releases have no > cross-process session-log lock, and a second instance resuming the same > session can write duplicate seq rows (corrupt session log: seq gap in > committed region). Stop the old instance first, or give the preview its own > DSH_HOME.

The test suites cover the route family (including the config route and the disabled gate), the sidecar store, skill filesystem operations, the registry provider, and invocation statistics.

Community

License

MIT — see [LICENSE](LICENSE).