I spent a month turning LinkedIn into software
Serge’s Substack
SubscribeSign in
I spent a month turning LinkedIn into software<br>Not a post generator. A ten-skill system for the whole grind, from picking an angle to figuring out who actually engaged. Open-source, MIT, free.
Serge Bulaev<br>Jul 09, 2026
Share
“LinkedIn is just consistency.” True, useless. Like saying the secret to marathons is running.
Posting isn’t one task. It’s eight. Pick the week’s angle. Find one nobody used yesterday. Write a hook that survives the “...see more” fold. Scrub the tells that scream a robot wrote this. Keep the link out of the body so you don’t tank your own reach. Publish it, which sounds trivial until you meet LinkedIn’s API. Reply while replies still count. Then work out which of the people who engaged are worth your time.<br>I did all eight by hand for months. Then I got tired and did what I always do: turned it into software.<br>A month later it’s linkedin-skills — ten open-source skills for Claude Code and Codex. This is what’s actually inside, because it grew into far more than I planned.<br>TL;DR — Ten skills covering the full loop: plan, write, de-AI, audit, publish, comment, reply, analyze, optimize, scale. Draft-and-approve, never autopilot. Runs draft-only with zero setup, or auto-publishes once you connect an account. Built on a month of research and LinkedIn's genuinely cursed API. Install in one line with npx skills add sergebulaev/linkedin-skills, or as a Claude Code / Codex plugin.
1. The 400-post rabbit hole
I started with the writing, and got annoyed at how same everything read. So I pulled 400 posts that beat their own author’s baseline across ten verticals, tagged each one by its opening move, and cross-checked that against how it actually performed.<br>Baseline is the trick. A big account’s average day isn’t a small account’s breakout; skip that control and you just prove famous people get more likes. I wanted posts that overperformed for whoever wrote them.
One finding drowned out the rest: the first line is the entire product, and first lines run on formulas. The same 16 openings produced the outliers, vertical after vertical. Anaphora. The “the era of X is over” obituary. The ledger that writes “$4,217.38,” never “about four grand,” because the decimals feel true. The year-over-year confession. Contrarian-with-receipts. One give-it-away format multiplied a founder’s usual reach nearly 20x.<br>Then the part that rewired how I write:<br>Each formula earns a different currency. Some pull comments, some reposts, some quiet saves. Pick by topic alone and you write something technically viral that earns the wrong thing.
So the first question is never “what do I want to say.” It’s “what should this earn“ — then the formula, then the topic. That logic became skill one, post-writer. Writing turned out to be 10% of the job.<br>2. The other 90%
Every piece below started as a task I was sick of doing by hand:<br>content-planner — a week at a time: pillar, format, hook, CTA, timing, comment targets.
post-writer — the 16 formulas, chosen by goal.
humanizer — strips AI tells (this one became a monster).
audit mode — runs a draft against the 2026 algorithm checklist.
comment-drafter — first, in-voice comments on the right posts.
reply-handler — replies to the right comment in a flattened thread.
hook-extractor — paste a viral post, get its formula and a blank template.
engager-analytics — sorts everyone who engaged by whether they matter.
thread-monitor — flags the comments worth following up, while they’re warm.
profile-optimizer — headline, 7-part About, banner, the lot.
One spine holds them together: draft, show you, wait. Nothing publishes until you say “post.” I didn’t want a bot running my account. I wanted the boring 90% gone and the last call left to a human.<br>Underneath sit 34 reference files, ~4,300 lines of distilled research: hook skeletons, algorithm heuristics, voice rules, benchmarks. Not vibes. Sources.
The whole thing, in the open: ten skills, MIT, and every version tagged.<br>3. The month-eating part nobody sees
The hard part of anything touching LinkedIn isn’t the AI. It’s the plumbing.
LinkedIn has three URN types for one “post” (activity, share, ugcPost), and which you get depends on how it was made. Threads silently flatten to two levels, so your “reply to a reply” lands somewhere else entirely. Reacting INSIGHTFUL returns HTTP 400 while every other reaction works.<br>I refused to babysit that. So the write layer rides the Publora API — full disclosure, Publora is a product I work on, which is exactly why I built the publishing layer on it. You connect your LinkedIn account once, and its free tier covers more posting than most people ever need. The read layer uses Apify to pull posts, comments, and engagers with no login. Apify reads, Publora writes, the skills think. The real work was never “call the model.” It was making the unglamorous 90% reliable.<br>It ships in three tiers, so you can try before...