Preface¶
When switching to a different Agent runtime, the most tedious part is often not the model itself, but moving your skill library over. In December 2025, Anthropic released Agent Skills as an open specification: place SKILL.md in a directory, use YAML frontmatter for name and description, write the steps in the body, and include scripts and reference files when needed.
Claude Code stores skills in .claude/skills/, Gemini CLI has its own directory, Cursor uses .cursor/rules/*.mdc, and Claude Code’s slash commands live in .claude/commands/*.md. You already have these files on your local machine, and you don’t want to copy them all over again when moving to DeepSeek Harness (hereafter DSH).
The official DSH documentation states that its skill subsystem can already read SKILL.md: the native provider dsh-skill-filesystem scans project-level and user-level .dsh/skills/ and .agents/skills/ directories. Tool-specific paths, Cursor rules, and slash commands are not covered by this native scan. The community plugin dsh-skillport was built to fill this gap: it discovers locations not covered by DSH, converts adjacent formats into skills, and passes them to the platform’s built-in directory and skill loading tools.
This article is compiled after cross-checking the community directory page, repository README / README.zh.md, package.json, docs/spec-revision.md, and source code: explaining what this plugin is, which directories it scans, how to install it, and how to perform health checks.
What It Is¶
dsh-skillport is a skill plugin for DeepSeek Harness, with the npm package name @dsh-skillport/bundle, current version 0.1.0, primarily written in TypeScript, licensed under MIT. It is maintained by jesse-njx, with source code hosted in the GitHub repository jesse-njx/dsh-skillport. It was added to the community directory page on 2026-08-14, categorized under “Skills”; as of 2026-08-18, it has 2 GitHub stars.
The problem it solves can be summed up in one sentence: it lets you use the skills you have already written in Claude Code, Codex, Cursor, and Gemini CLI directly in DSH sessions, without first migrating them to .dsh/skills or .agents/skills.
You need to distinguish two key points first:
1. DSH’s built-in skill tech stack. The official repository follows the philosophy of “everything is a plugin”. The skill registry ctx.skills, deduplication by rank, injecting names and descriptions into the system prompt, and using the skill tool to load bodies on demand are all platform capabilities. .dsh/skills and .agents/skills are scanned by dsh-skill-filesystem.
2. Skillport does not build a separate executor. The repository README clearly defines its narrow responsibilities: discovering locations not covered by DSH, converting adjacent formats, and making the results debuggable. Imported skills enter the native registry; skills with scripts still use DSH’s regular shell tools and sandbox for execution.
The community plugin directory deepseek-harness-plugin.com is an independent site with no official affiliation to DeepSeek / HyperMind, do not treat it as an official app store.
Core Features¶
Discover Existing SKILL.md Files¶
The plugin scans by source groups. The discovery roots and ranks specified in docs/spec-revision.md are as follows (lower numbers mean higher priority; in case of duplicate names, the lower-ranked one wins):
| Source | Path | Rank (Project-level / User-level) |
|---|---|---|
| DSH Native | .dsh/skills/, ~/.dsh/skills/ |
100 / 400 |
| Claude Code | .claude/skills/, ~/.claude/skills/ |
150 / 450 |
| Codex / Open Convention | .agents/skills/, ~/.agents/skills/ |
200 / 500 |
| Gemini CLI | ~/.gemini/antigravity/skills/ |
550 |
| Extra Paths | Configured via extraPaths |
650 |
Two critical points must be understood per the repository documentation:
- .dsh/skills and .agents/skills are already scanned by dsh-skill-filesystem in the standard preset. Skillport will skip these two groups if it detects the native provider, to avoid double injection; only when the native provider is absent will it scan these directories as a fallback.
- SKILL.md files scanned from Claude, Gemini, and extraPaths will be registered as model-callable skills. Names and descriptions are added to the session directory, the body is loaded on demand via the platform’s skill tool, and bundled resources are parsed according to the skill directory.
SKILL.md validation aligns with the pinned Agent Skills revision: name is required, 1–64 characters, only lowercase letters, numbers, and hyphens allowed; description is required, 1–1024 characters. Optional fields include license, compatibility, metadata, and allowed-tools. DSH’s additional fields whenToUse, disable-model-invocation, and user-invocable are also accepted.
Convert Adjacent Formats¶
The repository refers to the following three categories as Tier-2, best-effort conversions, with source annotations:
- Cursor Rules: .cursor/rules/*.mdc → model-callable skills, source cursor. The description, globs, and alwaysApply fields in the frontmatter will be mapped to trigger conditions and body content.
- Claude Code Slash Commands: .claude/commands/*.md → user-invocable skills, triggered with /name in the session, source claude-command.
- Context Files: AGENTS.md and CLAUDE.md are injected as project context only when the native dsh-agent-instructions plugin is absent; they are skipped if the native plugin is present.
These three types are enabled by default, and can be disabled in the configuration.
find_skill and Directory Limits¶
With too many skills, stuffing all descriptions into the system prompt will cause bloat. The default value of the maxIndexEntries configuration item is 100: entries beyond this limit will no longer be listed as model-callable candidates, and only remain as user-invocable skills, retrievable via the find_skill tool.
find_skill is a tool for models, not a user slash command. It accepts two parameters in the source code:
- query: Keyword search by name, description, and whenToUse
- name: Load the full description by exact name (ignores query at this point)
When there are many skills, the visible directories do not match the current task, or you suspect a skill has been blocked by the limit, the model can use this tool.
Skill Health Check (skills doctor)¶
Descriptions written for Claude’s trigger habits may not align with DeepSeek models. Skillport provides in-session commands and a standalone CLI.
In a session:
/skills doctor
/skills doctor deploy the app to production
The former lists loaded skills by source; the latter performs a test fire with a given description, returning a ranked matching list. The sample output from the README is as follows:
/skills doctor
## project-claude (1)
- commit-helper — Craft conventional-commit messages from staged changes.
## project-dsh (1)
- deploy — Deploy the application to staging or production with rollback.
/skills doctor deploy the app to production
Test-fire: "deploy the app to production"
- deploy [skillport/project-dsh] score=0.83
"Deploy the application to staging or production with rollback."
Without starting a DSH session, you can use the skills-doctor tool included with the package:
skills-doctor --cwd ~/work/projectx list
skills-doctor --cwd ~/work/projectx test-fire "deploy the app to production"
The CLI will also scan the same discovery roots and print duplicate-skills blocked by deduplication ([shadowed]) to stderr.
Pinned Specification Revision¶
Agent Skills is still evolving. Skillport pins its implementation to the revision recorded in docs/spec-revision.md: the community reference repository agentskills/agentskills at commit 5d4c1fda (documented as scraped on 2026-08-14), and the platform pins @deepseek-ai/dsh-base@0.1.0-rc.6. The source code constant is agentskills@5d4c1fda / dsh-base@0.1.0-rc.6. The repository includes consistency fixtures (missing fields, Unicode names, nested resources), and the README states the current test suite has 60 cases.
Installation and Enablement¶
The installation command given on the community directory page (as per the original text on the page) is to execute this in the DSH terminal:
dsh plugin add github:jesse-njx/dsh-skillport
For reproducible installations, append the commit hash to the repository per the directory page instructions:
dsh plugin add github:jesse-njx/dsh-skillport#<commit>
The repository README also provides the installation method using the npm package name and specifying a profile:
dsh plugin --profile web add @dsh-skillport/bundle
Both entry points correspond to the same bundle. The command on the directory page is the one displayed publicly on the community site; the command in the README is the package installation method written by the repository maintainer. package.json requires Node.js >= 20, and declares a peerDependency on @deepseek-ai/dsh-skill and other packages pinned to version 0.1.0-rc.6.
The plugin runs with the permissions of the current dsh process, and may execute code during installation. You should read the source repository and the MIT license before installing.
For uninstallation, the command given in the README is:
dsh plugin remove @dsh-skillport/bundle
All registrations use Cordis effects, so removing the plugin will also unregister the imported skills.
All configuration fields are optional, and can be written in a profile patch or cordis.patch.yml:
plugins:
dsh-skillport:
sources: [dsh, claude, agents, gemini] # Which discovery groups to scan
extraPaths: [] # Extra SKILL.md directories, e.g. ~/skills
convert:
cursorRules: true # .cursor/rules/*.mdc → skill
contextFiles: true # AGENTS.md / CLAUDE.md (skipped if native handler exists)
claudeCommands: true # .claude/commands/*.md → user-invocable skill
maxIndexEntries: 100 # Entries beyond this become user-only invocable
providerName: skillport # Provider name in the registry
Valid values for sources are dsh, claude, agents, and gemini. If you only want to supplement the Claude directory and let the native scanner handle .dsh and .agents, you can set sources to [claude, gemini].
Typical Usage¶
1. Use Existing Skills from Claude Code Directly¶
After installing the plugin, in a DSH session, ask the model to load a skill you previously placed in .claude/skills/ or ~/.claude/skills/. Per the README: the directory will list it, the skill tool will load the body, and bundled resources will be available. You do not need to copy the directory to .agents/skills first.
2. Check Which Skills Are Loaded in the Current Project¶
Execute this in the session:
/skills doctor
The output is grouped by source. The sample from the README will show groups like project-claude and project-dsh, to verify whether the scan worked as expected.
3. Test Trigger with a Single Phrase¶
Still using the sentence from the README:
/skills doctor deploy the app to production
If the target skill has a low score or does not appear at all, it is most likely that the description was written for another model’s trigger habits, and you need to revise the description instead of writing a whole new skill file.
4. Use Search for Large Skill Libraries Instead of Stuffing Prompts¶
The default maxIndexEntries is 100. Beyond this limit, additional skills will no longer be added to the model’s visible prompt, but find_skill can still search by keyword and load the full text using the name parameter. This is an overflow mechanism explicitly documented in the source code, not a separate skill marketplace.
Applicable Scenarios and Notes¶
This tool is ideal for:
- Users who already have a library of SKILL.md files for Claude Code / Gemini CLI on their local machine and want to use them in DSH
- Projects with Cursor .mdc rules or Claude Code slash commands that you want to appear as skills in DSH sessions
- Users with a skill count close to or exceeding the directory limit, who need find_skill and /skills doctor for retrieval and trigger validation
- Users who need to confirm “spec drift”: the pinned revision and CI fixtures in the repository are more reliable than verbal compatibility statements
The repository README explicitly lists the following as non-goals, do not treat it as a “full migration tool”:
- Claude Code plugins, hooks, subagents (host-specific executable semantics)
- MCP configuration conversion
- Codex / Cursor extension binaries
- Skillport’s own execution path: skills with scripts still run via DSH’s shell tools in the sandbox, and the sandbox policy is the sole execution point
Additional notes from the directory page, README, and package.json, with no extra interpretations:
1. Read the source code before installing. The plugin runs with the same permissions as the current dsh process, and may execute code during installation.
2. Do not assume double scanning. .dsh/skills and .agents/skills will not be scanned again by Skillport if the native provider is present; AGENTS.md / CLAUDE.md follow the same “check first, no double injection” rule.
3. Trigger quality will not auto-align. The doctor only reports matching scores, it will not rewrite your description.
4. The version is still new. Package version 0.1.0, repository created on 2026-08-13, 2 stars. Peer dependencies are pinned to DSH 0.1.0-rc.6, check package.json before upgrading runtime versions.
5. The community directory is not an official store. Follow the installation command from the actual directory page or repository README you are viewing.
Summary¶
dsh-skillport does not reinvent DSH’s skill system. It feeds SKILL.md files from tool-specific directories like Claude Code and Gemini CLI into the native registry, additionally converts Cursor rules and Claude slash commands, and uses find_skill and /skills doctor to handle prompt bloat and trigger mismatches. For users who have already built an Agent Skills library and want to start working in DeepSeek Harness, it eliminates the hassle of migrating files, not the sandbox policy or host-specific hook semantics.
Community Directory Page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-skillport/
GitHub Repository: https://github.com/jesse-njx/dsh-skillport