dsh-skill-hubDeepSeek Harness plugin
DeepSeek Harness(dsh)Web GUI 技能中枢:浏览/搜索完整本地技能目录、启用/禁用、查看正文、排查诊断、新建技能,基于官方 ctx.skills 注册表。 In-GUI skill hub for dsh: browse, search, enable/disable, inspect, diagnose and scaffold local skills from the official ctx.skills registry.
- Stars
- 11
- Forks
- 1
- License
- MIT
- Last commit
- Sep 3, 2026
- Latest release
- v0.3.6
Overview
DeepSeek Harness(dsh)Web GUI 技能中枢:浏览/搜索完整本地技能目录、启用/禁用、查看正文、排查诊断、新建技能,基于官方 ctx.skills 注册表。 In-GUI skill hub for dsh: browse, search, enable/disable, inspect, diagnose and scaffold local skills from the official ctx.skills registry.
Original README
Cached from the project repository on Sep 3, 2026. This is source content, separate from the Agents.md review above.
dsh-skill-hub
In-GUI skill hub for DeepSeek Harness — browse the full ctx.skills catalog, toggle skills, inspect bodies, diagnose missing skills, install from the market, and scaffold new ones.
Host runs in the dsh process via official SDKs only; browser renders through official slots. No dsh source changes.
Why not just the read-only browser?
dsh-skill-manager browses, dsh-skill-importer / dsh-find-skill import. This plugin is the manager in between.
| Capability | read-only browser | dsh-skill-hub |
|---|---|---|
| Catalog | user roots, self-scanned | ctx.skills registry: project / custom / user / bundled + third-party |
| Workspace | ❌ | ✅ .dsh/skills & .agents/skills (read-only, merged by default) |
| Toggle | ❌ | ✅ rename SKILL.md (never delete), tri-state group switches + drag reorder |
| Diagnostics / scaffold | ❌ | ✅ missing frontmatter checks / ~/.dsh/skills wizard |
| Source tracking | ❌ | ✅ repo + commit, check/sync/trash (restores source & scene) |
| Market | ❌ | ✅ built-in + custom repos, any top-level root, badges + update-all |
| Stats | ❌ | ✅ call counts from session logs (14-day window, incremental cache) |
Features
- Catalog — search + source filter + flat/grouped in one row; groups = scenes (tags) + source collections; workspace tree merged by default.
- Switches — per-skill and per-group toggles; conflict dialog (close all / keep on) → mixed state; only
~/.dsh/skills&~/.agents/skillsare writable. - Reorder & edit — drag handle on every group header (persists in
~/.dsh/dsh-skill-hub.json); Edit toggle reveals reorder/delete without cluttering the read view. - Market — unified list (built-in Add → becomes source row); scan any root with
SKILL.md(no allowlist), async import with{jobId, totalBytes}progress & cancel; Check all / Update all (failures non-fatal, daily auto-check). - Stats — per-skill
count+lastUsed, group summaries; configurable window/interval live from the settings card.
Quick start
bashdsh plugin --profile web add dsh-skill-hub # restart dsh web → Settings → 技能 → Market → scan → import
Scaffold format (SKILL.md):
markdown--- name: my-skill description: One line when the agent should use this skill. --- # my-skill Body...
Requires Node ^22.19 || >=24 + dsh web (0.1.0-rc.7 / 0.1.1-rc.2, 0.1.x forward compatible).
How it works
GitHub repo ──scan/import──▶ ~/.dsh/skills ▲ │ └─check/sync/delete── ctx.skills ◀─ provider │ snapshot/get ▼ /api/skill-hub/* ──▶ Panel (Settings → 技能)
| File | Role |
|---|---|
src/index.ts | inject [webServer, skills, systemPrompt, settings], settings namespace, announcement |
src/routes.ts | /api/skill-hub/* fences + handlers (async import, reorder) |
src/store.ts | ~/.dsh/dsh-skill-hub.json v4 (disabled/tags/sources/market/trash/stats/order) |
src/repo.ts | discovery / import / diff (any top-level SKILL.md) |
src/skillfs.ts | toggle/trash/scaffold/diagnostics |
src/client/ | panel (useSkillHub + thin views), CSS Modules |
Host uses only ctx.skills.snapshot/get, ctx.webServer.register, ctx.systemPrompt.section.
Usage
Settings → 技能 — 3 tabs: Sources (flat/grouped + project tree + drag), Scenes (tags, drag), Market (unified list). Header workspace field pins to one cwd; trash & diagnostics are always visible.
Settings → 插件 → Skill Hub — master switch, announce to agent, dot colors, showUseCount/showUseTime/showGroupSummary, stats window (days, default 14, 0=all) & interval (min, default 5).
HTTP API
Loopback-only (127.0.0.1/localhost), JSON.
| Endpoint | Method | Purpose |
|---|---|---|
/api/skill-hub/catalog?cwd= | GET | catalog + disabled + diagnostics |
/api/skill-hub/skill?name=&cwd= | GET | skill body |
/api/skill-hub/skill/delete | POST | move to trash (snapshots source+scenes) |
/api/skill-hub/toggle | POST | {name, enabled} |
/api/skill-hub/toggle-batch | POST | {names, enabled} |
/api/skill-hub/create | POST | {name, description?, root?} |
/api/skill-hub/stats | GET | invocation counts |
/api/skill-hub/config | GET/POST | runtime config (null clears) |
/api/skill-hub/groups | GET | tags + collections + orders |
/api/skill-hub/tag etc. | POST | create/rename, delete, set members, reorder (/tag/reorder, /collections/reorder, /source-groups/reorder) |
/api/skill-hub/market etc. | GET/POST | list/add/delete/pin/check/sync market sources |
/api/skill-hub/repo?repo= | GET | discover (any root) |
/api/skill-hub/repo/import | POST | async job {jobId, total, totalBytes} |
/api/skill-hub/repo/import/progress?jobId= | GET | poll job |
/api/skill-hub/repo/import/cancel | POST | cancel job |
/api/skill-hub/sources etc. | GET/POST | list/check/sync/delete/restore/clear trash |
/api/skill-hub/update | GET | plugin latest release |
Development
bashnpm run typecheck # tsc --noEmit npm test # 174 tests, 9 suites npm run build # tsc + tsdown → lib/index.js + lib/client.js
Don't run two
dsh webon the same$DSH_HOME+ cwd — rc has no session-log lock (seq gapcorruption). Use separateDSH_HOME.
Troubleshooting
duplicate loader entry id: skill-hub— remove duplicate install (keep onedsh plugin addmethod).- Skill missing — check diagnostics (frontmatter / name mismatch / short description).
- Dots missing in
/menu — dsh internals changed; catalog still works.
Community
Issues · Discussions · Showcase · Market PR · Discord
License
MIT — LICENSE.