H

Harvey

Always Be Closing
Checking…

Today

Anything waiting on you, then everything Harvey has built so far.

Recent activity

Signals

Harvey proposes what it knows how to look for. You decide what actually defines a good prospect — nothing is collected until you confirm it.

Cohort builder

A prospect list is a query, not a file. Pick the signals a good prospect must have — and any that disqualify them — and see how many companies match right now.

Discover

Find businesses matching your ICP. Pick a source, see what it will cost, then run it — nothing is called until you press the button.

Who it sells to

The ideal customer profile every source searches with: one search per industry per city. Titles decide which named people count as decision-makers; hiring signals are roles that mean a company is buying right now. Saved to harvey.local.yaml; the running loop picks it up on restart.

Run

Companies

Organizations Harvey has researched. Click a row to see its contacts.

Contacts

People Harvey has found and verified.

Campaigns

Email sequences Harvey has written and deployed. Each one carries the segments of the contacts it was written for.

Outbox

Every outgoing email stops here. Read one, decide, move on — A approve, R reject, J/K to move.

Conversations

Every reply, and how Harvey handled it.

Activity

A running log of every action Harvey's agents have taken.

Usage

Actual model usage — your active subscription's quota (Claude or Codex), calls, and tokens per provider, agent and task. Subscription plans aren't billed per token, so no dollar costs here.

Settings

Credentials are stored locally in .env — never sent anywhere except the services themselves.

Account

Signed in as … (…). Changing your password signs out your other browsers.

Who Harvey is

The sender identity on every email: the name in the signature, the company it speaks for, and the From address. Saved to harvey.local.yaml. The running loop reads this at start, so restart it after saving. Who Harvey sells to is set on the Discover tab.

Email Provider

How Harvey sends and reads replies. Active provider: … — choose it in the Sending rules card below, then fill in that provider's credentials here.

Gmail / Google Workspace recommended

Use a mailbox on a dedicated secondary domain. Create an OAuth client (type "Desktop app") in Google Cloud Console → Gmail API, paste the id/secret, save, then run harvey gmail auth in your terminal.

SMTP + IMAP mailbox

Any real mailbox (AgentMail, Fastmail, a Workspace app password). IMAP defaults to the SMTP host/login if left blank.

Instantly legacy

Get your API key from Instantly Settings → Integrations (Growth plan+ for API).

Email Verification strongly recommended

Add at least one so found emails get verified. Without any, addresses stay and are never sent. Reoon has the best free tier (600/mo).

Sending rules

What may leave, and how much. Saved to harvey.local.yaml; restart Harvey on the Controls tab to apply.

Schedule & budget

How often Harvey wakes, how much of the Claude subscription it may use, and when it stays quiet. Restart Harvey to apply.

Quiet hours protect the recipient's night, so set the timezone to where the recipients are. A tiny window such as 03:00 to 03:05 effectively disables them.

Product knowledge

Teach Harvey what you sell from your website. Claude reads the site and writes skills/product_knowledge.md, skills/competitive_intel.md and the product, persona and ICP blocks of harvey.local.yaml. Re-run it when the offer changes. It takes a few minutes and overwrites the persona and ICP cards, so review them afterwards.

LinkedIn optional

For automated LinkedIn prospecting. Harvey logs in and searches like a human.

Cloudflare optional

For deep website crawling with JavaScript rendering during product training. ~$5/month.

Controls

Start and stop Harvey's heartbeat loop, and watch what it's doing.

Agent

Stopped

Recent Logs

No logs yet. Start Harvey to see activity.

Users

Who can sign in. Admins manage users; users can do everything else.

Add a user

Tell them their password in person; it is not shown again. They can change it under Settings, Account.

Help

What Harvey is, how it works, and how to fix the usual problems.

What is Harvey?

Harvey is an autonomous AI sales agent. Once set up, Harvey runs on its own: finds people who match your ideal customer, writes personalized cold emails, sends them through your email platform, reads every reply, handles objections, and works toward booking a meeting. You review everything through this dashboard.

Harvey runs on your Claude Max subscription (or, if you opt in, your ChatGPT plan through Codex), so there are no extra AI costs. Everything stays on your machine in one folder.

Getting Started

There are three things to do:

1. Settings: pick a mail provider under Sending rules, enter its credentials, add a verifier key
2. Settings: enter your website under Product knowledge and press Train Harvey
3. Discover: set who you sell to, paste a source key if needed, estimate, then run
4. Signals: confirm what Harvey may collect
5. Controls: Start Harvey, then review drafts in the Outbox

The Setup tab shows you exactly what's done and what still needs to happen.

Where Everything Lives

Everything Harvey needs is inside this one project folder. Nothing is stored elsewhere.

.envYour API keys and credentials (never shared or committed)
harvey.yamlYour product info, target customers, and behavior settings
skills/Sales knowledge files. Edit these to change how Harvey writes and sells.
skills/product_knowledge.mdEverything Harvey knows about your product (auto-generated from training)
prompts/Prompt templates for each agent. Advanced customization.
data/harvey.dbDatabase with all prospects, campaigns, and conversations
data/harvey.logLog file showing what Harvey is doing

Getting Your API Keys

Instantly API Key (required)

Instantly is the email platform Harvey uses to send campaigns.

1. Sign up at instantly.ai (you need the Growth plan for API access)

2. Go to Settings > Integrations

3. Copy your API key

4. Paste it in the Settings tab here

LinkedIn Credentials (optional)

If you want Harvey to find prospects on LinkedIn, enter your LinkedIn email and password. Harvey uses a real browser to search LinkedIn like a human would, with random delays and rate limits to avoid detection.

If you skip this, Harvey will find prospects through Google searches and company website scraping instead.

Cloudflare Browser Rendering (optional)

This is only used during product training (when Harvey crawls your website to learn about your product). It handles JavaScript-heavy websites that a basic crawler can't read.

1. Sign up at Cloudflare (paid Workers plan, ~$5/month)

2. Go to Workers & Pages > Browser Rendering

3. Create an API token with Browser Rendering Edit permissions

4. Enter your Account ID and API Token in the Settings tab

Without this, Harvey uses a built-in crawler that works fine for most websites but can't render JavaScript.

Common Issues

"command not found: harvey"
You need to activate the virtual environment first: source .venv/bin/activate
Instantly API returns 401
Your API key is wrong, or you need the Growth plan (the free plan doesn't include API access). Double-check the key in Settings > Integrations in your Instantly dashboard.
Claude headless mode fails
Make sure you've run claude login in your terminal and have an active Claude Max subscription. Harvey uses your existing subscription, not a separate API key.
Codex calls fail
With brain.provider: codex, set brain.model to an available model ID, including Luna, Sol, or Terra (for example gpt-6.1-sol), or leave it blank to select a listed model. Harvey runs these models without tools; gpt-5.5 also remains supported when present in your account's catalog. Run codex login and choose "Sign in with ChatGPT" (API-key logins are refused). Harvey never renews your Codex login: if the log says it has expired or is due for renewal, use Codex once or run codex login. Harvey needs Codex CLI 0.159.3 on macOS or Linux (Codex isn't supported on Windows; use Claude there) and refuses other versions. While Codex can't be used, Harvey pauses (the Actions card shows "Codex paused" and why), leaves replies and queued emails untouched, and resumes once it's fixed; harvey status --check checks on demand. If the log says isolation could not be verified, a Codex config layer is forcing a tool, hook, MCP server or custom endpoint back on — Harvey refuses to send prompts until it is removed. Harvey never falls back to Claude on its own.
Harvey isn't finding prospects
Check that your ICP (ideal customer profile) in harvey.yaml has realistic titles, industries, and geography. If LinkedIn is set up, check that the credentials are correct. Check the Activity tab to see what Harvey has been trying to do.