Preface¶
DeepSeek Harness (dsh) writes skills as SKILL.md: the directory-style (bundle) comes with scripts and resources, while the flat-style (flat) is just a single Markdown file. The system scans for skills in multiple places: system-level at ~/.dsh/skills, and project-level at either <project root>/.dsh/skills or <project root>/.agents/skills. Skills downloaded from GitHub often have -main suffixes in their directory names, and the name field in their frontmatter may not follow kebab-case. Skills without a description field will be directly excluded by DSH. Manually moving files, editing YAML, and restarting to verify can easily mix up “globally effective” and “repository-only” skills.
dsh-skill-manager-ytxue is a community-developed web interface plugin: it adds a “Skill Management” panel to the settings sidebar, unifying skill listing, import, enable/disable, and DSH-compliant validation and repair in one place. This article is organized after cross-checking the plugin’s directory page, GitHub repository README / package.json, and official DeepSeek Harness documentation. The community plugin directory deepseek-harness-plugin.com is an independent site and has no official affiliation with DeepSeek / Fangjia. Do not treat it as an official app store.
What is this¶
dsh-skill-manager-ytxue is a UI enhancement plugin maintained by YTxue, with its source code hosted at the GitHub repository YTxue/dsh-skill-manager-ytxue under the MIT license. The current version listed in package.json is 0.6.0, and it requires Node.js 20 or higher to run. The GitHub repository description matches the directory page: it provides a skill list, enable/disable controls, batch folder import with duplicate name prompts, status-driven validation and automatic repairs in accordance with DSH specifications, and distinguishes between system-level and project-level skills. As of 2026-08-17, the GitHub repository has 7 stars; when listed on the directory page, it had 4 stars, so refer to the repository page for the latest star count.
It solves the problem of “skills already exist on disk but lack a standardized management interface”: it separates the enabled directory and the skill pool, pre-validates imports before letting you choose to overwrite or skip, and marks validation results with colored dots next to skill names. The client declares platform: web, and it hooks into the web UI’s settings section, not the terminal TUI.
The repository README specifically notes that the npm package dsh-skill-manager (maintained by gohana, version 0.1.x, released on 2026-08-13) is an unrelated third-party package. This plugin has the ytxue suffix in its package name, so install from this repository instead of using npm install dsh-skill-manager.
Core Features¶
Settings Sidebar Panel¶
The plugin registers the settings.section slot with order: 900. After opening the DeepSeek Harness web settings, a “Skill Management” entry will appear in the sidebar. The toolbar provides:
- Refresh: Reload the skill list after manually adding or modifying skills externally.
- One-click Check: Only process items with red dots, validate them against specifications and perform automatic repairs.
Each row displays the description from the skill’s frontmatter; if there is no description, it will show “(No description)”. A bundle / flat tag is also shown next to the skill name:
| Tag | Form | Explanation |
|---|---|---|
| bundle | Directory, main content in SKILL.md |
Can include multiple files such as scripts, assets, etc. |
| flat | Single .md file under skills |
Ideal for pure instruction-based skills |
Both forms have the same requirements for DSH scanning and frontmatter, and enabling, disabling, and validation operations apply to the entire entry (directory or file). The tags only serve to distinguish the form factor.
System-level and Project-level Skills¶
The panel marks the source level after the bundle / flat tag:
- System-level: ~/.dsh/skills, corresponding to DSH’s native scan rank 400, effective for all projects.
- Project-level: <project root>/.dsh/skills (rank 100) or <project root>/.agents/skills (rank 200), only effective for the current project. Project-level entries are displayed as read-only with gray dots and do not participate in specification validation.
By default, only the project-level skills for the current project are shown. When the panel is opened or refreshed, the client passes the current session’s working directory to the host (subscribes to the sessions service, syncs automatically when switching sessions, no need to send a prompt first). The host detects the .git ancestor directory upwards, using the same detection method as DSH’s skill-filesystem module. If there is no .git directory, it uses the current working directory directly. The $DSH_HOME directory itself is excluded to avoid duplication with system-level skills. If a project has never been opened in a session but needs to appear in the list, you can add the following to $DSH_HOME/settings.yaml:
skill-manager-ytxue:
projectRoots:
- '/path/to/project1'
- '/path/to/project2'
The old config.projectRoots in the mounted entries will still be automatically merged; the new configuration format in settings.yaml takes precedence.
The status overview includes two lists: the enabled directory ~/.dsh/skills, and the unmounted pool directory ~/.dsh/skill-pool.
Import: Single, Batch, and Duplicate Name Prompts¶
The import entry supports selecting a folder or manually entering a path. The directory browsing dialog described in the README starts from “This PC” (all drives), allowing access to any disk and any level of directories. The title bar provides “Select this folder” and close buttons, and there is an independent “Go back to parent folder” button at the bottom to avoid misclicks. The selected path will be automatically filled in.
Path recognition rules:
- If the path itself is a skill (a directory containing SKILL.md, or a single .md file) → import 1 skill (kind: single).
- If the path is a parent folder containing multiple skills → import all direct sub-skills (subdirectories containing SKILL.md plus top-level .md files), non-skill files are ignored (kind: batch).
A dry-run is performed before import. When duplicates are detected, a pop-up will inform you that N skills will be imported, M of which will conflict with existing entries, and you can choose: Skip duplicates and import the rest, Overwrite duplicates (replace existing ones), or Cancel. No silent skipping will occur.
There are two target locations:
- Copy to the enabled directory skills: Takes effect immediately, and an automatic validation and repair will run after import.
- Copy to the pool skill-pool: Unmounted, can be enabled later.
During import, kebab-case normalization will be performed. The actual test example given in the README is guizang-ppt-skill-main → guizang-ppt-skill. The results will display ✓ (overwritten), △ (skipped as duplicate), ✗ (failed), and warnings for each entry.
Enable, Disable, and Specification Validation¶
Enabling/disabling moves entries between the pool and the enabled directory, supporting both directory bundles and flat .md files. Conflicts or duplicates will trigger an error, and existing entries will not be overwritten.
Validation status is indicated by a colored dot next to the skill name, based on ~/.dsh/skill-manager-ytxue.checked.json, judged by the SHA1 fingerprint of the SKILL.md content:
- Green dot: Validated against specifications and content unchanged.
- Red dot: Not yet validated, or content has been modified.
Validation only runs for red dot entries: full validation runs when first enabled, and afterwards (including each time the plugin starts) only validates new or modified entries, skipping green dots automatically. Non-compliant entries will be automatically repaired, and logs will be written to ~/.dsh/skill-manager-ytxue.log. The repair items listed in the README include:
- Rename non-kebab-case directory/file names to kebab-case, and synchronize the frontmatter name field.
- Fix missing frontmatter name, non-kebab-case name, or inconsistent name and directory name, using the directory name as the correct value.
- Add placeholder description if description is missing (DSH will exclude skills without descriptions).
- Convert camelCase boolean fields disable-model-invocation / user-invocable to kebab-case; fix or delete non-boolean values (recognizes TRUE/FALSE/1/0/yes/no/on/off).
The host exposes a set of local loopback APIs with the path prefix /api/skill-manager-ytxue/, such as GET /state to fetch a snapshot of both directories, POST /check, /enable, /disable, /import, and GET /list-dir for selectors. Responses follow the format {ok, data?} or {ok:false, error}. The panel only requests these local APIs and does not send external requests.
Installation and Activation¶
The installation command given on the directory page is as follows, run it in the DeepSeek Harness terminal:
dsh plugin add github:YTxue/dsh-skill-manager-ytxue
For a reproducible installation, pin the commit hash as instructed on the directory page. As of 2026-08-14, the latest commit on the repository’s main branch is f254f3005a446062e312144f27ed0820d38d4654:
dsh plugin add github:YTxue/dsh-skill-manager-ytxue#f254f3005a446062e312144f27ed0820d38d4654
The README also provides two methods that avoid the npm同名 package (note: original Chinese has “same-name package”, translated as “package with the same name”). One specifies the web profile and git address:
dsh plugin --profile web add git+https://github.com/YTxue/dsh-skill-manager-ytxue
The other is to clone the repository and mount it using DSH’s native mechanism (called Method B in the README, compatible with all environments):
git clone https://github.com/YTxue/dsh-skill-manager-ytxue.git
- Move the plugin directory to
$DSH_HOME/profiles/web/node_modules/dsh-skill-manager-ytxue/. - Append the following to
$DSH_HOME/profiles/web/cordis.patch.yml:
- insert:
- id: skill-manager-ytxue
name: 'dsh-skill-manager-ytxue'
- Use
dsh --profile web --dump-configto confirm thatskill-manager-ytxueappears in the configuration tree. - Restart DSH and open Settings → “Skill Management”.
The plugin metadata is defined in the main, exports["./client"], and dsh fields of package.json, and no separate plugin.json is required. The host side has zero third-party runtime dependencies (only uses Node built-in modules and Cordis injections); the client depends on React, slots, and sessions. If you encounter the error Cannot find package '@deepseek-ai/...' on startup, it means the plugin is not in the Node resolution path. The README recommends placing it in profiles/web/node_modules/ or using dsh plugin add instead.
If you installed the plugin with dsh plugin add and then deleted the plugin directory, you may encounter the error cannot resolve profile bundle "dsh-skill-manager-ytxue" on startup. You need to remove the entry from ~/.dsh/profiles/web/package.json’s dsh.profile.bundles and dependencies, or run:
dsh plugin --profile web remove dsh-skill-manager-ytxue
Modifying the plugin code requires a full restart of DSH to take effect; HMR will not refresh the Node ESM module cache or the browser startup bundle.
Typical Usage¶
The following workflow comes from the functional description in the repository README and the author’s deployment records from 2026-08-14, and is not third-party reviewed.
- After installing and restarting, open the Web UI settings and go to the “Skill Management” sidebar panel.
- If the skill is already in a download directory: click the folder icon to select the directory, or enter the path directly. The panel will automatically determine if it is a single skill or batch import.
- When the duplicate name pre-check window appears, select skip, overwrite, or cancel as prompted. For immediate use by DSH, choose the enabled directory
skillsas the target; if you just want to store it for later, chooseskill-pool. - Move entries from the pool to
~/.dsh/skillsusing the enable operation; temporarily unused skills can be disabled back to the pool. Enabling/disabling conflicts will trigger an error and will not overwrite existing entries. - For entries with red dots next to their names, click “One-click Check”. Repairs will be written to disk, logs will be saved to
~/.dsh/skill-manager-ytxue.log(JSONL format), and validation status will be stored in~/.dsh/skill-manager-ytxue.checked.json. Entries with unchanged content will be skipped in future checks. - After switching to another repository’s session and refreshing the panel, the project-level skill list will update to match the current working directory.
The end-to-end validations recorded by the author in the README include: the settings panel is operational (for example, disable frontend-design then enable frontend-design); HTTP import / enable / disable and conflict protection work correctly; running /check on a real root directory returns checked: 3, fixed: 0 (for docx, frontend-design, and guizang-ppt-skill); all 51 tests in test/core-test.mjs pass (audit, automatic repair, idempotency, startup/shutdown, conflicts, import, BOM, status-driven). Local retests can be run with:
node test/core-test.mjs
Applicable Scenarios and Notes¶
This plugin is suitable for users who are already using the DSH Web UI and need to import external skill directories into ~/.dsh/skills or the skill pool, and perform a one-time repair to conform to kebab-case, description, and boolean field specifications. Project-level skills are only displayed, not validated, and cannot be modified through this panel. You need to distinguish between system-level and project-level skills using the tags shown.
The author’s test environment is Windows (PowerShell 5.1 + Node 20+), and full validation has only been performed locally. For macOS / Linux (including virtual machines), follow the installation instructions, and you can submit issues to the repository if you encounter problems. If you encounter the error EADDRINUSE: 127.0.0.1:3080 on Linux startup, it means another DSH instance is occupying the port; stop the old process first before starting the new one. git / gnutls_handshake failed errors from other plugins in the logs are network connectivity issues and unrelated to this plugin.
The plugin will write to skills, skill-pool, skill-manager-ytxue.log, and skill-manager-ytxue.checked.json under ~/.dsh/, and you need to ensure that the DSH process has write permissions to this directory. Failures to write logs or status files will silently degrade without blocking the main workflow. The target directories for enable / disable / import are limited to skills and skill-pool; overwrite operations only delete the同名 entries in the target directory. parseSkillDoc will strip UTF-8 BOM to avoid frontmatter parsing failures caused by Windows tools saving SKILL.md with a BOM.
Both the directory page and the repository remind users: the plugin runs with the permissions of the current dsh process, and code execution may occur during installation. You should inspect the source repository and license before installing; pin the commit hash for reproducible installations. This plugin is a community open-source project and not an official DeepSeek component.
Summary¶
dsh-skill-manager-ytxue consolidates skill pool management, enabled directory management, duplicate name pre-checks, and status-driven specification repairs into the settings sidebar, and marks system-level and current project-level skills. The installation command, source code, and license are as follows:
- Directory page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-skill-manager-ytxue/
- GitHub: https://github.com/YTxue/dsh-skill-manager-ytxue
- DeepSeek Harness: https://github.com/deepseek-ai/deepseek-harness