Building LLM Agents That Don't Embarrass You
A recording of our engineering session on shipping agents that hold up in production — evals, guardrails, and human-in-the-loop patterns.

This is the written companion to our live session. The first agent you build works beautifully on the five prompts you tested in the meeting. The second week of production introduces it to the long tail, and that is when the screenshots start arriving.
Write the evals before the agent
Before we wire a single tool, we write the cases the agent must get right — and the cases where the correct answer is to escalate. That refusal set is the most undervalued artifact in applied AI. An agent that knows its limits is trustworthy; an agent that guesses confidently is a liability wearing a fluent mask.
- A golden set of inputs with expected outcomes, versioned in the repo.
- A refusal set: inputs that must escalate, never auto-act.
- A regression gate in CI: the score may not drop between commits.
- A live sample: a percentage of production traces re-scored nightly.

Guardrails are architecture, not a wrapper
We bound what an agent can do with the same seriousness we bound a junior engineer's deploy permissions. Tools are typed, rate-limited, and idempotent. Retrieval is grounded, and the model is forced to cite the document it pulled from — and we verify the citation actually contains the claim before we surface it.
Confidence without a citation is just a fluent guess. In production, fluent guesses become support tickets, and support tickets become churn.
Take this with you
Save a copy for offline reading, or send it to a teammate who needs the playbook.
Put this to work on your stack
Every piece here came out of a real engagement. If the problem sounds like yours, a free audit is the fastest way to see it applied to your systems.
Get a free audit