@wulongxi/dsh-skills-hub
DeepSeek Harness skill center: browse and search online skill registries, install skills into user/project roots, and manage or create local skills in a native web GUI panel.
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:WLX2007/DSH-SkillsHub说明文档
阅读完整 README ↗Usage
Market tab
Type a query and press Enter. The source picker to the left of the search field selects which registry the search asks; the choice applies to the next search, so results always match the query that produced them.
- skillhub.cn (default) — a China-hosted skill store with 190,000+ skills, reachable directly with no network accelerator. The site explicitly invites agent integration: it publishes an agent-facing integration document (
install/skillhub.md), allows crawlers inrobots.txt, and its read path is unauthenticated. Rows carry Chinese descriptions, download counts, and icons. - skills.sh — the Agent Skills registry's search endpoint. This source serves one page; the panel says so honestly instead of offering a load-more control that could only return empty.
- GitHub repositories — a repository can also be browsed directly: any
owner/repo(a full URL or a.gitsuffix also works) is enumerated through the GitHub API, and every skill directory inside it becomes a row.
Long result lists load the next page automatically as you scroll, with an explicit "load more" button as the keyboard/click target. Selecting a skill's name opens a detail dialog rendered by the shell's own markdown renderer — the skill reads exactly as it does in a conversation — alongside its file list and total size.
Installing from the market
The detail dialog carries the install action. A skill is installed after its body has been read, so the licence line and the file list sit on the same screen as the button. Installing asks twice: the target root (user ~/.dsh/skills, shared by every project, or the current project's .dsh/skills), then a confirmation that states the licence situation at the moment of decision.
The install itself is engineered to fail cleanly:
- Staged then renamed. Files land in a staging directory beside the target and the directory is renamed into place only when every file arrived. A failed or cancelled install leaves the previous state of the disk untouched — no half-written skill the model could later load.
- Collision is an error. An existing skill with the same name is never silently replaced (the panel answers 409; updating an installed skill is M4's job).
- Bounded. Per-file 2 MB, 16 MB total, 200 files, and every manifest path is validated against a strict relative-path grammar before anything is written.
- Provenance travels with the skill. A
.skills-hub.jsonrecord inside the installed directory names the market id, the source, the licence at install time and the timestamp — the anchor M4's update checks read back.
Licences are stated, never laundered. Every result row declares its licence: declared ones show it (MIT, GPL-3.0, …); undeclared ones show No licence declared. In a sampled catalogue more than half of the entries declare none, and that is a fact a user needs before deciding to copy a skill to disk.
My Skills tab
Skills are grouped by provenance (project, user, plugin providers, runtime registration). A skill backed by a file can be enabled or disabled — the toggle rewrites disable-model-invocation in its frontmatter — edited, or deleted. Skills registered by plugins at runtime have no file on disk; the panel says so once, per group, instead of decorating every row, and their enable state is stored in the panel's own configuration.
Preview
Every skill can be previewed, including bundled and runtime-registered ones that have no SKILL.md on disk — the host falls back to the runtime skill registry for those, and the dialog labels the source honestly ("from file" / "from skill registry"). Frontmatter fields are shown as a definition list above the body and are never mixed into the markdown, because a leading --- fence is a thematic break in GFM and would mangle the YAML into headings and stray prose.
Configuration
Plugin config (profile patch):
| Field | Type | Default | Description |
|---|---|---|---|
enabled | boolean | true | Master switch; false mounts no routes. |
githubProxies | string[] | built-in chain | Accelerator prefixes for GitHub raw content, tried in order; include "" to try direct first. |
customSkillDirs | string[] | [] | Additional skill root directories to scan. |
dshHome | string | $DSH_HOME or ~/.dsh | Override for the user config root. |