
Peachy: a personal CRM where the agent proposes, you decide
I'm building Peachy, a local-first personal CRM for relationships that sit outside a sales pipeline: family you don't want to forget, friends and mentors you want to stay warm with, and professional targets when you're job hunting or chasing a specific opportunity. Spreadsheets and notes apps hold fragments. LinkedIn and email hold threads but not obligations. Sales CRMs assume deals and stages.
After a coffee chat or interview, I wanted to open one app, find the person, paste raw notes, and leave with a clean summary, sensible profile tweaks, and one follow-up task with a due date. Each piece should land only if I agreed to it. I don't want "the AI updated your CRM" as default behavior.
Coming soon: I plan to open-source Peachy so others can run it locally, bring their own model keys, and extend the agent flows. This post describes what it is and why I built it. The repo and walkthrough will follow.
The problem I'm solving
Important relationships live in different mental buckets. You remember a cousin's surgery date differently from a recruiter's follow-up window or a mentor you haven't emailed in six months.
What I wanted after a meeting:
- Open one app and find the person.
- Paste raw notes.
- Review structured output: summary, profile tweaks, one follow-up with a due date, with an explicit accept step for each piece.
- That accept step is the product constraint I cared about first.
What Peachy is
Peachy is a multi-circle relationship organizer. Every person has a relationship kind: family, network, or targets (recruiters, hiring managers, founders, and similar high-intent contacts). Lists, Today, and agent pulse can respect those circles instead of treating everyone like a lead.
Core entities stay intentionally small:
- People with optional company link, tags, notes, and interaction history
- Companies with linked people and a research-oriented agent entry point
- Interactions (calls, coffee, interviews, email, and so on) with raw notes and summaries
- Tasks with due dates, manual or agent-suggested
- Local calendar events with attendees linked to people (no Google or Outlook sync in v1; events live in the app)
- Suggestions, proposed field updates the agent never applies silently
Human-in-the-loop by design
The UX north star: trust through explicit apply.
When you process a meeting note, the agent reads person (and company) context, then writes suggestion rows: interaction summary, person field updates, a follow-up task. It does not patch records directly. On person or company detail you get a suggestion inbox. Accept applies the change. Dismiss drops it. Agent-suggested tasks stay pending until you accept them.
The same pattern covers company research (proposed notes updates, optional tasks tied to people at that company) and event prep (read the event, attendees, recent touchpoints, open tasks; propose prep tasks or brief snippets). Failed runs keep your raw input. You can retry from Agents or the person's Agent tab without losing the note.
Agents do the structuring work. You keep authority over what gets saved.
The default home is Agents: a brief on what needs attention, a single "continue" action, a composer for meeting notes, upcoming calendar context, and recent runs. There is no ever-present assistant thread.
v1 is single-user and local: no accounts, no hosted demo requirement. Run it on your machine, SQLite on disk, model API key in `.env` (bring your own key).
How the app is organized
Navigation is a fixed left tab rail: Agents, Today, Calendar, People, Companies, Tasks. The main workspace scrolls on the right.
Person detail is the hub: identity, relationship kind, company chip, sections for overview, interactions, tasks, and agent runs. After a meeting, that's usually where you land to review what the agent proposed.
- Agents — What's overdue? What should I do next? What's on the calendar this week?
- Today — Tasks due or overdue, who I've touched recently, who's gone stale
- Calendar — Month view, event detail, prep-with-agent on an event
- People — Directory with search, relationship-kind filter, tags; person hub for interactions, tasks, runs, suggestions
- Companies — Thin directory; detail view with linked people and research agent
- Tasks — Global list when you want everything in one place
Agent flows (the demo story)
Three flows define v1:
- Post-meeting note: From the person or the Agents composer (`@person` + note), enqueue a run. The agent proposes structured output; you triage suggestions.
- Company research: From company detail, a run proposes notes (and optionally people-linked tasks).
- Event prep: From calendar or Agents "upcoming," a run uses attendees and history to propose prep work.














Streaming runs
The UI streams run progress (tool observations, proposed patches) so you can see work happening, not just a final blob of text. For portfolio and iterative development, the app can run on a rich in-memory mock with a simulated trace. The target architecture wires the same surfaces to a real eve agent process and SQLite.
Data flow
High-level data flow on your machine: Next.js UI → server layer → SQLite; stream runs between UI and eve agent; eve agent → SQLite (suggestions only until user accepts).
What I want visible in a portfolio review: local and BYOK, portfolio-grade UI craft, and an end-to-end agent harness with a believable multi-circle seed dataset (realistic names, varied kinds, calendar, stale contacts, pending suggestions) for demos.
Open source soon
I'm finishing the walkthrough, README, and repo hygiene before publishing. When it's public, you'll be able to clone, seed mock or SQLite data, run the app and agent locally, and step through the three agent flows above.
web · Agentic harness