dsh-skill-starter
Skill manager for DSH with a pack system. Installs skills as versioned packs and never overwrites files you have edited - upgrades skip your changes and report them. Also ships 6 built-in skills, a problem-grouped settings panel, and tools that let the agent read and write the skill library in conve
Install
dsh plugin --profile web add dsh-skill-starter
Sandbox test
This plugin has not been tested yet. Submit a test →
README
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 的目
…(truncated)
Rendered from the README published on npm. Formatted only, not edited.
Versions
Published on npm::2,最后更新 2026-10-13