Meet Valentine

Valentine is a small open-source agent for venture funds. You give it a founder or a company, and before you get on the call it tells you whether anyone else at your fund has already talked to them.

Open source · MIT license · Your keys, your data

~/fund — valentine
$ valentine acme.com
› sweeping fund memory — records · notes · emails · meetings… ⚠ Prior contact. Sarah emailed Acme's founder 3 weeks ago — logged "passed, too early."
Owner: Sarah · Last touch: May 11 · ↗ open in CRM
Get started Read the docs npx, two minutes, read-only.

Why I built it

Funds forget. Someone takes a meeting, writes a note, decides it's too early, and passes. Months later a different partner takes the same meeting and has no memory of the first one. The whole time, the note was sitting in the CRM. Nobody read it, because reading it would have meant stopping to search a few minutes before a call, and in practice nobody does that.

So I wrote something that does the searching for me. Valentine isn't a better CRM and doesn't try to be one. It answers a single question — has anyone here talked to this person before? — at the one moment I actually care about the answer, which is right before I get on the call.

How it works

You give it a domain, a name, or a LinkedIn URL. It looks through whatever your fund has already written down — records, notes, emails, meetings, who owns what — and comes back with a sentence or two. Either someone has spoken to them, and it tells you who, when, and what came of it, or nobody has, and it says so and you move on.

It only reads. It never writes back, never emails anyone, never moves a deal. I wanted something I'd be comfortable pointing at a live CRM on the first day, and that meant it could look but not touch. How it works in detail →

It runs on your machine

Valentine is MIT-licensed and runs locally with your own CRM token. None of your pipeline leaves the fund. For this kind of tool that matters more than usual — it's reading every founder you've ever passed on — so there was never a version of it I was going to host myself and ask you to trust.

It's also genuinely small. There are three pieces: a connector that reads your CRM, the agent that decides what counts as prior contact, and whatever triggers it — the command line or an MCP host. Attio and Affinity work today. HubSpot and Salesforce are a connector each, and the connector is a small enough interface that you can write your own in an afternoon if you'd rather not wait for me.

Ways to run it

What it catches

It's usually the same handful of situations: re-pitching a company a partner already passed on, two people tracking the same deal without knowing, a founder who's been in the pipeline for a year that everyone has forgotten, or an intro that was warmer than you realised. None of them are disasters on their own. They're the small things that make a fund look like it doesn't talk to itself.


Get started

Two commands. The first asks for a read-only CRM token; after that you can point it at a company.

# connect your CRM (read-only token)
npx valentine-agent init

# try it
npx valentine-agent acme.com

That's the whole thing. The docs cover headless use, the MCP server, configuration and exit codes. If you try it and it misses something it should have caught, tell me — that's the most useful bug report I can get.


Free forever

Everything is in the open-source repo and it's all free — clone it, run it, done. If you'd rather not set it up yourself, email me and I'll do it for you.

If it ever saves you from an awkward call, you can star the repo ↗ — but you don't have to.