Skip to content
OPENVZ*AI
OPENVZ / LEADS

It finds them. It understands them. Then it stops.

Prospecting tools sell you a list. The AI ones sell you a list that emails itself. Both skip the step that actually decides whether any of it works: finding out what this company is really about, whether they are worth talking to, and what the first sentence should say. That step is the middle of this product.

MIT · v1.0.0 · macOS 19.7 MB (Apple silicon) · Windows 17.1 MB (x64) · needs the Claude Code CLI · no extra model cost

Three jobs, in order

01

Find

Searches for companies matching the ICP you wrote down, crawls their sites, identifies decision-makers, infers the email pattern and verifies it over SMTP. No Apollo, no ZoomInfo — those databases were built this way too, with a subscription added in the middle.

02

Understand

One brief per account: what they do, why they fit (1–10 with reasons), buying signals, likely pains, who signs and who blocks, two or three ways to open — and a list of what not to say.

03

Reach

A three-email sequence built on that brief, following proven cold-email frameworks under one hard rule: invent nothing. Then it goes into a review queue and waits for you.

Installing it

macOS: open the dmg, drag the icon into Applications, and right-click → Open the first time. Windows: run setup.exe and click through, then More info → Run anyway on first launch. Both stops have the same cause — we have no code-signing certificate — and that is how each system treats every unsigned program, not a judgement about this one.

# the dashboard opens in your browser on launch
http://127.0.0.1:5555

# everything stays on your machine
macOS    ~/Library/Application Support/OpenVZ Leads/
Windows  %APPDATA%\OpenVZ Leads\

You also need the Claude Code CLI installed and logged in — that is the brain, running on the subscription you already have, with no second model bill; the app checks for it on the first screen and links you there. Python is bundled, so that is not your problem. Prompts and the sales knowledge base are placed in the directory above on first launch: plain Markdown, and changing how it sells needs no code. Intel Macs and Linux take the source archive — its install.sh works anywhere. Uninstalling leaves your data directory alone: the prospects and briefs are in there.

Source archive (Intel Mac / Linux · 161 KB)

What a brief looks like

This is exported Markdown, unedited. The last two blocks are the valuable part.

## Northwind Logistics

**Lena Fischer** — Head of Procurement

Fit **6/10** · confidence **low**

**What they do**
Regional freight forwarding across the Benelux

**Buying signals**
- Opened a second warehouse *(medium)* — homepage news item

**Decision chain**
- This contact: champion
- Likely economic buyer: Managing Director
- Likely blocker: IT

**Opening angles**
- Second warehouse means new carrier contracts
  - Why it lands: Timing

**Do not say**
- Do not claim they are struggling — no evidence of that

**Evidence gaps**
- No pricing or headcount data
- Website has no team page

A fit of 6, a confidence of low, and two gaps admitted outright — this brief is not pretending to know things. The language it is written in is a setting, independent of the emails: the analysis can be Chinese while the outreach stays English.

What makes it different

01

Nothing is sent by default

Sending is an optional plugin, not a prerequisite. With no outbound channel at all the whole pipeline still runs: found, analysed, drafted, then exported as CSV for your CRM or Markdown for a human to read. No sending account, no extra bill. Connect a channel if you want it to send — human review still stays on, and turning that off means deliberately flipping a setting called require_approval.

02

Every claim carries its source

A buying signal has to point at something that actually appeared in the evidence, and it has to say where. The brief carries a confidence level and a section listing what is still missing. A confidently wrong fact about a prospect is far worse than a blank field: a rep will repeat it in the first email, the prospect will spot it immediately, and the thread is dead.

03

What not to say matters as much as what to say

Every brief carries an avoid list — assumptions the evidence actually contradicts, claims that would land badly, subjects to stay off. The agent that writes the emails reads that list and is told to respect it. Most tools tell you how to open. Almost none tell you which sentence kills the deal.

04

No extra model cost

The brain is a headless call to the Claude Code CLI on your machine, running on the subscription you already pay for. The one thing worth adding is a search API at roughly $5 per 2,500 queries, and that is not a subscription. Every other key is optional.

05

The data never leaves your machine

One SQLite file on your own disk, openable with anything. No tenant, no upload, no console. Run several workspaces — different products, different ICPs — by pointing one environment variable at different paths.

06

The compliant defaults are the tight ones

Opt-out wording of any kind is treated as immediate and permanent, sends are capped per day, quiet hours are on out of the box, and if a prospect asks whether they are talking to an AI it is required to say yes — some jurisdictions mandate that, and lying about it never helped anyway. LinkedIn automation breaks their terms of service, so it ships off.

The stack

Brain
A headless call to the Claude Code CLI on your machine, with retries, timeouts and skill injection. Your subscription, no second model bill.
Shape
A local Python heartbeat loop: quiet hours → usage budget → decide → act → log → sleep. Or run it always-on under Docker.
Decisions
Deterministic rules, not model calls. What to do next falls out of the pipeline counts — and a campaign awaiting review is not an action, because it is waiting on a person.
Data
SQLite in WAL mode with linear schema migrations. One file, on your disk.
Interface
A local FastAPI dashboard, bilingual. Review queue, account briefs and exports all live there.
What you can change
Prompts and the sales knowledge base are plain Markdown. Changing how it sells needs no code.
Licence
MIT. Rename it, sell it, close it.

Leads works before a relationship exists: who is this person, are they worth talking to, and what should the first sentence say. What happens after — recording it, following up, moving it along — is a different job, and that is OPENVZ CRM. Use either on its own, or feed the list Leads exports straight into it.

See the CRM

Where it came from

OpenVZ Leads is a derivative of Harvey, an MIT-licensed project. The work went past renaming: upstream closes the loop automatically — written, then deployed — and this version demotes sending from a prerequisite to an optional plugin, adds a full human-review state machine, and adds the stage the product was missing altogether: the account analysis. The original copyright notice stays in LICENSE, as MIT requires, and the full list of changes is in the repository’s NOTICE.

Read the source

Want one tuned to your market?

The source is complete, and installing it is a clone and a pip install. If you want it reshaped around your industry, your language and your qualification bar — or wired into the CRM you already run — say so.

Get in touch