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

# The Workflow Builder

> A tour of the drag-and-drop Voice Workflow builder — canvas, node palette, the inspector, auto-arrange, validation, and the toolbar.

# The Workflow Builder

The builder is where you draw a phone conversation as a **state machine** — a
top-down tree of nodes, each one a phase of the call. You drag nodes from a
palette onto a canvas, connect them with labelled edges, edit them in a right-hand
inspector, and enable it when it's ready.

<Note>
  Voice Workflows are in **alpha**. Open them in **Agent Studio → the left sidebar → Workflow**.
</Note>

## Opening the builder

In **Agent Studio**, open the **Workflow** item in the left sidebar (it carries an
**Alpha** badge). The builder renders inline in the studio, so you can switch
between it and the rest of the agent's configuration without leaving the page.

<Note>
  **Workflow** appears in **Developer Mode**. If you don't see it in the sidebar,
  turn on Developer Mode in the studio.
</Note>

If you're new to the feature, start with the
[Voice Workflows overview](/docs/voice/workflows) to understand what a
workflow is and how it differs from a normal single-prompt agent.

## The canvas

The center of the builder is the **canvas** — the tree of your conversation.

* **Add nodes** by dragging them from the **node palette** on the left. The palette
  is grouped by family: **Conversational** (nodes that speak and own a caller turn),
  **Internal** (nodes that run instantly with no caller turn), and **Terminal**
  (the End Call node). See [Node Types](/docs/voice/workflows/nodes) for every node.
* **Connect nodes top-down.** Every node has an **input handle on top** and an
  **output handle on the bottom**. Drag from one node's **bottom** output to the
  next node's **top** input to create an edge. Workflows flow downward.
* **Every edge shows its condition** as a label on the canvas, so you can read the
  routing at a glance — an unconditional "else", a natural-language **Prompt**
  condition, or a deterministic **Equation**. You author these in the
  [Inspector](#the-right-sidebar) and the details live on the
  [Transitions page](/docs/voice/workflows/transitions).

### Mark the Start node

One node is the **Start node** — where the call begins. Select a node and mark it
as the Start node so the engine knows which phase opens the conversation. The
opening node is the one that greets the caller (its **First Message**, if set).

## Layout tools

Two tools keep a growing tree readable:

<CardGroup cols={2}>
  <Card title="Auto-arrange" icon="diagram-project">
    Lays the whole graph out as a clean **top-down tree** — handy after you've
    been dragging nodes around or right after loading a template. Loading a
    template auto-lays-out for you.
  </Card>

  <Card title="Fullscreen" icon="circle-nodes">
    Expands the canvas to fill the screen for large flows. Press **Esc** to exit.
  </Card>
</CardGroup>

## The right sidebar

A collapsible sidebar on the right holds four tabs.

<Tabs>
  <Tab title="Inspector">
    Edits whatever you've selected. Select a **node** to edit its fields (prompt,
    First Message, the variables it extracts and requires, model/voice overrides,
    and so on — see [Node Types](/docs/voice/workflows/nodes)). Select an **edge**
    to open the **edge condition editor** and choose how that transition fires —
    Unconditional, Prompt, or Equation. Conditions are explained on the
    [Transitions page](/docs/voice/workflows/transitions).
  </Tab>

  <Tab title="Variables">
    Declare the **typed variables** the workflow collects and branches on —
    `string`, `integer`, `number`, or `boolean`, with an optional **enum** of
    allowed values. Reference any of them anywhere as `{{name}}`. Full details on
    the [Transitions, Variables & the Director](/docs/voice/workflows/transitions)
    page.
  </Tab>

  <Tab title="Settings">
    The **Global Prompt** — the shared personality and rules that are **prepended
    to every node's prompt** — plus the **Director model** and **temperature**.
    The Director is the fast LLM that, each ambiguous turn, extracts variables and
    picks the prompt-condition edge; see
    [the Director](/docs/voice/workflows/transitions#the-director). An enabled
    workflow uses **this Global Prompt + node prompts — not the agent's
    Behavior-panel prompt** (see [Going Live](/docs/voice/workflows/publishing)).
  </Tab>

  <Tab title="Issues">
    The results of **validation** — **errors** and **warnings**. Run **Validate**
    from the toolbar to refresh this list. See
    [Going Live](/docs/voice/workflows/publishing).
  </Tab>
</Tabs>

<Tip>
  The sidebar is collapsible — collapse it to give the canvas more room while you're
  laying out the tree, then reopen it to edit a node or edge.
</Tip>

## The toolbar

| Button                 | What it does                                                                                                                                                                                                |
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Templates**          | Start from a prebuilt flow — Lead Qualification, Appointment Booking, Support Triage, or Blank. Loading one auto-arranges into a top-down tree. See [Templates](/docs/voice/workflows/templates).           |
| **Validate**           | Runs the engine validator and fills the **Issues** tab with errors and warnings.                                                                                                                            |
| **Save**               | Persists the canvas, **including the Enabled state**. The runtime reads your agent's current saved config, so saving an **enabled** workflow makes it run on the next call.                                 |
| **Enabled / Disabled** | The single switch. **Enabled** → the agent follows the workflow (live **and** Test call). **Disabled** → calls **ignore the workflow** and fall back to the normal agent. New workflows start **Disabled**. |
| **Test call**          | Launches a web call so you can talk to the workflow in your browser. It runs whatever you've **saved and enabled** — there's no test-in-draft.                                                              |
| **Clear**              | Empties the canvas.                                                                                                                                                                                         |

<Warning>
  The **Enabled** toggle is what makes a workflow run — on both live calls and the
  **Test call**. **Save** persists the toggle along with your edits, so the order is:
  enable, **Save**, then test. Because enabling makes the workflow live, enabling it
  to test also means real callers get it. More on the model is on the
  [Going Live](/docs/voice/workflows/publishing) page.
</Warning>

## Build your first flow

<Steps>
  <Step title="Open the builder">
    In **Agent Studio**, open **Workflow** in the left sidebar (Developer Mode).
    Either start from a **Template** or build on a blank canvas.
  </Step>

  <Step title="Drag in your nodes">
    From the left palette, drag in the nodes you need — a **Conversation** node to
    greet, **Collector** nodes to capture details, **Condition** nodes to branch,
    and an **End Call** node to finish. They're grouped Conversational / Internal /
    Terminal. See [Node Types](/docs/voice/workflows/nodes).
  </Step>

  <Step title="Connect them top-down">
    Drag from each node's **bottom** output to the next node's **top** input. The
    flow reads downward, and every edge shows its condition as a label.
  </Step>

  <Step title="Mark the Start node">
    Select your opening node and mark it as the **Start node** — that's where the
    call begins (and where the First Message greets the caller).
  </Step>

  <Step title="Declare variables & set conditions">
    Open the **Variables** tab to declare the typed variables you collect, then
    select each edge and use the **Inspector**'s condition editor to set how it
    fires. See [Transitions](/docs/voice/workflows/transitions).
  </Step>

  <Step title="Tidy & validate">
    Click **Auto-arrange** to lay the tree out cleanly, then **Validate** and
    resolve any **errors** in the **Issues** tab (warnings won't block you).
  </Step>

  <Step title="Enable, save, test">
    **Save** as you go. When it's ready, flip the toggle to **Enabled** and
    **Save** to run it on real calls, then use **Test call** to talk to it in your
    browser. See [Going Live](/docs/voice/workflows/publishing).
  </Step>
</Steps>

## Where to go next

<CardGroup cols={2}>
  <Card title="Node Types" icon="table-list" href="/docs/voice/workflows/nodes">
    Every node — Conversation, Collector, Condition, Set Variable, API Request,
    Transfer, End Call, and Global.
  </Card>

  <Card title="Transitions, Variables & the Director" icon="right-left" href="/docs/voice/workflows/transitions">
    How edges, conditions, typed variables, and the Director route each turn.
  </Card>

  <Card title="API Request Node" icon="plug" href="/docs/voice/workflows/api-request">
    Call an external API mid-call and branch on the response.
  </Card>

  <Card title="Going Live" icon="rocket" href="/docs/voice/workflows/publishing">
    Validate, enable/disable, save, and put the workflow on real calls.
  </Card>
</CardGroup>
