# Run a workflow

Run another workflow as part of this one. It runs inside the current turn with only the input you map, and hands back only what it declares in its Output.

Workflow step, Run a workflow:

- Step kind: `WorkflowCall`
- Operations: `Intent`
- Input: `Prompt, Location`

## Inputs

- `Operations` (string[], required): Declared workflow operations to run. Several run side by side and return together.
- `Input` (mapping): What each called workflow is started with, checked against the request schema of its trigger.
- `Attempts` (integer, default `1`): How many attempts the step may take.
- `OnExhausted` (policy): What happens when the attempts run out.

## Outputs

- `<output>` (any): What the called workflow declares in its Output, checked against it before it is returned.

## Example

```yaml
Operations:
  - Workflow:
    Name: Intent
    Locator: 85d12c16-c88a-47e5-94a9-28b16fa05436
    Trigger: Request

Steps:
  - WorkflowCall: Collect
    Operations: [Intent]
    Input:
      Prompt: { Field: Trigger.Prompt }
      Location: { Field: Trigger.Location }
```

A `Workflow` binding’s locator is the id of the workflow it calls. `Trigger` names which of its requests the call uses, and is needed only where it accepts more than one. A workflow can be bound only if it declares a `Description`, because that is how it is described to a model that calls it.

## How the called workflow runs

- **Inside the turn.** It opens no run and no turn of its own. Its steps are recorded in the calling run, under the calling step’s path.
- **Its own conversation.** It sees only the input you map, not the caller’s conversation, and the caller sees only its output, not its model exchanges.
- **Pinned.** It runs the version that was current when it started, even if a newer one is uploaded while it runs.
- **Its questions surface on the caller.** A wait it raises pauses the calling turn and is answered on the calling run; the answer goes back to the workflow that asked.
- **Its own Budget is not applied.** Its work counts against the calling turn’s budget instead. Its steps keep their own attempts and loop bounds.

> **A model can call a workflow too**
> List a workflow operation on a `ModelCall` and the model can call it like a tool, with the workflow’s request schema as the tool’s input. `ExecuteModelToolCall` runs those calls the same way.

## Related steps

- [Call a tool](/docs/workflows/steps/call-a-tool/): Call one tool instead of a workflow.
- [For each](/docs/workflows/steps/for-each/): Run a workflow once per item of a list.
- [Workflows and steps](/docs/workflows/workflows-and-steps/): The file a called workflow is written in.
