# Workflow step content keeps 0 and False after a reload

> Agno workflows now store StepOutput content that is an int, float, bool or str as that type, so a step that returned 0 or False reads back as 0 or False from the database and the AgentOS workflow API.

- Published: 2026-10-27
- Author: Kaustubh Shukla
- Categories: Changelog
- Canonical: https://www.agno.com/blog/workflow-step-content-keeps-0-and-false-after-a-reload
- Markdown: https://www.agno.com/blog/workflow-step-content-keeps-0-and-false-after-a-reload.md

Agno's `StepOutput.to_dict()` now writes ints, floats, bools and strs as themselves, so a step that returned `0` reads back as `0` once the workflow session comes out of the database. Earlier releases saved that value as `"0"`, and `"0"` is truthy, so a later step that branched on it went the other way after a reload.

The same serializer feeds a HITL resume by `run_id`, a later run reading `step_results` from the session, and the AgentOS workflow API, so all three now return the original type. We ran this workflow on SQLite and read the session back through a second `Workflow` object:

```python
from agno.db.sqlite import SqliteDb
from agno.workflow import Step, Workflow
from agno.workflow.types import StepInput, StepOutput

def count_errors(step_input: StepInput) -> StepOutput:
    return StepOutput(content=0)

def needs_review(step_input: StepInput) -> StepOutput:
    return StepOutput(content=False)

steps = [Step(name="count_errors", executor=count_errors), Step(name="needs_review", executor=needs_review)]
Workflow(name="checks", db=SqliteDb(db_file="tmp/checks.db"), steps=steps).run(input="go", session_id="s1")

reloaded = Workflow(name="checks", db=SqliteDb(db_file="tmp/checks.db"), steps=steps)
for step in reloaded.get_session(session_id="s1").runs[-1].step_results:
    print(step.step_name, repr(step.content), bool(step.content))
```

Real output, earlier release and this release:

```text
# Before
count_errors '0' True
needs_review 'False' True

# Now
count_errors 0 False
needs_review False False
```

Rows written by earlier releases keep their strings, because a stored `"0"` can't be told apart from a real string `"0"`.

See the [cookbook](https://github.com/agno-agi/agno/blob/main/cookbook/04_workflows/06_advanced_concepts/previous_step_outputs/access_previous_outputs.py), and learn more about [accessing previous steps](https://docs.agno.com/workflows/access-previous-steps) in the documentation.
