skills
Skills for Real Engineers. Straight from my .claude directory.
npx skills@latest add mattpocock/skillsSkills for Real Engineers. Straight from my .claude directory.
npx skills@latest add mattpocock/skillsLangflow is a powerful tool for building and deploying AI-powered agents and workflows.
Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explaining complex code, and handling git workflows - all through natural language commands.
Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explaining complex code, and handling git workflows -- all through natural language commands. Use it in your terminal, IDE, or tag @claude on Github.
**Learn more in the [official documentation](https://code.claude.com/docs/en/overview)**.
<img src="./demo.gif" />
## Get started
> [!NOTE]
> Installation via npm is deprecated. Use one of the recommended methods below.
For more installation options, uninstall steps, and troubleshooting, see the [setup documentation](https://code.claude.com/docs/en/setup).
1. Install Claude Code:
**MacOS/Linux (Recommended):**Describe your product. Define your target market. The AI finds the leads and emails them for you.
OpenOutreach is a self-hosted, open-source, email-first AI sales agent for B2B lead generation. It discovers leads from a licensed data provider, qualifies them on your own machine, and runs agentic email outreach from a mailbox you own ā with zero platform-ToS surface: it is browserless, uses no social-network account, and does no scraping. Unlike other tools, you don't need a list of profiles to contact ā you describe your product and your target market, and the system autonomously discovers, qualifies, and emails the right people.
How it works:
The system gets smarter with every decision: it explores broadly, then progressively focuses on the highest-value profiles as it learns your ideal customer profile from its own classification history.
Why choose OpenOutreach?
Perfect for founders, sales teams, and agencies who want powerful automation without account bans or subscription lock-in.
| # | What | Example |
|---|---|---|
| 1 | An LLM API key | OpenAI, Anthropic, or any OpenAI-compatible endpoint |
| 2 | An email-finder API key (BetterContact) | Powers both discovery (Lead Finder) and enrichment (work-email resolution) |
| 3 | A sending mailbox | An app password for a mailbox you own (Gmail / Workspace / own-domain SMTP), or cold-email infra like IceMail |
| 4 | A product description + target market | "We sell cloud cost optimization for DevOps teams at mid-market SaaS companies" |
That's it. No social-network account, no spreadsheets, no lead databases, no scraping setup. The BetterContact key and a connected mailbox are both required ā the key drives discovery and enrichment, and the mailbox is where outreach is sent from.
Pre-built images are published to GitHub Container Registry.
docker run --pull always -it -v ~/.openoutreach/data:/app/data ghcr.io/eracle/openoutreach:latest
The interactive onboarding walks you through the inputs above on first run ā product/objective ā LLM key (live-verified) ā mailbox (paste an app password ā SMTP auth-check) ā BetterContact key ā your email ā country ā newsletter/legal. All data persists in ~/.openoutreach/data on your host across restarts. The image is a slim Python runtime ā no browser, no VNC.
For Docker Compose, build-from-source, and more options see the Docker Guide.
For contributors or if you prefer running directly on your machine.
git clone https://github.com/eracle/OpenOutreach.git
cd OpenOutreach
# Install deps, run migrations, and bootstrap CRM
make setup
make run
The interactive onboarding prompts for your LLM key, mailbox, BetterContact key, and campaign details on first run. Fully resumable ā stop/restart anytime without losing progress.
OpenOutreach includes a full CRM web interface via Django Admin:
# Create an admin account (first time only)
python manage.py createsuperuser
# Start the web server
make admin
Then open:
| Feature | Description |
|---|---|
| š§ Autonomous Lead Discovery | No contact lists needed ā an LLM turns your product + objective into an ICP filter and pages matching profiles from a licensed discovery source. |
| šÆ Bayesian Active Learning | Gaussian Process model on profile embeddings learns your ideal customer via explore/exploit, selecting the most informative candidates for LLM qualification. |
| š Licensed Discovery | Firmographic profiles come from a paid, licensed provider (BetterContact Lead Finder) ā no scraping, no browser, no account. |
| š§ Agentic Email Outreach | Resolves a work email per best-fit lead (one credit per hit), sends an AI-written opener from your own mailbox over SMTP, then reads replies (IMAP) and runs multi-turn follow-up. |
| š Stateful Pipeline | Tracks deal states (QUALIFIED ā READY_TO_FIND_EMAIL ā FINDING_EMAIL ā READY_TO_EMAIL ā EMAILED ā COMPLETED/FAILED) in a local DB ā fully resumable. |
| ā±ļø Send-Gated Spend | Paid email lookups ride on send capacity ā a per-mailbox daily cap bounds how many leads enter the pipeline, so you never resolve more than you can send. |
| š¾ Built-in CRM | Full data ownership via Django Admin ā browse Leads, Deals, and conversations. |
| š³ One-Command Deployment | Dockerized setup with interactive onboarding; a slim runtime with no browser and no VNC. |
| āļø AI-Powered Messaging | Agentic multi-turn follow-up conversations ā the AI agent reads the thread, composes replies, and schedules future follow-ups. |
The daemon runs a continuous task queue backed by a persistent Task model. Four task types self-schedule follow-on work:
| Task Type | What it does |
|---|---|
| find_email | Submits a work-email lookup for a ranked, qualified lead ā a free hub-cache hit resolves immediately; otherwise it fires a paid provider job and parks the deal at FINDING_EMAIL. |
| collect_email | Polls the in-flight lookup (self-chaining backoff): hit ā READY_TO_EMAIL, miss ā FAILED (blank outcome, ML-skipped), couldn't-run/timeout ā back to the queue. |
| follow_up | Runs the AI agent over an emailed deal ā reads replies, decides send/wait/complete, and re-arms the next follow-up. |
Sends one AI-written opener to a READY_TO_EMAIL lead from your mailbox pool, then parks the deal at EMAILED. |
Discover ā qualify ā gate ā find email ā email. An LLM turns your campaign into an ICP filter (cached on the Campaign); discovery pages matching profiles into embedded Leads. Qualification runs the GP + LLM loop over the stored firmographic text. The GP confidence gate promotes QUALIFIED ā READY_TO_FIND_EMAIL, rationing the paid lookup so only the best-fit leads cost a credit. A hit sends an opener; a miss ends the deal as FAILED with a blank outcome (so the ML labeler skips it ā an unfindable address is not a fit signal).
The qualification loop in detail:
Discovered profiles are embedded (384-dim FastEmbed vectors) from the licensed firmographic payload. The backfill chain decides which profile to evaluate next using a balance-driven strategy:
All qualification decisions go through the LLM. The GP model selects which candidate to evaluate next and gates promotion from QUALIFIED to READY_TO_FIND_EMAIL. Every LLM decision feeds back into the model, making candidate selection progressively smarter.
Cold start: With fewer than 2 labelled profiles, the model can't fit ā candidates are selected in order and qualified via LLM. As labels accumulate, the GP gets better at selecting high-value candidates. When the unlabelled pool empties, discovery pages a fresh batch.
Configure behavior via Django Admin (SiteConfig + Campaign).
āāā docs/ # architecture, configuration, docker, templating, testing
āāā openoutreach/ # single source package; Django apps nested inside
ā āāā settings.py # Django settings (SQLite at data/db.sqlite3)
ā āāā core/ # engine app: daemon, task queue + scheduler,
ā ā # Campaign/SiteConfig/Task, LLM factory, onboarding,
ā ā # ML + discovery/qualify pipeline, the two agents
ā āāā emails/ # discovery/enrichment client, Mailbox + SMTP/IMAP,
ā ā # sender, the four task handlers
ā āāā crm/ # Lead + Deal models
ā āāā chat/ # ChatMessage (per-Deal conversation)
ā āāā legacy/ # model-less migration-history anchor (retired channel)
āāā manage.py # Django management (no args defaults to rundaemon)
āāā local.yml # Docker Compose
āāā Makefile # Shortcuts (setup, run, admin, test)
Join for support and discussions: Telegram Channel
Got a specific use case, feature request, or questions about setup?
Book a free 15-minute call ā I'd love to hear your needs and improve the tool based on real feedback.
This project is built in spare time to provide powerful, free open-source growth tools. Your sponsorship funds faster updates and keeps it free for everyone.
| Tier | Monthly | Benefits |
|---|---|---|
| ā Supporter | $5 | Huge thanks + name in README supporters list |
| š Booster | $25 | All above + priority feature requests + early access to new campaigns |
| 𦸠Hero | $100 | All above + personal 1-on-1 support + influence roadmap |
| š Legend | $500+ | All above + custom feature development + shoutout in releases |
GNU GPLv3 ā see LICENCE.md
By using this software you accept the Legal Notice. It covers the third-party services you connect (data provider, email-finder, mailbox), your responsibilities as data controller and sender under data-protection and anti-spam law, the optional freemium promotional campaign, automatic newsletter subscription for non-opt-in jurisdictions, the central contacts store, and liability disclaimers.
Use at your own risk ā no liability assumed.
Made with ā¤ļø