Workflow progress UI shows only completions: healthy long phases look stalled, wedged agents are invisible

Status Open
Maintainer reply None cached
Activity 0 comments · opened Jul 19, 2026

Summary

The Workflow tool's progress UI (/workflows and the inline progress tree) only advances on agent completions and explicit log() calls. During long-running phases it shows no live activity signal at all, which makes healthy runs look stalled and genuinely-stalled agents invisible.

What happened (real session, Claude Code desktop app)

A 7-package Workflow run with sequential phases (5 parallel implement agents → 2 sequential phases → fan-out reviews). Observed UX failures over ~1 hour of watching:

  1. Implement phase looked frozen for ~30+ minutes while all five agents were demonstrably working — their transcript JSONLs were growing continuously (one agent logged 121 tool calls in the first 10 minutes). The UI showed zero movement because nothing had completed yet. The user's read: "the workflow is not running."
  2. Later phases render as empty groups (declared in meta.phases) with no indication they are pending on an earlier phase vs. dead. "Hardening: 0 agents" reads as broken, not as "blocked by Typed custody, which is 40 min into its run."
  3. A silently wedged agent was indistinguishable from a thinking agent. One implement agent's transcript froze for 48+ minutes with no journal event. Nothing in the UI flagged it. The orchestrating session only caught it by ls -l on the transcript directory and comparing mtimes by hand.

What would fix it

Per-agent, in the progress tree:

  • live activity indicator driven by transcript events (last-event age, tool-call count, current tool name) — the data already exists in agent-*.jsonl, it's just not surfaced;
  • a stale/heartbeat warning when an agent has emitted no event for N minutes (configurable, e.g. 5–10), escalating visually — this is the difference between "Fable is thinking" and "this agent died and your pipeline will silently drop it to null";
  • elapsed time per running agent.

Per-phase:

  • pending phases should say what they're waiting on ("starts after: Typed custody") instead of rendering as empty groups;
  • phase header should show running/completed/total agent counts.

Journal:

  • journal.jsonl records only started/result. A periodic lightweight progress event (event count, last tool) would let both the UI and the orchestrating model check liveness without spelunking multi-MB transcripts.

Why it matters

Multi-agent workflows are the headline feature for long autonomous runs. When the progress surface can't distinguish "five Fable agents grinding through a big codebase" from "the run is dead," users interrupt healthy runs (wasting hours of agent work) or fail to notice dead agents (silently losing a package from the pipeline). Both happened or nearly happened in this session.

Version: Claude Code desktop (macOS), Workflow tool multi-agent runs, session 2026-07-19.

View original on GitHub ↗