DSH WorkBuddy Connect
corrinehu/dsh-workbuddy-connect将 WorkBuddy 桌面 App 包含的模型自动接入 DeepSeek Harness,在 DSH 对话窗口里零配置使用。
为 DSH 原生 Team 编队队员可视化配置专属模型与推理档位,运行时包装注入,不改官方任何文件。
给 DeepSeek Harness(DSH)原生 Team 编队的队员单独配模型和推理档位——在设置页点两下就配好,不改官方任何文件。
Per-teammate model & reasoning-effort configuration for DSH native agent teams — two clicks in the settings UI, zero official files modified.
DSH 原生 Team 编队的 spawn_teammate 只有 name / description / prompt / context 四个参数,没有 model(官方讨论 #6985)——所有队员只能继承主会话的默认模型:想给审查队员配个便宜快的、给写手配个强模型的,做不到。
本插件把这个缺口补上:按队员名配规则,每个队员跑在你指定的 provider / model / 推理档位上,全部在设置页点选完成。
spawn_teammate 即生效,无需重启* / ? 通配、大小写不敏感,按顺序求值、第一条命中即生效;每条规则可加中文备注(纯显示,不注入)debug 开启后每次 spawn 追加一行到 .probe.jsonl 供排查,默认关闭安装
方式一(推荐):DSH 设置 → 插件市场 → 搜索 dsh-subagent-model-config → 安装并启用。
方式二(手动):克隆本仓库,在 profile 的 package.json 里加:
{ "dsh-subagent-model-config": "link:/path/to/dsh-subagent-model-config" }
并把它加入 profile 的 dsh.bundles,重启 DSH。
配置
打开 设置 → Subagent Models,添加规则:
| 字段 | 说明 |
|---|---|
| 队员名匹配 | glob 模式,如 verifier*;* 任意串、? 单字符 |
| 备注 | 中文名,只用于显示 |
| provider | 留空 = 继承主会话的供应商 |
| model | 留空 = 该 provider 的默认模型;整条规则 provider/model 全空 = 不注入 |
| 推理档位 | 下拉选择,候选 = 所选模型自己声明的档位;留空 = 目标模型默认档 |
设置页全貌——左侧入口、启用开关、常用角色一键条与规则卡:

典型配置(节选):
{
"enabled": true,
"rules": [
{ "match": "verifier*", "note": "独立验证员——便宜快的", "provider": "…", "model": "…", "reasoningEffort": "low" },
{ "match": "writer*", "note": "写手——强模型高思考", "provider": "…", "model": "…", "reasoningEffort": "high" },
{ "match": "researcher*", "note": "检索员——角色先建,模型后补" }
]
}
通用工程编队的实际用法——验证员用强模型高思考、测试编队用 flash 省额度,一张规则表各跑各的:

插件在运行时包装两个 DSH 内部接口:agentTeams.spawnTeammate(采集队员名)与 SubagentRuntime.startContinuable(注入点)。派单发生时按队员名匹配规则表,把命中的 provider / model / reasoningEffort 写进官方原生支持的 SubagentStartRequest.agentOptions——只接上编队路径没接的线,不改任何官方行为。包装装在实例与原型两层(幂等防重入),内部异常一律只记录不抛出;配置为空或关闭时,行为与未装本插件完全一致。
engines.dsh >= 0.1.7-alpha.1,Node >= 22npm test:143 用例(17 套件)全过这是 video 解析预设的配套约束。判定只看父会话 preset——不用视频预设的用户完全无感。
① 视频队员名硬闸门
视频解析任务用哪个模型、开不开思考,必须人工点名。名字以 video- / video_ 开头却未命中任何规则 ⇒ 抛错拒绝启动(错误码 DSH_SUBAGENT_MODEL_CONFIG_UNROUTED_VIDEO),报错实时列出当前规则表允许的命名清单。fail-closed:配置缺失、损坏或规则为空时,视频名一律拒绝。非视频名字与 enabled: false 完全不受影响。
② 队员侧能力限制(父会话 preset 为 video 时注入)
| 注入项 | 作用 |
|---|---|
request.persona | 队员角色卡,遮蔽部署 persona(主窗身份卡对队员不再生效) |
request.toolFilter.allow | 工具白名单(fail-closed):watch_video / read write edit glob grep / pwsh / job_list job_output job_kill / skill / todo_write |
白名单只列「继承层」工具;团队通信工具(send_message / team_task_* 等)注册在成员自己的 scope,天然保留。standard / cordis / minimal 模式的子代理完全不受影响。
In DSH's native agent teams, spawn_teammate takes only name / description / prompt / context — no model parameter (upstream discussion #6985). Every teammate inherits the main session's default model: you cannot give the reviewer a cheap fast model or the writer a strong one.
This plugin fills that gap: name-based rules, each teammate runs on the provider / model / reasoning effort you pick — all editable in the settings UI, effective on the next spawn.
spawn_teammate, no restart needed* / ?, case-insensitive), first match wins; per-rule display notesdebug: true each spawn appends a line to .probe.jsonl; off by defaultInstall: DSH Settings → Plugins → search dsh-subagent-model-config. Manual: clone this repo, link it in your profile's package.json, add it to dsh.bundles, restart DSH.
Configure: Settings → Subagent Models — add rules with a name pattern, optional provider / model / reasoning effort (dropdown candidates come from the selected model itself).
The plugin wraps two DSH internals at runtime: agentTeams.spawnTeammate (captures the teammate name) and SubagentRuntime.startContinuable (injection point). On spawn it matches the name against the rule table and writes the resolved fields into SubagentStartRequest.agentOptions — a field DSH natively supports but the team path never wired up. Wraps are installed on both instance and prototype (idempotent); internal errors are logged, never thrown; with an empty or disabled config the behavior is identical to not having the plugin.
engines.dsh >= 0.1.7-alpha.1, Node >= 22npm test: 143 cases, 17 suites, all passingFor the video analysis preset only — detection reads the parent session's preset, so other modes are untouched:
video-/video_ that matches no rule is rejected outright (error code DSH_SUBAGENT_MODEL_CONFIG_UNROUTED_VIDEO) with a live list of allowed names. Fail-closed: missing, corrupt, or empty config rejects every video name.video): request.persona (masks the deployment persona) and request.toolFilter.allow (fail-closed whitelist: watch_video, read/write/edit/glob/grep, pwsh, job_list/job_output/job_kill, skill, todo_write). Team-communication tools live on the member's own scope and are naturally preserved. Standard / cordis / minimal subagents are unaffected.