一个 dsh plugin 里有什么?DeepSeek Harness 插件的工具、设置、权限与依赖四件套
一个 dsh plugin 里就四件东西:能力、设置、权限、依赖。 能力是它往对话里加的工具与命令,设置是它在设置页里暴露的配置项,权限是安装期与运行期两条边界,依赖是它带进来的包和它要求的服务。装之前把这四件各看一遍,就知道它会不会动你的东西——这篇不介绍生态,只做解剖。
DSH plugin 的四件套:能力、设置、权限、依赖
四件套对应到插件的代码里各有明确位置:能力在 apply 里注册,设置在 Config schema 里声明,权限分安装期与运行期两条,依赖写在 package.json 并通过 inject 提要求。 逐件拆开:
- 能力(工具与命令):插件的加载入口是
apply(ctx),能力全部在这里通过ctx注册——模型可调用的工具走ctx.tools.register(defineTool({...})),配合parameters与outputschema 约束输入输出(来源)。注册工具前必须先export const inject = ['tools']声明依赖,否则框架不保证ctx.tools已就绪。 - 设置命名空间:插件用
Config类型配同名的 Schemastery schema 声明配置项与默认值;要让配置出现在界面上,Host 半调用ctx.settings.installSection()注册命名空间,浏览器半把卡片注册进settings.plugin.item槽,两半靠同一个命名空间自动配对(来源)。 - 权限声明:分两层——安装期看
allowBuilds,它授权该包的代码在你的机器上于安装时执行且不进沙箱;运行期看工具调用携带的sandbox_permissions档位,请求变宽时要走审批(来源)。 - 依赖:一层是包自己的
dependencies,一层是它在 profile 里留下的记录。声明了dsh.bundle的包会被dsh plugin add追加进 profile 的dsh.profile.bundles,决定它作为哪一层参与启动(来源)。
一句话:能力回答「它能做什么」,设置回答「你能改什么」,权限回答「它被允许做什么」,依赖回答「它带进来什么」。
每一件在界面上落在哪:dsh plugin 卡片、设置页、工具列表与 profile
四件套不是纸上的术语,每一件都能在界面上或目录里找到对应位置——认出这些位置,就等于把插件看穿了。 对照关系如下:
- 能力 → 对话里的工具列表。 装完重启后,模型可调用的工具会出现在工具清单里;插件市场卡片上的 features 描述的就是这一件。
- 设置命名空间 → 设置页「Plugins」区的表单。 卡片由 schema 渲染,你在表单里改的值与手写进
cordis.patch.yml的config:块是同一层配置。命名空间没注册的插件不会在这区出现卡片,ui-theme、permission这类键就属于不渲染的情况(来源)。 - 权限声明 → 安装提示与审批弹窗。 安装期对应终端里要求放行
allowBuilds的提示,运行期对应工具调用越权时弹出的确认窗。 - 依赖 → profile 目录。 依赖记录写在
$DSH_HOME/profiles/<名字>/package.json与node_modules里,dsh plugin list输出的就是这个口径。
想一次看全四项,插件市场是最快的入口:在「设置 → 插件市场」即 DSH Plugin Hub 里打开插件卡片,能力、来源、版本、安装命令都在一起。插件目录的默认位置见 DSH 配置文件在哪。
装之前用这四件套读一个 DSH plugin
四件套真正好用的地方是「预览」:面对一个陌生插件,按四条各问一句,答不上来的就先别装。 四问如下:
- 能力问「加了几个工具」:工具越多,模型能做的事越多,出错面也越大;只加一两个只读工具的插件明显比加一堆写文件工具的插件稳。
- 设置问「有没有开关」:有设置命名空间意味着你能在设置页关掉某部分行为;完全没有设置项的插件,装上去就只能靠卸载来关。
- 权限问「要不要放行、会不会求助审批」:装的时候要
allowBuilds的包必须审过源码再放行;运行期频繁请求更宽sandbox_permissions的工具要格外留意。 - 依赖问「拉进来多少包」:依赖越多、钉版越死,越容易在 DSH 升级后掉队,也可能和已有插件抢同一个核心包。
四件里只要有一件你答不上来,就先不装——这套判断的完整版见 dsh plugin 的能力与权限边界,概念之间的关系见 装插件前先懂的 5 个概念。
DSH plugin 解剖的注意事项
四件套是核对清单,不是评分表:四件都看清楚之后,再决定装不装。
- 四件套是可核对的四个位置,不是四个形容词:能力看工具列表、设置看设置页、权限看安装提示与审批、依赖看 profile 目录。
- 没有设置项 ≠ 不能用:只是缺少可调开关,判断重点要回到能力与权限两件。
- 工具多不等于强:每个工具都是一条模型可以走错的路,按需装。
allowBuilds只是安装期边界:放行等于让该包在安装时以你的身份执行代码,与运行期的权限档位是两回事。- 看依赖要看 profile 层:仓库里的
devDependencies与你无关,dsh plugin list输出的才是真实生效的那层。 - 确认插件真的挂上了用
--dump-config:dsh --profile web --dump-config里出现# == <包名>那一层,才算配置层生效。 - 想自己看代码结构:
apply的注册、Configschema、inject声明、dsh.bundle标记这四处,就是四件套在代码里的落点,写法参考 dsh plugin 怎么写。

来源:DeepSeek Harness 官方文档 - 你的第一个插件、官方文档 - 工具、官方文档 - 插件配置、官方 Cookbook - 添加设置卡片。
常见问题
**一个 dsh plugin 由四部分组成:能力、设置命名空间、权限声明与依赖。** 能力是它注册的工具与命令,设置是它在设置页里暴露的配置项,权限是安装期与运行期两条边界,依赖是它带进来的包与它要求的服务。读懂了这四件,就能判断它会不会动你的文件和配置。
**dsh plugin 的设置项由插件自己声明,落在 Web UI 设置页的「Plugins」区。** 插件用 Config schema 声明配置项与默认值、通过 installSection 注册命名空间,浏览器半再把卡片注册到同一命名空间;你手改 cordis.patch.yml 时覆盖要写在 config: 块里,并按整段重写来写,界面与文件改的是同一层。
**判断一个 dsh plugin 会不会动你的东西,看它的工具与权限声明这两件。** 工具决定了它能读写哪些资源,权限声明决定了它需不需要额外授权:工具调用请求更宽档位时会弹审批,安装期要求 allowBuilds 的包则在那时就以你的身份执行代码,没审过源码不要放行。
**不是一回事,dsh plugin 的依赖分两层:包自己的 dependencies,和它在 profile 里留下的依赖记录。** 前者随插件包分发,后者写在 profile 目录的 package.json 与 node_modules 里,dsh plugin list 看到的是后者;声明了 dsh.bundle 的包还会被追加进 dsh.profile.bundles,决定它以哪一层被加载。
相关术语
- ctx
- ctx 是 DSH plugin 框架传给 apply 的上下文对象,也是插件访问框架能力的唯一入口:注册工具走 ctx.tools,订阅事件走 ctx.on,交出清理函数走 ctx.effect,读取其他服务走 ctx.get。插件不需要 import 框架内部对象。— https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/user/develop/basic/index.md
- 设置命名空间(settings namespace)
- 设置命名空间是 DSH plugin 暴露配置项的标识:Host 半用 ctx.settings.installSection() 注册命名空间与 Config schema,浏览器半把卡片注册进 settings.plugin.item 槽,两半靠同一个 key 配对,设置页「Plugins」区据此渲染表单。— https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/cookbook/adding-a-settings-card.md
- dsh.bundle
- dsh.bundle 是 DSH plugin 在 package.json 里声明的组合包标记。声明了它的包被 dsh plugin add 安装时,dsh 会把包追加进 profile 的 dsh.profile.bundles 清单,决定它作为哪一层参与启动;没声明 dsh.bundle 的包只是普通依赖,不会激活配置层。— https://github.com/deepseek-ai/deepseek-harness/blob/master/apps/cli/README.md
- sandbox_permissions
- sandbox_permissions 是 DSH plugin 工具调用携带的权限档位参数,用于在工作区写入与完全访问等档位之间请求授权。它只允许朝更宽的方向变化,取值必须配上 justification 说明才能通过校验,越宽越容易触发人工审批。— https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/cookbook/adding-a-settings-card.md
来源
- DeepSeek Harness 官方文档 - 你的第一个插件· deepseek-ai
- DeepSeek Harness 官方文档 - 工具(defineTool)· deepseek-ai
- DeepSeek Harness 官方文档 - 插件配置(Config schema)· deepseek-ai
- DeepSeek Harness 官方 Cookbook - 添加设置卡片· deepseek-ai
- DeepSeek Harness CLI README(dsh plugin 与 profile 依赖)· deepseek-ai