🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

技能管理面板 yixin2021/dsh-skills

DeepSeek Harness
yixin20211 天前有提交已提供中文文档扫描:含敏感能力

在侧栏集中查看、预览并开关已安装的 Agent 技能

31.5/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add yixin2021/dsh-skills
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]—
本站尚未做安装检查
暂无时间戳·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 1 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 52 处,展示前 28 条)
  • 读取本地文件
    index.js:99
    text = await readFile(customRootsFile(), 'utf8')
  • 写入本地文件
    index.js:125
    await mkdir(dshHome(), { recursive: true })
  • 写入本地文件
    index.js:126
    await writeFile(customRootsFile(), `${JSON.stringify({ paths }, null, 2)}\n`, 'utf8')
  • 读取本地文件
    index.js:226
    const info = await stat(file)
  • 读取本地文件
    index.js:233
    const info = await stat(flat)
  • 读取本地文件
    index.js:254
    const info = await stat(located.file)
  • 读取本地文件
    index.js:262
    const text = await readFile(located.file, 'utf8')
  • 读取本地文件
    index.js:293
    const source = await stat(from).catch(() => undefined)
  • 写入本地文件
    index.js:301
    await mkdir(dirname(to), { recursive: true })
  • 写入本地文件
    index.js:302
    await rename(from, to)
  • 写入本地文件
    index.js:333
    await mkdir(dirname(to), { recursive: true })
  • 写入本地文件
    index.js:334
    await rename(from, to)
  • 删除本地文件递归
    index.js:361
    await rm(target, { recursive: true, force: true })
  • 删除本地文件递归
    index.js:377
    for (const entry of entries) await rm(join(trash, entry), { recursive: true, force: true })
  • 删除本地文件递归
    index.js:509
    await rm(locations.enabled, { recursive: true, force: true })
  • 删除本地文件递归
    index.js:708
    await Promise.all(created.map((path) => rm(path, { recursive: true, force: true })))
  • 执行外部命令来自配置/变量
    index.js:746
    execFile(command, args, { windowsHide: true, timeout: 5_000 }, (error) => resolve(error === null))
  • 发起网络请求
    client.js:397
    response = await fetch(routeUrl(), {
  • 读取本地文件
    lib/skill-tree.js:222
    const entries = await readdir(dir, { withFileTypes: true }).catch(() => [])
  • 读取本地文件
    lib/skills-core.js:253
    const info = await stat(path)
  • 读取本地文件
    lib/skills-core.js:263
    const info = await stat(file)
  • 读取本地文件
    lib/skills-core.js:265
    return { text: await readFile(file, 'utf8'), size: info.size, updatedAt: info.mtime.toISOString() }
  • 读取本地文件
    lib/skills-core.js:319
    const info = await stat(join(rootPath, entry.name)).catch(() => undefined)
  • 读取本地文件
    lib/skills-core.js:339
    entries = await readdir(root.path, { withFileTypes: true })
  • 读取本地文件
    lib/skills-core.js:363
    disabledEntries = await readdir(disabledPath, { withFileTypes: true })
  • 删除本地文件递归
    lib/git-source.js:191
    await rm(dir, { recursive: true, force: true })
  • 删除本地文件递归
    lib/git-source.js:198
    await rm(dir, { recursive: true, force: true })
  • 删除本地文件递归
    lib/git-source.js:211
    await rm(dir, { recursive: true, force: true }).catch(() => {})
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DeepSeek Harness 左侧导航的技能面板:列出、预览、启用或停用、安装并安全卸载智能体技能。

README

由 DeepSeek 最新模型翻译生成
description: "DeepSeek Harness 技能管理插件:在左侧导航中提供「技能」入口,列出、预览、启用/停用、安装与卸载 Agent 技能。" kind: "plugin-readme" dsh-skills DSH Skills 在 DeepSeek Harness 左侧导航中加入一行 技能,以及点击后打开的技能管理页面。 安装 · 下载 v0.1.0 ·介绍页(github.io 在部分网络中不可达,见文末) DSH 会从用户目录和项目目录下的 .dsh/skills、.agents/skills 中发现 Agent 技能,但本身没有提供查看已安装技能、或在不改文件的前提下临时关掉某个技能的界面。 本插件补上这块。 面板能做什么 | 总览 | DSH 扫描的每一个根目录,以及每个技能的名称、描述、指令文件路径和调用策略。 | | 预览 | 直接在应用内读完整的 SKILL.md——frontmatter 与正文。 | | 启用 / 停用 | 每个技能一个开关。停用的技能字节不动,仍留在磁盘上。 | | 安装 | 把顶层含 SKILL.md 的文件夹复制进指定根目录。原目录不会被移动。 | | 新建技能 | 用表单写一个带合法 frontmatter 的技能包。
展开完整文档(README 剩余 1 节)
description: "DeepSeek Harness 技能管理插件:在左侧导航中提供「技能」入口,列出、预览、启用/停用、安装与卸载 Agent 技能。"
kind: "plugin-readme"

dsh-skills

DSH Skills

在 DeepSeek Harness 左侧导航中加入一行 技能,以及点击后打开的技能管理页面。

安装 · 下载 v0.1.0 ·介绍页(github.io 在部分网络中不可达,见文末)

DSH 会从用户目录和项目目录下的 .dsh/skills、.agents/skills 中发现 Agent 技能,但本身没有提供查看已安装技能、或在不改文件的前提下临时关掉某个技能的界面。
本插件补上这块。

面板能做什么

| 总览 | DSH 扫描的每一个根目录,以及每个技能的名称、描述、指令文件路径和调用策略。 |
| 预览 | 直接在应用内读完整的 SKILL.md——frontmatter 与正文。 |
| 启用 / 停用 | 每个技能一个开关。停用的技能字节不动,仍留在磁盘上。 |
| 安装 | 把顶层含 SKILL.md 的文件夹复制进指定根目录。原目录不会被移动。 |
| 新建技能 | 用表单写一个带合法 frontmatter 的技能包。 |
| 安全卸载 | 卸载只是把条目移进根目录下的 .trash,之后可恢复,也可彻底删除。 |
| 定位 | 在访达 / 资源管理器 / 桌面文件管理器中显示技能或根目录。 |
| 自动识别 | Codex、Claude Code、WorkBuddy、CodeBuddy 的技能目录在固定位置,存在的会被自动列出,并带上各自 agent 的图标。 |
| 添加目录 | 把另一个 agent 的技能库挂到面板上——~/.claude/skills、同事的仓库、共享的技能包都行。里面的技能会被列出,DSH 也会加载。目录本身仍然是只读的。 |

安装

从 GitHub 安装。 本仓库就是一个可直接安装的包:package.json 在根部,没有构建步骤,所以任何 npm 兼容的 git 规格都能解析。在插件管理器(设置 → 插件)里安装:

github:yixin2021/dsh-skills

同一条规格也适用于 CLI——dsh plugin 会把参数原样转给 profile 里的 pnpm:

dsh plugin --profile desktop add github:yixin2021/dsh-skills
dsh plugin --profile desktop remove dsh-skills

https://github.com/yixin2021/dsh-skills 与 git+ssh://git@github.com/yixin2021/dsh-skills.git 等价。

从本地目录安装。

dsh plugin --profile desktop add /absolute/path/to/dsh-skills

bundle patch 会插入一个名为 skills 的 Loader 行;客户端部分负责挂载导航行和面板。
安装后刷新窗口即可。

实现方式

宿主侧(index.js)在 ctx.connection.fetch 上注册一个需要鉴权的 JSON 路由 POST /api/dsh-skills,处理 list、read、set-disabled、trash、restore、 purge、empty-trash、create、import-directory、import-files、reveal、 add-root、remove-root;并通过 ctx.skills.registerProvider 把自动识别的技能库和手动添加的目录交给模型。
lib/skills-core.js 负责技能语法本身——frontmatter 解析、根目录发现、条目扫描——路由和测试因此共用同一套「什么算一个技能」的定义。

客户端侧(client.js)在 sidebar.panellist 中用 id dsh-skills 注册一个图标,并在 main 中注册同一个 id 作为 key 的面板——布局正是靠这个 id 把导航行和面板对上。
它自己从不读技能目录:所有事实都经由路由取得,浏览器没有任何文件系统权限。

停用而不删除

DSH 只发现技能根的直接子项。被停用的技能会被移到 <root>/.disabled/<name>——隐藏、因此对所有 provider 不可见——重新启用时原样移回。SKILL.md 一个字节都不会被改写,手写的技能可以完整往返。.trash 用的是同一套办法。

自动识别的 agent 技能库

有五个目录是自动找到的,已经在用别的编码 agent 的机器不需要任何配置。页面按这个顺序列出:

| 图标 | 技能库 | 路径 |
| DeepSeek | DeepSeek Harness | $DSH_HOME/skills(通常是 ~/.dsh/skills) |
| DeepSeek | Agents | $DSH_AGENTS_HOME/skills(通常是 ~/.agents/skills) |
| Codex | Codex | $CODEX_HOME/skills(通常是 ~/.codex/skills) |
| Claude Code | Claude Code | $CLAUDE_CONFIG_DIR/skills(通常是 ~/.claude/skills) |
| WorkBuddy | WorkBuddy | $WORKBUDDY_HOME/skills(通常是 ~/.workbuddy/skills) |
| CodeBuddy | CodeBuddy | $CODEBUDDY_HOME/skills(通常是 ~/.codebuddy/skills) |

每次读取时重新探测,而不是记住结果:以后装了别的 agent 会自动出现,删掉目录也就从列表里消失。这些技能库和手动添加的目录一样是只读的——那些字节不归 DSH 管。

图标用的是各家公开的品牌素材,不是自己画的:DeepSeek 鲸鱼(simple-icons 的 deepseek.svg)、OpenAI 绳结与 Claude 米字(@lobehub/icons-static-svg 的 openai.svg、claude.svg)、以及 codebuddy.ai 和 workbuddy.cn 站点上的官方 logo.svg。单色标用 currentColor,跟随主题;两个圆标保留各自的渐变。商标归各自所有,这里只用来标识技能来自哪个 agent。

添加的目录

DSH 只扫描固定的几个根目录,所以插件自己注册了一个技能 provider (ctx.skills.registerProvider),用 source: 'custom'——DSH 正是为这种情况留的标签——把这些目录里的技能交给模型。技能目录里的调用策略取自各自的 frontmatter;用软链接挂进来的技能包也算数(Claude Code 和 stow 都是链接而不是复制)。添加或移除目录会 invalidate 目录缓存,下一步模型就能看到,无需重启。

目录本身在面板里仍然是只读的:没有启用/停用、没有卸载、不能在里面新建,也不会被当作安装目标。这些字节不归 DSH 管,在那里拨开关等于改别的工具的技能库。
「安装…」是把技能复制进 DSH 自己的根目录。这条规则在宿主侧同样强制执行(code: 'read-only'),不依赖页面自觉。

列表存在 $DSH_HOME/skills-roots.json——放在技能旁边而不是 profile 里,这样重建 profile 不会丢,Web 端和桌面端也共用同一份。文件损坏时按空列表处理,下一次「添加目录」会把它重写。key 由路径哈希而来,移除前面某个目录不会让后面目录的筛选条件指错地方。

边界

所有写操作都经过 resolveWithin,路径一旦离开根目录即被拒绝。技能名需匹配
^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$;请求的条目必须确实存在于它声称的位置;
新建或安装不会覆盖已存在(含已停用、已在回收站)的同名条目。

UI 规范

- 只使用宿主主题 token(--dsw-alias-),没有自带调色板,深色与浅色主题都成立。
- 所有可见文案取自由宿主语言快照选中的中英双词典(inject: ['slots', 'locale']),并订阅 locale/change 在切换语言时重绘;导航行 label 是函数,同样跟随切换。
刻意不读 navigator.language:在桌面壳里它反映的是系统 Chromium 语言,并不跟随宿主的渲染语言。
- 这里的 React 是宿主裁剪过的对象,只暴露 createElement、useState、useEffect。
面板只用这三个;useSyncExternalStore、useRef、memo 之类都是 undefined,在渲染时调用会抛错,最终表现为面板空白。
- 不引入任何 Harness 客户端包。所有控件都是普通元素 + 主题 token 样式,不会因为缺少原语模块或属性名猜错而挂掉。
- 弹层带 role="dialog" / aria-modal,支持 Esc 与点击遮罩关闭;启用/停用是带可访问名称的真实 checkbox。
- 除面板之外的 DOM 一律不碰;除选择文件夹时临时插入、关闭即移除的 input 外,不向 document.body 追加任何节点。

测试

npm test

先对三个源文件跑 node --check,再在真实临时目录上跑 25 项文件系统测试: frontmatter 解析(引号标量、注释、块标量、非法布尔写法)、路径包含、根目录发现、仅扫描直接子项、以及包括各种拒绝分支在内的全部变更操作。

关于介绍页

介绍页发布在 GitHub Pages(<https://yixin2021.github.io/dsh-skills/>)。.github.io 在部分网络(含中国大陆多数网络)会被干扰:TCP 能连上,TLS 握手直接被重置,浏览器表现为「无法访问」。仓库本身、Releases、README 上的图片都不受影响。

页面源码就在 docs/index.html,本地直接打开即可;要放到自己的域名下,把 docs/ 整个目录丢给任意静态托管,再在该仓库 Settings → Pages 里填自定义域名(或 docs/CNAME)。

已知限制

- import-files 以文本传输,不携带二进制文件;需要资源文件时用 import-directory,或安装后再把资源复制进技能包。
- 添加的目录由本插件提供,而不是 DSH 自己扫描。若某个组合里没有 skills 服务,面板照常工作,但那些目录会退回「只浏览、可复制」。
- 从添加的目录「安装」技能会在磁盘上留下两份副本;原目录不会被移动。
- 面板显示的是根目录当前的状态,不监听文件系统;在磁盘上改过文件后请点「刷新」。
预览分享卡片长什么样 ↓yixin2021/dsh-skills
分享 · DeepSeek Harness Hub
yixin2021/dsh-skills

在侧栏集中查看、预览并开关已安装的 Agent 技能

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部