--- id: agent-delivery/generalise-it-deliver-a-turn-to-a-named title: 'Generalise it: deliver a turn to a named session, from anywhere in the backend' theme: agent-delivery status: done created: 2026-08-21 date_source: stated order: 1 --- **Generalise it: deliver a turn to a named session, from anywhere in the backend.** Wanted 2026-08-21 — "ideal" is the owner's word for it. Today the only server-side caller is the nudger, and delivery is welded to its schedule: a row in `nudges`, one per (user, session), a fixed message, a tick. What the dispatcher, the file watchers and Command HQ all want instead is a plain verb — _here is some text, deliver it to session X_ — with the schedule, if any, belonging to the caller. Two things already established and worth not re-deriving. The nudger's `checkSafe` holds three refusals — not live, live but generating, another live session in the same directory — and the comments above it carry why each one is there. And "not live" is the case that differs by caller: the nudger refuses (nudging a dead session would CREATE an agent, which is not what nudge means), while a dispatcher handing over five todos does want it created. --- **Closed 2026-08-23.** Answered from both ends, and neither needed the general verb this asked for. `SendMessage` delivers agent-to-agent with `notify_when_idle` replacing a poll — proven that night by one session taking over the localisation hand-off from the owner, who had been relaying prompts by hand. And the nudger delivers backend-to-session on a schedule, which is what a commander now uses to wake its own conversation and report to the owner rather than into a job panel nobody reads. The two together cover what was wanted. What remains genuinely missing is spawning a NEW session from a non-chat caller — a shell loop, a plugin, a background job — and that is `todo/sub-agents/an-api-endpoint-for-spawning-an-agent-with-a`, which stays open. The harness `Agent` tool does not close it: it is available to a chat agent and to nothing else, which is exactly why a commander's loop shells out to `claude -p` by hand. The pattern is written down as an affordance now — `capabilities/affordances/officer/core/coordinating-another-agent.md`.