🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

技能管家 ymck-x/dsh-skill-starter

DeepSeek Harness
ymck-x23 天前有提交已提供中文文档扫描:含敏感能力

DSH 技能管理器:自带基础技能与中文工程流程技能包,按「你遇到的问题」分组展示,模型可在对话里直接读写;升级技能包不覆盖你改过的文件。

30.4/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add ymck-x/dsh-skill-starter
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
数据截至 2026/11/02·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 23 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 76 处,展示前 40 条)
  • 写入本地文件
    index.js:60
    appendFileSync(join(dshHome, 'dsh-skill-starter.log'), `${new Date().toISOString()} ${line}\n`)
  • 读取本地文件
    index.js:212
    if (existsSync(join(dir, '.git'))) return dir
  • 读取本地文件
    index.js:230
    for (const entry of readdirSync(current, { withFileTypes: true })) {
  • 执行外部命令来自配置/变量
    index.js:248
    spawn(command, [dir], { detached: true, stdio: 'ignore' }).unref()
  • 读取本地文件
    index.js:284
    for (const entry of readdirSync(dir, { withFileTypes: true })) {
  • 读取本地文件
    index.js:290
    if (existsSync(skillsDir)) walk(skillsDir, '')
  • 读取本地文件
    index.js:299
    if (!existsSync(root)) return []
  • 读取本地文件
    index.js:302
    entries = readdirSync(root, { withFileTypes: true })
  • 写入本地文件
    index.js:398
    mkdirSync(this.userDir, { recursive: true })
  • 写入本地文件
    index.js:399
    writeFileSync(this.statePath, JSON.stringify({ version: 1, packs: state.packs }, null, 2), 'utf8')
  • 写入本地文件
    index.js:497
    writeFileSync(target, readFileSync(source, 'utf8'), 'utf8')
  • 写入本地文件
    index.js:501
    mkdirSync(dirname(target), { recursive: true })
  • 写入本地文件
    index.js:502
    writeFileSync(target, readFileSync(source, 'utf8'), 'utf8')
  • 删除本地文件递归
    index.js:661
    rmSync(dir, { recursive: true, force: true })
  • 删除本地文件
    index.js:665
    rmSync(file, { force: true })
  • 发起网络请求
    client.js:264
    response = await fetch(new URL(ROUTE, document.baseURI), {
  • 读取本地文件
    check-pack.mjs:57
    if (!existsSync(skillsDir)) {
  • 读取本地文件
    check-pack.mjs:62
    const dirs = readdirSync(skillsDir, { withFileTypes: true })
  • 读取本地文件
    check-pack.mjs:78
    const entries = readdirSync(dir, { withFileTypes: true })
  • 读取本地文件
    check-pack.mjs:89
    const text = readFileSync(join(dir, 'SKILL.md'), 'utf8')
  • 读取本地文件
    check-tools.mjs:22
    ].filter(candidate => typeof candidate === 'string' && candidate !== '' && existsSync(candidate))
  • 读取本地文件
    measure.mjs:28
    const parsed = parseSkillFile(readFileSync(entry.file, 'utf8'))
  • 读取本地文件
    measure.mjs:38
    const source = readFileSync(join(pluginDir, 'index.js'), 'utf8')
  • 读取本地文件
    verify.mjs:20
    const text = readFileSync(join(pluginDir, 'skills', name, 'SKILL.md'), 'utf8')
  • 读取本地文件
    verify.mjs:88
    assert.ok(existsSync(join(userDir, 'my-note', 'SKILL.md')))
  • 读取本地文件
    verify.mjs:108
    assert.ok(existsSync(join(userDir, 'write-my-skill', 'SKILL.md')))
  • 读取本地文件
    verify.mjs:142
    assert.equal(existsSync(join(userDir, 'my-note')), false)
  • 删除本地文件递归
    verify.mjs:160
    rmSync(root, { recursive: true, force: true })
  • 读取本地文件
    verify.mjs:165
    const clientSource = readFileSync(join(pluginDir, 'client.js'), 'utf8')
  • 读取本地文件
    verify.mjs:167
    .map(entry => parseSkillFile(readFileSync(entry.file, 'utf8')).name)
  • 写入本地文件
    verify.mjs:288
    writeFileSync(join(toolRoot, 'skills', 'grilling', 'SKILL.md'), '我改过了', 'utf8')
  • 写入本地文件
    verify.mjs:315
    mkdirSync(join(projectRoot, '.git'), { recursive: true })
  • 写入本地文件
    verify.mjs:317
    mkdirSync(projectSkillDir, { recursive: true })
  • 写入本地文件
    verify.mjs:318
    writeFileSync(join(projectSkillDir, 'SKILL.md'),
  • 写入本地文件
    verify.mjs:321
    mkdirSync(nested, { recursive: true })
  • 删除本地文件递归
    verify.mjs:337
    rmSync(projectRoot, { recursive: true, force: true })
  • 写入本地文件
    verify.mjs:350
    mkdirSync(join(keepRoot, 'grilling'), { recursive: true })
  • 删除本地文件递归
    verify.mjs:359
    rmSync(keepRoot, { recursive: true, force: true })
  • 删除本地文件递归
    verify.mjs:388
    rmSync(roadRoot, { recursive: true, force: true })
  • 删除本地文件递归
    verify.mjs:391
    rmSync(toolRoot, { recursive: true, force: true })
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 按问题分组展示技能
  • 对话内直接读写技能
  • 升级不覆盖已改文件

README

由 DeepSeek 最新模型翻译生成
dsh-skill-starter 装完就有 6 个能直接用的技能,外加一个 20 个技能的工程流程包。 设置页里能看能改,AI 也能在对话里直接读写技能库。 | 装完立刻得到 | 是什么 | | 6 个基础技能 | ask-first 需求没说清时先问完再动手、prove-it 改之前先说清怎么验证、write-my-skill 一句话把你的做法记成技能 | | 20 个工程流程技能 | 从拷问需求 → 收规格 → 拆票 → 实现 → 双轴审查 → 复盘,一整套;外加诊断 bug、TDD、原型、研究、教学 | | 按症状分组的面板 | 按「你遇到的问题」分组,不用记技能名;能编辑、新建、复制内置技能 | | 一张「我该用哪个」对照表 | 29 行处境对照,点一行跳到对应技能 | | AI 在对话里直接读写 | 你说「把这套流程记下来」,它直接落盘,不会写错格式 | 升级技能包不会覆盖你改过的文件。 装进来之后那份归你——插件只加新技能、修错字,不碰你动过的任何一行。 技能(skill)是 DSH 里最实用的东西:把一套做法写成一个文件,之后随时调用,AI 每次都按同一套流程做事。麻烦的地方在于管——文件散在几个目录、frontmatter 写法要记、装了一堆想不起用哪个、改过的还怕被升级冲掉。 这个插件把这几件事一起解决了。
展开完整文档(README 剩余 1 节)
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 dsh-skill-starter

desktop 换成你自己的 profile 名(~/.dsh/profiles/ 下面的目录名)。装完重启 dsh。

包在 npm 上:<https://www.npmjs.com/package/dsh-skill-starter>。

验证:设置页里出现「Skill 管理」这一项,或者直接问 AI「我有哪些技能」。

装不下来时改用源码包

网络或镜像有问题时,改用 GitHub 上的固定 tag 地址:

dsh plugin --profile desktop add https://github.com/ymck-x/dsh-skill-starter/archive/refs/tags/v0.3.0.tar.gz

请照抄这个完整地址,不要改成 refs/heads/main.tar.gz。
分支地址的内容会随作者推代码而改变,而 pnpm 会记下你安装当时的指纹。
之后你装任何插件时,pnpm 都会重新核对全部旧依赖,一旦发现指纹对不上就中止整次安装(ERR_PNPM_TARBALL_INTEGRITY),而且报错指向一个你当时根本没在装的包。
refs/tags/ 指向一次固定发布,内容永不改变——代价是换版本时要手改上面那个 tag 号。

也不要写成 github:ymck-x/dsh-skill-starter 这种简写:它会被 pnpm 解析成 SSH 地址(git+ssh://),而匿名 SSH 访问 GitHub 会被直接拒绝,装不上。

没有 dsh 命令时手动装

dsh plugin add 内部就是「pnpm 装包 + 把包名写进 dsh.profile.bundles」。你也可以自己做这两步:

cd ~/.dsh/profiles/desktop
pnpm add dsh-skill-starter

从 npm 装不下来时,把 dsh-skill-starter 换成上面那个 GitHub tag 地址。

再把 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% 内容的教训。

要发版时,先读 RELEASING.md:npm 现在只认勾了 Bypass 2FA 的令牌,那份文档写着令牌怎么建、.npmrc 怎么写、发布后必须收回什么,以及 403 和 404 各自真正代表什么(404 不是包名问题,是认证无效)。那份文档整份复制到别的项目也能用。

目录结构

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 重写或新增技能的规范 RELEASING.md 发版到 npm 的流程(可整份复制到别的项目) CHANGELOG.md 更新记录

许可

MIT
预览分享卡片长什么样 ↓ymck-x/dsh-skill-starter
分享 · DeepSeek Harness Hub
ymck-x/dsh-skill-starter

DSH 技能管理器:自带基础技能与中文工程流程技能包,按「你遇到的问题」分组展示,模型可在对话里直接读写;升级技能包不覆盖你改过的文件。

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部