hive-subagent-mcp: run an agent's subagents on its runtime
The subagent daemon now reads the parent agent's runtime at startup (`hive_runtime::RuntimeSpec`, from the harness's `HIVE_RUNTIME` / `HIVE_ACP_*`, which `mcp.nix` forwards onto its unit). On claude nothing changes. On ACP, each run drives an `AcpRuntime` whose session id is kept per name under the harness dir: `start` archives the old one, `continue` loads it (and fails when none is recorded), `interrupt` sends `session/cancel`, a role goes in front of the first prompt, and permission requests get the answers a claude subagent's tool list gives. The unit loads `backendEnvironmentFile` on ACP only, so the agent can authenticate. The end-of-turn handling moves out of the claude loop into `after_turn` unchanged, so both loops share it. Refs #4391
This commit is contained in:
parent
a483b23ccf
commit
84d4808d54
10 changed files with 689 additions and 71 deletions
|
|
@ -288,6 +288,31 @@ agent that needs a stable or non-default port.
|
|||
Own systemd unit, defined alongside the other per-agent MCP daemons in
|
||||
`nix/agent-modules/mcp.nix`.
|
||||
|
||||
## Runtime
|
||||
|
||||
A subagent runs on its parent agent's runtime
|
||||
(`services.hyperhive.agent.runtime`). The unit gets the harness's
|
||||
`HIVE_RUNTIME`/`HIVE_ACP_*` variables, and the daemon reads them once at
|
||||
startup (`hive_runtime::RuntimeSpec`). On `claude`, everything else on this
|
||||
page applies as written.
|
||||
|
||||
On `acp`:
|
||||
|
||||
- each run spawns its own copy of the parent's ACP agent, which exits
|
||||
when the run ends. The unit loads `backendEnvironmentFile` for it.
|
||||
- the session id lives in `subagent-acp-session-<name>` under the harness
|
||||
dir. `start` moves an old one aside, `continue` loads it into a fresh
|
||||
agent process, and a `continue` with none recorded fails straight away.
|
||||
- a role goes in front of the session's first prompt, since ACP has no
|
||||
system prompt.
|
||||
- `interrupt` sends `session/cancel`, and `force` changes nothing. The
|
||||
runtime kills an agent that ignores the cancel for 10s.
|
||||
- `model` and `effort` do nothing: the agent runs the model it's
|
||||
configured with.
|
||||
- the agent's permission requests get the same answers a claude subagent's
|
||||
tool list gives: MCP tools and file tools, `fetch` with `web_tools`,
|
||||
`execute` with `execution` (`session::acp_permits`).
|
||||
|
||||
## The tool surface a subagent gets
|
||||
|
||||
Two flags, each covering one half, and neither covering the other:
|
||||
|
|
|
|||
Loading…
Reference in a new issue