Skip to content

dsh-subagent-setup

Verified

dsh-subagent-setup · v0.2.1 · MIT · Web UI

给 DeepSeek Harness 的子智能体模型路由:按别名把子智能体委派到指定的子智能体代理与模型,支持标签、默认思考档位与界面开关;配置存本地 JSON,不写 YAML。

Install

dsh plugin add dsh-subagent-setup

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Tags

Readme

dsh-subagent-setup

给 DeepSeek Harness 用的子智能体模型路由插件:按别名把任务委派给指定的子智能体, 每个子智能体写清「何时使用」,配置存在本地 JSON 里,不碰任何 YAML。

功能一览

  • 5 个工具:委派、查目录、改配置、等后台、释放子智能体
  • 中文设置页:模型走二级下拉(先选子智能体代理,再选子智能体模型),末尾留「其他」手动填写
  • 子代理会话头部显示它实际运行的路由(胶囊形,鼠标悬停能看到完整标识)
  • 一键释放驻留的后台子智能体
  • 后台委派 + 汇合:派出去拿 childId,最后一次性收齐结果
  • 界面元素都有开关,可单独停用

安装

在 DSH 里安装

侧边栏「插件」→「安装第三方插件」,下面三种输入任选其一。

① npm 包名

dsh-subagent-setup

② GitHub 链接

https://github.com/twoweeks1995/dsh-subagent-setup

③ 本地文件

先从 Releases 下载 tgz, 安装框填它的绝对路径,版本号以 Releases 页为准:

D:\temp\dsh-subagent-setup-0.2.1.tgz

安装后完全退出 DSH 再启动,设置页会出现「子智能体设置」。

开发与验证环境:DSH 桌面版 0.2.1-rc.3(开发起始于 rc.2)、Node ≥ 20。更早的 DSH 版本没有实测过; 若装到旧版本上,可查看 <DSH_HOME>/subagent-setup/last-startup.log,里面逐行记录了 各项能力(tracker / wait / close / sessionQuery / webServer)的探测结果,缺什么一目了然。

配置

全部在设置页「子智能体设置」里完成,不需要改任何 YAML。配置保存在 <DSH_HOME>/subagent-setup/config.json,首次启动使用默认值。

页面分两块:上面是委派默认值,下面是子智能体列表——列表里的每一项就是一条可被委派的 子智能体,它的「别名」是模型看到的句柄,「子智能体代理 + 子智能体模型」是它真正的去向。

委派默认值

设置页 配置键 默认 说明
执行方式 subagentProvider spawn spawn = 每次新建、独立上下文;fork = 继承当前会话的上下文
最大委派深度 maxDepth 3 子智能体还能不能再往下派
闲置多少轮后从列表隐藏 listingInactivityTurns 20 连续多少轮没联系就不再出现在 list_agents 里;0 表示永不过滤
允许后台运行子智能体 enableRunInBackground 开 关闭后 subagent_route 不再提供 run_in_background
在子代理会话中显示实际运行的路由 showRouteDock 开 会话头部那个胶囊
在子代理会话头部显示『终止可持续状态』按钮 showCloseAction 开 一键释放驻留子智能体

子智能体列表(每条)

设置页 配置键 必填 说明
别名 alias ✅ 模型写进工具调用的句柄。只允许小写字母、数字、下划线、连字符;建议用中性词 a1…aN(原因见下)
显示名 displayName — 给人看的名字,缺省等于别名。设置页与会话头部胶囊显示的就是它
子智能体代理 provider ✅ 模型来自哪个提供方,如 cherryin、deepseek-account
子智能体模型 model ✅ 模型标识,如 openai/gpt-6.1-sol。设置页从目录里选;目录里没有时切到「其他(手动填写模型标识)」手填
最大令牌数(可不填) maxTokens — 正整数,透传给 agentOptions
默认思考档位(可不填) reasoningEffort — 留空则用模型默认档位
Agent 预设(可不填) agentPreset — 绑定 Agent 预设(人设 + 工具集);执行方式必须是非继承型且支持该能力
标签(逗号分隔) tags — 每段小写字母或数字、用连字符连接,自动去重,标签多时自动换行
何时使用这个子智能体 description ✅ 给模型看的选路依据,写清这类任务长什么样,不要写空话

校验规则(保存时强制检查,填错会当场报错、存不进去):

  • 别名:不能重名;只能用小写字母、数字、下划线、连字符,且以字母或数字开头。
  • 子智能体代理 + 子智能体模型:可以重复——同一个代理与模型允许配多个别名,用来表达不同档位。
  • 标签:每段只能是小写字母或数字,段之间用连字符,例如 spec-audit、cross-family; 不能有空格、大写字母或中文(这种写法叫 kebab-case)。
  • 最大令牌数:填了必须是正整数(1、2、3…),不能填 0 或负数;留空表示用默认值。
  • 最大委派深度 / 闲置多少轮后从列表隐藏:必须是非负整数(0、1、2…),0 是允许的,负数不行。

关于别名:为什么要用中性词

别名(alias)是模型真正写进工具调用的那个句柄,所以它比「何时使用」更容易被注意到。 如果别名里带了模型身份(v4pro、gpt61sol)或强弱暗示(pro/max/flash), 模型会倾向于按名字推断能力,而不是读你写的适用条件——实测中同一个任务, 带标识的别名 0/2 命中,换成中性之后 8/8 命中。

因此建议:

  • 别名用中性句柄:a1…aN(也可以 r1、m1 这类纯编号);
  • 人可读的名字放「显示名」(设置页与会话头部胶囊显示的就是它);
  • 用途写进「何时使用这个子智能体」与「标签」,不要写进别名。

别名只允许小写字母、数字、下划线、连字符(^[a-z0-9][a-z0-9_-]*$),中文名写不进去。

为什么不干脆用用途词(code/search/audit)?那样确实更好猜,但也让模型可以只匹配名字、 不读「何时使用」;遇到边界模糊的任务反而更容易选错,而且一旦换掉背后的模型,名字就名不副实了。

工具

工具 用途
subagent_route 按别名委派。前台等结果原样返回;后台返回 childId
subagent_route_catalog 只读列出本机所有子智能体代理与模型(配置时用来查真实标识)
subagent_route_configure 读/写本插件配置,让模型在对话里帮人配路由
subagent_route_wait 后台委派发出后调用一次,阻塞到它们结束并返回结果
close_subagent 释放一个驻留的 continuable 子智能体(释放内存与上下文,不退 token 账)

配套技能 subagent-route-setup(也可 /subagent-route-setup 手动触发)教 agent 怎么按场景选路、 怎么写有区分度的「何时使用」、怎么安全地改配置。

把子智能体列表清空 = 关闭委派能力:列表为空时委派工具根本不会被注册。

界面

位置 内容 开关
设置页「子智能体设置」 委派默认值 + 子智能体列表(二级下拉 + 「其他」手动填写) —
子代理会话头部 胶囊:运行于 <显示名>,鼠标悬停能看到「子智能体代理 / 模型标识」全文 在子代理会话中显示实际运行的路由
子代理会话头部 红色按钮「终止可持续状态」 在子代理会话头部显示『终止可持续状态』按钮

架构:两个条目

分工一句话:主+设置条目给模型和设置页用,会话条目给会话头部两个组件用。

条目 id 注入 职责
主+设置 subagent-setup tools / subagents / agents / systemPrompt / skills / llm / webServer 5 个工具、系统提示里的路由清单、技能、后台追踪器;/settings、/catalog
会话 subagent-setup-session webServer / subagents / agents / llm /subagent-model、/close-subagent(含 GET 可用性探针)

这样停用「会话」条目时,头部胶囊与释放按钮一起消失,而设置页与工具不受影响。

取舍说明:设置路由并入主条目后,主条目依赖 webServer,headless 环境不再加载; 本机只有桌面应用、无 CLI,故接受。若将来要用 CLI,可拆回三个条目(主 / 设置 / 会话)。

客户端那半(plugin/client.js)是包级界面画布,不属于任何条目,数据一律走上面两个条目提供的接口。

已知限制

  • 路由选择不保证正确。实测:描述写得再准,模型也可能按模型名(V4-Pro)自行脑补能力、 越过描述去选。重要任务请由调用方显式指定别名。
  • 可能与其他同类插件冲突。同时安装多个「子智能体路由 / 委派」插件时会有三类摩擦: ① 工具重名——同名工具在同一个作用域只能注册一个(本插件遇到已存在的 close_subagent 会让位跳过), 另一方的同名工具则可能顶掉你预期的那个; ② 系统提示段互相覆盖——路由清单是往提示里注入的一段文本,两个插件会各注入一份,模型看到两套规则; ③ 派发与等待必须成对——用 A 插件派发、用 B 插件的等待工具去收,很可能收到空结果。 建议只保留一套,或至少确保「派发 + 等待 + 释放」始终来自同一个插件。

许可

MIT