前言¶
在 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 做路由、用户仍能 /成员名 直载全文。
务必注意:
- 成员名须 kebab-case;非法名会导致注册表报错,插件会跳过并 warn。
- 不要把
groups[].dir同时设为 DSH 扫描根,否则成本会回到「每个成员一条 catalog」。 - 社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系;DSH 生态是「一切皆插件」,本介绍事实均来自上述 GitHub README 与
package.json。 - 验证 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