FIELD NOTES ·

Agents that ship — and agents that demo

The checklist that separates a terminal trick from something you can leave running overnight.

agents · production · embed

Agents that ship — and agents that demo

Every week another demo shows an agent booking flights, refactoring repos, or closing tickets. Half of those demos never survive contact with production: flaky tools, no auth boundaries, no evals, no human escalation path.

What “shipped” means here

The industry pattern (and the trap)

Most frameworks now give you planners, memory, and tool calling out of the box. That is necessary and not sufficient. The failure mode is the same as early microservices: beautiful architecture diagrams, zero operational ownership.

When we Embed agents, we start with one workflow, one success metric, and one on-call human. Scale comes after the first boring week of green dashboards.

What to steal from the literature

ReAct-style loops, retrieval before tool use, and structured outputs are table stakes now. Treat papers and vendor blogs as menus, not recipes. Your product’s constraints — latency, cost, compliance — decide the dish.

Evals for agents — not just chatbots

Agent evals need tool-call correctness, not just answer quality. Did it call the right tool with valid args? Did it stop after success instead of looping? Did it escalate when confidence was low?

We run golden trajectories: input state, expected tool sequence, expected final output. Partial credit is allowed for ordering flexibility, but “called delete_user on the wrong ID” is a hard fail. Same CI gate as prompt evals — see evals before vibes.

The first boring week

After launch, the goal is a week of green dashboards and zero surprise tool calls. On-call knows the kill switch. Logs show prompt version and model ID. One human reviews edge cases daily until the eval set covers them.

Scale comes after that week — more workflows, more tools, more agents. Not before. Demos skip the boring week; shipped agents live in it.

← All field notes · Book a strike call →