vc-outreach-agent
English | 中文
Solo Founder OS agent #3 — finds investors, drafts personalized cold emails per (investor, project) pair via Claude, manages replies via a markdown HITL queue. Never auto-sends. Always your edit, your hit-send.
Built by Alex Ji — solo founder shipping Orallexa and VibeXForge. Born from this thought:
I have 50 investor names in a spreadsheet. Hand-writing 50 personalized cold emails takes 10 hours. Sending the same templated email 50 times gets 0 replies. There has to be a better default.
What it does
investors.csv + project.yml
↓
Claude (Sonnet 4.6, prompt enforces no-bullshit constraints)
↓
queue/pending/<timestamp>-<project>-to-<investor>.md
↓
┌────────────────────────────────┐
│ Human review in Obsidian │
│ (edit / approve / reject) │
└────────────────────────────────┘
↓
queue/approved/ → v0.2 SMTP sender
queue/rejected/ → archived, no send
The drafter prompt enforces these rules — anything else gets parsed-and-fallback to a template:
- Open with ONE specific line tying the investor's thesis to the project. No "I follow your work" filler.
- Sentences 2-3 lead with traction, not vision. One number, one shipped artifact, one demand signal.
- Sentence 4: ONE specific ask. "15-min call this week" — never "any thoughts you have".
- Body under 110 words. Subject under 8 words.
- Banned vocabulary (hard fail): synergy, disrupting, passionate, leverage, innovative, cutting-edge, revolutionize, "I'd love to", "circle back", "touch base", "thought leader", "in the AI space", "exciting opportunity".
- Tone: peer-to-peer, terse, no exclamation marks, no emojis.
Install
git clone https://github.com/alex-jb/vc-outreach-agent.git
cd vc-outreach-agent
pip install -e .
cp .env.example .env # fill in ANTHROPIC_API_KEY
Usage
# 1. Describe your project once
cat > orallexa.yml <<EOF
name: Orallexa
one_liner: AI-powered quant trading agent
stage: pre-seed
raise_amount: \$500k
deck_url: https://orallexa.com/deck.pdf
founder_name: Alex Ji
founder_email: alex@orallexa.com
why_now: LLMs commoditize signal — execution is the moat now.
traction:
- Sharpe 1.41 over 698 backtests
- DSPy pipeline shipped 2026-04
EOF
# 2. List investors in a CSV (columns: name,email,firm,role,thesis_hint,linkedin,twitter,notes)
# (the thesis_hint column is the key one — that's what makes each email feel personalized)
# 3. Fan-draft into the queue
vc-outreach-agent draft --project orallexa.yml --investors investors.csv
# 4. Review at ~/.vc-outreach-agent/queue/pending/
# Open each .md in Obsidian, edit if needed, then move to:
# ../approved/ to send
# ../rejected/ to skip
Why HITL is non-negotiable for cold outreach
Auto-send for cold investor emails is a category error. Two reasons:
- One bad email burns the relationship. Investors talk to each other. A rude or off-base auto-sent email kills not just this round but next round too.
- The 1% of personalization that actually matters comes from your context, not Claude's. "Hey, I noticed you led the Round at X — I'm going to need exactly that playbook." Claude can't know which investors you've met IRL.
v0.1 is queue-only. v0.2 will add SMTP send for approved drafts (still requires you to move the file). v0.5 may add auto-send for low-stakes follow-ups, but cold first emails always go through HITL.
Roadmap
- v0.1 — Drafter (LLM + template fallback) · markdown HITL queue · CSV/YAML input · 14 tests
- v0.2 — SMTP sender for
queue/approved/(Gmail/Postmark/Resend/Sendgrid) · dry-run mode · 25 tests - v0.3 — Investor enrichment (Twitter / LinkedIn pull) — auto-build thesis_hint
- v0.4 — Multi-touch follow-ups (T+5d, T+12d) with declining conviction
- v0.5 — Pipeline analytics: open rate / reply rate / meeting rate by thesis_hint pattern
MCP server (Claude Desktop / Cursor / Zed)
Draft an investor email inline from your AI assistant.
pip install 'vc-outreach-agent[mcp]'
{
"mcpServers": {
"vc-outreach": {
"command": "vc-outreach-mcp",
"env": { "ANTHROPIC_API_KEY": "..." }
}
}
}
Tools: draft_email(...) · list_pending() · list_approved()
License
MIT.
🧩 Part of the Solo Founder OS stack
A growing collection of MIT-licensed agents that share solo-founder-os as their base — cron, eval, reflexion, AnthropicClient, HITL queue, notifiers. Each agent is independently useful; together they cover the full one-person company workflow.
🌐 The whole stack is live in production at vibexforge.com.
| Agent | What it does |
|---|---|
| solo-founder-os | The shared base lib (cron · eval · reflexion · skill library · DGM-lite). Every other agent depends on it. |
| build-quality-agent | Pre-push Claude diff reviewer + local build runner — catches CI-killing changes before they ship. |
| customer-discovery-agent | Reddit pain-point scraper + Claude clustering for product validation. |
| funnel-analytics-agent | Daily founder brief + real-time PH-day alerts across 9 sources. |
| orallexa-marketing-agent | AI marketing agent — submit project once, get platform-native posts for X / Reddit / HN / Dev.to / 小红书 + 7 more. Powers vibexforge.com. |
| cost-audit-agent | Monthly bill audit across 6 providers (Vercel / Anthropic / OpenPanel / HyperDX / Supabase / GitHub Actions) with dollar-tagged waste findings. |
| bilingual-content-sync-agent | EN ⇄ 中文 i18n diff + Claude translate + HITL apply. Batch API path @ 50% off. |
| customer-support-agent | Triage user messages → auto-draft replies → HITL queue. Closes the L5 customer-support layer. |
| payments-agent | Overdue-invoice reminder drafter. Stripe-shaped types + MockProvider fallback + hard money-safety prompt rules. |
Each agent's own row is omitted from its README. Install whichever solve real problems for you — pip install <agent-name>.
Metadata
Release files for vc-outreach-agent 0.9.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| vc_outreach_agent-0.9.0.tar.gz | 36.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| vc_outreach_agent-0.9.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 65.4 kB
Release files / vc_outreach_agent-0.9.0.tar.gz
| Download URL | vc_outreach_agent-0.9.0.tar.gz |
|---|---|
| Size | 36.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
dc8c60264ff57589961597735c4bbe4cc22d1f1779bb3c17cae4683375d0dc3e
|
|
BLAKE2b-256 checksum How to use checksums |
c168831bfdc3daf78aa7262d71d5255f0dbf0aa391b9d809bf437257f4db51ad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 6, 2026.
Transparency logRelease files / vc_outreach_agent-0.9.0-py3-none-any.whl
| Download URL | vc_outreach_agent-0.9.0-py3-none-any.whl |
|---|---|
| Size | 28.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b0ada2bf9c5981b6ec6df6741b88d82eae0d5d3091b4aa60e4bde68aec6d8d18
|
|
BLAKE2b-256 checksum How to use checksums |
e3b469a55835dcfd149fd0d2c5e7e8b05cfc931440f690f4a6792e63ea9dc2f8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 6, 2026.
Transparency log