dsh-skill-manager:在 DSH 设置面板里管理本机 Agent Skill

前言

在 DeepSeek Harness(DSH)里,agent skill 往往分散在项目目录的 .dsh/skills、.agents/skills,以及用户目录下的全局 skills 路径里。要确认某个 skill 是否生效、来自哪一层、能否安全改动,通常只能自己翻目录、改 SKILL.md 或依赖命令行。下面介绍的 dsh-skill-manager 是社区维护者 Nay-1 提供的客户端插件,在 DSH 设置面板左侧增加「Skill 管理」分区(排在「Agent 预设」下方),把本机 skill 按位置或来源分组列出,并支持搜索、启用/禁用、定位、预览与删除(在权限允许范围内)。

这是什么

插件由 host 半(lib/index.js:扫描、HTTP API、文件操作)与 client 半(lib/client.js:设置页 UI)组成,通过 cordis.patch.yml 挂入 DSH bundle。它不替换 DSH 自带的 skill provider,而是在 UI 与本地 API 层把「注册表里认得的 skill」和「磁盘上扫到的 skill」合并展示,便于日常打理。

设置里的界面长什么样

安装并重启 DSH 后,设置导航大致如下:

设置
├── 通用设置
├── 模型
├── 内置插件
├── Agent 预设
└── Skill 管理   ← 本插件,order 30

页面顶部有搜索框和刷新按钮;汇总行显示 skill 总数、禁用数量、扫描过的根目录数。列表按「位置」分组,交互风格对齐内置「内置插件」页:每组默认收起,点击整行展开;一搜索则自动展开所有组。

分组规则要点:

  • 项目级:同一项目的 .dsh/skills 与 .agents/skills 合并为一组,标题为缩短后的项目路径(例如 ~\Desktop\agent-test),便于区分同名项目。
  • 用户级与内置:用户 .dsh → 用户 .agents → 随包内置 → 运行时,按来源依次排列。

每张卡片统一高度(描述固定两行,超出截断,悬停看全文),展示名称、来源标签、描述、缩短后的 SKILL.md 路径(主目录显示为 ~),以及按权限出现的操作。

操作 出现条件 作用
启用 / 禁用 文件系统可写的 skill 优先写 frontmatter,不改文件名
打开目录 有磁盘或注册表 resourceBase 路径 资源管理器定位(Windows;非 Windows 接口返回 revealed: false)
查看 / 收起 有路径的 skill 就地预览 SKILL.md 正文(不渲染 Markdown)
删除 文件系统可写的 skill 删除整个 skill,内联二次确认,不可恢复

随包内置(bundled)与运行时 provider 提供的 skill 为只读:可定位、可预览,无启用/禁用与删除(与宿主侧 403 一致)。

它怎么认 skill、清单从哪来

扫描规则与 @deepseek-ai/dsh-skill-filesystem 对齐,常见根目录与显示权重如下(权重仅用于本插件排序,与公共契约里的 SkillSummary 无 rank 字段):

根目录 source 显示权重
<项目>/.dsh/skills project-dsh 100
<项目>/.agents/skills project-agents 200
$DSH_HOME/skills(默认 ~/.dsh/skills) user-dsh 400
$DSH_AGENTS_HOME/skills(默认 ~/.agents/skills) user-agents 500
$DSH_BUNDLED_SKILL_DIR bundled 600

项目根来自 DSH 进程 cwd,以及工作区账本(ctx.workspaceRegistry)登记的路径。每个根下识别目录包 <name>/SKILL.md 与平铺文件 <name>.md;以 . 开头的条目(含 .system)跳过。

清单由两处合并:

  1. ctx.skills.list() — DSH 注册表中的 skill(含随包内置与运行时 provider);
  2. 磁盘扫描 — 文件位置与是否可写。

合并只按路径认领,避免把注册表里仍「活着」的条目错挂到磁盘上已禁用的同名文件。注册表不可用时,页面会提示当前仅有磁盘扫描结果。README 注明:在实测版本 0.2.0-rc.2 环境下,宿主上下文里的 ctx.skills.list() 可能只返回随包内置与运行时 provider,文件系统 provider 那批 skill 在页面上来自磁盘扫描,属预期行为;诊断可用 GET /skill-manager/api/registry。

启用与禁用(1.2.0 起)

默认禁用不再改文件名。 插件向 SKILL.md frontmatter 写入 DSH 原生开关:

---
name: my-skill
description: ...
disable-model-invocation: true   # 模型目录与加载路径都够不到
user-invocable: false            # 斜杠命令通道也过滤
---

启用时写回 false / true(显式、幂等)。写入采用同目录临时文件再 rename,保留 BOM 与 CRLF/LF。没有 frontmatter 的裸文件会抛 no-frontmatter,仍退回历史上的改名方式;SKILL.md.disabled / <name>.md.disabled 仍会显示为已禁用,启用时可还原文件名。

注意:标记禁用不会从注册表释放名字;正在跑的会话里已加载的 skill 要等 provider 失效重扫后才反映目录变化;bundled 根下一律不可写(403)。

HTTP API(本机)

全部挂在 /skill-manager/api,供设置页与本地脚本使用:

方法 路径 说明
GET /health 自检 home、agentsHome、bundledDir、注册表是否可用
GET /list 完整清单(并发查注册表,整体 8 秒 deadline)
GET /registry 诊断:按 cwd 摊开 ctx.skills.list() 原始返回
POST /toggle { target } 启停
POST /delete { target } 删除
POST /read { target } 返回正文(>512 KB 拒绝)
POST /reveal { target } 资源管理器定位(Windows)

文件类操作的目标路径均经重新扫描校验,禁止路径穿越;写接口对非 JSON 或跨站 Origin 请求有额外限制。

安装与启用

插件以 本地 file: 依赖 装入 profile(README 示例为 Windows PowerShell;desktop 为 profile 名,请按自己的环境修改)。路径中不要含空格。

先取得源码到本地,再执行:

git clone https://github.com/Nay-1/dsh-skill-manager.git C:/dsh-plugins/dsh-skill-manager
dsh plugin --profile desktop add "file:C:/dsh-plugins/dsh-skill-manager"

装完后确认该 profile 的 package.json 里 dsh.profile.bundles 包含 dsh-skill-manager(只有进入 bundles,cordis.patch.yml 的插入才会生效;dsh plugin add 通常会写入,否则需手动补一行)。

host 与 client 仅在 DSH 启动时加载一次,无热重载,安装或改源码后需重启桌面端。

若修改了克隆目录里的源码:pnpm 的 file: 依赖是拷贝而非软链,直接再 add 往往显示 Already up to date 且不会更新磁盘拷贝,需先 remove 再 add:

dsh plugin --profile desktop remove dsh-skill-manager
dsh plugin --profile desktop add "file:C:/dsh-plugins/dsh-skill-manager"

卸载:

dsh plugin --profile desktop remove dsh-skill-manager

并从 dsh.profile.bundles 删除同名条目。

运行环境要求(package.json):Node ^22.15.0 || >=24.0.0,peer cordis >=4.0.0-rc <5。

典型用法

  1. 打开 DSH 设置 → Skill 管理,看汇总行与分组列表,确认项目级与用户级 skill 是否都在预期位置。
  2. 用搜索框按名称或路径片段查找;搜索后分组会自动展开。
  3. 对可写 skill 点击 禁用,再在对话里确认模型目录与 skill 工具是否不再加载该 skill(依赖 frontmatter 策略)。
  4. 需要核对内容时用 查看 预览 SKILL.md;在 Windows 上用 打开目录 在资源管理器中选中文件。
  5. 排查「注册表与磁盘不一致」时,可请求本机 GET /skill-manager/api/registry 或 /list(需 DSH 已加载插件且在本机访问)。

开发插件本身时,仓库提供:

node test-host.mjs      # host 半自测(90 项)
node test-client.mjs    # client 半自测(67 项)

适用场景与注意事项

适合谁:经常在多个项目与用户级目录间切换、需要统一查看 skill 来源与禁用状态、又不想手改 frontmatter 或文件名的 DSH 用户。

使用前请知悉:

  • 插件以当前 DSH 进程权限读写本机文件;安装前应阅读源码与 MIT 许可证,确认信任维护者与操作范围。
  • 项目根靠猜:host 插件拿不到「当前会话工作目录」的完整语义,仅 cwd 与工作区账本,项目级列表可能多列或少列。
  • 删除不可恢复,无回收站;预览不渲染 Markdown。
  • 符号链接不跟随,链接形式的 skill 条目会被跳过。
  • DSH 社区目录(skillhub.cn)为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,本插件为社区贡献,非内置组件。

结尾

dsh-skill-manager 把 agent skill 的查看与日常维护收进设置面板:分组清晰、启用禁用对齐 DSH frontmatter 语义、只读来源与可写来源边界分明。若你需要在桌面端集中管理本机 skill,可按 README 用 file: 方式装入 profile 并重启 DSH。

  • 目录页:https://www.skillhub.cn/plugins/Nay-1/dsh-skill-manager
  • GitHub:https://github.com/Nay-1/dsh-skill-manager
羽毛球分组比赛记分
小程序二维码

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

Xiaoye