linkedin-engagement

$npx mdskill add alirezarezvani/claude-skills/linkedin-engagement

From a standing start your posts reach almost nobody, and publishing harder does not fix it. A substantive comment on a post that already has an audience puts your name, headline, and a paragraph of thinking in front of people already reading about your subject, for six minutes of work — the cheapest distribution on the platform, and the most badly used.

SKILL.md

.github/skills/linkedin-engagementView on GitHub ↗
---
name: linkedin-engagement
description: "Use for LinkedIn comments, connection notes, DMs or outreach plans, or checking outreach volume is safe. Plans targets with comment_target_planner.py, drafts notes with outreach_message_builder.py and checks limits with outreach_volume_guard.py."
license: MIT
metadata:
  version: 1.0.0
  author: Alireza Rezvani
  category: marketing
  updated: 2026-08-25
---

# LinkedIn Engagement — comments first, outreach second

From a standing start your posts reach almost nobody, and publishing harder does not fix it.
A substantive comment on a post that already has an audience puts your name, headline, and a
paragraph of thinking in front of people already reading about your subject, for six minutes
of work — the cheapest distribution on the platform, and the most badly used.

**Nothing here sends anything** — no credentials, no API calls. Automated connecting,
messaging, commenting, liking, and sharing are prohibited by User Agreement §8.2.

## Workflow

**1. Build the comment roster.** Name 8-12 accounts they would read anyway, with audience
overlap and rough size tier, then:

```bash
python3 scripts/comment_target_planner.py --account "Priya Raman:5:4:larger" \
  --account "Tomas Lind:5:3:peer" --minutes-per-day 18 --output human
```

Tiers are `huge` (10x+, crowded), `larger` (2-10x, the best ratio), `peer` (~1x, where
reciprocity compounds), `smaller` (goodwill). The roster caps any account at twice a week —
commenting daily on one person reads as following them around — and keeps the huge tier under
half of any day. It builds the roster, never the comments: a generated comment is exactly
what §8.2 names, and it is recognisable anyway.

**2. Outreach — check the volume before writing anything.**

```bash
python3 scripts/outreach_volume_guard.py --invites 20 --pending 5 --minutes 120 \
  --acceptance 0.42 --output human
```

Exit 0 safe / 2 tight / 3 over a cap or the time budget / **4 refused** above 40 invitations
a day, because nobody reads that many profiles and writes that many specific lines. Pending
invitations count against the weekly limit (observed around 100), and acceptance below 20% is
a stop signal — it is the pattern LinkedIn reviews, and the targeting is wrong.

**3. Write one message, for one person.**

```bash
python3 scripts/outreach_message_builder.py --type connection \
  --recipient "Priya" --specific-line "..." --reason "..." --output human
```

It refuses without a person-specific line, refuses an ask in a first-touch connection note,
and enforces the 200-character cap (300 with `--premium`). In large third-party samples a
note barely moves acceptance (~26.4% either way) but roughly doubles the post-accept reply
rate: **the note earns the conversation, not the meeting.**

**4. The order that works.** Comment on their work for two weeks. Then invite, referencing
something specific from that reading. Then, after acceptance and a pause, ask once, small.

## Rules

- **Nothing is auto-sent.** Ever. The user pastes and sends, one person at a time.
- **No engagement pods.** Coordinated reciprocal commenting is inauthentic engagement under
  §8.2 regardless of who pressed the key. Build a real reciprocity list instead.
- **Every message carries a line that could only have been written for that person.**
- **Never paste the same comment twice.** Identical comments at volume are the definition of
  the thing §8.2 prohibits.
- **One follow-up, a week later, only with something new to say.**
- **Agreement is not a comment.** Add the counter-example, the number, or the case where it
  breaks — or skip the slot.

## Scripts

| Script | Role |
|---|---|
| [`scripts/comment_target_planner.py`](scripts/comment_target_planner.py) | Weekly roster from scored accounts, inside a time budget, with per-account and per-tier caps. |
| [`scripts/outreach_message_builder.py`](scripts/outreach_message_builder.py) | Assembles one message; refuses templates, premature asks, and 14 dead phrases. |
| [`scripts/outreach_volume_guard.py`](scripts/outreach_volume_guard.py) | Caps invitations against the observed weekly limit, pending backlog, acceptance floor, and the hours available. |

## References and assets

- [`references/comment_strategy.md`](references/comment_strategy.md) — tiers, what a comment competes on, pods, replying to your own posts (7 sources)
- [`references/outreach_ethics_and_benchmarks.md`](references/outreach_ethics_and_benchmarks.md) — the benchmark numbers with their provenance, and the personalisation claim corrected (7 sources)

- [`assets/outreach_worksheet.md`](assets/outreach_worksheet.md) — fillable per-person prep sheet
- [`assets/example_outreach.json`](assets/example_outreach.json) — input shape for the builder

## Distinct from

- **`linkedin-content`** — writes posts. A comment is a different craft on a different budget.
- **`marketing-skill/cold-email`** — email. Different channel, law, and caps.
- **`business-growth/`, `commercial/`** — sales process and deal economics, not networking.

---
**Version:** 1.0.0

More from alirezarezvani/claude-skills

SkillDescription
a11y-auditUse for any accessibility audit or a11y fix (WCAG 2.2 A/AA, color contrast, compliance report, CI check) in React, Next.js, Vue, Angular, Svelte or HTML. Scans with a11y_scanner.py and checks contrast with contrast_checker.py, then fixes and re-verifies.
ab-test-setupUse before planning or launching any A/B, split or multivariate test, or when asked if a result is significant. Sizes the test with sample_size_calculator.py and writes the hypothesis, metric and stop rule first, so it is not called early on noise.
access-lifecycleUse when preparing or running a user access review, checking that leavers lost their access, finding orphaned or ownerless service accounts, answering an auditor's access-control request for SOC 2, ISO 27001, PCI DSS, HIPAA or NIST 800-53, or checking whether a finished review campaign will hold up. Diffs the HR roster against account exports, tests the campaign for coverage, self-review, unremoved revokes and rubber-stamping, and maps every exception to the controls it breaks.
ad-creativeUse for any ad copy request (RSA headlines, Meta, LinkedIn or TikTok ads, bulk variations), before writing. Checks every line against platform character limits and policy with ad_copy_validator.py. Campaign strategy and budgets: paid-ads.
adversarial-reviewerTough, critical review of a diff or PR before merge, through hostile reviewer personas that catch shared blind spots. Use whenever the user wants a change torn apart, a harsh second opinion, or a self-review felt too agreeable.
aeoUse when content should be cited by ChatGPT, Perplexity, Claude or Gemini (answer engine optimization), before rewriting it. Scores E-E-A-T and structure with aeo_audit.py, rewrites with aeo_optimizer.py and logs citations with citation_tracker.py.
agent-decision-receiptsUse when an autonomous agent takes a side-effecting action (deploy, delete, pay, grant access) that may need proving later, or for EU AI Act Art. 12 record-keeping. Builds a tamper-evident signed receipt with build_action_manifest.py and verifies it.
agent-designerDesign multi-agent systems (supervisor, swarm, pipeline) and tool schemas; find bottlenecks in run logs. Use whenever agents split work or a run is slow or costly. Not for Claude Code workflow files (workflow-builder).
agent-harnessUse when an agent should drive a goal in one of this repo's domains to a verified close, before starting the work. Compiles the goal into a task plan with goal_compiler.py and runs it through loop_controller.py, which verifies each task, caps retries and escalates.
agent-launcher-orchestratorUse when someone wants to build, launch, grade or schedule a Claude Managed Agent in their own Anthropic account ('build me an agent', 'run this nightly'). Reads the session goal, routes with goal_router.py and compiles the loop with loop_compiler.py.