enzostrano/huntova-public
GitHub: enzostrano/huntova-public
一款开源本地优先的 AI 驱动销售获客智能体集群,用命令行替代 Apollo/Clay/Hunter 等商业 SaaS,从线索搜索、评分、个性化邮件撰写到多轮跟进和回复检测一站式完成。
Stars: 1 | Forks: 0
# Huntova
**您的 AI 销售团队。本地优先。开源。**
Huntova 是一个用于主动出击的开源智能体集群。**Hunter** 在实时网络上寻找潜在客户。**Researcher** 爬取每个站点以获取切入点。**Composer** 起草个性化电子邮件。**Sequencer** 安排后续跟进。**Inbox-watcher** 对回复进行分类。**Pre-flight** 审计您的发送域名。**Coach** 展示哪些策略有效。每个智能体都在本地、您的机器上运行,并使用*您的* AI 密钥。
```
pipx install huntova
huntova onboard # 60-second TUI wizard, OS keychain
huntova hunt --max-leads 5 # short demo run; full hunts take longer
```
更喜欢 Web 向导?运行 `huntova onboard --browser` 跳过 TUI,直接在浏览器中配置提供商。
或者通过 curl:
```
# 一旦 huntova.com 部署完成:
curl -fsSL https://huntova.com/install.sh | sh
# 或者直接通过 GitHub raw URL(目前可用):
curl -fsSL https://raw.githubusercontent.com/enzostrano/huntova-public/main/static/install.sh | sh
```
或者通过克隆公共代码库:
```
git clone https://github.com/enzostrano/huntova-public.git
cd huntova-public
# 明确使用 Python 3.11+(macOS 默认版本为 3.9,版本过旧)
python3.13 -m venv .venv # or python3.11 / python3.12
source .venv/bin/activate
# 升级 pip — 仅 pyproject.toml 安装需要 pip 21.3+
pip install --upgrade pip
pip install -e .
huntova onboard
```
## 它的功能
1. **Sweep** — 由 SearXNG 驱动的网络搜索,涵盖 Google、Bing、DuckDuckGo。每次寻找执行 60–80 个 AI 生成的查询,并进行噪音过滤。
2. **Score** — 每个潜在客户根据五个维度进行评级:匹配度、购买意向、可触达性、服务机会 和 时机。
3. **Qualify** — 高匹配度的线索将获得 Playwright 深度爬取:关于、团队、联系方式、近期帖子。智能体会像销售人员一样阅读页面。
4. **Draft** — 个性化的冷邮件 + LinkedIn 留言,其定制内容均基于智能体实际找到的证据。
5. **Learn** — 每一次“合适 / 不合适”的评分都会更新每个用户的指令摘要(每收集 3 个信号重建一次),智能体在下一次寻找时会读取该摘要。在获得足够的反馈后,智能体的评分指导将转向*您*所定义的“合适”。
您的线索、草稿和寻找历史记录存储在本地 SQLite 文件中,路径为
`~/.local/share/huntova/db.sqlite`。没有中央服务器。无需订阅。
## 60 秒冷邮件流水线
```
huntova examples install solo-coach # auto-seeds ICP + tone (10 playbooks)
huntova recipe run solo-coach # ~3 minutes, ~25 leads
huntova outreach send --top 5 --dry-run # preview AI-drafted emails
huntova outreach send --top 5 --max 5 # deliver via your SMTP
```
三条命令。真实的潜在客户。真实的个性化电子邮件。您的 AI 密钥,您的 SMTP,您的机器。除了访问您 SearXNG 的搜索查询和发往您提供商的外发邮件外,没有任何数据会离开您的笔记本电脑。
## 完整的本地优先冷邮件技术栈
以下命令涵盖了您原本需要跨多个商业 SaaS 订阅才能拼凑出的完整主动出击步骤——所有操作均使用*您*控制的凭证,并在您的机器上运行:
```
huntova playbook install solo-coach # 10 bundled ICP playbooks, auto-seed wizard
huntova hunt --max-leads 25 # find prospects (search → score → save)
huntova research --batch 5 --above 8 # deep-crawl 14 pages × 5 leads, rewrite openers
huntova outreach send --top 5 --research-above 8 # send research'd Step 1 (auto-enrols Step 2/3)
huntova sequence run --max 25 # Day +4 bump, Day +9 final, paused on reply
huntova inbox watch --interval 300 # IMAP poll + AI-classify replies (interested/OOO/etc)
huntova doctor --email # SPF / DKIM / DMARC / MX pre-flight
huntova pulse --since 7d # weekly self-coaching summary + next-action
huntova schedule print --target launchd # emit OS-native scheduled-job for daily auto-runs
```
| 主动出击功能 | 典型 SaaS 定价层级 | Huntova 命令 |
|---------------------|---------------------------|-----------------|
| 多页面个性化爬取 | 企业版 (~$300+/月) | `huntova research` |
| 回复检测 + AI 分流 | 中级基于席位 (~$80–200/席位/月) | `huntova inbox watch` |
| 多步骤后续跟进序列 | 中级基于席位 (~$99/席位/月) | `huntova sequence run` |
| 投递预检 | 专用 SaaS (~$30/月) | `huntova doctor --email` |
| 辅导 / KPI 摘要 | 中级 (~$99/月) | `huntova pulse` |
| 定时任务自动驾驶 | 中级 (~$97/月) | `huntova schedule print` |
### 自主每日模式
完成一次性设置后,将节奏配置为自动运行:
```
huntova schedule print --target launchd --at 09:00 \
> ~/Library/LaunchAgents/com.huntova.daily.plist
launchctl load ~/Library/LaunchAgents/com.huntova.daily.plist
```
(Linux: `--target systemd` 输出一个用户定时器 + 服务。) 现在
`huntova sequence run`、`huntova inbox check` 和 `huntova pulse`
将每日按计划触发。完全解放双手的冷 outreach,使用您自己的密钥,在您自己的机器上运行。
其他实用命令:
```
huntova playbook ls # 10 bundled playbooks (alias: examples)
huntova research # deep-research one lead, rewrite the opener
huntova research --batch 5 --above 8 # batch-research the top 5 unsent leads
huntova ls --status replied # quick filter shortcut
huntova ls --reply-class interested # only the IMAP-classified positive replies
huntova ls --min-fit 8 # only fit ≥ 8 leads
huntova share --top 10 --title "Q2" # mint a /h/ URL of top leads
huntova share status # how many people clicked it
huntova pulse --since 30d # 30-day self-coaching summary
huntova sequence status # how many leads at each follow-up step
huntova inbox setup # one-time IMAP cred capture for reply detection
huntova schedule print # emit cron / launchd / systemd snippet
huntova hunt --explain-scores # show fit/buy/timing/reach breakdown per lead
huntova doctor # diagnostic — verifies install, plugins, AI key
huntova doctor --email # deliverability pre-flight (dnspython bundled)
huntova plugins create my-crm-sink # scaffold a plugin in ~/.config/huntova/plugins/
```
## 配置
运行 `huntova init` 后,您将拥有:
| 路径 | 内容 |
|------|----------|
| `~/.config/huntova/config.toml` | `preferred_provider`,可选的非机密默认值 |
| `~/.config/huntova/secrets.enc` | Fernet 加密的 API 密钥(在没有 OS 密钥链时的备选方案) |
| `~/.local/share/huntova/db.sqlite` | 所有线索、寻找记录、设置和学习数据 |
API 密钥在可用时存储在您的 OS 密钥链中(macOS Keychain、
Windows Credential Manager、Linux Secret Service)。如果不可用,则回退到
`~/.config/huntova/secrets.enc` 处的加密文件。最后的备选方案是
位于 `~/.config/huntova/secrets.json` 的 0600 权限锁定明文文件,使用时会发出警告。
### 通过环境变量覆盖
| 变量 | 用途 |
|----------|---------|
| `HV_ANTHROPIC_KEY` | Anthropic Console 密钥(默认提供商 — Claude) |
| `HV_GEMINI_KEY` | Google AI Studio 密钥 |
| `HV_OPENAI_KEY` | OpenAI Platform 密钥 |
| `HV_AI_PROVIDER` | `anthropic`(默认)/ `gemini` / `openai` / 另有 10 个选项 — 参见 `huntova onboard` |
| `APP_MODE` | `local`(CLI 默认)/ `cloud` |
| `HUNTOVA_DB_PATH` | 覆盖 SQLite 路径 |
| `DATABASE_URL` | 如果设置,则使用 Postgres 而不是 SQLite |
| `SEARXNG_URL` | 用于网络搜索的 SearXNG 实例 |
### 自托管 SearXNG(推荐)
Huntova 通过 [SearXNG](https://searxng.github.io/searxng/) 搜索网络,
这是一个尊重隐私的元搜索引擎。公共实例通常
会禁用 JSON API 以防止滥用,因此最干净的设置是
您自己运行 SearXNG。
最快的途径是使用 Docker:
```
docker run -d --restart=always \
--name=searxng \
-p 8888:8080 \
-v "$HOME/.config/huntova/searxng:/etc/searxng" \
-e BASE_URL=http://localhost:8888 \
-e INSTANCE_NAME=huntova-search \
searxng/searxng:latest
```
然后通过编辑
`~/.config/huntova/searxng/settings.yml` 并将 `json` 添加到
`search.formats` 中来启用 JSON API。重启容器。
设置 `SEARXNG_URL=http://127.0.0.1:8888`(或运行 `huntova init` 并
在提示时粘贴 URL),Huntova 将会使用它。
## 命令
```
# 首次运行 + 设置
huntova onboard # rich TUI wizard — picks a provider, saves the key, opens the dashboard
huntova doctor # full diagnostic — providers, SearXNG, plugins, AI key probe
huntova status # one-screen operational dashboard (server, daemon, providers, last hunt)
huntova test-integrations # live probe of every configured provider + SearXNG
# 日常使用
huntova # alias for `huntova serve`
huntova serve # boot local dashboard (default port 5050)
huntova hunt # one-shot headless hunt — streams leads to terminal
huntova ls [--filter X] # list saved leads (table or json, substring/field-prefix filter)
huntova lead # full detail for one lead (use --by-org for partial match)
huntova rm # permanently delete one lead (use --yes to skip prompt)
huntova history # list recent hunt runs (id, status, leads, queries)
huntova export # CSV/JSON export to stdout
# Outreach
huntova outreach send # AI-draft personalised cold emails for top leads, send via SMTP
huntova research # deep-research one lead (14-page crawl), rewrite the opener
huntova sequence run # send Day +4 bump + Day +9 final to enrolled leads
huntova sequence status # how many leads at each step
huntova sequence pause --lead-id # pause / resume one lead's cadence
huntova inbox setup # capture IMAP creds for reply detection
huntova inbox check # one-shot poll, prints scanned + matched count
huntova inbox watch # daemon loop, auto-pauses cadences on reply
# 分享 + recipes
huntova share # mint a public /h/ link
huntova share status # view-count for a published share
huntova examples ls # 10 bundled playbooks (auto-seed ICP + tone + queries)
huntova examples install # adopt a playbook in one command
huntova recipe run # run a recipe end-to-end
# 配置
huntova config show # render the active config (secrets redacted)
huntova config edit # open config.toml in $EDITOR
huntova config get # read a single key
huntova config set # write a single key
# Plugins
huntova plugins # list discovered plugins
huntova plugins create # scaffold ~/.config/huntova/plugins/.py
huntova plugins install # one-command install from the registry
huntova plugins contribute # registry PR flow shortcut
# Daemon (可选 — 重启后依然生效)
huntova daemon install # install launchd (macOS) or systemd --user (Linux) unit
huntova daemon status # current daemon state
huntova daemon logs # tail the unit's logs
# Metadata
huntova metrics show # in-app analytics for the dashboard tab
huntova update # upgrade to latest via pipx
huntova version # print version
```
### 从终端浏览线索
```
huntova ls --filter "country:Germany" # field-prefixed filter
huntova ls --filter aurora # substring scan across common text fields
huntova lead L3 # full detail for one lead
huntova lead "aurora" --by-org # partial-org-name lookup
huntova export --format csv > leads.csv # pipe-friendly export
```
### 分享寻找结果(增长循环)
```
huntova share --top 10 --title "Q2 prospects" # mints a public /h/ URL
```
分享的页面会渲染出每个线索及其 **Proof Pack** — 引用
证据、来源 URL、最新时间戳。排在后面的线索
会被视觉模糊,并配有一键 `huntova hunt --from-share `
命令,让接收者可以安装 Huntova 并在本地复现
完全相同的寻找结果。每个分享页面的底部都有带
`pipx install huntova` 复制按钮的固定底栏。
```
huntova hunt --from-share HYgJouz4J1k # fetch the share, adopt its country set, run a fresh hunt
```
### 插件(护城河)
```
huntova plugins # list discovered plugins
huntova plugins create my-crm # scaffold ~/.config/huntova/plugins/my_crm.py
```
插件挂载到智能体生命周期中:`pre_search`、`post_search`、
`pre_score`、`post_score`、`post_qualify`、`post_save`、`pre_draft`、
`post_draft`。它们从 `~/.config/huntova/plugins/*.py` 加载,
或者作为声明了 `huntova.plugins` 入口点的已发布包加载。
**wheel 中附带了 9 个参考插件**(每次运行时加载;可通过 `HV_DISABLE_BUNDLED_PLUGINS=1` 选择退出):
- **`csv-sink`** — 将每个保存的线索追加到本地 CSV 文件中。通过在 `config.toml` 中配置 `[csv_sink] path = "~/leads.csv"` 或 `HV_CSV_SINK_PATH` 环境变量来设置。如果两者都未设置,则不执行任何操作。
- **`dedup-by-domain`** — 丢弃过去 30 天内出现过的域名的搜索结果(可通过 `[dedup] window_days = 30` 配置)。消除了多查询寻找中的第一大噪音源。
- **`slack-ping`** — 每出现一个新线索时,向 Slack 入站 webhook 发送 POST 请求。通过 `[slack_ping] webhook_url = "..."` 或 `HV_SLACK_WEBHOOK_URL` 环境变量配置。
- **`discord-ping`** — 每出现一个新线索时,向 Discord 入站 webhook 发送简短的 embed POST 请求。通过 `discord_webhook_url`(Settings → Integrations)或 `HV_DISCORD_WEBHOOK_URL` 环境变量配置。
- **`telegram-ping`** — 每出现一个新线索时,通过 bot API 向 Telegram 聊天发送短消息。需要同时设置 `telegram_bot_token` 和 `telegram_chat_id`(Settings → Integrations)或环境变量 `HV_TELEGRAM_TOKEN` / `HV_TELEGRAM_CHAT_ID`。
- **`whatsapp-ping`** — 每出现一个新线索时,通过 Twilio 发送 WhatsApp 消息。需要 `twilio_account_sid`、`twilio_auth_token`、`twilio_whatsapp_from`、`whatsapp_to`(Settings → Integrations)或环境变量 `HV_TWILIO_SID` / `HV_TWILIO_TOKEN` / `HV_TWILIO_WHATSAPP_FROM` / `HV_WHATSAPP_TO`。
- **`generic-webhook`** — 每保存一个线索时,向用户配置的 webhook 发送 JSON 负载的 POST 请求。通过顶层的 `webhook_url`(Settings → Webhooks)或 `HV_WEBHOOK_URL` 环境变量配置。如果设置了 `HV_WEBHOOK_SECRET`(来自 keychain 或环境变量),则会使用 HMAC-SHA256 对正文进行签名;签名位于 `X-Huntova-Signature: sha256=` 标头中。
- **`recipe-adapter`** — 读取 `HV_RECIPE_ADAPTATION` 环境变量,在搜索前将 winning_terms / suppress_terms / added_queries 应用于查询列表。
- **`adaptation-rules`** — 应用从配方适配卡生成的 AI 评分规则。闭环了 结果→调整→寻找 循环。
在 [huntova.com/plugins](https://huntova.com/plugins) 浏览包含功能披露的社区插件完整注册表
(以便您在安装前审计每个插件的具体功能)。
示例:一个 Slack 通知插件 —
```
class SlackPing:
name = "slack-ping"
version = "0.1.0"
def post_save(self, ctx, lead):
import urllib.request, json
url = "https://hooks.slack.com/services/..."
body = json.dumps({"text": f"new lead: {lead.get('org_name')}"}).encode()
urllib.request.urlopen(url, data=body, timeout=5)
```
将其放入 `~/.config/huntova/plugins/slack_ping.py`,每保存一个
线索就会在您的 Slack 上发出提示。下次寻找时无需重启即可生效。
### 验证设置
```
huntova doctor
```
报告内容:
- Python + 配置路径
- 已配置的提供商 + 密钥后端(keyring / 加密文件 / 明文)
- SearXNG 可达性 + JSON API 状态
- **向您的 AI 密钥发起的实时 5 token 往返测试** — 确认其确实可用,而不仅仅是已设置
- 各环境变量状态
`--quick` 跳过网络调用。
### 无头寻找示例
```
huntova hunt --countries Germany,France --max-leads 10
```
输出随智能体的运行进行流式传输:
```
[huntova] hunting in 2 countries: Germany, France
[huntova] cap: 10 leads
[huntova] streaming to ~/.local/share/huntova/db.sqlite (Ctrl-C to stop)
· Loading hunt brain
· Generating search queries
✓ [9/10] Aurora Studios · Germany · aurora-studios.de
✓ [8/10] Tessera Marketing · France · tessera-mkt.com
✓ [9/10] Helio Production · Germany · helio-prod.de
...
[huntova] hunt completed: 10 leads
[huntova] top 3:
· [9/10] Aurora Studios — Mid-size production house, recently launched a brand campaign
· [9/10] Helio Production — Recurring event series, gap in their post-production pipeline
· [8/10] Tessera Marketing — Boutique agency hiring for content roles
[huntova] view in dashboard: `huntova serve`
```
`--verbose` 解锁完整的日志 + 思维流。Ctrl-C 可以干净地
停止智能体。`huntova hunt` 和 `huntova serve` 共享
同一个 SQLite 文件,因此通过任一途径找到的线索都会在两者中显示。
## 提供商
| 提供商 | 何时选择 | 获取密钥 |
|----------|--------------|-----------|
| **Claude (Anthropic)**(默认) | 最高质量的评分,最佳的邮件草稿。Huntova 端到端均使用 Claude 构建。 | |
| **Gemini** | 免费额度,快速评分,良好的默认设置 | |
| **OpenAI** | 广泛的模型选择,GPT-5 推理能力 | |
共有 13 个提供商 — 参见 `huntova onboard` 获取完整列表(云服务、
本地 AI 服务器、自定义 OpenAI 兼容端点)。
稍后切换提供商:重新运行 `huntova onboard --force` 或编辑
`~/.config/huntova/config.toml`。
## 状态
**Alpha 阶段。** 代码库正从托管的 SaaS 转型为这种
CLI 形态。核心智能体(搜索/评分/资格审查/起草)已稳定;当前
转型正在重建存储 + 身份验证 + 提供商边缘部分。请在[问题页面](https://github.com/enzostrano/huntova-public/issues)上跟踪进度。
## 冒烟测试
```
APP_MODE=local DATABASE_URL= HV_ANTHROPIC_KEY=fake \
python tools/smoke_test_local.py
```
25 项检查,涵盖运行时功能、策略、数据库驱动、schema、
FastAPI 路由、自动登录、功能解锁以及 /download 页面。
## 许可证
AGPL-3.0-or-later。参见 [LICENSE](./LICENSE)。
## 贡献者
**大脑:** [@enzostrano](https://github.com/enzostrano) —
方向、架构,以及您所看到界面背后的每一个决策。
**编码:** [Claude (Anthropic)](https://www.anthropic.com),运行在
[Claude Code](https://claude.com/claude-code) 上。根据 Enzo 的规范,
Claude 逐行、逐个提示词地编写了代码库中的几乎每一行。
如果没有 Anthropic 的模型,Huntova 将不复存在。**感谢
Anthropic 团队构建了孕育 Huntova 的工具。** 这就是为什么
Claude 是默认提供商的原因 — 它是真正发布这个项目的模型。
标签:AI销售团队, B2B销售, pipx, Playwright, PyRIT, Python, Python 3.11+, SearXNG, SEO, TUI, 个性化邮件, 冷邮件, 外呼营销, 多智能体系统, 客户寻找, 开源, 搜索引擎聚合, 收件箱分类, 数据隐私, 无后门, 无订阅, 替代Apollo, 替代Clay, 替代Hunter, 本地优先, 测试用例, 源码安装, 潜在客户挖掘, 潜在客户评分, 特征检测, 网页向导, 自动化代理, 自带密钥(BYOK), 获客代理, 请求拦截, 逆向工具, 邮件跟进, 销售智能, 销售漏斗, 销售自动化