用 dsh-skillport 把已有 SKILL.md 接到 DeepSeek Harness

前言

换一套 Agent 运行时,最烦的往往不是模型本身,而是技能库要不要搬家。Anthropic 在 2025 年 12 月把 Agent Skills 做成开放规范:一个目录里放 SKILL.md,YAML frontmatter 写 namedescription,正文写步骤,需要时再带上脚本和参考文件。Claude Code 把技能放在 .claude/skills/,Gemini CLI 有自己的目录,Cursor 还有 .cursor/rules/*.mdc,Claude Code 的斜杠命令则在 .claude/commands/*.md。这些文件已经在本机里了,换到 DeepSeek Harness(下文简称 DSH)时,并不想再抄一遍。

DSH 官方文档里,技能子系统已经能读 SKILL.md:项目级和用户级的 .dsh/skills/.agents/skills/ 由原生 provider dsh-skill-filesystem 扫描。工具专属路径、Cursor 规则、斜杠命令不在这条原生扫描里。社区插件 dsh-skillport 做的就是补上这一截:发现 DSH 没覆盖的位置,把相邻格式转成技能,再交给平台自带的目录和 skill 加载工具。

本文按社区目录页、仓库 README / README.zh.md、package.jsondocs/spec-revision.md 以及源码核对后整理:这个插件是什么、扫哪些目录、怎么安装、怎么做健康检查。

这是什么

dsh-skillport 是 DeepSeek Harness 的技能类插件,npm 包名 @dsh-skillport/bundle,当前版本 0.1.0,主要语言 TypeScript,许可证 MIT。维护者是 jesse-njx,源码在 GitHub 仓库 jesse-njx/dsh-skillport。社区目录页收录于 2026-08-14,分类为「技能」;截至 2026-08-18,GitHub 星标为 2。

它解决的问题可以收成一句话:让你在 Claude Code、Codex、Cursor、Gemini CLI 里已经写好的技能,在 DSH 会话里直接出现,而不必先迁移到 .dsh/skills.agents/skills

需要先分清两件事:

  1. DSH 自带技能技术栈。 官方仓库的理念是「一切皆插件」。技能注册表 ctx.skills、按 rank 去重、把名字和描述注入系统提示、用 skill 工具按需加载正文,这些是平台能力。.dsh/skills.agents/skillsdsh-skill-filesystem 扫描。
  2. Skillport 不另起一套执行器。 仓库 README 把它的职责写得很窄:发现 DSH 未覆盖的位置、转换相邻格式、让结果可调试。导入的技能进原生注册表;带脚本的技能仍走 DSH 常规 shell 工具和沙箱。

社区插件目录 deepseek-harness-plugin.com 是独立站点,和 DeepSeek / 幻方没有官方从属关系,不要把它当成官方应用商店。

核心功能

发现已有的 SKILL.md

插件按来源组扫描。docs/spec-revision.md 给出的发现根和 rank 如下(数字越小优先级越高,同名时低 rank 获胜):

来源 路径 Rank(项目级 / 用户级)
DSH 原生 .dsh/skills/~/.dsh/skills/ 100 / 400
Claude Code .claude/skills/~/.claude/skills/ 150 / 450
Codex / 开放约定 .agents/skills/~/.agents/skills/ 200 / 500
Gemini CLI ~/.gemini/antigravity/skills/ 550
额外目录 配置项 extraPaths 650

有两点必须按仓库说明来理解:

  • .dsh/skills.agents/skills 在标准 preset 里已被 dsh-skill-filesystem 扫描。Skillport 检测到该 provider 后会跳过这两组,避免双重注入;只有原生 provider 不在时,它才自己扫一遍兜底。
  • 从 Claude、Gemini、extraPaths 扫到的 SKILL.md 会注册成模型可调用的技能。名字和描述进会话目录,正文由平台的 skill 工具按需加载,捆绑资源按技能目录解析。

SKILL.md 的校验对齐仓库钉死的 Agent Skills 修订:name 必填,1–64 个字符,只允许小写字母、数字和连字符;description 必填,1–1024 个字符。可选字段包括 licensecompatibilitymetadataallowed-tools。DSH 额外字段 whenToUsedisable-model-invocationuser-invocable 也会被接受。

转换相邻格式

仓库把下面三类叫做 Tier-2,best-effort,并标明来源:

  • Cursor 规则.cursor/rules/*.mdc → 模型可调用技能,来源 cursor。frontmatter 里的 descriptionglobsalwaysApply 会映射到触发条件和正文。
  • Claude Code 斜杠命令.claude/commands/*.md用户可调用技能,会话里用 /name 触发,来源 claude-command
  • 上下文文件AGENTS.mdCLAUDE.md 仅在原生 dsh-agent-instructions 不存在时注入为项目上下文;原生插件在场就跳过。

这三类默认都开,可以在配置里关掉。

find_skill 与目录上限

技能一多,把全部描述塞进系统提示会膨胀。配置项 maxIndexEntries 默认是 100:超出部分不再作为模型可调用候选,只保留用户可调用,由 find_skill 工具检索。

find_skill 是给模型用的工具,不是用户斜杠命令。源码里它接受两个参数:

  • query:按名称、描述、whenToUse 做关键词搜索
  • name:按精确名称加载完整说明(此时忽略 query

技能很多、可见目录对不上当前任务、或怀疑某项技能被上限挡住时,模型可以走这个工具。

技能健康检查(skills doctor)

为 Claude 触发习惯写的描述,在 DeepSeek 模型上可能对不上。Skillport 提供会话内命令和独立 CLI。

会话里:

/skills doctor
/skills doctor deploy the app to production

前者按来源列出已加载技能;后者用一段描述做 test-fire,返回带分数的匹配列表。README 里的示例输出如下:

/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."

不启动 DSH 会话时,可以用包自带的 skills-doctor

skills-doctor --cwd ~/work/projectx list
skills-doctor --cwd ~/work/projectx test-fire "deploy the app to production"

CLI 还会扫描同样的发现根,并用 stderr 打出被去重挡住的同名技能([shadowed])。

钉死规范修订

Agent Skills 还在演进。Skillport 把实现钉在 docs/spec-revision.md 记录的修订上:社区参考仓库 agentskills/agentskills5d4c1fda(文档标注为 2026-08-14 抓取),平台侧钉 @deepseek-ai/dsh-base@0.1.0-rc.6。源码常量是 agentskills@5d4c1fda / dsh-base@0.1.0-rc.6。仓库附带一致性 fixture(缺字段、unicode 名、嵌套资源),README 写当前测试集为 60 个。

安装与启用

社区目录页给出的安装命令(以该页原文为准)是在 DSH 终端里执行:

dsh plugin add github:jesse-njx/dsh-skillport

需要可复现安装时,按目录页说明把 commit 哈希接到仓库后面:

dsh plugin add github:jesse-njx/dsh-skillport#<commit>

仓库 README 另外给出按 npm 包名、指定 profile 的写法:

dsh plugin --profile web add @dsh-skillport/bundle

两种入口对应同一份 bundle。目录页这条是社区站点对外展示的命令;README 这条是仓库维护者写的包名安装方式。package.json 要求 Node.js >= 20,并对 @deepseek-ai/dsh-skill 等包声明了 0.1.0-rc.6 这一档 peerDependency。

插件以当前 dsh 进程的权限运行,安装时可能执行代码。装之前应阅读源码仓库和 MIT 许可证。

卸载时,README 给出的命令是:

dsh plugin remove @dsh-skillport/bundle

注册都是 Cordis effect,卸掉插件会把导入的技能一并撤掉。

所有配置字段都可选,可写在 profile patch 或 cordis.patch.yml

plugins:
  dsh-skillport:
    sources: [dsh, claude, agents, gemini]   # 扫描哪些发现组
    extraPaths: []                            # 额外的 SKILL.md 目录,例如 ~/skills
    convert:
      cursorRules: true                       # .cursor/rules/*.mdc → skill
      contextFiles: true                      # AGENTS.md / CLAUDE.md(原生已处理则跳过)
      claudeCommands: true                    # .claude/commands/*.md → 用户可调用 skill
    maxIndexEntries: 100                      # 超出后模型可调用候选降为用户可调用
    providerName: skillport                   # 注册表中的 provider 名

sources 可选值为 dshclaudeagentsgemini。只想补 Claude 目录、完全交给原生去扫 .dsh / .agents 时,可以把 sources 收成 [claude, gemini]

典型用法

1. 直接用 Claude Code 里已有的技能

装好插件后,在 DSH 会话里让模型加载一个你原先放在 .claude/skills/~/.claude/skills/ 的技能。按 README:目录会列出它,skill 工具会加载正文,捆绑资源一并可用。不需要先把目录复制到 .agents/skills

2. 看当前工程到底加载了哪些技能

在会话里执行:

/skills doctor

输出按来源分组。上面 README 示例里会出现 project-claudeproject-dsh 这类分组,用来核对「扫到了」和「你以为扫到了」是否一致。

3. 用一句话试触发

仍然用 README 里的句子:

/skills doctor deploy the app to production

若目标技能分数偏低或根本没出现,多半是 description 按另一家模型的触发习惯写的,需要改描述,而不是再写一套技能文件。

4. 技能很多时靠搜索,而不是靠提示词硬塞

maxIndexEntries 默认 100。超过之后,多出来的技能不会继续堆进模型可见目录,但 find_skill 仍能按关键词搜到,并用 name 加载全文。这是源码里写明的溢出面,不是另做一套技能市场。

适用场景与注意事项

比较适合:

  • 本机已经有 Claude Code / Gemini CLI 的 SKILL.md 库,准备在 DSH 里接着用
  • 项目里有 Cursor .mdc 规则或 Claude Code 斜杠命令,希望它们以技能形式出现在 DSH 会话
  • 技能数量接近或超过目录上限,需要 find_skill/skills doctor 做检索与触发检查
  • 要确认「规范漂移」时,仓库钉死的修订和 CI fixture 比口头兼容声明更可核对

仓库 README 把下面几项明确写成非目标,不要按「全功能迁移」去理解:

  • Claude Code 的插件、hooks、subagents(主机特定的可执行语义)
  • MCP 配置转换
  • Codex / Cursor 的扩展二进制
  • Skillport 自己的执行路径:带脚本的技能仍通过 DSH 的 shell 工具在沙箱里跑,沙箱策略是唯一执行点

另外几条来自目录页、README 和 package.json,不是额外发挥:

  1. 先读源码再装。 插件与当前 dsh 进程同权限,安装时可能执行代码。
  2. 不要假设双重扫描。 .dsh/skills.agents/skills 在原生 provider 在场时不会被 Skillport 再扫一遍;AGENTS.md / CLAUDE.md 同样遵守「先检查、不双重注入」。
  3. 触发质量不会自动对齐。 doctor 只报告匹配分数,不会改写你的 description
  4. 版本还很新。 包版本 0.1.0,仓库创建于 2026-08-13,星标 2。peer 依赖落在 DSH 0.1.0-rc.6 这一档,换运行时版本前应对照 package.json
  5. 社区目录不是官方商店。 安装命令以你实际打开的目录页或仓库 README 为准。

小结

dsh-skillport 不重新发明 DSH 的技能系统。它把 Claude Code、Gemini CLI 等工具专属目录里的 SKILL.md 送进原生注册表,顺带转换 Cursor 规则和 Claude 斜杠命令,再用 find_skill/skills doctor 处理目录膨胀和触发对不齐。对已经积累了一套 Agent Skills、又要在 DeepSeek Harness 里开工的人,它省掉的是搬家,不是沙箱策略,也不是 hooks 那一层主机语义。

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-skillport/

GitHub:https://github.com/jesse-njx/dsh-skillport

羽毛球分组比赛记分
小程序二维码

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

小夜