dsh-subagent-control:让团队成员也能列管、追问和打断自己派出的子代理

前言

在 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 用法节有说明)。

行为与限制(使用前建议读完)

  1. 一次性子代理不会出现在列表里,避免对无法接受追问的子代理调用注定失败的发消息。
  2. 读状态失败的子节点会以诊断项(如 corrupt / unsupported / unavailable)出现在列表中,而不是让整个列表报错。
  3. send_subagent_message 只能打到直接子节点,这是子代理服务自身规则,插件不扩大范围。
  4. interrupt_subagent 可作用于后代,因此 Lead 也可以打断更深层的孙代理。
  5. 失败会写明原因:无调用 agent、未知 id、或 id 不属于当前 agent 的子树等。
  6. 无配置、无持久化: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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜