Skip to content
RepoQuarry

Build · Advanced · A few days

Build an AI sales agent that runs on a local model, with no AI subscription

An agent that finds small businesses, writes cold email from what it learns and drafts answers to replies, with a model on your own machine.

Instead of paying for Apollo.io or ChatGPT Plus.

What you'll build

A sales agent that prospects for you: it finds local businesses worth selling to, notices something specific about each one, such as running ads with no online booking, writes a short cold email that mentions it, and drafts answers when people reply. It's the job Apollo.io and similar tools charge per seat for. Harvey already does all of this, but sends its model calls to a Claude or ChatGPT plan. This build adds a local option, so the writing and reply sorting run on Ollama and there is no AI bill at all.

Blueprint

Harvey finds businesses, collects signals and runs the outbox, approval queue and send checks itself. Its Brain class sends each prompt to a provider; you add a local provider that calls Ollama's OpenAI-compatible API, so scoring, writing and reply sorting run on your own machine.

  1. You Your website Harvey
  2. Harvey Prompts to score a prospect, write a sequence or sort a reply Ollama
  3. Ollama Scores Harvey
  4. Harvey Emails waiting for approval in the outbox You

The repos

  1. 01 · Find Harvey

    Local sales agent that finds small businesses, spots buying signals, writes and sends cold email and answers replies, using your Claude or ChatGPT plan.

    Setup
    Medium; clone it and ask Claude Code to set it up, or pip install, fill in .env and train it on your website. Sending well also needs a dedicated domain and mailbox warmup source
    Hardware
    No minimum RAM or CPU documented and no GPU; it runs no local model. Needs Python 3.11+ and the Claude or Codex CLI source
    Paid extras
    Needs a Claude Pro or Max plan (or a ChatGPT plan with Codex) and a sending mailbox, about $7 a month on Google Workspace; a warmup service is recommended. Finding businesses is free from OpenStreetMap, or paid via Serper or DataForSEO. No per-token API bill
    ★ 3.9k MIT Confirmed: 8/8 facts Official docsGitHubReplaces Apollo.io
  2. 02 · Run the model Ollama

    Local model runner that downloads and serves open LLMs (Gemma, Qwen, DeepSeek, gpt-oss and more) with a CLI and local API.

    Setup
    Easy; one-line install script or installer, then ollama run source
    Hardware
    Apple M-series or x86 (CPU only) on Mac; 4GB for Windows binary; RAM not stated source
    Paid extras
    None for local use; Ollama Cloud plans optional (Pro $20/month)
    ★ 186k MIT Confirmed: 8/8 facts Official docsGitHubReplaces ChatGPT Plus

Step by step

Install commands change, so each step links to the repo's own docs for the exact commands.

  1. Run a model in Ollama

    Install Ollama and pull a recent 8B to 14B instruction model, such as Qwen3 or Gemma 3. That needs about 16 GB of RAM, or a graphics card with 8 GB or more. Ask it to write a two-line cold email and to label a sample reply as interested, objection or opt-out, and keep the model that does both cleanly.

    Uses Ollama · its docs

  2. Fork Harvey and run it as it is

    Fork Harvey, install it from its README and train it on your website. Confirm the free signals and run discovery on OpenStreetMap so you have real prospects before changing anything.

    Uses Harvey · its docs

  3. Add a local provider

    Harvey's Brain class already chooses between Claude and Codex. Add a third provider, local, that sends the same prompt to Ollama's OpenAI-compatible endpoint, with the server address and model name in the config. Skip the subscription-quota gate for it and keep Harvey's daily call cap.

    Uses Harvey · its docs

  4. Check setup and run the tests

    Make the setup check confirm Ollama is running and the model is downloaded, and show the local provider in the dashboard's Usage screen. Run Harvey's own test suite, plus new tests that fake Ollama's replies.

    Uses Harvey · its docs

  5. Compare emails before you send any

    Keep approval mode on. Have the local model and Claude each write sequences for the same 20 prospects and read them side by side. Tighten the prompts or the banned-phrase list until the local drafts read like a person wrote them, then send small batches from a warmed-up mailbox.

Watch out

Harvey has no local-model option yet; you add it in a fork (MIT allows this). Sending still needs a mailbox, about $7 a month on Google Workspace, ideally on a separate domain with warmup. Cold email law (CAN-SPAM, GDPR, PECR) still applies to you.

Take it further

  • Run Ollama on a home server and point several Harvey installs at it.
  • Use a small fast model for reply sorting and a larger one for writing.
  • Export prospects to CSV and send from a tool you already use.

Shared builds

Nobody has shared one yet. Be the first.

Built your own version and put it on GitHub as open source? Share your build

Questions

Is a local model good enough for cold email?

For these short jobs, mostly yes. Harvey only asks the model to score prospects, write two-email sequences, sort replies and draft answers. Smaller models slip into stock AI phrasing more often, so compare drafts and keep approval on.

Will this be completely free?

There is no AI bill, and finding businesses is free on OpenStreetMap. You still need a mailbox to send from, and a separate domain is safer for your main domain's reputation.

What about opt-outs?

Harvey catches STOP, no thanks and unsubscribe with fixed rules before the model sees a reply, so opt-outs don't depend on the local model.

Every repo here is open source, still maintained and checked against its own documentation. How we check →

Cookie preferences

Choose what we may store in your browser. You can change this any time from Cookie settings in the footer.

Essential

Security, and remembering this choice. rq-consent · 12 months

Always on