You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
While a spawned sub-agent runs, its live account (transcript, usage, tool calls) is held in a process-wide index keyed by the node id the model chose for the spawn. That id is unique for one conversation only. Two conversations running a spawn under the same id therefore share one entry.
Steps to reproduce
In conversation A, have the model spawn a task with node_id: "step1" on a lane that publishes its transcript (the in-process Raven lane or an ACP agent), long enough to watch.
While it runs, in conversation B spawn another task with the same node_id.
Open A's task in the desk tasks tab (or read subagent.context for A's step1).
Expected behavior
A's context panel shows A's own run; B's shows B's; each run's live view lasts until that run ends.
When A finishes first, its exit drops the shared entry, so B's live view goes blank until B ends.
Where it is decided
raven/agent/subagent/activity.py: _live: dict[str, RunActivity], one per process, keyed by a plain string.
raven/agent/subagent/manager.py: activity.collecting(live_key=call_id, ...) with call_id = record.node_id (since a92514e, 2026-09-07, when the spawn record id became the model's own node_id; before that the key was a minted, globally unique call id).
The dag side does not have this problem: node_live_key(run_id, node_id) carries the run id, and the instance index _live_instances is already keyed by (session_key, agent, handle).
Fix
Key the spawn entry by the record's address (the conversation's node root plus the id), a spawn_live_key(root, node_id) helper beside node_live_key, used by the writer and both readers. No wire change. Fix in #577.
Summary
While a spawned sub-agent runs, its live account (transcript, usage, tool calls) is held in a process-wide index keyed by the node id the model chose for the spawn. That id is unique for one conversation only. Two conversations running a spawn under the same id therefore share one entry.
Steps to reproduce
node_id: "step1"on a lane that publishes its transcript (the in-processRavenlane or an ACP agent), long enough to watch.node_id.subagent.contextfor A'sstep1).Expected behavior
A's context panel shows A's own run; B's shows B's; each run's live view lasts until that run ends.
Actual behavior
collectingoverwrote the entry).Where it is decided
raven/agent/subagent/activity.py:_live: dict[str, RunActivity], one per process, keyed by a plain string.raven/agent/subagent/manager.py:activity.collecting(live_key=call_id, ...)withcall_id = record.node_id(since a92514e, 2026-09-07, when the spawn record id became the model's ownnode_id; before that the key was a minted, globally unique call id).raven/rpc/methods/subagent.py(subagent.context) andraven/rpc/methods/tasks.py(tasks.list, since fix(*): live spawn record, live usage and a leaner node panel subtitle #567).node_live_key(run_id, node_id)carries the run id, and the instance index_live_instancesis already keyed by(session_key, agent, handle).Fix
Key the spawn entry by the record's address (the conversation's node root plus the id), a
spawn_live_key(root, node_id)helper besidenode_live_key, used by the writer and both readers. No wire change. Fix in #577.