The Workflow Console
Reading the line-by-line console under the workflow editor while a run is in flight, and switching to the timeline when you need to know where the time went
The panel at the bottom of the workflow editor reports what a run is doing. It has two views, and the one you get by default — Console — is a line-by-line stream: one line per thing that happened, oldest at the top, newest at the bottom.
Reading a line
Every line has the same shape:
06:46:51 ✗ TOOL run_shell Tool execution failed 121ms
06:47:30 ⟳ MODEL Calling azure-foundry/gpt-5.4 4.3s…
06:46:38 ✓ RUNTIME Provisioned isolated runtime 5.07s
06:47:34 ✓ MODEL gpt-5.4 The test failure is in trace-… 14.6s
06:47:49 ✓ TOOL run_shell bun run build && bun test 2.35s- Time — when the line's work started, on the wall clock.
- Status — ✓ finished, ✗ failed, ⟳ still going, ⊖ skipped, ⚠ warning.
- Kind — what sort of work it was. Hover it for a one-sentence explanation:
MODEL— a call to a language model, labelled with the model that answered.TOOL— a tool the agent ran inside its sandbox.RUNTIME— sandbox lifecycle the platform performed for the block. These lines are dimmed: they are context, not your workflow's work. They stay visible because on a cold block the first few seconds you wait are the runtime being provisioned, and hiding that makes the console look stuck.BLOCK— a block of your workflow (a group header).
- Label — reads as an action while it runs (
Calling …,Running …) and as a result once it finishes (azure-foundry/gpt-5.4). - What it did — a short excerpt after the label, so you can tell one step from the
next without opening any of them. A
MODELline shows the opening of what the model said, or the tools it decided to call (→ run_shell). ATOOLline shows the arguments it ran with — the command forrun_shell, the path forread_file. The excerpt is cut to fit the row; the detail panel shows the rest. - Duration — how long it took. A line that is still going shows elapsed time with a
trailing
…and ticks upward.
A line appears only when the event behind it arrives. The console never shows a step that has not happened yet, so what you see is always something the run actually did.
What is kept, and what is not. The excerpts are stored with the run, so a saved run
reads the same way months later. They are length-limited (a few hundred characters per
step) and passed through secret redaction — an API key, bearer token, or password in a
command is replaced with [REDACTED] before anything is written.
Tool results are never stored: a result can be an entire file or API response, and the console records only its type and size. If a command's arguments are themselves sensitive, treat the run record as carrying them.
Runs from before this feature shipped have no excerpts and show the label alone.
Blocks group their own lines
Each block is a header row; its model, tool and runtime lines sit indented beneath it.
- While a run is in flight the console follows the newest block. When the next block
starts, the finished one folds to a single summary line —
Agent 1 · agent · 25 model calls · 26 tools (5 failed) · microvm— so the viewport stays on the work in progress. - A failed block stays open, down to the line that failed. Errors are never hidden behind a caret.
- Click a caret to fold or unfold a block yourself; your choice sticks for that run.
Opening a finished run therefore shows one line per block, plus any block that failed already expanded.
Following, filtering and searching
- While a run is live the console sticks to the newest line. Scroll up and it stops following so you can read; a control appears to jump back to the latest.
- The chips on the right narrow the stream: All, Err (only failures), Tools, Model. Block and run lines always stay visible so you never lose your place.
- The search box matches block names, tool names and model ids.
Clicking a line
Selecting a line opens the detail panel beside the stream. Its header repeats the line you
clicked — status, kind, label, failure message, duration — and underneath it says where the
line sits: the wall-clock time to the millisecond, the block it belongs to, and its rank among
that block's calls of the same kind (tool 7 of 26).
The sections below read in the order you need them when something failed:
- Error — only on a failed line. A platform error code (
PLANE_EXECUTION_FAILED) is shown as its own chip above the message; multi-line messages keep their line breaks. - Files — anything the block published, with an inline preview when the file type renders safely in the browser.
- Output (or Result for a tool call) and then Input (or Arguments), each with its size and a copy button. Tool results are shown as shape metadata (type, size) rather than content.
- Details — folded by default.
Didcarries a model call's text in full,Argumentsthe tool's arguments, alongside the timing window, model and token counts, runtime attributes, and the block, workflow and execution identifiers.
Maximize (⤢) opens the same panel over the whole editor.
The terminal execution:error carries the same safe code, message, retryable, and optional
blockId stored with the run. A block failure updates the existing failed block row instead of
adding a second conflicting row. Pre-block or global failures appear once at workflow level. In
Monitor → Run Details, the persisted error is shown even when no error span exists; use Focus
failed block when a blockId is available. Integration failures also prompt you to reselect the
account or required resource when that is the appropriate remediation.
The Timeline view
Switch to Timeline in the header for the trace view: the same run as a span tree with duration bars, and a rollup of where the time went — your workload, platform overhead, and time nothing has accounted for. Use the console to answer what is it doing, and the timeline to answer where did the time go. Your choice of view is remembered.
Opening a past run
Every run in a workflow's Runs table (and on the environment dashboard and a process flow's workflow action) opens in the same console. The sheet has three parts:
- Top left — the run, or the line you picked. Until you select a line it shows the run itself: the failure first (with its error code lifted into a chip), any files the run published, the final output, and the run's details folded underneath. Click a line in the terminal or a block on the canvas and the pane shows that instead; Esc goes back to the run.
- Top right — the canvas, read-only, with each block coloured by how it ended. Click a block to jump to its lines. ⤢ opens it full-screen for a tall workflow.
- Below — the terminal, the same line stream as in the editor, with the same Console | Timeline switch and the same filter chips. Fold it with the caret in its caption when you only want to read; the bar that remains still names the run's outcome.
Saved runs show BLOCK, MODEL and TOOL lines. They do not show RUNTIME lines — the
sandbox lifecycle is streamed while a run is live but is not part of the saved record.
On the workflow's operational view the open run is part of the page URL (?run=…), so you can
paste a link to a failing run and the person who opens it lands on the same sheet.
Sizing the panel
- Drag the divider to any height you like.
- Maximize (⤢ in the header) hides the canvas and gives the console the whole editor; ⤡ or Esc puts it back.
- Collapse it to a single bar and it still names the activity currently running, so you can work on the canvas and see the run is alive.
Live TOOL lines require a recent sandbox runtime. On older deployments a run's tool
calls only appear once the block finishes; model and runtime lines stream either way.