The biggest wasted month in agentic projects is almost always the same one. A team builds a planner that pretends to be model-agnostic, wires it directly into three or four tools, and then has to rewrite half of it the moment a tool changes its shape or a new model becomes the obvious choice.
We have done that wasted month enough times to stop doing it. The layout we keep coming back to is unfashionable, but it survives contact with reality.
One planner. One tool surface. One model adapter.
Three boundaries. None of them know about each other.
- Planner: takes a task, returns a typed plan. No tool calls, no model calls. Pure logic.
- Tool surface: a small, versioned set of capabilities expressed as plain functions. They do not know there is a planner above them.
- Model adapter: turns a step in the plan into a structured call. Swap the model, the adapter changes. Nothing else does.
That is the whole picture. When a tool changes, the tool surface absorbs it. When a model changes, the adapter absorbs it. The planner only changes when the business decision behind the task changes, which is the only kind of change you actually want to spend money on.
Why this beats “agent framework of the month”
Most frameworks bundle the three layers into one. They look elegant in a demo. They fall apart at the first vendor pricing change, the first model retire, the first new compliance constraint, the first time the customer wants to read the plan before approving it.
Once the three layers are separate, the boring tests write themselves. The planner is unit-tested with no network. The tool surface is integration-tested without the planner. The model adapter is contract-tested with a recorded fixture. You can argue about which model to use over lunch, change one file, and ship.
What you give up
You give up the joy of writing a single elegant prompt that does everything. That joy is short-lived. The version your team is staring at on a Thursday afternoon, six months in, looks nothing like the joyful one. Plan for that Thursday.