用 dsh-skill-manager 在 DeepSeek Harness 設置頁統一管理 AI 技能

前言

DeepSeek Harness(dsh)把智能體能力拆成插件和技能兩層。插件改運行時,技能則是一份帶 YAML frontmatter 的 SKILL.md:模型或用戶按名稱調用,用來約束某類任務怎麼做。問題是技能文件並不只住在一個目錄裏。DSH 自己有 ~/.dsh/skills~/.agents/skills,項目裏還有 .dsh/skills.agents/skills;如果同時用 Codex 或 Claude,還會再出現 ~/.codex/skills~/.claude/skills。GitHub 上的技能倉庫又是另一套來源。要啓停某一個技能,往往得自己找文件、改名、再確認 /技能 列表有沒有刷新。

dsh-skill-manager 做的事情比較直接:在 DSH Web 的設置頁加一個「技能管理」分區,把上述來源收進同一張列表,用開關熱啓停,也可以從本地 ZIP 或 GitHub 倉庫安裝。本文按社區目錄頁、GitHub 倉庫 README、package.json 和源碼交叉覈對後整理。

這是什麼

dsh-skill-manager 是一個面向 DeepSeek Harness Web 界面的技能管理插件,由 sulfide2085 維護,許可證爲 MIT,主要語言是 JavaScript。package.json 裏的版本號是 0.1.0。倉庫收錄在 GitHub 的 dsh-plugin 話題下。撰稿時打開 GitHub 倉庫顯示 9 星;社區目錄頁上的數字可能滯後,以倉庫頁面爲準。

它解決的是「技能散落、啓停靠改文件」這件事:

  • 把 DSH、Agents、項目目錄,以及 Codex、Claude 目錄裏的技能合併展示
  • 用重命名 SKILL.mdSKILL.md.disabled 做熱開關,文件系統 watcher 大約 200ms 內生效
  • 從本地 ZIP 或 GitHub 技能倉庫發現並安裝技能,裝完立刻進入 ~/.dsh/skills 並啓用

DeepSeek Harness 官方倉庫的口號是「一切皆插件」。本文介紹的社區目錄 deepseek-harness-plugin.com 是獨立站點,與 DeepSeek / 幻方沒有官方從屬關係,不能當成官方應用商店。社區裏還有名稱接近的倉庫(例如 dsh-skill-manager-ytxue),安裝時請以目錄頁給出的 github:sulfide2085/dsh-skill-manager 爲準。

核心功能

按來源合併的技能列表

插件在設置頁註冊 settings.section,分區 id 爲 skill-manager,排序值爲 17,界面文案是「技能管理」,位置在「插件」和「agent 預設」之間。

列表會合並兩套數據:註冊表裏當前啓用的技能,以及磁盤上已經停用(*.disabled)的條目。界面按來源分組,源碼裏的分組標籤包括:

來源 界面標籤
user-dsh DeepSeek Harness
user-agents Agents
project-dsh / project-agents 項目 / 項目 Agents
codex-user / codex-project Codex / 項目 Codex
claude-user / claude-project Claude / 項目 Claude

每張卡片顯示名稱、描述、來源、調用策略(僅模型 / 僅用戶 / 模型+用戶 / 已禁用調用)和啓用狀態。從 GitHub 裝進來的技能會額外帶來源標籤。點擊卡片可展開技能全文。標題旁有手動刷新按鈕;ZIP 或倉庫安裝成功後列表會自動刷新。本地列表另有獨立搜索框,只過濾已經裝上的技能。

未打開會話時,只顯示用戶級和全局技能。項目級技能依賴當前會話的工作目錄,沒有 cwd 就掃不到 .dsh/skills 這類項目根。

掃描優先級在 lib/skill-files.js 裏寫得很明確:項目 .dsh > 項目 .agents > 項目 .codex > 項目 .claude > 用戶 .dsh > 用戶 .agents > 用戶 .codex > 用戶 .claude。同名技能靠前的根勝出;同名時啓用條目優先於停用條目。

熱開關與目錄級啓停

DSH / Agents 目錄下的啓停,實現方式是重命名:

  • 啓用:SKILL.md.disabledSKILL.md
  • 停用:SKILL.mdSKILL.md.disabled

DSH 的 skill-filesystem 提供方會監視這些文件,README 寫明大約 200ms 生效,不需要重啓網關。Codex 和 Claude 也遵循同一套 .disabled 約定。停用只改文件名,不刪除內容,隨時可以再打開。

Codex / Claude 目錄裏的技能默認全部停用,只有在面板裏顯式打開後,纔會進入官方 /技能 註冊表。第三方目錄的啓用名單寫在 DSH home 下的狀態文件 dsh-skill-manager.json 裏(默認路徑 ~/.dsh/dsh-skill-manager.json)。

組頭上還有目錄級開關,一次操作整個來源目錄。bundled / runtime 來源的技能沒有磁盤文件,不可編輯,開關會置灰。

本地 ZIP 安裝

界面上的「ZIP 安裝」會讓你選擇本地 .zip(上限 64 MiB)。host 端把文件按 base64 傳上來,用自帶的 ZIP 解析器解壓(支持 store 和 deflate),做 CRC32 校驗和條目名安全檢查(拒絕絕對路徑、盤符、.. 段和 NUL)。隨後在包內查找技能:

  • 目錄束:含 SKILL.md 的目錄
  • 平鋪技能:根目錄下帶合法 frontmatter 的 .md

查重後裝入 ~/.dsh/skills 並保持啓用形態。包內沒有技能會報錯;同名已存在則跳過並提示衝突。符號鏈接條目會被忽略,不會物化到磁盤。

README 和源碼都標明尚未實現:zip-bomb 解壓預算、symlink 物化、ZIP64。遇到 ZIP64 歸檔會直接報「暫不支持 ZIP64 歸檔」。

GitHub 技能搜索與安裝

「GitHub 技能市場」不是一箇中心化商店,而是:你先添加倉庫座標(owner / 倉庫名 / 分支,分支可留空),插件再去拉該倉庫的 GitHub 歸檔,掃描其中的 SKILL.md,按關鍵詞搜索後逐個安裝。

首次運行時,如果狀態文件裏還沒有 repos 字段,會預置兩個倉庫並落盤:

  • anthropics/skills(分支 main
  • obra/superpowers(分支 main

如果用戶把倉庫列表刪空,空數組會保留,不會再自動把這兩個倉庫加回來。

下載行爲在 lib/skill-repo.js 裏可以覈對:

  • 分支回退順序:指定分支 → mainmaster
  • 歸檔大小上限 128 MiB,單次下載超時 60 秒,網絡失敗默認再試 2 次
  • 緩存在 ~/.dsh/cache/dsh-skill-manager,默認 30 分鐘
  • 默認從 https://github.com 拉歸檔;可用環境變量 DSH_SKILL_GITHUB_BASE 換成鏡像前綴
  • 下載代理尚未實現

安裝目標同樣是用戶級 ~/.dsh/skills。裝完後列表刷新,卡片上能看到 GitHub 來源。

安裝與啓用

社區目錄頁給出的安裝命令如下,在 DeepSeek Harness 終端中運行即可:

dsh plugin add github:sulfide2085/dsh-skill-manager

dsh CLI 會從 GitHub 解析插件並裝進當前 profile。這個插件的客戶端聲明瞭 "platform": "web",界面只出現在 Web 設置頁。若當前用的不是默認 profile,可以按官方文檔的寫法顯式指定,例如:

dsh plugin --profile web add github:sulfide2085/dsh-skill-manager

需要可復現安裝時,把 commit 哈希釘在倉庫後面。目錄頁給出的形式是:

dsh plugin add github:sulfide2085/dsh-skill-manager#commit

commit 換成實際哈希。官方文檔也建議對 git 源固定 commit,避免倉庫後續推送悄悄改變正在運行的代碼。

如果是克隆倉庫後在本地目錄安裝,README 寫的是:

dsh plugin --profile web add .

代碼更新後需要重啓 DSH Web。README 說明:host 的 manifest 在網關啓動時註冊,不重啓的話新接口會 404。

插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。裝之前請自己查看 源代碼倉庫 和 MIT 許可證。

典型用法

下面這些步驟都來自 README 和設置頁文案,可以在 Web UI 裏直接做,不需要額外寫配置。

1. 打開技能管理

啓動 DSH Web(官方默認地址是 http://127.0.0.1:3080),進入設置,找到「技能管理」。首次打開會讀取當前會話能看見的技能;沒有會話時,項目級目錄不會出現。

2. 查看並啓停

列表按來源分組。卡片右側是開關:打開或關閉後,對應目錄裏的 SKILL.md 會被重命名,大約 200ms 後 DSH、Codex、Claude 都會按各自的約定刷新。組頭開關作用於整個來源。bundled / runtime 技能的開關是灰的,這是預期行爲。

需要看正文時點開卡片。本地搜索框只過濾已安裝技能,不會去 GitHub 上搜。

3. 用 ZIP 裝一份技能

把技能打成 zip(目錄束或平鋪 .md 都可以),在「ZIP 安裝」裏選擇文件。成功後會提示已安裝的數量;同名衝突會跳過。裝入位置是 ~/.dsh/skills,隨後可被 /技能 和模型看見。

4. 從 GitHub 倉庫發現技能

在「GitHub 技能市場」填 owner、倉庫名,分支可留空。添加倉庫後,用市場搜索框按關鍵詞查找,命中項可以逐個點「安裝」。倉庫列表可以隨時移除。若網絡訪問 GitHub 歸檔不穩定,README / 源碼提供了 DSH_SKILL_GITHUB_BASE 作爲鏡像基址,需要自己準備可用的前綴。

適用場景與注意事項

比較適合這幾類人:

  • 同時在 DSH Web、Codex、Claude 裏放了技能,不想在 ~/.dsh~/.agents~/.codex~/.claude 之間手工改名
  • 需要按任務臨時關掉一批技能,減少模型上下文裏的技能噪音
  • 要從 GitHub 上的技能倉庫(例如公開的 SKILL.md 集合)挑幾份裝進 DSH
  • 手裏有現成的技能 zip,想裝到用戶級目錄並馬上啓用

使用前需要知道邊界:

  • 只覆蓋 Web 設置頁。 package.json 的 client 平臺是 web,不要指望它給 TUI 或 headless profile 畫同一塊面板。
  • 權限與信任。 插件和它拉下來的技能都在當前 dsh 進程權限下運行。ZIP 和 GitHub 歸檔會在本機解壓、寫文件;安裝前檢查來源、許可證和 SKILL.md 內容。
  • 停用不等於刪除。 .disabled 只是讓提供方不再註冊該技能,文件還在。
  • 項目技能依賴會話。 沒開會話就看不到項目根下的技能,不是列表壞了。
  • ZIP / 下載限制。 本地 zip ≤ 64 MiB;GitHub 歸檔 ≤ 128 MiB、超時 60 秒;不支持 ZIP64、zip-bomb 預算、symlink 物化和下載代理。
  • 同名插件。 安裝命令以目錄頁的 github:sulfide2085/dsh-skill-manager 爲準,不要只按名字去 npm 或 GitHub 搜索結果裏點第一個。

倉庫用 Node 內置的 node:test 寫了 100 個用例,覆蓋 ZIP 解析與安全過濾、倉庫座標與緩存、host 遠程方法和客戶端 bundle 加載。需要覈對自己改過的行爲時,可在插件目錄執行 npm test

小結

dsh-skill-manager 沒有引入新的技能格式,只是把已經散落在 DSH、Agents、Codex、Claude 目錄裏的 SKILL.md 收到設置頁,用文件系統約定做熱啓停,並補上 ZIP 和 GitHub 歸檔兩條安裝路徑。對已經在用 DSH Web、又同時維護多份技能的人來說,它把「改文件名、刷新列表、確認 /技能 看不看得見」收成了面板上的開關和按鈕。

目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-skill-manager/

GitHub:https://github.com/sulfide2085/dsh-skill-manager

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

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

小夜