Summary
The page shows the sub-agents a conversation has running -- the desk's agents lane, the roster, the instance surface -- and none of those surfaces can stop one. The backend already exposes the verbs: subagent.cancel_instance { session_key, agent, handle } stops the spawns behind one rendered (agent, handle) pair, subagent.interrupt { subagent_id } stops one spawn by id, and subagent.cancel_session { session_key } sweeps the session. ui-web/src calls none of them; the TUI's agents overlay does (ui-tui/src/components/agentsOverlay.tsx, the interrupt helper posts subagent.interrupt).
Steps to reproduce
- Open a session and have the main agent spawn two sub-agents (or run a DAG with two nodes).
- Open the Subagents page or the desk's agents lane while both are running.
- Look for a way to stop one of them without stopping the other.
Expected behavior
Each running instance row offers a stop, the way the TUI overlay does, wired to subagent.cancel_instance for the (agent, handle) the row already holds.
Actual behavior
There is no stop on any instance row. The only stop on the page is the composer's go button, which is the main agent's turn.cancel; with the fix that pairs it with cancel_by_session it stops every spawn of the session at once, which is the right meaning for that button and still leaves "stop this one" with no control.
Two related but distinct gaps are filed separately:
Waiting on the ui-web/ freeze to lift; the fix is a row control under ui-web/src/features/subagents/ (and the desk's agents lane) calling an RPC the generated client already carries -- subagent.cancel_instance is in ui-web/src/rpc/generated.ts today.
Environment
- Raven
main at 6d8c363 (2026-09-18), web page served by raven web
- macOS 15, Apple Silicon
Logs or screenshots
N/A -- the defect is a missing control.
Summary
The page shows the sub-agents a conversation has running -- the desk's agents lane, the roster, the instance surface -- and none of those surfaces can stop one. The backend already exposes the verbs:
subagent.cancel_instance { session_key, agent, handle }stops the spawns behind one rendered (agent, handle) pair,subagent.interrupt { subagent_id }stops one spawn by id, andsubagent.cancel_session { session_key }sweeps the session.ui-web/srccalls none of them; the TUI's agents overlay does (ui-tui/src/components/agentsOverlay.tsx, theinterrupthelper postssubagent.interrupt).Steps to reproduce
Expected behavior
Each running instance row offers a stop, the way the TUI overlay does, wired to
subagent.cancel_instancefor the (agent, handle) the row already holds.Actual behavior
There is no stop on any instance row. The only stop on the page is the composer's go button, which is the main agent's
turn.cancel; with the fix that pairs it withcancel_by_sessionit stops every spawn of the session at once, which is the right meaning for that button and still leaves "stop this one" with no control.Two related but distinct gaps are filed separately:
turn.cancelwithout atarget-- A direct sub-agent chat cannot be stopped: no cancel on the instance surface, and the global stop omits the target #459;Waiting on the
ui-web/freeze to lift; the fix is a row control underui-web/src/features/subagents/(and the desk's agents lane) calling an RPC the generated client already carries --subagent.cancel_instanceis inui-web/src/rpc/generated.tstoday.Environment
mainat 6d8c363 (2026-09-18), web page served byraven webLogs or screenshots
N/A -- the defect is a missing control.