Why I Built Edward
I didn't set out to build a full AI assistant. I started with a simple question: can I make an AI that remembers things about me between conversations?
That was late 2024. ChatGPT was everywhere, Claude was getting good, and I was using both daily. But every conversation started from zero. I'd explain my tech stack, my preferences, my current projects — over and over. It felt like having a brilliant colleague with amnesia.
What Existed
I looked at the options. ChatGPT had just launched its memory feature — a handful of bullet points it could store and reference. It was a start, but crude. You couldn't search it, you couldn't categorize it, and you had no control over what it remembered.
Open-source options were either too simple (save chat history to a file) or too complex (full enterprise RAG pipelines that needed a team to operate). Nothing hit the sweet spot of “personal AI that actually knows me.”
The First Version
Edward v1 was just memory. A FastAPI backend, PostgreSQL with pgvector, and a simple extraction pipeline that pulled facts out of conversations. It worked surprisingly well. Within a week, Edward knew my dog's name, my coding preferences, and which projects I was working on.
That success made me greedy. If it can remember things, can it also send me messages? Can it check my calendar? Can it run code? Each question led to a new feature, and each feature made Edward more useful, which generated more questions.
The Architecture
The stack evolved into what it is today: Next.js frontend, FastAPI backend, PostgreSQL for everything, and LangGraph for conversation orchestration. The backend runs natively on macOS — not in a container — because it needs access to AppleScript for iMessage, Calendar, and other system integrations.
I chose LangGraph over a simple prompt chain because I needed a real tool loop. Edward can call tools, get results, decide to call more tools, and keep going for up to 5 iterations per turn. That's hard to do cleanly with a linear pipeline.
What Makes It Different
Edward isn't trying to be a platform. It's a personal AI — built for one user, running on their machine, with their data staying local. The key differences from hosted AI products:
- Real memory — hybrid vector + keyword retrieval, not a list of bullet points
- Proactive awareness — the heartbeat monitors messages and calendar without being asked
- Self-evolution — Edward can write and deploy improvements to its own code
- Full tool access — code execution, web search, messaging, file storage, scheduled tasks
- Self-hosted — your data stays on your machine, not on someone else's server
Open Source
I open-sourced Edward because the ideas are more interesting than the implementation. Memory extraction, heartbeat triage, self-evolution — these are patterns that any AI project can use. The code is under Apache 2.0 on GitHub.
If you're building something similar, or if you just want an AI that remembers you, the setup guide takes about 10 minutes.