agent pane: a Claude workflow's phases and agents in Session Info's Background tasks (Labs)
Leo, 2026-10-24, sharing reference screenshots of dynamic workflows: "It's just a basic one, but presumably we can, like, expand this a lot more. I mean, like we already did some part of this, right? I didn't really see or test it out yet."
Gallery: agent-pane.chat-inspector/workflow-running, agent-pane.chat-inspector/workflow-finished
Builds on #24874 (landed), and reads the fold data that #24789 and #24818 (landed) produce.
What changed
Behind Labs (workflowLabs, off by default), Session Info's Background tasks now leads with the chat's Claude workflows, running ones first, then finished. A workflow listed there leaves the Subagents section.
Each workflow shows:
- its name, how long it has run, and Stop (
stop_task); - a line of counts and tokens, e.g. "1 running · 2 queued · 3 done · 185k tokens";
- its description, on one line;
- its phases, each with its counts and a dot per agent. A done dot is filled, running is the accent, queued is an outline, and failed is red. The dots have a fixed size, so a change of state never moves the rows.
- A phase opens into its agents: the model once ("Model: Opus 5.5"), then each agent with a spinner (never a pulsing dot), or a check and how long it took, or "Queued".
- A phase with a running agent opens on its own, so live work is in view.
- "Up next: Judge", for the phases no agent has started (those aren't listed as phase rows while it runs).
A finished workflow reads "Workflow · Finished · 7 agents · 432k tokens", with each phase N/N.
The adapter (summary/foldWorkflows.ts) now derives each phase's state and counts from its agents, instead of "unknown". Claude's blocked reads as failed and skipped as cancelled. It also works out which phases run next and turns a model id into a name. The gallery and the tests both draw from a workflow's events fed through the real SubagentFold (summary/workflowFixture.ts), never from hand-built summaries.
New strings, in all 21 languages: workflow.queued, workflow.agentQueued, workflow.upNext, workflow.model, workflow.kind.
Risk: low. It's Labs-only, and the Inspector is unchanged with Labs off, since workflows is empty there.
Review: Codex (xhigh, read-only) blocked twice, and returned SHIP at the final head. The fixes:
- Claude's
blockedandskippedstates read as unknown; they now map to failed and cancelled. - After the design-token fix, per-dot margins changed the dots' wrap; they now use their own size and gap properties.
Testing
bun test test/workflow-tasks.test.tsx: 5 new tests, covering blocked and skipped agents, the derived phase states and counts, Up next and model names, the running view, the finished view with a phase opened, and both groups' heads.bun teston the inspector, summary and i18n tests plustest/workflow-tasks.test.tsx: 93 passed.vp fmt --check,vp lint(deny warnings) andtsc --noEmitreport nothing in the changed files.check-design-tokenspasses: spacing and row heights are on the scale, and the dots are glyph properties.scripts/cmux-next/check-l10n.shreports 0 errors, the strings build test passes, andprepush-gateis clean.- Rendered locally with the gallery matrix runner (Chromium, dark and light):
workflow-runningandworkflow-finishedshow all of the above. CI's gallery advisory renders the same cases (theGallery:line).
Agent session: huge-blue
🤖 Generated with Claude Code