The ACP plugin-config case drove a real dispose with 150ms graces. On the hosted
image the SIGKILL escalation landed while the managed scope could not take the
signal — systemctl failed the kill ("Failed to send signal SIGKILL to auxiliary
processes: Invalid argument") — so the run reported a teardown failure the
configuration never asked for. The case asserts that config graces reach the
real run, so the values only need to clear the host's scope handling. Its mock
refuses stdin EOF and SIGTERM by design, so the case waits out both graces and
carries its own budget for that fixed cost.
Both illegal-UTF-8 residual cases relied on a plain sched_yield leaving each
write as its own read chunk. A starved reader coalesces hundreds of bytes into
one chunk, which inflates the measured peak for correct accounting too: the
hosted image measured 2563 against the 2048 bound. Pace with a real sleep so
each byte is its own chunk everywhere, and keep each payload above the bound
(3200 bytes; 1100 CESU-8 sequences) so a raw-byte undercount still flushes past
it instead of only at EOF.
(cherry picked from commit 30e0c3ff0415befe3652a55611df8a18d82c18bb)
description, kind
| description | kind |
|---|---|
| The subagent package group: the delegation seam, its in-process and out-of-process backends, and the model-facing delegation tools. | package-group |
subagent/ — subagent capability family
English | 中文
Summary
The subagent package family lets an agent delegate a task to a child, continue the child's work, and discover every child it created. Choose a fresh in-process child for isolated work, a history-seeded in-process child when prior conversation matters, or an out-of-process child backed by ACP, Codex, Claude Code, or another Harness runtime. Model-facing tools also let agents message adjacent agents, interrupt work, and list child status. Each child remains visible to its parent whether it is running or stored; the package READMEs document provider-specific setup and limits.
Table of Contents
Packages
| Package | Role | ctx key |
|---|---|---|
subagent/ |
Defines the delegation service: provider registry, one-shot runs, continuable children, and discovery | ctx.subagents |
subagent-in-process-driver/ |
Provides the shared in-process run driver | — |
subagent-spawn-in-process/ |
Runs a fresh in-process child | registers on ctx.subagents |
subagent-fork-in-process/ |
Runs an in-process child seeded from the parent's completed history | registers on ctx.subagents |
subagent-acp/ |
Runs an out-of-process child over the Agent Client Protocol | registers on ctx.subagents |
subagent-codex/ |
Runs a real Codex child through the official app-server protocol | registers on ctx.subagents |
subagent-claude-code/ |
Runs a real Claude Code child through the official Agent SDK | registers on ctx.subagents |
subagent-dsh-sdk/ |
Runs an out-of-process Harness child through the TypeScript SDK | registers on ctx.subagents |
tool-subagent/ |
Exposes delegation to the model | registers on ctx.tools |
tool-subagent-control/ |
Exposes adjacent-agent messaging, interrupt, and listing to the model | registers on ctx.tools |
Related documentation
- Subagent subsystem — the service contract, provider contract, and terminal result semantics.
- Subagent capability seam — the design record for the delegation capability family.
- Continuable subagents — durable children that accept follow-up turns.
- tool-subagent-control README — the follow-up, interrupt, and listing surface.
Dev Note
None.