sergebulaev/linkedin-skills: Claude Skills for LinkedIn Posting From Your Terminal
Claude skills for LinkedIn. 11 Claude Code and Codex skills that write human-sounding LinkedIn posts, craft comments that get noticed, analyze your feed, and build a publishing cadence, all from your terminal. Content engineering by Creative Content Crafts. MIT.
At a glance
- What is it?
- Eleven SKILL.md modules for Claude Code and Codex that draft LinkedIn posts, comments and replies, then wait for approval. Draft-only mode needs no API keys; auto-posting needs a Publora key.
- Who is it for?
- Adopt linkedin-skills if you already drive Claude Code, Codex or Hermes from a terminal and want drafts held for approval before anything reaches LinkedIn; the draft-only path needs no keys and no account. Do not adopt it if you expect a scheduler that publishes on its own, or if you want an agent that browses LinkedIn with your session cookie, since the README routes feed and comment reading through an Apify token and falls back to manual pasting.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 2 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What linkedin-skills actually solves for a terminal user
The problem is not writing. Anyone can produce 200 words about their industry. The problem is that the result reads like a model wrote it, and that LinkedIn's audience has learned to spot the patterns: the stacked triads, the staccato one-line fragments, the em dash habit, the performed humility before a pitch. linkedin-skills is a bundle of eleven SKILL.md modules that sit inside an agent you already run and handle that specific gap. You ask for a post, the agent picks the matching skill, and you get a draft plus a check against what the README calls 2026 algorithm rules and AI-detection patterns.
The audience is narrower than the topic suggests. This is for people who work in Claude Code, Codex, Hermes Agent or any agent that reads SKILL.md files, and who are comfortable with a .env file. The README states plainly that no coding is required, and for the prompt-driven path that is true. But the moment you want the agent to read a post body or publish on approval, you are configuring API tokens. Someone who only ever uses the LinkedIn web composer will get nothing from this.
The skill bundle and the approval gate
The repository ships eleven skills. The README names Post Writer, Comment Drafter, Reply Handler, Post Audit, Humanizer, Hook Extractor and Content Planner, and the table is truncated after Engagement Mo, so the full list of eleven is not visible in the README. Treat the named seven as confirmed and check the skills/ directory for the rest.
The mechanism is uniform across all of them. Each skill is a directory under skills/ containing a SKILL.md file, plus shared Python helpers in lib/. The README points at three of those helpers by name: lib/url_parser.py for URL parsing, lib/apify_client.py for reading posts, comments and engagers, and lib/publora_client.py for publishing actions. The agent reads the relevant SKILL.md, calls the helper it needs, and produces a draft.
The approval gate is the design decision worth noting. The README says every skill shows a draft first and waits for an OK before doing anything, and that nothing gets posted without approval. That is not a safety wrapper bolted on at the end; it is the default state of the bundle, and it holds even when no credentials are configured at all.
Draft-only mode versus the two optional tokens
The .env.example is explicit that all variables are optional and that the skills work in draft-only mode with nothing set. That is the honest default, and it means you can evaluate the writing quality before you sign up for anything.
Two tokens change what the bundle can do. APIFY_TOKEN lets the skills fetch LinkedIn post bodies, comment threads and a user's recent comments without cookies; the comment in .env.example notes a free tier with $5 per month of credit and a rate around $1 to $5 per 1,000 results. Without it, the README says the skills fall back to asking you to paste post text or comment URLs by hand. PUBLORA_API_KEY enables auto-posting on approval, and the .env.example comment gives 15 LinkedIn and Bluesky posts per month on the free tier. A third variable, a Pixfaro token, covers illustration generation; without it the skills draft the image prompt and ask you to generate the asset yourself.
The practical consequence is that the bundle degrades in steps rather than failing. No keys means a drafting assistant. Apify means it can read the post you link. Publora means it can act on your approval.
Installing linkedin-skills and running a first audit
Installation depends on which agent you use. For Codex CLI, the README gives a two-command marketplace flow. Run these from any directory; the second command installs the plugin you just registered.
codex plugin marketplace add sergebulaev/linkedin-skills
codex plugin add linkedin-skills@linkedin-skillsClaude Code uses the same pattern with slash commands inside the session:
/plugin marketplace add sergebulaev/linkedin-skills
/plugin install linkedin-skills@linkedin-skillsIf you would rather test a local clone, or you are wiring the bundle into OpenClaw or Hermes Agent, clone it and point the agent at the skills directory:
git clone https://github.com/sergebulaev/linkedin-skills.git
cd linkedin-skillsThe README also documents a single cross-agent command, `npx skills add sergebulaev/linkedin-skills`, which it says works for Claude Code, Codex, Cursor and any other agent that reads SKILL.md files.
For a first real use, skip the post writer and run the audit on something you already wrote. Paste a draft you were about to publish and ask the agent to check it. The README's example phrasing is to audit a post draft for AI tells and algorithm issues. You should get back a marked-up version rather than a rewrite. If you want the bundle to read a post from a URL instead of pasted text, add APIFY_TOKEN to .env first; otherwise expect to paste the body yourself.
The Humanizer makes a claim it cannot keep, and says so
The Humanizer skill is the most interesting entry in the table and the one most likely to disappoint if you read it carelessly. Its description lists the patterns it removes: 2026 AI vocabulary scored by paragraph density, reveal bridges, staccato fragment stacks, stacked triads, performed sincerity. It caps em dashes rather than banning them, which is a more defensible choice than the usual prohibition, since the em dash is a legitimate punctuation mark that models happen to overuse.
The README then states, in the skill's own row, that it does not promise to beat detectors and that no edit reliably does. It bundles a multi-detector spread tester covering GPTZero, Originality.ai, ZeroGPT, Sapling and Copyleaks, and the stated purpose is to document how much they disagree. That is an unusually candid framing for a tool in this category, and it tells you what the feature is actually for: producing evidence that detector scores are unstable, not producing a clean score.
Read that as the real limitation. If your goal is to pass an AI-detection check for a client or an employer, this bundle is the wrong instrument and its own documentation says so. If your goal is to stop writing like a model, the pattern list is the useful part and the detectors are a side exhibit.
Where the documentation stops: platform coverage and publishing scope
The README says the same team ships matching bundles for X, Instagram, YouTube, TikTok, Threads and Facebook, with the same voice engine and the same approve-before-publish flow. That is a claim about sibling repositories, not about this one, and the README does not describe a shared library between them. If you need multi-platform output, you are installing several bundles and reconciling their voice settings yourself.
Publishing scope is the other gap. The only publishing path documented here is Publora, through lib/publora_client.py, and the .env.example describes the free tier as 15 LinkedIn and Bluesky posts per month. The LinkedIn platform connection ID has the format linkedin-ABC123 and is found in the Publora dashboard under Channels. There is no documented path for scheduling, queueing or posting through LinkedIn's own API, and the README does not discuss what happens to a scheduled post if a token expires mid-month.
A reader comparing this to a social media management tool should notice the difference in kind. Those tools own the calendar. This bundle owns the draft and hands the send button to a service you configure separately.
Maintenance, licence and the cost of staying current
The repository is not archived and the last push was on 2026-09-09. Releases v1.0.34, v1.0.35 and v1.0.36 all landed on 2026-09-09 within about eight minutes of each other, which suggests the version bumps are automated rather than a signal about feature cadence. Judge the project on the commit history, not the release tag count.
The licence is MIT, stated in the README badge and in the LICENSE file at the repository root. That permits commercial use and modification, and it places no copyleft obligation on your own work. It also means no warranty, and the bundle touches LinkedIn through third-party services, so the terms you actually have to read are Apify's and Publora's, not this repository's. Nothing here is legal advice; if you are posting on behalf of a regulated employer, the third-party data flow is the part to have reviewed.
Upgrade cost is low on paper. The install paths are marketplace commands, so an update is re-running the install or pulling the clone. The real maintenance burden is prompt drift: the skills encode hook formulas and algorithm rules dated to 2026, and those age faster than the Python in lib/. requirements.txt pins only requests and python-dotenv, with a requirements-lock.txt alongside it, so the dependency surface is small. A repository file named SECURITY.md exists at the root, and it is worth reading before you put an Apify or Publora token in .env.
Editorial conclusion
Adopt linkedin-skills if you already drive Claude Code, Codex or Hermes from a terminal and want drafts held for approval before anything reaches LinkedIn; the draft-only path needs no keys and no account. Do not adopt it if you expect a scheduler that publishes on its own, or if you want an agent that browses LinkedIn with your session cookie, since the README routes feed and comment reading through an Apify token and falls back to manual pasting. Before committing, verify three things: whether the skills you care about are among the eleven the README names, whether the free Publora tier's 15 posts per month covers your cadence, and what the repository's SECURITY.md says about the tokens you would store in .env.
Frequently asked questions
What is linkedin-skills and who is it for?
It is a set of eleven Claude Code and Codex skills, each a SKILL.md module, that draft LinkedIn posts, comments and replies and hold them for approval. It targets people who already work in a terminal agent and want the drafting step handled there rather than in the LinkedIn composer.
How do I install linkedin-skills for Claude Code?
The README gives two slash commands inside a Claude Code session: /plugin marketplace add sergebulaev/linkedin-skills followed by /plugin install linkedin-skills@linkedin-skills. Codex CLI uses the equivalent codex plugin marketplace add and codex plugin add commands.
Do I need API keys to use linkedin-skills?
No. The .env.example states that all variables are optional and that the skills work in draft-only mode with nothing set. APIFY_TOKEN adds the ability to read post bodies and comment threads, and PUBLORA_API_KEY enables auto-posting on approval.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/sergebulaev-linkedin-skills)