18 Sept 2025 · 8 min read
Your AI agent needs a boring deterministic spine
The seductive version of an agent is one loop: give a model some tools, describe the goal, let it decide what to do next. It demos beautifully. It also fails in a way that is uniquely expensive, because when it goes wrong there is no step to point at - the whole trajectory is the bug.
Where to put the intelligence
The architecture I keep coming back to is boring on purpose. The routing is deterministic: a fixed graph of steps, written by a human, with explicit branches. The model lives inside individual nodes, doing the thing models are actually good at - turning messy language into structure, drafting text, classifying intent. It never decides what happens next.
trigger → transcribe → extract(model) → verify(registry)
├─ matched → upsert CRM
└─ ambiguous → ask human in threadEvery arrow in that diagram was decided at design time. The model contributes at exactly one node - extract - and its output is validated against a schema before anything downstream touches it. If extraction returns something that isn't a valid company name and intent, the flow stops there with a legible error, instead of confidently writing garbage into a system of record.
Fail loudly, not quietly
The single biggest reliability gain isn't a better model or a better prompt. It's a verification step that can say no. In the meeting-to-CRM flow, that's matching an extracted company name against an official registry. The model can hallucinate a plausible company. The registry cannot. When they disagree, the flow escalates rather than resolves.
This is the difference between an agent that saves your team time and one that generates a slow, invisible data-quality problem. Quiet failure in a CRM is the worst kind: nobody notices for six weeks, and then nobody trusts the pipeline report again.
The three rules
- Deterministic routing. A human wrote the graph. The model never picks the next node.
- Schema at every model boundary. Structured output, validated, rejected on failure. No parsing prose downstream.
- A ground-truth check before any write to a system of record. If there's no ground truth available, there's a human in the loop instead.
The objection
'You've just built a workflow with an LLM in it.' Correct. That's the point. The word 'agent' is doing marketing work, not architectural work. What the business wanted was a reliable process that handles unstructured input - and unstructured input is precisely the narrow thing to hand the model.
Fully autonomous loops have a place: exploratory research, one-off analysis, anywhere a human reviews every output before it matters. The moment the output writes to a system other people depend on, put a spine under it.