dsh-skill-tier:用三层渐进披露压缩 DSH 技能目录常驻开销

前言

在 DeepSeek Harness(DSH)里,每个 model-invocable 的 skill 都会在会话的 skill catalog 里占一条 - \name`: ,且该 catalog 是**每个会话每一轮都携带**的常驻消息。当某个域下有几十个 skill 时,仅 catalog 一项就可能吃掉数千 token。README 中给出的实测例子:lark-共 28 个成员约 **+2,901 tokens**(约占基础 prompt 的 51%);gsd-` 共 83 个成员约 +2,047 tokens。

常见应对思路包括给成员文件注入 disable-model-invocation,或依赖同步脚本维护索引,但往往会污染源文件、要求成员目录必须是 DSH 扫描根,或与 dsh-skill-filesystem 重复发现成员。下面介绍社区插件 dsh-skill-tier(维护者 pandarayc),它在 provider 层做「渐进披露」:catalog 里只留一条生成的索引 skill,成员仍可被用户 /成员名 点名加载,但不再进入模型 catalog。插件零依赖、单文件实现,不改成员源文件。

这是什么

dsh-skill-tier(npm 包名 @pandarayc/dsh-skill-tier,当前版本 0.1.0,MIT 许可证)是 DSH 的工作流类插件,定位是:对任意目录下的 skill 集合做分层暴露,在保留模型通过索引自主发现能力的前提下,把 catalog 常驻开销压到一条索引描述(README 称约 +78 ~ +121 tokens)。

把一个技能集合折成三层(README 原文结构):

Tier 0  catalog         只列 1 条索引(+78 ~ +121 tokens)      ← 常驻
Tier 1  模型加载索引     拿到该集合全部成员的路由表(4 KB 上下)   ← 判断相关时才付
Tier 2  按路由取正文     只读真正要用的那 1–2 个成员全文          ← 精确命中才付

对 28 个成员的集合,README 给出 catalog 侧 2,901 → 119 tokens 的削减(约 96%)。插件目录页:skillhub.cn/plugins/pandarayc/dsh-skill-tier;源码与文档:github.com/pandarayc/dsh-skill-tier。

核心功能

可见性:不改文件,在 provider 层合成

模型 catalog skill 工具 用户 /成员名
索引 skill ✅ 1 条 ✅ ✅
成员 skill ❌ ❌ ✅

成员通过 invocation.modelInvocable = false 被上游 catalog 构建器排除,而不是在 agent/pre-step 里事后过滤 catalog 消息——README 说明后者在 DSH 0.1.7-rc.2 上可能因 hook 顺序导致「静默失效」。

成员扫描与格式

  • 成员布局与 dsh-skill-filesystem 一致:<dir>/<name>/SKILL.md,或平铺 <dir>/<name>.md。
  • groups[].dir 不必设为 DSH 扫描根,避免与 dsh-skill-filesystem 再次把成员打进 catalog。
  • members 支持 glob(*、foo-*、精确名、逗号分隔、! 排除)。
  • 失效判断用内容哈希而非 mtime;list() 频率低(README:一个 4 步会话里约 1 次),28 成员 list() 约 8.6 ms。

配置两层:profile 全局 vs 工作区按需

层 位置 作用范围
entry 层 profile 的 cordis.patch.yml 里 skill-tier 的 config.groups 该 profile 的所有会话
工作区层 <cwd>/.dsh/skill-tier.json 仅在该目录打开的会话

工作区层不向上查找;未配置任何 groups 时插件惰性、不占 catalog。同一 profile 只应挂一行本插件(否则同层 providerName 重复会导致注册失败);多个集合写在同一个 config.groups 里,或给不同 entry 设不同 providerName。

优先级(rank)

默认 rank: 350,意图是不遮蔽项目级 skill 与 customSkillDirs(300)。若希望永远不遮蔽任何既有来源,可设 rank: 700(> 600)。

安装与启用

插件以当前 dsh 进程权限运行,安装前请自行查看仓库源码与 MIT 许可证。运行环境要求 Node.js >= 20(见 package.json)。

README 给出的安装方式如下(npm 包尚未发布,发布后才可用 @pandarayc/dsh-skill-tier 那条命令):

# 从源码
git clone https://github.com/pandarayc/dsh-skill-tier
dsh plugin --profile web add "$PWD/dsh-skill-tier"

# 或从 npm(尚未发布;发布后才可用)
dsh plugin --profile web add @pandarayc/dsh-skill-tier

# 验证:应看到自动挂上的那一行
dsh --profile web --dump-config | grep -A3 skill-tier

装完后若无 groups 配置,不会产出候选、不占上下文。用 headless(或带任务参数的 app)做 --patch 试验时,不要对 --profile web 配 --json(--json 属于 headless;web 仅用 --dump-config 验证挂载)。

典型用法

1、在 profile 里声明一个集合(entry 层)

在 cordis.patch.yml 中插入(未装 npm 包时把 name 换成 lib/index.js 的绝对路径):

- insert:
    - id: skill-tier
      name: '@pandarayc/dsh-skill-tier'
      config:
        revalidateMs: 0
        providerName: skill-tier
        groups:
          - name: lark
            title: 飞书/Lark 全能力入口
            description: "…进 catalog 的那句话,说明什么时候该加载它…"
            dir: "~/.dsh/lark-skills"
            members: "lark-*"
            detailHint: "lark-cli skills read <成员名>"
            rules:
              - "任何飞书操作前先读 lark-shared"
            rank: 350

必填字段:groups[].name(kebab-case)、groups[].dir、groups[].description(超过 500 字符会被 DSH 截断,配置阶段会 warn)。

2、只在飞书工作目录带索引(工作区层)

mkdir -p ~/work/feishu/.dsh
cat > ~/work/feishu/.dsh/skill-tier.json <<'JSON'
{ "groups": [{ "name": "lark", "title": "飞书/Lark 全能力入口",
  "description": "飞书/Lark 全能力入口(28 个子技能)…",
  "dir": "~/.dsh/lark-skills", "members": "lark-*",
  "detailHint": "lark-cli skills read <成员名>" }] }
JSON
cd ~/work/feishu && dsh --profile web

其他目录没有 .dsh/skill-tier.json 则对该集合零 catalog 开销。

3、用 examples 临时叠配置(已装包)

dsh --profile headless --patch examples/lark.yml "只回复 OK"

examples/*.yml 里的 name: 写的是包名;未装包时需把包名替换为 clone 路径后再 patch(README 中有 sed 示例)。

适用场景与注意

适合谁: 本地或团队维护了成批 skill(飞书 CLI 内嵌集合、个人 ~/.claude/skills 前缀组等),希望每轮 prompt 里 catalog 保持精简,又需要模型通过一条索引 skill 做路由、用户仍能 /成员名 直载全文。

务必注意:

  1. 成员名须 kebab-case;非法名会导致注册表报错,插件会跳过并 warn。
  2. 不要把 groups[].dir 同时设为 DSH 扫描根,否则成本会回到「每个成员一条 catalog」。
  3. 社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系;DSH 生态是「一切皆插件」,本介绍事实均来自上述 GitHub README 与 package.json。
  4. 验证 token 影响时,README 要求指标为 inputTokens + cacheReadTokens,不要只看 inputTokens。

结尾

dsh-skill-tier 把「大 skill 集合」从 catalog 常驻里收束成一条索引,按需再付路由表与成员正文,在 README 给出的 28 成员场景下 catalog 约从 2,901 token 降到 119,且不改磁盘上的 skill 文件。需要细节配置、优先级与 design rationale 时,以仓库 README 为准。

  • 目录页:https://www.skillhub.cn/plugins/pandarayc/dsh-skill-tier
  • GitHub:https://github.com/pandarayc/dsh-skill-tier
羽毛球分组比赛记分
小程序二维码

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

小夜