Skip to content
Tone is open sourcestar us on GitHub to follow along

concepts

Workflows

How Tone compiles agent definitions into deterministic state machines.

A workflow is what Tone executes when a call is in progress. It's a state machine compiled from your agent YAML — not a chat loop with a system prompt.

Why a state machine

Voice calls have hard timing constraints. A pure chat-loop architecture spends turn budget on decisions that don't need an LLM. A compiled workflow makes the boring transitions (greeting → identify → route) deterministic and saves the LLM for the parts where it adds value.

Anatomy of a workflow

Every workflow has three kinds of nodes:

  • Speak nodes: the agent says something.
  • Listen nodes: the agent waits for the caller, possibly with intent classification.
  • Branch nodes: take a path based on a tool call, intent, or context.
flow:
  - speak: greeting
  - listen:
      classify:
        - reschedule
        - new_booking
        - other
  - branch:
      reschedule: goto: reschedule_flow
      new_booking: goto: new_booking_flow
      other: goto: handoff_to_human

When the LLM is invoked

Inside a listen node with intent classification, Tone uses a fast classifier (a small, distilled model) rather than the full LLM. The full model only runs inside open-ended speak nodes or in tool-handling branches. This is what makes the latency budget work.

Debugging workflows

Every workflow run produces a trace in the dashboard. You can step through node-by-node, see which branch was taken, and replay any single node with a different input.