
The assistant that knows you best is the one you rent. Your context lives in someone else's product, on their memory model, behind their interface. This template is the alternative: fork it and deploy a personal agent you own end to end. One agent, one memory, reachable from a persistent web chat, Slack DMs, and iMessage, with GitHub and Linear on tap. It ships with "V" as the example persona and a customization guide for making it yours: name, model, tools, theme. Built on eve and Nuxt, deployed as two services from one repo.
How does the memory work?
Deliberately, which is the point. Most agent memory is an append-only pile the model paws through. This one is structured for a human to read and control:
Five fixed categories, one prose block each. Work context, personal context, active focus, instructions and preferences, project history. Every category is a single block you can read on one screen, and writing a category replaces it rather than stacking duplicates.
Nothing saves itself. When the agent learns something worth keeping, it proposes the save with save_memory and the proposal renders as an approval card in chat. You approve or skip. You can also edit or delete any entry directly in your profile, and every entry is tagged by where it came from: imported, agent-proposed, or written by you.
Your existing context comes with you. A Raycast-style import flow gives you a prompt to paste into ChatGPT or Claude; paste the response back and it lands in your categories. Years of accumulated context stops being a switching cost.
Memory is injected at the start of every session, on every surface, so the agent that answers your iMessage knows what you told the web chat last week.
What does "one agent, three surfaces" mean in practice?
The web app is the home base: threads persist across sessions, tool calls stream in as they run, and your profile holds memory and account links. Link your Slack account there and DMs or @mentions reach the same agent with the same context. Add your phone number and you can text it over iMessage through Sendblue. The surface changes; the identity and memory don't.
Two integrations make it useful for work. Connect GitHub through Vercel Connect and it answers about repos, PRs, issues, and CI, with durable approval on anything that writes. Connect Linear the same way and it queries your real issues, projects, and cycles rather than guessing from memory. A built-in daily summary skill pulls it together on demand: your active focus from memory, your assigned Linear issues, and a suggested next action.
What are you actually deploying?
A real product, not a script. The repo deploys as two Vercel services from one vercel.json: the Nuxt app (UI, API, Better Auth email/password accounts, and a SQLite database via Drizzle) and the eve agent runtime. The two talk over an internal API secured by a shared bearer secret, and the agent reads and writes memory only through those authenticated routes. Everything is typed TypeScript, migrations are one command, and the whole thing runs locally with pnpm dev before you ever deploy.
The Deploy button provisions a Turso database and prompts for three secrets, two of which you generate with openssl rand. Prefer self-hosting? It's a standard Node 24 app; clone, migrate, run.
How do you make it yours?
The customization guide walks through the common forks:
- The persona: rename V, rewrite the base instructions, swap the model.
- The capabilities: tools are files in
agent/tools/, skills are Markdown inagent/skills/. The daily summary is one file to study and copy. - The surfaces: Slack and iMessage are optional channels you configure or delete; the web chat stands alone.
- The look: the UI is Nuxt UI components you can theme or rebuild.
It's MIT-licensed with a contributing guide, so improvements can flow back upstream too.

