The Agent Revolution Is Here — and Most Organizations Are Not Ready
Most teams treat an agent as a chatbot with a for-loop. It isn't. An agent is a system that decides what to do next, and the hard parts are the three capabilities that decision depends on.
The three pillars
Every production agent I've reviewed converges on the same substrate: durable memory, explicit planning, and constrained tool use. Strip any one away and the system degrades in a characteristic way.
- Without memory, it repeats work and contradicts itself.
- Without planning, it thrashes — long chains of plausible, aimless calls.
- Without tool constraints, it hallucinates side effects it never performed.
Memory is not a vector database
Retrieval is one kind of memory. Production systems need at least three:
| Kind | Lifetime | Typical store |
|---|---|---|
| Working | one task | in-process |
| Episodic | one session | Postgres / Redis |
| Semantic | forever | vector index |
Conflating them is the single most common architectural mistake. Here's the minimum viable separation:
class AgentMemory:
def __init__(self, working, episodic, semantic):
self.working = working # cleared per task
self.episodic = episodic # survives the turn
self.semantic = semantic # survives the user
def recall(self, query: str) -> list[str]:
return self.semantic.search(query, k=5) + self.episodic.recent(n=3)
What actually predicts success
Not model choice. Not framework. In the deployments that reached production, the teams had done one unglamorous thing: they built an evaluation harness before they built the agent.
The gap between early adopters and everyone else isn't intelligence. It's instrumentation.