Harvey
Claude Code 또는 Codex 구독으로 작동하는 자율 영업 에이전트입니다.
Harvey는 판매할 가치가 있는 비즈니스를 찾아내고, 각 비즈니스에 대해 특정 정보를 학습하며, 이를 참조한 콜드 이메일을 작성하고, 전송하고, 답장을 읽으며, 미팅을 목표로 대화를 진행합니다. 이는 사용자의 기기에서 자체적으로 루프를 돌며 작동합니다.
특이한 점은 다음과 같습니다: 모델 API 비용 청구가 없습니다. Harvey는 Claude Code를 통해 Claude Pro 또는 Max 구독을 사용하거나, Codex를 통해 ChatGPT 구독을 사용합니다. 모델 호출은 별도의 API 키나 토큰당 API 과금 없이 이미 지불하고 있는 요금제를 사용합니다. 기본값은 Claude이며, Codex는 macOS 및 Linux에서 선택적 제공자입니다.
$ harvey run
============================================================
...
그리고 localhost:5555에 유지되는 대시보드는 신호를 확인하고, 확인된 것들로 코호트를 구축하며, 비용을 지출하기 전에 디스커버리 런의 가격을 책정하고, 메시지 하나하나를 승인하는 기능을 제공합니다:
Harvey's dashboard: the Today queue, confirming a signal, the cohort builder counting matches live, a costed discovery estimate, and the outbox decisions desk — in light and dark
목차
구독 방식이 중요한 이유
다른 자율 영업 에이전트들은 토큰당 비용을 청구합니다. 이것이 그들이 높은 비용을 부과하는 이유 전체입니다. 하루 종일 루프(loop)로 사고하는 에이전트는, 하루 종일 루프로 API 크레딧을 소모하는 에이전트이기 때문입니다. 공급업체들은 이를 해결하기 위해 생각의 깊이를 줄입니다. 즉, 더 짧은 프롬프트, 더 저렴한 모델, 적은 처리 단계를 사용합니다.
Harvey는 선택한 제공업체의 구독 기반 CLI를 사용합니다: Claude Code를 위해서는 claude를, Codex를 위해서는 격리된 codex app-server를 사용합니다. 둘 다 모델 도구를 비활성화한 텍스트를 반환합니다. Harvey가 자체적으로 잠재 고객 발굴(prospecting) 및 메일링 작업을 처리합니다.
Claude 호출은 사용자 자신의 Claude Code 설정과 전혀 관련이 없습니다: CLAUDE.md(사용자, 프로젝트 또는 상위 폴더의 것), 후크(hooks), 스킬(skills), 플러그인(plugins), MCP 서버 또는 설정 파일, 도구(tools)가 없으며, 빈 임시 폴더에서 실행되고, Claude 기록에 아무것도 저장되지 않습니다. 사용자의 로그인 정보(구독 또는 claude setup-token)와 관리자가 지정한 정책은 여전히 적용됩니다. 이 기능을 위해서는 --safe-mode를 갖춘 Claude CLI가 필요합니다. 구형 버전을 사용하는 경우 Harvey는 프롬프트를 격리하지 않고 전송하는 대신 일시 중지하고 claude update를 실행하라고 안내합니다. 이를 오프라인에서 설치된 CLI와 크레덴셜이나 네트워크 없이 확인하려면: HARVEY_CLAUDE_CLI_TESTS=1 pytest tests/test_claude_cli_isolation.py.
선택한 구독은 사용 한도에 따라 모델 호출을 커버합니다. 이를 통해 Harvey는 별도의 모델 API 비용 청구 없이 개인화 및 회신 처리를 위해 스킬 라이브러리를 사용할 수 있습니다.
이것이 사용자에게 드는 비용:
| |
|---|
| Claude Pro/Max 또는 Codex 접근이 가능한 ChatGPT 플랜 | 기존 구독료 |
| ... | |
| 위의 내용을 비교하자면, Harvey가 대체하는 도구들은 월 $250–$500부터 시작하며 — 이 도구들이 가장 약한 부분이 바로 Harvey가 가장 강점을 보이는 지점입니다. 즉, 직원 5~50명 규모의 소규모 지역 사업체로, 단일 공급업체의 연락처 커버리지가 약 30% 수준에서 한계에 달하고 마이크로 비즈니스는 종종 아예 없는 곳들입니다. | |
Harvey는 자체적으로 예산을 책정합니다. 활성 제공업체의 구독 할당량을 읽고, 사용자의 Claude 또는 Codex 작업에 여유 공간을 남기도록 속도를 조절합니다. 두 제공업체 모두에 대해 max_daily_claude_percent: 80으로 설정할 수 있습니다. 이 설정 이름은 Codex 지원보다 앞선 시점의 것입니다. 할당량을 읽을 수 없는 경우, Harvey는 이를 이용 불가로 보고 일일 호출 예산으로 대체합니다.
Harvey는 사용자의 로그인 정보를 사용하여 로컬에서 실행됩니다. 선택하는 제공업체의 약관 및 사용 제한을 확인하세요.
Harvey가 실제로 하는 일
Harvey는 심장 박동(heartbeat)을 가동합니다: 깨어나서, 예산을 확인하고, 무엇이 가장 필요한지 결정한 다음, 실행하고, 기록하고, 잠듭니다. 기본적으로 15분마다 반복됩니다.
┌──────────────────────────────────────┐
↓ │
깨어남 → 비활성 시간? → 예산 OK? → 결정 → 실행 → 기록 → 잠듦
...
이는 모델에게 무엇을 할지 묻는 방식이 아니라 결정론적으로(deterministically) 작동합니다. (그렇게 하면 네 가지 카운트에서 파생될 수 있는 것에 호출 비용을 소모하게 됩니다:)
처리된 답장 > 캠페인 전송 > 캠페인 작성 > 잠재 고객 발굴 > 유휴(분석)
프로파일링 및 아웃박스 비우기는 비용이 들지 않고 스케줄대로 발생해야 하므로, 모든 주기에 걸쳐 함께 작동합니다.
빠른 시작
전제 조건
- Python 3.11 이상 —
python3 --version으로 확인하세요. macOS는 3.9가 기본 설치되어 있으므로, 이 버전이라면 먼저 brew install [email protected]을 실행하세요.
- 활성화된 Claude Pro 또는 Max 구독 및 CLI 로그인(
claude login) — 또는 선택적으로 Codex CLI를 갖춘 ChatGPT 플랜(대신 ChatGPT 플랜 사용하기)
- 발송할 메일함 — Gmail/Workspace가 권장되며, 전용 보조 도메인에 있어야 합니다. Microsoft 365도 작동합니다 (설정)
가장 쉬운 방법: Claude에게 설정 맡기기
git clone https://github.com/ethanplusai/harvey.git
cd harvey
claude
그 후 **"set up Harvey for me"**라고 말하세요. 이 저장소는 CLAUDE.md를 제공하여 Claude Code를 설정 마법사로 변환합니다. 이는 사용자가 어떤 상태인지 확인하고, 누락된 것을 설치하며, 필요한 것이 무엇인지 묻고, 사용자의 제품에 대해 Harvey를 학습시킵니다.
또는 직접 수행하기
python3.13 -m venv .venv && source .venv/bin/activate && pip install -e .
...
사용자가 무엇을 찾는지 확인합니다
이 부분이 Harvey를 블랙박스와 다르게 만드는 부분이며, 의도적으로 건너뛸 수 없습니다.
Harvey는 비즈니스에 대한 **23가지 신호(signals)**를 수집하는 방법을 알고 있습니다. 사용자가 말하기 전까지는 그 어떤 것도 수집하지 않습니다. 첫 실행 시 카탈로그를 제안하고, 대시보드나 터미널에서 각각을 확인하거나 건너뛰거나 거부합니다:
harvey signals
harvey signals --confirm free
harvey signals --confirm SERP_RANK
각 신호는 평이한 언어로 그것이 무엇인지, 비용, 그리고 이미 몇 개의 회사에서 이를 가지고 있는지 보여줍니다.
| 신호 (Signal) | 알려주는 것 |
|---|
| 발견 (Discovery) | SERP_RANK | 자체 핵심 검색에 대한 순위. 11–30위는 이상적인 지점입니다: 시도하는 것처럼 보일 만큼 충분히 눈에 띄고, 그리고 손실을 보고 있습니다. |
| ... | | |
그런 다음 코호트(cohort)는 목록이 아니라 쿼리입니다
신호가 확인되면, 대시보드의 코호트 빌더가 이를 타겟 세트로 변환합니다. 좋은 잠재 고객이 반드시 가지고 있어야 할 것과 그들을 자격 미달로 만드는 것을 선택하면, 실시간으로 일치하는 개수를 계산합니다:
Has a marketing agency AND running Google Ads AND NOT already has online booking
→ 23 companies
이것은 이유가 있는 캠페인입니다. 이 23개 회사 각각이 목록에 있는 정확한 이유를 알고 있으며, Harvey가 작성하는 이메일도 마찬가지입니다.
잠재 고객 발굴 파이프라인 (The prospecting pipeline)
네 단계로 구성되어 있습니다. 각 단계는 독립적으로 실행되며, 안전하게 재실행할 수 있고, 비용을 명시합니다.
1. DISCOVER — 누가 존재하는지 파악
돈을 쓰는 유일한 단계이므로 항상 먼저 추정하고, 사용자가 '실행(go)' 버튼을 누르기 전까지는 아무것도 호출하지 않습니다.
harvey discover --providers
harvey discover --estimate
harvey discover
| 출처 | 비용 | 무료 등급 | 최적의 용도 |
|---|
| OpenStreetMap (기본값) | 무료 | 무제한, 계정 필요 없음 | 비용을 지불하는 누구에게든 의존하기 전에 전체 파이프라인을 테스트할 때. OSM은 상점이 없는 사업체에 대한 커버리지가 부족합니다: OSM은 건물만 매핑하므로 모든 종류의 전문직(미국 전역에서 루퍼 2,000명 미만, 배관공 2,300명 미만)이 거의 존재하지 않습니다. Harvey는 UI 내에서 조용히 성능을 못 내기보다는 그렇게 말합니다. |
| ... | | | |
Cities geocode themselves (캐싱되어 영구적으로 보존되며, 조회당 한 번). 디렉토리, 애그리게이터 및 기관은 블랙리스트가 아닌 패턴으로 필터링됩니다 — en.wikipedia.org와 biz.yelp.com은 절대 포함되지 않습니다. | | | |
깊이 20–30, 100이 아닙니다. Google은 2025년 9월에 페이지당 100개 결과를 제거했기 때문에, 깊이 100은 이제 거의 모든 곳에서 열 페이지로 청구됩니다. 순위 30위 이하에서는 어차피 대부분 디렉토리입니다.
2. PROFILE — 그들이 무엇인지 파악
무료. 비즈니스당 HTTP 요청 3회. 브라우저 호출이나 모델 호출이 없습니다. 이 단계는 전체 시스템에서 노력 대비 가치가 가장 높은 단계인데, 왜냐하면 이메일을 구체적으로 만드는 사실들을 생성하기 때문입니다.
Scout, Profile, 그리고 로컬 트레이닝 크롤러가 가져오는 웹사이트 요청은 공개 HTTP(S) 목적지로 제한됩니다. 모든 DNS 응답과 리디렉션이 확인되며; 로컬, 사설, 링크-로컬 및 메타데이터 주소는 거부됩니다. 연결은 웹사이트의 TLS 신원을 유지하면서 검증된 IP를 사용합니다. 이러한 웹사이트 클라이언트는 환경 프록시를 무시하므로 프록시 라우팅이 그 경계를 우회할 수 없습니다.
홈페이지, robots.txt, sitemap.xml에 더하여 팀 및 커리어 페이지가 존재하는 경우 — 그리고 이미 확보된 HTML에 대한 정규 표현식 처리까지 합니다. 결과물은 기존 에이전시의 흔적, 광고 픽셀, 누락된 스키마, 방치된 블로그, 채용 공고, 이름이 붙은 사람들의 정보입니다.
에이전시 탐지(Agency detection)가 가장 복잡한 부분입니다. 거의 모든 에이전시는 푸터(footer)에 자신을 언급하며, Harvey는 그 문구의 정도를 점수화합니다: "Powered by" / "Website by" → 0.9 신뢰도; 단순 설명 링크 → 0.75; 레이블 없는 링크 → 0.35로 기록하고 기록하지 않습니다. 이메일에서 잘못된 담당자를 언급하는 것은 아무것도 언급하지 않는 것보다 더 나쁩니다.
3. 정보 보강(ENRICH) — 누가 결정하는가
먼저 공개 등록부(public registries)를 활용합니다. 팀 페이지에서 이름과 직책을 가져오고, 존재하는 권위 있는 등록부와 대조하여 확인합니다. 이 과정은 사용자의 자체 파싱 아티팩트(parsing artifacts)도 걸러내는데, 아무것도 일치하지 않는 "사람"은 보통 그 자리에 없었기 때문입니다.
만약 회사 웹사이트에 이름을 올린 사람이 없고 Harvey가 아직 연락처를 가지고 있지 않은 경우 — 소규모 상거래에서 흔합니다 — 회사는 자체 홈페이지나 연락 페이지에 기재된 일반 주소로 대체합니다 (오직 owner@, office@, info@ 또는 hello@와 같은 일반 메일함만 해당하며, 개인의 주소는 절대 아닙니다). 이는 추측되는 것이 아니며, 다른 모든 주소처럼 검증되며, 이러한 이메일은 이름 대신 회사 팀을 대상으로 합니다.
4. 검증(VERIFY) — 도달할 수 있는가
Harvey는 각 회사의 **주소 패턴(address pattern)**을 학습하고, 무작정 이름 변형을 시도하는 대신 하나의 후보를 검증합니다. 원시 SMTP 프로빙(Raw SMTP probing)은 노트북에서 실행하기 어렵습니다. 아웃바운드 포트 25가 보통 차단되며, Google Workspace와 Microsoft 365는 알 수 없는 IP로부터 오는 모든 것을 허용하기 때문입니다.
모든 주소는 정직하게 태그가 지정됩니다: verified / risky (catch-all) / guess / invalid. 전달 가능한(deliverable) 주소만 전송에 사용됩니다. 추측은 결코 성공으로 간주되지 않습니다.
Harvey는 보내지 않더라도 실행할 가치가 있습니다. harvey export를 실행하면 발견한 모든 것을 시퀀서가 사용할 수 있는 CSV 파일로 작성합니다.
스킬 라이브러리(The skills library)
Harvey의 영업 지식은 편집 가능한 일반 Markdown 형식으로 skills/에 존재합니다. 파인튜닝(fine-tuning)도, 벡터 저장소(vector store)도, 검색 단계(retrieval step)도 없습니다. 에이전트가 실행되기 전에 필요한 스킬들은 프롬프트에 직접 연결됩니다. 파일을 변경하면 다음 작동 방식이 달라지며 — 재시작이나 코드 변경 없이 이루어집니다.
이것이 Harvey를 형성하는 주요 방식입니다. 만약 이메일이 너무 강압적이라면 email_frameworks.md 파일을 수정하세요. 특정 반론을 잘못 처리한다면, objection_handling.md를 수정하고 실제로 전달할 답변을 추가하세요.
포함된 내용
email_frameworks.md — 301줄로, 저장소에서 가장 중요한 파일입니다. 오직 하나의 규칙으로 시작합니다: 실제 이메일을 보내는 사람처럼 작성하라. AI적인 표현(예: