dsh-useof-skill-panel: Record skill usage per round in DSH and update dynamically within the application.

Preface

When running agents with DSH (DeepSeek Harness), you will inevitably install a pile of skills: toolkits for model invocation, and SKILL.md files you’ve gathered yourself. After installation, two questions are hard to answer: which skills were actually triggered in this round of conversation, and where these skills were installed and whether the author has updated them. The model won’t explicitly say “I called X” in every reply, so you can’t count them just from the chat logs. Installing and uninstalling skills often requires jumping to external scripts or filling in fields.

The doctorpancode/dsh-useof-skill-panel introduced below is aimed at these two issues. It is a cordis plugin for DSH Desktop Beta, forked from VDERR/dsh-echocat-skill-panel (keeping the attribution and source, v5.1.4). The only change is the removal of the summary bar above the input box. The maintainer is doctorpancode, licensed under MIT. The license statement credits the dsh-skill-report contributors. As of the time of scraping, it has 0 GitHub stars.

Let’s clarify its positioning first: It is not the model, nor a skill marketplace. It is a panel installed in the DSH client that manages “cost, who is called, and whether it can be updated.”

What it does

One sentence: It statistics which skills are used in each round of conversation and provides an in-app skill installation/uninstallation and update manager.

The key design is that the determination does not rely on the model’s self-awareness. The plugin deduces which skills were called in the current round from the session event stream—whether the model called them automatically, you manually typed /name, or none were used. It reports all three scenarios. Even if the model forgets to say what it called, it is still counted. The interface has two locations sharing the same data:

  • A persistent icon in the left column, registered at the sidebar.panellist slot (order 60). Clicking it opens the panel in the middle column.
  • A middle column panel (main slot) displaying the full report and the skill directory.

The original version had a third slot—the summary bar above the input box (conversation.input.dock). This fork removes both the component and its registration, so that bar will never be mounted. The trade-off is: the original bar was the only place to insert /skill-name into the input box; the one-click insert skill name function is gone. To see the bar, just enable the original version; the two plugins can be installed simultaneously without interfering.

Core Functions

Per-Round Skill Usage

The panel reports the actual skills used in each round of conversation, including counts and source (model auto / manual /name / unused). The four counters on the original bar were removed along with the bar, but the counts themselves are retained in the panel.

Install/Uninstall Skills In-App

Open the install/uninstall panel in the top right corner of the report and paste the author’s address entirely, for example:

https://github.com/owner/repo/tree/main/skills/my-skill

It recognizes repository homepage links, folder links within the repo, SKILL.md links, direct zip links, owner/repo, and SSH addresses. The host determines whether to clone or download, and parses branches and subdirectories from the address, so you don’t need to fill in three boxes. You can also upload .md/.zip, or paste the entire SKILL.md content.

The safety rules are explicitly written: same names will not silently overwrite; backup is made before replacement. If installed by mistake, it can be deleted, and the deletion moves it to the backup directory, never a hard delete.

Update After Installation

The problem with 3.0 was that the address was lost after use (git clones were also deleted), so even if the author posted a fix, you couldn’t tell if it was new or old and had to delete and reinstall. The approach in 4.0 is to write the source into the skill’s own .echocat.json during installation: address, branch, subdirectory, commit at install time, and a content fingerprint. Consequently:

  1. An additional source line appears on the card; when there is a new remote commit, it is marked “Updatable”. Clicking twice replaces it, with the old version going to backup first.
  2. The check runs git ls-remote only once, without re-downloading content; it won’t be falsely reported as “new version” if the source is pinned to a specific commit.
  3. When you have manually modified files in this skill, the confirmation text will explicitly say “Update will overwrite them”—this is the only scenario where changes are lost.
  4. Skills installed manually or via 2.x/3.0 do not have this record. A “Mark Source” button appears on the card; filling in the address once includes it in updates.
  5. The Chinese display name is unaffected; updates use the display-name-zh you set.

By the way, the plugin itself can also check for updates: the “Check for Updates” button in the panel header asks npm or GitHub for updates (10-minute cache, only connects on click), with a link to the GitHub releases page next to it. When a new version is found, the button has an accent color and a small dot, and the header directly states “Updatable x.y.z”. When not found or already up to date, the messages are different.

Disable Equals Move Out of Directory

Each skill has a switch. Disabling moves the directory out of DSH’s monitored skills directory—the model truly won’t load it, but all files remain, ready to be re-enabled with one click at any time. Enabled and disabled skills are listed in separate groups. Cards for disabled skills can still be renamed, checked for source, updated, and deleted.

Chinese Display

The Chinese name is written into the skill’s own meta.yaml (display-name-zh), and the panel displays it in Chinese. It can be filled during installation and changed anytime on the card afterwards; leaving it blank clears it. The /name gesture still uses the ASCII alias, and they do not interfere with each other.

Background and Interface

The panel can have a background. “Customize Background” in the top right of the report opens the settings panel with real-time preview on the left. Preview, Cancel, and Restore Default are three distinct actions. Four style types (Liquid, Soft Gradient, Solid Color, Local Image) plus six low-saturation presets. Images accept JPG/PNG/WebP (max 8 MB), resized locally to a max long side of 1920, stored in the client database, uploaded nowhere, not modifying skill data, and not touching host configuration. Settings are shared across the plugin’s surfaces, retained after refresh, but do not claim cross-device sync—because they truly don’t.

The interface width is derived from the host input box width (--dsh-composer-card-max-width minus 16px), always narrower than the input box, and shares the same central axis. Both light and dark themes have been tested. Text colors have WCAG contrast ratios calculated (Body 18.2:1, Secondary 6.4:1, Metadata 5.3:1), with coverage for prefers-reduced-motion, prefers-reduced-transparency, and narrow screens.

Installation & Enablement

The plugin is not published to npm; source code is obtained from GitHub. Installation commands are as follows (PowerShell):

git clone https://github.com/Doctor-Pan-code/dsh-useof-skill-panel.git
cd dsh-useof-skill-panel
npm install            # Only installs two optional peers, not needed at runtime

Link the repository directory into the profile (default <DSH_HOME> is ~/.dsh):

# 1) Add to dependencies in <DSH_HOME>/profiles/<your profile>/package.json:
#      "dsh-useof-skill-panel": "link:<absolute path to this repo>"
# 2) Add to the dsh.profile.bundles array in the same file:
#      "dsh-useof-skill-panel"
# 3) Run pnpm install once more

cordis.patch.yml is provided with the package. Declaring it in bundles will mount it automatically; no manual patch lines are needed.

A few points to note:

  • The two peerDependencies (@deepseek-ai/dsh-llm, @deepseek-ai/schemastery) are marked as optional, provided by the DSH runtime, and npm will not download its own copy to replace the host.
  • After installation, DSH Desktop Beta must be restarted. The host side is snapshotted into memory at boot, while the client bundle is re-fetched every time a page is opened. Changing the client only requires refreshing the page; changing the host requires a restart.
  • The four steps for manual installation, uninstallation rollback, and the five hard constraints that would prevent the app from starting are written in the repository’s 安装说明.md. It is worth reading before installing.

Typical Usage

Daily workflow after installation:

  1. Click the persistent icon in the left column to open the middle column panel and see which skills the model called in the current round report, whether automatically or via your /name gesture.
  2. To add a skill, paste the author’s address in the install/uninstall panel and wait for the host to parse, clone, or download. Once installed, you can see the source line on the card.
  3. When the list shows an “Updatable” marker, click twice to replace, with the old version going to backup first. The confirmation dialog will ask if you want to overwrite manually modified files.
  4. Disable rarely used skills with the switch, moving the directory out of the monitoring scope, and re-enable when needed.
  5. Use “Customize Background” in the top right of the report to adjust the panel appearance and save once satisfied.

Development toolchain: After modifying the client, run node tools/build-client.mjs to rebuild lib/client.js, npm test to run 14 suites of 1520 assertions, and node tools/preview.mjs to render a real panel screenshot. lib/client.js is the build artifact for the repository. If src/client/ is modified, it must be rebuilt in the same commit.

Suitable Scenarios & Notes

Suitable for: Users of DSH Desktop Beta with multiple skills installed or those writing skills for themselves; users who want to confirm the actual call status of each round and don’t want to rely on the model’s self-awareness. It is a client-side plugin, categorized under the client category in the community directory. Pages like Star/StarHub are independent sites with no official affiliation with DeepSeek or Huansuan.

A few points to clarify:

  • The plugin runs with the permissions of the current DSH process. It will actually write to the skills directory and perform git clone or download on remote repositories when installing/uninstalling skills. Before installation, you should check the source code and license yourself (MIT, LICENSE is in the repository root). Do not paste internal repository addresses directly into the panel.
  • The fork is not published to npm, and version check addresses still point to the upstream npm package and GitHub release page. This means the “Check for Updates” judgment for this fork is discounted; the GitHub repository takes precedence.
  • 0 stars, no third-party usage records, and behavior is fully backed by its own tests (14 suites, 1520 assertions). The fact that functional details are identical to the upstream version is verifiable, but it is recommended to run a test in a test profile before integrating into a production environment.

Ending

This plugin solves two small things: no more guessing about skill usage per round, and no need to leave the app for installation, uninstallation, or updates. The relationship between the fork and the upstream version is written in the README. The attribution is preserved word-for-word, which preserves the possibility of coexisting with the original version—just enable the original dsh-echocat-skill-panel@5.1.3 if you want the summary bar and one-click skill name insertion.

  • Directory page: https://www.skillhub.cn/plugins/doctorpancode/dsh-useof-skill-panel
  • GitHub: https://github.com/doctorpancode/dsh-useof-skill-panel
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye