The problem we set out to solve
Building a voice or chat agent is mostly one decision: how do you steer the model, turn after turn, so it reliably reaches an outcome? A demo works with any approach. Production - hundreds of real callers who interrupt, change their mind, and go off-script - is where the approach you picked either holds or falls apart. Teams reach for one of two patterns today. Both work at first. Both break as the agent grows - in opposite directions.The two common approaches (and where each breaks)
Prompt-based agent
One giant system prompt holds the persona, every rule, every edge case, and a
pile of examples. Simple to start.
Graph / node-based agent
A state machine: every state is a node, every transition an edge you author
by hand, with explicit criteria. Precise to start.
1. Prompt-based agents drown in their own prompt
You put everything into the prompt and let the model sort it out. It reads well on day one. Then the prompt grows:- More instructions compete for attention. As the prompt gets longer, the model loses focus - it skips steps, forgets a rule you added, and contradicts earlier lines. More prompt buys more confusion, not more control.
- No structure to test. When it misbehaves you cannot point at which line caused it. Every fix is a reshuffle of one wall of text, and every edit risks a regression somewhere else.
- No notion of “progress.” The prompt has no idea whether the conversation has actually accomplished anything - it just keeps talking.
2. Graph / node-based agents are rigid and slow
So you go the other way and draw the whole conversation as a graph - nodes, edges, criteria for each transition. Now everything is explicit. But:- Latency piles up. Every turn has to walk the graph and often makes extra model calls per node to decide the next edge. Those round-trips stack into audible lag on a live call.
- Real callers go off-script. People do not follow your edges. The moment a caller does something you did not draw, they hit an unhandled state.
- Authoring and upkeep are brittle. Enumerating every branch is slow, and each new requirement means rewiring the graph. It does not bend; it breaks.
Enter the playbook
A playbook was built to keep the good half of each approach and drop the bad half of both. It reads like a prompt, holds its shape like a graph, and runs fast:Plain language, but structured
You write in plain English like a prompt - but it is organized into
checkpoints, so the model is never handed one giant wall of text to get
lost in.
Outcome-gated, but not hand-drawn
Like a graph it tracks progress toward a goal - but you declare what “done”
means, not every edge. The engine finds the path, so off-script callers do
not fall off a cliff.
Fast by design
A Talker streams the spoken reply immediately while a Director judges
progress and runs tools asynchronously - no per-node round-trip tax, so
the call stays snappy.
Testable and eval-able
Because progress is expressed as checkpoints, you can score whether each one
was met, find the weak one, and fix it in isolation.
Side by side
This is exactly the split inside SuperDialog: the
Playbook engine (default) is the checkpoint model above; the older
graph-railed DialogMachine is still supported and now runs compiled on the
Playbook engine, so existing graphs keep working while new work goes to
playbooks.
Next
What a playbook actually is
Now that you know why, see the checkpoint model itself - persona,
done_when,
slots, and the Talker/Director loop - with a real example.