dsh-skill-toggles:按分组管理 DSH 技能开关

前言

在 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。

核心机制:黑名单与分组

生效规则可以概括为:

  1. 默认全开:未出现在任何「启用分组」黑名单里的技能,保持可用。
  2. 分组:内置默认分组(初始全开、可编辑、不可删除);可新建、重命名、删除自定义分组。每组有自己的黑名单与「启用」开关;切换某组的启用状态,即整组规则生效或失效。
  3. 合并黑名单:当前 生效黑名单 = 所有「启用中」分组的黑名单的并集。某技能只要被任一启用分组禁用,即被过滤。
  4. 冲突提示:技能列表里,若某技能被其它启用分组禁用,会显示「被「××」禁用」徽标。

过滤在实现上通过 per-agent 影子 provider(skill-toggles-filter)完成:list() 只发射「生效黑名单 ∧ 真实存在」的条目,并将 invocation 改写为不可调用;启用的技能不重发,保留原 provider 的路径与正文加载行为。

界面与 Agent 工具

面板操作

  1. 打开聊天输入框工具条的 「技能」 按钮,左侧出现悬浮面板。
  2. 在 分组 区域选择或管理分组;在当前选中分组下,列表中每行开关只作用于该组黑名单。
  3. 技能列表支持搜索,并按 来源分节(插件包 / 用户 / 项目 / 自定义 / 其他,可折叠);每节提供「全部禁用 / 全部启用」。

Agent 可调用的工具

以下工具均支持可选 group 参数,缺省为默认分组:

  • skill_toggles_list
  • skill_toggles_disable / skill_toggles_enable
  • skill_toggles_enable_all / skill_toggles_disable_all
  • skill_toggles_source_set
  • skill_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 扁平文档会在加载时自动迁移进默认分组。

典型用法场景

  1. 调试单个 Agent:新建分组「debug」,只在该组黑名单里关闭干扰较大的技能,启用该分组;其它分组保持默认全开。
  2. 按来源批量收紧:在面板中展开「插件包」或「项目」分节,对该节执行「全部禁用」,再逐条打开需要的技能。
  3. 自动化:在 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜