DeepSeek Harness 专家子代理委派预设——编排器 + 5 个角色(oracle/designer/fixer/explorer/librarian),每个角色独立配置模型、effort、工具过滤、限定范围的 MCP…
42.4/100
综合分
18
GitHub 星标
414
npm 周下载
—/5
用户评分
数据截至 2026/10/31 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add oh-my-dsh-slimnpm 源 · oh-my-dsh-slim 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 2 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包oh-my-dsh-slim @ 0.8.7
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/1 12:53:05
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件
查看扫描证据(共 9 处,展示前 9 条)
- 读取本地文件preset/preset.js:687
const text = readFileSync(createRequire(base).resolve('@deepseek-ai/dsh-base/cordis.patch.yml'), 'utf8'); - 读取本地文件preset/config.js:120
return JSON.parse(readFileSync(path, 'utf8')); - 读取本地文件preset/config.js:145
if (!existsSync(path)) return undefined; - 读取本地文件preset/config.js:303
user = existsSync(envPath) ? readJson(envPath) : {}; - 读取本地文件preset/config.js:313
user = path && existsSync(path) ? readJson(path) : {}; - 读取本地文件lib/config-settings.js:10
const factoryDefaults = JSON.parse(readFileSync(new URL('../preset/defaults.json', import.meta.url), 'utf8')); - 读取本地文件lib/config-settings.js:49
const defaults = JSON.parse(readFileSync(new URL('../preset/defaults.json', import.meta.url), 'utf8')); - 读取本地文件lib/config-settings.js:98
if (!entry || typeof settings.update !== 'function' || !existsSync(path)) return false; - 读取本地文件lib/config-settings.js:101
const document = JSON.parse(readFileSync(path, 'utf8'));
扫描于 2026/11/1(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-agent-preset@deepseek-ai/dsh-agent-preset-registry@deepseek-ai/dsh-app-boot@deepseek-ai/dsh-llm@deepseek-ai/dsh-sandbox@deepseek-ai/dsh-session@deepseek-ai/dsh-tool-subagent@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 专家子代理委派预设
- 编排器加五角色
- 角色独立配置模型工具
最近更新
在 GitHub 查看全部 →v0.8.72026-10-30
· [0.8.7] — 退役的主机行只损失一个工具,不影响整个预设
DSH 0.2.1-rc.5 兼容性检查,以及 #10 背后的故障模式:已安装主机不再提供的一行上游条目,过去会让整个预设卸载。
· 0.2.1-rc.5 不要求改动 effort。上游各版本改动都很窄:rc.4 修复诊断信息泄漏进 ACP stdout 的问题(DeepSeek 账号适配器里 console.info → console.error),rc.5 只改思考内容的显示方式。与 rc.3 相比,承载 effort 面的六个包——dsh-llm、dsh-llm-deepseek、dsh-llm-pi-ai、dsh-subagent、dsh-agent-loop、dsh-tool-subagent——逐字节相同,dsh-base/cordis.patch.yml 也一样。effort 词表(DeepSeek 适配器上是 off/low/high/max,pi-ai 上是 off/minimal/low/medium/high/xhigh/max)、defaultEffort 推导、resolveCallConfig 里拒绝不支持 effort 的规则、父→子 maxTokens 复制,行为都与 rc.3 完全一致,所以跟随、锁定、回退和钳制都没受影响。整个主机只有十个 JavaScript 文件不同,全在客户端 UI、账号日志和一处 mcp-client resources/list 能力守卫。
· 由主机决定的行跟随主机自己的组合。resolvedDefinition 过去用 requireHost.resolve 解析每一行。上游一度把 list_agents 并进 @deepseek-ai/dsh-tool-subagent-control 主入口,退役的 /list-agents 子路径就从 apply() 里抛出 ERR_PACKAGE_PATH_NOT_EXPORTED,预设条目从未激活,用户丢了全部六个角色却一无所获——不是「少一个工具」,是整个预设。HOST_DECIDED_ROWS 里的行现在读取已安装的 dsh-base/cordis.patch.yml:只有主机仍声明该行时才挂载,能力一旦上移到上游就静默消失(挂我们这份副本往好里说是冗余,往坏里说会把 list_agents 注册两次)。base 补丁读不出来时保留旧行为,而不是往最坏处假设。
· 逃出组合的行跳过,不致命。如果主机仍声明该行,但它的条目解析不了(ERR_PACKAGE_PATH_NOT_EXPORTED 或 MODULE_NOT_FOUND),只丢掉那一行,一条警告说明丢了什么。其他行照旧大声报错:静默丢掉 tool-fs 的预设看着健康,其实不健康。
· 已验证主机。VERIFIED_HOST_VERSIONS 现在列出 0.2.1-rc.5、0.2.1-rc.3、0.2.1-rc.2 和 0.2.0-rc.2。七个已安装主机冒烟测试在 0.2.1-rc.5 上全部通过,包括 model-switch(路由重写、effort 回退、maxTokens 钳制)和 web-host(全部六个配置档端点、打包保存、重启持久化)。
v0.8.62026-10-29
· [0.8.6] — 输出上限属于模型,不属于角色
0.8.5 的后续:去掉最后一处对模型能力的角色级猜测——它能产出多少输出 token。
· 不再内置 maxTokens。RUNTIME_DEFAULTS 只保留 temperature;六个委派角色和 council 家族不再带默认输出上限。跟随的角色用会话的上限,固定的路由用目标模型自己的默认值。旧值(oracle 128000、fixer 96000 等)在上游没有对应物——oh-my-opencode-slim 根本没有 maxTokens 概念——每次「角色预算超出模型限制」的失败都能追到它们身上。
· 固定的路由绝不继承会话的上限。宿主会无条件把父级的 maxTokens 复制给子级;当固定路由指向另一个模型时,请求现在会丢掉这个上限,而不是发送一个属于别的模型的值。用户显式指定的上限仍然优先,并钳制到目标模型声明的默认值。
· 卡片。高级「Max tokens」字段初始为空,并说明空值在两种状态下各是什么意思(跟随,或固定模型用自己的默认值)。高级折叠区现在是一个带文字的按钮,不再是纯图标按钮,图标在 0.2.1 宿主上也能解析:这些宿主导出 Icon…Outline(Medium|Regular),没有 16/14 后缀,而基础代理过去对每个未知名称都回一个替身组件,于是名称回退链停在第一个候选上。结果是一张完全看不到高级区的卡片——而那是设置输出上限的唯一入口——外加看不见的警告图标。两者都已修复,卡片测试套件现在锁定全部三代宿主。
· 卡片布局。共享的 Field 默认是横向控件行;在列容器里复用时,它的 1 1 160px 变成了 160px 高的下限,在席位提示词框下面(以及新建配置档对话框里)留下一片空白。列中的 Field 现在会退出该默认。提示词文本域也不再继承单行高度 30 和 content-box 宽度——那让它贴住顶部、溢出卡片内边距——合成器的提示词也标为合成提示词,而不是席位提示词。
· council 警告现在会权衡席位提示词。「重复样本」原先只由模型推导,所以角色开始继承会话模型后,卡片对每个默认配置都报警——哪怕三个席位提示词确实不同。模型相同且提示词相同才给出普通警告;提示词不同则降级为「角度不同,但同一模型的样本仍相关」。席位提示词提示也说明空字段是什么意思(主模型按任务分配焦点)。
· 保存卡片不再卡在过期的修订栅栏上。写入用的是 React 状态里捕获的修订号;一次被接受的变更会把它推高,随后的设置行重启又可能在下次渲染前再推高一次。下一次保存就被拒为「在另一个窗口中被修改」——之后每次重试也一样,哪怕用户删掉了看起来是触发点的那个值。栅栏现在从作用域实时读取,被拒时重试一次,失败的尝试会重新同步快照,所以手动重试从宿主实际持有的状态开始。提示也不再让用户手动刷新。
· 输入的输出上限按数字写入。高级输入框报的是字符串,而配置文档要求正整数(Number.isSafeInteger),所以 maxTokens 过去被原样写成 "384000"——宿主拒掉整份文档,卡片看起来什么都存不了,清空字段后也一样(那会写入 '')。规划器现在会转换两个数值型高级字段,并把清空的框当作未设置。
· 升级。显式设置 maxTokens 的配置档保留它。依赖已删除默认值的角色,跟随时用会话上限,固定时用模型默认值;无需迁移步骤。
· 验证。184 个测试(对已安装宿主 184 通过 / 0 跳过)和 T0。模型切换套件锁定新规则:固定路由指向另一个模型时丢掉会话上限,固定路由指向会话模型时保留它,显式角色上限会被应用并钳制到目标模型声明的默认值——包括会话的首次请求,那里不会跑重路由。所有冒烟在三条宿主线上通过——0.2.0-rc.2、0.2.1-rc.2 和 0.2.1-rc.3——即 host-smoke、role-composition、council、council-resume、real-role-row、model-switch 和 web-host(发布前重跑 21/21)。卡片套件覆盖这个补丁抖出的四个缺陷(宿主图标代际、列中的 Field、过期的写入栅栏、字符串类型的数值字段)。
· 桌面验证(0.2.1-rc.3,omds-test + 内置配置档)。跟随在实时对话中采纳了会话的路由/级别/上限(glm-5.3-flash 131072 → deepseek-v4.1-flash 384000,未新建会话)。固定路由指向另一个模型时不再继承会话上限(mimo-v2.6-pro 按自己的 131072 运行,而不是 384000)。显式上限表现正常:200000 保留,mimo-v2.6-pro 上的 3840
v0.8.52026-10-28
· [0.8.5] — 角色默认继承会话模型
补丁版本,实现 ninipa/oh-my-dsh-slim#11:子代理跟随会话的主模型,除非你为某个角色固定指定,与 oh-my-opencode-slim 的默认行为一致。
· 不再预置路由,不再预置思考强度。defaults.json 不再为六个委派角色设置服务商/模型或思考强度(deny、mcps 和 council 系列不变)。全新安装后,委派使用会话的模型和思考强度;把 oracle 固定到更强的模型或更深的级别,仍是每个配置档各自的选择。
· 「继承会话模型」是一等选项。角色模型下拉框以它开头,未配置的角色会显示实际行为,而不是目录提示(「未找到模型……」),后者现在是禁用条目,不再作为选中值。选中它会同时清除两半——这是从先前固定的模型回退的唯一方式——并且作为默认联动,在同一次编辑中把角色的思考强度设为「跟随」,这样过时的固定级别就不会撞上下一个主模型。
· 路由是服务商和模型,要么都有,要么都没有。config.js 丢弃半截路由(每个角色在 stderr 提示一次),roles.js 只在成对时才转发 agentOptions.provider/model,subagent-roles 在任一半缺失时保留宿主已解析的路由——一个服务商的 id 绝不会和另一个服务商的模型 id 配对。
· 思考强度随路由走,降级而不是失败。角色继承模型时,其思考强度不再固定进子进程的启动选项,而是按请求应用。宿主会用生效模型预检启动时的子进程选项,遇到不支持的级别就拒绝委派,所以以前在主模型上开新会话、而该模型没有角色的级别时,工具调用会直接失败。现在支持的级别会应用,不支持的级别在该模型声明了会话自身级别时回退到它,再不行才回退到模型默认值——只给一条警告。固定路由仍可向宿主携带显式级别(卡片会针对那个确切的模型校验)。下拉框的 none 条目显示为「跟随会话(未指定)」,off 显示为「关闭思考」——原始 token 看起来像模型级别,而只有 off 才真正关闭思考。它的说明行会感知路由:继承的路由跟随会话级别,固定的路由使用模型默认值(路由变更时宿主会丢弃继承的级别)。「选择……」行现在是禁用的不匹配标记,只在存储的级别不在所选模型的声明中时显示;它不能再被选来清除设置。同一规则现在也覆盖 maxTokens:继承的路由保留会话自身的输出上限(卡片禁用高级字段),固定的路由保留角色的预算。温度、工具、提示词和 MCP 仍按角色设置。
· 跟随是实时的,不只对新会话生效。没有路由的角色会在每次请求时从父级请求头重新读取委派会话当前的路由、思考强度和输出上限(子会话记录 parentSession;该请求头也是宿主在启动时解析子进程所用的同一来源)。没有这一点,角色工具挂载时的 agentOptions 会在整个对话中保留旧的固定值,把角色切到「继承」看起来就像没生效,直到开新会话。固定路由的重新路由本来就是这样工作的;跟随现在与之一致。父级缺失或不可读时,回退到宿主已解析的路由。
· 升级。固定了路由或级别的配置档和 JSON 文档会保留它们。未固定的角色——以及未设置的级别——升级后跟随会话模型和思考强度;无需迁移步骤。在卡片中把角色切到「继承」会清除其固定级别。
· 验证。179 项测试(在已安装宿主上 179 通过 / 0 跳过;无宿主时 173 通过 / 6 跳过)和 T0。卡片新增了 issue-#11 检查(继承选项、清除两半、半截路由草稿、目录提示);package.test 固定新的默认值和半截路由丢弃;host-smoke/web-host-smoke 现在固定成对的值,以便走有效路由。model-switch.test 覆盖会话中途跟随(从父级采纳路由、级别和上限;丢弃过时值;容忍不可读的父级)。所有冒烟测试在三条宿主线上通过——0.2.0-rc.2、0.2.1-rc.2 和 0.2.1-rc.3——即 host-smoke、role-composition、council、council-resume、real-role-row、model-switch 和 web-host(全部 WEB_* 哨兵)。model-switch-smoke 还固定了跟随路径读取的三个宿主原语:parentSession、agents.get、父级请求头。冒烟测试框架现在把已安装宿主的 @deepseek-ai 作用域链接进临时配置档;没有它,每个裸宿主导入都会解析到空配置档,host-smoke 停在版本检测——0.8.4 基线以同样方式失败,这证明缺口只在测试框架,而非产品回归。桌面验证:同一对话两次切换主模型,三次实时委派都跟随了会话路由、思考强度和输出上限。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成oh-my-dsh-slim
oh-my-dsh-slim · 0.8.7 · DSH 0.2 兼容版本线
在 DeepSeek Harness(DSH)中适配 oh-my-opencode-slim 的角色委派体系: orchestrator + 5 个启用的专职角色,交付为从插件组合包挂载的声明式原生 agent 预设,不是独立应用,也不需要手工复制预设目录。
宿主范围:>=0.2.0-rc.2 <0.3.0-0;实测宿主:DSH 0.2.0-rc.2、0.2.1-rc.2、0.2.1-rc.3 与 0.2.1-rc.5。
门禁是 per-core 白名单:0.2.0 与 0.2.1 的预发布/稳定/后续补丁放行;更高 minor 或更高补丁的预发布 core(例如 0.2.2-rc.1)会被拒绝,直到有版本明确放行。
升级策略:所需 API 不变时维持 0.2 版本线兼容,验证新宿主后才宣称实测支持;0.3 版本线另行审查。
DSH ≤0.1.5 请继续使用 oh-my-dsh-slim@0.5.3。 中间版本需要升级 DSH。
0.6.1 已通过 101 项自动测试、六项隔离已安装宿主基础组合 smoke,以及 web 组合传输层五项哨兵(web smoke 已在普通 npm/CLI 宿主上独立复现)。
展开完整文档(README 剩余 1 节)
oh-my-dsh-slim
oh-my-dsh-slim · 0.8.7 · DSH 0.2 兼容版本线
在 DeepSeek Harness(DSH)中适配 oh-my-opencode-slim 的角色委派体系: orchestrator + 5 个启用的专职角色,交付为从插件组合包挂载的声明式原生 agent 预设,不是独立应用,也不需要手工复制预设目录。
宿主范围:>=0.2.0-rc.2 <0.3.0-0;实测宿主:DSH 0.2.0-rc.2、0.2.1-rc.2、0.2.1-rc.3 与 0.2.1-rc.5。
门禁是 per-core 白名单:0.2.0 与 0.2.1 的预发布/稳定/后续补丁放行;更高 minor 或更高补丁的预发布 core(例如 0.2.2-rc.1)会被拒绝,直到有版本明确放行。
升级策略:所需 API 不变时维持 0.2 版本线兼容,验证新宿主后才宣称实测支持;0.3 版本线另行审查。
DSH ≤0.1.5 请继续使用 oh-my-dsh-slim@0.5.3。 中间版本需要升级 DSH。
0.6.1 已通过 101 项自动测试、六项隔离已安装宿主基础组合 smoke,以及 web 组合传输层五项哨兵(web smoke 已在普通 npm/CLI 宿主上独立复现)。用户接受中文待办网页的桌面委派复测为成功;尚未完成完整工具轨迹审计、浏览器渲染或在线 MCP 验收。安装或更新后必须完整重启 DSH。
Persona 适配自 oh-my-opencode-slim(MIT © 2025 alvinunreal),保留署名。
见 LICENSE。English version: README.md。
0.8.7(2026-10-30):一行被上游退休,代价只该是一个工具,不是整套预设。 已验证 DSH 0.2.1-rc.5:它的思考强度接口与 rc.3 逐字节相同(rc.4 只修了 ACP 模式下诊断输出混入 stdout, rc.5 只改了思考内容的展示方式),所以这一版没有 effort 相关改动。修的是 #10 背后的故障模式:resolvedDefinition 用 requireHost.resolve 逐行解析,只要有一个 @deepseek-ai/ 子路径不在了,异常就从 apply() 抛出,整个预设条目不再激活——一个被退休的导出干掉了六个角色。现在「这一行在不在」由宿主决定的行(目前是 list_agents)会跟着宿主 base 补丁走:宿主不再声明就静默省掉,声明了但入口解析不到就只跳过该行并警告一次;其它行仍然照旧硬失败——一个悄悄少了 tool-fs 的预设看起来健康,其实不是。
0.8.6(2026-10-28):输出上限归模型,不再归角色。 出厂不再给任何角色预置 maxTokens:跟随会话时用主对话的上限,固定模型时用该模型自己的默认上限,只有你在「高级」里显式填了才按你的值(超过模型声明的默认值会被 clamp)。固定到另一个模型时,子代理不会再继承主对话的 token 上限。
原来的 oracle 128k / fixer 96k 等数字是本项目自造的(oh-my-opencode-slim 没有这个概念),也是「角色预算超过模型上限」这类失败的根源。完整说明见 CHANGELOG.md。
0.8.5(2026-10-28):角色默认继承会话模型。 随包不再给六个角色指定 provider/model,也不固定思考强度:没有在卡片里选模型时,子代理跟随当前会话的主模型与档位;选了具体模型/档位才算覆盖。
模型下拉的第一项就是「继承会话模型」,选回它即清除两半路由并同时把档位切回跟随。路由必须成对出现,只有一半的配置会被忽略并写一条提示。跟随是实时的:已存在的会话里改回继承,下一次子代理请求就会改用主对话当前的模型、档位和 token 上限,不必新建会话。修复 #11。完整说明见 CHANGELOG.md。
0.8.4(2026-10-23):换角色模型时的思考强度兼容。 思考强度下拉不再显示配置里并不存在的档位:已保存但不被新模型支持的档位会显示为「请选择」占位项,红字点名该档位,重选后一次点击即可生效。
已禁用的角色不再阻塞保存;已保存但挂载模型不支持的档位,会在请求时降级并写一条 warn,而不是让委派失败。修复 #9。
完整说明见 CHANGELOG.md。
角色与委派
| 角色 | 工具 | 模型 | 思考强度 | 权限 |
| oracle | subagent_oracle | 继承会话模型 | 跟随会话 | 只读 |
| designer | subagent_designer | 继承会话模型 | 跟随会话 | 可写 |
| fixer | subagent_fixer | 继承会话模型 | 跟随会话 | 可写 |
| explorer | subagent_explorer | 继承会话模型 | 跟随会话 | 只读 |
| librarian | subagent_librarian | 继承会话模型 | 跟随会话 | 只读 + 角色作用域 MCP |
- oracle 负责架构、复杂排障与评审;designer 负责 UI/UX;fixer 负责有边界的实现;explorer 负责代码勘察;librarian 负责外部调研。
- 模型默认跟随当前会话的主模型(0.8.5):随包不预置 provider/model,在卡片的模型下拉里选一个具体模型才会固定;下拉第一项「继承会话模型」可随时切回。provider 与 model 必须成对配置,只有一半时会被忽略并按继承处理。跟随按每次请求重读主对话的当前配置,所以在运行中的会话里改回继承或换主模型,下一次委派就生效,不需要新建会话。真实请求需对应 provider 的凭据。
- 思考强度默认也跟随会话:出厂不固定档位,在卡片里选了具体档位才算覆盖。换主模型后档位不被支持时委派仍会成功:先退回会话档位(该模型声明过时),再退回模型默认,并记一条 warn。档位下拉里 none 显示为「跟随会话(不指定)」、off 显示为「关闭思考」;把模型切回继承时,该角色的固定档位会在同一次编辑里自动清为跟随。固定了模型的角色仍按该模型校验。
- 输出上限归模型,不归角色(0.8.6):角色不预置 maxTokens。跟随会话时用主对话的上限;固定模型时默认用该模型的默认上限,卡片「高级 → token 上限」留空即可,填了才生效(超过模型声明的默认值会被 clamp);固定到另一个模型时不再继承主对话的上限。温度、工具、提示词、 MCP 等角色属性不跟随,它们与模型能力无关。
- 角色继承全局工具,只读角色 deny edit/write;全部角色 deny 控制类工具(skill、job_kill、 job_list、job_output、todo_write、ask_user_question),禁止继续委派(maxDepth: 1)。
- observer 预留但强制关闭:委派提示是纯文本,宿主按主模型视觉能力门控粘贴图片。
附件转发尚未支持时,请直接使用支持视觉的主模型。
委派默认后台且可续聊。独立任务一起派发,主代理不能重做运行中子任务或把中间回报当成完成。
reported 不等于 settled;正式结束通知后再整合。subagent_result 只读已结束子代理最终消息,不唤醒子代理、不消耗额外模型回合。
Council 议会(0.8.0)
三个只读议员席位加一个零工具合成器:把同一个问题交给多个模型独立分析,再合成一份带共识等级的报告。默认全部关闭;至少启用 2 个议员才算 Council,只开 1 个时该席位是普通只读委派。
| 角色 | 工具 | 权限 | 默认 |
| councillor-alpha / beta / gamma | subagent_councillor_alpha / … | 只读(read/glob/grep,固定上限,只能收窄) | 关闭 |
| council | subagent_council | 零工具(合成专用) | 随席位派生 |
- 在设置卡片的 Council 分组里给每个议员选 provider/model/思考强度;建议三席使用不同模型。
- 未配置 provider/model 的席位继承当前会话模型;如果所有席位都继承,议会只是同一模型的重复采样,卡片会给出提示。
- 合成器没有独立开关:≥2 席启用时自动挂载;席位全关时整个 Council 不出现(工具与提示段都没有)。
- 席位与合成器都不能使用 MCP(配置会拒绝 mcps),外部资料由主代理先抓取后放进问题里。
- 席位提示词可在席位的“高级”里追加(personaAppend);提示词按字面量渲染,不要写 {{变量}}。
- 用法:在新会话里明确说“用 council 评估 …”或“让几个模型分别看 …”。编排模型会在同一条消息里并行派发、等全部席位返回后再调用合成器;普通问题不会自动触发,成本敏感时可直接说“不要用 council”。
- 成本:一次 Council 至少 4 个模型会话(3 议员 + 1 合成),是系统里最贵的路径,按需使用。
- 限制:固定 3 席;不支持任意席位数与模型 fallback 链;没有 @council 提及路由(用自然语言)。
Council 段只注入顶层会话;冷恢复后的席位仍保持只读。
- 排障:如果卡片显示 Council 已启用但新会话里没有 subagent_councillor_ / subagent_council,先确认是新会话;宿主日志里的 omds-council-mode 警告会说明是席位工具还是合成器没有挂上。
- 其它已知边界:一次 Council 占用 3 席 + 1 合成器,与其它后台 lane 共享宿主 maxActiveSubagents(默认 8);没有代码级超时或 kill-switch,卡住时需自行中止;per-seat MCP 是有意禁止(MCP 会绕过 tools.restrict)。
安装已发布版本(随后重启)
桌面 App 的 desktop profile 只能通过桌面插件管理器管理,不能使用 dsh plugin --profile desktop。在管理器的安装入口填写固定版本:
oh-my-dsh-slim@0.8.7
请按发布说明中的明确版本安装,不要依赖浮动 tag,也不要替换为持续变动的开发分支。
0.6.1 属于 DSH 0.2 版本线;DSH ≤0.1.5 用户继续留在 0.5.3。官方源码与发布标签见 ninipa/oh-my-dsh-slim。
以下 CLI 命令仅适用于非桌面管理的 profile:
dsh plugin --profile <profile> add oh-my-dsh-slim@0.8.7
本地 checkout 也可——安装仓库根目录即可,其 export map 提供与发布包相同的模块:
dsh plugin --profile <profile> add /path/to/oh-my-dsh-slim
dsh plugin 安装到 $DSH_HOME/profiles/<profile>/,并归并进 profile 的 dsh.profile.bundles 层列表。执行前请确认 DSH_HOME 是目标部署实际使用的 home;桌面 App 可能使用隔离 home 而非 ~/.dsh。
安装或后续更新后完整重启 DSH,然后在原生 设置 → Agent 预设 中选择「极简角色委派」新建会话。
插件代码每宿主进程只挂载一次,仅新建会话不会加载更新代码。以上命令是操作说明,不代表本次已修改正在运行的用户安装。
- 更新:从官方发布说明选择已发布的明确版本。rc.2 桌面管理器可能要求先卸载再安装;请先备份设置,卸载时保留配置,完成后重启 DSH。
- 卸载:dsh plugin --profile <profile> remove oh-my-dsh-slim,然后重启。
不会播种预设目录;移除包不承诺删除原生用户设置或保留的旧 JSON。
- DSH ≤0.1.5: 使用 oh-my-dsh-slim@0.5.3,按该历史版本的说明安装。
本 0.6.x 版本线要求 DSH ≥0.2.0-rc.2;0.1.6/0.1.7 用户需要升级宿主。
仓库结构
- 仓库根:本地 checkout 安装时使用的包清单,其 export map 提供与发布包相同的模块;
- npm-package/:发布包内容(npm 实际收到的就是这个目录);
- test/:单元/契约测试,以及两套可选的已安装宿主 smoke;
- legacy/v0.5.3/:历史目录式预设线,保留用于对比基线。
原生预设与设置
组合包补丁声明 preset-oh-my-dsh-slim(@deepseek-ai/dsh-agent-preset 行)与 profile 平面的伴生行 omds-seeder。预设的 config.plugins 就是其插件列表。各行以包的导出子路径命名(oh-my-dsh-slim/preset、oh-my-dsh-slim/profile-registry、oh-my-dsh-slim),由宿主的
export map 解析;只有包根入口贡献浏览器客户端模块。
不会创建 $DSH_HOME/.agent-presets/ 目录。
伴生行声明带 volatile 可编辑字段的宿主原生 Config schema,设置服务可描述并将修改持久化到当前 profile。这不证明桌面 GUI 已自动渲染角色配置表单;宿主文档说明 autoGenerate 元数据尚无随附客户端使用。因此恢复的是历史自定义卡片,通过 rc.2 的 configForms 与设置外壳的 settings.section 插槽接入(0.2 桌面就是用它渲染插件配置页),并保留原编辑助手与 revision 防冲突写入。卡片默认展开,模型下拉取自宿主自己的模型目录。/omds 命名配置采用本包专有配置行持久化及原生 registry 重建;隔离真实宿主已验证创建/保存、防冲突、既有上下文隔离、原生默认选择和重启恢复。卡片也支持删除配置:只有已持久化的自定义配置显示该按钮,删除前有独立确认弹窗;宿主端点会拒绝内置预设、外部原生 id、当前新会话默认以及过期的 revision。删除会从配置字典里移除记录,因此该预设也会从宿主 registry 中消失。浏览器渲染及在线模型/MCP 尚未针对本纠正版重新验收。默认会话预设通过宿主原生 Agent 预设设置选择。
完整差异见 兼容审计。
命名记录改存于当前 profile 的 patch,不再复制预设目录;卸载本包后不再注册其定义。这不会自动删除旧 JSON 或旧预设目录,也不会自动导入/改写旧目录。新声明式记录没有旧 persona 重写问题,因此迁移接口返回未变更结果;它不是旧目录导入器。
配置优先级
零配置使用随包默认值。覆盖来源按优先级从高到低:
1. OH_MY_DSH_SLIM_CONFIG 指定文件(测试/CI)。
2. 当前命名预设的持久化配置文档(包含空快照),或挂载副本旁存在的旧 profile.json 快照。
3. DSH 原生插件设置 oh-my-dsh-slim。
4. 无可用原生设置文档时回退到旧 $DSH_HOME/oh-my-dsh-slim.json。
5. 随包 defaults 与运行时基础值。
旧 JSON 仅在原生 user layer 为空时导入,绝不覆盖已有原生用户设置。导入会校验内容及 revision,失败只警告并跳过。原 JSON 无论成功与否都不会被修改、改名、归档或删除。
显式测试文件或旧 profile 快照可优先于原生表单;如期待 GUI 修改为权威值,请先移除这些覆盖。
旧命名配置与紧凑角色配置都接受,例如:
{
"preset": "my-dsh-normal",
"roles": {
"oracle": { "provider": "deepseek-official", "model": "deepseek-v4-pro", "effort": "max" },
"librarian": { "mcps": ["context7", "gh_grep"] }
},
"mcpServers": {
"context7": { "transport": "streamable-http", "url": "https://mcp.context7.com/mcp" },
"gh_grep": { "transport": "streamable-http", "url": "https://mcp.grep.app" }
}
}
- 紧凑 roles 高于 presets[<name>];advanced.roles.<roleId> 最后合并。
局部覆盖保留随包角色字段;文档选择阶段数组整体替换,角色 deny 合并以保留限制。
- 角色键包括 enabled、provider、model、effort、temperature、maxTokens、tools、 deny、mcps、personaAppend。非空 tools 为穷举白名单;空数组表示未配置,不是禁止全部工具。
- provider 与 model 必须成对出现:上例中的路由只是示例(随包不再预置);省略两者或只写一半都表示继承会话模型,只有一半时会丢弃并写一条启动提示。
- effort 只校验 token 形状,不限于随包 off/low/high/max。委派时检查模型元数据并报告不匹配。
修改 effort 时校验;模型元信息查询失败保留原版 fail-open 行为。none 保留宿主已解析的 effort。
- 模型、effort 与 temperature 在每次委派请求时重读:保存卡片后,当前会话的下一次子代理请求即使用新模型。token 上限与角色启停仍需新会话。这不意味着插件安装可以实时生效。
官方角色作用域 MCP 已恢复
原生角色 MCP 行把宿主自己的 @deepseek-ai/dsh-mcp-client 挂载到对应角色的准确 Agent context。
每个角色的 mcps 从 mcpServers 选择连接;默认 librarian 选择 context7 与 gh_grep。
这是实际的作用域原生客户端挂载,不再只是 persona 提示或配置声明。官方客户端负责 transport、工具、资源、prompt 与重连;预设只负责作用域选择、就绪屏障及释放。
MCP 启动语义按原版保留:仅可续聊后台子代理挂载,首次提示组装最多等待 20 秒,连接失败不阻断首个模型请求;刷新首次工具快照,后续轮次不重复等待。8 项 scope 生命周期回归通过,覆盖快照刷新、失败开放、超时及清理。在线远程 MCP 连通性与 provider/MCP E2E 仍未验证。
MCP 服务可用性、鉴权与定价不是本包保证。
MCP 信任边界:Agent 本层注册的 MCP 工具不受继承 toolFilter 限制。
只读角色策略限制的是继承的内置工具,不会自动把任意配置的 MCP 服务器变成只读。
当前批准的默认 context7/gh_grep 是调研工具。添加具备写入/修改能力的 MCP 前需信任服务器并检查工具,不要把角色的「只读」标签当成防止远程副作用的通用保证。
验证与边界
npm test
运行仓库的 node --test test/*.test.mjs 单元/契约测试,涉及包结构、原生设置与导入安全、角色路由、请求/结果处理、生命周期及 MCP 作用域。mock 宿主、provider 与 MCP 的测试不是真实 provider 验收。
历史对比基线随仓库收录于 test/fixtures/upstream-v0.5.3/,以固定原始 Git blob 哈希核验;测试不依赖 .git 或完整克隆历史。需要已安装宿主参照物的集成用例在参照物缺失时显示明确跳过原因。
semver 固定为开发依赖,版本范围交叉校验不再依赖 npm 自带副本。
基础 smoke 直接调用 profile 后端,不验证 /omds 的 HTTP 路由注册。
传输层验收可单独运行 test/web-host-smoke.cjs:将 DSH_HOST_ANCHOR 设为已安装 DSH 的绝对 JS 入口,使用该宿主 Node 运行时;打包 Electron 需 ELECTRON_RUN_AS_NODE=1 和 --expose-internals。
它组合真实 dsh-web-app,使用隔离 home/profile 与回环临时端口,不替换当前 GUI。
已安装 rc.2 的 web smoke 六项哨兵全通过:鉴权与 Host/Origin 栅栏、六个 profile RPC 方法(含删除)及冲突处理、无效协议 envelope、完整重启后的持久化,以及路由卸载;两次启动均断言所有启用的宿主行处于 active 状态。
测试使用实际发布包 patch;非客户端导出子入口避免重复客户端模块所有权。
尚未验收浏览器视觉渲染、真实浏览器客户端执行或进行中的 HTTP 取消。
另行完成的真实打包 DSH 0.2.0-rc.2 无网络 smoke 已通过:使用已安装 ASAR 的 Electron 44 / Node 24,隔离 DSH_HOME,启动 dsh-base、原生预设 registry、伴生行与预设;角色 roster 及完整组合 registry.resolve 健康、无 broken 行。没有修改桌面用户安装,也没有 LLM、provider 或 MCP 网络请求。
这只证明打包加载与原生宿主组合接入,不等于真实 provider E2E,也不证明 context7/gh_grep 远程工具可用。
后续 E2E 需要凭据、网络及明确安装并重启过的目标 profile。
其他边界:
- sandbox-strip 剥离固定权限子代理中的无效升级字段;合法顶层升级仍受宿主审批控制。
这是预设 workaround,不是上游权限模型修复。
- early-close-context 提供 running/reported/settled 事实与提醒,但不能强制模型等待或保证遵守。
- web_search 使用宿主搜索服务,可能产生独立辅助模型费用;web_fetch 走宿主抓取器,不产生模型调用。
- 宿主模块从 loader 自身 base 与模块实例导入,涵盖打包桌面解析。
研究过 Lyrissonare 的 discovery workaround,但本包 不依赖该 fork 或其包。
署名与历史
- oh-my-opencode-slim(MIT © 2025 alvinunreal):角色体系与 persona 来源。
- ninipa/oh-my-dsh-slim:上游 DSH 移植(本仓库)。
- E2E-AK-OI/oh-my-dsh-slim:通过 cherry-pick 引入的 native foundation,保留原作者署名。此为来源说明,不代表本次兼容性更新完成了 E2E 验证。
- Lyrissonare/oh-my-dsh-slim:研究 discovery workaround,未引入运行时或包依赖。
- Henry-916/oh-my-dsh-slim:0.6.x 原生兼容性更新的贡献者(已作为 PR #3 合并)。
- DeepSeek Harness:宿主平台。
当前兼容性变更与明确标记的上游历史记录见 CHANGELOG.md。许可证:MIT。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
ninipa/oh-my-dsh-slim
DeepSeek Harness 专家子代理委派预设——编排器 + 5 个角色(oracle/designer/fixer/explorer/librarian),每个角色独立配置模型、effort、工具过滤、限定范围的 MCP…
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 21,780未汉化DSH
73.5
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 1,947已汉化MCP
72.7
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,347已汉化DSH
71.9
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13917 个插件含 PR 收录与…
★ 343已汉化DSH
71.6