DSH 插件:Skill 与 MCP 使用审计

前言

DeepSeek Harness(DSH)插件 skill-use 用于回答三个原生 UI 无法回答的问题:我到底装了多少 skill、它们来自哪个工具;这次任务真正调用了哪些 skill,成功还是失败;MCP 有哪些 server / 工具,被调用了多少次。入口在对话顶部状态栏,与子智能体、团队看板、任务列表同一排,点击展开面板。

是什么

这是一个 DSH 插件,维护者为 yizitiguan,分类为 admin-security。插件扫描本机 20 类 skill 来源(如 DSH、Agent、Claude Code、Cursor、Qoder、Trae 等),标注每个 skill 来自哪个工具,并在对话顶部状态栏实时显示当前会话 skill 与 MCP 的真实调用次数、成败与耗时。

核心功能

插件通过直接扫盘获取本机安装的 skill,而非依赖 DSH 原生 ctx.skills.list()(后者只返回当前 session 可见的 skill)。扫描目录遵循各家 AI 编码工具的统一格式:<tool-home>/skills/<skill-name>/SKILL.md(带 YAML frontmatter)。

扫描来源

与 @michengai/dsh-skills-manager 的 EXTERNAL_SOURCE_ORDER 对齐,支持以下来源(20 类):

来源 路径 DSH 加载
DSH ~/.dsh/skills ✅
Agent ~/.agents/skills ✅
Codex ~/.codex/skills
Claude Code ~/.claude/skills
Gemini ~/.gemini/skills
OpenCode ~/.config/opencode/skills
Cursor ~/.cursor/skills
Copilot ~/.copilot/skills
Windsurf ~/.codeium/windsurf/skills
Windsurf (user) ~/.windsurf/skills
Trae / Trae CN ~/.trae/skills、~/.trae-cn/skills
OpenClaw ~/.openclaw/skills
ClawdBot ~/.clawdbot/skills
Roo ~/.roo/skills
CodeBuddy ~/.codebuddy/skills
WorkBuddy ~/.workbuddy/skills
Qoder / Qoder CN ~/.qoder/skills、~/.qoder-cn/skills
Lingma ~/.lingma/skills

每类都支持环境变量覆盖(如 DSH_CLAUDE_HOME),与 skills-manager 约定一致。

面板内容

面板包含以下区块:

  • Skill 使用:每个被调用 skill 的次数、成败、平均耗时、来源标签
  • 来源分布:按工具来源统计数量与使用情况,标出 DSH 会加载的来源
  • MCP 使用:MCP server 调用次数、方法明细、已注册 MCP 工具
  • 未使用的 Skill:可折叠;标出被 skills-manager 禁用的项
  • 统计窗口:事件数与时间跨度

每个 skill 带来源标签:[Claude Code] / [Agent] / … → 磁盘上的来源目录;[内置] → 磁盘上找不到,说明是插件 / preset 自带 skill。

MCP 识别

DSH 里 MCP 工具没有统一前缀,插件按三层识别(lib/state.js 的 classifyMcp):

  1. 内置资源工具(精确集合,来自 @deepseek-ai/dsh-mcp-resources):list_mcp_resources、list_mcp_resource_templates、read_mcp_resource,参数带 server 字段,可精确归因
  2. 约定前缀:mcp__<server>__<tool> 或 mcp_<server>_<tool>
  3. 注册表匹配:ctx.tools.schemas() 里识别出的 MCP 工具名

server 名优先取调用参数里的 server,否则取工具名前缀。调用了但注册表里没有的 server 会进 stale,便于排查已卸载的配置。

数据来源

调用统计通过 DSH 事件获取:

  • tool/call:name=skill,args={"name":"cordis-plugin-development"}
  • tool/result:message.toolCallId → 配对回该次调用,读 error / isError

统计内容包括调用次数、成功 / 失败、本轮平均耗时;失败时记录 error.reason;用 tool/call 的参数名去来源索引里查,得到来源归因。

来源归因步骤:

  1. 扫盘得到 name → { source, sourceLabel } 索引
  2. 同名 skill 出现在多个来源时,优先取 native(DSH 实际会加载的那个)
  3. 查不到 → 标记为 builtin(插件 / preset 内置)

安装与启用

要求 DSH >= 0.1.5-rc.1。插件无构建步骤,纯 ESM + 浏览器端纯 JS,克隆下来即可用。

方式一:npm(最快)

dsh plugin --profile <你的 profile> add @yizitiguan/skill-use

方式二:从 GitHub 本地链接

克隆后用 link: 方式装进 profile:

git clone https://github.com/yizitiguan/skill-use.git
dsh plugin --profile <你的 profile> add link:<克隆下来的绝对路径>

或者在 DSH 里用插件管理器:

plugin_manager install_bundle <克隆下来的 skill-use 目录绝对路径>

方式三:手动写进 profile

在 ~/.dsh/profiles/<profile>/cordis.patch.yml 中添加:

- insert:
    - id: skill-use
      name: '@yizitiguan/skill-use'

同时确保包已在 profile 的 node_modules 里(pnpm add link:<目录> 或从 npm 装)。

安装完成后刷新页面,顶部状态栏会出现 Skill · 已用/已发现 按钮。

设置

在 DSH 设置 → Skill 使用中可以配置:

  • 刷新间隔:1.5 / 2 / 5 / 10 秒
  • 汇总 / Skill 使用 / 未使用 / 来源分布 / 统计窗口:逐区块开关,立即生效

也可以通过 profile 的 cordis.patch.yml 进行配置:

- id: skill-use
  config:
    refreshMs: 2000
    sections:
      usage: true
      idle: true
      sources: true

接口

插件提供以下接口:

方法 路径 用途
GET /api/skill-use/snapshot?session=<id> 审计快照
GET /api/skill-use/settings 读配置
POST /api/skill-use/settings 写配置(局部合并)

适用场景与注意

适合需要掌握本机 skill 与 MCP 使用情况的 DSH 用户,尤其是同时使用多款 AI 编码工具、skill 来源分散的场景。插件以当前 DSH 进程权限运行,安装前应检查源码与许可证。

短结尾

skill-use 插件通过扫盘与事件审计,补齐 DSH 原生 UI 在 skill 与 MCP 可见性上的缺口。访问目录页与 GitHub 仓库了解更多。

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

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

小夜