前言¶
在 DeepSeek Harness(DSH)里用 Agent Team 协作时,成员往往可以用 subagent 再派一层子代理做专项任务。Harness 本身提供 list_agents、send_message、interrupt_agent,团队插件也会注册同名工具,且在成员作用域里更具体的注册会覆盖内置行为:target 只对队友名单生效,打断通常只有 Lead 能做。于是常见情况是:子代理已经跑起来了,派它的人却在自己的回合里列不出、追不了、也停不了——尽管底层 ctx.subagents 一直支持列表、发消息和打断,且权限上允许祖先管理自己的后代。
SpaceRelay 维护的 dsh-subagent-control 属于 DSH 社区插件目录中的「工作流」类条目,不去抢上述三个名字,而是全局注册 list_subagents、send_subagent_message、interrupt_subagent 三个新工具,Lead 与每位组员安装后即可使用。下面介绍它解决什么问题、怎么用,以及安装时要注意的边界。
这是什么¶
dsh-subagent-control 是一个零依赖的 DSH 插件 bundle:把子代理服务里已有的「列子节点 / 发消息 / 打断」能力,以不与 Agent Team 冲突的工具名暴露给任意 live agent(含团队成员)。维护者为 SpaceRelay;源码与说明见 GitHub 仓库,目录页为 skillhub.cn 插件页。许可证为 MIT。插件以当前 DSH 进程权限运行,安装前建议自行查看源码与许可证。
核心功能¶
三个默认工具¶
| 工具 | 参数 | 底层 |
|---|---|---|
list_subagents |
可选 scope:"children" 或 "descendants",默认 children |
ctx.subagents.listChildren() / listDescendants() |
send_subagent_message |
subagent_id、message(必填) |
ctx.subagents.sendMessage() |
interrupt_subagent |
subagent_id(必填) |
ctx.subagents.interrupt()(祖先权限) |
列表每行格式为 id status "label" depth=。status 为 running 或 inactive:inactive 表示当前没有回合在执行,不代表子代理已消失;可用 send_subagent_message 唤醒。团队成员本身也是可继续的子代理,列表中可能带 team=teammate 或 team=lead;若只要自己派出的普通子代理,可传 include_teammates: false(README 用法节有说明)。
行为与限制(使用前建议读完)¶
- 一次性子代理不会出现在列表里,避免对无法接受追问的子代理调用注定失败的发消息。
- 读状态失败的子节点会以诊断项(如
corrupt/unsupported/unavailable)出现在列表中,而不是让整个列表报错。 send_subagent_message只能打到直接子节点,这是子代理服务自身规则,插件不扩大范围。interrupt_subagent可作用于后代,因此 Lead 也可以打断更深层的孙代理。- 失败会写明原因:无调用 agent、未知 id、或 id 不属于当前 agent 的子树等。
- 无配置、无持久化:bundle 不读写插件外的存储。
可选组件(默认关闭)¶
插件面板里另有四个独立开关,默认均关闭;打开哪一个就只注册对应那一个工具:
| 组件 | 工具 | 作用概要 |
|---|---|---|
| Cross-layer relay | relay_subagent_message |
尽力把消息 relay 到更深层后代(经中间层转发,可能被摘要,不保证) |
| Wait for subagents | wait_subagents |
在超时内等待后代结束,而不是先结束自己的回合(会阻塞至超时) |
| Release subagents | drain_subagents |
停止并释放直接子节点(与仅打断当前回合的 interrupt_subagent 不同;释放后无法再用消息唤醒) |
| Delegation budget | subagent_budget |
只读报告:深度限制、树深、运行/空闲计数 |
同仓库还提供需单独安装的 companion bundle(如 dsh-team-limits、dsh-human-wait)以及 UI 插件 dsh-find-session;它们不是本 bundle 默认行为的一部分,此处不展开,详见 README。
与其它插件的名字冲突¶
dsh-subagent-library 也会全局注册 list_subagents。两个全局同名注册不能同时生效,只能二选一安装,或接受后者 shadow 前者。本插件选用的三个名字刻意避开内置的 list_agents / send_message / interrupt_agent。
安装与启用¶
通过插件面板 / 市场安装,或让 agent 执行官方文档中的安装命令:
plugin_manager install_bundle target "dsh-subagent-control@1.0.0"
若从本地 checkout 安装,将上述 npm spec 换为目录路径即可。bundle 立即生效,无需重启;装好后三个工具名可见,插件行处于启用状态。
兼容性(来自 README):需要带 tools、subagents、agents 服务的 DSH(0.2.x 及以后);Node ^22.19.0 || >=24.0.0。零 runtime / peer 依赖。
卸载时在插件面板移除或禁用即可,不会留下残留数据。
典型用法¶
在 agent 对话中调用工具,README 给出的示例如下:
list_subagents
→ 3b0f9c1e running "review the patch" depth=1
list_subagents scope=descendants
→ 3b0f9c1e running "review the patch" depth=1
7d2a44b0 inactive "check the tests" depth=2
send_subagent_message subagent_id=3b0f9c1e message="顺手看一下 locale/zh.json"
→ messageId=...
interrupt_subagent subagent_id=3b0f9c1e
→ accepted=true
典型流程:先用 list_subagents 或 scope=descendants 看清 id 与状态,对 running 或 inactive 的子代理用 send_subagent_message 追加指令,必要时用 interrupt_subagent 停止当前回合(Lead 还可打断更深后代)。
适用场景与注意¶
适合谁:在 Agent Team 里分工、又需要成员自主跟进或终止自己派出的子代理(代码审查、测试、并行调研等)的团队;也适合任何希望用专用工具名直接对接 ctx.subagents、而不走团队版 list_agents / send_message / interrupt_agent 的编排场景。
注意:
- 插件与 DSH 同进程、同权限;安装前请核对 源码 与 MIT 许可证。
- 社区目录 skillhub.cn 独立于 DeepSeek / 幻方,并非官方应用商店;DSH 生态强调「一切皆插件」,本条目是社区维护的工作流类插件之一。
- 若已安装
dsh-subagent-library,请先确认list_subagents命名冲突再决定是否共存。
结尾¶
dsh-subagent-control 用三个不抢名的全局工具,把「列子代理、发追问、打断」还给派子代理的人——包括 Agent Team 里的普通成员——并与 Harness 子代理服务的权限模型对齐。需要详情、可选组件与 companion bundle 说明时,以 README 为准。
- 目录页:https://www.skillhub.cn/plugins/SpaceRelay/dsh-subagent-control
- GitHub:https://github.com/SpaceRelay/dsh-subagent-control