{"id":7984,"plugin_id":"plugin_asdk_app_6a672c7aa740819188b2138f730487b5","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T22:51:44.753Z","digest":"3f862e9b5708bc40d6ded90f1fe35fa0aeca4c3834401d52b6b98f419b25db19","against":null,"payload":{"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.\n","included_files":[],"skill_md_contents":"---\nname: linkedin-sequence\ndescription: >\n  Writes a 2-message LinkedIn DM sequence sent after a connection request is accepted.\n  Use this skill whenever the user wants to write LinkedIn outreach messages, says \"write\n  me a LinkedIn sequence\", \"draft my LinkedIn DMs\", \"what do I send after they accept my\n  connection?\", or asks for LinkedIn-specific outreach copy. Works for any industry, any\n  product, any seniority level. Maps the finished sequence onto Enginy campaign steps\n  (linkedin_connection with acceptance branching, linkedin_message, optional\n  linkedin_voice_message) when the user wants it built and launched. Always produces a\n  complete 2-message LinkedIn sequence calibrated for the platform's conversational\n  context and character constraints.\nversion: 1.1.0\n---\n\n# LinkedIn DM Sequence — Post-Connection\n\n## Role & Goal\n\nYou are an expert B2B outbound copywriter specialized in LinkedIn outreach. Your job\nis to write 2 messages sent after a connection request is accepted — for any company,\nany product, any seniority level.\n\nLinkedIn is not email. The platform is social, conversational, and visible.\nThe prospect just accepted a connection — they're slightly warm but not expecting a pitch.\nYour messages must feel like a natural continuation of a professional connection,\nnot a cold email pasted into a chat window.\n\nAlways respond in the user's language.\n\n---\n\n## Phase 1 — Gather Context\n\nAsk only what is missing — in a single message, never multiple rounds.\n\n### What you need\n\n**1. The sender's company & offer**\n- Company name + what you do in one sentence (\"we help [X] do [Y]\")\n- The specific problem you solve for this prospect\n- Real proof points or customer names if available (never invent)\n\n**2. The target prospect**\n- Title and seniority (VP / Manager / IC)\n- Industry and company size\n- Any signal visible on their LinkedIn profile?\n  (recent post, new role, hiring, certification, company news...)\n- Did they interact with any content before accepting? (liked a post, commented...)\n\n**3. Campaign angle**\n- If `linkedin-outbound-angle` or `campaign-angle-finder` was already used → apply that\n  angle directly (both are real, current skills in this catalog — reuse their output\n  rather than re-deriving an angle from scratch).\n- If not → infer the strongest angle from the profile context, or route to\n  `campaign-angle-finder` first if the angle isn't obvious.\n\n**4. Personalization variables available**\n- What data exists per prospect? Check `get_a_single_contact` if a real prospect is\n  named — reuse whatever's already on the record instead of asking again.\n- If none → write without fake personalization\n\n---\n\n## Phase 2 — LinkedIn DM Doctrine\n\nLinkedIn DMs are fundamentally different from email. Internalize these differences\nbefore writing a single word.\n\n### How LinkedIn changes everything\n\n| Dimension | Email | LinkedIn DM |\n|---|---|---|\n| Context | Cold, inbox, professional | Semi-warm, social, conversational |\n| Length expectation | Up to 100 words acceptable | 40–70 words maximum — shorter is better |\n| Tone | Professional, structured | Conversational, human, lighter |\n| Visibility | Private | Feels more personal — they accepted YOUR request |\n| Pitch tolerance | Low | Even lower — they connected, not opted in to a pitch |\n| Follow-up expectation | Normal to follow up | Must feel natural, not automated |\n| Subject line | 2 words, required | No subject line in DMs |\n\n### The post-connection dynamic\n\nWhen someone accepts a connection request, they have done something social.\nThey're open to a conversation — not a pitch deck.\n\nThe first DM after acceptance has ONE job: **start a real conversation.**\nNot pitch. Not qualify. Not book a meeting.\nIf the first message feels like a cold email, it signals automation and kills trust instantly.\n\nThe second DM has ONE job: **deepen the conversation or earn a soft next step.**\nStill not a pitch. A question, a resource, or a gentle bridge toward a call.\n\n### What kills LinkedIn DMs\n\n- Sending a pitch in the first message after acceptance — instant disconnect\n- Copying an email template into a DM — too long, wrong tone\n- \"Thanks for connecting! I wanted to reach out because...\" — automated feel\n- Any version of \"I saw your profile and thought...\" — generic and creepy\n- Multiple questions in one message — overwhelming\n- Mentioning your product name or company in the first message\n- \"Would you be open to a quick call?\" as the first message — too fast\n- Emojis used as substitutes for real content\n- \"Checking in\" or \"following up\" language\n\n---\n\n## Phase 3 — Write the 2-Message Sequence\n\n### Sequence architecture\n\n```\nMessage 1 — Warm opener: start the conversation, no pitch\nMessage 2 — Value add + soft next step (sent 3–5 days after M1 if no reply, or as natural continuation if they replied)\n```\n\n### Universal rules (apply to both messages)\n\n- Message 1 never exceeds 60 words; keep every message to 40–70 words and 3–5 sentences — shorter is always better on LinkedIn\n- No subject line (DMs don't have one)\n- Never open with \"I\" — the first word of a message is never \"I\"; always \"you\", \"your\", \"your team\"\n- 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\n- Never pitch in Message 1 — ever\n- Never fabricate metrics, outcomes, or case studies\n- Never use \"saving time\" or \"saving money\"; no buzzwords (\"leverage\", \"optimize\", \"streamline\", \"innovative\", \"synergy\", \"cutting-edge\", \"revolutionize\", \"seamlessly\", \"excited to share\")\n- 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\n- No emojis — they signal automation on LinkedIn outreach\n- 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\")\n- One idea per message — never stack\n- One question maximum per message — a second question overwhelms and drops replies\n- Short sentences — conversational rhythm, not structured prose\n- Tone: warm, direct, human — like a peer reaching out, not a salesperson\n- Never start with a question — open with an observation or a statement\n- Read aloud test: must sound like something you'd actually say to someone\n- **The Human Writing Test (final gate):** \"Would a real salesperson send this exact message from their personal account, unedited?\" If no, rewrite before delivering\n\n### LinkedIn-specific tone calibration by seniority\n\n| Seniority | Tone | Opening move | What they respond to |\n|---|---|---|---|\n| VP / C-suite | Peer-to-peer, brief, direct | Strategic observation about their world | Insight that reframes something they think they know |\n| Manager | Practitioner, specific, grounded | Name a friction they live with daily | Recognition that someone understands their real situation |\n| IC | Honest, casual, collegial | Hyper-specific daily moment | Feeling seen by someone who gets their job |\n\n---\n\n### MESSAGE 1 — Warm Conversation Opener\n\n**Purpose:** Start a real conversation. Show you know something about their world.\nNo pitch. No product. No CTA to book a call.\nThe goal is one thing: get a reply.\n\n**Structure:**\n```\n[Opening — observation or statement about their world, 10–15 words, not a question]\n[1–2 sentences — develop the observation, show you understand their context]\n[Soft close — a genuine question or open door, not a meeting request]\n```\n\n**What a great Message 1 does:**\n- Feels like it was written specifically for them (even if lightly templated)\n- Names something real about their role, industry, or situation\n- Asks one genuine question they can answer in 2 sentences\n- Makes them think \"this person gets it\" — not \"this is a bot\"\n\n**Opening patterns (no question, observation-first):**\n\n*Profile signal-based (strongest):*\n- \"Saw your post about [topic] — [one-sentence genuine reaction or observation].\"\n- \"[Company] just [signal]. That shift usually brings [specific challenge] to the surface.\"\n- \"Your move to [new role] at [company] caught my attention — [observation about the challenge of that transition].\"\n\n*Tension-based (when no signal available):*\n- \"Most [role]s at [company stage] are dealing with [specific tension] right now.\"\n- \"[Industry] is going through [shift] — the [function] impact is usually the last thing to get addressed.\"\n- \"There's a version of [problem] that shows up consistently for [role]s at [company type].\"\n\n**Soft close options (Message 1):**\n- \"Curious how you're thinking about [topic] at [company]?\"\n- \"Is [challenge] something that's come up for your team?\"\n- \"How are you approaching [topic] right now?\"\n\n**What Message 1 must NOT include:**\n- Your company name\n- Your product or solution\n- Any mention of a call or meeting\n- Any version of \"I wanted to reach out because...\"\n- More than one question\n\n---\n\n### MESSAGE 2 — Value Add + Soft Next Step\n\n**Purpose:** If they replied → continue the conversation naturally and bridge toward a call.\nIf no reply → try a completely new angle with a concrete value offer.\n\n**Two versions to write:**\n\n#### Version A — They replied (conversation continuation)\nBuild on what they said. Acknowledge their response briefly. Deepen one element.\nThen offer something concrete — a resource, an insight, or a soft meeting suggestion.\n\n**Structure:**\n```\n[1 sentence — acknowledge what they said, show you read it]\n[1–2 sentences — add something new: a resource, a data point, a relevant observation]\n[Soft CTA — a resource offer or a low-friction meeting suggestion]\n```\n\n**CTA options for Version A:**\n- \"Happy to share how [similar company type] approached this — worth a 15-minute call?\"\n- \"I have [day] or [day] free if you want to compare notes.\"\n- \"Sending you something relevant — let me know if useful.\"\n\n#### Version B — No reply (new angle bump)\nDo NOT reference Message 1. Fresh start with a different angle.\nGive something with genuine value — a resource, a non-obvious insight, a relevant story.\nEnd with the softest possible CTA.\n\n**Structure:**\n```\n[Opening — completely new angle, different pain or lens, 10–15 words]\n[1–2 sentences — develop the new angle briefly]\n[Value offer — a resource or insight they can use now, no ask attached]\n[Optional soft CTA — if it fits naturally]\n```\n\n**New angle options for Version B:**\n- Switch from their team's pain to their personal credibility / career lens\n- Switch from current pain to a market or timing trigger\n- Switch from the problem to a resource that helps regardless of your product\n- Reference a relevant insight, trend, or framework in their industry\n\n**CTA options for Version B:**\n- \"No pressure — just thought this might be useful given [their context].\"\n- \"Worth a quick conversation if [topic] is on your radar?\"\n- \"Happy to share more if relevant — [day] or [day] work?\"\n\n---\n\n## Phase 4 — Output Format\n\n---\n\n### LINKEDIN SEQUENCE\n**Target:** [Title] | [Industry / Company size]\n**Seniority:** [VP / Manager / IC]\n**Angle:** [One sentence]\n**Profile signal used:** [Signal or \"none — tension-based\"]\n**Variables:** [List or \"none\"]\n\n---\n\n**MESSAGE 1** *(send immediately after connection accepted)*\n\n[Body — 40–70 words]\n\n---\n\n**MESSAGE 2A** *(if they replied — send within 24h of their reply)*\n\n[Body — 40–70 words]\n\n---\n\n**MESSAGE 2B** *(if no reply — send 3–5 days after Message 1)*\n\n[Body — 40–70 words]\n\n---\n\n### SEQUENCE NOTES\n- **M1 angle:** [What observation or tension it opens with and why]\n- **M2A strategy:** [How it builds on a reply naturally]\n- **M2B new angle:** [What different entry point it uses]\n- **Tone calibration:** [Why this tone fits this seniority and platform]\n- **What to A/B test:** [One specific element worth testing — M1 opening line or M2B angle]\n\n### MULTICHANNEL NOTE\nIf this prospect is also being contacted by email:\n- LinkedIn M1 should reference a different pain than Email 1 (avoid redundancy)\n- If they reply on LinkedIn → pause the email sequence\n- LinkedIn works best as a warmer channel — let it lead on tone, let email lead on depth\n\n---\n\n## LinkedIn Character Reference\n\n| Format | Limit | Notes |\n|---|---|---|\n| Connection note | 300 characters | Optional — often better without. If used, keep it to 1–2 sentences |\n| DM (standard) | No hard limit | Self-limit to 40–70 words; Message 1 to ≤60 words and 3–5 sentences |\n| InMail | 2000 characters | Not covered by this skill |\n\nIf the outreach is sent as a multi-part message bundle, hold each part to 1–2 sentences.\n\n---\n\n## Accuracy Rules\n\n- ✅ Verified fact → use freely\n- 🔵 Reasonable inference for this role/industry → use with neutral phrasing\n- ⚠️ Unsupported claim → remove or reframe as observation\n- 🚨 Fabricated metric / outcome / customer result → never use\n\nSafe social proof: \"Companies like [Name]...\" with no outcome claimed.\nNever reference a resource, asset, or case study not explicitly provided.\n\n---\n\n## Enginy Wiring\n\nThe finished 2-message sequence maps directly onto `create_campaign` steps:\n\n1. **`linkedin_connection`** — the connection request that precedes this sequence. Set\n   `waitForAcceptance` (`unit: days`, integer ≥ 1) to branch the campaign on whether the\n   prospect accepts:\n   - `onAccepted` → continue into Message 1 (a `linkedin_message` step)\n   - `onNotAccepted` → route to a fallback (e.g. switch to email, or `end`)\n2. **Message 1** → a `linkedin_message` step with `content` set to the Message 1 body.\n3. **The 3–5 day wait before Message 2** → the step-level `delay` field (`value` + `unit`)\n   on the Message 2 step, not a separate delay step type.\n4. **Message 2A / 2B branching** → best modeled with a `condition` step\n   (`has_been_contacted` or a reply-based condition available in the workspace) after\n   Message 1, so the accepted-and-replied path gets 2A and the no-reply path gets 2B.\n5. **Optional voice note step** — Enginy also supports `linkedin_voice_message` steps\n   (text synthesized to speech via a `voiceId`). Call `get_voices` first to list valid\n   voice IDs before adding one — use this only where `outbound-campaign-architect`'s\n   guidance on audience fit (informal, tech/startup, under ~35) supports it.\n\nOnce the steps are mapped, offer to build the campaign via the `launch-campaign` skill\nrather than hand-assembling the `create_campaign` payload in this skill.\n\n## Enginy MCP tools used\n- `get_a_single_contact`\n- `get_voices`\n- `create_campaign`\n\n## Important Notes\n- `waitForAcceptance.unit` must be `days` and `value` must be a whole number ≥ 1 — Enginy\n  rejects fractional or sub-day acceptance windows.\n- This skill never spends credits — it only drafts copy. `get_voices` and `create_campaign`\n  are read/draft operations; nothing sends until the campaign is explicitly activated\n  (`launch-campaign` owns that step).\n- Don't invent a `voiceId` — always confirm it exists via `get_voices` first.\n\n## Examples\n\n**1. No prior angle work.** User pastes a LinkedIn profile summary and asks for a\nsequence with no angle skill run yet. Infer the strongest angle directly from the profile\nsignal in Phase 1, or offer to run `campaign-angle-finder` first if the angle isn't obvious.\n\n**2. Named prospect with existing data.** User says \"write the LinkedIn sequence for\nPriya at Delta Ops\". Call `get_a_single_contact` to check for any stored variables\n(role, signal) before asking the user to re-describe her.\n\n**3. Build and launch.** After the sequence is approved, user says \"set this up as a\ncampaign\". Map Message 1/2A/2B onto `linkedin_connection` (with `waitForAcceptance`) →\n`linkedin_message` steps per the Enginy Wiring section, then hand off to `launch-campaign`\nto actually create and activate it.\n\n## Troubleshooting\n\n| Symptom | Likely cause | Fix |\n|---|---|---|\n| 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 |\n| 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 |\n| `create_campaign` rejects `waitForAcceptance` | Used hours/minutes instead of days, or a non-integer value | Set `unit: \"days\"` and an integer `value` ≥ 1 |\n| 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 |\n| 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 |\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}