← 返回 Skills 市场
10madh

LinkedIn DM

作者 10Madh · GitHub ↗ · v1.0.0
cross-platform ⚠ suspicious
913
总下载
1
收藏
6
当前安装
1
版本数
在 OpenClaw 中安装
/install linkedin-dm
功能描述
Send personalized LinkedIn direct messages to a list of existing 1st-degree connections via browser automation. Use when the user wants to message LinkedIn connections with AI-personalized outreach — e.g. nurturing leads, following up after events, reconnecting with contacts, or announcing something. Takes a data file (CSV/TSV) or plain list with connection names and companies, asks for outreach context/goal, generates a tailored message per person, and sends each one via browser automation. Handles message compose flow, character limits, and incremental status tracking.
使用说明 (SKILL.md)

LinkedIn DM

Sends personalized LinkedIn messages to existing 1st-degree connections. Each message has:

  • A personalized opening unique to each person (based on their profile + relationship to the sender)
  • A consistent product/pitch section confirmed once by the user and reused for all messages

⚠️ Pre-flight Checklist — Confirm Before Starting

1. Connection List

Ask the user for their data file or list. Must include (or be added):

  • Person Name — full name
  • Company/Role — their current company or role
  • LinkedIn URL — optional but helpful
  • Message Status — column for tracking (add if missing)

If only a plain list is provided, offer to convert to TSV.

2. Read Sender's LinkedIn Profile (mandatory)

Before writing any messages, navigate to /in/me/ and read the sender's profile:

  • Name and current role/company
  • Career history — companies, roles, years
  • Education — college, degree, batch years
  • Location

Store these facts. They are used to identify relationship hooks with each connection.

3. Confirm the Pitch (once, upfront)

Ask the user:

"What's your pitch / product message? This will be the consistent part of every message. Describe it in 1–2 sentences."

Then draft a polished pitch section (2–4 sentences max, punchy and clear). Show it to the user and get explicit approval. Do not start sending until the pitch is confirmed.

Example prompt: "Here's the pitch I'll use for everyone — confirm or edit:

'I'm building an AI calling agent — you give it a phone number + context, and it handles the call end-to-end. Think customer follow-ups, research calls, vendor coordination — anything phone-based that eats into your day. Happy to show you a demo if this sounds useful.'"

4. Browser Setup

  • Option A — Chrome Browser Relay (profile="chrome"): extension attached to LinkedIn tab (badge ON) — recommended for flagged accounts
  • Option B — OpenClaw Isolated Browser (profile="openclaw"): openclaw-managed Chrome, LinkedIn logged in

5. CRM Sheet

Ask the user for a Google Sheet ID/URL to log outreach results. If they don't have one, offer to set one up (create tab + write headers). Confirm gog is authenticated (gog auth list).

If the user skips this, fall back to local linkedin_dm_progress.json but remind them the follow-up skill needs the sheet.

6. Ready Check

Only proceed once:

  • ✅ List is ready
  • ✅ Sender profile has been read
  • ✅ Pitch is confirmed by user
  • ✅ Browser is open with LinkedIn logged in
  • ✅ Sheet ID confirmed (or sidecar fallback acknowledged)

Relationship Analysis (per person)

Before writing a message, compare the connection's profile against the sender's profile to find the strongest hook. Use this hierarchy — pick the highest that applies:

Priority Hook Example opener
1 Same company (current or past) "You and I both spent time at CRED…"
2 Same college + overlapping years "Fellow BITS Goa 2018 batch here…"
3 Same college (different years) "BITS connect here — saw your journey from…"
4 Same industry/function "Both been in fintech/product for a while…"
5 Mutual connection "We're both connected to [Name]…"
6 Their work context (no personal hook) "Seen what you've built at [Company]…"

Combine the hook with a line about their current work to show you know what they do.


Message Structure

Send as two separate messages per person, back to back:

Message 1 — Personalized opener (unique per person)

[Relationship hook — 1 sentence]
[Acknowledgement of their work/role — 1 sentence]

Target: 100–180 chars. Feels like a genuine reach-out from someone who knows them.

Message 2 — Pitch (identical for everyone, confirmed upfront)

[Product description — 1–2 sentences]
[Relevant use case for their role — 1 sentence]
[Soft CTA — 1 sentence]

Target: 150–250 chars. Clear, punchy, no filler.

Why two messages?

  • Opener lands first — they see it before the pitch, feels more personal
  • Pitch is clearly a separate thought, not buried at the end
  • Mirrors how a human would actually message a connection

Fallback: If sending two messages is technically difficult (e.g. bubble re-focusing issues), use Shift+Enter twice between the opener and pitch to create a paragraph break within a single message.

Do not:

  • Open with "I hope you're well" or "I came across your profile"
  • Use the same opening for multiple people
  • Change the pitch section per person

Batch Preview Before Sending

Generate messages for the entire list first. Present them in a table:

Name Company Relationship Hook Used Message Preview
Shorya Saini Razorpay Same BITS batch Hey Shorya, BITS Goa 2018 batch…

Get user approval on the full batch before opening the browser. Allow edits per row.


Sending Flow (Per Person)

  1. Navigate to /feed/ — mandatory, no exceptions, no skipping
  2. Wait 3–5 seconds
  3. Search connections at linkedin.com/mynetwork/invite-connect/connections/ — type name in "Search by name"
  4. Handle results:
    • 1 match → confirm name + headline → click to open profile
    • Multiple matches → show user, ask which one
    • 0 matches → mark Not a Connection, skip
  5. Read their profile if not already done (for personalisation)
  6. Click Message button on their profile
  7. Send Message 1 — personalized opener only, send it
  8. Send Message 2 — pitch only, send it immediately after
  9. Confirm both delivered
  10. Log to CRM sheet — append row via gog sheets append with all fields (see CRM Tracking section)

See references/browser-workflow.md for exact browser automation steps.


Status Values

Status Meaning
Sent Message delivered this session
Already Messaged Recent conversation exists — skip
Not a Connection No Message button or not in connections search
Profile Not Found Could not identify the right person
Skipped User chose to skip
Failed Browser error — retry next session

Anti-Detection Rules

  • /feed/ before every single profile — non-negotiable
  • 3–5 second wait after feed loads
  • Max 15–20 messages per session
  • Stop immediately if LinkedIn warns about messaging rate — tell the user

CRM Tracking — Google Sheet

After each message is sent, append a row to a Google Sheet. This sheet is the source of truth for all outreach — current session and future follow-up.

Sheet Setup

Ask the user for a Google Sheet ID or URL at the start of the session (or offer to create a new one). The sheet should have a tab named Outreach with these columns:

Col Field Notes
A Date Sent ISO date, e.g. 2026-02-13
B Person Name Full name
C Role / Title Their current headline from LinkedIn
D Company Current company
E LinkedIn URL Profile URL
F Relationship Hook What hook was used (e.g. "Same batch BITS Goa 2018", "Both at CRED 2022–23")
G Opener Sent Exact text of Message 1
H Pitch Sent Exact text of Message 2
I Campaign Short label for this batch (e.g. "AI Calling - Feb 2026")
J Status Always Sent when first logged — updated by follow-up skill
K Notes Anything notable (prior conversation, context, mutual connection used)
L Last Updated Timestamp of last status change

Column I (Status) lifecycle — only Sent is written by this skill. The follow-up skill will update to: Replied · Call Scheduled · Demo Done · Follow Up Sent · No Response · Closed Won · Closed Lost

Appending a Row

After each message pair is sent, run:

gog sheets append \x3CSHEET_ID> "Outreach!A:L" \
  --values-json '[["\x3Cdate>","\x3Cname>","\x3Crole>","\x3Ccompany>","\x3Curl>","\x3Chook>","\x3Copener>","\x3Cpitch>","\x3Ccampaign>","Sent","\x3Cnotes>","\x3Ctimestamp>"]]' \
  --insert INSERT_ROWS

First-Time Setup

If no sheet exists yet, tell the user:

"I'll need a Google Sheet to track outreach. Share an existing sheet ID/URL, or I can create one with the right columns."

To create a new sheet, use Drive (or ask user to create one and share the ID). Then write the header row:

gog sheets update \x3CSHEET_ID> "Outreach!A1:L1" \
  --values-json '[["Date Sent","Person Name","Role / Title","Company","LinkedIn URL","Relationship Hook","Opener Sent","Pitch Sent","Campaign","Status","Notes","Last Updated"]]' \
  --input USER_ENTERED

Local Sidecar (fallback)

If Google Sheets is not set up, fall back to a local linkedin_dm_progress.json:

{
  "campaign": "AI Calling - Feb 2026",
  "pitch": "confirmed pitch text",
  "rows": [
    {
      "date": "2026-02-13",
      "name": "Shorya Saini",
      "role": "Senior Analytics Specialist",
      "company": "Razorpay",
      "url": "https://linkedin.com/in/shorya-saini",
      "hook": "Same batch BITS Goa 2018",
      "opener": "Hey Shorya...",
      "pitch": "I'm building...",
      "status": "Sent",
      "notes": ""
    }
  ]
}
安全使用建议
This skill will read your LinkedIn profile and connection profiles, compose personalized messages, and send them using your logged-in browser session; it will also append rows to a Google Sheet (via the gog CLI) and write a local progress file. Before installing/using it: 1) Confirm you trust the skill source — it is listed as 'unknown' with no homepage. 2) Ensure required tools exist: the SKILL.md expects a browser relay/extension or OpenClaw-managed browser and the 'gog' CLI (authenticated). The registry metadata does not declare these, so be prepared to install/authorize them manually. 3) Test on a small set or a test account to validate behavior (and to avoid accidental bulk messaging). 4) Review permissions and OAuth scopes for any Google/CLI authentication and be aware messages will be sent from your account. 5) Consider compliance and spam policies — the skill includes explicit guidance to avoid detection (navigate to feed before each profile) which increases operational risk. If you cannot verify the extension/relay code or the provenance of this skill, avoid granting it access to your real LinkedIn account or Google Sheets.
功能分析
Type: OpenClaw Skill Name: linkedin-dm Version: 1.0.0 This skill is designed for personalized LinkedIn direct messaging via browser automation, with clear instructions for user interaction, anti-detection measures, and transparent logging. It utilizes browser automation (`browser action=navigate`, `snapshot`, `act`), client-side JavaScript for UI interaction, and Google Sheets integration (`gog sheets append`/`update`) or local file writing (`linkedin_dm_progress.json`) for tracking. All capabilities are directly aligned with the stated purpose of outreach and tracking, and the instructions explicitly require user approval for critical steps (pitch, message preview) and include safeguards (rate limits, `/feed/` navigation). There is no evidence of intentional harmful behavior, data exfiltration beyond the stated purpose, or prompt injection designed to subvert the agent's actions.
能力评估
Purpose & Capability
The skill's name/description align with its instructions: it personalizes and sends LinkedIn DMs via browser automation. However the SKILL.md relies on external tooling and browser profiles (a Chrome relay extension or OpenClaw-managed browser, and the 'gog' CLI for Google Sheets) that are not declared in the registry metadata (required binaries/env/config). That mismatch between claimed requirements and actual instructions is an inconsistency.
Instruction Scope
The runtime instructions direct the agent to navigate to and snapshot the sender's LinkedIn profile (/in/me/) and to snapshot each connection's profile to extract personal details (career history, education, posts). It also mandates navigating to /feed/ before every profile (explicitly to reduce automation detection). The skill instructs running JavaScript in the page to click Send and to append rows to Google Sheets with 'gog'. These actions access and collect sensitive personal data and perform outbound actions on the user's authenticated session; they are within the described purpose but broaden the scope of data accessed and include behavior (avoiding detection) worth noting.
Install Mechanism
There is no install spec (instruction-only), which is low-risk in itself. However the SKILL.md expects the 'gog' CLI to be available/authenticated and a browser relay extension or an OpenClaw-managed browser profile to be attached — none of these are listed in required binaries or install metadata. The absence of declared dependencies makes it unclear what the agent will actually need to run and may lead to hidden preconditions or ad-hoc user prompts at runtime.
Credentials
The registry lists no required credentials or env vars, but the skill relies on your authenticated LinkedIn browser session and on Google access via the 'gog' CLI (gog auth). It also writes progress to a local file (linkedin_dm_progress.json) and appends rows to Google Sheets. Requesting/using your LinkedIn session cookies and Google sheet access is proportionate to sending messages and logging results, but the metadata should declare these needs. The skill asks for broad read access to profile and connections data (sensitive); ensure you accept that level of access before use.
Persistence & Privilege
The skill does not request permanent inclusion (always:false) and does not modify other skills. It will write per-run logs locally and append to a Google Sheet. A remaining risk is operational: autonomous invocation of this skill (the platform default) would allow it to send messages on your behalf; because the skill can send many messages, users should verify invocation controls and approvals before enabling autonomous runs.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install linkedin-dm
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /linkedin-dm 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.0
Initial release: personalized LinkedIn DMs via browser automation. Two-message structure (opener + pitch), connections-search for 1st-degree verification, sender profile reading for relationship hooks (shared company/college/batch), one-time pitch confirmation, Google Sheets CRM tracking with full outreach log and status lifecycle for follow-up skills.
元数据
Slug linkedin-dm
版本 1.0.0
许可证
累计安装 6
当前安装数 6
历史版本数 1
常见问题

LinkedIn DM 是什么?

Send personalized LinkedIn direct messages to a list of existing 1st-degree connections via browser automation. Use when the user wants to message LinkedIn connections with AI-personalized outreach — e.g. nurturing leads, following up after events, reconnecting with contacts, or announcing something. Takes a data file (CSV/TSV) or plain list with connection names and companies, asks for outreach context/goal, generates a tailored message per person, and sends each one via browser automation. Handles message compose flow, character limits, and incremental status tracking. 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 913 次。

如何安装 LinkedIn DM?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install linkedin-dm」即可一键安装,无需额外配置。

LinkedIn DM 是免费的吗?

是的,LinkedIn DM 完全免费(开源免费),可自由下载、安装和使用。

LinkedIn DM 支持哪些平台?

LinkedIn DM 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 LinkedIn DM?

由 10Madh(@10madh)开发并维护,当前版本 v1.0.0。

💬 留言讨论