description: "面向模型的 subagent 委派工具,供用户与维护者配置、组合或排查基于 subagent 提供方的委派。"
English | 中文
使用本包可为 agent 提供一个具名工具,把工作委派给已配置的子 agent 后端。one-shot 模式下,调用默认等待子 agent;continuable 模式下,调用默认在后台启动持久化子 agent,并返回可用于后续消息的 id。受支持的后端还可公开获准的子级 LLM 提供方、模型与推理等级供模型选择。每个实例均可设置子 agent 的 persona、工具权限与深度限制,失败的运行会返回错误,而非部分成功。
每个委派目标挂载一个实例,且每个实例的 toolName 必须不同。工具与其提供方同时存在、同时消失,因此同级加载顺序与提供方重新加载都不会让工具悬空。
先加载 subagent 服务、一个进程内或远程后端与本工具,然后指定提供方名称。此组合暴露一个委派给 spawn 后端的 subagent 工具:
- name: '@deepseek-ai/dsh-subagent'
- name: '@deepseek-ai/dsh-subagent-spawn-in-process'
- name: '@deepseek-ai/dsh-tool-subagent'
config:
provider: spawn
toolName: subagent
| 字段 | 默认值 | 含义 |
|---|---|---|
provider |
必填 | ctx.subagents 上的提供方名称(如 spawn、fork、acp) |
toolName |
subagent |
面向模型的工具名称;每个已加载实例必须不同 |
modelSelectionSettings |
false |
为每个顶层 Session 读取宿主的精确路由授权偏好;常驻 preset 观察匹配 Session,直接 Agent setup 则显式传入其 Session;要求提供方支持 agentOptions |
enableRunInBackground |
true |
公开 run_in_background;禁用时也会拒绝强制后台调用 |
backgroundMode |
one-shot |
后台策略:one-shot 默认前台调用;continuable 默认后台调用,并要求提供方具备 prepareContinuable 能力 |
agentOptions |
— | 配置的子级 provider、model、适配器所有的 reasoningEffort 与正整数 maxTokens 默认值;要求提供方支持 agentOptions,并会覆盖提供方持有的路由默认值 |
persona |
— | 每个子 agent 独立的 persona;要求提供方具备 persona 能力 |
toolFilter |
— | 每个子 agent 独立的全局工具限制;要求提供方具备 toolFilter 能力 |
maxDepth |
Host 设置(1) |
绝对委派深度上限(0 禁止委派);'provider-managed' 不向进程外提供方发送上限 |
生成的配置目录是每个受支持字段及其 JSDoc 的穷尽式真源。
one-shot 策略下,省略 run_in_background 会在前台等待并返回子 agent 的最终文本;run_in_background: true 会启动一个归父级所有的普通后台任务,并返回 started background subagent job <id>,可用 job_output 收集、用 job_kill 停止。
continuable 策略下,省略或为 true 的 run_in_background 会启动一个持久化子 agent,并返回 started subagent <childId>,不等待结果;子 agent 的 Activation 结束时,运行时投递一条结算通知,可选的 send_message 工具会向它发送更多工作。把 run_in_background 设为 false 可在前台等待结果。
maxDepth 限制递归深度(0 禁止委派);省略时,每次委派读取 Host 当前的 subagent.maxDepth 设置,初始值为 1。数值深度要求提供方具备 depthLimit 能力;'provider-managed' 把预算留给进程外提供方。当提供方支持时,persona 与 toolFilter 会配置每个子 agent;工具在达到上限时仍然可见——每次尝试启动都会检查调用 agent 的当前深度,被拒绝时返回出错的工具结果。
设置 modelSelectionSettings: true,即可在组合每个全新顶层 Session 时读取宿主的 subagent-model-selection 偏好。没有已记录策略的恢复 Session 会保持禁用,包括显式为空的恢复。启用后,非空的精确 provider/model 路由列表会记录进 Session、由子 Session 继承,后续设置编辑不会改变它。工具随后公开可选的 provider、model 与 reasoning_effort 字段,并注册共享的 list_subagent_models 工具。此模式要求后端声明 agentOptions;两个进程内后端和 DSH SDK 支持该能力,而 ACP、Codex 与 Claude Code 会拒绝它,而不是忽略它。
一次调用需同时提供 provider 与 model;当配置值、父 agent 值或提供方持有的默认值能提供路由时,也可只提供推理等级。静态的 provider.agentRouteDefaults 在存在时构成提供方/模型基线;工具配置与模型字段会在路由相关强度合并和确切路由预检前覆盖它。没有这些默认值的提供方会使用父 agent 最新已记录请求中的兼容值,再使用父级首次请求前的创建选项,并保留配置的 maxTokens。更改路由但未显式提供推理等级时,会清除继承的路由自有等级,使所选模型解析自己的默认值。实时 LLM 适配器在创建子 agent 前校验有效路由。目录成员资格只提供建议,因此适配器接受时,模型可以使用未列出的 id。
当包级约定不够用时阅读以下页面;它们从工具运行时行为进入它所委派其上的 seam,以及相邻的子 agent 工具。
当提供方存在时,以当前实例配置的名称公开已生成的默认 subagent schema。启用的 Session 策略会添加 provider、model 与 reasoning_effort,以及继承和选择指引;提供方必须支持 agentOptions。提供方是否继承上下文会改变工具描述和提示词描述。启用后台模式会添加 run_in_background:可继续模式会记录其默认值为 true、运行时结算通知与显式前台覆盖;一次性模式会记录其默认值为 false,以及用 job_output 收集或用 job_kill 停止的 job id。当工具在本次组装的作用域中可见时,一个 tool:<toolName> 系统提示词 section 会指示模型同时启动相互独立的可继续委派、在它们运行时继续工作,并且仅当下一步动作依赖结果时选择前台;工具限制会同时移除其 schema 和这段指引。
每个父级请求支付固定的 schema 成本;模型选择会增加三个参数。每个提供方实例增加一个 schema,每个可继续实例还增加一个简短的系统提示词 section。
只要提供方实例及其配置不变,前缀就保持稳定。适配器目录变化不会改变定义;子级路由覆盖可能使 fork 子 agent 无法复用继承的父级前缀。
Session 携带策略的 settings 控制实例会公开子级 LLM 选择字段与 list_subagent_models。可选 ctx.llm 服务不可用时,调用会失败。发现只返回精确路由策略中的已注册提供方与已公布模型;未授权提供方会在调用其适配器目录前被拒绝,精确查询也必须先获准,才会解析模型的推理强度与默认值。执行阶段会独立强制同一策略。
启用的组合中存在一个固定发现 schema。只有模型调用工具时,目录内容才进入 transcript。
适配器注册与目录变化不会改变 schema 前缀。每个发现结果都追加在可复用前缀之后。
当 enableRunInBackground 与 backgroundMode: continuable 同时设置时,模型还会读到 tool:<toolName> 系统提示词 section,指示它把相互独立的可继续委派一起启动,并在它们运行时继续工作。使用默认工具名 subagent 时,section 文本为:
Use subagent in the background by default. Start independent delegations together in one assistant message and continue useful work while they run. Set `run_in_background: false` only when your next action depends on that subagent's result. When a background run settles, the runtime sends you a notice containing its outcome and any final assistant message.
每个可继续实例一个简短固定 section,只要工具在作用域内,就由每个父级请求支付。
只要 section 文本与工具存在性不变,前缀就保持稳定;移除工具或更改 section 会建立不同的父级前缀。
调用会保留描述与提示词。成功时只包含子 agent 的最终文本;其他结果变为 Error: <stop reason>,随后在存在时附上安全的提供方诊断,再附上任何部分 assistant 文本。子 agent 中间步骤不会进入父级。
提示词与结果保留在父级历史中,直到上下文压缩(context compaction);子 agent 工作上下文留在子 agent 中。
仅追加;新增可见内容位于可复用请求前缀之后,不会使现有 KV Cache 条目失效。
在配置的可继续模式下,启动时返回内容恰为 started subagent <childId>;在配置的一次性模式下,则返回 started background subagent job <id>。一次性模式下,通用 Task 接口提供后续状态、最终输出、取消响应与通知;若结果携带提供方诊断,失败状态的 detail 会包含它。可继续模式下,本工具不返回自己的结果:子 agent 的结算以服务负责的通知到达父级,独立加载的 send_message 工具投递后续消息,而通过其 id 查看子 agent 的 transcript(文本记录)即是其详细输出来源。
确认消息会被保留;一次性最终输出只在收集或注入时进入父级历史,而可继续子 agent 的输出绝不会通过本工具返回——其结算通知独立于任何工具结果到达。
仅追加;新增可见内容位于可复用请求前缀之后,不会使现有 KV Cache 条目失效。
这些限制说明本工具不返回或不强制执行什么;它们是当前包约束。
TODO(subagent-dup-toolname))——可继续实例会在插件应用期间预留提示词 section 名称,但若要阻止等待中的一次性实例回滚提供方注册,仍需要一份预期名称注册表。agentOptions;两个进程内提供方和 DSH SDK 会声明该能力,而 ACP、Codex 与 Claude Code 会拒绝它,而不是忽略它。