dsh-skill-manage
Manifest validDeepSeek Harness Skill Management Settings Page Plugin: Graphically Manage the Installation, Uninstallation, and Invocation Enable/Disable of User-Level/Project-Level Skills
dsh-skill-manage
A graphical skill manager for DeepSeek Harness (
dsh). Install, search, enable, disable and remove skills from your Web UI — noSKILL.mdediting, no shell commands.
English · 中文
Features
- Zero-file management — enable/disable, overwrite and uninstall skills through a Web UI panel; frontmatter flags (
disable-model-invocation,user-invocable) are rewritten for you. - Four install channels — a local folder, a browser folder picker, a GitHub URL, or an online search over skills.sh.
- Smart batch installs — paste a
…/tree/<branch>/<dir>link; a parent directory yields a plan from the GitHub Trees API (~0.5 s, zero clone; falls back to a local clone scan automatically). Tick what you want and install in one shot. - Conflict-first UX — same-name skills never die by default; an inline prompt offers Overwrite / Cancel, identically across every install channel.
- Network resilience — a direct GitHub clone that fails transparently retries through
ghfast.top/gh-proxy.commirrors (on by default). - Official rank alignment — scans
~/.dsh/skills+~/.agents/skillsin the exact order the officialdsh-skill-filesystemprovider uses, including same-name shadowing.
Screenshots
User scope — manage every skill registered for all sessions:

Project scope — pick a workspace from the Web UI switcher and manage its .dsh/skills:

Installation
From npm (recommended):
dsh plugin --profile web add @nay-1/dsh-skill-manage
If the pnpm supply chain policy blocks the build script, grant approval in your profile:
# ~/.dsh/profiles/web/pnpm-workspace.yaml
allowBuilds:
'@nay-1/dsh-skill-manage': true
From GitHub:
dsh plugin --profile web add github:Nay-1/dsh-skill-manage
From a local path:
git clone https://github.com/Nay-1/dsh-skill-manage.git
cd dsh-skill-manage && pnpm install && pnpm build
dsh plugin --profile web add /path/to/dsh-skill-manage
Restart dsh web, then open Settings → Skill Management.
Usage
Management scopes & priority
| Scope | Directory | Rank | Notes |
|---|---|---|---|
Project (.dsh) | <projectRoot>/.dsh/skills | 100 | Highest priority |
Project (.agents) | <projectRoot>/.agents/skills | 200 | Shown with a .agents badge |
User (.dsh) | ~/.dsh/skills ($DSH_HOME/skills) | 400 | Default view |
User (.agents) | ~/.agents/skills ($DSH_AGENTS_HOME/skills) | 500 | Shown with a .agents badge |
The project root is resolved to the nearest ancestor containing .git (official provider semantics). Same-name skills are shadowed by the higher-rank root; installs always land in the top root of their scope. Every skill from a non-top rank root (.agents) gets a .agents badge in the list — user and project scopes alike.
Skill formats: directory bundles (<name>/SKILL.md) and flat single-file skills (<name>.md) are both discovered and manageable.
Installing skills
| Tab | What you paste / do | Result |
|---|---|---|
| Local folder | a filesystem path (or a .md file path for a flat skill) | installs after frontmatter validation |
| Browse | browser folder picker | uploads without exposing absolute paths |
| GitHub | github:owner/repo, owner/repo, complete HTTPS URL, or a web …/tree/<branch>/<dir> link | a skill dir installs directly; a parent dir opens an install plan |
| Search | a keyword → skills.sh results (name / repo / install count) | click Install — the skill is located in-repo by name (BFS, no need to know the exact path) |
Install plan (parent-directory links, bare multi-skill repos):
- The repo tree is scanned via the GitHub Trees API — about 0.5 s, no clone (falls back to a clone scan when the API errors, rate-limits, or truncates).
- A checklist appears; rows already present are marked Already installed and unchecked by default — checking one means overwrite.
- With more than 15 skills a confirmation bar asks first: "N skills — continue?".
- Confirm → one shallow clone → each checked skill is validated and installed.
GitHub examples:
| Input | Behavior |
|---|---|
github:JimmyLv/bibigpt-skill | single-skill repo, auto-located |
https://github.com/github/awesome-copilot/tree/main/skills/acquire-codebase-knowledge | tree link, one skill, direct |
https://github.com/github/awesome-copilot/tree/main/skills | parent dir → install plan |
https://github.com/anthropics/skills#path:skills/docx | #path: for exact subdirectories (alternative) |
Conflicts
Every channel behaves the same: if the name exists, an inline "skill x already exists" prompt offers Overwrite / Cancel. Nothing is overwritten by accident.
Managing the list
- Search / refresh by skill name.
- Each row shows a colored letter icon, a status dot (green = enabled, grey = disabled) and an Enabled / Disabled pill.
- Enable / Disable flips both
disable-model-invocationanduser-invocablein one click. - Uninstall is a two-click confirm, confined to managed skill directories.
Performance & limits
- GitHub Trees API without authentication: 60 requests/hour — one scan uses one; on failure / rate limit / truncated payload the plugin silently falls back to a clone scan.
- Batch installs have no hard cap, but >15 skills require explicit confirmation.
- Private repositories are not supported (no credentials).
skills.shsearch has a 10-second timeout with a friendly error; the site is a public, undocumented endpoint.
FAQ
GitHub installs hang or time out — is a VPN required?
The clone runs inside the dsh process, so it needs either a reachable network or the mirror fallback (on by default). To use a system proxy, launch dsh in a shell that exports http_proxy/https_proxy; git inherits them. If the process has no proxy variables and the mirror cannot reach GitHub either, the error message tells you so.
Do I need a VPN at all?
Usually not: ghfast.top and gh-proxy.com mirrors are reachable without a proxy. Keep use mirror on direct failure checked (default).
Skills.sh search says "response timed out". The endpoint is a third-party site; wait and retry. Direct connectivity to skills.sh is generally fine from China.
A skill I searched for cannot be installed.
The repository must contain a SKILL.md with a valid name (kebab-case) and description. Skills.sh sometimes lists renamed or removed skills — pick the newest hit or use the repo directly.
Where does a skill come from?
Skills in the .agents home root carry a small .agents badge in the list, so you always know which root you are editing or deleting.
Why does my npm install fail with "Two-step verification required"? That is an npm-side publishing policy, unrelated to this plugin — add 2FA to your npm account or use a granular access token with bypass-2FA enabled.
Architecture
| Part | File(s) | Role |
|---|---|---|
| Host half | src/index.ts | registers JSON routes under /dsh-skill-manage (host ESM bundle) |
| Browser half | src/client/ | registers the settings.section slot and renders the React page |
| Build | build.mjs | esbuild: host ESM lib/index.js + browser lazy-CJS factory lib/client.js |
| Composition | cordis.patch.yml | bundle patch inserting the plugin row into the composition |
Routes: GET /skills, GET /workspaces · POST /search-skills, /install, /install-upload, /install-github, /remove, /toggle.
Skills are discovered by scanning the filesystem directly (mirroring the official provider's directory and rank semantics), because ctx.skills in the host context only exposes the global layer. GitHub and upload installs clone or stage into temp dirs and reuse one handleInstall validation path. The client bundle is the stable module ID dsh-skill-manage (fixed, not the npm package name — see build.mjs) so registry loading works with any package name.
Development
pnpm install
pnpm build # emits lib/
pnpm typecheck # tsc --noEmit
Local loop: edit → pnpm build → restart dsh web.
License
MIT
Compatibility
Versions
| Latest version | Published | Size |
|---|---|---|
| 0.1.0 | — | — |
| 0.1.1 | — | — |
| 0.1.2 | — | — |
Comments
Loading…
Similar plugins
by xinshang777
DSH 插件:给设置页加上「技能管理」——用图形界面登记、开关、改名、删除技能,不用再手改 SKILL.md 和配置文件。
★ 0
MIT
JavaScript
Sep 29, 2026
dsh plugin --profile web add dsh-skill-managerby tianLee-gitter
DSH 技能管理插件:在设置页管理 ~/.dsh/skills 的技能,支持多目录导入与 AI 名称解析(导入后可用 /name 引用)
★ 0
MIT
TypeScript
Aug 17, 2026
dsh plugin --profile web add lt-dsh-skill-managerby weibaohui
DeepSeek Harness 插件:技能市场——安装/删除/详情 API + 管理界面
★ 45
JavaScript
Oct 29, 2026
dsh plugin --profile web add @weibaohui/skills-managementby xiaoxianyu-office
DSH Skills 管理器:设置页系统/用户技能分类,用户技能开关/编辑/删除/新建。Skills manager for DeepSeek Harness: system/user skill management (toggle/edit/delete/create) in Settings.
★ 3
↓ 867/wk
JavaScript
Aug 14, 2026
dsh plugin --profile web add dsh-skills-managerby jasper-zsh
DeepSeek Harness(DSH)的只读技能清单插件,在 Web GUI 中展示全局技能和当前会话可见的技能,并从会话日志推导技能加载状态。
★ 0
TypeScript
Aug 14, 2026
dsh plugin --profile web add dsh-plugin-skill-panelby Amouren7
DeepSeek Harness 插件管家:在「设置 → 插件」新增标签页,用人话说明每个插件是做什么的,提供一键停用/启用(热生效)与安全卸载;同一页的「技能」分段盘点所有技能、标明唯一可用的触发方式,并给出两个真开关(模型自动加载 / 斜杠命令)。Plugin and skill manager for DeepSeek Harness: plain-language catalogs, one-click hot enable/disable, rollback-guarded uninstall, and per-skill invocation switches.
★ 0
MIT
JavaScript
Sep 11, 2026
dsh plugin --profile web add dsh-plugin-desk