DeepSeek Harness (DSH) adopts a plugin-based architecture. Skill invocation in the Web interface usually relies on native scanning or file operations. If you need to directly integrate local SKILL.md files under a specific directory as skills in the / menu, the dsh-v-skill-links plugin provides a direct mapping solution. It allows users to map local directories to menu skills, custom commands, and quick buttons without modifying the native logic.

Core Features

The plugin provides the following capabilities:

  • Skill mapping: Maps first-level subdirectories in configured directories (containing SKILL.md) as skills in the / menu. Selecting one injects the full content.
  • Custom commands: Immediately sends a Prompt after selecting the command in the / menu, suitable for triggering fixed patterns.
  • Quick buttons: Displays a grid below the input box. Clicking a button appends the Prompt to the input box, supporting continued editing, auto-send, and binding to models/reasoning levels.
  • Visual settings: Provides a settings page with hot-reload support, no process restart required.

Installation

Environment requirement: Harness version 0.1.2-rc.1 or later.

Use the official install command:

dsh plugin --profile web add "github:victor10035445/dsh-v-skill-links"

After installation, refresh the page or restart dsh web to take effect.

Configuration and Usage

Configuration Directories

The plugin scans skills through configured directories. You can directly edit the configuration file or use the visual settings page.

Configuration file example ($DSH_HOME\profiles\web\cordis.patch.yml):

- id: dsh-v-skill-links
  config:
    directories:
      - D:/skills/my-skills
      - ~/my-skills
      - ./skills

Visual Settings Page

It is recommended to use the sidebar gear icon → Settings → Skill Management:
* Skill Mapping: Enter one directory path per line. Changes take effect immediately after saving.
* Custom Commands: Maintain the name and Prompt.
* Quick Features: Maintain the name, Prompt, auto-send option, and model binding (supports following the current session or specifying a model/reasoning level).

Usage Flow

  1. Type / in the input box to expand the menu.
  2. Select a skill in the Mapped Skills group (or manually type /name).
  3. Add additional text and send it. The model will receive your original message and the injected <skill_content> block.

Notes

  • Scanning rules: Only first-level subdirectories of configured directories are scanned. Hidden directories starting with . are skipped. The skill name defaults to the subdirectory name, or can be specified as name or description in the frontmatter of SKILL.md.
  • Name conflicts: If a mapped skill name conflicts with an official command, the command takes higher priority and the skill cannot be triggered.
  • Injection mechanism: Injected content only applies to the step where the message is sent and does not replay historical messages.
  • Button model binding: Quick buttons can be bound to a model and reasoning level. If binding fails (for example, the model is unavailable), Prompt appending is not blocked; only an error message is shown.
  • Subagents: Subagent sessions also display the button grid, but model switching operations are silently skipped in subagents.

Conclusion

This plugin provides a flexible menu integration solution for local skill management and is suitable for scenarios that require directly invoking specific scripts or documents as skills.