In DSH (DeepSeek Harness) workflow development, models usually automatically trigger skills based on keywords. When the model’s intent is unclear or its selection deviates, there is often no effective way to intervene manually. The dsh-skill-gate plugin introduces an interception point and returns the final skill selection to the user, addressing this pain point.

Plugin Positioning

This is a DeepSeek Harness host plugin maintained by Bryan-cmf. It works as follows: when a model triggers a skill, the system intercepts the dispatch flow and presents the suggested skill and other candidate skills (each with a description) to the user; after the user makes a selection within the specified time, the system executes the corresponding skill.

Core Features

  • Final user decision: Adds a confirmation step between model intent and actual execution, preventing the model from invoking the wrong skill.
  • Timeout fallback: Defaults to a 10-second timeout. If the user does not make a selection, the system automatically continues execution using the requested default skill.
  • Native UI display: Shows the candidate skill list through the system’s native question-and-answer interface, eliminating the need for additional UI development.
  • Headless mode: Supports environments without UI dependencies. In this mode, the gate lets the request pass through directly.

Installation and Enablement

The plugin requires DSH version >= 0.1.0-rc.6 and depends on the skills, userQuestions, and timer services (the userQuestions service requires a browser UI environment).

Import the plugin package in DSH’s host configuration:

"dsh": {
  "profile": {
    "bundles": ["@bryan-cmf/dsh-skill-gate"]
  }
}

Method 2: Agent Preset

Add the plugin line to the Agent preset configuration:

- id: skill-gate
  name: '@bryan-cmf/dsh-skill-gate'

Typical Workflow

After enabling the plugin, the workflow runs according to the following logic:

  1. The model triggers a skill invocation.
  2. The tools/execute stream intercepts dispatch and opens the native question-and-answer UI.
  3. The UI displays the candidate list (including the system default skill).
    • Example interface:
        🧠 技能选择
        系统将使用技能「ak-hk-stock-dd」。要改用其他技能吗?
        (10 秒内未选择将自动使用「ak-hk-stock-dd」)

        [ak-hk-stock-dd]  系统建议(预設)
        [serenity-skill]  供應鏈瓶頸投資研究方法論
        [dcf-valuation]   Discounted cash flow valuation…
  1. User selects: The system generates a synthetic instruction and injects it into the conversation; the model loads the selected skill.
  2. User does not act: If timeoutMs (default 10000ms) is exceeded, the system’s default skill executes as originally planned.

Notes and Scenarios

  • Status change: This plugin has been superseded by @bryan-cmf/dsh-skill-ledger; the original repository is archived only as a historical design record. If you need the new non-blocking skill prompt solution, refer to the ledger plugin.
  • Concurrency limit: Only one gate can be open at a time. If the first gate has not been closed, new skill trigger requests will pass through directly and will not be intercepted.
  • Environment dependency: In a headless environment without UI, ensure that no userQuestions provider is configured; otherwise the plugin will report an error.
  • License: MIT.

Summary

dsh-skill-gate provides DSH agents with a simple and controllable human-in-the-loop mechanism. By changing skill selection from “automatic triggering” to “manual confirmation,” it can reduce the risk of accidental triggers while maintaining efficiency.