Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

Back to skills

Linkedin

ASecurity

Interact with LinkedIn — view your profile, browse other profiles, read the feed, search jobs/posts/people, get job details, create posts, like/unlike posts, comment, send connection requests, and follow/unfollow users. Use this skill whenever the user mentions LinkedIn, wants to search for jobs or people, read their LinkedIn feed, view a profile, get job details, create a post, like or comment on content, send a connection request, or follow someone. Also trigger when the user pastes a Linke...

293 stars
0 votes
0 copies
0 views
Added 9/20/2026
developmentpythongobashapifrontend

Works with

cliapi

Security Analysis

A100/100

Scanned 9/20/2026

Install to Claude Code

$npx -y skills add sigcli/sigcli --skill linkedin --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Linkedin?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Linkedin
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/sigcli-linkedin/badge)](https://www.skillsdirectory.com/skills/sigcli-linkedin)

More formats (shields.io, HTML) on the badges page.

Download Zip
Files
SKILL.md
---
name: linkedin
description: 'Interact with LinkedIn — view your profile, browse other profiles, read the feed, search jobs/posts/people, get job details, create posts, like/unlike posts, comment, send connection requests, and follow/unfollow users. Use this skill whenever the user mentions LinkedIn, wants to search for jobs or people, read their LinkedIn feed, view a profile, get job details, create a post, like or comment on content, send a connection request, or follow someone. Also trigger when the user pastes a LinkedIn URL (e.g. linkedin.com/in/..., linkedin.com/jobs/view/...) or mentions LinkedIn networking.'
---

# LinkedIn

View profiles, browse the feed, search jobs/posts/people, get job details, create posts, like/unlike, comment, send connections, and follow/unfollow on LinkedIn.

## Skill Directory

`<SKILL_DIR>` is the directory containing this SKILL.md file. Determine it ONCE at the start and reuse it.

## Setup (run FIRST — every time, before any operation)

You MUST complete this setup before running any script. Do NOT skip this step.

```bash
sig status linkedin 2>&1
```

Check the JSON output fields `configured` and `valid`:

- **`configured: false`** → run Provider Setup below. Do NOT proceed without completing it.
- **`valid: false` (but configured: true)** → run `sig login linkedin`, then re-check.
- **`valid: true`** → detect proxy (see below), then execute the user's request.

### Provider Setup

1. Read `<SKILL_DIR>/references/provider-config.yaml`
2. Append the provider block to `~/.sig/config.yaml` under `providers:`
3. Ask the user: "Do you need a proxy to access this site?" — if yes, add `networkProxy: <url>` under the provider in config.yaml
4. Run `sig login linkedin` (with `--network-proxy <url>` if proxy was specified)
5. Verify: run `sig status linkedin` again — must show `valid: true` before proceeding

### Proxy Detection (after provider is valid)

```bash
grep -A15 "^\s*linkedin:" ~/.sig/config.yaml | grep networkProxy | awk '{print $2}'
```

If this outputs a URL, prefix ALL python3 commands with `HTTPS_PROXY=<url> HTTP_PROXY=<url>`.
If using socks5, convert to socks5h for python (e.g. `socks5://...` → `socks5h://...`).
If empty, no proxy needed.

## Running Scripts

All scripts require setup to be completed first (see above).

## Scripts Reference

All scripts are in this skill's `scripts/` directory. Run via Bash tool.

### Read Operations

| Script                      | Purpose              | Auth     |
| --------------------------- | -------------------- | -------- |
| `linkedin_me.py`            | Current user profile | Required |
| `linkedin_profile.py`       | User profile by name | Required |
| `linkedin_feed.py`          | Home feed posts      | Required |
| `linkedin_search_jobs.py`   | Search job listings  | Required |
| `linkedin_search_posts.py`  | Search posts         | Required |
| `linkedin_search_people.py` | Search people        | Required |
| `linkedin_job.py`           | Job posting details  | Required |

### Write Operations

| Script                | Purpose                 | Auth     |
| --------------------- | ----------------------- | -------- |
| `linkedin_post.py`    | Create a post           | Required |
| `linkedin_like.py`    | Like/unlike a post      | Required |
| `linkedin_comment.py` | Comment on a post       | Required |
| `linkedin_connect.py` | Send connection request | Required |
| `linkedin_follow.py`  | Follow/unfollow a user  | Required |

### linkedin_me.py

```
--cookie COOKIE      LinkedIn session cookie (optional, uses SIG_LINKEDIN_COOKIE)
```

### linkedin_profile.py

```
--username TEXT       LinkedIn username or profile URL (required)
--cookie COOKIE      LinkedIn session cookie (optional)
```

### linkedin_feed.py

```
--limit N            Max posts (default: 10)
--cookie COOKIE      LinkedIn session cookie (optional)
```

### linkedin_search_jobs.py

```
--query TEXT          Job search keywords (required)
--location TEXT       Location filter (optional)
--limit N            Max results (default: 10)
--start N            Offset for pagination (default: 0)
--experience TEXT     Experience level codes (comma-sep: 1=intern,2=entry,3=assoc,4=mid,5=dir,6=exec)
--job-type TEXT       Job type codes (F=full,P=part,C=contract,T=temp,V=volunteer,I=intern)
--date-posted TEXT    Date filter (r86400=24h, r604800=week, r2592000=month)
--remote TEXT         Workplace type (1=onsite, 2=remote, 3=hybrid)
--cookie COOKIE      LinkedIn session cookie (optional)
```

### linkedin_search_posts.py

```
--query TEXT          Search keywords (required)
--limit N            Max results (default: 10)
--cookie COOKIE      LinkedIn session cookie (optional)
```

### linkedin_search_people.py

```
--query TEXT          Search keywords (required)
--limit N            Max results (default: 10)
--start N            Offset for pagination (default: 0)
--cookie COOKIE      LinkedIn session cookie (optional)
```

### linkedin_job.py

```
--id TEXT             Job ID or LinkedIn job URL (required)
--cookie COOKIE      LinkedIn session cookie (optional)
```

### linkedin_post.py

```
--cookie COOKIE      LinkedIn session cookie (required)
--text TEXT           Post text content (required)
```

### linkedin_like.py

```
--cookie COOKIE      LinkedIn session cookie (required)
--urn TEXT            Post URN, e.g. urn:li:activity:1234567890 (required)
--undo               Unlike instead of like
```

### linkedin_comment.py

```
--cookie COOKIE      LinkedIn session cookie (required)
--urn TEXT            Post URN to comment on (required)
--text TEXT           Comment text (required)
```

### linkedin_connect.py

```
--cookie COOKIE      LinkedIn session cookie (required)
--urn TEXT            Profile URN, e.g. urn:li:fsd_profile:ACoAA... (required)
--message TEXT        Custom connection message (optional)
```

### linkedin_follow.py

```
--cookie COOKIE      LinkedIn session cookie (required)
--urn TEXT            User URN, e.g. urn:li:fsd_profile:ACoAA... (required)
--undo               Unfollow instead of follow
```

## Safety

**LinkedIn is a professional network.** Actions taken here are visible to your professional contacts and can affect your reputation. Always confirm with the user before executing write operations:

- **Creating posts** — confirm the text content before publishing
- **Sending connection requests** — confirm the target person and optional message
- **Commenting on posts** — confirm the comment text before posting
- **Liking/unliking** — these are reversible (`--undo`), but still confirm first
- **Following/unfollowing** — these are reversible (`--undo`), but still confirm first

## Key Concepts

**Profile identifiers** — `linkedin_profile.py` accepts a LinkedIn username (`janedoe`), a full profile URL (`https://www.linkedin.com/in/janedoe`), or an `@`-prefixed handle. URLs are resolved automatically.

**Job identifiers** — `linkedin_job.py` accepts a numeric job ID (`12345678`) or a full LinkedIn job URL (`https://www.linkedin.com/jobs/view/12345678`). The ID is extracted automatically.

**URNs** — Write operations (like, comment, connect, follow) use LinkedIn URN identifiers. Post URNs look like `urn:li:activity:7100000000000000001`. Profile URNs look like `urn:li:fsd_profile:ACoAAA123456`. You can find these in the output of read operations.

**Voyager API** — All operations use LinkedIn's internal Voyager API (`/voyager/api/`), which is the same API the LinkedIn website uses. Authentication is via JSESSIONID CSRF token and li_at session cookie.

**Post search** — `linkedin_search_posts.py` parses RSC-embedded HTML from the search results page rather than a JSON API. Results may be less structured than other endpoints.

## Known Limitations

- **Rate limiting** — LinkedIn aggressively rate-limits API calls. The client retries once on HTTP 429 with the `Retry-After` delay, but sustained heavy usage may result in temporary blocks.
- **Search post parsing** — Post search relies on HTML scraping of RSC payloads, which may break if LinkedIn changes their frontend markup.
- **No pagination for feed** — The feed endpoint returns a single page of results up to the limit.
- **Connection requests** — Require the target's profile URN, not their username. Use `linkedin_search_people.py` or `linkedin_profile.py` to find URNs first.
- **Session expiry** — LinkedIn sessions typically last 30 days but may expire sooner if LinkedIn detects unusual activity.
- **No media uploads** — `linkedin_post.py` creates text-only posts. Image/video posts are not supported.

## Error Handling

| Error         | Cause                           | Fix                                                 |
| ------------- | ------------------------------- | --------------------------------------------------- |
| AUTH_REQUIRED | No cookie or missing JSESSIONID | Auto-run `sig login` (no user prompt needed), retry |
| AUTH_EXPIRED  | Session cookie expired (401)    | Auto-run `sig login` (no user prompt needed), retry |
| NOT_FOUND     | Profile or resource not found   | Check the username or ID is correct                 |
| HTTP_429      | Rate limited by LinkedIn        | Wait and retry; reduce request frequency            |
| HTTP_403      | Forbidden or restricted         | Check account status; may need re-login             |

## Workflow Examples

### View your own profile

1. `sig run linkedin -- bash -c 'python3 scripts/linkedin_me.py --cookie "$SIG_LINKEDIN_COOKIE"'`

### Look up someone's profile

1. `sig run linkedin -- bash -c 'python3 scripts/linkedin_profile.py --cookie "$SIG_LINKEDIN_COOKIE" --username janedoe'`
2. Or with URL: `sig run linkedin -- bash -c 'python3 scripts/linkedin_profile.py --cookie "$SIG_LINKEDIN_COOKIE" --username "https://www.linkedin.com/in/janedoe"'`

### Browse your feed

1. `sig run linkedin -- bash -c 'python3 scripts/linkedin_feed.py --cookie "$SIG_LINKEDIN_COOKIE" --limit 5'`

### Search for jobs

1. `sig run linkedin -- bash -c 'python3 scripts/linkedin_search_jobs.py --cookie "$SIG_LINKEDIN_COOKIE" --query "python developer" --location "San Francisco" --limit 10'`
2. With filters: `sig run linkedin -- bash -c 'python3 scripts/linkedin_search_jobs.py --cookie "$SIG_LINKEDIN_COOKIE" --query "data engineer" --remote 2 --experience 4'`

### Search for posts

1. `sig run linkedin -- bash -c 'python3 scripts/linkedin_search_posts.py --cookie "$SIG_LINKEDIN_COOKIE" --query "machine learning" --limit 5'`

### Search for people

1. `sig run linkedin -- bash -c 'python3 scripts/linkedin_search_people.py --cookie "$SIG_LINKEDIN_COOKIE" --query "software engineer at google" --limit 10'`

### Get job details

1. `sig run linkedin -- bash -c 'python3 scripts/linkedin_job.py --cookie "$SIG_LINKEDIN_COOKIE" --id 12345678'`
2. Or with URL: `sig run linkedin -- bash -c 'python3 scripts/linkedin_job.py --cookie "$SIG_LINKEDIN_COOKIE" --id "https://www.linkedin.com/jobs/view/12345678"'`

### Create a post

1. `sig run linkedin -- bash -c 'python3 scripts/linkedin_post.py --cookie "$SIG_LINKEDIN_COOKIE" --text "Excited to share my latest project!"'`

### Like a post

1. `sig run linkedin -- bash -c 'python3 scripts/linkedin_like.py --cookie "$SIG_LINKEDIN_COOKIE" --urn "urn:li:activity:7100000000000000001"'`

### Unlike a post

1. `sig run linkedin -- bash -c 'python3 scripts/linkedin_like.py --cookie "$SIG_LINKEDIN_COOKIE" --urn "urn:li:activity:7100000000000000001" --undo'`

### Comment on a post

1. `sig run linkedin -- bash -c 'python3 scripts/linkedin_comment.py --cookie "$SIG_LINKEDIN_COOKIE" --urn "urn:li:activity:7100000000000000001" --text "Great insight!"'`

### Send a connection request

1. `sig run linkedin -- bash -c 'python3 scripts/linkedin_connect.py --cookie "$SIG_LINKEDIN_COOKIE" --urn "urn:li:fsd_profile:ACoAAA123456"'`
2. With message: `sig run linkedin -- bash -c 'python3 scripts/linkedin_connect.py --cookie "$SIG_LINKEDIN_COOKIE" --urn "urn:li:fsd_profile:ACoAAA123456" --message "Hi, I enjoyed your talk!"'`

### Follow a user

1. `sig run linkedin -- bash -c 'python3 scripts/linkedin_follow.py --cookie "$SIG_LINKEDIN_COOKIE" --urn "urn:li:fsd_profile:ACoAAA123456"'`

### Unfollow a user

1. `sig run linkedin -- bash -c 'python3 scripts/linkedin_follow.py --cookie "$SIG_LINKEDIN_COOKIE" --urn "urn:li:fsd_profile:ACoAAA123456" --undo'`

Attribution

sigclisigcli
View sourceMore from sigcli →
SSkills DirectorySkills Directory

Know which skills are safe — weekly.

Best new skills + every skill we flagged as malicious. From the team that scanned 103,619.

Join free

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Know which skills are safe — weekly.

Best new skills + every skill we flagged as malicious. From the team that scanned 103,619.

Join free

Related Skills

Browser Extension Developer

Use this skill when developing or maintaining browser extension code in the `browser/` directory, including Chrome/Firefox/Edge compatibility, content scripts, background scripts, or i18n updates.

281612 votes

Seo Optimizer

SEO optimization with keyword analysis, readability assessment, technical validation, content quality. Use for search rankings, blog posts, content audits, or encountering keyword density, readability scores, meta tags, schema markup errors.

2132 votes

Google Official Seo Guide

Official Google SEO guide covering search optimization, best practices, Search Console, crawling, indexing, and improving website search visibility based on official Google documentation

1862 votes

Tanstack Start

Build a full-stack TanStack Start app on Cloudflare Workers from scratch — SSR, file-based routing, server functions, D1+Drizzle, better-auth, Tailwind v4+shadcn/ui. Use whenever the user mentions TanStack Start, asks to scaffold a full-stack Cloudflare app with SSR, wants an SSR dashboard, or asks for a React 19 + Cloudflare Workers app with file-based routing and server functions — even if they don't name TanStack Start specifically. No template repo — Claude generates every file fresh per ...

9881 votes

Pentest

PTES-aligned adversarial security audit for backend, frontend, and mobile applications. Produces a CVSS-scored Hacker Report with verified PoCs and phased remediation.

5491 votes
View all in development →