# Failed workflow steps now report as StepError

> A failed step in an Agno workflow now emits a StepError event that names the step, and both console printers show the original failure.

- Published: 2026-09-08
- Author: Ashpreet Bedi
- Categories: Changelog
- Canonical: https://www.agno.com/articles/failed-workflow-steps-now-report-as-steperror
- Markdown: https://www.agno.com/articles/failed-workflow-steps-now-report-as-steperror.md

An Agno workflow emits `StepError` when a step's executor raises and when it returns an explicitly failed output. The event carries the failed step's name and index.

When a nightly billing run stops partway, `StepError` tells you which step broke without reading back through the whole stream.

`StepError` fires when the failure stops the workflow, as it does for a step with `HumanReview(on_error="fail")`. A step left on the default `on_error="skip"` is skipped, and the workflow carries on.

```python
from agno.workflow import HumanReview, Step

charge = Step(name="charge_cards", executor=charge_cards, human_review=HumanReview(on_error="fail"))

try:
    for event in workflow.run("Run nightly billing", stream=True, stream_events=True):
        if event.event == "StepError":
            print(f"{event.step_name} failed: {event.error}")
except Exception:
    pass  # the stream re-raises the original error after WorkflowError
```

Both console streaming printers render `StepError` directly. They show the original failure and clear any progress output left over from the step.

![Console output from workflow.print_response with streaming on: Step 1, fetch_orders, completed with "Fetched 42 orders". Step 2, charge_cards, is outlined in red and marked Failed with "payments API timed out after 30s". An Execution Error panel follows.](https://www.agno.com/images/v3-0-7-steperror-console.png)

Function reports still arrive as `StepOutput`, and Agent, Team and nested Workflow steps keep their existing stream.

Learn more about [handling step errors](https://docs.agno.com/workflows/hitl/error-handling#streaming) in the documentation.
