前言¶
在 DSH 里用 skill 工具做技能管理时,一个常见情况是:技能不写在 .dsh/skills,而是放在工作区自己的 skills/ 目录里,按技能名分子目录,每个子目录一份 SKILL.md。这套目录结构很自然,但 DSH 自带的 skill-filesystem 只认项目根 .dsh/skills、.agents/skills 和用户级 ~/.dsh/skills、~/.agents/skills 这几个位置,工作区自己的 skills/ 不在其中。结果是:技能文件写了不少,却既不进每轮的技能目录,模型也调不到,只能手工复制到受支持的目录里。
下面介绍 feverzhong/dsh-liya-skills。这是 feverZHONG(莉娅)维护的客户端插件,v0.2.0,适配 DSH 0.2.1-rc.2(桌面版),零第三方依赖。它的作用是注册自己的 SkillProvider,直接扫描 skillsRoot,把工作区 skills/ 里的技能接进 DSH 原生 skill 系统:skill 工具能加载、每轮技能目录里能看见、用 /技能名 能直接点名。第二个能力是 v0.2.0 新增的设置页技能管理:从指定 GitHub 用户的公开仓库同步技能到本地,先生成「适配稿」、人工确认后才落盘,不做盲覆盖。
它解决什么¶
插件没有修改 DSH 自带配置,而是注册一个 SkillProvider,扫描配置中指定的技能根目录,结果直接接到 DSH 的 skill 服务上。因此,工作区 skills/ 里多放的技能不再被目录机制忽略。
技能可见性策略¶
插件把技能分成两类,靠 curated.json 里的点名控制 modelInvocable:
- 在
curated.json里modelVisible点名的技能:modelInvocable为true,进入每轮技能目录,模型可以主动skill调用; - 其余技能:
modelInvocable为false,不进目录、不占上下文,但用户打/技能名仍会注入正文。
这样模型目录里只保留精选技能,其余技能留作手动调用,避免技能数量膨胀后把所有正文都塞进上下文。curated.json 保存即生效:文件监视 → skills 服务缓存失效 → 下一轮目录重发,不用重启 DSH。
安装与启用¶
分两步:先把插件装进 profile,再在 profile 补丁里指定技能库位置。官方给出两条安装路径,一是装插件目录,二是装发布包 tgz:
# 1. 装进 profile(pnpm 活链接 + 自动追加到 dsh.profile.bundles)
# 也可以在 DSH 设置页 / plugin_manager 里 install_bundle,target 填插件目录绝对路径
dsh plugin --profile <profile> add "<插件目录绝对路径>"
# 或者用发布包(tgz 与仓库 Releases/构建产物同内容;本机在 dist/ 里)
dsh plugin --profile <profile> add "<目录>/dsh-liya-skills-0.2.0.tgz"
然后编辑 $DSH_HOME/profiles/<profile>/cordis.patch.yml,指定 skillsRoot。因为插件被 node_modules 符号链接引入时 import.meta.url 是链接路径,默认相对路径会算到 profile 目录里,所以这里要显式给绝对路径:
- id: skill-liya-skills
name: 'dsh-liya-skills'
config:
skillsRoot: '<工作区绝对路径>/skills'
skillsRoot 之外的可配项还有 customSkillDirs、providerName、rank,都有默认值,具体见 index.js 的 apply。注意:改插件源码要重启 DSH 才生效——宿主热重载 profile 补丁的 config,但不热重载插件模块。
如果没有 shell,可以用 file:// 直挂:
- insert:
- id: skill-liya-skills
name: 'file:///<插件目录绝对路径>/index.js'
config:
skillsRoot: '<工作区绝对路径>/skills'
同一个插件只能挂一次:bundle 已装上就不要再留这条 insert,否则 provider 重名报错。
设置页技能管理(v0.2.0 新增)¶
DSH「设置 → 莉娅技能」(settings.section,client 半)用来从指定 GitHub 用户的公开仓库同步技能到本地 skills/。项目里的铁律是绝不盲覆盖:先出适配稿,人工确认后才落盘。页面上分三步。
第一步,填 GitHub 用户(默认 feverZHONG),扫描公开仓:列出该用户所有公开仓库,挑出带 SKILL.md 的,按 frontmatter 的 name 对回本地同名技能,给出状态:已是最新 / 可更新 / 仅远端有。
第二步,生成适配稿:远端文件落到 skills/.incoming/<仓库名>/,同时产出 _adapt-report.json。自动改写的内容(会记进报告)包括:python3→python、/opt/data/bin|scripts→工作区 bin|scripts、CRLF→LF、frontmatter 折行说明压成单行。以下内容只报告不改,待人工确认:旧 Hermes 环境残留、POSIX 绝对路径/命令、旧工具名(credman/apiproxy/settingsScope)、本机绝对路径、缺 tier。
第三步,看报告 → 应用。应用前 host 会把本地技能整目录备份到 skills/.backup/<技能>-<时间戳>/,然后把适配稿拷进 skills/<技能>/,并写 _upstream.json,记录仓库、commit、应用时间、自动改写条数、待确认条数、备份路径。没有「应用适配稿」这一步之前,本地技能不会被改动;页面上也没有一键盲覆盖入口。
此外,数据通道走 gh CLI(gh api):作者本机直连 HTTPS 被网络挡住(curl/node/PowerShell 都连不上),只有 gh 能通,因此要求 gh 已登录。只处理公开仓库——private !== false 或 visibility !== 'public' 一律拒绝,扫描阶段过滤,生成阶段还会再校验一次。
右侧详情栏是 markdown 预览,由自写零依赖渲染器 client/src/md.js 实现(标题/段落/列表/表格/代码块/行内代码/粗斜体/链接/引用,容忍半截代码块),右上角「预览 ● / 原文」可切回 SKILL.md 源文本。
验证方式¶
装完可以按下面的顺序验证。
1、下一轮对话里,<available_skills> 目录出现 curated.json 里点名的技能。
2、skill 工具加载其中一个,返回正文,resourceBase 指向 <skillsRoot>/<技能名>,references/、scripts/ 按这个基准去读。
3、对非精选技能调 skill 工具,报 not available for model invocation;用户打 /技能名 仍能注入正文。
4、plugin_manager list_plugins 里 include:skill-liya-skills 应为 fiberPhase: active。
使用上的几条限制¶
工程上有几个明确的边界,动手前值得先知道。
技能正文永远现读,插件只缓存「有哪些技能」,缓存带 3 秒节流,所以改 SKILL.md 正文立刻生效。frontmatter 用极简解析,只取顶层 name / description,不引 yaml 依赖,缩进的嵌套块和折行续行会被忽略,因此 name / description 必须写成单行。技能目录只认一层:<skillsRoot>/<名字>/SKILL.md 或 <skillsRoot>/<名字>.md,更深的嵌套不扫描。插件崩溃只让这一条 entry 失效,不会带走整个 host,但 inject 里只能写确定存在的服务(本插件只依赖 skills)。
改 client 源码(client/src/*)后要用 node client/build.mjs 重新生成 client.js,再重启 DSH;host 改 index.js / host/* 同样要重启。
适用场景与注意¶
适合的场景:工作区已经按 skills/<名字>/SKILL.md 组织技能库,希望这些技能直接进 DSH 技能系统而不是手工搬目录;同时想把某个 GitHub 用户的公开技能库定期同步到本地、且要求每次变更可见可回退。
需要注意的:插件以当前 DSH 进程的权限运行,设置页会访问本地 skills/ 目录,并调用开发者本机的 gh CLI。安装前应检查插件源码与许可证。仓库代码为 MIT(LICENSE),文档为 CC BY 4.0(LICENSE-DOCS)。插件目录在 SkillHub 的条目分类是客户端,社区目录是独立站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-liya-skills 的价值在于两件事:把工作区自己的 skills/ 接进原生 skill 系统,并用「精选进模型目录、其余手动点名」的策略控制上下文占用;设置页则把外部公开技能库的同步流程拆成扫描、适配稿、确认应用三步,保留备份和追踪文件。仓库:https://github.com/feverZHONG/dsh-liya-skills ,目录页:https://www.skillhub.cn/plugins/feverZHONG/dsh-liya-skills 。