Running and monitoring
Start workflow runs with inputs, follow per-step progress live, handle steps waiting on a person, and diagnose failed or timed-out executions.
Every run of a workflow is recorded as an execution. Starting a run returns immediately with an execution id — the pipeline itself executes asynchronously — and the console drops you straight onto the execution page, which refreshes itself while the run is in progress.
Starting a run
On the workflow detail page (Build → Workflows → your workflow), click Run. What happens next depends on the pipeline's declared inputs:
- If the pipeline references
$userinput.<key>placeholders, the Run panel opens with one field per key. All declared keys are required — running with a missing key would send the literal unresolved placeholder to an agent, so the console collects them first. - If the pipeline declares no user inputs, the run starts immediately. An optional panel still lets you pass extra fields as raw JSON if an agent expects them.
- A JSON toggle on the panel lets you supply the whole input object by hand for irregular shapes.
Scheduled workflows start runs the same way, automatically, at the configured
recurrence — those executions appear in the same list as manual ones. So do
runs started from the workflow's
webhook trigger, attributed to the
webhook principal.
A run is refused (with an explanatory error) when the workflow is not active — most commonly because it is orphaned: an agent it dispatches to was removed. See Agents in workflows for how to recover.
The executions list
The workflow detail page lists all of its executions with the execution id (its last 8 characters — hover for the full id, handy for matching a row against audit events or API responses), started time, status, completed time, and duration. Timestamps render in your local timezone. The Started and Completed headers sort the table (newest completed first by default; a still-running execution slots in by its start time). Click any row to open the execution page. Execution statuses you will see:
- Running — the run is in progress. A run also stays
Runningwhile a step is waiting on a person (see Steps that wait on a person) — waiting is shown on the step, not on the run. - Completed — every step finished and the run closed normally.
- failed — a step errored or timed out; the run stops and the error is recorded on the execution.
- onhold / aborted — the run was paused or cancelled before finishing. An
onhold(orfailed) run can be resumed by API clients: starting the workflow again with the execution id re-runs the current step, optionally with additional inputs merged in.
Inside an execution
The execution page shows the run end to end:
- Header — execution id, start/completion timestamps, and a live status chip. While the run is in progress the page re-fetches automatically every few seconds, so you can watch it without reloading.
- Error banner — if the run failed, the recorded error appears at the top.
- Inputs — the input object the run started with, rendered as readable key/value rows; a braces toggle shows the raw JSON.
- Step timeline — one row per pipeline step, in order. Each agent row
shows the agent, its status, its timestamp, its output (when the agent
returned one — message text as prose and data fields as key/value rows,
with the raw JSON behind a braces toggle), and its error (when it failed).
Because the execution snapshots its pipeline at start, the timeline shows
every step from the beginning: the currently executing step pulses as
running, steps not yet dispatched render as queued, and finished
steps carry their real reported status. A step's reported status is one of
running,completed,failed,input-required, orauth-required— the last two mean the step is waiting on a person (see below). Executions from older platform versions may showSuccesswherecompletedis meant. Non-agent steps join the same timeline: switch rows render the branch decision (input, resolved value, matched case, next node), steps on untaken branches show as skipped, and a step parked at an approval gate shows awaiting approval with a link to the Approvals page. - Runtime events — the audit trail emitted during this run: tool calls,
LLM calls, egress decisions, and denials, each tagged with the emitting
agent. Events are grouped into one expandable section per pipeline step
(header: step number, node id, dispatched agent, event count, time range,
and a denials chip when any were denied); steps containing a denial or
error start expanded, the rest collapsed, and workflow-level events such
as run start and completion stay as standalone rows in stream order. The
step lifecycle events themselves carry short previews — the dispatched
message on
workflow_step_startedand the returned output onworkflow_step_completed(truncated, and omitted entirely for workflows whose payload capture is switched off via the API). This is the same event stream the Security section reads, correlated to the run by execution id.
Steps that wait on a person
A step does not always run to completion in one go — an agent can pause its work until a person acts. The step then shows one of two waiting statuses in the timeline:
- auth-required — the agent needs someone to connect or authorize an account before it can use a tool on their behalf (for example, a delegated integration the user has not connected yet).
- input-required — the agent asked for more input or an approval before continuing (for example, a governed action deferred to an approver).
A third waiting state comes from the workflow itself rather than an agent: awaiting approval, when the run reaches an approval gate authored into the pipeline. It behaves the same way — the run stays Running, the decision is made on the My Approvals page — but it waits on the gate's own timeout (72 hours by default) instead of the step time limit below.
While a step waits, the run itself stays Running — waiting is a per-step
state, and the step row records why it is waiting and since when. The runtime
events for the execution carry a matching Step awaiting user
(workflow_step_waiting) event, which also appears in the Governance section's
event stream, so waiting runs are visible outside the execution page too.
Nothing needs to be restarted: once the person acts — connects the account, supplies the input, or approves the action (see Approvals for deferred tool calls) — the run picks up on its own and the step continues. A waiting agent step is still subject to the step time limit below, and an approval gate to its own timeout policy, so a run never waits forever: if nobody acts in time, the step fails (or the gate's on-timeout policy applies) and the run resolves accordingly.
Step time limits
Every agent step runs against a time budget. By default a step may run (or
wait) for 35 minutes; when the budget expires, the step is marked
failed with a "step timed out" error and the run is marked failed. The
limit applies from the moment the step is dispatched, including any time
spent waiting on a person.
API clients can override the budget per step by setting timeoutSeconds on a
pipeline node; your platform operator can also change the default. Steps
without an override use the default.
Approval gates are the exception:
a gate waits on its own authored timeout (default 72 hours) and resolves per
its on-timeout policy, not the step budget.
Interruptions and restarts
Runs are durable: an execution in progress survives platform restarts and upgrades. If the platform is interrupted mid-run, the run is picked up again automatically — steps that already finished keep their results and are not re-run, and the run continues from the step that was in flight. Waiting steps stay waiting across a restart; nobody has to re-trigger anything.
One consequence to know: step delivery is at-least-once. If an
interruption hits at exactly the wrong moment (both the platform and the agent
lost track of the attempt), the in-flight step is dispatched again rather than
silently dropped. Each attempt carries the same stable
X-Workflow-Execution-ID and X-Workflow-Step-ID request headers, so agents
whose actions must not happen twice can use them to deduplicate — see
Agents in workflows for what agents
receive on dispatch.
Diagnosing failures
When a run fails, work top-down:
- Read the execution-level error banner — it names what stopped the run.
- Find the first failed row in the step timeline; its inline error message is the agent's own report.
- Check the runtime events for that step — its group is expanded automatically when it contains a denial or error, so a blocked egress call, a denied tool, or a failed LLM call is usually one click away.
- If the failure was an unresolved input, re-run with the missing
$userinputkey filled in; the placeholder substitution happens before any step dispatches, so such runs fail immediately without touching an agent. - A step timed out error means the step exhausted its time budget — often a step that was waiting on a person nobody acted on, or an agent that hung. Check whether the step was in a waiting state first, then re-run (or resume via the API) once the blocker is resolved.
Follow-up questions and file inputs
Two additional capabilities are available on the platform API:
- Execution chat — each execution keeps a conversation thread, so a client can ask follow-up questions about a run's results and retrieve the message history for that execution.
- File uploads — for workflows whose inputs include files, the API issues short-lived upload URLs so files can be uploaded directly to storage and referenced by the run.
Both are exposed to API clients; the console does not currently surface a screen for them.
Branching and approval gates
Add conditional branches (switch nodes) and human decision points (approval gates) to a pipeline, and follow the branch taken or the decision made on each run.
Webhook triggers
Give a workflow its own secret URL so any external system can start a run with a single POST — no platform credentials required.