前言¶
在 DeepSeek Harness(DSH)里,技能(skills)会随插件、用户目录和项目配置不断增多。开发或调试时,往往需要临时关掉一部分技能,避免模型在 <available_skills> 里看到过多条目,或误触发不该用的 skill 工具。若只靠删文件或改配置,切换成本高,也不便于在不同场景之间复用同一套「允许 / 禁止」策略。
下面介绍的 dsh-skill-toggles(维护者 xiake-1,社区分类 admin-security)专门做 skills 的启用与禁用:采用 黑名单语义 + 分组。所有技能默认可用;只有被「当前启用中的分组」显式写入黑名单的技能才会被过滤。全新安装、状态文件缺失或损坏时,等价于「全部启用」,不会出现装上后技能列表瞬间清空的情况。插件只管 skills,不做 MCP 开关。
这是什么¶
dsh-skill-toggles 是 DSH 插件市场中的技能开关管理器(Skill toggles manager)。它在聊天界面提供「技能」按钮与左侧悬浮面板,并在 Agent 层注册影子 skill provider,使禁用对输入框 / 技能菜单、模型技能目录和 skill 工具三类路径生效(生效时机见下文)。源码与说明见 GitHub 仓库,目录页见 SkillHub。
核心机制:黑名单与分组¶
生效规则可以概括为:
- 默认全开:未出现在任何「启用分组」黑名单里的技能,保持可用。
- 分组:内置默认分组(初始全开、可编辑、不可删除);可新建、重命名、删除自定义分组。每组有自己的黑名单与「启用」开关;切换某组的启用状态,即整组规则生效或失效。
- 合并黑名单:当前 生效黑名单 = 所有「启用中」分组的黑名单的并集。某技能只要被任一启用分组禁用,即被过滤。
- 冲突提示:技能列表里,若某技能被其它启用分组禁用,会显示「被「××」禁用」徽标。
过滤在实现上通过 per-agent 影子 provider(skill-toggles-filter)完成:list() 只发射「生效黑名单 ∧ 真实存在」的条目,并将 invocation 改写为不可调用;启用的技能不重发,保留原 provider 的路径与正文加载行为。
界面与 Agent 工具¶
面板操作¶
- 打开聊天输入框工具条的 「技能」 按钮,左侧出现悬浮面板。
- 在 分组 区域选择或管理分组;在当前选中分组下,列表中每行开关只作用于该组黑名单。
- 技能列表支持搜索,并按 来源分节(插件包 / 用户 / 项目 / 自定义 / 其他,可折叠);每节提供「全部禁用 / 全部启用」。
Agent 可调用的工具¶
以下工具均支持可选 group 参数,缺省为默认分组:
skill_toggles_listskill_toggles_disable/skill_toggles_enableskill_toggles_enable_all/skill_toggles_disable_allskill_toggles_source_setskill_toggles_group_create/skill_toggles_group_delete/skill_toggles_group_set_active
改动何时生效¶
| 路径 | 生效时机 |
|---|---|
输入框 / 技能菜单 |
下一次打开菜单(亚秒级) |
模型 <available_skills> 目录 |
下一条消息(宿主「持久投影」机制,任何插件都如此) |
skill 工具 |
立即拒绝被禁用的技能 |
安装与卸载¶
安装后需重启 DSH(浏览器半重新加载页面即可)。
插件市场:在 dshmarket 中搜索 dsh-skill-toggles,一键安装。
npm:
dsh plugin --profile desktop add dsh-skill-toggles
本地源码(将路径换成本仓库的绝对路径):
dsh plugin --profile desktop add file:<本仓库绝对路径>
卸载:
dsh plugin --profile desktop remove dsh-skill-toggles
卸载时 postuninstall 会自动删除状态目录 <DSH_HOME>/dsh-skill-toggles/。
状态存储(便于排查)¶
状态文件(v2)位于 <DSH_HOME>/dsh-skill-toggles/state.json,形如 { version:2, groups:[{id,name,disabled[]}], activeGroups[] };采用原子写入;损坏时回退为「全部启用」。旧版 v1 扁平文档会在加载时自动迁移进默认分组。
典型用法场景¶
- 调试单个 Agent:新建分组「debug」,只在该组黑名单里关闭干扰较大的技能,启用该分组;其它分组保持默认全开。
- 按来源批量收紧:在面板中展开「插件包」或「项目」分节,对该节执行「全部禁用」,再逐条打开需要的技能。
- 自动化:在 Agent 对话中调用
skill_toggles_group_set_active或skill_toggles_disable,配合group参数切换不同工作 profile。
适用场景与注意事项¶
适合:需要在同一 DSH 环境中频繁切换「哪些 skill 对模型和用户可见、可调用」的开发者;希望用分组保存多套黑名单策略的团队。
环境与兼容(以仓库 package.json 为准):Node >=18;DSH 声明为 >=0.2.0-rc.1 <0.3.0,兼容记录含 0.2.0-rc.2。安装前请自行查看源码与 MIT 许可证,并理解插件以当前 DSH 进程权限运行。
已知限制(README 原文):
- Agent 未激活的冷会话由 preset 常驻 scope 供数,其
/菜单可能仍显示已禁用技能,直到会话被激活(模型目录与skill工具不受影响)。 - 与旧插件 dsh-skills-mcp-group-manager 互斥(两个影子 provider 叠加语义不可控),启动时检测到会打警告。
- 重装或升级已安装 bundle 后,宿主半可能需要重启进程才换代码(Node 模块缓存);浏览器半无此问题。
DSH 生态强调「一切皆插件」;SkillHub 为社区目录,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-skill-toggles 用「默认全开 + 分组黑名单并集」管理 skills,并提供面板与 Agent 工具两套入口,避免误配导致技能全灭。若你需要在 admin-security 类能力下精细控制技能暴露面,可从目录页或 GitHub 安装试用。
- 目录页:https://www.skillhub.cn/plugins/xiake-1/dsh-skill-toggles
- GitHub:https://github.com/xiake-1/dsh-skill-toggles