saitamahang
dsh-skill-importer
deepSeek Harness plugin: import and manage skills from files or URLs, with a composer picker and /skills command
- Stars
- 0
- Language
- TypeScript
- Created
- Aug 14, 2026
- Updated
- Aug 14, 2026
Introduction
Bring skill management into the DeepSeek Harness Web UI.
Import, discover, and invoke skills without a session, model tokens, or approval round-trips.
English · 简体中文 · Install · How it works · Development
Your skill library, one click away
dsh-skill-importer is a lightweight plugin for DeepSeek Harness (dsh). It turns skills into a first-class part of the Web UI: bring in Markdown from disk or a URL, see every installed copy, and insert a skill into the composer without breaking your flow.
| Import | Organize | Invoke |
|---|---|---|
Upload SKILL.md or paste a URL. Frontmatter is validated and normalized before writing. | Browse skills grouped across project, legacy project, and global roots. Remove any copy individually. | Use the composer picker, run /skills, or type /skill-name directly. |
Built for a fast loop
- No agent or session — the host writes skill files directly.
- Zero model tokens — imports never enter a model context.
- Instant discovery — the harness watcher hot-refreshes skills after they land.
- Workspace-aware — project skills always target the active registered workspace.
- Bilingual UI — English and Chinese copy follows the harness locale.
- Safe by design — fixed skill roots, 256 KB limit, and same-origin POST checks.
Three natural ways to use a skill
- Composer picker — open the pill beside the access-mode selector, search by name, and choose.
/skillscommand — use a familiar command palette, modeled after/model.- Direct invocation — type
/skill-nameand keep moving.
All three fill the composer with the same highlighted /name gesture; sending injects the skill instructions through dsh's native flow.
Installation
1. Add the plugin to the Web profile
dsh plugin --profile web add dsh-skill-importer
2. Enable it in the profile
Add the following entry to $DSH_HOME/profiles/web/cordis.patch.yml:
- id: skill-importer
name: dsh-skill-importer
3. Restart dsh Web
Open Settings → Skills. Import a Markdown file or URL, choose a target, and the skill will appear as soon as the filesystem watcher discovers it.
Requires DeepSeek Harness
>= 0.1.0-rc.6vianpx @deepseek-ai/dsh web.
How it works
The dsh client-to-host RPC is a fixed allowlist with no file-write channel. This plugin uses the official ctx.webServer.register extension point exposed by dsh-host-webserver and registers same-origin /skill-importer/* routes on the harness server.
Markdown file or URL
│ same-origin fetch
▼
/skill-importer/import
│ host filesystem write
▼
<skill-root>/<name>/SKILL.md
│ watcher event
▼
skills/change → hot refresh
POST routes verify the Origin header and only accept loopback sources (127.0.0.1 or localhost). Writes are restricted to these standard roots:
| Scope | Directory |
|---|---|
| Project | .agents/skills |
| Legacy project | .dsh/skills |
| Global | ~/.dsh/skills |
Development
npm install
npm run build
| Area | Source |
|---|---|
| Host plugin and route registration | src/index.ts |
| Filesystem, URL import, and HTTP logic | src/server.ts |
| Shared wire types | src/types.ts |
Browser plugin and /skills command | src/client/index.ts |
| Composer picker | src/client/SkillsPicker.tsx |
| Settings experience | src/client/SkillImporterSection.tsx |
Available routes: GET /skill-importer/health · GET /skill-importer/list · POST /skill-importer/import · POST /skill-importer/import-url · POST /skill-importer/delete
Local checkout
npm install
npm run build
dsh plugin --profile web add /path/to/dsh-skill-importer
Add the profile entry shown above, then restart dsh Web.
Notes
- A single imported file may be up to 256 KB.
- URL import preserves
.mdsources; HTML pages use lightweight text extraction, so direct Markdown URLs work best. - The installed list polls briefly after import (every 2 seconds for up to 20 seconds). Refresh syncs external changes immediately.
License
Released under the MIT License.