> ## Documentation Index
> Fetch the complete documentation index at: https://docs.persistence.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Transitions

> Control when a conversation flow moves from one node to the next.

Transitions are the edges out of a node. Add them from the node's **Transitions** menu, then drag the handle to the next node.

## Conversation transitions

| Menu label | Default edge label | Use it when |
| - | - | - |
| **Prompt** | Prompt transition | The model should decide that this stage is done. Describe the exit condition in the transition text. |
| **Condition (if)** | If... | A variable rule should route without waiting on the model. |
| **Else** | Else | No other transition matched. One Else per node. |
| **Before user response** | Before user response | Leave the node before the caller speaks. Exclusive with other response-timed edges. |
| **After user response** | After user response | Leave the node after the caller speaks. Exclusive with other response-timed edges. |

**Before user response** and **After user response** replace other transitions on that node. Use them for a short spoken line that must not wait on a prompt condition.

You can reorder **Prompt** and **If...** transitions of the same type. Evaluation follows that order.

## Condition rules

On **Condition (if)** transitions, and on **Condition** nodes, each rule has a field, an operator, and a value.

Combine rules with **Any** or **All** of the following conditions match.

| Operator | Label |
| - | - |
| `=` | Equals |
| `!=` | Does not equal |
| `>` | Greater than |
| `<` | Less than |
| `>=` | Greater than or equal |
| `<=` | Less than or equal |
| `contains` | Contains |
| `not_contains` | Does not contain |
| `exists` | Is present |
| `not_exists` | Does not exist |

Use a variable reference for the field. **Is present** and **Does not exist** do not take a comparison value.

Always provide **Else** (or **If failed** / **If failed to call** on extract and function nodes) for values you did not anticipate.

## Function and extract edges

| Node | Failure label |
| - | - |
| Function | **If failed to call** |
| Extract | **If failed** |

Wire those edges to a recovery conversation, a transfer, or **End call**. Do not leave them unconnected.

## Checklist before you publish

* Start connects to the first speaking or action node.
* Every conversation has at least one way out.
* Every function and extract node has a failure edge.
* Transfer and end nodes are the terminals you intend.
* Prompt transition text describes a real exit, not a restatement of the node prompt.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.