So I stripped everything away. No abstractions. Just Python, HTTP requests, and the OpenAI/Anthropic APIs.
What I found was anticlimactic in the best way: there's almost nothing there.
- "AI agents" are just functions the model tells you to call
- "Memory" is literally just a list you append to and send back
- "RAG" is search, concatenate to prompt, send it off
- "Multi-agent systems" are just API calls in sequence
It all clicked after that. Not because the patterns are hard. They're not. In fact, they're trivial. They're just buried under layers of abstraction that make them seem hard.I created 7 modules showing the basics: API calls, conversation state, tool calling, RAG, streaming, prompt chaining. Each one is heavily commented, nothing fancy. Side-by-side examples for Claude and GPT so you can see they're fundamentally the same thing.
Now when I use frameworks, I actually know if I need them or if I'm just adding bloat.