LinkedIn skill for Claude Code, free and MIT licensed: LinkedIn Skill lets your agent write posts for your personal profile and your company Pages in your own voice, make the images or captioned video from your material, check every post against LinkedIn's limits and the patterns that cost reach, show each post the way the feed will on a phone, and schedule it after you say yes. It also works in Codex, Cursor and OpenClaw.
Everything up to scheduling runs on your own computer with Python and Pillow (ffmpeg only for video). There is no paid API, no LinkedIn developer app and no browser automation. This post covers what it does, how to install it, the example in the repo, and the parts that are code.
npx skills add social-media-skills/linkedin-skill -g -a claude-code -y
Repo: github.com/social-media-skills/linkedin-skill
The example in the repo: a week of posts about Artemis II for a placeholder profile and an astronomy club's Page, made from NASA photos and video (no endorsement implied).
The problem with AI LinkedIn posts
Most AI help for LinkedIn produces the same post: a dramatic one-liner, one sentence per line, three emoji, five hashtags, "Agree?". Readers spot it in a second, and LinkedIn has said it now down-ranks low-quality AI text and cuts reach for engagement bait. The fix isn't a better prompt. It's writing from the person's own material, in their own voice, and checking the result before it goes out.
What the skill does
-
Learns your voice.
voice.pyreads 5 to 20 of your own past posts and writes down how you write: typical length, how you open, sentence length, emoji and hashtag habits, the words you use. The check compares every draft with it. - Writes from your material. Notes, a changelog, a call summary, a photo from the week. One idea per post, the specific thing in the first line.
-
Makes the media.
render_images.pycrops your photos to 4:5 or 1:1 and makes quote, number and list cards;video.pyfits a clip to 4:5 and burns in captions from your transcript. -
Checks everything with
li_check.py. -
Picks the dates with
schedule.py: your days and time per account, one post a day, a few a week. - Previews each post on a phone, cut at "...see more", with LinkedIn's image grid, the video poster or the link card.
- Schedules after one yes, and logs every post.
- Learns from day 2: impressions against your own median, then comments, reposts, saves and sends per 1,000 impressions.
Install
Claude Code:
npx skills add social-media-skills/linkedin-skill -g -a claude-code -y
Codex, Cursor and other agents: npx skills add social-media-skills/linkedin-skill, then pick your agent. OpenClaw: openclaw skills install @social-media-skills/linkedin-skill. Gemini CLI: gemini extensions install https://github.com/social-media-skills/linkedin-skill.
It needs Python 3.9+ with Pillow, and ffmpeg for video. scripts/check_setup.py tells you what's missing.
The example
examples/artemis-ii/ is a week of posts about NASA's crewed lunar flyby, for a placeholder personal profile and a placeholder company Page:
- Profile: Earthset as a single photo, the flyby in four photos as an image set, and NASA's mission page as a link card.
- Page: the liftoff seen from a camera on Orion (30 seconds, 4:5, captions burned in), and the crew on the raft after splashdown, each with starter lines for the team to reshare.
The "past posts" for the voice step are written for the example: short, plain, no emoji, no hashtags. The drafts follow that, and the check would flag a dash or an emoji the voice never uses.
The checker
li_check.py covers LinkedIn's published limits and then the things that cost reach or trust:
- The fold. About 140 characters show on a phone before "...see more" (about 3 lines with media). A first line longer than that gets cut, so the check says so.
- Bait and stock phrasing. "Comment YES if you agree", "like if", "tag someone", and a list of phrases readers take as generic AI text. Long dashes are flagged too, unless the user's own posts use them.
- Formatting LinkedIn can't use. Unicode bold letters (screen readers spell them out, search can't read them), more than 3 hashtags, @names (the posting API can't tag people), URLs pasted into the text.
- Media. Image types, size, minimum size and shape (taller than 4:5 is cropped), 2 to 20 images of one shape, video length and shape, and never media and a link card together: WoopSocial rejects that combination too, because LinkedIn shows one or the other.
- Accounts. The same post on profile and Page on the same day, more than one post a day, the week's count, and a picture or opening line already used (from the log).
Links: a trade-off, not a rule
Many practitioners measure less reach for posts with a link card; LinkedIn has never confirmed it, the measurements disagree, and putting the link in the first comment no longer seems to avoid it. The skill doesn't pretend otherwise: it notes the trade-off on every link post and lets you choose.
Profiles and company Pages without your own LinkedIn app
Posting to a profile through LinkedIn's API needs a developer app. Posting to a company Page needs Community Management API access, which LinkedIn grants to registered organisations after a review. The skill schedules through WoopSocial, a social media API and MCP server made by the team that maintains the skill, which has that access. You connect your profile and the Pages you administer, and the agent posts text, images, 2 to 20 images, video and link cards.
What it doesn't send: documents (PDF carousels), polls, @mentions and comments. For carousels the skill renders the slides and either posts them as an image set or gives you a PDF to upload in the app.
Results against yourself
Page numbers come back through WoopSocial. Personal profile numbers don't, because LinkedIn restricts them for posting apps, so you paste them into a CSV. log.py compares each post with the same account's own posts, never a benchmark, and names a best post only after six.
Try it
npx skills add social-media-skills/linkedin-skill -g -a claude-code -y
Then tell your agent "write this week's LinkedIn posts from these notes" and give it a few of your past posts. The repo is social-media-skills/linkedin-skill. Issues and pull requests are welcome.

Top comments (0)