背景
DeepSeek Harness(dsh)本身已经内置了 skills 发现机制,并不要求把其他 Agent 的 skill 复制进 ~/.dsh/skills。与其维护大量符号链接,更推荐使用官方提供的 customSkillDirs 配置,直接把其他 Agent 的 skills 根目录注册给 DSH。
以 CC Switch 的共享 skill 目录为例:
C:\Users\<用户名>\.cc-switch\skills
只需要在 DSH 配置中增加这一条,DSH 就能扫描其中所有技能,且后续新增、删除、修改 skill 都会自动同步。
DSH 实际扫描的技能目录
按源码 packages/skill/skill-filesystem 的定义,DSH 会按以下优先级扫描,rank 越小越优先:
| 优先级 | 来源 | 本机路径 |
|---|---|---|
| 1 | 项目 DSH | <项目根>\.dsh\skills |
| 2 | 项目 Agents | <项目根>\.agents\skills |
| 3 | 自定义目录 | customSkillDirs |
| 4 | 用户 DSH | C:\Users\--sora--\.dsh\skills |
| 5 | 用户 Agents | C:\Users\--sora--\.agents\skills |
| 6 | 内置目录 | $DSH_BUNDLED_SKILL_DIR |
为什么优先使用 customSkillDirs,而不是软链
| 方案 | 优点 | 缺点 |
|---|---|---|
| 逐个 skill 建软链 | 可以精确挑选 | 新增/删除 skill 时要手动维护软链 |
把整个目录软链成 .dsh\skills |
自动同步 | Windows 软链权限要求较高,且会占用 DSH 原生用户技能目录 |
customSkillDirs 配置 |
官方配置入口,支持多个目录,自动同步,无软链权限问题 | 修改配置后需要重启 DSH |
另一个关键点是:DSH 的技能发现只扫描一层,只识别:
<skill-root>/<skill-name>/SKILL.md
<skill-root>/<skill-name>.md
因此直接使用 customSkillDirs 指向一个已经是平铺结构的 skill 根目录,是最稳定、最省事的方案。
配置方法
1. 编辑 DSH 的 home 级配置
文件位置:
C:\Users\<用户名>\.dsh\cordis.patch.yml
如果文件不存在就新建,然后写入:
- id: skill-filesystem
name: '@deepseek-ai/dsh-skill-filesystem'
config:
customSkillDirs:
- 'C:/Users/<用户名>/.cc-switch/skills'
- 'C:/Users/<用户名>/.claude/skills'
- 'C:/Users/<用户名>/.codex/skills'
- 'C:/Users/<用户名>/.qoder/skills'
- 'C:/Users/<用户名>/.config/opencode/skills'
本机实际生效配置示例:
- id: skill-filesystem
name: '@deepseek-ai/dsh-skill-filesystem'
config:
customSkillDirs:
- 'C:/Users/--sora--/.cc-switch/skills'
2. 路径注意事项
- 必须使用绝对路径。
- 推荐使用
/,并用单引号包起来。 customSkillDirs不会展开~,所以不要写~/.cc-switch/skills。- 想引用多个 Agent 的目录时,直接追加多个
-项即可。
3. 重启 DSH
cordis.patch.yml 是 home 级 patch,只在 DSH 启动时组合。修改后需要:
# 先停止正在运行的 dsh web
# 然后重新启动
npx @deepseek-ai/dsh web
配置生效后,skill 目录内部的增删改由 watcher 自动发现,后续不需要因为改 skill 内容再重启。
验证是否生效
第一步:确认配置已进入组合树
npx @deepseek-ai/dsh web --dump-config
在输出中找到 skill-filesystem 行,确认包含:
customSkillDirs:
- C:/Users/--sora--/.cc-switch/skills
第二步:让 DSH 实际加载一个 skill(以code-review为例)
在 DSH Web 中新建会话,输入:
请调用 skill 工具,参数 name=code-review,并返回 <skill_resources> 中的 Base directory 路径
如果返回:
C:\Users\--sora--\.cc-switch\skills\code-review
说明 customSkillDirs 已经生效,DSH 确实从 CC Switch 目录加载了该 skill。
可引用的常见 Agent Skill 目录
| Agent / 工具 | 常用路径 |
|---|---|
| CC Switch | C:/Users/<用户名>/.cc-switch/skills |
| Claude Code | C:/Users/<用户名>/.claude/skills |
| Codex | C:/Users/<用户名>/.codex/skills |
| Qoder | C:/Users/<用户名>/.qoder/skills |
| OpenCode | C:/Users/<用户名>/.config/opencode/skills |
| 通用 agents 目录 | C:/Users/<用户名>/.agents/skills |
| 项目级目录 | <项目根>/.dsh/skills 或 <项目根>/.agents/skills |
其他 Agent 目录的兼容性要求
引用的目录必须满足 DSH 的发现规则:
- 必须是平铺结构:
skills/
├── code-review/
│ └── SKILL.md
└── tdd/
└── SKILL.md
SKILL.md中必须包含合法的 YAML frontmatter:
---
name: code-review
description: 代码评审技能
---
-
name必须是 kebab-case,且必须有非空description。 -
不支持递归发现嵌套的
**/SKILL.md。如果某个 Agent 的目录是嵌套结构,应单独整理成一个平铺目录后再引用。
可选配置
如果希望只使用 customSkillDirs,完全忽略项目级和用户级默认目录,可以设置:
- id: skill-filesystem
name: '@deepseek-ai/dsh-skill-filesystem'
config:
includeDefaultRoots: false
customSkillDirs:
- 'C:/Users/<用户名>/.cc-switch/skills'
如果遇到 watcher 在 Windows 上无法及时感知外部目录变化,可以显式启用轮询:
- id: skill-filesystem
name: '@deepseek-ai/dsh-skill-filesystem'
config:
customSkillDirs:
- 'C:/Users/<用户名>/.cc-switch/skills'
watchUsePolling: true
结论
推荐方案是:不要为每个 skill 创建软链,而是把 CC Switch 或其他 Agent 的整个 skills 根目录通过 customSkillDirs 注册给 DSH。这是 DSH 原生支持的配置入口,能自动同步新增和删除,也避免了 Windows 软链权限和生命周期维护问题。