dsh-skill-starter
装完就有 6 个能直接用的技能,外加一个 20 个技能的工程流程包。 设置页里能看能改,AI 也能在对话里直接读写技能库。
| 装完立刻得到 | 是什么 |
|---|---|
| 6 个基础技能 | ask-first 需求没说清时先问完再动手、prove-it 改之前先说清怎么验证、write-my-skill 一句话把你的做法记成技能 |
| 20 个工程流程技能 | 从拷问需求 → 收规格 → 拆票 → 实现 → 双轴审查 → 复盘,一整套;外加诊断 bug、TDD、原型、研究、教学 |
| 按症状分组的面板 | 按「你遇到的问题」分组,不用记技能名;能编辑、新建、复制内置技能 |
| 一张「我该用哪个」对照表 | 29 行处境对照,点一行跳到对应技能 |
| AI 在对话里直接读写 | 你说「把这套流程记下来」,它直接落盘,不会写错格式 |
升级技能包不会覆盖你改过的文件。 装进来之后那份归你——插件只加新技能、修错字,不碰你动过的任何一行。
技能(skill)是 DSH 里最实用的东西:把一套做法写成一个文件,之后随时调用,AI 每次都按同一套流程做事。麻烦的地方在于管——文件散在几个目录、frontmatter 写法要记、装了一堆想不起用哪个、改过的还怕被升级冲掉。
这个插件把这几件事一起解决了。
安装
dsh plugin --profile desktop add https://github.com/ymck-x/dsh-skill-starter/archive/refs/tags/v0.3.0.tar.gz
desktop 换成你自己的 profile 名(~/.dsh/profiles/ 下面的目录名)。装完重启 dsh。
请照抄这个完整地址,不要改成
refs/heads/main.tar.gz。 分支地址的内容会随作者推代码而改变,而 pnpm 会记下你安装当时的指纹。 之后你装任何插件时,pnpm 都会重新核对全部旧依赖,一旦发现指纹对不上就中止整次安装 (ERR_PNPM_TARBALL_INTEGRITY),而且报错指向一个你当时根本没在装的包。refs/tags/指向一次固定发布,内容永不改变。
也不要写成 github:ymck-x/dsh-skill-starter 这种简写:它会被 pnpm 解析成 SSH 地址(git+ssh://),而匿名 SSH 访问 GitHub 会被直接拒绝,装不上。
验证:设置页里出现「Skill 管理」这一项,或者直接问 AI「我有哪些技能」。
没有 dsh 命令时手动装
dsh plugin add 内部就是「pnpm 装包 + 把包名写进 dsh.profile.bundles」。你也可以自己做这两步:
cd ~/.dsh/profiles/desktop
pnpm add https://github.com/ymck-x/dsh-skill-starter/archive/refs/tags/v0.3.0.tar.gz
再把 dsh-skill-starter 加进同一个目录里 package.json 的 dsh.profile.bundles:
{
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-skill-starter"
]
}
}
}
重启 dsh 即生效。
卸载
dsh plugin --profile desktop remove dsh-skill-starter
手动装的:从 bundles 里删掉这一项,再 pnpm remove dsh-skill-starter。
卸载不影响你写的技能——它们在 ~\.dsh\skills\ 里,不属于插件。
它做什么
一、设置页里的面板
打开「设置 → Skill 管理」,你看到的是按你遇到的问题分的组,不是按名字排的字母序:
开工之前
先把票据和规格放在哪定下来。
setup-tickets
别让它做错方向
动手之前,把没问清的问完。
ask-first
看不懂就拉回来
说「没看懂」时,用大白话重讲上一段。
plain-words
别让「改好了」是空话
先说清用什么办法验证,改完真的跑一遍再报告。
prove-it
一次只走一小步,每步验证过再继续。
tiny-steps
让它记住你的做法
一句话把你的做法记成技能文件。
write-my-skill
选一条就能改:名称、描述、使用时机、正文,还有两个调用开关。也能新建、删除、把内置技能复制一份出来改。中英双语,跟着界面语言走。
二、「我该用哪个」
面板里有一块处境对照表,直接显示路由技能里那张表——现在 29 行,点一行就跳到对应的技能。
这张表不是复制过来的:插件每次从 skills-map/SKILL.md 现读现解析,所以它和路由技能永远是同一份内容,不会两边说法不一致。
三、技能包
技能包是「一组相关技能,一次装完」。自带一个:
| 包 | 内容 |
|---|---|
engineering-zh |
20 个中文工程流程技能:拷问需求 → 收成规格 → 拆票 → 实现 → 双轴审查 → 复盘,外加诊断 bug、TDD、原型、研究、教学、交接 |
升级不覆盖你的修改,三层保护:
| 情况 | 处理 |
|---|---|
| 你改过这个文件 | 跳过,并在结果里点名 |
| 文件已存在且内容不同 | 绝不覆盖,单独列出 |
| 内容相同 | 只登记指纹,不动文件 |
所以想改包里的技能,直接改用户目录里那份就行,不用担心下次升级被冲掉。
四、模型能直接用
插件注册六个工具,AI 在对话里就能读写技能库、装卸技能包,不用你打开设置页:
| 工具 | 作用 |
|---|---|
skill_list |
列出全部技能:来源、调用方式、是否被覆盖、附件数 |
skill_read |
读出完整内容与附件清单 |
skill_write |
新建或修改 |
skill_delete |
删除 |
skill_pack_list |
技能包状态 |
skill_pack_install |
安装或升级,不覆盖你的改动 |
所以你说「把这套流程记下来」,它会直接落盘,不会写错格式。
为什么这么设计
问题一:技能写完了没人用
技能要生效,得有人知道它什么时候该上场。三种做法叠起来解决:
- 描述里写用户的原话。
tdd的描述是「说『写个测试再实现』『先红后绿』时使用」——AI 靠这句判断该不该自己调用。 - 面板按症状分组。用户先看到症状(「别让『改好了』是空话」),再看到药。
- 只给人用的技能明确标出来。会改变工作状态的动作(收规格、拆票、交接、复盘)只允许你手动发起,AI 不能自己决定。
问题二:装了一堆,不知道什么时候用哪个
二十多个技能,靠记名字不现实。所以有一张按处境写的对照表:
| 你现在的处境 | 加载哪个技能 |
|---|---|
| 有个想法,要把它问清楚 | grilling |
| 需求没说清,要先把该问的一次问完 | ask-first |
| 要在一个项目里建好票据约定 | setup-tickets |
| 要把已经聊清楚的结论写成规格 | to-spec |
| 要把规格拆成多张票据 | to-tickets |
| 做完了,不知道改动有没有问题 | code-review |
| 没坏,但比以前慢很多 | diagnosing-bugs |
| 这段代码改一次要动好几个地方 | improve-codebase-architecture |
| 不确定这个模块该怎么切 | codebase-design |
| 同一个词团队里有两个意思 | domain-modeling |
| 答案在别人脑子里 | to-questionnaire |
| 没听懂上一条 | wait-what |
完整 29 行在面板里,也在 skills-map 技能里。
问题三:技能越多,每轮对话越贵
技能的描述是常驻的——不管用不用,它都在每轮请求里占位置。所以插件把这个成本算清楚并公布:
| 部分 | 规模 | 估算 |
|---|---|---|
| 插件自带 6 个技能 | 448 字 | 约 269 到 538 token |
| 技能包 20 个技能(装了才有) | 1776 字 | 约 1066 到 2131 token |
| 六个工具的 schema | 671 字 | 约 403 到 805 token |
| 设置面板 | — | 0(只在浏览器里跑) |
| 合计(装了技能包) | 2895 字 | 约 1737 到 3474 token |
不想要工具那部分开销,可以在配置里关掉:
- id: dsh-skill-starter
config:
enableTools: false
关掉之后模型侧开销归零,设置面板照常。「我该用哪个」那块表也照常——它走面板自己的接口,不进模型上下文。
自己量一遍:
node measure.mjs
问题四:升级把改动覆盖了
上面那三层保护就是答案。设计上是这么想的:技能包给的是起点,不是终点。装进来之后那份文件归你,插件只负责以后添新技能、修错别字,不碰你动过的任何一行。
技能清单
技能分两类,区别在谁能调用:
- 模型可调用:任务合适时 AI 会自己用;你也能打
/名字手动调。 - 只允许人工发起:只有你打出
/名字才生效。它们会改变工作状态,不该由 AI 自己决定什么时候做。
插件自带(6 个基础技能)
| 技能 | 什么时候用 |
|---|---|
ask-first |
用户提出还没说清的需求(「加个导出功能」) |
plain-words |
用户说「没看懂」「说人话」 |
prove-it |
任何改动开始前,先说清怎么验证 |
tiny-steps |
改动涉及多个文件,或用户说「一步步来」 |
write-my-skill |
用户说「把这条记下来」「以后都这样做」 |
setup-tickets |
要给一个项目建票据约定 |
技能包 engineering-zh(20 个)
只允许人工发起(9 个)
| 技能 | 作用 |
|---|---|
to-spec |
把已经聊定的结论收成一份规格 |
to-tickets |
拆成一组能各自收工的票据 |
implement |
按票据逐张做出来 |
retro |
回看这段会话,改进工作环境 |
handoff |
压成交接文档,换人换机器接着干 |
to-questionnaire |
答案在别人手里时,写一份问卷去问 |
wait-what |
没听懂上一条,用大白话重讲 |
teach |
跨多次会话学一门东西 |
improve-codebase-architecture |
扫出结构改进机会,给候选让你挑 |
模型可调用(11 个)
| 技能 | 作用 |
|---|---|
grilling |
把还没想清的想法问到没有含糊 |
skills-map |
路由表:从处境查到该用哪个 |
tdd |
测试先行的红-绿循环 |
diagnosing-bugs |
疑难 bug 的诊断纪律 |
code-review |
双轴审查:规范轴 + 规格轴 |
codebase-design |
深模块的词汇与判断标准 |
domain-modeling |
维护项目术语表与架构决策记录 |
pr |
拉取请求正文的三段结构 |
prototype |
写一次性代码回答设计问题 |
research |
查一手来源,留一份带引用的笔记 |
writing-for-agents |
写给模型读的文档时的规范 |
技能包里的正文保持一屏内;词汇表、判断标准、例证这类细节放在同目录的附件里,正文末尾有一行指针。tdd 带 MOCKING.md,code-review 带 SMELLS.md,codebase-design 带 DEEP-MODULES.md,一共 10 份附件。
技能的三种来源
| 来源 | 位置 | 说明 |
|---|---|---|
| 项目级 | <项目>\.dsh\skills\、<项目>\.agents\skills\ |
跟着仓库走,DSH 原生扫描 |
| 用户级 | ~\.dsh\skills\ |
面板和工具都管这里 |
| 内置 | 插件自带的 skills\ |
只读;在用户目录放一份同名的就能覆盖 |
同名时优先级:项目级 > 用户级 > 内置。 项目根按「最近的含 .git 的目录」判定,所以在子目录里也能找到。
面板只列用户级和内置(浏览器端拿不到会话的工作目录);项目级技能在对话里问 AI 就能看到。
和同类插件的关系
DSH 生态里已经有两个做技能的插件,侧重和我们不同:
| 插件 | 侧重 |
|---|---|
dsh-skills |
把散落各处(Claude Code、项目目录、.skill 包)的技能汇总入库,引用或副本两种方式,能导出打包 |
asakumizy/dsh-local-skills |
本地技能浏览器,Notion 风格的界面 |
| 本插件 | 技能内容本身 + 分发:自带一整套能用的技能,用技能包分发,管升级与本地改动 |
三个装在一起不冲突(id 不同),只是功能有重叠。同一个技能名不要装两份,那样每个技能会被注册两次。
开发
node verify.mjs # 自测 59 项:解析、增删改查、路径安全、工具定义、技能包、项目级扫描、路由表
node check-tools.mjs # 用 DSH 自己的 JSON Schema 校验器检查六个工具的定义
node check-pack.mjs # 检查技能包内容是否符合规范
node measure.mjs # 量出每轮对话的固定开销
技能文件(skills/*/SKILL.md)改动会热生效,保存即用。
插件代码(index.js、client.js)改动需要重载:client.js 刷新页面即可;index.js 因为 Node 会缓存已加载的模块,要把插件卸掉再装(或重启 DSH)。
要往包里加技能、或者重写技能时,先读 REWRITE-GUIDE.md:那里记了附件该怎么分类(模板类压进正文,方法类与机制类必须留附件),以及第一次重写时因为「一律单文件」而丢掉 19% 内容的教训。
目录结构
dsh-skill-starter/
package.json 插件清单(dsh.bundle.patch 指向下面的补丁)
cordis.patch.yml 告诉 DSH 加载这个插件
index.js 宿主侧:注册内置技能、六个工具,提供面板接口
client.js 浏览器侧:设置页「Skill 管理」面板
skills/ 6 个基础技能
packs/engineering-zh/ 技能包:20 个技能 + 10 份附件
verify.mjs 自测
check-tools.mjs 工具定义校验
check-pack.mjs 技能包规范校验
measure.mjs 成本测量
REWRITE-GUIDE.md 重写或新增技能的规范
CHANGELOG.md 更新记录
许可
MIT
No comments yet. Be the first to write one.