Writing
Notes from building production AI agents: what was slow, what broke, and what I changed.
4 min read
One agent for every kind of business
Instead of a new agent per industry, each business describes its world as a schema, and a single LangGraph agent reads it. How the schema, the graph and the write safety net fit together.
4 min read
Compiling plain-language workflows into graphs an agent can't wander off
Businesses write their processes as sentences. A compiler turns them into a control-flow graph, and a deterministic runtime only asks the LLM four narrow questions.
4 min read
The leak the garbage collector couldn't see
How a gRPC client built inside each agent turn pinned whole LangGraph graphs in memory, and the jemalloc profiles and gc referrer walks that found it.
3 min read
Cutting LangSmith costs without going blind
Half our traces came from tests, and the rest carried the same graph state five times. Four small changes, and how we kept every trace our evals and support team rely on.
2 min read
When the knowledge base disagrees with itself
Two FAQ articles give different prices, and the agent picks one. A parallel LLM step that catches contradictions in what was actually retrieved, and a review queue that lets the business fix the source.
3 min read
1,901 type errors to zero on a live AI codebase
Type checking had been switched off for a long time. How a shrinking baseline, a safety net of replay tests and import contracts got a fast-moving Python agent service to strict mypy, and the 15 real bugs it found.