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:

  1. Path points to a single Skill (a directory containing SKILL.md or a .md file) → Import 1 item.
  2. 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.
  • name missing or inconsistent with directory name → Corrected using the directory name.
  • description missing → 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 is dsh-skill-manager-ytxue. Please refer to the GitHub repository for installation.

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
  1. Place the directory into $DSH_HOME/profiles/web/node_modules/dsh-skill-manager-ytxue/.
  2. Append to $DSH_HOME/profiles/web/cordis.patch.yml:
- insert:
    - id: skill-manager-ytxue
      name: 'dsh-skill-manager-ytxue'
  1. Verify the configuration tree:
dsh --profile web --dump-config

The output should include the skill-manager-ytxue entry.

  1. 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

  1. Open the DSH Web interface and navigate to Settings → Skill Management.
  2. In the import area, click the folder icon or manually enter a path pointing to a directory containing multiple Skills.
  3. If a duplicate pre-check popup appears, choose to skip, overwrite, or cancel as needed.
  4. Select the target as the enabled directory or the pool directory, and confirm the import.
  5. 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 add and then deleted the directory, startup may fail with cannot resolve profile bundle "dsh-skill-manager-ytxue". You need to run dsh plugin --profile web remove dsh-skill-manager-ytxue or manually clean up the bundles entry in package.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