"Agent" is a loaded word
The hype version: a single LLM call in a while loop, picking tools at random
until it runs out of tokens or patience.
The version that ships: a small graph of typed steps, where the LLM makes narrow decisions inside well-defined seams, and a durable runtime owns the control flow.
The four patterns we reach for
- Router — one LLM call picks one of N specialized chains. Simple, debuggable, often enough.
- Plan-and-execute — the model writes a plan once, then a deterministic executor runs each step. The model only re-enters on exceptions.
- Reflect-and-revise — the model critiques its own draft against a rubric before returning. Great for content, code, and structured outputs.
- Tool-use with typed contracts — every tool has a Zod schema for inputs and outputs. The model can't "hallucinate" a malformed call.
What we never ship
- Unbounded reasoning loops with no step limit.
- Tools that take free-text and "figure it out."
- Agents without traces, replays, or a kill switch.
The shape of a good agent
It looks suspiciously like a state machine with one or two LLM-shaped holes. That's the point. The boring parts should be boring; the model should only be the magic where magic is required.


