← Back to home@yuanshuoSY

dsh-coder-preset

DeepSeek Harness 的 Coder 预设,集成了 35 项 Matt Pocock 在工程方面的技能,专用于 Coder 会话

Stars
0
Language
JavaScript
Created
Oct 24, 2026
Updated
Oct 25, 2026

Introduction

dsh-coder-preset

一个 DeepSeek Harness bundle:提供 Coder agent preset 和 37 个 Matt Pocock 工程技能(简体中文):其中 33 个逐字节 vendored 自 vinvcn/mattpocock-skills-zh-CN(mattpocock/skills 的中文译本)的 604ad61 提交,4 个是 DSH 改编。技能只在 Coder 会话可见,安装后不会改变同一 profile 里其他 agent 的技能目录。

  • 37 个技能:15 个 model-invocable(模型可自动加载),其余 22 个是 user-only(模型不可调用)。37 个都能通过输入 /技能名 调用;这 37 个里只有 15 个会出现在模型技能目录中(其他已装 bundle 自己的技能另算)。
  • Coder 专属:standard 会话加载不了这些技能
  • 33 个技能从 vinvcn/mattpocock-skills-zh-CN 的 604ad61 提交逐字节 vendored(复制);4 个 DSH 改编来自 skills-local/(规则见仓库内 LOCALIZATION.md,该文件不随包发布)
  • 配置、Markdown,以及一个小的 guard 插件(没有运行时依赖,也没有安装期代码)
  • 4 个 DSH 改编:ask-matt 用新会话代替 DSH 没有的 /clear,claude-handoff 改为启动 DSH subagent,git-guardrails-claude-code 记录内置 guard 的行为,scaffold-exercises 在没有私有课程 linter 时按规则自检
  • 内置 profile 级 git-guardrails 插件,在 shell 工具执行前拦截危险 git 命令;在插件管理里停用该行即可关闭
  • 用 engines.dsh 门禁、两次构建的 sha256 对比和安装 smoke(真实启动 profile 并通过 DSH 挂载技能目录)来验证 bundle

与源仓库的差异:37 个技能里有 4 个经过改编

33 个技能正文逐字节来自 vinvcn/mattpocock-skills-zh-CN 固定提交的 skills 树。另外 4 个因为原版依赖 DSH 没有的工具而做了改编, 它们不等同于原版:这 4 个是在该仓库中文内容上改编的,行为差异如下:

技能原版本 bundle
ask-matt用 /clear 重置 context,并给 /compact 传一条指令用「结束当前会话、新建会话」代替 /clear;/compact 不带参数(DSH 只支持无参 compact)
claude-handoff用 claude --bg 起 Claude Code 后台 agent,用 claude agents 管理写 handoff 摘要后用 DSH subagent 起进程内子 agent;关闭 DSH 会一起结束它
git-guardrails-claude-code在 Claude Code 的 project 或 global settings 里装 PreToolUse hook内置 profile 级 git-guardrails 插件行(tools.guard());除上游列表外还覆盖 git clean --force/-d -f,可在插件管理里停用该行
scaffold-exercises运行私有的 AI Hero 课程 linter(pnpm ai-hero-cli internal lint)目录与 readme 约定相同;按文档规则自检,不调用私有 linter;mkdir 示例同时给 bash 和 PowerShell 版本

其余技能均 vendored 自该仓库,由 skills.manifest.json 固定。

安装

  1. 从 releases 页面 下载 dsh-coder-preset-1.4.1.tgz 和 SHA256SUMS,用 SHA256SUMS 核对 tarball。
  2. 打开 DSH 插件管理,选择安装本地 bundle,选中该 tarball。
  3. 重启 DSH。
  4. 新建会话,agent 选择 Coder。

CLI 托管的 profile(不适用于 Electron 托管的 desktop profile):

dsh plugin --profile <profile> add /path/to/dsh-coder-preset-1.4.1.tgz

请装进一个已存在、且已经包含 web-app 的 profile(例如 web)。对五个内置模板名(web、acp、headless、sdk、sdk-minimal)之外的新名字执行 dsh plugin --profile <name> add 只会初始化 base profile:Coder preset 的行会出现在组合树里,但永远不会注册;内置模板名则会按对应模板初始化。

Windows 上 DSH 运行时替换已安装的 bundle 可能报 EPERM。按发布流程操作:先把 tarball 复制到仓库外(例如 ~/.dsh/bundle-artifacts/),在插件管理里禁用 bundle,重启 DSH,安装新版本,再重新启用。

使用

  • model-invocable 技能会提供给模型,在任务匹配时自动加载;37 个技能也都可以手动输入,例如 /tdd。
  • user-only 技能不会提供给模型(在中文界面的 / 菜单里带“仅用户”徽标,英文界面为 “user-only”),需要你自己输入,例如 /ask-matt、/to-spec、/to-tickets。
  • 每个项目第一次使用工程流前,跑一次 /setup-matt-pocock-skills。
  • 技能只在 Coder 会话可见。
  • git-guardrails 行启用时,agent 的 git push、git reset --hard、git clean -f/--force、git branch -D、git checkout .、git restore . 会被拒绝;你在终端里自己敲的命令不受影响。该行是 profile 级的,同一 profile 里的 standard 会话也会被检查。

常用命令:

命令作用
/ask-matt把当前处境路由到合适的技能或流程
/grill-with-docs追问并打磨计划或设计,同时写 ADR 和术语表
/to-spec把对话整理成 spec 并发布到 issue tracker
/to-tickets把 spec 拆成带阻塞关系的 tracer-bullet 工单
/implement根据 spec 或工单实现功能
/tdd测试先行:红、绿、重构
/code-review从 Standards 和 Spec 两个维度审查改动
/pr按模板撰写 PR 正文
/retro对一次编码会话做复盘
/claude-handoff写 handoff 摘要,并用它启动一个后台 DSH subagent
全部 37 个技能

37 个都会出现在 / 菜单里;第一列的 22 个只是模型不可调用。

user-only(22,模型不可调用)model-invocable(15)
ask-matt, claude-handoff, grill-me, grill-with-docs, handoff, implement, implement-spec, improve-codebase-architecture, loop-me, retro, setup-matt-pocock-skills, setup-ts-deep-modules, teach, to-questionnaire, to-spec, to-tickets, triage, wait-what, wayfinder, writing-beats, writing-fragments, writing-shapecode-review, codebase-design, diagnosing-bugs, domain-modeling, git-guardrails-claude-code, grilling, migrate-to-shoehorn, pr, prototype, research, scaffold-exercises, setup-pre-commit, tdd, wizard, writing-for-agents

兼容性

已在 Windows 上的 DSH 0.2.1-rc.3 验证:安装、Coder 会话看到 bundle 自带的 15 个 model-invocable 技能(Coder 会话还会看到 DSH 和其他已装 bundle 提供的技能;这里的计数只算本 bundle)、/ask-matt 触发、standard 会话隔离。

CI 每次 push 到 main 和每个 pull request 都会把构建出的 tarball 装进从 web 模板创建的临时 DSH profile:先检查组合后的 preset 条目,再用 DSH 自己的 loader 求值随包的技能目录表达式,并在结果上挂载真实的技能注册表和文件系统 provider;最后真实启动一次 profile,用只读 probe 断言 Coder preset 成功激活且无诊断,并断言 standard 作用域看不到任何随包技能。它会断言 37 个技能(15 个 model-invocable、22 个 user-only)并加载示例正文,因此 bundledSkillDir、技能 provider 或 preset 挂载坏了都会直接让 CI 失败。模型回合需要凭证,不在 CI 范围内;CI 证明的是技能目录和可见作用域,不是一次 agent 回合。

bundle 声明了 engines.dsh >=0.2.1-rc.3 <0.3.0。DSH 在安装 bundle 时检查这个范围,超范围时拒绝并给出具体要求和 dsh plugin allow-version 的补救方式;npm run verify-gate 用一个故意不兼容的构建端到端证明这次拒绝,并确认被拒绝的 bundle 不会贡献 preset。这个范围接受 0.2.1-rc.3 及以上的所有 0.2.x 版本,因为 semver 把 0.2.x 的补丁版本视为兼容,同时拒绝 0.3.0。范围内的 DSH 升级仍会挂载这份 pinned preset,所以 npm run verify-dsh 会比较全部 32 个插件行(含嵌套行和模块名),按名字报告漂移。只有新 DSH 上 verify-dsh 和 smoke 都通过后,才在 package.json 里放宽这个范围。

verify-dsh 和 verify-gate 需要可导入的 DSH,属于手动检查,CI 不跑。CI 只有一个 Ubuntu job(Node 24):validate、单元测试、两次构建比较 sha256,然后用 pinned DSH CLI 跑安装 smoke。GitHub Actions 全部按 commit SHA 手动固定。npm run sync-skills -- --source <checkout> 默认只读:报告 vendored 中文仓库相对 pin 的漂移和 4 个改编源的变化,只有加 --refresh 才会重新 vendor skills/ 并重写 skills.manifest.json。

  • issue tracker 类技能需要 gh、glab,或通过 /setup-matt-pocock-skills 配置的本地 markdown tracker。
  • /implement-spec 需要 git worktree,尚未端到端验证。
  • Windows 上基于 bash 的技能(例如 /wizard)需要 Git Bash 或 WSL。
  • ask-matt 是唯一改编过的工作流技能:DSH 没有 /clear,/compact 也不接受参数,因此改编版用「新建会话」代替 clear、直接运行无参 /compact。
  • scaffold-exercises 按文档里的课程约定自检,不调用私有课程 linter;公开的 ai-hero-cli 包并不提供 internal lint。
  • claude-handoff 会用摘要启动 DSH 的 subagent;这个子 agent 是进程内的,关闭 DSH 会一起结束。
  • git-guardrails 是工具层 guard,不是沙箱:它只检查引号之外的命令文本——用引号包住 git push(搜索、commit message、文档示例)不会被拦,没加引号地出现仍会被拦;写进脚本或嵌套解释器(bash script.sh、sh -c "...")的命令不在检查范围;用户在终端输入的命令也不受影响。同一 profile 里若还装了别的 guard,两者会同时生效。

从 1.3.x 升级与共存

  • 1.4.0 把技能源切换为中文上游。chief-of-staff 不在该译本中,不再随包提供;其余 37 个技能是 pinned 的中文技能集加 4 个 DSH 改编。
  • 1.4.1 只修正文档和 preset 描述(中文 README 现在是唯一 README),没有行为变化。
  • ask-matt 从逐字节 vendored 变成 DSH 改编(用新会话代替 /clear);scaffold-exercises 增加了 PowerShell 命令。
  • 不要同时安装上游的 @vinvcn/dsh-mattpocock-skills-zh 插件。它是 profile 级插件,同一 profile 里每个会话都会看到它带 zh-* 前缀的技能,而 Coder 会话会同时看到两套目录。本 bundle 存在的意义正是把这些技能限定在 Coder 会话。

从源码构建

npm ci
npm run validate
npm test
npm run build

npm run smoke 会构建 tarball、装进从 web 模板创建的临时 DSH profile、检查组合后的 preset 条目、真实启动一次 profile 证明 Coder preset 激活且技能不越界,并通过 DSH 自己的注册表挂载技能目录。运行前需要 pnpm 和 DSH CLI,例如 npm install -g @deepseek-ai/dsh@0.2.1-rc.3。npm run build 会写出 tarball 和 dist/SHA256SUMS;npm run validate 会按 skills.manifest.json 校验每个随包技能文件(files 对应 33 个 vendored 技能,且每项必须等于 source;local 对应 4 个改编及 skills-local/ 源文件),改过的技能正文在发布前就会失败。

npm run verify-dsh 会检查已安装的 DSH 是否满足 engines.dsh 门禁,并把全部 32 个 pinned 插件行(含嵌套行和模块名)与 DSH 自带 standard preset 做 diff,升级 DSH 时运行一次。npm run verify-gate 会构建一个故意不兼容的 bundle 副本,断言 DSH 拒绝安装它,是这道门禁的反向验证。

这些检查需要一个可导入的 DSH。Windows 桌面版把 DSH 放在 app.asar 里,普通 Node 无法导入,所以要么安装 CLI,要么用 ELECTRON_RUN_AS_NODE=1 运行脚本并把桌面可执行文件作为 --dsh 传入;解析器会把它映射到 resources/app.asar/dsh/node_modules/@deepseek-ai/dsh。没有该运行方式时,传入 asar 路径会得到同样的提示。在受限的 agent 沙箱里 npm test 无法派生测试进程时,npm run test:in-process 会在同一进程里跑同一批测试文件。

许可与署名

MIT。33 个 vendored 技能是 vinvcn/mattpocock-skills-zh-CN(MIT)对 Matt Pocock mattpocock/skills 内容的中文译本;ask-matt、claude-handoff、git-guardrails-claude-code 和 scaffold-exercises 是基于该内容改编的 DSH 改编。署名见 NOTICE。本项目与 DeepSeek、Matt Pocock 均无隶属或背书关系。