前言¶
團隊裏用 DSH 跑 Superpowers(spec-driven development)這類重度技能化的方法論時,通常會碰到一個樸素問題:preset 裏每個技能本質都是一次子代理派發,但在默認 harness 下,這些子代理都跑在父會話選中的那個模型上。想在調試這類重任務上用大模型、在寫測試這類輕任務上用便宜模型,沒有一等公民的配置入口,只能自己在技能裏寫死或手動改。
goodjin/dsh-superpowers 就是針對這個痛點做的插件。它把 Superpowers 打包成一個 DSH agent preset,同時在 Settings 裏提供一套「每個技能一個下拉框」的模型路由表,派發哪個技能,子代理就用哪套 provider/model。下面介紹它的能力、安裝方式和配置入口。
這是什麼¶
一句話定位:一個全局插件加上一個可選 preset,把 Superpowers 的 15 個技能和對應 persona 帶進 DSH,並按技能粒度指定子代理模型。維護者是 goodjin,屬於工作流分類。它解決的不是「Superpowers 怎麼寫」,而是「Superpowers 的各個技能該用哪個模型、由誰來決定」。
核心功能¶
插件分成兩半:全局的 plugin 負責 Settings 分區、模型表、工具模塊和自檢;preset 負責可選的運行模式,包含技能、persona 與工具行。安裝一次即可在 preset 選擇器裏看到 Superpowers。功能包括:
- 隨包提供 Superpowers 的 15 個技能,以及讓 agent 真正按六階段方法執行的 persona。
- Settings → Superpowers 分區:每個技能一行,另有「其他子代理」行,覆蓋未綁定技能的派發。
- 統一的派發工具
delegate_skill:讀取模型表,把子代理啓動在對應模型上,並把子會話命名爲技能名。 - 子代理的 composer 上會只讀地顯示它實際運行的模型。
- 宿主行(host row)按構造方式容錯:即使插件完全失敗,DSH 也能正常啓動並保持可用。
模型解析順序是:先取技能自身的 pin,再取「其他子代理」行的默認 provider/model,都沒有就繼承父會話的路由。技能行上的「跟隨默認」會清掉該技能的 pin,但與「複用主會話模型」不是一回事——後者即使配置了默認 pair 也會被尊重,它存成一個 sentinel 並省略 agentOptions,使子代理沿用父會話模型。
安裝與啓用¶
該包不在 npm 上,直接從倉庫安裝:
dsh plugin --profile web add goodjin/dsh-superpowers
安裝完成後,preset 選擇器裏會出現 Superpowers。需要把它設爲默認 preset 時,配置如下:
agent-presets:
default: superpowers
否則只在 UI 的 preset 選擇器裏手動選擇即可。
在 DSH 0.2.x 上,preset 作爲聲明行隨包一起發佈,因此裝完即用;舊版本從 ~/.dsh/.agent-presets/superpowers/ 讀取,0.2.x 沒有這個目錄。升級時重跑同一條安裝命令即可,plugin 半與 preset 半會一起更新,不存在需要手動同步的複製目錄。
配置模型路由¶
打開 Settings → Superpowers,每個技能一行,選項在下一次派發時讀取,無需重啓,也不需要改 preset。路由存在 profile patch 的 superpowers-delegation-settings loader 行裏(DSH 0.2.x 的插件配置放在這裏,而不是 settings.yaml),因此也可以直接改 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
升級前寫在 settings.yaml 裏的值會在首次啓動時自動遷移,遷移只填充尚未設置的字段,不會覆蓋之後的手改。
驗證安裝¶
裝完或升級後建議跑一條自檢:
node ~/.dsh/profiles/web/node_modules/@goodjin2/dsh-superpowers/scripts/check.mjs 3080 <token>
token 來自打開 DSH 時所用的 URL,每次重啓都會變化。檢查會逐項報告插件對宿主側各項依賴的探測結果。關鍵行是 route.exists:它直接向瀏覽器通道發 POST。當宿主半靜默註冊失敗時(即 v0.2.1 修復的那個 bug),路由行看起來仍是 active,日誌裏也沒有輸出,只有這條探測能看到 404,因此不要跳過它。若檢查報告失敗,條目名會指出是哪個依賴發生了遷移。
升級與兼容性¶
DSH 沒有 per-plugin 版本鎖定,插件在啓動時從 profile 解析。若某次 DSH 升級移動了內部 API,不會產生報錯——服務照常啓動,功能卻悄悄失效。這正是該插件設計上要能承受、而不是要杜絕的失效模式。
支持的 DSH 版本爲 >=0.1.5-rc.2 <0.3.0(在 peerDependencies 的 @deepseek-ai/dsh-tools 中聲明)。超出該範圍時,Desktop 插件面板會標記不兼容並阻止激活。其餘三項保護:
- 宿主行被包裹,無法阻止 DSH 啓動。故障注入驗證過:即使該行拋異常,DSH 仍能啓動,54 個 client entries 照常掛載,插件降級爲「不提供 per-skill pins」。
- Settings 的 Superpowers 分區頂部顯示自檢行,依賴齊全時爲綠色,否則爲紅色並逐項說明原因。
- 客戶端失敗由宿主插件加載器按條目隔離,某條 client 出錯只會顯示 banner,其餘 UI 仍可用。
目錄結構¶
lib/index.js # 宿主行:settings 命名空間、瀏覽器通道、自檢端點
lib/client.js # 瀏覽器行:Settings 分區、composer 模型標籤
lib/skill-delegation.js # delegate_skill 工具
lib/settings-schema.js # 存儲的 settings 形狀與路由解析
cordis.patch.yml # 插件新增的兩條 composition rows
preset/ # agent preset 與 15 個 Superpowers 技能
scripts/check.mjs # 升級後兼容性檢查
scripts/test.mjs # 加載安全性與降級測試
適用場景與注意¶
適合已經採用或打算採用 Superpowers 六階段方法、且希望按技能區分模型成本與能力的 DSH 工作流使用者。需要注意,插件以當前 dsh 進程的權限運行,安裝前建議先閱讀源碼與許可證。內置技能來自 obra/superpowers,兩者均爲 MIT,倉庫內的 THIRD_PARTY_NOTICES.md 有說明。受支持的 DSH 版本範圍有限,升級 DSH 後請先運行 check.mjs,而不是等到功能靜默失效再排查。
小結¶
這個插件的價值不在多,而在把一個細但真實的需求做好:讓 Superpowers 的 15 個技能各自跑在合適的模型上,同時保證插件自身失敗不會拖垮 DSH。目錄頁見 https://www.skillhub.cn/plugins/goodjin/dsh-superpowers ,源碼見 https://github.com/goodjin/dsh-superpowers 。