linkedin-skills — Claude Code skill: what it does, how to install
Builds an organic LinkedIn presence without automation or bots. It routes your requests across five lanes, covering profile rewrites, strategy, and drafts.
/plugin marketplace add alirezarezvani/claude-skills
/plugin install linkedin@claude-code-skillsWhat linkedin-skills does
The skill acts as an orchestrator for your personal LinkedIn presence. Before drafting anything, it runs scripts/linkedin_policy_gate.py to check the request against platform rules. Requests for scraping, pods, fake proof, or bulk messaging trigger an immediate refusal with a compliant alternative.
Under the hood, the skill uses 17 standard-library Python scripts. It never asks for LinkedIn credentials, calls no APIs, and does not scrape data. Every draft remains text you review and publish yourself. This manual-only design keeps the account safe from restrictions under the platform terms.
Install this skill if you want structured guidance for your personal posting habit. You should skip it if you are looking for automated outreach or scheduling tools.
What it helps with
- rewrite a headline or profile summary for consulting or a career pivot
- plan a content strategy and post cadence around defined topics
- turn an article or talk into post drafts and openers
- draft personalized connection notes without automated outreach
- analyze reach drops to see what changed in audience response
Example prompts for the agent
- Fix my headline and rewrite my LinkedIn profile summary for consulting
- Turn my talk notes into LinkedIn post drafts with hooks
- Why did my reach drop on recent LinkedIn posts and what should I check?
How to install linkedin-skills
1Plugin marketplace
/plugin marketplace add alirezarezvani/claude-skills/plugin install linkedin@claude-code-skillsThis installs the whole linkedin plugin with all its skills
2Skills CLI (Vercel)
npx skills add alirezarezvani/claude-skills --skill linkedin-skills -a claude-code3Manually: put the files in place
~/.claude/skills/linkedin-skills/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/linkedin-skills/
Manually: put the files in place
.agents/skills/linkedin-skills/SKILL.mdFor all projects use ~/.agents/skills/
Manually: put the files in place
.cursor/skills/linkedin-skills/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install alirezarezvani/claude-skills linkedin-skills2Manually: put the files in place
.github/skills/linkedin-skills/SKILL.mdPlatform CLI
gemini skills install https://github.com/alirezarezvani/claude-skills --path marketing/linkedin/skills/linkedin-skillsManually: put the files in place
.devin/skills/linkedin-skills/SKILL.mdThe legacy .windsurf/skills/ path still works
Claude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set349
The whole set →Similar
Questions about linkedin-skills
How do I install linkedin-skills in Claude Code?
Run /plugin install linkedin@claude-code-skills or add it via npx skills add alirezarezvani/claude-skills --skill linkedin-skills -a claude-code.
What does linkedin-skills do?
It routes your LinkedIn requests into five focused lanes, helping you refine your profile, plan topics, draft posts, and review post performance. It also rejects prompts that involve scraping or bulk messaging.
Does linkedin-skills send messages or publish posts automatically?
No, it never connects to LinkedIn APIs or stores your login details. All scripts generate text for you to review, copy, and publish yourself.
Source text
SKILL.md · MIT
--- name: linkedin-skills description: Use when someone wants to grow an organic LinkedIn presence — a content strategy for a career change or consulting or thought leadership, a rewritten profile or headline, post drafts and hooks, a posting cadence or newsletter plan, connection notes and outreach, a commenting strategy, repurposing an article or talk into posts, or a read on why their reach dropped. Triggers on "grow my LinkedIn", "fix my headline", "write a LinkedIn post", "what should I post about", "LinkedIn strategy", "connection request", "my reach dropped". Forks context to route to one of five sub-skills, and refuses automation, scraping, pods, and bulk DMs before any drafting starts. context: fork license: MIT metadata: version: 1.0.0 author: Alireza Rezvani category: marketing updated: 2026-08-25 build_pattern: "Domain orchestrator — deterministic lane router + policy gate, five managed sub-skills" distinct_from: "marketing-skill/x-twitter-growth (X/Twitter-specific); marketing-skill/social-content (multi-platform calendars); marketing-skill/social-media-analyzer (cross-platform reporting); productivity/andreessen (venture judgement, not audience building)" --- # LinkedIn — Organic Presence Orchestrator > **Portability + safety:** 17 stdlib-only Python scripts. **No LinkedIn credentials, no API > calls, no scraping, nothing auto-sent.** Every output is text the account holder posts > themselves — automated posting, connecting, and commenting are prohibited by LinkedIn's > User Agreement §8.2, and a restricted account ends the whole project. Building an authentic presence over months, not generating a post. The five lanes cover what actually moves: who you are (profile), what you stand for (strategy), what you publish (content), who you talk to (engagement), and what any of it did (analytics). ## Step 1 — Gate, before anything is drafted ```bash python3 scripts/linkedin_policy_gate.py --text "<the user's own words>" --output human ``` - **exit 4 REFUSE** — a named rule is broken (automation, scraping, pods, bulk DMs, fake identity, fabricated proof, a prohibited automation platform). Do not draft it: name the rule, offer the substitute the gate prints, and route there instead. A REFUSE outranks any route below. - **exit 3 CONSTRAIN** — proceed, and state the constraint out loud in your reply. - **exit 0 ALLOW** — proceed. ## Step 2 — Route ```bash python3 scripts/linkedin_goal_router.py --text "<the goal>" --output human ``` Exit 0 routes — invoke that lane, surfacing any `prerequisite` as a question first. Exit 2 is ambiguous — ask **one** question naming both candidates, with a recommendation. Exit 3 has no signal — ask what they want to walk away with, rather than guessing. | Lane | Typical ask | |---|---| | `linkedin-profile` | "fix my headline", "my profile gets views but nothing happens" | | `linkedin-strategy` | "what should I post about", "how often", "should I start a newsletter" | | `linkedin-content` | "write this post", "turn my talk into posts", "is this hook any good" | | `linkedin-engagement` | "who should I comment on", "write a connection note" | | `linkedin-analytics` | "why did reach drop", "what's working", "should I test this" | ## Step 3 — Forcing questions One at a time, each with a recommended answer. Stop as soon as the lane can run honestly. `/cs-grill-linkedin` walks all five with the recommendation and the canon behind each. 1. What has to be true in 90 days for this to have been worth it? *(Not a follower count.)* 2. Who is this for, specifically enough that someone is excluded? 3. How many minutes a week will you protect — measured from a bad week? 4. What proof already exists? *(If none, the first pillar is process, not results.)* 5. What will you not post about? ## Hard rules - **Nothing is automated and nothing is sent.** No credentials, no API, no scraping. - **Refuse, then substitute.** Every REFUSE names the compliant alternative. - **The account holder is the author of record.** They read every line before it ships. - **No claim they cannot substantiate.** A real number, a bounded range, or nothing. - **Never silently chain lanes.** Offer the next one as a question. - **Cite the confidence level.** LinkedIn-official is 🟢, third-party studies are 🟡, folklore is 🔴 and gets named as folklore. ## Scripts | Script | Role | |---|---| | [`scripts/linkedin_policy_gate.py`](scripts/linkedin_policy_gate.py) | ALLOW / CONSTRAIN / REFUSE against User Agreement §8.2 + Community Policies. 7 refusal rules, each with a substitute. | | [`scripts/linkedin_goal_router.py`](scripts/linkedin_goal_router.py) | Deterministic five-lane classifier: route (0) / ask (2) / no-signal (3), with cross-lane prerequisites. | ## References and assets - [`references/linkedin_platform_canon.md`](references/linkedin_platform_canon.md) — how the feed ranks, evidence-graded (7 sources) - [`references/policy_and_account_safety.md`](references/policy_and_account_safety.md) — §8.2, prohibited software, restriction triggers (7 sources) - [`assets/linkedin_operating_agreement.md`](assets/linkedin_operating_agreement.md) — the standing rules in one page, agreed before work starts ## Distinct from - **`marketing-skill/x-twitter-growth`** — X/Twitter mechanics. Different platform and rules. - **`marketing-skill/social-content` / `social-media-manager`** — multi-platform brand calendars. This is one person's presence on one platform, in depth. - **`marketing-skill/social-media-analyzer`** — cross-platform campaign reporting. --- **Version:** 1.0.0 · 5 lanes · 17 stdlib scripts · nothing auto-sent
© Alireza Rezvani · MIT · alirezarezvani/claude-skills