DeepSeek Harness 插件市场:一条命令装第三方插件
生命不息,折腾不止。上一篇我们亲手写了一个插件,这一篇反着来——不写代码,一条命令把别人写好的插件搬进来,五分钟把 Agent 武装起来。
上个月我们搞定了 DeepSeek Harness(下称 dsh)的基础安装和「写第一个插件」,算是把「一切皆插件」的骨架摸了一遍。但说实话,什么都自己写太累了,一个能用的 Agent 要的插件堆起来能绕地球半圈。好在 dsh 的生态起得飞快,社区已经攒了一堆现成插件,还有专门的插件市场帮你挑。这篇就讲清楚:去哪儿找插件、怎么一条命令装上、装完怎么验证、以及装第三方代码时安全这条线怎么守住。
一、先想清楚:你在「用插件」还是「写插件」
dsh 的插件机制上一回已经讲过核心——每个能力都是插件,插件通过一个 dsh.bundle 清单告诉 Harness 自己贡献了什么。落到使用上,就有两个完全不同的动作:
- 写插件:自己在本地写代码、打包成 bundle 再挂上去(上一篇文章干的活);
- 用插件:从 npm 或 GitHub 把别人打包好的 bundle 拉下来,装进某个 profile,重启就能用。
这篇专注第二个动作。你只需要记住两个名词:bundle(组合包) 和 profile(配置档)。
- bundle 就是一个「带配置层的 npm 包」,它的
package.json里声明了dsh.bundle,再附一个cordis.patch.yml告诉 Harness 要挂哪些模块; - profile 是
$DSH_HOME/profiles/下的一个目录(默认~/.dsh/profiles/),描述「我这套 Agent 由哪些 bundle、按什么顺序拼起来」。dsh web就是dsh --profile web的别名,web 这个 profile 第一次启动会从随附模板自动初始化。
一句话:bundle 是你装的东西,profile 是装到哪儿去。 搞清楚这个,下面所有命令就不乱了。
二、去哪儿找插件:几个社区市场
先说个实话:截至我写这篇,官方还没推出统一插件市场,市面上这些市场基本都是社区维护的索引站。它们的作用是帮你把散落在 GitHub 的 dsh-plugin 主题仓库归拢、打分、给出一键安装命令。常用的有这么几个:
- dshplugin.market:特点是有个扫描器,每两小时扫一次 GitHub 上
topic:dsh-plugin的仓库,校验 manifest、bundle patch、构建产物,把「过检」的插件写进中心 Registry。它给的安装命令通常带#<commit-sha>固定提交,推荐照抄; - dsher.cn:把官方、社区、索引三类插件一网打尽,安装命令写得最清爽,适合新手照着敲;
- awesome-dsh-plugin:GitHub 上的精选列表(awesome 那种),人工维护,质量有兜底,适合漫无目的地逛;
- springbrand 的内嵌市场:一个「市场插件」,装完之后直接在 dsh 的 Web 界面里多出一个「插件市场」入口,浏览、搜索、一键安装都在面板里点,不用再敲命令——适合不想记命令的人。
提醒一句:这些都是第三方社区项目,不是 DeepSeek 官方出品。用之前看一眼插件页上的扫描状态、star 数、最近更新时间,心里有个数。官方文档始终以 github.com/deepseek-ai/deepseek-harness 为准。
三、三条安装命令,覆盖所有场景
dsh 的 plugin 子命令本质上是把参数原样转发给 pnpm、在 profile 目录里执行。所以你能装的东西,就是 pnpm 认的源。三种最常见:
① 从 npm 装预构建产物(最省心,推荐)
1 | dsh plugin --profile web add <包名> |
例如装官方示例的 Web 应用 bundle:
1 | dsh plugin --profile web add @deepseek-ai/dsh-web-app |
npm 包是作者在发布时已经构建好的,没有安装时跑脚本的环节,所以不需要任何构建授权,一条命令直接到位。
② 从 GitHub 装源码(记得固定 commit)
1 | dsh plugin --profile web add github:owner/repo#<commit-sha> |
这里有个坑必须讲:从 git 装拉下来的是源码,不是构建产物,没人帮你跑 build 脚本。所以作者得在包里提供 prepare 脚本自建产物;而 pnpm ≥10 出于安全,默认拒绝运行 git 依赖的 prepare,你第一次 add 会失败,dsh 会提示你把 pnpm 打印的包键写进 profile 的 pnpm-workspace.yaml:
1 | allowBuilds: |
填完重新执行 add 就行。这个授权等于允许该包在你的机器上、Agent 沙箱之外执行代码,所以一定要固定 commit(#<sha>),别让后续推送悄悄换掉你审核过的那份代码。
③ 本地目录 / 链接开发
1 | dsh plugin --profile web add link:/path/to/plugin |
自己开发调试插件时用,指向本地 checkout,改完重启就能看效果。
装完之后怎么验证它真的成了配置里的一层?跑这个:
1 | dsh --profile web --dump-config |
能看到你的 bundle 出现在解析后的配置里,就说明挂上了。装完 bundle 记得重启 dsh web 才生效。
四、实战:装一个内嵌插件市场
光说不练假把式。我们拿 springbrand 的「内嵌市场」走一遍完整流程,装完之后你就在面板里点点鼠标装别的插件了。
第一步,确认环境。 dsh 要求 Node.js ^22.19.0 或 >=24.0.0:
1 | node -v |
第二步,装 CLI(顺手带上 pnpm)。 如果你之前一直用 npx @deepseek-ai/dsh web 零安装跑,这里建议全局装一下,plugin 子命令用起来更顺手:
1 | npm install --global pnpm @deepseek-ai/dsh |
第三步,把市场装进 web profile:
1 | dsh plugin --profile web add @springbrand/dsh-plugin-marketplace |
第四步,验证这一层:
1 | dsh --profile web --dump-config |
第五步,启动,去逛市场:
1 | dsh web |
浏览器打开后进 Settings → Plugin Marketplace,就能按名字、作者、描述、npm 包名搜索插件,看分类和 GitHub star,点一下就装。装别的插件时,它底层还是帮你执行 dsh plugin --profile <profile> add <包名>,只是你不用自己敲了。
如果你不想全局装,用 npx 也能走通:
1 | npx @deepseek-ai/dsh plugin --profile web add @springbrand/dsh-plugin-marketplace |
五、安全这条线,一次也不能松
第三方插件会在你的机器上执行代码,而且不在 Agent 运行的任何沙箱之内。这跟「装了个浏览器扩展能读你所有页面」是一个量级的事,所以几条底线得守住:
- 只装可信来源,优先选有扫描验证(如 dshplugin.market 的 Registry)或有大量 star、长期活跃维护的包;
- 固定 commit:GitHub 源一律加
#<sha>,让「你审核过的代码」和「实际运行的代码」严格对应,防止作者后续推送掉包; - 审源码再启用:尤其是要
allowBuilds授权的 git 包,先把仓库 clone 下来看一眼prepare脚本干了啥,再决定放不放行; - 最小权限:装完
--dump-config看它挂载了哪些层,用不到的插件及时remove掉,别让一堆不知名的 bundle 躺在 profile 里; - 随装随拆:卸载一条命令搞定,依赖它被谁引用还能查:
1 | dsh plugin --profile web remove <包名> |
装插件这件事本身不用碰模型 API,但如果装完你想立刻用起来,记得回到 Settings → Models 配好模型才能跑会话——这一步我们第一篇接入中转站时已经搞定过,没配的补一下就行。
六、两个高频坑,提前给你排掉
坑一:3080 端口被占。 dsh web 默认绑 127.0.0.1:3080,如果已经有别的东西占着(或你想开第二个实例),换端口就行。注意 --port 是 web 应用自己的参数,得跟在 profile 后面:
1 | dsh --profile web --port 8080 |
坑二:以为 dsh web 是个独立程序。 它不是。web 只是 --profile web 的别名,真正跑起来的是「dsh-base + dsh-web-app」这一套拼起来的组合。所以「给 web 装插件」和「改 web 配置」都是冲着 web 这个 profile 去的,命令里别写错 profile 名。
折腾到这儿,你的 Agent 已经能像装 App 一样加能力了:想让它看截图?装个视觉插件;想让它定时干活?装个工作流插件;想让它接入某个私有接口?装个 provider 插件。能力装齐了,下一个问题就是——Agent 到底背着你干了啥。dsh 把模型看到的每一件事(系统提示、推理、工具调用、子 Agent 调度)都记进一份只增不改的会话日志里,下一篇我们就钻进这个 Trajectory 视图,讲讲怎么回放、分叉、搜索一次会话,把 Agent 的行为扒得明明白白。
生命不息,折腾不止。下一篇《DeepSeek Harness Trajectory 实战:把 Agent 每一步都录下来,随时回放复盘》,我们不见不散。