向 dsh 提供 obra/superpowers 技能目录,并将其 using-superpowers 引导作为持久、压缩安全的系统提示区块注入。
安装
# npm 包(预构建)
dsh plugin --profile web add @dennisrongo/dsh-superpowers
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:dennisrongo/dsh-plugins#path:/plugins/dsh-superpowers
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
该插件的 README 只有英文版本。
npm: @dennisrongo/dsh-superpowers ·
source: dennisrongo/dsh-plugins
Mind the scope. The unscoped
dsh-superpowerson npm is an unrelated plugin by another author, soadd dsh-superpowersfetches theirs, not this one.
Injects the Superpowers methodology bootstrap
(skills/using-superpowers/SKILL.md) into every dsh agent's system prompt as an ordered,
persistent section — and serves the 14 Superpowers skills to dsh's skill catalog, so
they work on a machine that has never cloned anything.
Upstream harnesses deliver the bootstrap via a SessionStart hook that must re-fire on
startup|clear|compact. dsh has no hook shell, but its system prompt is a layered, ordered
section registry that is reassembled after compaction — so a single registered section
covers all three upstream trigger points for the life of the session, with no gap between
session start and the first compaction.
Both halves are independent: neither a missing clone nor a profile without a skills service can take the other down, and neither stops dsh booting.
Where the skills come from
The plugin serves whichever it finds first — your clone if you have one, otherwise a pinned snapshot bundled with the package:
superpowersRoot config → SUPERPOWERS_ROOT → probe of ~/… → bundled vendor/ snapshot
A real clone always wins, so git pull keeps working exactly as before. The snapshot is
only the floor that makes a fresh install work — without it, a machine with no clone gets a
silently empty catalog, since dsh reports a missing skills root as an empty list rather than
an error.
The bootstrap prose is vendored only in that snapshot
(obra/superpowers@b36e082, MIT © 2025 Jesse Vincent — see vendor/PROVENANCE). When the
plugin resolves your clone instead, nothing from upstream is vendored at all.
Already using
link-superpowers-skills.mjs? SetskillProvider: false, or the same 14 skills are listed twice — once by the junctions, once by this provider.
Updating the plugin
dsh plugin --profile <name> outdated
dsh plugin --profile <name> update @dennisrongo/dsh-superpowers
dsh plugin forwards to pnpm. This plugin is host-only, so a profile restart is required
— the section is read in apply(), and a browser refresh will not pick it up.
That updates the adapter. The methodology itself lives in your Superpowers clone and updates separately:
Updating from upstream
cd <your superpowers clone> && git pull
Two halves, and they are updated differently:
| Half | How it is consumed | After a pull |
|---|---|---|
| The bootstrap prompt section | read from <root>/skills/using-superpowers/SKILL.md at profile start |
restart the profile (read happens in apply(), not per session) |
| The skills catalog | discovered by dsh from <agentsHome>/skills |
nothing, if those entries are links — see below |
Link the clone's skills in once, and a pull updates them in place:
node scripts/link-superpowers-skills.mjs # from the repo root
node scripts/link-superpowers-skills.mjs --dry-run # preview
node scripts/link-superpowers-skills.mjs --restore # undo, restoring saved copies
Junctions on Windows, directory symlinks on macOS/Linux. Real directories already in place
are moved to <agentsHome>/skills-backup-superpowers before being replaced, so it is
reversible. Re-run it after a pull that adds a new upstream skill.
Locating the clone
Resolution order, first hit wins:
superpowersRootin the profile'scordis.patch.yml- the
SUPERPOWERS_ROOTenvironment variable - a probe of common clone locations under your home directory —
~/superpowers,~/src,~/code,~/dev,~/git,~/repos,~/Projects,~/Documents,~/Documents/GitHub, all derived fromhomedir()so they work on any platform - the bundled
vendor/snapshot, which is always present
Because step 4 always succeeds, you get the bootstrap and the skills with no
configuration at all. Set superpowersRoot when you want your own clone to be authoritative
— it takes precedence, and then git pull (plus a profile restart) is the whole update
path. The probe list is only a guess about where you keep clones.
The old "no superpowers clone found" warning is now reachable only when a root you configured explicitly is wrong.
Install (profile-level)
# <profile>/cordis.patch.yml — add one row
- id: superpowers
name: '@dennisrongo/dsh-superpowers'
config:
superpowersRoot: /absolute/path/to/superpowers
with pnpm add "file:/absolute/path/to/dsh-plugins/plugins/dsh-superpowers" in the profile,
or straight from GitHub:
dsh plugin --profile <name> add "github:dennisrongo/dsh-plugins#path:/plugins/dsh-superpowers"
The folder is plugins/dsh-superpowers but the package is @dennisrongo/dsh-superpowers, so
it installs under the scope. Mind the difference: the unscoped dsh-superpowers on npm is
an unrelated plugin by another author, so add dsh-superpowers fetches theirs, not this one.
Config
| key | default | meaning |
|---|---|---|
superpowersRoot |
"" → resolved (see above) |
repo root containing skills/using-superpowers/SKILL.md |
order |
-50 |
prompt section order (persona is 0; we sit before it) |
enabled |
true |
master switch; false silences every section and the skill provider |
askWithOptions |
true |
register the "offer choices as choices" section (below) |
askWithOptionsOrder |
-45 |
order for that section |
skillProvider |
true |
serve the skills to dsh's catalog; set false if you deliver them another way |
Also: "offer choices as choices"
A second, independent prompt section — hand-written here, nothing to do with the Superpowers clone, and registered whether or not that clone exists.
dsh can already render a real picker. ask_user_question accepts options[]
with a label and a one-line description, plus multi_select, and the shipped
question UI turns that into a radiogroup or a checkbox group. What it cannot do
is turn prose into controls: a structured surface exists only for an actual tool
call, and a tool call can only happen during a turn. So an answer that ends
"A or B?" in markdown stays markdown forever, and you pay for it by typing a
reply that the model then has to guess the meaning of.
This section asks the model to reach for the tool in exactly that moment — with
a recommended option first, and multi_select when more than one can apply. It
deliberately stands down in plan mode, where dsh's own rules make
exit_plan_mode the single interaction and say so in terms that override later
guidance.
Set askWithOptions: false to drop it without touching the bootstrap.
Tests
pnpm test # offline, no harness, no clone needed
Every failure mode in this plugin is silent by design — a missing clone, a bad root,
enabled: false, an absent skills service and a malformed skill bundle all register nothing
and let dsh boot normally. So a regression breaks nothing visibly; the bootstrap and the
catalog just stop reaching the model.
35 checks pin section identity and order, frontmatter stripping, the resolution precedence
(config > env > probe > vendored snapshot), the non-fatal warning path, the skill-provider
contract, and that registration goes through ctx.effect.
test/sabotage.mjs then breaks lib/index.js 16 different ways and requires the suite to go
red each time — a check that has never failed is decoration. Two checks escaped the first
run and were rewritten; see AGENTS.md.
Notes
- The bootstrap body has its YAML frontmatter stripped — the model needs the behavioural
mandate, not the trigger metadata. If upstream restructures
SKILL.md, that regex inlib/index.jsis the thing to check; failure is non-fatal and logs[dsh-superpowers] cannot read …, so watch profile stderr after a pull. @deepseek-ai/schemasteryand@deepseek-ai/cordisare peers, supplied by your dsh install. When this package is junctioned into a profile it resolves them through its ownnode_modules/@deepseek-ai/*— runscripts/dev-link.ps1to create those, or the harness fails to load the plugin withERR_MODULE_NOT_FOUND.
About the author
Plugins and walkthroughs on YouTube @codingmenace — I build AI coding tools in public, including DeepSeek Harness itself. More at dennisrongo.com.
链接
同类插件
zhu1090093659/dsh-web#packages/dsh-skill-explorer★ 9048
技能中心:按来源分级浏览已加载的全部 skill,启用/禁用模型调用、创建新技能、删除进可恢复回收站。
QingYunA/answer-me-with-html★ 3942
把回答做成一页可视化 HTML:模型只写简短的 Markdown 草稿,随包附带的 `am` 命令行生成页面,支持流程图、时序图、树、时间线、ER 图、表格和提示框。
GanyuanRan/Aegis★ 1368
面向编码 Agent 的软件工程方法包,提供基线优先规划、系统化调试、提示词卫生、完成前验证,以及修复/退役双轨跟踪技能。
superdesigndev/superdesign-skill★ 853
在 Superdesign 画布上做 UI 与营销图的设计技能:先读代码库拿上下文、抽取现有设计系统,再通过 Superdesign CLI 生成并迭代可分支的设计稿、流程页与可复用组件。
linhay/harmony-next.skills★ 363
为 DeepSeek Harness 提供 HarmonyOS NEXT 技能包、离线 API 参考及 DevEco、HDC 与模拟器自动化指南。
dhicoc/dsh-reverse-skill★ 269
完整 reverse-skill(85 个 SKILL.md)的 DeepSeek Harness 插件:逆向工程、授权渗透测试与安全研究的技能路由包。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。