Install
openclaw skills install biz-relationship-pulseScans your emails and LinkedIn to identify stalled commercial relationships and suggests prioritized contacts with tailored re-engagement lines.
openclaw skills install biz-relationship-pulseThis skill re-ignites existing stalled conversations — people the user has previously spoken with and who have gone quiet. It is not for:
Every contact surfaced must already exist in the user's communication history. The opening lines restart real conversations — they do not initiate new ones.
relationship-pulse — 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.
biz-relationship-pulse/
SKILL.md
config.md ← relationship types, sources, scoring weights, context
pipeline.md ← scored contact log, stall reasons, last action, status
context.md ← what you're working on now — used to match relevance
Token discipline: weekly cron reads only config.md + pipeline.md + context.md.
A conversation is stalled — not ended — when:
Recency signal:
Momentum signal:
Relationship type signal:
Recency of last contact:
Each candidate contact gets scored across five dimensions:
1. Momentum score (0-3)
2. Recency score (0-3)
3. Relationship value score (0-3)
4. Context relevance score (0-3)
5. Re-ignition plausibility score (0-3)
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.
Confirm which sources are available:
Note which are unavailable. The skill runs with whatever is connected — it doesn't fail on missing sources.
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:
# Current Context
## What I'm working on
[Description of current projects, sales focus, fundraising status, etc.]
## Relationship types to prioritise this quarter
[e.g. "investors for Series A", "enterprise clients in DACH", "marketing partnerships"]
## Specific people to watch for
[Names or companies — surface these even if score is below threshold]
## Relationship types to deprioritise
[e.g. "early-stage conversations that went nowhere", "irrelevant industries"]
# Biz Relationship Pulse Config
## Sources
gmail: true
linkedin: true
whatsapp: true
## Relationship types to track
prospects: true
partnerships: true
investors: true
former_clients: true
connectors: true
## Scoring thresholds
surface_above: 8
fallback_threshold: 6
max_per_week: 5
## Stall detection
cold_zone_months: 6-18
warm_zone_months: 2-6
archive_months: 18
## Delivery
channel: [CHANNEL]
to: [TARGET]
day: Monday
time: 08:30
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.
Weekly, Monday morning, isolated, lightContext.
{
"name": "Biz Relationship Pulse",
"schedule": { "kind": "cron", "expr": "30 8 * * 1", "tz": "<USER_TIMEZONE>" },
"sessionTarget": "isolated",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "Run biz-relationship-pulse. Read {baseDir}/config.md, {baseDir}/pipeline.md, and {baseDir}/context.md. Scan connected sources (Gmail, LinkedIn, WhatsApp) for stalled commercial conversations. Score each candidate. Surface top 3-5 scoring 8+ (or 6+ if fewer qualify). For each: write a relationship brief and one specific re-opening message. Update pipeline.md. Deliver via configured channel.",
"lightContext": true
},
"delivery": { "mode": "announce", "channel": "<CHANNEL>", "to": "<TARGET>", "bestEffort": true }
}
Load scoring preferences, what's been surfaced before, and current commercial priorities.
Gmail scan:
LinkedIn scan (if connected):
WhatsApp scan (if accessible):
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.
Select highest scoring contacts not surfaced in the last 4 weeks. Avoid surfacing the same person twice in a month.
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":
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:
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.
# Pipeline
## [NAME] — [Company]
Type: [prospect / partner / investor / former client / connector]
First contact: [date]
Last contact: [date]
Last source: [Gmail / LinkedIn / WhatsApp]
Stall reason: [inferred — they went quiet / you went quiet / timing / no next step]
Score: [X/15]
Times surfaced: [N]
Last surfaced: [date]
Status: [monitoring / surfaced / reached out / re-engaged / archived]
Notes: [anything relevant from the conversation history]
The skill improves the more context.md stays current.
When your situation changes — new project, new funding stage, new product — update context.md:
/bizpulse context update "We just launched X and are looking for Y"
The next weekly run will re-score all pipeline contacts against the new context.
/bizpulse now — run immediately/bizpulse score [name] — see the score and reasoning for a specific contact/bizpulse add [name] [context] — manually add someone to track/bizpulse archive [name] — remove from active tracking/bizpulse sent [name] — mark as reached out (pauses for 30 days)/bizpulse reengaged [name] — mark as re-engaged (moves to active pipeline)/bizpulse context update [text] — update current commercial context/bizpulse history [name] — show full history for a contact/bizpulse pipeline — show full scored pipelineThe 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.
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.