Introduction¶
When teams use DSH to run methodologies like Superpowers (spec-driven development) that are heavy on skills, they often encounter a common problem: each skill in the preset is essentially a dispatch to a child agent. However, under the default harness, these child agents all run on the model selected by the parent session. To use large models for debugging such heavy tasks and cheap models for writing tests (light tasks), there is no native configuration option; one can only hardcode it within the skills or manually edit it.
goodjin/dsh-superpowers is a plugin designed to address this pain point. It packages Superpowers into a DSH agent preset and provides a model routing table with “one dropdown per skill” in the Settings. Which skill is dispatched, the child agent uses which set of provider/model. Below introduces its capabilities, installation method, and configuration entry.
What is this¶
In a nutshell: A global plugin plus an optional preset that brings Superpowers’ 15 skills and corresponding personas into DSH, specifying child agent models by skill granularity. Maintained by goodjin, it belongs to the workflow category. It does not solve “how to write Superpowers,” but rather “which model each Superpower skill should use and who decides.”
Core Features¶
The plugin consists of two parts: the global plugin handles the Settings partition, model table, tool modules, and self-check; the preset handles optional runtime modes, including skills, personas, and tool rows. Install once and you can see Superpowers in the preset selector. Features include:
- Comes with Superpowers’ 15 skills and personas that make the agent truly execute according to the six-stage method.
- Settings → Superpowers partition: One line per skill, plus an “Other Child Agents” row to cover dispatch for unbound skills.
- Unified dispatch tool
delegate_skill: reads the model table, starts the child agent on the corresponding model, and names the child session after the skill name. - The composer of the child agent will display (read-only) the actual model it is running.
- The host row is fault-tolerant by construction: even if the plugin fails completely, DSH can still start normally and remain usable.
The model resolution order is: first take the skill’s own pin, then take the “Other Child Agents” row’s default provider/model. If neither exists, inherit the parent session’s routing. “Follow Default” on the skill row clears that skill’s pin, but it is not the same as “Reuse Main Session Model”—the latter is respected even if a default pair is configured; it stores a sentinel and omits agentOptions, causing the child agent to use the parent session model.
Installation and Activation¶
This package is not on npm, install directly from the repo:
dsh plugin --profile web add goodjin/dsh-superpowers
After installation, Superpowers will appear in the preset selector. To set it as the default preset, configure as follows:
agent-presets:
default: superpowers
Otherwise, just manually select it in the UI preset selector.
On DSH 0.2.x, presets are published as declaration rows with the package, so it is ready to use after installation; older versions read from ~/.dsh/.agent-presets/superpowers/, while 0.2.x does not have this directory. When upgrading, just rerun the same installation command; the plugin half and preset half will update together, so there is no need to manually sync a copied directory.
Configuring Model Routing¶
Open Settings → Superpowers, one line per skill, options are read on the next dispatch, no restart needed, and no need to change the preset. Routing is stored in the superpowers-delegation-settings loader row of the profile patch (DSH 0.2.x plugin configs are placed here, not settings.yaml), so you can also directly edit cordis.patch.yml:
- id: superpowers-delegation-settings
name: "@goodjin2/dsh-superpowers"
config:
defaultProvider: minimax-cn
defaultModel: MiniMax-M3.1-Flash-Preview
skillModels:
verification-before-completion:
provider: xiaomi-token-plan-cn
model: mimo-v2.6-pro
Values written in settings.yaml before upgrading will be automatically migrated on the first start; migration only fills in fields not yet set and will not overwrite manual edits made later.
Verifying Installation¶
After installation or upgrade, it is recommended to run a self-check:
node ~/.dsh/profiles/web/node_modules/@goodjin2/dsh-superpowers/scripts/check.mjs 3080 <token>
The token comes from the URL used when opening DSH, changing with every restart. The check reports the plugin’s detection results for various host-side dependencies item by item. The key line is route.exists: it sends a POST directly to the browser channel. When the host-side silent registration fails (the bug fixed in v0.2.1), the route row still looks active and there is no output in the logs. Only this probe can see the 404, so don’t skip it. If the check reports failure, the entry name will indicate which dependency failed.
Upgrading and Compatibility¶
DSH has no per-plugin version locking; plugins are parsed from the profile at startup. If a DSH upgrade moves internal APIs, no error will be generated—the service starts normally, but functionality quietly fails. This is the failure mode the plugin is designed to withstand, not to prevent.
Supported DSH versions are >=0.1.5-rc.2 <0.3.0 (declared in @deepseek-ai/dsh-tools’s peerDependencies). When outside this range, the Desktop plugin panel will mark it as incompatible and prevent activation. The other three protections:
- The host row is wrapped, so it cannot prevent DSH from starting. Fault injection verified: even if that row throws an exception, DSH can still start, 54 client entries mount normally, and the plugin degrades to “not providing per-skill pins.”
- The top of the Superpowers partition in Settings shows a self-check row; it is green when dependencies are complete, otherwise red and explains the reasons item by item.
- Client failures are isolated by the host plugin loader per entry; if a client fails, only a banner is displayed, and the rest of the UI remains usable.
Directory Structure¶
lib/index.js # Host row: settings namespace, browser channel, self-check endpoint
lib/client.js # Browser row: Settings partition, composer model tags
lib/skill-delegation.js # delegate_skill tool
lib/settings-schema.js # Stored settings shape and routing parsing
cordis.patch.yml # Two composition rows added by the plugin
preset/ # agent preset and 15 Superpowers skills
scripts/check.mjs # Compatibility check after upgrade
scripts/test.mjs # Loading safety and degradation tests
Use Cases and Notes¶
Suitable for DSH workflow users who have adopted or intend to adopt the Superpowers six-stage method and want to distinguish model costs and capabilities by skill. Please note that the plugin runs with the permissions of the current dsh process; it is recommended to read the source code and license before installation. Built-in skills come from obra/superpowers, both are MIT, explained in THIRD_PARTY_NOTICES.md in the repo. The supported DSH version range is limited. After upgrading DSH, please run check.mjs first instead of waiting for functionality to fail silently before troubleshooting.
Summary¶
The value of this plugin lies not in quantity, but in doing a small but real need well: letting Superpowers’ 15 skills run on appropriate models respectively, while ensuring that a plugin failure itself doesn’t bring down DSH. See the directory page at https://www.skillhub.cn/plugins/goodjin/dsh-superpowers , and source code at https://github.com/goodjin/dsh-superpowers .