Two UX wins from this change:
1. Tool pills now render INSIDE the assistant message bubble, ABOVE
the streaming text. Previously: messages list rendered first, tool
tray rendered after — so the user saw the summary text mid-screen
and the tool pills below it, having to scroll UP to read the
summary they actually cared about. Now the visual flow is:
[user question] → [tool pills, chronological] → [summary text]
and the user's eye lands on the summary at the bottom.
2. Adjacent runs of the same tool name collapse into a single pill
with ×N counter. Click to expand. Kills the "8× shell.exec ✓"
wall of identical pills the user saw in prod (Dr Dave thread).
Tool events are now scoped to their owning assistant message
(message.toolEvents) rather than a global state — also means
stop/restart can't bleed events across turns.
Made-with: Cursor