Start here
Everything I know about shipping agents, written down.
Nine guides, 94 minutes end to end. Not a tour of features. The parts that decide whether an agent system survives contact with a real company: how to shape tools a model can drive, what memory looks like six months in, where the human has to stay, and what the security review is going to ask.
These are maintained. When the thinking changes, the guide changes. The essays are the dated version: what broke, when, and what it cost.
01 / Build
Build
The primitives. How an agent reaches a real system, remembers what it did, and gets work routed to the right place.
Designing an MCP server a model can actually drive
5 minMost MCP servers are a REST API with a new hat. The model cannot drive them. This is what changes when you design the tool surface for a reader that has no memory, no screen and one shot at picking the right call.
Agent memory: three tiers, plain markdown, no database
4 minMemory is the part most agent systems get wrong. Not because storing text is hard, but because everything gets written and nothing gets removed. Here is the three-tier split that keeps memory useful past month one.
Orchestrating work with Claude Code: skills, routing and subagents
4 minOne agent doing everything does none of it well. This is how work gets routed to the right place, how a repeatable playbook becomes a command, and when a subagent earns its cost.
Claude Code skills and plugins: turning a playbook into a command
5 minA skill is not documentation. It is the judgement you would give a new hire on their first day, written down once so nobody has to give it again. Here is what separates one that gets used from one that gets ignored.
02 / Ship
Ship
What it takes to run inside someone else's company. Identity, the approval gate, and the security review that decides whether any of it goes live.
Auth for agents: the half nobody demos
4 minEvery agent demo runs as a god user with an API key in an environment variable. That is fine until it touches someone else's data. This is what has to be true before it can.
Approval gates: designing the place a human has to say yes
5 minLeverage without control is just a faster way to break things. Three categories always wait for a person - and the gate has to be in the system, not the prompt, or it is not a gate.
Enterprise deployment: SSO, SCIM and surviving the security review
5 minThe security review is where most AI tooling dies, and it dies over questions that have boring answers. Know them in advance and the whole thing takes a fortnight instead of a quarter.
Bedrock and Vertex: choosing where Claude actually runs
7 minSame model, three front doors. The choice is not about quality or speed - it is about whose account is billed, whose IAM decides who may call it, and whose security team has already approved the shape of the thing.
03 / Operate
Operate
After it is live. Getting a team past the three-enthusiasts stage, and working out why the output was wrong.
Rolling Claude Code out to a team without it stalling at three people
5 minEvery rollout gets three enthusiasts in week one and stops. The problem is never the tool. It is that nobody wrote down what good looks like, so everyone else is guessing in public.
When the agent gets it wrong: a debugging method
4 minAlmost every bad output traces to one of four causes, and only one of them is the model. Work the list in order and most problems resolve in minutes instead of turning into a rewrite of the prompt.
More
Your tests run a different database driver than production
A serverless runtime forces a different database driver than the one your tests use. The type system is then asked to paper over the difference, and it does, cheerfully. This is how 1,257 green tests shipped a 500 on every authenticated call, and the two controls that stop it happening again.
I fixed the same bug twice in three weeks
The first fix was written about a folder. The bug was never about a folder. Here is how to tell a real fix from a closed ticket.
Your MCP server is a resource server, not an authorisation server
Adding OAuth to an MCP server needs three independent settings on your identity provider, and each one fails in a way that looks like a different bug. Two of them let sign-in succeed before anything breaks. This is the wire protocol, the three settings, and one curl for each failure.
Your MCP server's instructions are a product surface, not a README
An MCP server can send the model one paragraph that governs every tool it will ever call. Most servers leave it empty and then fix the same problem thirty times in thirty tool descriptions. This is what belongs in it, taken from a server in production, including the rule that stops a model politely inventing a postcode.
Your entitlement check should return the tenant id
A permission check that returns true or false leaves you holding a second question: whose data is this? Answer both at once and a tool physically cannot do the work without having passed the gate. This is multi-tenancy for an MCP server, from one that has run it in production since July.
A no-new-tools rule quietly becomes a no-new-ideas rule
A blunt rule against installing things is good discipline and a bad reading habit. Separating 'should I take this dependency' from 'is there a good idea here' turned an eleven-item tool list into nine specific noes and twenty lines of my own code: a contrast gate that refuses to render below WCAG AA.
Your Terminal Never Resets Between Commands. You Do.
A misdirected commit landed on the wrong repository because a shell that never forgets where you left it assumed I meant to still be there. The failure mode gets more common, not less, once most of your work runs through automation instead of your own hands.