oulang-continuous-outreach-skill

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Oulang Continuous Outreach Skill

Oulang 持续外展技能

Default identity

默认身份

Unless the user overrides, this skill operates the Oulang.ai pre-seed €500K–€1M raise and the Spanish-Chinese diaspora partnership track. Sender identity:
  • From:
    sami@oulang.ai
  • Sender name: Sami Halawa — Founder, Oulang.ai (欧浪网)
  • Legal: AGENTS AI Ltd (UK 16570822)
  • WhatsApp signature: +34 679 794 037
  • Deck link:
    https://oulang.ai/investors
  • Honest MRR framing: "€3.9K cash MRR (excludes admin credit grants)"
  • Real moat: WeChat group-of-groups lock-in (NOT "Mandarin language")
If the user provides a different campaign context, override these but keep the same loop.
除非用户另行指定,本技能默认用于Oulang.ai 50万-100万欧元种子前融资以及中西侨民合作项目。发件人身份信息如下:
  • 发件邮箱:
    sami@oulang.ai
  • 发件人姓名:Sami Halawa — Oulang.ai(欧浪网)创始人
  • 主体资质:AGENTS AI Ltd(英国公司编号16570822)
  • WhatsApp签名:+34 679 794 037
  • 融资演示链接:
    https://oulang.ai/investors
  • MRR真实说明:"3900欧元现金MRR(不含管理信用补贴)"
  • 核心护城河:微信群群矩阵锁定用户(而非“普通话语言优势”)
若用户提供其他活动背景,可覆盖上述信息,但需保留相同的循环流程。

Infra (canonical, do not improvise)

基础设施(标准配置,请勿随意修改)

ResourceAddressNotes
Notion DB (Investor Outreach Tracker)
collection://24dc90d8-2308-4c5a-88da-348926d78370
URL: https://www.notion.so/pime/6705b564c5d34f55a43fce064f77f60b
Direct Gmail SMTP
smtp.gmail.com:587
Use
SMTP_USER
,
SMTP_PASSWORD
,
SMTP_HOST
,
SMTP_PORT
; no relay/proxy service
Exa Websets API
https://api.exa.ai/websets/v0/websets
Use existing websets when possible, create new ones with refined queries
Sender SMTP contract:
SMTP_USER=sami@oulang.ai
,
SMTP_HOST=smtp.gmail.com
,
SMTP_PORT=587
, and
SMTP_PASSWORD
must be supplied from the current run environment or user-provided secret context. Do not hardcode the app password in the skill, logs, drafts, commits, or summaries.
资源地址说明
Notion 数据库(投资者外展追踪器)
collection://24dc90d8-2308-4c5a-88da-348926d78370
访问链接:https://www.notion.so/pime/6705b564c5d34f55a43fce064f77f60b
Gmail 直接SMTP
smtp.gmail.com:587
使用
SMTP_USER
SMTP_PASSWORD
SMTP_HOST
SMTP_PORT
;禁止使用中继/代理服务
Exa Websets API
https://api.exa.ai/websets/v0/websets
优先使用现有Websets,必要时通过优化查询创建新的Websets
发件人SMTP约定:
SMTP_USER=sami@oulang.ai
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
,且
SMTP_PASSWORD
必须从当前运行环境或用户提供的保密上下文获取。不得在技能代码、日志、草稿、提交记录或总结中硬编码应用密码。

The self-correcting loop (run every cycle)

自我修正循环(每轮运行)

1. AUDIT  →  2. ANALYZE  →  3. REFINE  →  4. DISCOVER  →  5. WRITE  →  6. SEND  →  7. RECORD
                                                                                    ↺ loop back to 1
1. 审计  →  2. 分析  →  3. 优化  →  4. 挖掘  →  5. 撰写  →  6. 发送  →  7. 记录
                                                                                    ↺ 循环回到步骤1

1. AUDIT — what happened to the last batch?

1. 审计 — 上一批次的结果如何?

Before drafting a single new email, query Notion for everything in
Draft Status = Sent
since the last audit and compute:
  • Reply rate, bounce rate, interested rate, passed rate, silent rate.
  • Per-segment breakdown (Tier 1 VC vs Tier 2 vs Chinese operator vs chamber vs angel).
  • Per-hook performance (which subject-line hooks got opens/replies).
  • Bounce reasons — was the address guessed? from Exa? form-only? domain-locked?
Then, broad-keyword IMAP/Gmail search for all prior sent mail, replies, bounces, blocks, drafts, archived mail, spam, trash, and outbox evidence matching campaign topic, person, organization, domain, email, phone, form URL, and aliases — NOT sender-filtered, because real replies often come from a different address than the one we sent to (assistants, partners, alternate inboxes). Search across all known Sami identities:
  • sami@oulang.ai
  • samihalawaster@gmail.com
  • oulang.ai@gmail.com
  • support@oulang.ai
  • oulang@oulang.ai
  • sami@pime.ai
  • sami@autoclient.art
This is a hard rule. Past runs missed real replies (EurochinaBridge warm-lead almost lost) because of sender-filtered search.
For every potential outbound target, read the full content of every matching sent message, reply, bounce, block notice, form confirmation, draft, and forwarded thread before deciding whether to contact. Snippets, subject lines, tracker status, and search counts are not enough. If a mailbox/tool only exposes snippets, mark the target blocked until a full thread/body read is available or use another authorized mailbox path.
在撰写任何新邮件前,查询Notion中自上次审计以来所有
草稿状态 = 已发送
的记录,并计算:
  • 回复率退信率感兴趣率拒绝率无响应率
  • 按细分群体拆解(Tier 1 VC vs Tier 2 VC vs 中国运营商 vs 商会 vs 天使投资人)。
  • 各钩子表现(哪些主题钩子获得了打开/回复)。
  • 退信原因 — 邮箱地址是猜测的?来自Exa?仅表单可用?域名锁定?
随后,使用宽泛关键词通过IMAP/Gmail搜索所有与活动主题、个人、机构、域名、邮箱、电话、表单链接及别名匹配的过往已发送邮件、回复、退信、拦截通知、草稿、归档邮件、垃圾邮件、垃圾箱及发件箱记录 — 不要按发件人过滤,因为真实回复常来自与我们发送地址不同的邮箱(助理、合作伙伴、备用收件箱)。搜索所有已知的Sami身份邮箱:
  • sami@oulang.ai
  • samihalawaster@gmail.com
  • oulang.ai@gmail.com
  • support@oulang.ai
  • oulang@oulang.ai
  • sami@pime.ai
  • sami@autoclient.art
这是硬性规则。此前的运行曾因按发件人过滤搜索而错过真实回复(差点丢失EurochinaBridge的潜在客户)。
对于每个潜在外展目标,在决定是否联系前,需阅读所有匹配的已发送消息、回复、退信、拦截通知、表单确认、草稿及转发线程的完整内容。仅靠片段、主题、追踪器状态和搜索计数是不够的。若邮箱/工具仅显示片段,需标记该目标为拦截状态,直到可获取完整线程/正文内容或使用其他授权邮箱路径。

2. ANALYZE — what went wrong, what went right?

2. 分析 — 哪些地方出错,哪些地方做对了?

For each failure mode, record root cause in the Notion page Notes column:
  • Bounced / blocked / invalid: first classify whether the row is legacy/pre-Exa or Exa-sourced. Most wrong-email rows are legacy/pre-Exa rows from the first outreach rounds, not Exa Websets output. Remove invalid legacy emails from the send queue immediately and re-find/re-enrich the target through Exa Websets instead of guessing a replacement.
  • Silent (no reply, no bounce): was it spam-foldered (identical subject lines across batch)? was hook generic? was ask too aggressive (€500K solo-runway framing)? wrong recipient seniority?
  • Polite pass: was thesis genuinely off? was stage off? note for de-prioritization in next wave.
  • Replied / interested: which hook resonated? log into a "what works" reference pattern that future drafts must reuse.
Past systemic failures this skill must guard against:
PatternFailureFix
18 of 25 emails identical subject lineSpam-folder signal across VC inboxesEach subject must be unique + tied to recent investment of recipient
"I saw your recent activity" generic opener (14×)Read as mail-mergeCite specific named portfolio company + date
"€500K / 12-month runway"Implies solo-salary burn, signals "you can't lead"Reframe to "€500K–€1M, any lead welcome"
"+34 — (will share on reply)"Amateur hideAlways include WhatsApp +34 679 794 037 in signature
Promised deck/Loom with no linkDead promiseAlways include
oulang.ai/investors
€3,952 MRR exact number with no caveatVCs grep, find admin-credit subsidy, lose trustDisclose: "€3.9K cash MRR, excludes admin credit grants"
5 Chinese emails identical bodyInsulting in Chinese business etiquetteEach must reference target's specific company/role
Chamber emails with VC languageWrong genre, instant ignoreStrip fundraising entirely, lead with cross-promo offer
Sender-filtered IMAP search for repliesMisses real replies from assistants/alternate addressesBroad-keyword search across all 7 inboxes
Diagnostic test sends going to real recipientsEmbarrassing duplicate receivedNEVER send a smoke test to a real recipient; use
sami@oulang.ai
self-loop
针对每种失败模式,在Notion页面的“备注”列记录根本原因:
  • 退信/拦截/无效地址:首先分类该记录属于旧版/Exa之前的记录还是Exa来源的记录。大多数错误邮箱记录来自第一轮外展的旧版/Exa之前的记录,而非Exa Websets的输出。立即从发送队列中移除无效的旧版邮箱,通过Exa Websets重新查找/补充目标信息,而非猜测替代地址。
  • 无响应(无回复、无退信):邮件是否进入垃圾邮件(批次主题完全相同)?钩子是否过于通用?请求是否过于激进(如“50万欧元单独 runway”表述)?收件人层级是否错误?
  • 礼貌拒绝:是否投资理念完全不符?阶段不匹配?标记为下一轮优先降级处理。
  • 回复/感兴趣:哪个钩子产生了共鸣?记录到“有效模式”参考库,未来草稿必须复用。
本技能必须防范的过往系统性失败:
模式失败原因修复方案
25封邮件中有18封主题完全相同触发VC收件箱的垃圾邮件信号每个主题必须唯一 + 关联收件人近期的投资活动
通用开场白“我看到您近期的动态”(重复14次)被识别为邮件合并批量发送引用具体的被投公司名称 + 日期
“50万欧元/12个月 runway”暗示仅够创始人薪资消耗,传递“您无法领导团队”的信号重构为“50万-100万欧元,欢迎任何领投方”
“+34 — 回复后告知”显得不专业、遮遮掩掩签名中始终包含WhatsApp +34 679 794 037
承诺发送演示文档/Loom但未附链接无法兑现的承诺始终包含
oulang.ai/investors
链接
精确到3952欧元的MRR且无说明VC会搜索细节,发现管理信用补贴后失去信任披露:“3900欧元现金MRR,不含管理信用补贴”
5封中文邮件正文完全相同违反中国商务礼仪,显得不尊重每封邮件必须提及目标的具体公司/职位
给商会的邮件使用VC术语风格不符,立即被忽略完全移除融资相关表述,以交叉推广合作作为切入点
按发件人过滤的IMAP搜索回复错过来自助理/备用地址的真实回复在所有7个收件箱中使用宽泛关键词搜索
诊断测试邮件发送给真实收件人造成尴尬的重复发送绝对不要向真实收件人发送测试邮件;使用
sami@oulang.ai
自我循环测试

3. REFINE — update Exa criteria and email hooks

3. 优化 — 更新Exa筛选条件和邮件钩子

Take the analysis output and rewrite the next Exa Webset query to remove patterns that produced bounces or no-replies, and double down on patterns that produced engagement.
Examples of refinement that came out of past runs:
  • Removed from Exa criteria after v4: "Pre-seed VCs Spain" alone → too noisy. Added: "with marketplace OR diaspora investments in last 12 months".
  • Added after v5: "Wallapop LP", "Marshmallow LP", "diaspora SaaS LP" — investors who already bet on similar pattern.
  • Removed: investors with
    @gv.com
    ,
    @a16z.com
    ,
    @sequoia.com
    — they don't read cold email and route through Twitter-DM only.
  • Added bonus criteria: "publicly tweeted about Spain market in last 90 days" or "wrote LP thesis on Mandarin commerce".
  • For partnership track: "bought ads in Mandarin Spanish media in last 6 months" (real signal of intent to reach our users).
Each new Webset query should be saved with an
experiment ID
, the hypothesis, and a kill criterion.
根据分析结果,重写下一轮Exa Webset查询,移除导致退信或无响应的模式,强化产生互动的模式。
过往运行中产生的优化示例:
  • v4版本后移除的Exa条件:仅“西班牙种子前VC” → 噪音太大。新增:“过去12个月有 Marketplace 或侨民领域投资记录”。
  • v5版本后新增的条件:“Wallapop LP”、“Marshmallow LP”、“侨民SaaS LP” — 已下注类似模式的投资者。
  • 移除的对象:带有
    @gv.com
    @a16z.com
    @sequoia.com
    的投资者 — 他们不阅读冷邮件,仅通过Twitter-DM沟通。
  • 新增加分条件:“过去90天公开推文提及西班牙市场”或“撰写过普通话商务LP投资理念”。
  • 合作项目专属条件:“过去6个月在西语中文媒体投放广告”(表明有触达我们用户的真实意愿)。
每个新的Webset查询应保存
实验ID
、假设和终止条件。

4. DISCOVER — mine websets, dedupe against Notion

4. 挖掘 — 提取Websets数据,与Notion去重

Query existing Exa Websets first. Only create new ones if existing data is exhausted or the refinement requires a brand-new criteria. Always inspect the webset query/criteria, item status, enrichment fields, and source URLs before importing. Prefer current completed Websets with explicit public-contact enrichment; do not use stale manual rows or guessed emails as source truth.
Legacy/pre-Exa rows are lower trust. If a non-Exa row has a bounced, blocked, guessed, stale, or unverifiable email, remove it from
🚀 TO SEND
and re-run Exa Websets for that organization/person/domain. Do not spend time hand-repairing guessed addresses unless Exa or another public source verifies the exact email/channel.
GET https://api.exa.ai/websets/v0/websets/{webset_id}/items
For each enrichment item, build a row only when it is send-ready or useful as a verified channel target. Do not create weak placeholder rows during "find more" automation.
{
  Organization: <company>,
  Contact: <person name>,
  Verified Public Email: <best email — see Email Selection rules below>,
  Public WhatsApp Phone: <phone>,
  Contact Source URL: <linkedin or homepage>,
  Priority Tier: Tier 1 / Tier 2 / Tier 3 / Weak,
  Priority Rank: <1-100 numeric>,
  Contact Enrichment Status: "Exa found",
  Contact Enrichment Notes: <Portfolio | 2026 Activity | Thesis Match | Sector | City | Check Size | Inbound Channel>,
  Notes: <experiment ID + hypothesis>,
  Draft Status: "Drafted",
  Reply Status: "🚀 TO SEND"
}
If a candidate lacks a verified public email, public WhatsApp number, or explicit public pitch/contact form, skip it and log the reason in the cycle output instead of adding a placeholder row. The tracker should stay action-oriented: rows are for people/channels that can be contacted after the prior-communication audit, not for generic research backlog.
优先查询现有Exa Websets。仅当现有数据耗尽或优化需要全新筛选条件时,才创建新的Websets。导入前需检查Webset查询/条件、条目状态、补充字段及来源链接。优先选择已完成且包含明确公开联系方式补充的Websets;不要使用过时的手动记录或猜测的邮箱作为数据源。
旧版/Exa之前的记录可信度较低。若非Exa来源的记录存在退信、拦截、猜测、过时或无法验证的邮箱,需从
🚀 待发送
队列中移除,并通过Exa Websets重新查找该机构/个人/域名的信息。除非Exa或其他公开来源验证了确切邮箱/渠道,否则不要花时间手动修复猜测的地址。
GET https://api.exa.ai/websets/v0/websets/{webset_id}/items
仅当补充条目可直接用于发送或作为已验证的渠道目标时,才创建Notion记录。“寻找更多”自动化过程中不要创建弱占位记录。
{
  机构: <公司名称>,
  联系人: <姓名>,
  已验证公开邮箱: <最优邮箱 — 见下方邮箱选择规则>,
  公开WhatsApp号码: <电话>,
  联系人来源链接: <领英或官网>,
  优先级 tier: Tier 1 / Tier 2 / Tier 3 / 低优先级,
  优先级排名: <1-100数字>,
  联系人补充状态: "Exa 找到",
  联系人补充备注: <被投公司 | 2026年动态 | 理念匹配 | 领域 | 城市 | 投资规模 | 获客渠道>,
  备注: <实验ID + 假设>,
  草稿状态: "已撰写",
  回复状态: "🚀 待发送"
}
若候选对象缺少已验证的公开邮箱、公开WhatsApp号码或明确的公开推介/联系表单,需跳过并在周期输出中记录原因,而非添加占位记录。追踪器应保持行动导向:记录仅用于经过过往沟通审计后可联系的个人/渠道,而非通用研究待办项。

Communication gate and channel selection rules

沟通准入与渠道选择规则

Before any outbound communication (email, WhatsApp, form, LinkedIn, DM, or contact-page message), verify prior communication history first. This is not only an email safety check.
Required evidence before communicating:
  1. Search the tracker/Notion row and nearby duplicate rows by organization, person, email, WhatsApp phone, form URL, and normalized domain.
  2. Search all available inbox, sent, archived, spam, trash, draft, and outbox folders for the same organization, person, email, WhatsApp phone, form URL, and domain.
  3. Read the full content/body of the relevant sent messages, replies, bounces, block notices, drafts, and forwarded threads before choosing the channel. Do not rely on row status, snippets, or subject lines when mail or WhatsApp evidence disagrees.
  4. If prior communication is found, continue in that same thread/channel unless the reply explicitly routes to a different channel.
  5. If a WhatsApp number is available and there is no existing WhatsApp reply/thread that changes the plan, prefer WhatsApp as the highest-priority live channel.
  6. Email remains the default channel when there is verified email and no stronger WhatsApp/form instruction.
  7. Form/Typeform/Airtable/contact-page submission is used only when the recipient or public process explicitly says pitching/replies must go there, or when a reply asks for the form route.
  8. If the evidence is contradictory or incomplete, do not communicate. Do not create a new placeholder row from discovery. If the row already exists, update its notes/status with the exact conflict and leave it out of the send batch.
  9. If an email is bounced, blocked, syntactically invalid, guessed, stale, or not publicly verified, remove it from
    🚀 TO SEND
    immediately. Update the row to
    Reply Status = 🔧 FIX EMAIL
    and clear the send path, or delete/archive the row when the active tracker tooling supports that. Never leave invalid emails as send-ready.
  10. For legacy/pre-Exa invalid rows, the next action is "refind via Exa Websets", not "manual guess". Add a short note such as
    Legacy/pre-Exa invalid email removed; refind via Exa Websets required
    .
在进行任何外展沟通(邮件、WhatsApp、表单、领英、私信或联系页面消息)前,必须先验证过往沟通历史。这不仅是邮件安全检查。
沟通前需验证的证据:
  1. 通过机构、个人、邮箱、WhatsApp号码、表单链接和标准化域名,搜索追踪器/Notion记录及附近的重复记录。
  2. 搜索所有可用收件箱、已发送、归档、垃圾邮件、垃圾箱、草稿及发件箱中匹配的机构、个人、邮箱、WhatsApp号码、表单链接和域名。
  3. 在选择渠道前,阅读相关已发送消息、回复、退信、拦截通知、草稿及转发线程的完整内容。当邮件或WhatsApp证据与记录状态矛盾时,不要依赖记录状态、片段或主题。
  4. 若发现过往沟通记录,需在同一线程/渠道继续沟通,除非回复明确指定其他渠道。
  5. 若有WhatsApp号码且无现有WhatsApp回复/线程改变计划,优先选择WhatsApp作为最高优先级实时渠道。
  6. 当有已验证邮箱且无更明确的WhatsApp/表单要求时,邮件仍为默认渠道。
  7. 仅当收件人或公开流程明确要求通过表单进行推介/回复,或回复要求使用表单渠道时,才使用表单/Typeform/Airtable/联系页面提交。
  8. 若证据矛盾或不完整,不要进行沟通。不要从挖掘过程中创建新的占位记录。若记录已存在,更新其备注/状态以明确冲突,并将其排除在发送批次外。
  9. 若邮箱退信、被拦截、语法无效、猜测、过时或未公开验证,立即从
    🚀 待发送
    队列中移除。将记录更新为
    回复状态 = 🔧 修复邮箱
    并清除发送路径,或在追踪器支持的情况下删除/归档记录。绝不要让无效邮箱留在待发送队列中。
  10. 对于旧版/Exa之前的无效记录,下一步操作是“通过Exa Websets重新查找”,而非“手动猜测”。添加简短备注,例如
    旧版/Exa之前的无效邮箱已移除;需通过Exa Websets重新查找

Email selection rules (after the communication gate)

邮箱选择规则(沟通准入后)

  1. Personal email if the person publicly publishes one ("personal email: jane@fund.com" in Exa enrichment) → use it.
  2. pitch@
    ,
    opportunity@
    ,
    deals@
    generic inboxes → use them, NOT the partner's personal email, when public preference says so. Cherry, Mangrove, Ada all do this.
  3. Form / Typeform / Airtable submission → only after the communication gate proves the form is the requested pitching/reply channel. Examples: Point Nine typeform, Seedcamp typeform, Bethnal Green Airtable, Ada Ventures form, Blue Lake Airtable, Systemiq contact form.
  4. Email guessed by pattern (firstname.lastname@domain) → red flag. Skip the candidate unless another source verifies the address publicly. Do NOT send guessed-pattern emails.
  1. 个人邮箱:若个人公开了个人邮箱(如Exa补充信息中显示“personal email: jane@fund.com”)→ 使用该邮箱。
  2. pitch@
    opportunity@
    deals@
    通用收件箱:若公开偏好使用此类邮箱,使用它们而非合伙人的个人邮箱。Cherry、Mangrove、Ada均采用此方式。
  3. 表单/Typeform/Airtable提交:仅在沟通准入验证后确认表单是指定的推介/回复渠道时使用。示例:Point Nine Typeform、Seedcamp Typeform、Bethnal Green Airtable、Ada Ventures表单、Blue Lake Airtable、Systemiq联系表单。
  4. 按模式猜测的邮箱(如firstname.lastname@domain):红色警告。除非其他来源公开验证了该地址,否则跳过该候选对象。绝对不要发送按模式猜测的邮箱。

Dedupe rules

去重规则

Before adding a new row, fuzzy-match against existing Notion rows by:
  • exact
    Verified Public Email
  • normalized
    Organization
    name (lowercase, strip punctuation)
  • Contact Source URL
    if both present
If match found, MERGE enrichment notes onto the existing row instead of creating a duplicate. Past runs created multiple duplicate rows (e.g. Point Nine, Passion, Ganas all have ≥2 rows in the tracker — this is technical debt to clean up).
添加新记录前,通过以下方式与现有Notion记录进行模糊匹配:
  • 完全匹配
    已验证公开邮箱
  • 标准化
    机构
    名称(小写、去除标点)
  • 若均存在则匹配
    联系人来源链接
若找到匹配项,将补充备注合并到现有记录中,而非创建重复记录。过往运行曾创建多条重复记录(例如Point Nine、Passion、Ganas在追踪器中均有≥2条记录 — 这是需要清理的技术债务)。

5. WRITE — per-target personalized drafts

5. 撰写 — 针对每个目标的个性化草稿

Apply the mandatory structure for every email (no exceptions, no template-batching):
Subject: <unique per-target hook tied to recipient's named recent investment or public signal>

Hi <FirstName>,

<Hook paragraph: name a specific portfolio company / thesis / 2026 announcement, explain in ONE sentence why their pattern matches Oulang>

<Status block — bullet form>:
- 40K MAU, 13K registered users (40% growth QoQ)
- €3.9K cash MRR March 2026 (excludes admin credit grants — real paid subs)
- Mandarin-graph distribution: WeChat-native onboarding, 0€ paid acquisition
- Moat = WeChat group-of-groups lock-in, not language (groups don't port)

<One-sentence "why you specifically" — different from the hook>.

Open to €500K–€1M round, any lead check welcome. 15-min call if there's a fit, or I send the data room and you decide.

Best,
Sami Halawa — Founder, Oulang.ai (欧浪网)
AGENTS AI Ltd (UK 16570822) · Valencia/Madrid
oulang.ai · sami@oulang.ai · WhatsApp +34 679 794 037
Deck + metrics: https://oulang.ai/investors
For Chinese-language emails: same structure, but each greeting
您好 X
and the company-specific cross-promo proposal MUST differ per target. Reference target's actual company, role, and at least one concrete partnership idea (e.g., "您餐厅在欧浪网美食板块独家露出" for a restaurant).
For chamber/institutional emails: STRIP all fundraising language. Lead with cross-promo offer (Mandarin translation, event co-host, member directory swap).
每封邮件必须遵循强制结构(无例外,无批量模板):
主题: <针对每个目标的独特钩子,关联收件人近期的具体投资或公开信号>

您好 <FirstName>,

<钩子段落:提及具体的被投公司/理念/2026年公告,用一句话说明他们的模式为何与Oulang匹配>

<状态模块 — 项目符号形式>:
- 月活跃用户4万,注册用户1.3万(季度环比增长40%)
- 2026年3月现金MRR 3900欧元(不含管理信用补贴 — 真实付费订阅)
- 普通话生态分发:微信原生注册,0欧元付费获客
- 护城河 = 微信群群矩阵锁定用户,而非语言优势(群无法迁移)

<一句话“为何选择您” — 与钩子内容不同>

我们正在进行50万-100万欧元的融资轮次,欢迎任何领投方。若匹配,可安排15分钟通话,或我发送数据室供您决策。

此致,
Sami Halawa — Oulang.ai(欧浪网)创始人
AGENTS AI Ltd(英国公司编号16570822) · 瓦伦西亚/马德里
oulang.ai · sami@oulang.ai · WhatsApp +34 679 794 037
演示文档+数据:https://oulang.ai/investors
对于中文邮件:结构相同,但问候语
您好 X
和针对公司的交叉推广提案必须因目标而异。需提及目标的实际公司、职位及至少一个具体合作想法(例如,针对餐厅:“您的餐厅可在欧浪网美食板块独家露出”)。
对于商会/机构邮件:完全移除所有融资相关表述。以交叉推广合作作为切入点(如普通话翻译、联合举办活动、会员目录互换)。

Self-critique gate (run BEFORE send)

自我审核准入(发送前运行)

For each draft, internally answer:
  1. Is the subject unique across this batch? → If no, rewrite.
  2. Is the hook specific (named portfolio/announcement)? → If no, rewrite.
  3. Is the ask reframed away from "€500K solo runway"? → If no, fix.
  4. Is the deck link present? → If no, add.
  5. Is MRR framed honestly (cash, excludes credits)? → If no, fix.
  6. Is recipient seniority + stage actually correct? → If wrong, SKIP not send.
  7. Does this email overlap with another in the batch on hook? → If yes, vary.
A draft that fails any gate must be rewritten or dropped, NOT sent.
针对每个草稿,需内部确认:
  1. 本批次中主题是否唯一? → 若否,重写。
  2. 钩子是否具体(提及被投公司/公告)? → 若否,重写。
  3. 请求是否已重构,避免“50万欧元单独 runway”表述? → 若否,修正。
  4. 是否包含演示文档链接? → 若否,添加。
  5. MRR是否如实说明(现金、不含补贴)? → 若否,修正。
  6. 收件人层级+阶段是否正确? → 若错误,跳过不发送。
  7. 本批次中是否有其他邮件使用相同钩子? → 若是,调整。
未通过任何准入检查的草稿必须重写或放弃,不得发送。

6. SEND — fire directly via Gmail SMTP

6. 发送 — 通过Gmail SMTP直接发送

python
import os, smtplib, ssl, time
from email.message import EmailMessage

smtp_user = os.environ["SMTP_USER"]       # default: sami@oulang.ai
smtp_password = os.environ["SMTP_PASSWORD"]
smtp_host = os.environ.get("SMTP_HOST", "smtp.gmail.com")
smtp_port = int(os.environ.get("SMTP_PORT", "587"))

for i, d in enumerate(drafts):
    msg = EmailMessage()
    msg["From"] = smtp_user
    msg["To"] = d["to"]
    msg["Subject"] = d["subject"]
    msg.set_content(d["body"])
    with smtplib.SMTP(smtp_host, smtp_port, timeout=30) as server:
        server.starttls(context=ssl.create_default_context())
        server.login(smtp_user, smtp_password)
        server.send_message(msg)
    print(f"#{i+1} {d['to']:45} sent via direct SMTP")
    time.sleep(1.5)  # mandatory pacing
Run the sender with inline SMTP environment values, for example:
bash
SMTP_USER=sami@oulang.ai SMTP_HOST=smtp.gmail.com SMTP_PORT=587 SMTP_PASSWORD="$SMTP_PASSWORD" python3 scripts/send_batch.py drafts.json
Only use direct Gmail SMTP for Oulang outreach. If direct Gmail SMTP fails, fix the SMTP credential/environment issue or stop the send batch; do not route around it.
Auto-dispatch rule:
The user has corrected the workflow: when the request includes send intent such as "send", "always send", "auto-send", "send the emails", "find and send", "next wave", or equivalent typo-heavy wording, treat that as explicit authorization for this cycle. Do not stop at adding rows. Complete steps 5, 6, and 7 for every candidate that passes all gates.
If the user only asks to "find/add to Notion" with no send intent, create send-ready rows only and leave them at
Drafted
+
🚀 TO SEND
. Do not send in that narrower capture-only mode.
Critical send-time rules:
  • Never send a "test" email to a real recipient. Self-loop to
    sami@oulang.ai
    if you must probe.
  • Dedupe at send time: a single email address never receives the same campaign twice in 24h.
  • Batch in groups of 10 to survive sandbox tool-call timeouts.
  • After every batch, log to
    /mnt/user-data/outputs/<campaign>_send_log_<date>.txt
    when writable; if that directory is read-only, use
    /tmp/oulang-outreach-<date>/
    and mention the fallback path in the cycle summary.
  • Only send candidates that have a verified public email or an explicit public channel selected by the communication gate.
  • Skip unverified, contradictory, or incomplete candidates instead of parking them in the tracker.
python
import os, smtplib, ssl, time
from email.message import EmailMessage

smtp_user = os.environ["SMTP_USER"]       # 默认值: sami@oulang.ai
smtp_password = os.environ["SMTP_PASSWORD"]
smtp_host = os.environ.get("SMTP_HOST", "smtp.gmail.com")
smtp_port = int(os.environ.get("SMTP_PORT", "587"))

for i, d in enumerate(drafts):
    msg = EmailMessage()
    msg["From"] = smtp_user
    msg["To"] = d["to"]
    msg["Subject"] = d["subject"]
    msg.set_content(d["body"])
    with smtplib.SMTP(smtp_host, smtp_port, timeout=30) as server:
        server.starttls(context=ssl.create_default_context())
        server.login(smtp_user, smtp_password)
        server.send_message(msg)
    print(f"#{i+1} {d['to']:45} sent via direct SMTP")
    time.sleep(1.5)  # 强制间隔
使用内联SMTP环境变量运行发送脚本,例如:
bash
SMTP_USER=sami@oulang.ai SMTP_HOST=smtp.gmail.com SMTP_PORT=587 SMTP_PASSWORD="$SMTP_PASSWORD" python3 scripts/send_batch.py drafts.json
Oulang外展仅使用Gmail直接SMTP。若Gmail直接SMTP失败,需修复SMTP凭证/环境问题或停止发送批次;不得绕过该方式。
自动发送规则:
用户已修正工作流:当请求包含发送意图,如“send”、“always send”、“auto-send”、“send the emails”、“find and send”、“next wave”或类似拼写错误的表述时,视为明确授权本轮运行。不要停留在添加记录阶段。为所有通过准入检查的候选对象完成步骤5、6、7。
若用户仅要求“查找/添加到Notion”且无发送意图,仅创建可发送记录并标记为
已撰写
+
🚀 待发送
。在此类仅捕获模式下不得发送邮件。
发送时关键规则:
  • 绝不要向真实收件人发送“测试”邮件。若需测试,发送至
    sami@oulang.ai
    自我循环。
  • 发送时去重:同一邮箱24小时内不得收到同一活动的多封邮件。
  • 按10封一组分批发送,避免沙箱工具调用超时。
  • 每批发送后,若目录可写,记录至
    /mnt/user-data/outputs/<campaign>_send_log_<date>.txt
    ;若该目录只读,使用
    /tmp/oulang-outreach-<date>/
    并在周期总结中提及备用路径。
  • 仅发送拥有已验证公开邮箱或经沟通准入选择的明确公开渠道的候选对象。
  • 跳过未验证、矛盾或信息不完整的候选对象,而非将其留在追踪器中。

7. RECORD — update Notion immediately

7. 记录 — 立即更新Notion

For every sent email:
Draft Status:    Sent
Reply Status:    No reply
Sent Date:       <today, ISO>
Notes:           <campaign tag> + per-target hook used + experiment ID
Use the Notion MCP
notion-update-page
tool with
command: update_properties
. Loop one update per page, accepting ~1s per call.
After the batch, write a campaign summary doc to
/mnt/user-data/outputs/
:
<campaign>_send_log_<date>.txt
<campaign>_critique_<date>.md
<campaign>_drafts_<date>.json
These become inputs to the NEXT cycle's AUDIT step.
对于每封已发送邮件:
草稿状态:    已发送
回复状态:    未回复
发送日期:    <今日,ISO格式>
备注:        <活动标签> + 针对该目标使用的钩子 + 实验ID
使用Notion MCP
notion-update-page
工具,参数为
command: update_properties
。逐条更新记录,接受约1秒/条的调用时间。
批次发送完成后,将活动总结文档写入
/mnt/user-data/outputs/
<campaign>_send_log_<date>.txt
<campaign>_critique_<date>.md
<campaign>_drafts_<date>.json
这些文件将作为下一轮审计步骤的输入。

When to use which Notion field

Notion字段使用规范

The Investor Outreach Tracker has these columns. Stay consistent:
  • Organization
    (title) — official entity name
  • Contact
    — person name (full)
  • Verified Public Email
    — only verified or publicly published
  • Email or Channel
    — free text for "form: typeform.com/x" or "linkedin DM only" cases
  • Public WhatsApp Phone
    — E.164 format
  • Priority Tier
    — Tier 1 / Tier 2 / Tier 3 / Weak
  • Priority Rank
    — numeric 1-100, lower = higher priority
  • Draft Status
    — Drafted / Reviewing / Ready / Sent
  • Reply Status
    — 🚀 TO SEND / 💤 WAITING / 📨 REPLY NOW / 🔧 FIX EMAIL / ✅ DONE
  • Contact Enrichment Status
    — Existing in source / Exa found / Not found
  • Contact Enrichment Notes
    — long text with Portfolio / 2026 Activity / Thesis Match / Sector / City / Check Size / Inbound Channel pipe-separated
  • Sent Date
    — ISO date
  • Contact Source URL
    — LinkedIn or homepage
  • Notes
    — campaign tag + per-target hook + experiment ID + outcome notes
投资者外展追踪器包含以下列,需保持使用一致性:
  • 机构
    (标题) — 官方实体名称
  • 联系人
    — 全名
  • 已验证公开邮箱
    — 仅填写已验证或公开发布的邮箱
  • 邮箱或渠道
    — 自由文本,用于“form: typeform.com/x”或“仅领英私信”等情况
  • 公开WhatsApp号码
    — E.164格式
  • 优先级 tier
    — Tier 1 / Tier 2 / Tier 3 / 低优先级
  • 优先级排名
    — 数字1-100,数值越小优先级越高
  • 草稿状态
    — 已撰写 / 审核中 / 待发送 / 已发送
  • 回复状态
    — 🚀 待发送 / 💤 等待 / 📨 立即回复 / 🔧 修复邮箱 / ✅ 完成
  • 联系人补充状态
    — 来源已有 / Exa找到 / 未找到
  • 联系人补充备注
    — 长文本,用竖线分隔被投公司 / 2026年动态 / 理念匹配 / 领域 / 城市 / 投资规模 / 获客渠道
  • 发送日期
    — ISO格式日期
  • 联系人来源链接
    — 领英或官网
  • 备注
    — 活动标签 + 针对该目标的钩子 + 实验ID + 结果备注

Campaign archetypes (pick one or define new)

活动原型(选择一个或自定义)

The skill ships with these archetypes. The user can name them in the request:
  • vc-eu-preseed
    — EU pre-seed VCs with marketplace/diaspora thesis. Tier 1: Mangrove, Passion, InReach, Point Nine, Seedcamp, Cherry, Earlybird. Output: 25–40 personalized emails per wave.
  • vc-diaspora-angels
    — Latina/MENA/Asian diaspora-focused funds and operators. Tier 1: Ganas (already passed), Portfolia, Diaspora Ventures.
  • spain-china-operators
    — Chinese-origin Spain-based angels, family offices, and SME owners. Sources: Cobo Calleja directory, La Vanguardia "Spanish-Chinese 100", Cámara de España member list.
  • spain-china-institutions
    — Chambers, business associations, Confucius Institutes. ZERO fundraising language. Cross-promo only.
  • marketplace-distribution
    — Partners who can drive Mandarin users to Oulang (WeChat KOLs, Spanish-Mandarin newsletter operators, university Chinese student associations).
  • b2b-spanish-merchants
    — Spanish-native businesses that want to reach Chinese-diaspora buyers. Lower-funnel partnership pitch.
Each archetype has its own set of Exa Webset templates. See
reference/webset_templates.md
.
本技能内置以下活动原型。用户可在请求中指定:
  • vc-eu-preseed
    — 专注Marketplace/侨民领域的欧盟种子前VC。Tier 1:Mangrove、Passion、InReach、Point Nine、Seedcamp、Cherry、Earlybird。输出:每轮25-40封个性化邮件。
  • vc-diaspora-angels
    — 聚焦拉丁裔/中东/亚洲侨民的基金和运营商。Tier 1:Ganas(已拒绝)、Portfolia、Diaspora Ventures。
  • spain-china-operators
    — 西班牙籍华裔天使投资人、家族办公室及中小企业主。来源:Cobo Calleja目录、《先锋报》“中西100强”、西班牙商会会员列表。
  • spain-china-institutions
    — 商会、商业协会、孔子学院。完全不含融资表述,仅做交叉推广。
  • marketplace-distribution
    — 可将普通话用户引流至Oulang的合作伙伴(微信KOL、西语中文通讯运营商、高校中国学生协会)。
  • b2b-spanish-merchants
    — 希望触达侨民买家的西班牙本土企业。低漏斗合作提案。
每个原型都有对应的Exa Webset模板。详见
reference/webset_templates.md

Observability checklist (run end of each cycle)

可观测性检查清单(每轮结束时运行)

  • Notion
    Reply Status
    for last batch is up to date
  • Bounces are tagged with reason in Notes
  • Critique doc written to /mnt/user-data/outputs/
  • Next-wave Exa criteria refined and saved
  • Next-wave hypothesis recorded in
    reference/experiments.md
  • No duplicate rows created (fuzzy-match check ran)
  • No identical subject lines in batch (uniqueness check ran)
  • Reply audit ran with broad keyword search across all 7 Sami inboxes
  • Prior-communication audit ran before every outbound email, WhatsApp, form, DM, or contact-page message
  • Form targets were submitted only when prior evidence/public instructions required the form route, not because forms were treated as exempt
  • 上一批次的Notion
    回复状态
    已更新
  • 退信已在备注中标记原因
  • 审核文档已写入/mnt/user-data/outputs/
  • 下一轮Exa筛选条件已优化并保存
  • 下一轮假设已记录在
    reference/experiments.md
  • 未创建重复记录(已运行模糊匹配检查)
  • 本批次中无相同主题(已运行唯一性检查)
  • 已在所有7个Sami收件箱中使用宽泛关键词进行回复审计
  • 每封外展邮件、WhatsApp、表单、私信或联系页面消息发送前,均已运行过往沟通审计
  • 仅当过往证据/公开要求指定表单渠道时,才提交表单目标,未将表单视为豁免检查项

Hard rules (do not violate)

硬性规则(不得违反)

  • AUTO-SEND WHEN THE REQUEST SAYS TO SEND. Send intent includes "send", "always send", "auto-send", "send the emails", "find and send", "next wave", or equivalent typo-heavy wording. In that mode, do the audit, write personalized drafts, send verified recipients, update Notion, and log proof.
  • DO NOT SEND IN CAPTURE-ONLY MODE. If the user only asks to find/add/store contacts, do not send.
  • NEVER communicate without checking previous communication first. This applies to email, WhatsApp, forms, LinkedIn, DMs, contact pages, and any other outbound channel.
  • NEVER treat a form as exempt from conflict checks. Forms can proceed without email-thread blocking only when the prior-communication audit proves the form is the correct channel.
  • NEVER send test mail to real recipients. Self-loop to
    sami@oulang.ai
    .
  • NEVER use a send relay for Oulang outreach. Direct Gmail SMTP is canonical. A relay 500/503 is not a retry condition; it means the wrong send path was used.
  • NEVER repeat a known systemic mistake. The mistakes table above is the full list as of 2026-04-26; if a new pattern appears, append to it.
  • NEVER reuse a hook across recipients. Each subject + opening sentence must be unique.
  • NEVER send unverified candidates. Verify email or channel first; otherwise skip and log the reason.
  • NEVER skip the audit step. Every cycle must start with the prior wave's critique.
  • NEVER turn this into general Oulang ops. This skill is only for finding leads, auditing prior communications, contacting verified targets, and updating the outreach tracker.
  • NEVER claim a wave succeeded without log evidence. Every send writes a log file.
  • NEVER decide from snippets. Prior-contact checks require full email/thread content for every matching sent, reply, bounce, block, draft, spam, trash, and forwarded thread.
  • NEVER leave invalid emails queued. Bounced, blocked, guessed, stale, or unverifiable addresses must be removed from
    🚀 TO SEND
    and marked
    🔧 FIX EMAIL
    or archived/deleted if the tracker permits.
  • NEVER blame Exa for legacy guessed-email failures without evidence. First-round/pre-Exa rows are suspect by default; remove and re-find them through Exa Websets.
  • 当请求包含发送意图时自动发送。发送意图包括“send”、“always send”、“auto-send”、“send the emails”、“find and send”、“next wave”或类似拼写错误的表述。在此模式下,需完成审计、撰写个性化草稿、向已验证收件人发送、更新Notion并记录证据。
  • 仅捕获模式下不得发送。若用户仅要求查找/存储联系人,不得发送邮件。
  • 绝不在未检查过往沟通的情况下进行沟通。适用于邮件、WhatsApp、表单、领英、私信、联系页面及任何其他外展渠道。
  • 绝不要将表单视为豁免冲突检查项。仅当过往沟通审计确认表单为正确渠道时,才可通过表单发送。
  • 绝不要向真实收件人发送测试邮件。发送至
    sami@oulang.ai
    自我循环测试。
  • Oulang外展绝不要使用发送中继。Gmail直接SMTP为标准方式。中继返回500/503错误时不得重试;这意味着使用了错误的发送路径。
  • 绝不要重复已知的系统性错误。上述错误表为截至2026年4月26日的完整列表;若出现新模式,需追加到表中。
  • 绝不要在不同收件人间复用钩子。每个主题+开头句子必须唯一。
  • 绝不要发送未验证的候选对象。需先验证邮箱或渠道;否则跳过并记录原因。
  • 绝不要跳过审计步骤。每轮必须以上一轮的审核作为起点。
  • 绝不要将本技能用于Oulang的通用运营。本技能仅用于寻找线索、审计过往沟通、联系已验证目标及更新外展追踪器。
  • 绝不要在无日志证据的情况下声称外展成功。每轮发送必须写入日志文件。
  • 绝不要仅根据片段做决策。过往沟通检查需读取所有匹配的已发送、回复、退信、拦截、草稿、垃圾邮件、垃圾箱及转发线程的完整内容。
  • 绝不要让无效邮箱留在队列中。退信、拦截、猜测、过时或无法验证的地址必须从
    🚀 待发送
    队列中移除,并标记为
    🔧 修复邮箱
    或在追踪器支持的情况下归档/删除。
  • 绝不要在无证据的情况下将旧版猜测邮箱的失败归咎于Exa。第一轮/Exa之前的记录默认不可信;需移除并通过Exa Websets重新查找。

Reference files (read these alongside SKILL.md)

参考文件(需与SKILL.md一同阅读)

  • reference/webset_templates.md
    — Exa Webset query templates per archetype
  • reference/email_templates.md
    — Per-archetype email skeletons + signature blocks
  • reference/mistakes_log.md
    — Append-only log of every mistake learned from + the fix
  • reference/experiments.md
    — Hypothesis + result for each Exa Webset experiment
  • reference/oulang_state_snapshot.md
    — Latest known state of the Oulang campaign (recipients, replies, pending forms, bounces) as of skill build
  • scripts/audit_replies.py
    — IMAP broad-keyword search across 7 Sami inboxes
  • scripts/send_batch.py
    — Direct Gmail SMTP batch sender with pre-send safety gates
  • scripts/notion_update.py
    — Notion property updater with dedupe check
  • scripts/exa_mine.py
    — Exa Websets miner with experiment tracking
  • agents/openai.yaml
    — Skill manifest for skill-CLI installer
  • reference/webset_templates.md
    — 各原型对应的Exa Webset查询模板
  • reference/email_templates.md
    — 各原型对应的邮件框架+签名模块
  • reference/mistakes_log.md
    — 追加式日志,记录所有已发现的错误及修复方案
  • reference/experiments.md
    — 每个Exa Webset实验的假设+结果
  • reference/oulang_state_snapshot.md
    — 截至技能构建时Oulang活动的最新状态(收件人、回复、待处理表单、退信)
  • scripts/audit_replies.py
    — 在7个Sami收件箱中执行IMAP宽泛关键词搜索的脚本
  • scripts/send_batch.py
    — 包含发送前安全检查的Gmail直接SMTP批量发送脚本
  • scripts/notion_update.py
    — 包含去重检查的Notion属性更新脚本
  • scripts/exa_mine.py
    — 包含实验追踪的Exa Websets挖掘脚本
  • agents/openai.yaml
    — 技能CLI安装器的技能清单

Initial onboarding (first time used in a session)

初始引导(会话首次使用时)

When this skill is loaded for the first time in a session, read in order:
  1. This SKILL.md
  2. reference/oulang_state_snapshot.md
    — to ground in the current Oulang campaign state
  3. reference/mistakes_log.md
    — to load the do-not-repeat list
  4. The user's actual ask
Then proceed with the loop step that fits the ask:
  • "audit / who replied" → step 1
  • "next wave / fix the previous" → steps 1+2+3
  • "send it" / "fire it" / "always send" / "send the emails" → steps 5+6+7 for existing send-ready rows
  • "find more" with send intent → steps 1+2+3+4+5+6+7, skipping weak/unverified candidates instead of creating manual-review rows
  • "find more" without send intent → steps 3+4 only, creating send-ready rows and skipping weak/unverified candidates
当本技能在会话中首次加载时,需按以下顺序读取:
  1. 本SKILL.md
  2. reference/oulang_state_snapshot.md
    — 了解当前Oulang活动状态
  3. reference/mistakes_log.md
    — 加载不可重复的错误列表
  4. 用户的实际请求
然后根据请求选择对应的循环步骤:
  • "audit / who replied"(审计/谁回复了)→ 步骤1
  • "next wave / fix the previous"(下一轮/修复上一批次)→ 步骤1+2+3
  • "send it" / "fire it" / "always send" / "send the emails"(发送/立即发送/自动发送/发送邮件)→ 针对现有待发送记录执行步骤5+6+7
  • "find more"且包含发送意图 → 执行步骤1+2+3+4+5+6+7,跳过低优先级/未验证候选对象,不创建手动审核记录
  • "find more"且无发送意图 → 仅执行步骤3+4,创建待发送记录并跳过低优先级/未验证候选对象

Definition of done

完成定义

A wave is "done" only when:
  1. All drafts passed the self-critique gate.
  2. Every outbound communication target has current prior-communication evidence checked across tracker duplicates and available inbox/sent/spam/trash/draft/outbox folders, with full message bodies read for all matching sent/reply/bounce/block evidence.
  3. All send-intent drafts were sent OR explicitly skipped with the evidence that made sending unsafe; capture-only runs created only send-ready rows.
  4. Notion is updated row-by-row.
  5. Logs are in /mnt/user-data/outputs/.
  6. Critique doc is written for the NEXT cycle to consume.
  7. New Exa Webset experiment hypothesis is recorded.
Anything less is "in flight", not done.
仅当满足以下所有条件时,一轮外展才算“完成”:
  1. 所有草稿通过自我审核准入。
  2. 每个外展目标均已检查追踪器重复记录及可用收件箱/已发送/垃圾邮件/垃圾箱/草稿/发件箱中的过往沟通证据,且已读取所有匹配的已发送/回复/退信/拦截记录的完整内容。
  3. 所有包含发送意图的草稿已发送,或因发送不安全的证据被明确跳过;仅捕获模式下仅创建待发送记录。
  4. Notion已逐条更新。
  5. 日志已写入/mnt/user-data/outputs/。
  6. 已撰写下一轮可使用的审核文档。
  7. 已记录新的Exa Webset实验假设。
未满足上述所有条件的均视为“进行中”,而非完成。