在 DSH WebUI 中为技能、MCP 服务器、工具、提示词注入、审批升权和安全守卫提供会话、项目与全局三级控制,并在当前 agent 作用域内强制执行。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:lifeopsgo/dsh-capability-toggle-plugin
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
dsh-capability-toggle-plugin
在 DSH WebUI 中控制 agent 能力,并在运行时真正强制执行。
English · 简体中文
会话 · 项目 · 全局 —— 蓝色对勾 = 开,红色叉 = 关,虚线横杠 = 未设。
这是什么
一个 DeepSeek Harness(DSH)WebUI 插件,在输入栏旁增加能力开关。它可以在会话、项目或全局层级控制技能、MCP 服务器、工具、提示词注入、审批升权和安全守卫。
停用不是界面上的假过滤:能力会在模型下一步从可见能力面中消失,强行调用也会在执行时被拦截。
兼容的 DSH 版本
本版本面向 DSH 0.2.0-rc.1,全部 DSH peer 依赖均精确锁定到该 RC。Host 已迁移到 agent/created 生命周期、持久化 configEditor 写入和 Loader volatile 配置更新;每次写入都会重新协调全部仍存活的 agent binding。
| DSH 版本 | 状态 | 验证方式 |
|---|---|---|
| 0.2.0-rc.1 | 支持 | Host 与 Client 类型检查、363 项自动化测试、生产构建、框架链接校验、组合 profile 检查和浏览器验证 |
本版本不声明兼容其他 DSH 版本。
快速开始
需要 Node.js ^22.19.0 或 ≥ 24.0.0(与 DSH 0.2.0-rc.1 相同)。
dsh plugin --profile web add github:lifeopsgo/dsh-capability-toggle-plugin#v2.0.0
dsh --profile web web
刷新页面,在 agent 空闲时点击输入栏 ➕ 旁边的开关按钮。若使用其他 profile,请替换 web。
# 升级或降级:tag 换成 releases 页面上的任意版本
dsh plugin --profile web add github:lifeopsgo/dsh-capability-toggle-plugin#v2.0.0
# 卸载
dsh plugin --profile web remove dsh-capability-toggle-plugin
功能说明
三级生效模型
每项能力都有三个独立层级:
会话 › 项目 › 全局 › 默认(启用)
最近的明确设置优先。未设会向下一层跟随;三层都未设时保持启用。行尾徽标始终显示三级综合后的真实结果。
按钮只显示当前状态:点击在开 ↔ 关之间切换,点击右上角清除角标可回到未设。
能力分类
| Tab | 控制内容 |
|---|---|
| 技能 | 单个模型可调用技能,包含从会话工作区发现的项目级技能(.dsh/skills、.agents/skills) |
| MCP | MCP 服务器;展开行可查看成员工具 |
| 工具 | 单个模型可见工具及其指导段 |
| 提示词 | 经过安全筛选并探测实际存在性的提示词注入项 |
| 安全 | 审批升权和 5 个可选安全守卫 |
强制机制
所有机制只作用于当前 agent,不修改全局注册。
| 能力族 | 强制方式 |
|---|---|
tool / mcp |
通过 ctx.tools.restrict({ deny }) 移除;强行调用被拒绝 |
skill |
用同名 modelInvocable:false 运行时技能覆盖 |
prompt |
用空文本覆盖,或通过 suppressRuntimeContext() 抑制 |
approval |
scoped 审批请求直接返回 rejected |
guard |
tools/pre-execute 对命中调用执行拦截或确认 |
安全控制
关闭审批升权后,该 agent 的所有审批请求都会被拒绝,但不会修改系统 /permission 设置。
安全守卫默认关闭,按需启用:
| 守卫 | 动作 |
|---|---|
| 只读模式 | 拦截文件写入、新建和编辑 |
| 保护密钥 | 拦截常见密钥文件与凭据访问 |
| 危险 shell | 高风险 shell 命令需确认 |
| 破坏性 git | 可能丢失历史或工作区内容的 git 命令需确认 |
| 外网出站 | 网络工具与外连 shell 操作需确认 |
用量统计
技能、MCP 服务与工具行会显示一个小徽章,标明本会话模型调用了多少次(「调用 7 次」)。计数在面板打开时于每轮结束后刷新,只存活于单个 agent 生命周期且不持久化——与安全守卫的「命中 N 次」徽章采用同一保留策略。
统计的是请求次数而非成功执行次数:被守卫拦截或转确认的调用同样计入,因为「模型想要用这个能力」本身就是值得看见的信号。守卫是被调用匹配而非被调用,因此沿用自己的徽章、不显示用量;提示词与审批行同样不显示。
面板偏好
面板标题旁的折叠箭头展开三个显示偏好,存入 localStorage,因此刷新页面与重启浏览器后仍然保留:
| 偏好 | 作用 |
|---|---|
| 标签页显示「启用数 / 总数」 | tab 徽章由纯总数改为分数形式(67/106),一眼看出每族能力的启用比例;无论开关与否,悬停提示都以文字给出两个数字。 |
| 显示调用统计 | 控制上文的每行用量徽章是否显示。 |
| 显示的层级列 | 将网格收窄为仅会话级、会话级 + 项目级,或三级全显。 |
分数只把已生效的守卫计入启用数。guard 行复用同一个 disabled 字段表示「已激活」,与其他默认启用族的方向相反——所以审批开关打开、五个守卫都未激活时,安全 tab 显示 1/6 而不是 6/6。
收窄层级列只影响显示:三级优先级解析照常运行,被隐藏的项目级或全局级设定仍然生效。每行的徽章与层级开关始终反映综合解析后的状态——默认启用族显示「生效中/已停用」,守卫显示「守护中/未启用」——因此隐藏一列不会隐藏任何生效影响。名称列会吸收释放出来的宽度;布局由 CSS 变量驱动,因此与窄屏适配保持对齐。
其他行为:agent 运行时,会写入设定的控件锁定——每行的层级开关、其清除徽章、以及批量菜单——但浏览保持可用,因此搜索框、层级列下拉、tab 切换、行展开照常工作;关闭弹窗或跨轮次后状态仍保留;界面语言跟随 WebUI。
规划
以下为规划中、尚未实现:
- 跨项目同步配置 — 从其他项目复制或引用项目级配置,无需逐个项目重新配置。
能力调用统计— 已于 v1.2.0 实现:技能、MCP 服务与工具行会以徽章显示本会话被模型调用的次数。分数格式的 tab 计数— 已于 v1.3.0 实现:tab 徽章改为「已启用 / 总数」,面板标题旁的折叠箭头提供三个显示偏好。安全 tab 的 guard 只有已生效才计入分子,其反转的disabled字段不会虚增启用数。- 可自定义默认项的设置菜单 — 在设置菜单中暴露插件自身的配置项,例如新发现能力的默认状态(当前三层都未设的能力解析为启用,但可选的安全守卫默认不启用)。
- 只显示已启用 / 只显示已禁用 — 在搜索框旁增加状态过滤(搜索当前只匹配名称与描述)。安全守卫需要与分数计数同样的处理:guard 复用
disabled表示「已激活」,因此「只显示已禁用」不能把实际生效中的守卫列进去。该过滤还会缩小批量操作的作用范围,因为批量作用于当前可见的所有行。 筛选与全选— 已于 v1.1.0 实现:工具栏搜索框可筛选行,各层级的批量菜单可对当前可见的所有行执行启用/停用/清除。筛选全选后批量操作— 已于 v1.1.0 与筛选功能一同交付(搜索缩小范围,批量作用于当前可见行)。
链接
同类插件
Tencent/WeKnora#dsh-weknora★ 33047
把 WeKnora 知识库接入 dsh 的四个只读工具:列出知识库、混合检索原文片段、按顺序还原单篇文档,以及直接取用 WeKnora 自己带引用的 RAG 或 ReAct agent 回答(含可续聊的 session id)。
superdesigndev/treg★ 4972
给 Agent 的工具目录:按「要做的事」检索约 2,600 个外部接口(SEO 与 SERP、外链、社交、人物与公司信息补全、广告库、抓取),查看参数与单次调用价格后直接调用,凭据由服务端注入。附带技能,MCP 行在未设置 TREG_TOKEN 前保持禁用。
TencentCloudBase/CloudBase-AI-Toolkit#dsh-plugin★ 1136
把腾讯云 CloudBase 后端接入 DeepSeek Harness——在对话里搭好并部署全栈应用,查询结果渲染为表格卡片(分页、排序、导出 CSV),部署后可预览真实域名,并提供 CloudBase MCP 工具集(`mcp__cloudbase__*`),登录走 device-code 流程。
gitroomhq/postiz-agent#dsh-postiz★ 509
通过 MCP 将 DeepSeek Harness 连接到 Postiz:列出已连接的社交媒体渠道、获取各平台发帖规则,并向 X、LinkedIn、Instagram、Facebook、Threads、TikTok、YouTube、Reddit、Bluesky、Mastodon、Discord、Slack、Telegram 等平台排期、存草稿或发布帖子;附带 postiz 工作流技能。
EthanYoQ/Invoice-Downloader#dsh-invoice-downloader★ 502
面向 DeepSeek Harness 的本地 IMAP 发票下载、OCR 识别、归档与 Excel 报销汇总。
anysearch-team/anysearch-dsh★ 457
基于 AnySearch 的实时网页与垂直搜索插件,为 DeepSeek Harness 提供搜索工具。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。