dsh-plugin-matt-skills
Verifieddsh-plugin-matt-skills · v1.0.1 · MIT
Matt Pocock's engineering and productivity skills for DeepSeek Harness: grilling, spec and ticket flows, TDD, code review, domain modelling and more.
Install
dsh plugin add dsh-plugin-matt-skills Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Creators
Readme
dsh-plugin-matt-skills
把 Matt Pocock 的 Skills For Real Engineers 作为 DeepSeek Harness 插件装进每个会话。上游原意是「小而可组合、配合任意模型、服务真实工程而非 vibe coding」,本插件只做搬运与接线,不改写任何 skill 正文。
装了什么
27 个 skill,逐个目录打包,按上游 plugin.json 的推广集收录(engineering 20 + productivity 7)。上游把 skill 分成两类,本插件原样保留:
模型可自动调用(11 个)
| Skill | 用途 |
|---|---|
tdd |
红-绿-重构循环,一次一个纵向切片 |
code-review |
从固定基点起审查 diff:规范轴 + 规格轴,两路并行子代理 |
codebase-design |
深模块设计词汇:小接口、干净接缝、可测 |
domain-modeling |
磨锋利领域模型,就地更新 GLOSSARY.md 与 ADR |
diagnosing-bugs |
难 bug 与性能回退的纪律化诊断闭环 |
prototype |
一次性原型回答设计问题(单页 HTML 或多种 UI 变体) |
research |
对着高可信一手来源做调研,产出带引用的 Markdown |
pr |
PR 正文该长什么样:摘要可视化 + 前后证据 + 合并风险判定 |
wizard |
生成交互式向导脚本,把只有人能做的步骤走完 |
grilling |
拷问式访谈原语,被下面多个流程复用 |
writing-for-agents |
写给 agent 看的文档:skill、AGENTS.md、指针文档 |
仅由人调用(16 个)
| Skill | 用途 |
|---|---|
ask-matt |
路由器:不确定该用哪个 skill 时先问它 |
grill-me / grill-with-docs |
开工前把你的方案问到没有悬空分支(后者顺带建领域模型) |
to-spec / to-tickets |
把对话压成规格、再拆成带阻塞边的工单 |
implement / implement-spec |
按规格或工单集动手实现,收尾跑 code-review |
wayfinder |
规划超出单个会话容量的大块工作,落成决策工单地图 |
triage |
让 issue 在分诊状态机里流转 |
improve-codebase-architecture |
扫描代码库找出「加深」机会,产出可视化 HTML 报告 |
setup-matt-pocock-skills |
每个仓库跑一次:配 issue tracker、分诊标签、文档位置 |
retro |
复盘后按严重度提出对 agent 环境的改进 |
handoff |
把当前对话压成交接文档,交给下一个 agent |
teach |
多会话教学,当前目录作为有状态的学习工作区 |
to-questionnaire |
把你自己答不了的决策变成一份异步问卷 |
wait-what |
某条消息没听懂时立刻触发,用你项目词汇重讲一遍 |
安装
从 npm 安装(包名 dsh-plugin-matt-skills,把 desktop 换成你的 profile 名):
dsh plugin --profile desktop add dsh-plugin-matt-skills
本地开发也可以不发布,把 target 指向本目录的绝对路径即可,改完 skill 立即生效:
plugin_manager action=install_bundle target="<本目录的绝对路径>"
装完刷新页面即生效,无需重启。卸载:
dsh plugin --profile desktop remove dsh-plugin-matt-skills
GUI 里对应 plugin_manager action=remove_bundle target=dsh-plugin-matt-skills。
用法
- 仅由人调用的 16 个:在输入框用
/唤起(/grill-me、/to-spec……)。它们对模型不可见,不会被自动触发,这正是上游的设计:这些是编排入口,该由你决定何时启动。 - 模型可自动调用的 11 个:你直接描述任务即可,模型会按
description里的触发条件自己取用。 - 两种入口都用 Harness 原生的 skill 机制(
skill工具 + 会话 skill 目录),所以正文是按需加载的:不调用就不占上下文。
与上游的关系
上游以 git submodule 引用,不是复制一份进来:
.gitmodules # url = https://github.com/mattpocock/skills, path = matt-skills
matt-skills/ # submodule,钉在 d81f3a1(只作同步源,插件运行时从不读它)
dsh-plugin-matt-skills/ # 本插件
upstream.json # 记录同一个 commit,外加每个 skill 的文件清单与内容摘要
父仓库里存的是一个 gitlink,指向上面那个确切 commit,所以「这批 vendored 内容出自哪个上游状态」是可验证的事实而非约定:upstream.json 的 commit 与 submodule 钉住的 commit 是同一个。
skill 正文逐字节复制,包括原有的 disable-model-invocation 标记;被排除的只有 agents/(那是 OpenAI/Codex 的清单,本 Harness 不读)。
行尾统一按 LF 规范化后再比较与写入。这不是洁癖:同一个仓库 blob 在 core.autocrlf=true 的机器上检出为 CRLF、在别的机器上是 LF,若按工作树裸字节比对,本地检出差异会被误判成漂移——这个假报警在 Windows 上真出现过(27 个 skill 全报 content differs,而 git 对象里的内容完全一致)。所以 sync 与 --check 的语义统一为「LF 规范化后的内容是否一致」,与机器配置无关。
上游更新了怎么办
git submodule update --remote matt-skills # 把引用移到上游最新 commit
node scripts/sync-skills.mjs # 重新 vendor 并刷新 upstream.json
git diff --stat -- dsh-plugin-matt-skills/skills # 先看清正文到底改了什么
顺序有意义:先移引用、再 vendor、最后读 diff。upstream.json 的摘要会随写入一起更新,所以别用它判断变化,看 git diff。
校验
node scripts/sync-skills.mjs --check # 只比对不写盘:引用到的工作树 vs 已 vendor 的内容
npm run check # 语法检查 + 上述 --check
--check 就是「引用与产物是否仍然一致」的判据:submodule 被移动过却没重新 vendor,它会以退出码 1 点名是哪个 skill 漂移,适合放进 CI。
同步脚本把上游 plugin.json 当作权威清单,并强制三条一致性规则,任何一条不满足就拒绝写盘:
- 每个 skill 必须有
name与description,且name为 kebab-case、与目录名一致(DSH 校验不过会静默丢弃整个 skill,所以宁可在这里失败)。 - 禁止
disableModelInvocation/modelInvocable/userInvocable这类驼峰旧键,DSH 见到会整条丢弃。 disable-model-invocation必须与同一 skill 的agents/openai.yaml里allow_implicit_invocation语义一致;两个上游清单互相矛盾时报错,交给人判断。
设计要点
- 这是一个纯配置 bundle,没有一行插件代码。
cordis.patch.yml直接插入官方@deepseek-ai/dsh-skill-filesystem作为行名,只给它一份隔离配置。这么做不只是「更简洁」:本插件用link:装在工作区,Node 从D:\AIGC\...出发解析不到安装目录 asar 内的@deepseek-ai/*包,任何import '@deepseek-ai/dsh-skill-filesystem'的写法都会以ERR_MODULE_NOT_FOUND让整行激活失败。把行名交给 Loader 解析,才是与官方 MCP bundle 模板一致的形态。 - skill 目录靠
baseUrl定位,不写死路径。bundledSkillDir用官方 agent preset 的同款表达式,经createRequire(baseUrl).resolve('dsh-plugin-matt-skills/package.json')反查本包目录再拼skills,所以 profile 换位置、包名上 npm 都不会失效。 - 独立 provider,不动你现有的 skill 根目录。 用
includeDefaultRoots: false+bundledSkillDir隔离,只服务本包内的 27 个 skill。项目的.dsh/skills、.agents/skills与用户级~/.dsh/skills、~/.agents/skills仍由 Harness 自己那份实例提供,互不干扰。 - 同名时你的本地 skill 赢。 本插件注册在全局层,而项目/用户 skill 落在你所处 agent preset 的作用域层,读取时「更近的层直接胜出」。
watch: false。 打包内容只随升级变化,不必要的文件监视在 Windows 上反而会挡住覆盖安装。- 不声明依赖。 官方包由 Harness 安装目录提供,声明版本区间只会在区间不匹配时倒过来拦住安装。
目录结构
package.json # dsh.bundle.patch 指向下方 patch
cordis.patch.yml # 全部逻辑:插入一行,用隔离配置挂载官方 provider
skills/<name>/ # 27 个 skill 目录包(SKILL.md + 附带文件)
scripts/sync-skills.mjs
upstream.json # 来源与内容摘要
locale/{en,zh}.json # 设置里显示的标题与描述
icon.svg
带附带文件的 skill 会一并带上并由 resourceBase 指向该目录,例如 tdd/tests.md、tdd/mocking.md、codebase-design/DEEPENING.md、domain-modeling/GLOSSARY-FORMAT.md、setup-matt-pocock-skills/issue-tracker-*.md、diagnosing-bugs/scripts/hitl-loop.template.sh。
验证状态
node --check scripts/sync-skills.mjs通过;sync-skills.mjs --check报告与上游一致,可重复执行。- 上游改以 submodule 引用、并钉在
d81f3a1后再次--check:仍报告一致。也就是被引用的那个 commit 能逐字节复现已交付的 27 个 skill,「产物出自哪个上游状态」已被证实。 - 用 DSH 安装目录里真实的
yaml解析器,逐行复刻dsh-skill-filesystem的 frontmatter 解析逻辑跑了一遍:27/27 全部解析成功,name、description、调用策略与预期完全一致,无 legacy 驼峰键。 - 装进 desktop profile 后,
cordis_inspect_query Config.listConfigs能看到patchId: matt-skills的行(statusschema,说明配置通过了官方 Config 校验);skill tdd返回正文,且Base directory指向本包的skills\tdd,证明目录定位与按需加载都通。 - 调用面:
skill tdd成功;skill grill-me返回is not available for model invocation;skill no-such-skill-xyz返回is unknown or no longer available。两种错误不同,说明「仅人调用」的 16 个确实已注册、但对模型不可见。 - 未验证:
/命令菜单里那 16 项的实际渲染。宿主侧注册已确认,渲染由 Harness 自己的 user-invocable → 人用命令机制负责;请在输入框敲/确认能看到grill-me、to-spec等。
已知限制
- 上游有两个 skill(
handoff、teach)带argument-hint,那是 Claude Code 的斜杠命令提示,本 Harness 不读,同步时会打出警告但保留原文。 - 上游
docs/下的说明页、ask-matt引用的外部流程链接、以及.changeset/、.agents/等仓库设施都不随插件发布。 misc/、in-progress/、deprecated/三个 bucket 上游自己也不发布,本插件遵循同一取舍。
许可
上游内容版权归 Matt Pocock,MIT。本移植部分同样以 MIT 提供。详见 LICENSE 与 NOTICE。