# Tools and parallel steps keep results like 0 and False

> Agno now passes a sync tool result of 0, False or an empty list to the model, and Parallel workflow steps pass the same values on to later steps.

- Published: 2026-09-16
- Author: 哈基米
- Categories: Changelog
- Canonical: https://www.agno.com/articles/tools-and-parallel-steps-keep-results-like-0-and-false
- Markdown: https://www.agno.com/articles/tools-and-parallel-steps-keep-results-like-0-and-false.md

Agno now treats a `0`, `False` or `[]` as a real answer when a sync tool returns it and when a workflow step produces it. Both places used to count those values as empty.

### Sync tool results reach the model

When an agent ran with `run()`, a tool that returned a falsy value sent the model an empty tool message, and Agno saved that empty string to the session. `arun()` already sent the value. `run()` and `arun()` now both pass it on:

```python
def count_open_tickets(customer_id: str) -> int:
    """Count the customer's open support tickets."""
    return 0

# Before, with agent.run(): the model received ""
# Now: the model receives "0"
```

With the real value, the model can tell "no open tickets" apart from a tool that produced no output.

### Workflow steps keep falsy content

Agno counted a step's content as missing whenever it was falsy. A step that produced `0` or `False` looked empty to later steps, so `get_all_previous_content()` skipped it. Inside `Parallel`, the same check dropped it from `get_step_content()` and from the combined `Parallel` output. Agno now treats step content as present unless it's `None` or blank text.

Learn more about [writing tools](https://docs.agno.com/tools/creating-tools/python-functions) and [parallel workflows](https://docs.agno.com/workflows/workflow-patterns/parallel-workflow) in the documentation.
