October 2, 2026
Subagents Stopped Being a Timer
Subagent runs can now be watched live and stopped on their own, every model call writes its own row, and the tool trace no longer changes shape when a turn settles.
Subagent runs were a spinner and a clock. Today you can open one, watch it live, and stop it. That was overdue.
Chalie hands work to subagents for web search, web browsing, mail, calendar and contacts, and the code agent. Each of those tool pills now has a robot icon and opens that run’s transcript in the side panel. It streams while the run is live and comes back after a reload. The panel is watch-only, with no reply box. The run is tied to the tool call that started it through a field the first transcript row already had, so there is no schema change and the link survives a restart. If retention has cleared the transcript, the panel says it has expired. Web search is one of these runs; see abilities.
Watching was the easy half. A long run could be watched and never interrupted, so the panel now has a Stop subagent button. Stopping ends that run and nothing else. The turn that started it keeps going, and the calling turn is told the user stopped the subagent, with instructions not to retry or hand the job off again.
The routing was the part that worried me. Live updates could land on a chat turn that shared the subagent’s turn number. Now they go only to an open panel for that exact run. A test proves a stop aimed at a subagent leaves a chat turn with the same number running. A late answer from a stopped run is never stored.
The bigger change is in how a turn gets written down. Each completed model call now writes its own assistant row. Before, a three-call turn folded into one reply, so reasoning and tool calls only appeared at the end. Now each call shows its reasoning and tools as it finishes. Only the row that ends the turn is marked settled, and it is written once and never changed. The demote-on-tool-start mechanism and its per-ability opt-out went with it. I would rather write a row once than rewrite it later and hope nothing read the old one.
The new rows broke something on the way in. A call that only asks for tools now stores an empty row, and enough of them pushed the user’s question out of the ten-row window the memory step reads. The model got an answer with no question. I found it the same day. The fix drops empty rows once, where history is read, instead of teaching every reader to skip them. I also removed a silent default: every answer row now has to say whether it settles the exchange.
The trace looked different before and after a turn settled, because the streaming version was drawn by an older list nobody had restyled. Both now share one card. Each call gets its own status dot: green when it succeeded, red when it failed, grey while it runs, announced to screen readers. The old dot was the brand colour on every row, whatever happened. Dividers are straight now. The rows used to sit rounded inside a padded card, so every divider curved at both ends. I also deleted a test that pinned state classes and dot labels. It checked presentation, not behaviour.
Last one, and the one I would have hated to hear about from a user. The 1.4.0 release build still reported the previous version. Its builds would have opened the last release’s database in place instead of copying it forward into their own. The version is bumped to 1.4.0-beta now.
The stop and the version bump are on the 1.4.0 line. The per-call rows have not reached it yet, and that is the next thing to land.
-
Subagent tool pills open a live, watch-only transcript panel
-
A running subagent can be stopped without touching the turn that started it
-
Each completed model call writes its own row, settled once and never rewritten
-
The tool-call trace draws as one card, before and after a turn settles
-
The 1.4.0 release reports its own version and copies the database forward