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

技能选择器 Sakura025/dsh-skill-picker

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

按开发阶段浏览、搜索并一键插入或安装技能

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

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

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

状态速览

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

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

验证判据与等级说明 →

可信度证据

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

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 24 处,展示前 24 条)
  • 发起网络请求
    index.js:98
    const response = await fetch(url, {
  • 写入本地文件
    index.js:150
    await mkdir(root, { recursive: true });
  • 读取本地文件
    index.js:153
    await stat(dir);
  • 写入本地文件
    index.js:159
    await mkdir(dir, { recursive: true });
  • 写入本地文件
    index.js:160
    await writeFile(join(dir, "SKILL.md"), text, "utf8");
  • 读取本地文件
    index.js:213
    names = await readdir(root, { withFileTypes: true });
  • 读取本地文件
    index.js:221
    const text = await readFile(join(root, entry.name, "SKILL.md"), "utf8");
  • 删除本地文件递归
    index.js:243
    await rm(dir, { recursive: true, force: true });
  • 读取本地文件
    audit.mjs:16
    const source = readFileSync(join(HERE, "client.js"), "utf8");
  • 读取本地文件
    audit.mjs:71
    names = readdirSync(root).filter((name) => statSync(join(root, name)).isDirectory());
  • 读取本地文件
    audit.mjs:71
    names = readdirSync(root).filter((name) => statSync(join(root, name)).isDirectory());
  • 读取本地文件
    audit.mjs:77
    statSync(join(root, name, "SKILL.md"));
  • 读取本地文件
    verify-host.mjs:85
    const written = await readFile(join(sandbox, "skills", "my-test-skill", "SKILL.md"), "utf8");
  • 读取本地文件
    verify-host.mjs:110
    if (existsSync(join(sandbox, "escape"))) throw new Error("traversal escaped the skill root");
  • 写入本地文件
    verify-host.mjs:113
    await mkdir(join(sandbox, "skills", "no-manifest"), { recursive: true });
  • 写入本地文件
    verify-host.mjs:114
    await writeFile(join(sandbox, "skills", "no-manifest", "readme.txt"), "x", "utf8");
  • 读取本地文件
    verify-host.mjs:166
    if (existsSync(join(sandbox, "skills", "my-test-skill"))) throw new Error("directory survived removal");
  • 删除本地文件递归
    verify-host.mjs:178
    await rm(sandbox, { recursive: true, force: true });
  • 读取本地文件
    verify-provider.mjs:56
    const onDisk = readdirSync(join(dshHome, "skills"), { withFileTypes: true })
  • 读取本地文件
    verify-roundtrip.mjs:136
    console.log("remaining dirs :", (await readdir(join(sandbox, "skills"))).length);
  • 删除本地文件递归
    verify-roundtrip.mjs:139
    await rm(sandbox, { recursive: true, force: true });
  • 读取本地文件
    verify-skills.mjs:33
    const pluginSource = readFileSync("D:/工作区/toolkit/dsh-skill-picker/client.js", "utf8");
  • 读取本地文件
    verify-skills.mjs:60
    entries = readdirSync(root, { withFileTypes: true }).filter((entry) => entry.isDirectory());
  • 读取本地文件
    verify-skills.mjs:70
    text = readFileSync(file, "utf8");
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

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

DeepSeek Harness 输入框的技能选择器与应用内安装器:按生命周期阶段浏览,中英文搜索,以 /name 插入,支持从仓库、URL、粘贴文本或 skills.sh 注册表安装。

README

由 DeepSeek 最新模型翻译生成
给 DeepSeek Harness 的技能选择器 中文 · English 给 DeepSeek Harness 网页端输入框加一个「技能」入口:按开发阶段浏览、用中文搜索、点一下插入,并且能在面板里直接装新技能。 一个技能选择器 + 应用内安装器,给 DeepSeek Harness 网页端输入框用:按阶段浏览技能,用中文或英文搜索,点一下插入,不用离开面板就能装新技能。 它解决什么问题 DSH 原生的技能调用靠 / 菜单,你必须先知道技能叫什么、拼得对 kebab-case 英文名,而且候选列表按会话缓存,刚装的技能常常刷不出来。结果是:装了一堆技能,实际只会用最熟的那两个。 这个插件把同一份目录(宿主的 skills/list)做成一个常驻入口,并补上原生没有的东西: | 原生 / 菜单 | 本插件 | | 要记英文名 | 中文名 + 一句话说明,点哪行插哪行 | | 只有名字,看不出用途 | 按六段开发阶段分组,左侧导航直达 | | 只能搜英文名 | 中文、英文、说明全文都能搜 | | 装技能要开终端 | 面板里填地址或粘内容就能装 | 功能 - 920×720 大面板,左侧阶段导航(带计数)+ 右侧列表 - 六段开发阶段:① 定义需求 → ② 规划拆解 → ③ 写代码 → ④ 测试验证 → ⑤ 评审加固 → ⑥ 交付上线
展开完整文档(README 剩余 1 节)
给 DeepSeek Harness 的技能选择器

中文 · English

给 DeepSeek Harness 网页端输入框加一个「技能」入口:按开发阶段浏览、用中文搜索、点一下插入,并且能在面板里直接装新技能。

一个技能选择器 + 应用内安装器,给 DeepSeek Harness 网页端输入框用:按阶段浏览技能,用中文或英文搜索,点一下插入,不用离开面板就能装新技能。

它解决什么问题

DSH 原生的技能调用靠 / 菜单,你必须先知道技能叫什么、拼得对 kebab-case 英文名,而且候选列表按会话缓存,刚装的技能常常刷不出来。结果是:装了一堆技能,实际只会用最熟的那两个。

这个插件把同一份目录(宿主的 skills/list)做成一个常驻入口,并补上原生没有的东西:

| 原生 / 菜单 | 本插件 |
| 要记英文名 | 中文名 + 一句话说明,点哪行插哪行 |
| 只有名字,看不出用途 | 按六段开发阶段分组,左侧导航直达 |
| 只能搜英文名 | 中文、英文、说明全文都能搜 |
| 装技能要开终端 | 面板里填地址或粘内容就能装 |

功能

- 920×720 大面板,左侧阶段导航(带计数)+ 右侧列表
- 六段开发阶段:① 定义需求 → ② 规划拆解 → ③ 写代码 → ④ 测试验证 → ⑤ 评审加固 → ⑥ 交付上线
- 中文可读:每条显示中文名 + /英文名 + 一句话中文说明
- 中文可搜:测试、评审、上线、图 都能命中;也支持英文名与描述
- 点一下就插入:默认单选,点任意一行立即把 /技能名 放进草稿并关闭
- 多选:右上角切换后勾选多个,一次拼成 /a /b /c
- 最近使用:插过的前 8 个自动置顶
- 键盘操作:↑ ↓ 移动、Enter 插入、Esc 关闭、Tab 退出多选
- 三个标签页:本次可用 / 本地已装 / 添加技能

添加技能(四种来源)

全部落到 $DSH_HOME/skills/<name>/SKILL.md。

| 方式 | 你填什么 | 例子 |
| 仓库路径 | owner/repo 或 owner/repo/sub/path | addyosmani/agent-skills/skills/code-review-and-quality |
| 原始地址 | 以 SKILL.md 结尾的 URL,或仓库 URL | https://raw.githubusercontent.com/owner/repo/main/SKILL.md |
| 粘贴全文 | 直接把 SKILL.md 内容贴进去 | 自己写的、从网页复制的 |
| 公共库搜索 | 关键词,点结果直接装 | review、pdf、测试(走 skills.sh) |

装完切「本地已装」就能看到,旁边有删除按钮和真实安装路径。

安装

前提:已安装 DSH 桌面版或 dsh web,Node.js ≥ 22.19。

1. 找到你的 profile 目录

macOS / Linux
ls ~/.dsh/profiles/

Windows (PowerShell)
Get-ChildItem $env:USERPROFILE\.dsh\profiles

常见名字是 desktop、standard、web。下面用 <profile> 代指。

2. 解压到 node_modules

macOS / Linux
mkdir -p ~/.dsh/profiles/<profile>/node_modules/@local
unzip dsh-skill-picker-1.1.0.zip -d ~/.dsh/profiles/<profile>/node_modules/@local/

Windows
$dst = "$env:USERPROFILE\.dsh\profiles\<profile>\node_modules\@local"
New-Item -ItemType Directory -Force -Path $dst | Out-Null
Expand-Archive .\dsh-skill-picker-1.1.0.zip -DestinationPath $dst -Force

解压后应该是这样的结构(client.js 直接在这层,不要再套一层目录):

node_modules/@local/dsh-skill-picker/
├── package.json
├── cordis.patch.yml
├── index.js
├── client.js
├── locale/{zh,en}.json
└── icon.svg

3. 在 profile 的 patch 文件末尾追加

打开 ~/.dsh/profiles/<profile>/cordis.patch.yml,在最末尾加三行:

- insert:
- id: dsh-skill-picker
name: '@local/dsh-skill-picker'

注意缩进:- insert: 顶格,下面两行各缩进 4 空格和 6 空格。这个文件原本内容不要动。

4. 完全退出 DSH 再启动

必须完全退出进程(托盘图标也要退出),不是只关窗口。Loader 不监听 patch 文件,改完必须重启。

5. 硬刷新页面

Ctrl+Shift+R(macOS Cmd+Shift+R)。输入框左下角 ➕ 那一排最右边会出现「技能」按钮。

怎么用

插入一个技能

1. 点「技能」
2. 左侧点阶段(比如「④ 测试验证」),或在搜索框输入 测试
3. 点那一行 → /技能名 自动进草稿,面板关闭
4. 继续写你的需求,回车发送

插入的是纯文本 /技能名,由宿主识别并注入技能全文 —— 和手打完全同一条通路。

一次挂多个技能 点右上角切到「多选」→ 勾几行 → 底部「插入 N」。会拼成 /a /b /c 一次性进草稿。

装一个新技能

点「添加技能」→ 选来源 → 填/贴 → 「安装」。成功后自动出现在「本地已装」。

删掉一个

「本地已装」→ 对应行右侧「删除」→ 确认。

卸载

1. 从 cordis.patch.yml 删掉那三行 - insert:
2. 删掉 node_modules/@local/dsh-skill-picker 整个目录
3. 重启 DSH

插件装的技能留在 $DSH_HOME/skills/ 里,不受影响,想保留就留着。

常见问题

重启后按钮没出现

- 检查 cordis.patch.yml 末尾那三行缩进对不对
- 检查目录结构:client.js 必须在 dsh-skill-picker/ 这一层,不能在 dsh-skill-picker/dsh-skill-picker/
- 确认重启的是进程,不是只刷新页面
- 打开设置 → 插件,看 @local/dsh-skill-picker 那一行有没有报错

面板打开是空的

最新版会在接口失败时回退到内置的 34 条清单,并在底部给出提示。如果连回退都没有,说明 client.js 没被加载,回到上一条检查。

「添加技能」里报「宿主接口不可用」

index.js 是 Host 半侧,只有重启进程才会挂上那 4 个接口。刷新页面不起作用。

装完技能但列表里看不到

新装的技能要等宿主重新扫描。切到别的标签页再切回来,或者关掉面板重开。若仍看不到,重启一次 DSH。

技能插入后模型没反应

插入的 /技能名 必须和技能目录名完全一致。用面板点选就不会错;手打容易拼错。

支持范围

| 项目 | 说明 |
| DSH 版本 | 0.2.x(skills/list RPC 与 conversation.input.left slot) |
| 平台 | Windows / macOS / Linux 的 Web 界面 |
| Node | ≥ 22.19 |
| 依赖 | 无运行时依赖,只需宿主已在运行 |

开发

npm install # react / react-dom / jsdom,仅测试用
npm run check # 语法 + 词典审计 + 客户端 + 宿主 + 回归
node verify-skills.mjs # 逐个校验 SKILL.md 是否符合宿主规则
node verify-provider.mjs # 用宿主的真实 provider 加载全部技能
node verify-roundtrip.mjs # 安装 → 发现 → 渲染 → 删除 全链路

verify-host.mjs / verify-roundtrip.mjs 会把 DSH_HOME 指到临时目录,不会写你的真实技能目录。

许可

MIT,见 LICENSE。

它解决什么问题

DSH 通过 / 菜单解析技能。这意味着你必须先知道技能的 kebab-case 名称,拼写完全正确,而且候选列表按会话缓存——所以刚装的技能经常不显示。实际结果就是:你装了十几个技能,却只用记得住的那两个。

这个插件把同一份宿主目录(skills/list)变成常驻入口,并补上原生菜单没有的东西:

| 原生 / 菜单 | 这个插件 |
| 你必须回忆英文名 | 标题 + 一句话用途,点行即可 |
| 只有名字,用途不明 | 按六个生命周期阶段分组,带侧边栏 |
| 只能按英文名搜索 | 搜索标题、用途和名称文本 |
| 从终端安装技能 | 从面板安装:仓库、URL、粘贴或注册表搜索 |

功能

- 920×720 对话框,带阶段侧边栏(含计数)和可滚动列表
- 六个生命周期阶段:① 定义 → ② 规划 → ③ 构建 → ④ 验证 → ⑤ 评审 → ⑥ 发布
- 可读标题:每行显示本地化标题、/kebab-name 和一句话用途
- 全文搜索:匹配阶段、用途或斜杠名称
- 点击插入:默认单选——点一行就把 /skill-name 放进草稿并关闭
- 多选:切换开关,勾选多行,按 /a /b /c 插入
- 最近列表:最近插入的 8 个技能浮到顶部
- 键盘:↑ ↓ 移动,Enter 插入,Esc 关闭,Tab 离开多选
- 三个标签页:本会话 / 已安装 / 添加技能

添加技能(四种来源)

所有内容都会落到 $DSH_HOME/skills/<name>/SKILL.md。

| 方式 | 你需要提供 | 示例 |
| 仓库路径 | owner/repo 或 owner/repo/sub/path | addyosmani/agent-skills/skills/code-review-and-quality |
| Raw URL | 以 SKILL.md 结尾的 URL,或仓库 URL | https://raw.githubusercontent.com/owner/repo/main/SKILL.md |
| 粘贴 | 完整的 SKILL.md 文本 | 手写,或从页面复制 |
| 注册表搜索 | 关键词;点结果即可安装 | review、pdf(通过 skills.sh) |

切到「已安装」标签页就能看到它,带删除按钮和真实的磁盘路径。

安装

前置条件:DSH 桌面版或 dsh web,Node.js ≥ 22.19。

1. 找到你的配置档目录

macOS / Linux
ls ~/.dsh/profiles/

Windows (PowerShell)
Get-ChildItem $env:USERPROFILE\.dsh\profiles

常见名称是 desktop、standard、web。下文用 <profile> 指代你的那个。

2. 解压到 node_modules

macOS / Linux
mkdir -p ~/.dsh/profiles/<profile>/node_modules/@local
unzip dsh-skill-picker-1.1.0.zip -d ~/.dsh/profiles/<profile>/node_modules/@local/

Windows
$dst = "$env:USERPROFILE\.dsh\profiles\<profile>\node_modules\@local"
New-Item -ItemType Directory -Force -Path $dst | Out-Null
Expand-Archive .\dsh-skill-picker-1.1.0.zip -DestinationPath $dst -Force

结果必须是这样 —— client.js 直接位于包目录下,不能多套一层:

node_modules/@local/dsh-skill-picker/
├── package.json
├── cordis.patch.yml
├── index.js
├── client.js
├── locale/{zh,en}.json
└── icon.svg

3. 在配置档补丁末尾追加三行

打开 ~/.dsh/profiles/<profile>/cordis.patch.yml,在最末尾加上:

- insert:
- id: dsh-skill-picker
name: '@local/dsh-skill-picker'

缩进很关键:- insert: 顶格写,接下来两行分别缩进 4 个和 6 个空格。原有内容不要动。

4. 完全退出 DSH 再重新启动

彻底退出进程(包括托盘图标)—— 只关窗口不够。加载器不会监听补丁文件的变化。

5. 强制刷新页面

Ctrl+Shift+R(macOS 上是 Cmd+Shift+R)。输入框工具栏右端、➕ 旁边会出现一个 Skills 按钮。

用法

插入单个技能

1. 点击 Skills
2. 在侧栏选一个阶段(比如 ④ Verify),或在搜索框里输入 test
3. 点击那一行 —— /skill-name 进入草稿,对话框关闭
4. 继续写你的请求,按 Enter

插入的文本就是一个普通的 /skill-name 手势。宿主能识别它,并注入完整的 SKILL.md —— 和手动输入走的是同一条路径。

一次挂上多个

把开关切到多选,勾选你要的行,然后点 Insert N。它们会以 /a /b /c 的形式一次性拼好。

安装新技能 打开 Add skill 标签页,选一个来源,填写或粘贴,点 Install。装好后立刻出现在 Installed 下。

移除单个技能

Installed 标签页 → 在对应行点 Remove → 确认。

卸载

1. 从 cordis.patch.yml 删掉那三行 - insert:
2. 删掉 node_modules/@local/dsh-skill-picker 目录
3. 重启 DSH

通过面板安装的技能留在 $DSH_HOME/skills/,继续正常工作。

故障排查

重启后按钮没出现

- 重新检查 cordis.patch.yml 里那三行的缩进
- 重新检查目录结构:client.js 必须直接放在 dsh-skill-picker/ 里面
- 确认你重启的是进程,不只是刷新页面
- 打开 Settings → Plugins,看 @local/dsh-skill-picker 那一行有没有报错

面板打开是空的

目录 RPC 失败时,较新的构建会回退到内置的 34 个技能列表,页脚会给出提示。如果连回退列表都看不到,说明 client.js 没加载——见上一条。

Add 标签页里提示「Host API unavailable」

index.js 是宿主那一半;那四条路由只在进程重启后才挂载。刷新页面没用。

新装的技能不在列表里

宿主按需重新扫描。切到别的标签页再切回来,或者关掉面板重新打开。还是不出现,就重启一次 DSH。

插入了技能,但模型没理它

/skill-name 这个 token 必须和目录名完全一致。从面板里选总是能对上;手打很容易对不上。

兼容性

| 项目 | 说明 |
| DSH 版本 | 0.2.x(skills/list RPC 和 conversation.input.left 插槽) |
| 平台 | Windows / macOS / Linux 上的 Web UI |
| Node | ≥ 22.19 |
| 依赖 | 运行时无依赖;宿主必须已在运行 |

开发

npm install # react / react-dom / jsdom, tests only
npm run check # syntax + dictionary audit + client + host + regression
node verify-skills.mjs # validate every SKILL.md against the host's own rules
node verify-provider.mjs # load all skills through the real host provider
node verify-roundtrip.mjs # install → discover → render → remove, end to end

verify-host.mjs 和 verify-roundtrip.mjs 把 DSH_HOME 指向临时目录,绝不写入你真实的技能根目录。

许可证

MIT —— 见 LICENSE。
预览分享卡片长什么样 ↓Sakura025/dsh-skill-picker
分享 · DeepSeek Harness Hub
Sakura025/dsh-skill-picker

按开发阶段浏览、搜索并一键插入或安装技能

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