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 目錄頁。

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

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

小夜