feat(runtimes): add opt-in DeepSeek Harness (dsh) support - #2154
Open
JFWaskin wants to merge 1 commit into
Open
Conversation
This PR adds opt-in support for routing superpowers skills into a
DeepSeek Harness (dsh) session. Four files, all additive:
* .dsh-plugin/plugin.json the manifest
* docs/README.deepseek-harness.md runtime install doc
* docs/compatibility.md new compat matrix
* tests/dsh/test-dsh-plugin.sh manifest validation test
The dsh harness ships a native skill tool and a ctx.skills provider
registry. Every existing superpowers SKILL.md is one-level-deep and
kebab-case, so the discovery shape matches the harness's contract
without rewriting any skill content. The lowest-friction install is
one line in the user's cordis.yml:
- id: skill-filesystem
config:
customSkillDirs:
- /path/to/superpowers/skills
A more complete implementation (with a real Cordis plugin file and
a dsh.bundle field in package.json) lives in obra#2144. This PR is the
narrower opt-in shape that mirrors the other 12 runtimes' manifest
pattern; if maintainers prefer the fuller shape, this PR is closed
without prejudice and obra#2144 is the path forward.
The compatibility matrix is a new file. The other 12 runtimes have
their notes woven into the plugin manifests and the README; a
centralized compat table is a fork addition that this PR promotes
into upstream. If maintainers prefer the per-runtime README pattern,
the compat-matrix file can be dropped in a follow-up.
The eval scenarios (Quorum format) stay in the fork; upstream's
convention is a per-runtime shell test that validates the manifest,
which is what tests/dsh/test-dsh-plugin.sh does. The fork's eval
scenarios test deeper behavior (the /<name> user-invocation regex,
destructive dsh-prefixed commands) that the maintainers' CI cannot
run without dsh installed.
Closes obra#2152. Coordinates with obra#2144.
This was referenced Aug 15, 2026
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Who is submitting this PR? (required)
docs/upstream/deepseek-harness-analysis.mdwas drafted with help from a research agent, and the eval scenarios in the fork'stests/evals/scenarios/dsh-dsh-eval/andtests/evals/scenarios/deepseek-harness/were written with help from a coding agent). The final files in this PR were all hand-reviewed by JFWaskin before submission.bash tests/evals/validate-scenarios.shagainst a local Quorum setup (not in this PR's diff).@JFWaskin)What problem are you trying to solve?
deepseek-ai/deepseek-harnessshipped an open-source agent harness on 2026-08-15 (MIT, 0.1.0-rc.5+, "Everything is a Plugin", Cordis-based). Superpowers users who adopt the new harness can't currently reuse the 14 skills (brainstorming,test-driven-development,subagent-driven-development,verification-before-completion, etc.) — the harness doesn't auto-discover~/.claude/skills,.claude/skills, or any of the existing 12 runtime manifests.I noticed this because the harness installs the repo as a plain dependency and exits 0, but a dsh session running the canonical acceptance prompt (
Let's make a react todo list) scaffolds and builds a Vite app without ever consulting a superpowers skill. Same problem statement, independently reproduced by@codeAnqiang-main #2144.What does this PR change?
Four files, all additive:
.dsh-plugin/plugin.json— the manifest, following the same convention as.claude-plugin/,.cursor-plugin/,.kimi-plugin/, etc.docs/README.deepseek-harness.md— runtime install doc, following the convention ofdocs/README.kimi.mdanddocs/README.opencode.md.docs/compatibility.md— new file: a centralized compat matrix that the fork has been maintaining. This is the one non-trivial new file in the diff; see "Is this change appropriate for the core library?" below.tests/dsh/test-dsh-plugin.sh— manifest validation test, mirroringtests/devin/test-devin-plugin.shandtests/kimi/test-plugin-manifest.sh. CI-safe (does not requiredshinstalled).The harness ships a native
skilltool and actx.skillsprovider registry. Every existingSKILL.mdis one-level-deep (<name>/SKILL.md) and kebab-case, so the discovery shape matches the harness's contract without rewriting any skill content. The lowest-friction install is one line in the user'scordis.yml:Is this change appropriate for the core library?
I think yes, and I want to flag the one decision that's a small judgment call:
#1) and the install doc (#2) and the test (#4) are obviously the right pattern — they mirror what the 12 existing runtimes already ship. The work is purely additive; users who don't install dsh see zero behavior change.#3) is the soft call. The fork has been maintaining a per-runtime compat table indocs/compatibility.md; the upstream repo currently doesn't ship one (each runtime's notes live in its plugin manifest and the runtime's README). I'm including the compat matrix because (a) reviewers seem to find a single-table view easier than parsing 12 manifest fields, and (b) it's much cheaper to add now than to retrofit after the 13th runtime lands. If maintainers prefer the per-runtime README pattern, totally happy to drop the compat matrix in a follow-up and let the doc'sSee alsosection point at the per-runtime READMEs instead.On the third CLAUDE.md rule ("fork-derived features don't go upstream"): this PR is a cross-runtime packaging addition, analogous to the 12 already shipping. The fork-specific safety preflight (
safety-check) stays in the fork and is not in this PR's diff. The routing layer is the upstream-portable piece; if a reviewer is concerned about #2111's stance, the answer is "this PR is not asking to re-litigate that — the routing only".What I'm NOT proposing:
skills/is untouched.dsh.bundlefield inpackage.json. Thedsh.bundlefield is the harness's own way to recognize a profile layer, and adding it would be a "core change" to upstream. CodeAnqiang-ma's feat: add DeepSeek Harness (dsh) support #2144 takes that path; this PR takes the narrower manifest-only path. See "What alternatives did you consider?" for the trade-off.What alternatives did you consider?
dsh-superpowers). Considered, and@codeAnqiang-mahas effectively done this with a strong result. Their PR is a self-contained.dsh/plugins/superpowers.js+ thedsh.bundledeclaration inpackage.json. The standalone-plugin route is fine; I considered duplicating it from a separate repo and rejected because routing dsh users through my fork would prevent them from receiving upstream updates. Installing fromobra/superpowers(this PR) is the right install path.JFWaskin/superpowers-safe:fork/deepseek-harness-skills), and it's fine as the worst case. The ask-issue Question: would obra/superpowers accept an opt-in DeepSeek Harness runtime contribution? #2152 asked whether the same routing layer is also welcome upstream; this PR is the ask-PR form of that question.Does this PR contain multiple unrelated changes?
No. Every touched file is required by the porting guide (
docs/porting-to-a-new-harness.md): the manifest, the runtime doc, the compat matrix, and the manifest test. The only soft call is whetherdocs/compatibility.mdbelongs in this PR (see above) — I'm open to splitting that out if it makes the diff easier to review.Existing PRs
Related — open:
@codeAnqiang-ma,feat: add DeepSeek Harness (dsh) support). Independent implementation of the same routing. Their PR is a full plugin (dsh.bundlefield +.dsh/plugins/superpowers.js+ system-prompt section); this PR is narrower (manifest + doc + compat + manifest test, nodsh.bundle, no actual plugin file). Their acceptance run (Let's make a react todo list→ first action isskill("brainstorming")) is the strongest existing evidence that the routing shape works. I have not talked to@codeAnqiang-madirectly — coordination between this PR and theirs belongs in the PR threads where you can see it. If you'd rather go with their shape, I'll close this one.Question: would obra/superpowers accept an opt-in DeepSeek Harness runtime contribution?). The ask-issue. This PR is the ask-PR form of that question.Related — closed:
not_planned). Resolved the question of whethersafety-check(the safety preflight) should go upstream. The closure's stance still stands:safety-checkstays in the fork. This PR is not asking to re-litigate Proposal: opt-in safety-check preflight — interest check before any PR #2111. The fork-specific safety preflight is not in this PR's diff.Hmbown/DeepSeek-TUI, a third-party TUI, notdeepseek-ai/deepseek-harness. None of those apply here.Environment tested
The companion eval scenarios (in the fork) were validated:
I have not run these against a real dsh install — dsh is not on this test host. The strongest existing real-install evidence is in #2144 (
@codeAnqiang-maran the canonical acceptance prompt on macOS 26.5.2 withdeepseek-v4-flashand recorded the full transcript in their PR body; result:skill("brainstorming")was the session's first action, the working directory was still empty when the turn ended).New harness support (required)
Acceptance test:
In a clean dsh session with the manifest installed (via
dsh plugin add, or by adding thecustomSkillDirsline in acordis.ymloverlay), the user messageshould cause the agent to load the
brainstormingskill before any code is written.Transcript: I have not produced a real-session transcript on this host. The strongest existing evidence is in #2144 (full transcript in their PR body, same routing shape, dsh install on macOS 26.5.2 with
deepseek-v4-flash). If maintainers want a transcript from this branch specifically, I'd be happy to follow up in the PR thread — I just need access to a dsh install.The "not a real integration" checklist:
npx skillsruntime shim — it installs as a profile layer.Evaluation
Rigor
superpowers:writing-skillswhile authoring the runtime doc and the eval scenarios, but no skill bodies changed.dsh-prefixed bash, (b)--no-confirmflag-bypass attempts, (c) secret-exfil viacat ~/.aws/credentials, (d)/usr/bin/lsmistaken for a skill gesture, (e) non-kebab-case names like/UsingSuperpowers.Human review
Co-Authored-By:trailer on the commit and the explicit reviewer field above.Thanks for taking a look. Happy to adjust the diff, split out the compat matrix into its own PR, or close this in favor of #2144 if that's the preferred path. Either way I'm grateful for the time.