dsh-tool-skill-manager:按项目隔离 DSH 工具与技能

前言

在 DeepSeek Harness(DSH)里,Profile 级别的 disabledTools、disabledSkills 会作用于所有会话。若你在同一台机器上同时维护多个代码仓库——有的项目需要关掉天气类工具,有的又要单独启用某技能——只改全局列表会影响其它项目,也不适合把偏好写进每个仓库的 Git 历史。

下面介绍的 工具/技能管理(@local/tool-skill-manager)在保留 Profile 默认策略的前提下,为每个项目根目录单独配置工具的强制开/关与技能的继承或覆盖。需要说明的是:第三方插件仍由 DSH 在启动时一次性组合,本插件不按项目卸载插件;按项目扩展能力时,应把工具/技能注册到项目自身的技能目录或 Agent 预设中。

这是什么

维护者 ZeaoZhang 在 GitHub 开源的 DSH bundle(仓库 ZeaoZhang/dsh-tool-skill-manager),社区目录分类为 admin-security。它解决的是:在同一 Profile 下,不同 Git 项目边界内对工具名、技能名做独立开关,且覆盖项保存在本机 Profile patch 中,不进入项目仓库。

项目边界与 dsh-skill-filesystem 一致:从会话工作目录向上找最近的含 .git 的祖先目录;找不到则退回工作目录本身。

核心功能

Profile 默认与项目覆盖

  • disabledTools / disabledSkills:全局禁用列表,作为各项目的默认基线。
  • projects.<绝对路径>.tools.<名称> / projects.<绝对路径>.skills.<名称>:省略表示继承;true 强制启用;false 强制禁用。

设置页

路径:设置 → 插件 → 工具/技能管理(英文界面为 Tools & Skills)。

  • Scope selector:在 Profile defaults 与已登记的项目路径之间切换;Add project… 登记绝对路径,Remove project 删除该项目的覆盖。
  • Tools / Skills 分 tab:搜索、逐行开关、批量启用/禁用;在项目 scope 下还有三态:继承 / 强制开 / 强制关。
  • Skills 额外展示来源与调用策略,项目 scope 下提供 Keep only this 等操作。

会话在每次 working-directory/change 时重新计算策略:把工作目录切到另一个 checkout,工具限制与技能 overlay 会随之切换。

enforcement 机制

  • 工具:有效策略落实为 per-agent 的 tools.restrict({ deny });插件注册工具后,被禁用的名称不会进入模型可见工具集。
  • 技能:per-agent provider 将禁用项 overlay 为不可调用(目录仍稳定),skill 工具 guard 拒绝加载这些技能。

明确不在范围内的能力

  • 仅管理全局注册的工具列表;由 preset 或其它插件注册的 agent-scoped 工具由各自组合逻辑管理。
  • 技能来源包括 Harness 工作区目录以及项目下的 <project>/.dsh/skills、<project>/.agents/skills。
  • Profile 插件在启动时组合, intentionally 不在本插件管理范围内。

安装与启用

在活跃 Profile 的配置中增加条目(id 须唯一且可被 Settings 的 configEditor 唯一定址,否则无法持久化写入):

- id: tool-skill-manager
  name: '@local/tool-skill-manager'
  config:
    disabledTools: []      # profile default
    disabledSkills: []
    projects: {}           # per-project overrides

package.json 中声明的 DSH 引擎范围为 >=0.1.2-rc.1 <0.3.0;当前 bundle 版本为 0.3.0,许可证 MIT。安装前请自行核对仓库源码与许可证;插件以当前 DSH 进程权限运行。

典型配置示例

全局禁用 weather,并在某一项目路径下对工具和技能做覆盖:

- id: tool-skill-manager
  name: '@local/tool-skill-manager'
  config:
    disabledTools: [weather]
    disabledSkills: []
    projects:
      /Users/me/code/my-app:
        tools:
          weather: true        # force this tool on for this project
          code_interpreter: false
        skills:
          deploy: false

覆盖项是本机 Profile patch 的一部分,不会随项目 Git 仓库分发;换机器或换 Profile 需单独配置。

适用场景与注意

适合:在同一 DSH Profile 下多仓库并行开发,需要对敏感工具(如联网、解释器)或部署类技能做项目级白名单/黑名单,又不想改全局 Profile 或污染仓库。

注意:

  1. 插件不能替代「设置 → 插件」里的插件安装/卸载;按项目加能力请用项目技能目录或 Agent 预设。
  2. 项目路径在配置里写绝对路径;在设置页用 Add project… 登记,避免手写错误。
  3. 社区目录 skillhub.cn 上的插件页 与 GitHub 为独立信息源;目录站点与 DeepSeek / 幻方无官方从属关系,安装与配置以仓库 README 为准。

结尾

经过上面的步骤,你可以在 Profile 默认策略之上,为每个 Git 项目单独继承或强制开关工具与技能,并在切换工作目录时自动切换生效范围。进一步字段说明与限制见 GitHub README;社区索引见 SkillHub 目录页。

羽毛球分组比赛记分
小程序二维码

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

小夜