Preface¶
In DeepSeek Harness (DSH), Skills are the primary vehicles for extending agent capabilities. In practical development, Skills are often scattered across download directories, project repositories, and ~/.dsh/skills: some haven’t written their frontmatter according to DSH specifications, some are intended for temporary storage in the pool, and some need to switch between system-level and project-level. Relying solely on manual file edits and memorizing paths makes enabling, disabling, and batch importing error-prone.
This article introduces the community plugin dsh-skill-manager-ytxue (maintainer: YTxue, category: Workflow). It provides a “Skill Management” panel in the DSH Web interface’s Settings sidebar, consolidating list viewing, enabling/disabling, folder batch importing, specification checking, and automatic fixing into a single interface.
What Is This¶
dsh-skill-manager-ytxue is a DSH Web plugin (current version 0.6.0, MIT license). The plugin registers a settings.section entry (order: 900) in the settings sidebar, with the panel titled “Skill Management”.
It targets two directories:
- Enabled Directory
~/.dsh/skills/: System-level Skills, scanned natively by DSH (rank 400), taking effect immediately upon import. - Pool Directory
~/.dsh/skill-pool/: Stores Skills without mounting, ready to be enabled on demand.
The panel also displays project-level Skills (<project root>/.dsh/skills, <project root>/.agents/skills) as read-only entries, which do not participate in specification checking. When switching DSH sessions, the panel automatically filters entries based on the current working directory, displaying only the corresponding project-level items.
Core Features¶
Status Overview and Identification¶
The panel displays Skills from both the enabled directory and the pool directory in a dual-column layout. Each entry has a morphology tag:
| Tag | Morphology | Description |
|---|---|---|
| bundle | skills\<name>\SKILL.md |
Directory-based, can include scripts, templates, and other resources |
| flat | skills\<name>.md |
Single Markdown file |
The tag also indicates whether the source is system-level or project-level. Each row shows the description from the frontmatter; a dot next to the name indicates the check status—a green dot means checked and content unchanged, while a red dot means unchecked or content changed.
Importing Skills¶
The toolbar supports importing from local paths, with options for manual input or using a built-in directory browser dialog (starting from all drives, supporting arbitrary depth).
The import logic automatically detects single and batch imports:
- Path points to a single Skill (a directory containing
SKILL.mdor a.mdfile) → Import 1 item. - Path points to a large folder containing multiple Skills → Import each immediate sub-directory, ignoring non-Skill files.
For name conflicts, a dry-run pre-check is performed first, displaying a popup listing conflicting entries. You can choose to skip duplicates and import the rest, overwrite duplicates, or cancel. The target can be the enabled directory (taking effect immediately with automatic checking and fixing) or the pool directory. Import results are displayed per item with success, skip, or failure markers; directory names are automatically normalized to kebab-case.
Specification Checking and Automatic Fixing¶
“One-Click Check” uses a state-driven strategy: only processes red-dot entries, automatically skipping green-dot entries. Checking is based on the sha1 fingerprint of the SKILL.md content stored in ~/.dsh/skill-manager-ytxue.checked.json.
Non-compliant items are automatically fixed and logged to ~/.dsh/skill-manager-ytxue.log, including:
- Directory/file names not in kebab-case → Renamed to normalize, synchronizing the frontmatter
name. namemissing or inconsistent with directory name → Corrected using the directory name.descriptionmissing → Added a placeholder description.- Boolean fields with camelCase or non-standard values → Changed to kebab-case or corrected/deleted.
Enabling and Disabling¶
Moving entries between the pool directory and the enabled directory, supporting both bundle directories and flat files. Conflicts or duplicates trigger safe errors, with no silent overwriting.
Project-Level Skill Display¶
By default, only project-level Skills corresponding to the current session’s project are displayed. The client subscribes to the sessions service, synchronizing the working directory upon session switching; the host detects .git ancestors upward to determine the project root (consistent with DSH skill-filesystem determination). If a project has never had a session but still needs to be displayed, you can configure it in $DSH_HOME/settings.yaml:
skill-manager-ytxue:
projectRoots:
- '/path/to/project1'
- '/path/to/project2'
Installation and Enabling¶
Package Name Note: The npm package
dsh-skill-manager(maintainer:gohana) is an unrelated third-party package. This project’s package name isdsh-skill-manager-ytxue. Please refer to the GitHub repository for installation.
Method A: git clone + dsh plugin command (Recommended)¶
git clone https://github.com/YTxue/dsh-skill-manager-ytxue.git
dsh plugin --profile web add /path/to/dsh-skill-manager-ytxue
Then append the mount entry in $DSH_HOME/profiles/web/cordis.patch.yml and restart DSH to take effect.
Method B: git clone + manual mounting¶
git clone https://github.com/YTxue/dsh-skill-manager-ytxue.git
- Place the directory into
$DSH_HOME/profiles/web/node_modules/dsh-skill-manager-ytxue/. - Append to
$DSH_HOME/profiles/web/cordis.patch.yml:
- insert:
- id: skill-manager-ytxue
name: 'dsh-skill-manager-ytxue'
- Verify the configuration tree:
dsh --profile web --dump-config
The output should include the skill-manager-ytxue entry.
- Restart DSH and open Settings → Skill Management.
You can also install using a remote address (bypassing the npm package of the same name):
dsh plugin --profile web add git+https://github.com/YTxue/dsh-skill-manager-ytxue
Requires Node.js >= 20.
Typical Usage¶
Batch Import from Local Folders¶
- Open the DSH Web interface and navigate to Settings → Skill Management.
- In the import area, click the folder icon or manually enter a path pointing to a directory containing multiple Skills.
- If a duplicate pre-check popup appears, choose to skip, overwrite, or cancel as needed.
- Select the target as the enabled directory or the pool directory, and confirm the import.
- Click “One-Click Check” to handle specification issues for red-dot entries.
Switching Between Pool and Enabled Directories¶
Find the target Skill in the list and use the enable/disable operation to move it between skill-pool and skills. Both bundle and flat entries are moved as a whole.
Calling via HTTP API¶
The plugin provides a same-origin API on loopback, suitable for scripts or automation integration:
| Method | Path | Description |
|---|---|---|
| GET | /api/skill-manager-ytxue/state |
Dual-directory state snapshot |
| POST | /api/skill-manager-ytxue/check |
Check unchecked items and fix them |
| POST | /api/skill-manager-ytxue/enable |
body {name} |
| POST | /api/skill-manager-ytxue/disable |
body {name} |
| GET | /api/skill-manager-ytxue/list-dir |
Directory browsing, ?path= defaults to home directory |
| POST | /api/skill-manager-ytxue/import |
body {source, target?, conflict?, dryRun?} |
Running Unit Tests¶
The repository provides core-layer tests (51 items):
node test/core-test.mjs
Applicable Scenarios and Notes¶
Who Is This For
- Developers who need to centrally manage a large number of Skills in DSH and frequently switch between the pool and enabled directories.
- Those importing Skills from external repositories or local folders in batch and wanting to handle duplicate conflicts before import.
- Users who wish to check frontmatter, directory naming, and boolean fields according to DSH specifications with one click, reducing manual effort.
Notes
- The plugin runs with the permissions of the current DSH process, reading and writing to
~/.dsh/skills/,~/.dsh/skill-pool/, and the check state file. Before installation, you should read the source code and confirm the MIT license. - The author’s test environment is Windows (PowerShell 5.1 + Node 20+); macOS/Linux can follow the README for installation, and issues can be reported on GitHub.
- If you previously installed via
dsh plugin addand then deleted the directory, startup may fail withcannot resolve profile bundle "dsh-skill-manager-ytxue". You need to rundsh plugin --profile web remove dsh-skill-manager-ytxueor manually clean up the bundles entry inpackage.json. - The panel only requests local
/api/skill-manager-ytxue/*endpoints with no external network requests; the host side has zero third-party dependencies.
Conclusion¶
dsh-skill-manager-ytxue brings Skill listing, importing, enabling/disabling, and specification fixing into the DSH settings sidebar, using state-driven checking to reduce repetitive work and duplicate pre-checking to lower the risk of batch imports. If you are maintaining many Skills or need to normalize non-compliant frontmatter, you can install and try it following the steps above.
- SkillHub Directory Page: https://www.skillhub.cn/plugins/YTxue/dsh-skill-manager-ytxue
- GitHub Repository: https://github.com/YTxue/dsh-skill-manager-ytxue