FitWhen to use it — and when not
Use it when
- Agent runs from ~10 seconds to hours
- Research, data processing, multi-tool workflows
- Anything users will need to debug or explain later
Skip it when
- Sub-second responses
- End-user flows where the steps mean nothing to the user — show a single honest status instead
AnatomyThe parts of the pattern
- Run headerGoal, overall progress, elapsed time.
- StepsStatus icon, plain-language name, duration.
- RetriesVisible, with the reason, not swallowed.
- DetailsExpandable raw logs for people who want them.
GuidelinesDo & don’t
Do
- Name steps in user language: "Reading 40 pricing pages".
- Show retries and partial failures honestly.
- Keep the log after the run as the record of what happened.
Don’t
- Fake progress bars that move with time, not work.
- Collapse an error into "Something went wrong".
- Dump raw JSON as the default view.
In the wildReal-world examples
ChatGPT deep researchPerplexityDevinManus
Products named for reference only — no affiliation, and the demo above is an original illustration, not a copy of their UI.
For engineersImplementation notes
- Emit typed events (step_started, step_retry, step_done, run_done) over a stream; the UI is a reducer over events.
- Persist events so a refreshed tab or a teammate can replay the run.
- Attach trace ids to each step for your observability stack.