# Personal Agent Template: a fork-and-deploy agent with memory you approve

> Vercel Labs ships an MIT-licensed Nuxt and Eve starter that keeps chat threads, Slack DMs and a bounded memory file in one codebase. It assumes Vercel, Neon Postgres and Vercel Blob, so the self-hosting path is narrower than the README's five commands suggest.

**vercel-labs/personal-agent-template** — Open-source template for a durable personal AI agent — web chat, Slack, Linear, and long-term memory with user-approved saves. Eve, Nuxt, Better Auth, Vercel Connect.

- Repository: https://github.com/vercel-labs/personal-agent-template
- Website: https://personal-agent-template.vercel.app
- Stars: 472 · Forks: 73
- Language: TypeScript
- License: MIT
- Published: 2026-09-10 · Updated: 2026-09-10 · Language: en
- Canonical page: https://hysenlabs.com/projects/vercel-labs-personal-agent-template

## What Personal Agent Template actually gives you

Most agent demos end at a chat box. This template starts there and adds the parts that make a chat box usable on a second day: threads that resume, a memory slot the agent maintains itself, and the same agent reachable from Slack. The repository describes it as a template you fork, customize and deploy, and the example persona is a single letter, V, which the customization guide tells you how to rename along with its slug and persona text.

The audience is narrow and worth naming. You need to be comfortable with Nuxt 4, TypeScript and a Postgres database, and you need to accept Vercel as the deployment target, because the architecture diagram puts Vercel Connect between the agent and Linear and Slack. If you want a Python agent loop you can read in one sitting, this is the wrong repository. If you want a TypeScript app where auth, database, memory storage and channel wiring already exist, the template removes that scaffolding work.

## The two-service split and the internal API between them

The README's diagram is the clearest description of the data flow. Web chat and Slack DMs or mentions arrive at the Eve agent, which holds channels, tools and skills. Eve then calls Nuxt over /api/internal/* routes authenticated with a Bearer token, and Nuxt owns the UI, the Nitro API, Better Auth and PostgreSQL. Vercel Connect sits below that for Linear and Slack.

The detail worth noticing is that Eve holds the transcript. The application stores a session id and nothing else, which is why threads resume across sessions and tool calls can render in real time. That is a real architectural decision with a cost: your conversation history lives in Eve's session store, not in your Postgres tables, so any reporting or export you want to build has to go through Eve rather than a SQL query.

On Vercel the deployment splits into two services, web and eve. The eve/nuxt module generates the eve service and its /eve/v1/* route during the build, and the README states there is nothing to declare in vercel.json. The INTERNAL_API_SECRET is the seam between them and the environment example notes it must match on both the Nuxt app and the Eve service in production. A mismatch there produces a failure that looks like a broken agent rather than a configuration error.

## Installing it locally and sending a first message

The README requires Node.js 24 or later and pnpm, and package.json pins pnpm@11.24.0 with an engines field of node >=24. Clone, install, copy the environment file, migrate and start:

```bash
git clone https://github.com/vercel-labs/personal-agent-template.git
cd personal-agent-template

pnpm install
cp .env.example .env
pnpm db:migrate
pnpm dev
```

Three variables are required before the app is usable. The README documents them with the exact generation command for the two secrets:

```bash
BETTER_AUTH_SECRET=...       # openssl rand -base64 32
BETTER_AUTH_URL=http://localhost:3000
INTERNAL_API_SECRET=...      # openssl rand -base64 32 — same on web + eve
```

Open http://localhost:3000, create an account and start chatting. The database is the step people skip. The environment example states that NuxtHub is pinned to PostgreSQL, that there is no local file fallback, and that the database is required everywhere including local development. The suggested route is the Neon integration on the Vercel Marketplace, added with vercel integration add neon, followed by vercel env pull. If migrations fail, that is usually the cause, not the code.

If you need to reset a local database, the README gives one command for it:

```bash
rm -rf .data/db && pnpm db:migrate
```

Once the app runs, the daily summary skill is the fastest way to see the pieces connect. It is described as a morning briefing that combines active focus from recalled memory, assigned Linear issues and a suggested next action, triggered from the home quick action or by asking in chat. Memory writes go through the profile slot, which the README says binds Eve's fileMemory() provider to one document per authenticated principal, stored in private Vercel Blob. Attach a Blob store before deploying, or the save path has nowhere to write.

## Memory is a bounded file, not a vector index

The profile slot lives at agent/memory/profile.ts and binds Eve's fileMemory() provider to one document per authenticated principal. Eve recalls that document before every turn and after compaction, and gives the agent two tools to maintain it: profile__save_memory and profile__remove_memory. The README describes the slot as a bounded, model-maintained list of durable facts, scoped per user.

That word bounded matters. This is not retrieval over an embedding index and it is not an append-only log. It is a small curated document the model edits, which means the agent can remove an entry as well as add one. For durable preferences and recurring context that is the right shape. For anything where you need provenance, an audit trail, or the ability to ask why a fact was dropped, it is the wrong shape, and the README does not document a history of memory edits. The documents sit in private Vercel Blob storage, so the storage layer is tied to one provider as well.

## Where the template stops short

The README does not document rollback, and there are no retrieved releases, so there is no version history to pin against. The repository's own version field is 0.0.0, which is consistent with a template rather than a library with a compatibility contract. Treat upgrades as fork maintenance: you are pulling changes into code you have already edited, and the customization guide's list of things to change (agent name, slug, persona, model, tools, skills, Slack and Linear configuration, UI theme) is also the list of places your fork will conflict.

The integration surface is the other constraint. GitHub arrives through Vercel Connect with the @github-tools/eve-extension tools and durable approval on writes, and Linear arrives through Vercel Connect MCP. The README states that the agent queries Linear tools and never guesses from memory, which is a good default but also means Linear answers depend on that connection being healthy. If you want to run this entirely on your own infrastructure without Vercel Connect, the repository does not describe that path. Self-hosting is documented for local development; production self-hosting outside Vercel is not the scenario the architecture is drawn around.

## How it differs from a general agent framework

Compare it with a general-purpose agent framework such as LangChain or the Vercel AI SDK used directly. Those give you abstractions and let you assemble the application: you choose the auth library, the database, the session store and the channel integrations yourself. Personal Agent Template makes those choices for you. Better Auth with email and password, PostgreSQL through NuxtHub, Eve for sessions and memory, Vercel Connect for Slack and Linear.

The difference in approach is that the framework is unopinionated about persistence while this template is opinionated about all of it. The practical consequence is that swapping one piece, say replacing Better Auth with your company's SSO, means understanding how that piece interacts with the internal API and the memory scoping, because memory is bound per authenticated principal. In a bare framework you would wire that yourself from the start and know every seam. Here the seams exist already and you have to find them.

## Licence and the cost of keeping a fork current

The project is MIT licensed, with the LICENSE file at the repository root and the badge in the README pointing at it. MIT permits commercial use and modification, and it requires that the copyright notice and permission notice be preserved in copies or substantial portions. This is a description of the licence text, not legal advice; if you are redistributing a modified version, read the LICENSE file and your own counsel's view rather than this paragraph.

The ongoing cost is not the licence, it is the dependency graph. The runtime pulls in eve, nuxt, better-auth, drizzle-orm, @vercel/connect, @ai-sdk/mcp and the GitHub tools packages, and several of them are pre-1.0. There is no release history in the repository to tell you which bumps are safe. The last push to main was on 2026-09-02, so the code is recent, but recent commits are not a compatibility guarantee. Budget for reading diffs when you update, especially around the eve/nuxt module that generates the eve service during the build.

## Conclusion

Adopt it if you want a working, opinionated agent skeleton on Vercel and you are comfortable reading Nuxt and Eve source to change behaviour, because the customization guide covers renaming the persona, swapping the model and adding tools, not every wiring detail. Do not adopt it if you need a provider-neutral runtime or a single-process deployment: the memory slot writes to private Vercel Blob, the database is pinned to PostgreSQL through NuxtHub, and the build splits into separate web and eve services. Before you commit, verify three things in your own fork: that a Blob store is attached so profile__save_memory can write, that INTERNAL_API_SECRET matches on both services, and that your Slack and Linear connections resolve through Vercel Connect rather than local credentials.

## FAQ

### What is a personal agent in Personal Agent Template?

It is a single-user AI assistant you deploy yourself, reachable through web chat and Slack DMs or mentions. The template ships with a persona named V, which the customization guide explains how to rename along with its slug and persona text.

### How do I create a personal agent with Personal Agent Template?

Clone the repository, run pnpm install, copy .env.example to .env, set BETTER_AUTH_SECRET, BETTER_AUTH_URL and INTERNAL_API_SECRET, apply migrations with pnpm db:migrate, then run pnpm dev and open http://localhost:3000. You need Node.js 24 or later, pnpm, and a PostgreSQL database before the app will start.

### Does Personal Agent Template need a database for local development?

Yes. The environment example states that NuxtHub is pinned to PostgreSQL and that there is no local file fallback, so the database is required everywhere including local development. The README suggests provisioning Neon through the Vercel Marketplace and then running vercel env pull.

### Where does Personal Agent Template store the agent's memory?

The profile slot in agent/memory/profile.ts binds Eve's fileMemory() provider to one document per authenticated principal, and the README says those documents live in private Vercel Blob storage. You must attach a Blob store to the project before deploying.

### Can I self-host Personal Agent Template outside Vercel?

The README documents a self-hosting path for local development with pnpm dev, but the architecture diagram places Vercel Connect between the agent and Linear and Slack, and the production deployment splits into separate web and eve services generated by the eve/nuxt module. A production path without Vercel Connect is not described.

## Sources

- [Issues](https://github.com/vercel-labs/personal-agent-template/issues)
- [License: MIT](https://github.com/vercel-labs/personal-agent-template/blob/main/LICENSE)
- [Project website](https://personal-agent-template.vercel.app)
- [README](https://github.com/vercel-labs/personal-agent-template/blob/main/README.md)
- [vercel-labs/personal-agent-template on GitHub](https://github.com/vercel-labs/personal-agent-template)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/vercel-labs-personal-agent-template
