- Wire the control service and send_message tool into every shipped composition with a resumable provider and background enabled (headless-agent, tui-agent, and the SDK helper's subagent feature base resources); jsonrpc-agent disables background and is unchanged. - Resolve the send_message availability check in the CALLER's tool scope so a restriction that removes the follow-up tool from one agent also blocks that agent's continuable start. - Control-service disposal now cancels live activations and awaits producer settlement instead of stranding them: TaskService keeps producer Tasks across a reload, so the disposing service aborts each activation-owned controller, resolves its terminal gate (the effect-scoped onTaskDone listener is already gone), and awaits done. A new test kills a mid-start activation through HMR disposal.
subagent/ — subagent capability family
English | 中文
The subagent seam: an agent delegating work to a child agent. Like the bash and llm families this is a capability seam (see capability seams) — but with one defining difference: multiple provider implementations coexist in one context, registered by name, rather than the single-implementation bash shape. The registry mirrors the LLM adapter registry.
| Package | Role | ctx key |
|---|---|---|
subagent/ |
Abstract subagent seam: named-provider registry + vocabulary + the durable child descriptor | ctx.subagents |
subagent-inprocess/ |
Shared in-process run driver (no provider; one cleanup effect per run) | — |
subagent-spawn/ |
In-process backend: a fresh child agent, with cold resume | (registers on ctx.subagents) |
subagent-fork/ |
In-process backend: a child seeded with the parent's completed-turn prefix, with cold resume | (registers on ctx.subagents) |
subagent-acp/ |
Out-of-process backend: a child agent in a spawned subprocess, driven over ACP (one-shot) | (registers on ctx.subagents) |
subagent-dsh-sdk/ |
Out-of-process backend: a child harness runtime in a spawned subprocess, driven over stdio JSON-RPC through the TypeScript SDK client | (registers on ctx.subagents) |
subagent-control/ |
Continuable-child orchestration: stable ids, descriptor lookup, Task-backed activation, steer-or-resume routing | ctx.subagentControl |
tool-subagent/ |
Model-facing subagent delegation tool over ctx.subagents |
(registers on ctx.tools) |
tool-subagent-control/ |
The one globally named send_message follow-up tool over ctx.subagentControl |
(registers on ctx.tools) |
The interface lives at subagent/subagent/. The in-process subagent-spawn / subagent-fork backends share the subagent-inprocess driver (a library with no provider of its own — both depend on it, neither on the other), and the out-of-process subagent-acp / subagent-dsh-sdk backends spawn their children through the subprocess/ seam (the shared credential scrub, tree-scoped teardown, and dispose ladder). subagent-control sits above the seam: it binds one durable child session to a series of disposable Task-backed activations, and both model tools and human-facing adapters route through its one contract. Tests replace only the child boundary with package-local fixtures.
The proposals and design rationale: .agents/notes/implemented/feature/2026-06-21-subagent-capability-seam.md and .agents/notes/implemented/feature/2026-07-21-continuable-background-subagents.md.