dsh 怎么关闭插件而不卸载?DSH plugin 禁用与卸载的区别、配置覆盖与 DeepSeek Harness 恢复方法
dsh 没有独立的「关闭插件」命令:dsh plugin 只转发 pnpm 的动词(add / remove / update / why)。想临时禁用插件,推荐用 profile 的 cordis.patch.yml 覆盖该插件的行(后层覆盖前层,官方文档明确支持用户覆盖);想彻底删除才用 dsh plugin remove——它会把依赖和配置层一起删掉。
先分清:关闭 vs 卸载
「关闭」和「卸载」对 dsh 来说是两件不同的事,别混用。 DSH 的每个 profile 由两部分组成:package.json(外置插件依赖)+ dsh.profile(按顺序排列的 bundles 列表,决定哪些配置层生效)(来源)。
| 操作 | 依赖(package.json) | 配置层(dsh.profile.bundles) | 什么时候用 |
|---|---|---|---|
| 关闭/禁用 | 保留 | 不生效 | 暂时不用、想留着插件 |
卸载(dsh plugin remove) | 删除 | 删除 | 确定不用、清空间、排冲突 |
官方对 dsh plugin remove 的定义是:同时移除依赖和配置层(来源)。所以「关」和「删」的后果完全不同——关闭留了后悔药,卸载没有。
禁用插件的两种真实做法
DSH 的配置是按层组合的:bundle 层 → profile 的 cordis.patch.yml → 全局的 $DSH_HOME/cordis.patch.yml → --patch 覆盖,后层覆盖前层。 基于这个机制,禁用一个插件有两种做法(来源):
- 推荐:用 cordis.patch.yml 覆盖插件的行。官方明确说用户可以在自己的 cordis.patch.yml 里覆盖 bundle 的行、而不改动插件包本身。给目标插件所在的行写覆盖(把它的配置置空或改成无操作),该插件的实际行为就被停掉,依赖照常保留。
- 备选:从 dsh.profile.bundles 摘除条目。把该 bundle 的名字从 bundles 列表里去掉,配置层不再应用,但依赖还留在 package.json。注意官方提醒「dsh.profile 由 dsh plugin 维护、不手写」——手动编辑要克制,改完用
--dump-config验证。
操作步骤(以 cordis.patch.yml 覆盖为例):
- 打开 profile 目录下的
cordis.patch.yml($DSH_HOME/profiles/web/cordis.patch.yml)。 - 找到要禁用的插件行,写入覆盖配置(具体写法取决于插件定义的行;一般把它的配置置空即可)。
- 验证组合结果:
确认该插件的层已不再生效。bash
dsh --profile web --dump-config - 刷新 Web UI(或重启
dsh web)让新配置生效。
恢复与选择建议
恢复禁用与操作方向相反:撤销覆盖或加回 bundle,然后验证。 两个实用建议:
- 恢复方法:删掉 cordis.patch.yml 里对应覆盖行(做法一),或把 bundle 名加回 dsh.profile.bundles(做法二),再
--dump-config确认层生效、刷新页面即可。 - 什么时候直接卸载:确定不再用、要清理磁盘空间、或怀疑插件与别的插件冲突时,别留着——直接卸载:
bash
dsh plugin --profile web remove 包名 - 想可视化操作:图形化卸载与残留清理走 Web UI 的「设置 → 插件中心」——即社区插件市场 DSH Plugin Hub,比命令行直观。

注意事项
- 没有 disable 命令,关闭插件 = 配置层停用,不是依赖删除(来源)。
dsh plugin remove连依赖带配置层一起删,卸载前想清楚。- 覆盖插件行是官方支持的禁用方式,比手改 dsh.profile.bundles 更稳妥。
- 改完任何配置都用
dsh --profile <name> --dump-config验证组合结果。 - 禁用后插件依赖仍在,磁盘空间不会被释放;要省空间就卸载。
- 拿不准的插件先关不删,确认不需要再通过 DSH Plugin Hub 或命令行卸载。
常见问题
没有独立的 disable 命令。dsh plugin 子命令把参数原样转发给 pnpm,官方定义的动词是 add、remove、update、why 等(源码确认)。想临时停用走配置覆盖或摘除 bundles;想彻底删除用 dsh plugin remove。
关闭 = 插件的配置层不再生效、但依赖还留在 profile 里,随时能恢复;卸载 = 依赖和配置层一起删除(dsh plugin remove 两者都删)。拿不准就先关不删。
推荐用 profile 的 cordis.patch.yml 覆盖该插件的行——官方明确用户可以覆盖 bundle 的行而不改动插件包本身,后层覆盖前层;或从 dsh.profile.bundles 里摘除该 bundle 的条目(依赖保留、层不生效)。改完用 dsh --profile web --dump-config 验证层状态。
撤销 cordis.patch.yml 里的覆盖行,或把 bundle 名加回 dsh.profile.bundles,刷新/重启 Web UI 即恢复。恢复后用 --dump-config 确认该插件的层重新生效。
确定不再用、需要清理空间、或怀疑插件与别的插件冲突时,直接 dsh plugin remove 卸载;只是暂时影响使用、还想留着它,就先关闭。图形化卸载可走 DSH Plugin Hub 的「设置 → 插件中心」。
来源
- DeepSeek Harness 官方教程 - 打包与安装插件(profile 层顺序与覆盖)· deepseek-ai
- DeepSeek Harness 源码 - CLI 参数定义(plugin 子命令动词)· deepseek-ai