diff --git a/docs/agent-lifecycle/agent-hierarchy.md b/docs/agent-lifecycle/agent-hierarchy.md index 573cb1f9..74a33ab4 100644 --- a/docs/agent-lifecycle/agent-hierarchy.md +++ b/docs/agent-lifecycle/agent-hierarchy.md @@ -133,7 +133,7 @@ everything below applies only when it doesn't: (inject a `from: ` message straight into the caller's own inbox) is on this socket too but isn't privileged to either flavour; no built-in in-container producer calls it today — matrix, bash and - forge notifications all moved to pushing a todo on the harness's + forge notifications push a todo on the harness's in-agent socket instead (see [`docs/turn-loop/mcp.md`](../turn-loop/mcp.md#waking-the-agent-from-inside-the-container)). - **Storage/mounts** — only the manager container gets @@ -147,7 +147,7 @@ everything below applies only when it doesn't: path writes `flake.lock` any more — `request_update_meta_inputs` was removed, leaving the operator dashboard's `POST /api/meta-update` as the only entry point. -- **Prompt** — _not_ treated differently in practice any more: `prompts/system.md` +- **Prompt** — treated identically: `prompt::render` always filters for `agent`. `prompts/system.md` still carries `` / `` marker blocks, but `prompt::render` filters for `"agent"` unconditionally for every container, manager included ("always `agent` role — there is diff --git a/docs/turn-loop/mcp.md b/docs/turn-loop/mcp.md index 664a1735..ef3fa740 100644 --- a/docs/turn-loop/mcp.md +++ b/docs/turn-loop/mcp.md @@ -67,7 +67,7 @@ no call site today) as regular inbox messages (same `recv` path; body is a JSON object with an `event` discriminant field). `ApprovalResolved` goes to whichever agent actually submitted the approval (`Coordinator::notify_submitter`, looked up from the -authenticated socket caller at submit time; a legacy row with no +authenticated socket caller at submit time; a row with no recorded submitter falls back to the manager, `ruth`). `ContainerCrash` always goes to `ruth` (`Coordinator::notify_manager`, hardcoded — `hive-c0re/src/workers/crash_watch.rs`). A `MergeConfigPr` @@ -78,11 +78,10 @@ outcomes](README.md#turn-outcomes)) via a generic "call `get_loose_ends`" prompt rather than the event body itself. Lifecycle transitions the job-queue scheduler or crash watcher drive directly — stop/kill, destroy, a flake-rev login or logout state change — reach -no individual agent any more: they publish onto a swarm-wide NATS -JetStream stream instead (`swarm_notices::notify`, -`hive-c0re/src/swarm_notices.rs`), since every hive is swarm-controlled -now and there is no manager-agent fallback left to push an in-container -todo to. +no individual agent: they publish onto a swarm-wide NATS +JetStream stream (`swarm_notices::notify`, +`hive-c0re/src/swarm_notices.rs`); every hive is swarm-controlled, so +there is no manager-agent fallback to push an in-container todo to. **Inbox** (`inbox` group): `get_loose_ends()`, `cancel_loose_end(kind, id)`, `remind(message, delay_seconds? | @@ -178,12 +177,12 @@ hive_name?, swarm_name?, matrix_accounts? }`. `matrix_accounts` is a ## Waking the agent from inside the container -The built-in producers (matrix, bash, forge) no longer dial a direct -wake — all three now upsert a todo on the harness's in-agent socket -(`HIVE_AGENT_SOCKET`, `UpsertTodo` — see +The built-in producers (matrix, bash, forge) upsert a todo on the +harness's in-agent socket (`HIVE_AGENT_SOCKET`, `UpsertTodo` — see [`docs/tools/bash.md` § Completion as a todo (loose-ends v2)](../tools/bash.md#completion-as-a-todo-loose-ends-v2) -for the full upsert/signal/clear mechanism): a new or changed summary +for the full upsert/signal/clear mechanism); none dials a direct +wake: a new or changed summary makes the harness signal its own turn loop, with no hive-c0re round-trip. An external MCP server (or any other in-container process) can push its own todo the same way — `subsystem` is a plain string,