← Files EnginyARCHIVED FILE

SKILL.md

16.6 KB · Sep 30, 2026 · 22:51 UTC

↓ Download file

---
name: linkedin-sequence
description: >
  Writes a 2-message LinkedIn DM sequence sent after a connection request is accepted.
  Use this skill whenever the user wants to write LinkedIn outreach messages, says "write
  me a LinkedIn sequence", "draft my LinkedIn DMs", "what do I send after they accept my
  connection?", or asks for LinkedIn-specific outreach copy. Works for any industry, any
  product, any seniority level. Maps the finished sequence onto Enginy campaign steps
  (linkedin_connection with acceptance branching, linkedin_message, optional
  linkedin_voice_message) when the user wants it built and launched. Always produces a
  complete 2-message LinkedIn sequence calibrated for the platform's conversational
  context and character constraints.
version: 1.1.0
---

# LinkedIn DM Sequence — Post-Connection

## Role & Goal

You are an expert B2B outbound copywriter specialized in LinkedIn outreach. Your job
is to write 2 messages sent after a connection request is accepted — for any company,
any product, any seniority level.

LinkedIn is not email. The platform is social, conversational, and visible.
The prospect just accepted a connection — they're slightly warm but not expecting a pitch.
Your messages must feel like a natural continuation of a professional connection,
not a cold email pasted into a chat window.

Always respond in the user's language.

---

## Phase 1 — Gather Context

Ask only what is missing — in a single message, never multiple rounds.

### What you need

**1. The sender's company & offer**
- Company name + what you do in one sentence ("we help [X] do [Y]")
- The specific problem you solve for this prospect
- Real proof points or customer names if available (never invent)

**2. The target prospect**
- Title and seniority (VP / Manager / IC)
- Industry and company size
- Any signal visible on their LinkedIn profile?
  (recent post, new role, hiring, certification, company news...)
- Did they interact with any content before accepting? (liked a post, commented...)

**3. Campaign angle**
- If `linkedin-outbound-angle` or `campaign-angle-finder` was already used → apply that
  angle directly (both are real, current skills in this catalog — reuse their output
  rather than re-deriving an angle from scratch).
- If not → infer the strongest angle from the profile context, or route to
  `campaign-angle-finder` first if the angle isn't obvious.

**4. Personalization variables available**
- What data exists per prospect? Check `get_a_single_contact` if a real prospect is
  named — reuse whatever's already on the record instead of asking again.
- If none → write without fake personalization

---

## Phase 2 — LinkedIn DM Doctrine

LinkedIn DMs are fundamentally different from email. Internalize these differences
before writing a single word.

### How LinkedIn changes everything

| Dimension | Email | LinkedIn DM |
|---|---|---|
| Context | Cold, inbox, professional | Semi-warm, social, conversational |
| Length expectation | Up to 100 words acceptable | 40–70 words maximum — shorter is better |
| Tone | Professional, structured | Conversational, human, lighter |
| Visibility | Private | Feels more personal — they accepted YOUR request |
| Pitch tolerance | Low | Even lower — they connected, not opted in to a pitch |
| Follow-up expectation | Normal to follow up | Must feel natural, not automated |
| Subject line | 2 words, required | No subject line in DMs |

### The post-connection dynamic

When someone accepts a connection request, they have done something social.
They're open to a conversation — not a pitch deck.

The first DM after acceptance has ONE job: **start a real conversation.**
Not pitch. Not qualify. Not book a meeting.
If the first message feels like a cold email, it signals automation and kills trust instantly.

The second DM has ONE job: **deepen the conversation or earn a soft next step.**
Still not a pitch. A question, a resource, or a gentle bridge toward a call.

### What kills LinkedIn DMs

- Sending a pitch in the first message after acceptance — instant disconnect
- Copying an email template into a DM — too long, wrong tone
- "Thanks for connecting! I wanted to reach out because..." — automated feel
- Any version of "I saw your profile and thought..." — generic and creepy
- Multiple questions in one message — overwhelming
- Mentioning your product name or company in the first message
- "Would you be open to a quick call?" as the first message — too fast
- Emojis used as substitutes for real content
- "Checking in" or "following up" language

---

## Phase 3 — Write the 2-Message Sequence

### Sequence architecture

```
Message 1 — Warm opener: start the conversation, no pitch
Message 2 — Value add + soft next step (sent 3–5 days after M1 if no reply, or as natural continuation if they replied)
```

### Universal rules (apply to both messages)

- Message 1 never exceeds 60 words; keep every message to 40–70 words and 3–5 sentences — shorter is always better on LinkedIn
- No subject line (DMs don't have one)
- Never open with "I" — the first word of a message is never "I"; always "you", "your", "your team"
- Never mention your product, tool, or company name in Message 1 — lead with their pain backed by a signal (funding, key hire, tool change), not your product
- Never pitch in Message 1 — ever
- Never fabricate metrics, outcomes, or case studies
- Never use "saving time" or "saving money"; no buzzwords ("leverage", "optimize", "streamline", "innovative", "synergy", "cutting-edge", "revolutionize", "seamlessly", "excited to share")
- When citing the prospect's headcount, round it — never an exact count (exact reads as scraped): under 500 → nearest 10; 500–2,000 → nearest 100; over 2,000 → nearest 1,000
- No emojis — they signal automation on LinkedIn outreach
- No weak phrases: "I believe", "just checking in", "following up", "circling back"; no AI-opener clichés ("I hope this finds you well", "I came across your profile")
- One idea per message — never stack
- One question maximum per message — a second question overwhelms and drops replies
- Short sentences — conversational rhythm, not structured prose
- Tone: warm, direct, human — like a peer reaching out, not a salesperson
- Never start with a question — open with an observation or a statement
- Read aloud test: must sound like something you'd actually say to someone
- **The Human Writing Test (final gate):** "Would a real salesperson send this exact message from their personal account, unedited?" If no, rewrite before delivering

### LinkedIn-specific tone calibration by seniority

| Seniority | Tone | Opening move | What they respond to |
|---|---|---|---|
| VP / C-suite | Peer-to-peer, brief, direct | Strategic observation about their world | Insight that reframes something they think they know |
| Manager | Practitioner, specific, grounded | Name a friction they live with daily | Recognition that someone understands their real situation |
| IC | Honest, casual, collegial | Hyper-specific daily moment | Feeling seen by someone who gets their job |

---

### MESSAGE 1 — Warm Conversation Opener

**Purpose:** Start a real conversation. Show you know something about their world.
No pitch. No product. No CTA to book a call.
The goal is one thing: get a reply.

**Structure:**
```
[Opening — observation or statement about their world, 10–15 words, not a question]
[1–2 sentences — develop the observation, show you understand their context]
[Soft close — a genuine question or open door, not a meeting request]
```

**What a great Message 1 does:**
- Feels like it was written specifically for them (even if lightly templated)
- Names something real about their role, industry, or situation
- Asks one genuine question they can answer in 2 sentences
- Makes them think "this person gets it" — not "this is a bot"

**Opening patterns (no question, observation-first):**

*Profile signal-based (strongest):*
- "Saw your post about [topic] — [one-sentence genuine reaction or observation]."
- "[Company] just [signal]. That shift usually brings [specific challenge] to the surface."
- "Your move to [new role] at [company] caught my attention — [observation about the challenge of that transition]."

*Tension-based (when no signal available):*
- "Most [role]s at [company stage] are dealing with [specific tension] right now."
- "[Industry] is going through [shift] — the [function] impact is usually the last thing to get addressed."
- "There's a version of [problem] that shows up consistently for [role]s at [company type]."

**Soft close options (Message 1):**
- "Curious how you're thinking about [topic] at [company]?"
- "Is [challenge] something that's come up for your team?"
- "How are you approaching [topic] right now?"

**What Message 1 must NOT include:**
- Your company name
- Your product or solution
- Any mention of a call or meeting
- Any version of "I wanted to reach out because..."
- More than one question

---

### MESSAGE 2 — Value Add + Soft Next Step

**Purpose:** If they replied → continue the conversation naturally and bridge toward a call.
If no reply → try a completely new angle with a concrete value offer.

**Two versions to write:**

#### Version A — They replied (conversation continuation)
Build on what they said. Acknowledge their response briefly. Deepen one element.
Then offer something concrete — a resource, an insight, or a soft meeting suggestion.

**Structure:**
```
[1 sentence — acknowledge what they said, show you read it]
[1–2 sentences — add something new: a resource, a data point, a relevant observation]
[Soft CTA — a resource offer or a low-friction meeting suggestion]
```

**CTA options for Version A:**
- "Happy to share how [similar company type] approached this — worth a 15-minute call?"
- "I have [day] or [day] free if you want to compare notes."
- "Sending you something relevant — let me know if useful."

#### Version B — No reply (new angle bump)
Do NOT reference Message 1. Fresh start with a different angle.
Give something with genuine value — a resource, a non-obvious insight, a relevant story.
End with the softest possible CTA.

**Structure:**
```
[Opening — completely new angle, different pain or lens, 10–15 words]
[1–2 sentences — develop the new angle briefly]
[Value offer — a resource or insight they can use now, no ask attached]
[Optional soft CTA — if it fits naturally]
```

**New angle options for Version B:**
- Switch from their team's pain to their personal credibility / career lens
- Switch from current pain to a market or timing trigger
- Switch from the problem to a resource that helps regardless of your product
- Reference a relevant insight, trend, or framework in their industry

**CTA options for Version B:**
- "No pressure — just thought this might be useful given [their context]."
- "Worth a quick conversation if [topic] is on your radar?"
- "Happy to share more if relevant — [day] or [day] work?"

---

## Phase 4 — Output Format

---

### LINKEDIN SEQUENCE
**Target:** [Title] | [Industry / Company size]
**Seniority:** [VP / Manager / IC]
**Angle:** [One sentence]
**Profile signal used:** [Signal or "none — tension-based"]
**Variables:** [List or "none"]

---

**MESSAGE 1** *(send immediately after connection accepted)*

[Body — 40–70 words]

---

**MESSAGE 2A** *(if they replied — send within 24h of their reply)*

[Body — 40–70 words]

---

**MESSAGE 2B** *(if no reply — send 3–5 days after Message 1)*

[Body — 40–70 words]

---

### SEQUENCE NOTES
- **M1 angle:** [What observation or tension it opens with and why]
- **M2A strategy:** [How it builds on a reply naturally]
- **M2B new angle:** [What different entry point it uses]
- **Tone calibration:** [Why this tone fits this seniority and platform]
- **What to A/B test:** [One specific element worth testing — M1 opening line or M2B angle]

### MULTICHANNEL NOTE
If this prospect is also being contacted by email:
- LinkedIn M1 should reference a different pain than Email 1 (avoid redundancy)
- If they reply on LinkedIn → pause the email sequence
- LinkedIn works best as a warmer channel — let it lead on tone, let email lead on depth

---

## LinkedIn Character Reference

| Format | Limit | Notes |
|---|---|---|
| Connection note | 300 characters | Optional — often better without. If used, keep it to 1–2 sentences |
| DM (standard) | No hard limit | Self-limit to 40–70 words; Message 1 to ≤60 words and 3–5 sentences |
| InMail | 2000 characters | Not covered by this skill |

If the outreach is sent as a multi-part message bundle, hold each part to 1–2 sentences.

---

## Accuracy Rules

- ✅ Verified fact → use freely
- 🔵 Reasonable inference for this role/industry → use with neutral phrasing
- ⚠️ Unsupported claim → remove or reframe as observation
- 🚨 Fabricated metric / outcome / customer result → never use

Safe social proof: "Companies like [Name]..." with no outcome claimed.
Never reference a resource, asset, or case study not explicitly provided.

---

## Enginy Wiring

The finished 2-message sequence maps directly onto `create_campaign` steps:

1. **`linkedin_connection`** — the connection request that precedes this sequence. Set
   `waitForAcceptance` (`unit: days`, integer ≥ 1) to branch the campaign on whether the
   prospect accepts:
   - `onAccepted` → continue into Message 1 (a `linkedin_message` step)
   - `onNotAccepted` → route to a fallback (e.g. switch to email, or `end`)
2. **Message 1** → a `linkedin_message` step with `content` set to the Message 1 body.
3. **The 3–5 day wait before Message 2** → the step-level `delay` field (`value` + `unit`)
   on the Message 2 step, not a separate delay step type.
4. **Message 2A / 2B branching** → best modeled with a `condition` step
   (`has_been_contacted` or a reply-based condition available in the workspace) after
   Message 1, so the accepted-and-replied path gets 2A and the no-reply path gets 2B.
5. **Optional voice note step** — Enginy also supports `linkedin_voice_message` steps
   (text synthesized to speech via a `voiceId`). Call `get_voices` first to list valid
   voice IDs before adding one — use this only where `outbound-campaign-architect`'s
   guidance on audience fit (informal, tech/startup, under ~35) supports it.

Once the steps are mapped, offer to build the campaign via the `launch-campaign` skill
rather than hand-assembling the `create_campaign` payload in this skill.

## Enginy MCP tools used
- `get_a_single_contact`
- `get_voices`
- `create_campaign`

## Important Notes
- `waitForAcceptance.unit` must be `days` and `value` must be a whole number ≥ 1 — Enginy
  rejects fractional or sub-day acceptance windows.
- This skill never spends credits — it only drafts copy. `get_voices` and `create_campaign`
  are read/draft operations; nothing sends until the campaign is explicitly activated
  (`launch-campaign` owns that step).
- Don't invent a `voiceId` — always confirm it exists via `get_voices` first.

## Examples

**1. No prior angle work.** User pastes a LinkedIn profile summary and asks for a
sequence with no angle skill run yet. Infer the strongest angle directly from the profile
signal in Phase 1, or offer to run `campaign-angle-finder` first if the angle isn't obvious.

**2. Named prospect with existing data.** User says "write the LinkedIn sequence for
Priya at Delta Ops". Call `get_a_single_contact` to check for any stored variables
(role, signal) before asking the user to re-describe her.

**3. Build and launch.** After the sequence is approved, user says "set this up as a
campaign". Map Message 1/2A/2B onto `linkedin_connection` (with `waitForAcceptance`) →
`linkedin_message` steps per the Enginy Wiring section, then hand off to `launch-campaign`
to actually create and activate it.

## Troubleshooting

| Symptom | Likely cause | Fix |
|---|---|---|
| Message 1 reads like a cold email | Doctrine (Phase 2) skipped, email tone carried over | Cut to 40–70 words, remove any product/company mention, open with an observation not a pitch |
| Unsure whether to use Message 2A or 2B | Reply status wasn't tracked | Ask the user whether the prospect replied; default to 2B (no-reply, new angle) if unknown |
| `create_campaign` rejects `waitForAcceptance` | Used hours/minutes instead of days, or a non-integer value | Set `unit: "days"` and an integer `value` ≥ 1 |
| Voice note step feels out of place | Audience isn't a fit (40+, traditional industry) | Skip `linkedin_voice_message`; use a text `linkedin_message` instead |
| User wants to reuse an angle from another skill | `linkedin-outbound-angle` or `campaign-angle-finder` output wasn't pulled in | Ask for or reference their output directly — don't re-derive the angle from scratch |

SHA-256: 63d6ddfec2f09b81de855167447729ff0d95db6a371cd139f3b653657ee05aa7