dsh-subagent-setup
Verifieddsh-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