前言¶
在 DeepSeek Harness(DSH)里,Skill 的 SKILL.md 正文是懒加载的:模型只有调用 skill 工具时才会读到正文。但 Skill 目录不是懒加载的。官方 tool-skill 在每一步之前都会把每个可被模型调用的 Skill 注入为 <available_skills> 块,因此某个会话里从未用到的 Skill,仍会在每一步产生目录描述行的开销。若希望某次对话就是纯聊天、一开始就不提供任何 Skill,原先也没有统一的入口。
dsh-skill-switch 由维护者 EdisonYang1982 发布,在 SkillHub 社区目录中归类为 工作流。它提供按会话查看与开关 Skill、三种会话姿态预设,以及将整组相互依赖的 Skill 家族移入或移出宿主 Skill Hub 的能力,目标是在「按会话」和「按家族」两个维度上减少未使用 Skill 带来的 Token 成本。
这是什么¶
一句话:Per-session skill switch for DeepSeek Harness——在输入框上方展示当前会话加载了哪些 Skill,可逐项关闭,也可一键保持无 Skill 的纯聊天会话;同时支持整族 Skill 挂载或停放(park)到 Hub 外。
插件以 npm 包名 dsh-skill-switch 分发,当前资料中的版本为 0.1.0,许可证 MIT。GitHub 仓库:EdisonYang1982/dsh-skill-switch;社区目录页:skillhub.cn 条目。
它针对的三层成本¶
README 将设计目标拆成三层,实际收益最大的是第二层:
| 层级 | 机制 | 节省什么 |
|---|---|---|
| 1 | 从目录中移除 Skill | 一行描述 |
| 2 | 模型看不到,因而不会加载 | 整份 SKILL.md 正文 |
| 3 | 全部关闭后 skill 工具本身卸载 |
连 JSON Schema 也不再注入 |
第一层主要是为第二层服务:隐藏目录行后,模型不再知道该 Skill 存在,从而不会触发正文加载。第三层在已全部关闭时几乎无额外成本。
README 在真实 ~/.agents/skills Hub 上做过字符数对比(非 Token,便于复现):Hub 内 7 个 Skill 全开时目录约 749 字符;某一组 27 个相互依赖的 Skill 家族 停放(parked) 时目录成本为 0;同一家族 挂载(mounted) 时为 5,559 字符(平均每行约 205 字符)。要点是:仅做目录内「隐藏」仍要先发现 Skill 再渲染行;把目录移出 Hub 则注册表根本看不到,停放时成本为 0。
核心功能¶
会话条(Strip)¶
每个会话在 Composer 上方有一条可折叠的条带,展示当前会话会加载哪些 Skill,每个 Skill 有独立开关,并提供三种 姿态(posture)预设(配置中的 defaultMode 与 workSkills 与之相关,见下文)。
按会话开关¶
设计理由是会话意图不同:头脑风暴不必为编码工具集付目录行;「本会话不要任何 Skill」应一键可达,而不是反复和模型说明。
Skill 组(skillGroups)¶
部分 Skill 家族体积大且 成员间用相对路径互相引用(例如 lark-doc → ../lark-shared),无法按单个 Skill 拆分开关:只开一个会破坏引用,全部列出则每一步都付全部目录行。
Skill 组把整族 Skill 停放 在 Hub 外的 parkDir,需要时再 整组移入 hubDir:
| 状态 | 目录成本 | 成员所在位置 |
|---|---|---|
| Parked | 0 | parkDir |
| Mounted | 每个成员一行 | hubDir |
条带上以虚线/实线芯片展示组状态(例如停放时 ⬡ Feishu CLI 27),点击整组挂载或停放。
同步脚本(syncScript)¶
宿主从 Hub 目录 扫描 Skill,而不是从作者存放 Skill 的任意路径。若 Skill 仓库在别处(网络盘、同步目录),可配置 syncScript 指向绝对路径的同步脚本;条带会出现 Sync skills 按钮,点击后执行脚本、使目录缓存失效并刷新所有打开的条带。Hub → 条带的展示由文件监听与 SSE 自动更新;仓库 → Hub 的拷贝 ** deliberately 手动**,避免网络挂载上每次扫描的隐性成本。
替换官方 skill 工具¶
安装前需知:插件通过 cordis.patch.yml 禁用 @deepseek-ai/dsh-tool-skill,并注册自己的 skill 工具与会话目录实现;实现是对官方逻辑的移植并加入按会话过滤,不是在外层包一层官方插件。若你依赖官方 tool-skill 的精确行为,安装前应阅读仓库 README 中 Why it takes over tool-skill 一节。
安装与启用¶
资料给出两种路径:本地 link 构建,以及发布后的 profile 安装。
本地构建并 link 到 profile:
# 1. Build (inside the plugin directory)
npm install && npm run build
# 2. Link it into a profile: add to <profile>/package.json
# dependencies: { "dsh-skill-switch": "link:/path/to/dsh-skill-switch" }
# dsh.profile.bundles: [..., "dsh-skill-switch"]
# 3. Let the plugin resolve @deepseek-ai/* from the profile
ln -s ~/.dsh/profiles/node_modules <plugin>/node_modules
发布后(README 示例):
dsh plugin --profile web add dsh-skill-switch
安装后需 重启 DSH。插件在 DSH 进程权限下运行;安装前应自行审阅源码与 MIT 许可证,确认可接受替换官方 skill 工具的行为。
配置¶
默认值在插件自带的 cordis.patch.yml;与环境相关的项写在 你的 profile patch(<profile>/cordis.patch.yml),对应行 id 为 skill-switch:
- id: skill-switch
name: dsh-skill-switch
config:
defaultMode: all # posture a new session starts in: all | none | work
workSkills: [] # skills the `work` posture enables
syncScript: '' # absolute path of a sync script; empty hides the control
hubDir: '' # absolute path of the hub the host scans (needed for skillGroups)
skillGroups: [] # all-or-nothing bundles, see below
defaultMode: all接近 stock 行为,需要时再关;设为none则新会话默认不提供 Skill,按需打开。- 使用
skillGroups时需填写hubDir与每组parkDir等字段。
Skill 组示例(来自 README):
hubDir: '/home/you/.agents/skills'
skillGroups:
- id: lark
label: 'Feishu CLI'
description: '27 Feishu skills, mounted and parked as one unit'
parkDir: '/home/you/.agents-parked/lark'
discover: true # read members from parkDir; no hand-maintained list
典型用法¶
- 安装并重启 DSH 后,打开任意会话,在 Composer 上方展开 Skill 条,查看当前会话目录中有哪些 Skill。
- 关闭本会话不需要的 Skill,或切换到
none/work等姿态(由 profile 中defaultMode与workSkills定义「工作」集)。 - 若配置了
skillGroups,在条带上点击对应芯片,整组在 Hub 与parkDir之间移动;长期不用的大家族建议保持 parked,避免每一步的目录行成本。 - 若 Skill 源不在 Hub 路径,配置
syncScript,在需要更新 Hub 内容时点击 Sync skills;成功约 2 秒后按钮恢复,失败会保留错误输出便于排查。
适用场景与注意¶
适合: 本地或 profile 中挂载了大量 Skill、且不同会话用途差异明显的 DSH 用户;拥有数十个相互引用、只能整族启用的 Skill 家族,希望在不使用时从 Hub 物理移出以省目录成本。
注意:
- 插件 替换 官方
@deepseek-ai/dsh-tool-skill,升级 DSH 或 Cordis 时需关注 peer 依赖是否仍匹配(package.json 中列出了@deepseek-ai/cordis、dsh-agent、dsh-skill等范围)。 - 社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系;星标等元数据以目录页为准(当前资料中 GitHub 星标为 0)。
- 所有安装与配置命令、字段名以上述 README 与
cordis.patch.yml为准,勿凭插件名臆造dsh plugin add github:...形式。
结尾¶
dsh-skill-switch 把 Skill 的 Token 成本拆成「目录行」「正文加载」「工具 Schema」三层,用会话级开关和整族 park/mount 两种手段,让纯聊天和未使用的 Skill 家族不必在每一步付费。需要细节、行为差异说明与中文 README 时,可查阅 GitHub 仓库 与 SkillHub 插件页。