Scope — existing relationships only
This skill re-ignites existing stalled conversations — people the user
has previously spoken with and who have gone quiet. It is not for:
- - Cold outreach to people the user has never contacted
- Lead generation or prospect acquisition
- Mass outreach or automated sales sequences
Every contact surfaced must already exist in the user's communication history.
The opening lines restart real conversations — they do not initiate new ones.
The difference from relationship-pulse
INLINECODE0 — personal relationships. People you care about. Friendship maintenance.
biz-relationship-pulse — commercial relationships. Deals, partnerships, door-openers, former clients. Revenue and opportunity.
Different detection logic. Different output. Different stakes.
File structure
CODEBLOCK0
Token discipline: weekly cron reads only config.md + pipeline.md + context.md.
What counts as a stalled conversation
A conversation is stalled — not ended — when:
Recency signal:
- - Was actively exchanged (3+ messages back and forth) within the last 18 months
- Then went quiet for 60+ days with no clean resolution
- Last message was not a hard no or a natural close ("great working with you, take care")
Momentum signal:
- - The thread contained forward-looking language: "let's reconnect", "follow up next quarter", "send me more when you're ready", "timing isn't right but keep me posted"
- A concrete next step was mentioned but never happened
- One party went quiet mid-thread without a clear reason
Relationship type signal:
- - Was tagged or inferable as: prospect, partnership discussion, investor conversation, former client, connector/advisor
Recency of last contact:
- - Cold zone: 6-18 months (most re-ignitable — enough time has passed, not so long it's awkward)
- Warm zone: 2-6 months (still recent enough, something clearly stalled)
- Archive zone: 18+ months (surface only if context.md shows a specific reason to reconnect now)
Sources and what to extract
Gmail
- - Search sent + received threads with external contacts
- Flag: threads with 3+ exchanges that went quiet
- Extract: last message sender, last message content, any forward-looking language, implied next step
- Note: who went quiet — did they stop replying, or did you?
LinkedIn (if connected via MCP)
- - Connection requests accepted but no follow-up conversation
- Message threads that stalled
- Profile views from people in your network — they looked you up recently, timing may be right
- Recent job changes or company news for contacts in pipeline.md — a trigger to reach out
WhatsApp (if accessible via channel)
- - Business conversations that went quiet
- Voice note conversations with no follow-up
- Group chats with relevant contacts
context.md (internal)
- - What are you actively working on, selling, or building right now?
- Who would be specifically relevant to current projects?
- Any names or companies you want to prioritise?
Scoring model
Each candidate contact gets scored across five dimensions:
1. Momentum score (0-3)
- - 3: had explicit next step that never happened, or they said "follow up in X weeks"
- 2: warm exchange that tapered off, no explicit close
- 1: light exchange, interest was implied but not stated
- 0: one-sided (only you reached out) or clearly ended naturally
2. Recency score (0-3)
- - 3: stalled 2-6 months ago (warm zone)
- 2: stalled 6-12 months ago
- 1: stalled 12-18 months ago
- 0: stalled 18+ months ago (unless context.md gives specific reason)
3. Relationship value score (0-3)
- - 3: former client or active deal prospect
- 2: partnership or collaboration discussion
- 2: investor or serious door-opener
- 1: connector or loose advisor conversation
- 0: unclear or low commercial relevance
4. Context relevance score (0-3)
- - 3: directly relevant to what's in context.md right now
- 2: adjacent — would be useful but not primary
- 1: general network value
- 0: no clear current relevance
5. Re-ignition plausibility score (0-3)
- - 3: there's a natural hook — their company is in the news, they changed roles, something relevant happened
- 2: time has passed cleanly — "it's been a while" is a natural opener
- 1: harder to re-open without it feeling like a delayed sales follow-up
- 0: would feel forced or inappropriate to reach out
Total: 0-15. Surface contacts scoring 8+.
If fewer than 3 score 8+, lower threshold to 6+ for that week.
Hard cap: surface maximum 5 contacts per week. Quality over quantity.
Setup flow
Step 1 — Connect sources
Confirm which sources are available:
- - Gmail: check if connected
- LinkedIn MCP: check if connected
- WhatsApp: check if accessible via channel
Note which are unavailable. The skill runs with whatever is connected — it doesn't fail on missing sources.
Step 2 — Build context.md
This is the most important setup step.
Ask the user:
"What are you actively working on right now? What would make a re-connection commercially useful — are you fundraising, selling something, looking for partnerships, hiring, or something else?"
Also ask:
"Are there any specific people or companies you've been meaning to reach out to but haven't?"
Write context.md:
CODEBLOCK1
Step 3 — Write config.md
CODEBLOCK2
Step 4 — Initial pipeline scan
On first run, do a full scan across all sources going back 18 months.
Build pipeline.md with all candidates found.
This first run will take longer — worth flagging to the user.
Step 5 — Register cron job
Weekly, Monday morning, isolated, lightContext.
CODEBLOCK3
Runtime flow
1. Read config, pipeline, context
Load scoring preferences, what's been surfaced before, and current commercial priorities.
2. Scan sources
Gmail scan:
- - Search sent mail for external contacts going back 18 months
- Find threads with 3+ exchanges that went quiet
- Extract: last message date, last sender, any forward-looking language
- Note: did you send last (they went quiet) or did they send last (you went quiet)?
LinkedIn scan (if connected):
- - Check message threads for stalled conversations
- Check for recent profile views from pipeline contacts
- Check for job changes or company news from pipeline contacts
WhatsApp scan (if accessible):
- - Check business-context conversations
- Flag any threads with pending follow-ups
3. Score all candidates
Apply the five-dimension scoring model.
Cross-reference context.md for relevance boost.
Flag any names mentioned specifically in context.md — surface regardless of score.
4. Pick top 3-5
Select highest scoring contacts not surfaced in the last 4 weeks.
Avoid surfacing the same person twice in a month.
5. For each contact — generate the brief
Section A: Who they are and what the relationship was
[NAME] — [Title] at [Company]
Relationship type: [prospect / partner / investor / former client / connector]
Last contact: [X months ago] via [Gmail / LinkedIn / WhatsApp]
[One sentence: what the conversation was about]
[One sentence: where it stalled and why]
Section B: Why now
Score: [X/15]
[The specific reason this person is worth re-igniting now — either a trigger event or a clean time-has-passed window]
Examples of good "why now":
- - "They changed roles 3 weeks ago — natural moment to reconnect"
- "Their company just announced a funding round — relevant to what you're building"
- "It's been exactly 6 months since they said 'follow up in Q2'"
- "You're now working on [X from context.md] — directly relevant to what they were looking for"
If there's no specific trigger, say: "No recent trigger — but 8 months is a clean enough gap that re-opening won't feel like a delayed chase."
Section C: What to say
One specific opening line. Not a template. Written for this person, this context.
Rules:
- - References something specific from the conversation history — not generic
- Does not feel like a sales follow-up
- Has a reason to reach out that isn't "just checking in"
- Short enough to send as-is or with minimal editing
- Honest about the gap — don't pretend no time has passed
Good:
"Nico — it's been a while since we spoke about [X]. I've been thinking about our conversation re [specific thing they mentioned] — we've since [relevant development]. Worth a quick call to catch up?"
Bad:
"Hi [NAME], hope you're well! I wanted to reach out and reconnect. Are you free for a quick call?"
The opening line is the most important output.
If it's generic, the skill has failed.
6. Update pipeline.md
CODEBLOCK4
Context updates
The skill improves the more context.md stays current.
When your situation changes — new project, new funding stage, new product — update context.md:
INLINECODE5
The next weekly run will re-score all pipeline contacts against the new context.
Management commands
- -
/bizpulse now — run immediately - INLINECODE7 — see the score and reasoning for a specific contact
- INLINECODE8 — manually add someone to track
- INLINECODE9 — remove from active tracking
- INLINECODE10 — mark as reached out (pauses for 30 days)
- INLINECODE11 — mark as re-engaged (moves to active pipeline)
- INLINECODE12 — update current commercial context
- INLINECODE13 — show full history for a contact
- INLINECODE14 — show full scored pipeline
What makes it good
The opening line has to be specific. That's the whole product.
Anyone can surface a list of cold contacts.
The skill earns its place by writing the first sentence so you don't have to.
The scoring model distinguishes stalled from ended.
A clean goodbye is not a stall. A "let's talk in Q2" that never happened is.
The context.md update loop is the compounding mechanism.
A skill running against current priorities is 3x more useful than one running against stale ones.
The "who went quiet" signal matters.
If you went quiet on them, the re-opening message is different than if they went quiet on you.
The skill tracks this and the opening line reflects it.
Privacy rules
SOUL.md applies. Commercial relationships only.
Never surface personal email threads in the business output.
If a thread is ambiguous (personal friend who is also a business contact), default to not surfacing unless context.md explicitly includes them.
Names in output are fine — these are professional relationships.
Do not include email addresses, phone numbers, or other contact details in the delivery.
User already has these. The skill provides context and a message, not a contact dump.
范围——仅限现有关系
此技能用于重新激活已停滞的现有对话——即用户之前曾交流过但后来沉默的联系人。不适用于:
- - 向用户从未联系过的人进行冷启动
- 潜在客户开发或线索获取
- 大规模群发或自动化销售序列
每个被筛选出的联系人必须已存在于用户的沟通记录中。开场白用于重启真实对话——而非发起新对话。
与 relationship-pulse 的区别
relationship-pulse —— 个人关系。你在乎的人。维系友谊。
biz-relationship-pulse —— 商业关系。交易、合作伙伴、引荐人、前客户。收入和机会。
不同的检测逻辑。不同的输出。不同的利害关系。
文件结构
biz-relationship-pulse/
SKILL.md
config.md ← 关系类型、来源、评分权重、上下文
pipeline.md ← 已评分联系人日志、停滞原因、最后操作、状态
context.md ← 你当前正在做的事——用于匹配相关性
令牌纪律:每周定时任务仅读取 config.md + pipeline.md + context.md。
什么算作停滞对话
对话处于停滞状态——而非结束——当满足以下条件时:
时效信号:
- - 过去18个月内有过活跃交流(3条以上往返消息)
- 随后沉默超过60天且无明确收尾
- 最后一条消息不是明确拒绝或自然结束(如合作愉快,保重)
势头信号:
- - 对话中包含前瞻性语言:我们再联系、下季度跟进、准备好了发给我、时机不对但保持联系
- 提到了具体的下一步行动但从未执行
- 一方在对话中途无故沉默
关系类型信号:
- - 被标记或可推断为:潜在客户、合作洽谈、投资人对话、前客户、引荐人/顾问
最近联系时间:
- - 冷淡区:6-18个月(最易重新激活——时间足够长,又不至于尴尬)
- 温区:2-6个月(仍算近期,明显有事情停滞)
- 归档区:18个月以上(仅当 context.md 显示有特定理由现在重新联系时才筛选)
来源及提取内容
Gmail
- - 搜索与外部联系人的已发送+已接收对话
- 标记:有3条以上交流但已沉默的对话
- 提取:最后消息发送者、最后消息内容、任何前瞻性语言、隐含的下一步行动
- 注意:谁先沉默——是他们停止回复,还是你?
LinkedIn(如通过 MCP 连接)
- - 已接受但未跟进的好友请求
- 已停滞的消息对话
- 来自人脉圈的个人主页浏览记录——他们最近查看过你,时机可能合适
- pipeline.md 中联系人的近期职位变动或公司新闻——触发重新联系
WhatsApp(如可通过渠道访问)
- - 已沉默的商业对话
- 无后续的语音消息对话
- 包含相关联系人的群聊
context.md(内部)
- - 你当前正在积极做什么、销售什么或构建什么?
- 谁与当前项目特别相关?
- 是否有任何你想优先联系的人名或公司?
评分模型
每个候选联系人从五个维度进行评分:
1. 势头评分(0-3分)
- - 3分:有明确的下一步行动但从未执行,或对方说X周后跟进
- 2分:交流逐渐减少,无明确收尾
- 1分:轻度交流,兴趣隐含但未明说
- 0分:单方面(只有你主动联系)或明显自然结束
2. 时效评分(0-3分)
- - 3分:2-6个月前停滞(温区)
- 2分:6-12个月前停滞
- 1分:12-18个月前停滞
- 0分:18个月前停滞(除非 context.md 有特定理由)
3. 关系价值评分(0-3分)
- - 3分:前客户或活跃交易潜在客户
- 2分:合作或协作洽谈
- 2分:投资人或重要引荐人
- 1分:引荐人或松散顾问交流
- 0分:不明确或商业相关性低
4. 上下文相关性评分(0-3分)
- - 3分:与当前 context.md 内容直接相关
- 2分:相邻——有用但非主要
- 1分:一般性人脉价值
- 0分:无明确当前相关性
5. 重新激活可行性评分(0-3分)
- - 3分:有自然切入点——对方公司上新闻、职位变动、有相关事件发生
- 2分:时间已自然流逝——好久不见是自然的开场白
- 1分:较难重新开启,否则会像延迟的销售跟进
- 0分:主动联系会显得勉强或不合适
总分:0-15分。筛选出得分8分及以上的联系人。
如果少于3人得分8分以上,当周阈值降至6分。
硬性上限:每周最多筛选5个联系人。质量优先于数量。
设置流程
第1步——连接来源
确认哪些来源可用:
- - Gmail:检查是否已连接
- LinkedIn MCP:检查是否已连接
- WhatsApp:检查是否可通过渠道访问
记录不可用的来源。该技能会基于已连接的内容运行——不会因缺少来源而失败。
第2步——构建 context.md
这是最重要的设置步骤。
询问用户:
你当前在积极做什么?什么能让重新联系具有商业价值——你在融资、销售产品、寻找合作伙伴、招聘,还是其他?
同时询问:
是否有任何你一直想联系但尚未联系的人或公司?
编写 context.md:
md
当前上下文
我正在做的事
[描述当前项目、销售重点、融资状态等]
本季度优先的关系类型
[例如:A轮投资人、DACH地区企业客户、营销合作伙伴]
需关注的具体人员
[人名或公司——即使评分低于阈值也要筛选]
降低优先级的关系类型
[例如:无果而终的早期交流、不相关的行业]
第3步——编写 config.md
md
商业关系脉冲配置
来源
gmail: true
linkedin: true
whatsapp: true
需跟踪的关系类型
prospects: true
partnerships: true
investors: true
former_clients: true
connectors: true
评分阈值
surface_above: 8
fallback_threshold: 6
max
perweek: 5
停滞检测
cold
zonemonths: 6-18
warm
zonemonths: 2-6
archive_months: 18
投递
channel: [CHANNEL]
to: [TARGET]
day: Monday
time: 08:30
第4步——初始管道扫描
首次运行时,对所有来源进行18个月内的全面扫描。
用找到的所有候选联系人构建 pipeline.md。
首次运行耗时较长——值得告知用户。
第5步——注册定时任务
每周一早上,隔离运行,轻量上下文。
json
{
name: 商业关系脉冲,
schedule: { kind: cron, expr: 30 8 1, tz: <用户时区> },
sessionTarget: isolated,
wakeMode: now,
payload: {
kind: agentTurn,
message: 运行 biz-relationship-pulse。读取 {baseDir}/config.md、{baseDir}/pipeline.md 和 {baseDir}/context.md。扫描已连接来源(Gmail、LinkedIn、WhatsApp)中停滞的商业对话。对每个候选联系人评分。筛选出得分8分以上(或不足时6分以上)的前3-5人。为每个人:编写关系简报和一条具体的重新联系消息。更新 pipeline.md。通过配置的渠道投递。,
lightContext: true
},
delivery: { mode: announce, channel: , to: , bestEffort: true }
}
运行流程
1. 读取配置、管道、上下文
加载评分偏好、之前筛选过的内容以及当前商业优先级。
2. 扫描来源
Gmail 扫描:
- - 搜索过去18个月内与外部联系人的已发送邮件
- 找到有3条以上交流但已沉默的对话
- 提取:最后消息日期、最后发送者、任何前瞻性语言
- 注意:是你最后发送(对方沉默)还是对方最后发送(你沉默)
LinkedIn 扫描(如已连接):
- - 检查消息对话中是否有停滞的交流
- 检查管道联系人是否有近期个人主页浏览记录
- 检查管道联系人是否有职位变动或公司新闻
WhatsApp 扫描(如可访问):