# Loop Steps (/reference/workflows/loop-steps)



| Parameter                  | Type                                                                                                      | Default  | Description                                                                                                                          |
| -------------------------- | --------------------------------------------------------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `steps`                    | `WorkflowSteps`                                                                                           | Required | Steps to execute in each loop iteration                                                                                              |
| `name`                     | `Optional[str]`                                                                                           | `None`   | Name of the loop step                                                                                                                |
| `description`              | `Optional[str]`                                                                                           | `None`   | Description of the loop step                                                                                                         |
| `max_iterations`           | `int`                                                                                                     | `3`      | Maximum number of iterations for the loop                                                                                            |
| `forward_iteration_output` | `bool`                                                                                                    | `False`  | If True, each iteration receives the previous iteration's output as input. If False, all iterations receive the original loop input  |
| `end_condition`            | `Optional[Union[Callable[[List[StepOutput]], bool], Callable[[List[StepOutput]], Awaitable[bool]], str]]` | `None`   | Function or [CEL expression](/examples/workflows/cel-expressions/loop/cel-content-keyword) string to evaluate if the loop should end |
| `human_review`             | `Optional[HumanReview]`                                                                                   | `None`   | All HITL settings in a single config. See [HumanReview Config](/workflows/hitl/human-review).                                        |

## HumanReview configuration [#humanreview-configuration]

Pass these settings inside `human_review=HumanReview(...)`. They are not direct constructor arguments. See [HumanReview](/workflows/hitl/human-review) for the complete configuration and supported combinations.

| Parameter                                   | Type                   | Default         | Description                                                                                                                             |
| ------------------------------------------- | ---------------------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `requires_confirmation`                     | `bool`                 | `False`         | Pause for user confirmation before starting the loop                                                                                    |
| `confirmation_message`                      | `Optional[str]`        | `None`          | Message shown to user when requesting confirmation                                                                                      |
| `requires_iteration_review`                 | `bool`                 | `False`         | Pause after each iteration so the user can review and approve, edit, or reject. See [Loop HITL](/workflows/hitl/loop#iteration-review). |
| `iteration_review_message`                  | `Optional[str]`        | `None`          | Message shown to user during iteration review                                                                                           |
| `on_reject`                                 | `Union[OnReject, str]` | `OnReject.skip` | Action when rejected: `skip`, `cancel`, `retry`                                                                                         |
| Constructor example (install `agno` first): |                        |                 |                                                                                                                                         |

```python
from agno.workflow.loop import Loop
from agno.workflow.step import Step
from agno.workflow.types import HumanReview, StepInput, StepOutput

def prepare(step_input: StepInput) -> StepOutput:
    return StepOutput(content=step_input.input)

prepare_step = Step(name="prepare", executor=prepare)
step = Loop(
    steps=[prepare_step], max_iterations=2,
    human_review=HumanReview(requires_confirmation=True),
)
```
