oulang-continuous-outreach-skill
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseOulang 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)
基础设施(标准配置,请勿随意修改)
| Resource | Address | Notes |
|---|---|---|
| Notion DB (Investor Outreach Tracker) | | URL: https://www.notion.so/pime/6705b564c5d34f55a43fce064f77f60b |
| Direct Gmail SMTP | | Use |
| Exa Websets API | | Use existing websets when possible, create new ones with refined queries |
Sender SMTP contract: , , , and 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.
SMTP_USER=sami@oulang.aiSMTP_HOST=smtp.gmail.comSMTP_PORT=587SMTP_PASSWORD| 资源 | 地址 | 说明 |
|---|---|---|
| Notion 数据库(投资者外展追踪器) | | 访问链接:https://www.notion.so/pime/6705b564c5d34f55a43fce064f77f60b |
| Gmail 直接SMTP | | 使用 |
| Exa Websets API | | 优先使用现有Websets,必要时通过优化查询创建新的Websets |
发件人SMTP约定:、、,且必须从当前运行环境或用户提供的保密上下文获取。不得在技能代码、日志、草稿、提交记录或总结中硬编码应用密码。
SMTP_USER=sami@oulang.aiSMTP_HOST=smtp.gmail.comSMTP_PORT=587SMTP_PASSWORDThe self-correcting loop (run every cycle)
自我修正循环(每轮运行)
1. AUDIT → 2. ANALYZE → 3. REFINE → 4. DISCOVER → 5. WRITE → 6. SEND → 7. RECORD
↺ loop back to 11. 审计 → 2. 分析 → 3. 优化 → 4. 挖掘 → 5. 撰写 → 6. 发送 → 7. 记录
↺ 循环回到步骤11. AUDIT — what happened to the last batch?
1. 审计 — 上一批次的结果如何?
Before drafting a single new email, query Notion for everything in since the last audit and compute:
Draft Status = Sent- 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.aisamihalawaster@gmail.comoulang.ai@gmail.comsupport@oulang.aioulang@oulang.aisami@pime.aisami@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.aisamihalawaster@gmail.comoulang.ai@gmail.comsupport@oulang.aioulang@oulang.aisami@pime.aisami@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:
| Pattern | Failure | Fix |
|---|---|---|
| 18 of 25 emails identical subject line | Spam-folder signal across VC inboxes | Each subject must be unique + tied to recent investment of recipient |
| "I saw your recent activity" generic opener (14×) | Read as mail-merge | Cite 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 hide | Always include WhatsApp +34 679 794 037 in signature |
| Promised deck/Loom with no link | Dead promise | Always include |
| €3,952 MRR exact number with no caveat | VCs grep, find admin-credit subsidy, lose trust | Disclose: "€3.9K cash MRR, excludes admin credit grants" |
| 5 Chinese emails identical body | Insulting in Chinese business etiquette | Each must reference target's specific company/role |
| Chamber emails with VC language | Wrong genre, instant ignore | Strip fundraising entirely, lead with cross-promo offer |
| Sender-filtered IMAP search for replies | Misses real replies from assistants/alternate addresses | Broad-keyword search across all 7 inboxes |
| Diagnostic test sends going to real recipients | Embarrassing duplicate received | NEVER send a smoke test to a real recipient; use |
针对每种失败模式,在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但未附链接 | 无法兑现的承诺 | 始终包含 |
| 精确到3952欧元的MRR且无说明 | VC会搜索细节,发现管理信用补贴后失去信任 | 披露:“3900欧元现金MRR,不含管理信用补贴” |
| 5封中文邮件正文完全相同 | 违反中国商务礼仪,显得不尊重 | 每封邮件必须提及目标的具体公司/职位 |
| 给商会的邮件使用VC术语 | 风格不符,立即被忽略 | 完全移除融资相关表述,以交叉推广合作作为切入点 |
| 按发件人过滤的IMAP搜索回复 | 错过来自助理/备用地址的真实回复 | 在所有7个收件箱中使用宽泛关键词搜索 |
| 诊断测试邮件发送给真实收件人 | 造成尴尬的重复发送 | 绝对不要向真实收件人发送测试邮件;使用 |
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— they don't read cold email and route through Twitter-DM only.@sequoia.com - 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 , the hypothesis, and a kill criterion.
experiment ID根据分析结果,重写下一轮Exa Webset查询,移除导致退信或无响应的模式,强化产生互动的模式。
过往运行中产生的优化示例:
- v4版本后移除的Exa条件:仅“西班牙种子前VC” → 噪音太大。新增:“过去12个月有 Marketplace 或侨民领域投资记录”。
- v5版本后新增的条件:“Wallapop LP”、“Marshmallow LP”、“侨民SaaS LP” — 已下注类似模式的投资者。
- 移除的对象:带有、
@gv.com、@a16z.com的投资者 — 他们不阅读冷邮件,仅通过Twitter-DM沟通。@sequoia.com - 新增加分条件:“过去90天公开推文提及西班牙市场”或“撰写过普通话商务LP投资理念”。
- 合作项目专属条件:“过去6个月在西语中文媒体投放广告”(表明有触达我们用户的真实意愿)。
每个新的Webset查询应保存、假设和终止条件。
实验ID4. 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 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.
🚀 TO SENDGET https://api.exa.ai/websets/v0/websets/{webset_id}/itemsFor 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:
- Search the tracker/Notion row and nearby duplicate rows by organization, person, email, WhatsApp phone, form URL, and normalized domain.
- Search all available inbox, sent, archived, spam, trash, draft, and outbox folders for the same organization, person, email, WhatsApp phone, form URL, and domain.
- 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.
- If prior communication is found, continue in that same thread/channel unless the reply explicitly routes to a different channel.
- 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.
- Email remains the default channel when there is verified email and no stronger WhatsApp/form instruction.
- 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.
- 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.
- If an email is bounced, blocked, syntactically invalid, guessed, stale, or not publicly verified, remove it from immediately. Update the row to
🚀 TO SENDand clear the send path, or delete/archive the row when the active tracker tooling supports that. Never leave invalid emails as send-ready.Reply Status = 🔧 FIX EMAIL - 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、表单、领英、私信或联系页面消息)前,必须先验证过往沟通历史。这不仅是邮件安全检查。
沟通前需验证的证据:
- 通过机构、个人、邮箱、WhatsApp号码、表单链接和标准化域名,搜索追踪器/Notion记录及附近的重复记录。
- 搜索所有可用收件箱、已发送、归档、垃圾邮件、垃圾箱、草稿及发件箱中匹配的机构、个人、邮箱、WhatsApp号码、表单链接和域名。
- 在选择渠道前,阅读相关已发送消息、回复、退信、拦截通知、草稿及转发线程的完整内容。当邮件或WhatsApp证据与记录状态矛盾时,不要依赖记录状态、片段或主题。
- 若发现过往沟通记录,需在同一线程/渠道继续沟通,除非回复明确指定其他渠道。
- 若有WhatsApp号码且无现有WhatsApp回复/线程改变计划,优先选择WhatsApp作为最高优先级实时渠道。
- 当有已验证邮箱且无更明确的WhatsApp/表单要求时,邮件仍为默认渠道。
- 仅当收件人或公开流程明确要求通过表单进行推介/回复,或回复要求使用表单渠道时,才使用表单/Typeform/Airtable/联系页面提交。
- 若证据矛盾或不完整,不要进行沟通。不要从挖掘过程中创建新的占位记录。若记录已存在,更新其备注/状态以明确冲突,并将其排除在发送批次外。
- 若邮箱退信、被拦截、语法无效、猜测、过时或未公开验证,立即从队列中移除。将记录更新为
🚀 待发送并清除发送路径,或在追踪器支持的情况下删除/归档记录。绝不要让无效邮箱留在待发送队列中。回复状态 = 🔧 修复邮箱 - 对于旧版/Exa之前的无效记录,下一步操作是“通过Exa Websets重新查找”,而非“手动猜测”。添加简短备注,例如。
旧版/Exa之前的无效邮箱已移除;需通过Exa Websets重新查找
Email selection rules (after the communication gate)
邮箱选择规则(沟通准入后)
- Personal email if the person publicly publishes one ("personal email: jane@fund.com" in Exa enrichment) → use it.
- ,
pitch@,opportunity@generic inboxes → use them, NOT the partner's personal email, when public preference says so. Cherry, Mangrove, Ada all do this.deals@ - 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.
- 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.
- 个人邮箱:若个人公开了个人邮箱(如Exa补充信息中显示“personal email: jane@fund.com”)→ 使用该邮箱。
- 、
pitch@、opportunity@通用收件箱:若公开偏好使用此类邮箱,使用它们而非合伙人的个人邮箱。Cherry、Mangrove、Ada均采用此方式。deals@ - 表单/Typeform/Airtable提交:仅在沟通准入验证后确认表单是指定的推介/回复渠道时使用。示例:Point Nine Typeform、Seedcamp Typeform、Bethnal Green Airtable、Ada Ventures表单、Blue Lake Airtable、Systemiq联系表单。
- 按模式猜测的邮箱(如firstname.lastname@domain):红色警告。除非其他来源公开验证了该地址,否则跳过该候选对象。绝对不要发送按模式猜测的邮箱。
Dedupe rules
去重规则
Before adding a new row, fuzzy-match against existing Notion rows by:
- exact
Verified Public Email - normalized name (lowercase, strip punctuation)
Organization - if both present
Contact Source URL
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/investorsFor Chinese-language emails: same structure, but each greeting 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).
您好 XFor 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:
- Is the subject unique across this batch? → If no, rewrite.
- Is the hook specific (named portfolio/announcement)? → If no, rewrite.
- Is the ask reframed away from "€500K solo runway"? → If no, fix.
- Is the deck link present? → If no, add.
- Is MRR framed honestly (cash, excludes credits)? → If no, fix.
- Is recipient seniority + stage actually correct? → If wrong, SKIP not send.
- 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.
针对每个草稿,需内部确认:
- 本批次中主题是否唯一? → 若否,重写。
- 钩子是否具体(提及被投公司/公告)? → 若否,重写。
- 请求是否已重构,避免“50万欧元单独 runway”表述? → 若否,修正。
- 是否包含演示文档链接? → 若否,添加。
- MRR是否如实说明(现金、不含补贴)? → 若否,修正。
- 收件人层级+阶段是否正确? → 若错误,跳过不发送。
- 本批次中是否有其他邮件使用相同钩子? → 若是,调整。
未通过任何准入检查的草稿必须重写或放弃,不得发送。
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 pacingRun 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.jsonOnly 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 + . Do not send in that narrower capture-only mode.
Drafted🚀 TO SENDCritical send-time rules:
- Never send a "test" email to a real recipient. Self-loop to if you must probe.
sami@oulang.ai - 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 when writable; if that directory is read-only, use
/mnt/user-data/outputs/<campaign>_send_log_<date>.txtand mention the fallback path in the cycle summary./tmp/oulang-outreach-<date>/ - 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.jsonOulang外展仅使用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 IDUse the Notion MCP tool with . Loop one update per page, accepting ~1s per call.
notion-update-pagecommand: update_propertiesAfter the batch, write a campaign summary doc to :
/mnt/user-data/outputs/<campaign>_send_log_<date>.txt
<campaign>_critique_<date>.md
<campaign>_drafts_<date>.jsonThese become inputs to the NEXT cycle's AUDIT step.
对于每封已发送邮件:
草稿状态: 已发送
回复状态: 未回复
发送日期: <今日,ISO格式>
备注: <活动标签> + 针对该目标使用的钩子 + 实验ID使用Notion MCP 工具,参数为。逐条更新记录,接受约1秒/条的调用时间。
notion-update-pagecommand: update_properties批次发送完成后,将活动总结文档写入:
/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:
- (title) — official entity name
Organization - — person name (full)
Contact - — only verified or publicly published
Verified Public Email - — free text for "form: typeform.com/x" or "linkedin DM only" cases
Email or Channel - — E.164 format
Public WhatsApp Phone - — Tier 1 / Tier 2 / Tier 3 / Weak
Priority Tier - — numeric 1-100, lower = higher priority
Priority Rank - — Drafted / Reviewing / Ready / Sent
Draft Status - — 🚀 TO SEND / 💤 WAITING / 📨 REPLY NOW / 🔧 FIX EMAIL / ✅ DONE
Reply Status - — Existing in source / Exa found / Not found
Contact Enrichment Status - — long text with Portfolio / 2026 Activity / Thesis Match / Sector / City / Check Size / Inbound Channel pipe-separated
Contact Enrichment Notes - — ISO date
Sent Date - — LinkedIn or homepage
Contact Source URL - — campaign tag + per-target hook + experiment ID + outcome notes
Notes
投资者外展追踪器包含以下列,需保持使用一致性:
- (标题) — 官方实体名称
机构 - — 全名
联系人 - — 仅填写已验证或公开发布的邮箱
已验证公开邮箱 - — 自由文本,用于“form: typeform.com/x”或“仅领英私信”等情况
邮箱或渠道 - — E.164格式
公开WhatsApp号码 - — Tier 1 / Tier 2 / Tier 3 / 低优先级
优先级 tier - — 数字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:
- — 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-eu-preseed - — Latina/MENA/Asian diaspora-focused funds and operators. Tier 1: Ganas (already passed), Portfolia, Diaspora Ventures.
vc-diaspora-angels - — 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-operators - — Chambers, business associations, Confucius Institutes. ZERO fundraising language. Cross-promo only.
spain-china-institutions - — Partners who can drive Mandarin users to Oulang (WeChat KOLs, Spanish-Mandarin newsletter operators, university Chinese student associations).
marketplace-distribution - — Spanish-native businesses that want to reach Chinese-diaspora buyers. Lower-funnel partnership pitch.
b2b-spanish-merchants
Each archetype has its own set of Exa Webset templates. See .
reference/webset_templates.md本技能内置以下活动原型。用户可在请求中指定:
- — 专注Marketplace/侨民领域的欧盟种子前VC。Tier 1:Mangrove、Passion、InReach、Point Nine、Seedcamp、Cherry、Earlybird。输出:每轮25-40封个性化邮件。
vc-eu-preseed - — 聚焦拉丁裔/中东/亚洲侨民的基金和运营商。Tier 1:Ganas(已拒绝)、Portfolia、Diaspora Ventures。
vc-diaspora-angels - — 西班牙籍华裔天使投资人、家族办公室及中小企业主。来源:Cobo Calleja目录、《先锋报》“中西100强”、西班牙商会会员列表。
spain-china-operators - — 商会、商业协会、孔子学院。完全不含融资表述,仅做交叉推广。
spain-china-institutions - — 可将普通话用户引流至Oulang的合作伙伴(微信KOL、西语中文通讯运营商、高校中国学生协会)。
marketplace-distribution - — 希望触达侨民买家的西班牙本土企业。低漏斗合作提案。
b2b-spanish-merchants
每个原型都有对应的Exa Webset模板。详见。
reference/webset_templates.mdObservability checklist (run end of each cycle)
可观测性检查清单(每轮结束时运行)
- Notion for last batch is up to date
Reply Status - 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 and marked
🚀 TO SENDor archived/deleted if the tracker permits.🔧 FIX EMAIL - 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一同阅读)
- — Exa Webset query templates per archetype
reference/webset_templates.md - — Per-archetype email skeletons + signature blocks
reference/email_templates.md - — Append-only log of every mistake learned from + the fix
reference/mistakes_log.md - — Hypothesis + result for each Exa Webset experiment
reference/experiments.md - — Latest known state of the Oulang campaign (recipients, replies, pending forms, bounces) as of skill build
reference/oulang_state_snapshot.md - — IMAP broad-keyword search across 7 Sami inboxes
scripts/audit_replies.py - — Direct Gmail SMTP batch sender with pre-send safety gates
scripts/send_batch.py - — Notion property updater with dedupe check
scripts/notion_update.py - — Exa Websets miner with experiment tracking
scripts/exa_mine.py - — Skill manifest for skill-CLI installer
agents/openai.yaml
- — 各原型对应的Exa Webset查询模板
reference/webset_templates.md - — 各原型对应的邮件框架+签名模块
reference/email_templates.md - — 追加式日志,记录所有已发现的错误及修复方案
reference/mistakes_log.md - — 每个Exa Webset实验的假设+结果
reference/experiments.md - — 截至技能构建时Oulang活动的最新状态(收件人、回复、待处理表单、退信)
reference/oulang_state_snapshot.md - — 在7个Sami收件箱中执行IMAP宽泛关键词搜索的脚本
scripts/audit_replies.py - — 包含发送前安全检查的Gmail直接SMTP批量发送脚本
scripts/send_batch.py - — 包含去重检查的Notion属性更新脚本
scripts/notion_update.py - — 包含实验追踪的Exa Websets挖掘脚本
scripts/exa_mine.py - — 技能CLI安装器的技能清单
agents/openai.yaml
Initial onboarding (first time used in a session)
初始引导(会话首次使用时)
When this skill is loaded for the first time in a session, read in order:
- This SKILL.md
- — to ground in the current Oulang campaign state
reference/oulang_state_snapshot.md - — to load the do-not-repeat list
reference/mistakes_log.md - 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
当本技能在会话中首次加载时,需按以下顺序读取:
- 本SKILL.md
- — 了解当前Oulang活动状态
reference/oulang_state_snapshot.md - — 加载不可重复的错误列表
reference/mistakes_log.md - 用户的实际请求
然后根据请求选择对应的循环步骤:
- "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:
- All drafts passed the self-critique gate.
- 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.
- All send-intent drafts were sent OR explicitly skipped with the evidence that made sending unsafe; capture-only runs created only send-ready rows.
- Notion is updated row-by-row.
- Logs are in /mnt/user-data/outputs/.
- Critique doc is written for the NEXT cycle to consume.
- New Exa Webset experiment hypothesis is recorded.
Anything less is "in flight", not done.
仅当满足以下所有条件时,一轮外展才算“完成”:
- 所有草稿通过自我审核准入。
- 每个外展目标均已检查追踪器重复记录及可用收件箱/已发送/垃圾邮件/垃圾箱/草稿/发件箱中的过往沟通证据,且已读取所有匹配的已发送/回复/退信/拦截记录的完整内容。
- 所有包含发送意图的草稿已发送,或因发送不安全的证据被明确跳过;仅捕获模式下仅创建待发送记录。
- Notion已逐条更新。
- 日志已写入/mnt/user-data/outputs/。
- 已撰写下一轮可使用的审核文档。
- 已记录新的Exa Webset实验假设。
未满足上述所有条件的均视为“进行中”,而非完成。