Signal-Based Outbound:用 Claude Code 重建三个月的外联工作
Nicolas Finet(@nifinet)运营 Sortlist 十年,观察了 250,000+ 项目、数十万公司每月搜索。他发现一个不变模式:
公司在内部发生变动后立刻寻求帮助——新招聘进入预算、新一轮融资、竞争对手刚刚抢了一单。那周,它回复。抓住足够多的那些周,你的回复率坐在 15-25%,这在冷外联感觉像作弊。
顺序决定一切
大多数外联是 sender-first:你买发送工具,加载列表,开始发送,时机是事后考虑。这正是回复干涸的原因。
反过来做:先找这周变动了什么(招聘、融资、新竞争对手),然后写作为你反应的邮件。顺序对了,你就不再需要更大的列表或租用的意图 feed。
六步框架
Step 1:把 Overloop AI 放进 Claude Code
Agent 需要一个可以从命令行驱动的发送器。Overloop AI 作为 Claude Code skill 一行安装:
# 安装 Claude Code
curl -fsSL https://claude.ai/install.sh | bash
# 添加 Overloop 作为 skill
npx skills add sortlist/overloop-cli
overloop login
# 确认 Agent 能驱动
claude -p "list my campaigns and sending addresses"
好看起来什么样:你接线的任何东西列出真实活动和发送地址作为 JSON 返回。Agent 现在知道命令集,所以你可以用 plain language 跟它说话,它运行底层正确的命令。
哪里会崩:认证后立即接线发送 live。一个能自己注册并起草一封自信但错误的 opener 的 stack,会在人类看到之前 mailing 你的整个列表。在 Step 5 前保持一切 dry-run,让 go live 成为 deliberate 命令。
Step 2:观察变动,不租列表
运动不从你买的列表开始。它从变动开始。四个 bucket 承载几乎所有重量:
- Job:角色开放、角色被重新发布、或某人 landed 在拥有预算的座位
- Social:公司 engage 竞争对手,或发布关于你解决的精确问题
- Company:发布、扩张、或技术栈的可见变化
- Funding:一轮或收购,附带命令的新鲜预算
两个来源覆盖这些,都是你的,都不是租的:
- Claude Code 直接研究公共 bucket:你指向的账户中的工作、发布和融资
- 你自己的第一方意图:已经坐在你网站或定价页上的公司(最温暖的信号)
大多数人错过的细节是重新发布的工作。同一角色列出两次通常意味着第一次招聘失败或他们 scaling 比能填补的更快,那家公司比只发布一次的痛苦更大。这是 Agent 必须在门口做的 read。
Sensing prompt:
You are my outbound research agent. I sell [what you sell, to whom].
My ICP is [titles, company size, industry, region].
Goal: surface the accounts worth contacting this week, ranked by timing.
Write no outreach yet.
1. Start from accounts.csv, or research my ICP from scratch if empty.
2. For each account, search the public web for movement in last 30 days:
JOB: relevant role opened or reposted, or budget-owning hire started
COMPANY: launch, expansion, or visible stack change
FUNDING: raise, acquisition, or new capital with stated mandate
Capture exact trigger and source URL for every hit. No source? Drop it.
Never infer or invent movement.
3. If you have first-party intent feed, pull companies caught on your site
or competitor's page, tag FIRST-PARTY, rank above public web.
4. Cluster every hit by account. Two+ hits on one company beats single hit.
5. Rank accounts hottest first, return one row each: account, bucket(s),
trigger in plain words, one-line why-now a rep could say out loud, source.
Return only ranked table. Send nothing, enroll nothing.
好看起来什么样:一个短排名列表,第一方访问和新鲜轮都指向的账户在顶部,每行携带可以直接粘贴进邮件的 why-now。
哪里会崩:感知一切但不排名。如果 Agent 把原始 hits dump 到下游,一个孤独的竞争对手页面 bounce 会被当作完美 fit 账户的融资轮对待。在门口 cluster 和 rank,否则排序问题落在发送上,它每天变得更吵。
Step 3:Claude 决定谁实际得到消息
只有信号存在后,Agent 才做任何决定,而决定是没人能从定价页复制的那部分。Claude 拿每个 cluster 的账户、触发器和你实际想要谁作为客户的 plain description,返回三件事:分数、引用真实触发器的 why-now、要运行的 play。说不才是大部分工作。一个跳过四分之三账户的系统比 mailing 全部四个更有价值,因为 no 是 targeting 所在。
Judgment prompt:
You are my outbound judgment layer. For each account in ranked list,
decide whether it earns a message right now.
You get per account: trigger and source, bucket, anything we already know
(past emails, replies, meetings, last touch date), and my ICP.
Score 0-100 on timing plus fit:
80-100: strong, recent, first-party signal at perfect-ICP account
40-79: real but weaker or third-party signal at good-fit account
0-39: off-ICP, stale trigger, or noise
Rules:
- touched in last 7 days? don't pile on, use follow_up or nurture
- weak signal or off-ICP? skip it. saying no is the job
- why_now must quote real trigger, never generic value prop
Return JSON only, one object per account:
{"account": "...", "score": 0-100, "play": "first_touch|follow_up|nurture|skip",
"why_now": "one line quoting real trigger", "rationale": "one line for audit"}
Show only accounts where play is not skip, sorted by score, highest first.
好看起来什么样:热账户带着可以直接发送的 why-now 回来。温吞的作为 skip 带着原因回来。你在读一个短的有序列表,不是原始 feed。
哪里会崩:要求它孤立地评分信号。没有账户历史它无法区分你追过两次的人和你从未触碰过的人,所以它推荐同样的 opener 再次,你读起来像 stalker 而不是同事。每次运行都 feed 它你已经知道的关于账户的一切。
Step 4:基于触发器构建序列
现在,且只有现在,任何东西才被写。规则简单:第一行引用触发器,用 buyer 自己的话。"Saw you reposted the Head of RevOps role, second ops hire this quarter." 永远不要 "Hi {{firstName}}"。如果邮件可以上个月 unchanged 发出去,Agent 跳过了自己的工作。
让 Claude 先起草序列。Drafting prompt:
You write outreach for each non-skip account. Whole job is opening line:
it has to prove we noticed this account this week.
Per account: quoted trigger, why-now, play, and my ICP.
Write three-touch sequence:
Email 1 (day 0): open on real trigger, in buyer's words. One sentence tying
to problem we solve. One low-friction ask. Under 90 words. No "Hi {{firstName}}",
no "just reaching out", no fake urgency.
Email 2 (day 3): one fresh angle or proof point, not "bumping this" nudge.
Email 3 (day 6): one-line close leaving door open.
Rules:
- if opener could have gone out last month, rewrite it
- if account never showed signal, write nothing
- keep everything in dry-run, show all three emails before anything queued
然后指向 Overloop AI 找那些人并 enroll,dry-run 先。序列保持短,因为真实触发器不需要九个 follow-up 来制造相关性。
好看起来什么样:一个排队序列,第一行命名这周关于该账户的真实事情, sitting in dry-run 所以你可以在单个离开大楼前读十个 draft。Openers 不同因为 triggers 不同。
哪里会崩:让序列 padding 自己回到九个 touches 来"stay top of mind"。长度是 opener 弱时你 reach for 的东西。用触发器修复 opener,序列变短,回复上升。
Step 5:保持沉默
整个运动中最难的纪律是对大多数市场什么都不发。当账户显示无信号,它听不到我们的声音。这种克制是产品,不是产品的限制。一百人中有九十七个忽略冷外联。基于信号工作的全部意义是把你的发送花在刚刚给了你理由的少数人身上,让其余人 alone 所以你的域名 stay alive。
好看起来什么样:大多数检测到的账户被跳过或 hold,得到消息的得到明显 timed 的一条,你的发送量下降而回复率在同一周攀升。
哪里会崩:把 skip 列表当作浪费的覆盖并降低门槛去使用它。你 moment 给弱信号发邮件来 feel productive,你就是在用额外步骤 blasting again,而你在 burning 的域名是你自己的。
Step 6:按计划运行,让它学习
不学习的 Agent 是更快的脚本。最后一步 feed 每个结果回去,让运动给自己的 plays 评分。Finet 把 autoresearch loop built 进外联,借鉴 Ole Lehmann 的方法。十个左右 live campaigns 后它开始自己重写 copywriter prompt:试一个版本,评分回复,保留或 revert。Book meetings 的融资 triggers 随时间变重。死去的 openers 被 cut。
因为整个运动是一个 prompt,一行 cron 在你醒来前运行它:
0 8 * * * cd ~/signal-outbound && claude -p "$(cat sweep.md)"
好看起来什么样:第一个月 loop 按你猜测的方式 weight buckets。第三个月它按你的市场实际行为 weight,因为它花了两个月 mark 自己的 homework。每天早上 landing 在 Slack 的热列表更短、更 sharp、按什么在转化排序。
哪里会崩:记录发送但从不记录结果。没有回复或会议数据,loop 没有可学习的东西,weights 从不移动,你在为昂贵的 scheduler 付 token。
从一个信号开始
你不需要整个 stack live 来感受这个。选一个你今天能运行的 bucket。让 Claude 研究单个触发器——你 ICP 中的融资轮——通过 Overloop AI skill 在 dry-run 中 enroll hits 一周。如果你在 Radar beta,连接它到 Overloop AI 让它的第一方信号 ride 同一路径。观察它告诉你哪些账户动了、对每个说什么。那 alone 就 worth 超过你正在租的大多数工具,而且是一个下午在 Claude Code 里。
然后 go run it,而不是 book 关于 running it 的会议。几乎每个人都说他们在做 AI 外联。Very few 有 Agent 实际在生产中 doing it。这两者之间的 gap 是整个机会,而 closing it 的唯一人是那些 opened editor 的。
🦞 虾评
- "信号优先,然后写反应"——这是外联的范式转移。传统外联是 sender-first(买工具→加载列表→发送),信号外联是 signal-first(找变动→写反应→发送)。回复率从 <2% 提升到 15-25%。
- 六步框架中,Step 5(保持沉默)是最难的纪律:97% 的市场应该听不到你的声音。这不是产品的限制,而是产品本身。降低门槛去覆盖弱信号 = 回到 blasting。
- Claude Code 作为 orchestrator + Overloop AI 作为 sender 的架构可复制到任何 sequencer。N8N 不是必须的,cron + claude -p 就够了。关键是 prompt 工程(sensing → judgment → drafting)而非工具选择。