English | 中文
dsh-coder-preset
A DeepSeek Harness bundle that adds the Coder agent preset and all 38 Matt Pocock engineering skills. The skills are scoped to Coder sessions, so installing it does not change the skill catalog of other agents in the profile.
- 38 skills: 15 model-invocable (loaded automatically) and 23 user-invoked (
/name) - Coder-only skills: a standard session cannot load them
- Configuration, Markdown, and one small guard plugin (no npm runtime dependencies, no install-time code)
- 35 skills vendored verbatim from mattpocock/skills at commit 5beb35b (v1.3.1 plus 47 commits), plus 3 DSH adaptations:
claude-handoffstarts a DSH subagent instead of the Claude Code CLI,git-guardrails-claude-codedocuments the bundled guard plugin, andscaffold-exerciseschecks its tree itself when the private course linter is absent - A
git-guardrailsplugin that blocks dangerous git commands before the shell tool runs; disable its row in the plugin manager to turn it off - An
engines.dshgate, a two-build sha256 comparison and an install smoke test that mounts the skill catalog through DSH
Adaptations: 3 of the 38 skills are not upstream-verbatim
35 skills are byte-for-byte upstream. Three had to be adapted because the upstream behaviour depends on tooling DSH does not have. They are not identical to the original, and the differences change how they behave:
| Skill | Upstream | This bundle |
|---|---|---|
claude-handoff |
Starts a Claude Code background agent (claude --bg) and manages it with claude agents |
Writes the handoff summary, then starts an in-process DSH subagent; closing DSH ends the child |
git-guardrails-claude-code |
Installs a Claude Code PreToolUse hook in .claude/settings.json |
Ships a profile-wide git-guardrails plugin row (tools.guard()); it denies the same commands, and the row can be disabled in the plugin manager |
scaffold-exercises |
Runs the private AI Hero course linter (pnpm ai-hero-cli internal lint) |
Keeps the same directory and readme conventions; checks the documented rules by inspection and does not invoke the private linter |
Every other skill is upstream content, pinned by skills.manifest.json.
Install
- Download
dsh-coder-preset-1.3.3.tgzfrom the releases page. - In DSH, open the plugin manager, install a local bundle, and select the tarball.
- Restart DSH.
- Create a session and select the Coder agent.
CLI-managed profiles (not the Electron-managed desktop profile):
dsh plugin --profile <profile> add /path/to/dsh-coder-preset-1.3.3.tgz
On Windows, an upgrade can fail with EPERM while DSH is running. Disable the bundle in the plugin manager, install the new version, then enable it again.
Usage
- Model-invocable skills load automatically when a task matches. You can also type the command, for example
/tdd. - User-invoked skills are hidden from the model. Type them yourself, for example
/ask-matt,/to-spec, or/chief-of-staff. - Run
/setup-matt-pocock-skillsonce per project before the first engineering flow. - Skills are visible only in Coder sessions.
git push,git reset --hard,git clean -f,git branch -D,git checkout .andgit restore .are denied for the agent while thegit-guardrailsrow is enabled; the user can still run them in a terminal.
Common commands:
| Command | What it does |
|---|---|
/ask-matt |
Routes the current situation to the right skill or flow |
/grill-with-docs |
Sharpens a plan or design while writing ADRs and glossary entries |
/to-spec |
Turns the conversation into a spec on the issue tracker |
/to-tickets |
Breaks a spec into tracer-bullet tickets with blocking edges |
/implement |
Implements a spec or a set of tickets |
/tdd |
Drives test-first development: red, green, refactor |
/code-review |
Reviews changes on the Standards and Spec axes |
/pr |
Writes the PR body from the template |
/retro |
Runs a retrospective on a coding session |
/claude-handoff |
Writes a handoff summary and starts a background DSH subagent with it |
| User-invoked (23) | Model-invocable (15) |
|---|---|
ask-matt, chief-of-staff, 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-shape |
code-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 |
Compatibility
Verified on Windows with DSH 0.2.1-rc.3: install, the 15 model-invocable skills in a Coder session, /ask-matt, and standard-session scoping.
CI installs the built tarball into a throwaway DSH profile, checks the composed preset rows, evaluates the shipped skill-directory expression with DSH's own loader, and mounts the real skill registry and filesystem provider over the result. It asserts 38 skills (15 model-invocable, 23 user-invoked) and loads sample bodies, so a broken bundledSkillDir or skill provider fails CI. A model turn needs credentials and stays out of scope; CI proves the catalog, not an agent turn.
The bundle declares engines.dsh >=0.2.1-rc.3 <0.3.0. DSH checks that range when it installs a bundle, and an out-of-range bundle is refused with a named requirement and a dsh plugin allow-version remedy; npm run verify-gate proves that refusal end to end with a deliberately incompatible build, and the refused bundle contributes no preset. The range accepts every 0.2.x release because semver treats a 0.2.x patch as compatible, and it rejects 0.3.0. A DSH upgrade inside the range still mounts the pinned preset, so npm run verify-dsh diffs all 32 plugin rows, nested rows and module names included, and reports any drift by name. Widen the range in package.json only after verify-dsh and the smoke test pass against the new DSH.
verify-dsh and verify-gate are manual checks that need an importable DSH, so CI does not run them. CI is a single Ubuntu job with Node 24: validate, unit tests, two builds compared by sha256, then the install smoke test against the pinned DSH CLI. GitHub Actions are pinned to commit SHAs by hand.
- Issue-tracker skills need
gh,glab, or the local markdown tracker configured by/setup-matt-pocock-skills. /implement-specneeds git worktrees and is not end-to-end verified.- On Windows, bash-based skills such as
/wizardneed Git Bash or WSL. /ask-mattreferences/clear, which DSH does not have; start a new session instead.scaffold-exerciseschecks the documented course conventions by inspection and does not invoke the private course linter; the publicai-hero-clipackage does not exposeinternal lint.claude-handoffstarts a DSHsubagentfrom the summary, and aclaude-handoffchild is in-process: closing DSH stops it.- The
git-guardrailsplugin is a tool guard, not a sandbox. It sees model-issued shell calls only; commands the user types are not intercepted, and a script that runs git internally is stopped only when the command string matches. If another tool guard is installed in the same profile, both run.
Build from source
npm ci
npm run validate
npm test
npm run build
npm run smoke builds the tarball, installs it into a temporary DSH profile, checks the composed preset rows, and mounts the skill catalog through DSH's own registry. It needs pnpm and the DSH CLI, for example npm install -g @deepseek-ai/dsh@0.2.1-rc.3. npm run build writes the tarball and dist/SHA256SUMS; npm run validate checks every shipped skill file against skills.manifest.json (upstream files against the pinned commit, local adaptations against skills-local/), so an edited skill body fails before it can ship.
npm run verify-dsh checks an installed DSH against the engines.dsh gate and diffs all 32 pinned plugin rows, nested rows and module names included, against the shipped standard preset; run it when you upgrade DSH. npm run verify-gate builds a deliberately incompatible copy of the bundle and asserts DSH refuses it, which is the negative half of that gate.
These checks need an importable DSH. The Windows desktop app keeps DSH inside app.asar, which plain Node cannot import, so install the CLI, or run the scripts with ELECTRON_RUN_AS_NODE=1 and pass the desktop executable as --dsh; the resolver maps it to resources/app.asar/dsh/node_modules/@deepseek-ai/dsh. An asar path used without that runner is reported with the same remedy. In a confined agent session where npm test cannot spawn its test-runner children, npm run test:in-process runs the same test files in one process.
License and credits
MIT. 35 skills are vendored from mattpocock/skills by Matt Pocock under the MIT license; claude-handoff, git-guardrails-claude-code and scaffold-exercises are DSH adaptations derived from that upstream content. See NOTICE for attribution. Not affiliated with or endorsed by DeepSeek or Matt Pocock.
No comments yet. Be the first to write one.