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

# Fast Response

> Fast Response decides whether a step waits for the caller to reply or moves straight on. Leave it on Auto to decide from the line itself, or pin it with Force, Disable or a variable.

## What is Fast Response?

After the assistant speaks a line, it has to decide whether it has just asked the caller something. If it has, it waits for an answer, with the normal [Silence Tolerance](/conversation-dynamics/silence-tolerance) timing. If it hasn't, the line is a statement and the assistant moves on after only a brief pause if the caller says nothing. That quick move-on is the "fast response".

By default the decision is read from the wording: a line with a question mark waits, and so does a direct request such as "please confirm your address" or "let me know when you're ready". Any other line moves on. That works for most lines, but not all of them:

* A rhetorical or quoted question ("Any questions? No? Great, let's keep going.") should not wait.
* A statement that hands the floor to the caller ("Take your time.") should wait.
* A shared closing step may need to move on in one call and wait in another.

**Fast Response** lets you pin the decision on the step instead of relying on the punctuation.

***

## Where to set it

**Scripts → *(your script)* → Script tab → step menu → Fast Response**

The tooltip reads: *"Whether this step waits for a reply. Auto decides from the line itself — a '?' waits, no '?' walks on. Force always walks on, Disable always waits, and Variable lets an earlier step decide per call"*.

| Option             | What the step does                                                                                              |
| ------------------ | --------------------------------------------------------------------------------------------------------------- |
| **Auto** (default) | Decides from the line itself: a `?` (or a direct request like "please confirm…") waits; anything else moves on. |
| **Force**          | Always moves on, even if the line contains a question mark.                                                     |
| **Disable**        | Always waits for a reply, even if the line has no question mark.                                                |
| **Variable**       | Reads the decision from a variable an earlier step has written, so it can change from call to call.             |

A step set to anything other than **Auto** shows a lightning badge with its setting.

The setting applies to everything the assistant says while the step is running, including the follow-up lines it speaks while waiting on that step. Moving on is still bounded: a forced step whose **Otherwise** loops back to itself nudges the caller at most twice and then stops, so it can't loop forever.

For a step to move on by itself, its **Otherwise** must point at a different step.

***

## Using a variable

Choose **Variable** and type a single variable reference into the box, for example `{{custom.fast_response}}` (the placeholder shown). The box accepts exactly one `{{namespace.field}}` reference and nothing else; any other text is flagged as invalid and isn't saved.

When the step speaks, the variable is read fresh:

| Variable value                          | Behaves like                     |
| --------------------------------------- | -------------------------------- |
| `force`                                 | **Force** — moves on             |
| `disable`                               | **Disable** — waits              |
| anything else, including empty or unset | **Auto** — decided from the line |

`{{custom.fast_response}}` is a string custom value, for example `force`. Write it from a [Code Step](/tools/code-step/overview) (or any tool that writes variables) before the step that reads it:

```python theme={null}
def run():
    if {{custom.all_questions_done}} == "true":
        {{custom.fast_response}} = "force"
    else:
        {{custom.fast_response}} = ""
    return True
```

Because an unset or unrecognised value falls back to **Auto**, a variable can never pin a step by accident.

***

## How it relates to other settings

* **[Silence Tolerance](/conversation-dynamics/silence-tolerance)** sets how long the assistant waits once it *is* waiting for a reply. Fast Response decides *whether* it waits at all. A step on **Force** uses the short move-on pause instead of its Silence Tolerance timing.
* **[Response Eagerness](/conversation-dynamics/response-eagerness)** controls how quickly the assistant answers once the caller has spoken. It doesn't change whether a step waits.

***

## Best Practices

1. **Leave Auto on most steps.** Writing questions with a question mark and statements without one is usually enough.
2. **Use Force for rhetorical or quoted questions.** Otherwise the assistant waits for an answer nobody is going to give.
3. **Use Disable for statements that hand over the floor.** "Take your time" or "Go ahead whenever you're ready" should wait.
4. **Use Variable for shared steps.** One closing step can move on for callers who are done and wait for everyone else.

***

## Next Steps

* [Silence Tolerance](/conversation-dynamics/silence-tolerance) — how long the assistant waits when it is waiting
* [Interruptions](/conversation-dynamics/interruptions) — whether the caller can talk over a step
* [Steps Overview](/flows/steps) — every setting on the step menu
