Linkedin post audit skill

Run any post draft through the 2026 heuristic checklist.

by sergebulaev·MIT license·★ 3,059 Stars on the repo·GitHub ↗

Use now

Files of Linkedin post audit

sergebulaev/main1 file
post-audit.md
Show the full text80 lines

LinkedIn Post Audit

Run any post draft through the 2026 heuristic checklist. Catches AI tells, timing/format issues, length violations, and structural weaknesses before publishing.

When to use

  • Before publishing a hand-written or AI-drafted post
  • When linkedin-post-writer finishes a draft (auto-invoked)
  • When a recent post didn't land and the user wants a post-mortem

Input

  • A post draft (plain text)
  • Optional: target audience, scheduled time, format (text / carousel / video / image)

Output

  • Pass/Fail header
  • Blockers (must fix before publishing): em dash density over the cap, paragraphs at 3+ AI markers, reveal bridges, external links in body
  • Warnings (ship-risky): staccato stacks, sincerity markers, missing referenced numbers, generic close
  • Score estimates: per-paragraph tell density, approximate first-hour reach fit. No detector score: on 100-300 word text those are noise and the skill does not promise to beat them
  • Suggested fixes: inline rewrites for each issue
  • Timing recommendation: best window given audience

Checks

Blockers (auto-fail)
  1. Em dash density above ~1 per 100 words (1-2 per post); en dash between clauses; double dash. A single em dash is not a blocker
  2. External link in body (not in first comment)
  3. Post exceeds 3,000 chars (LinkedIn hard limit)
  4. Opens with "In today's fast-paced world...", a reveal bridge ("Here's what", "Stop X, start Y"), or a sincerity announcement ("Let me be honest")
  5. Ends with "What do you think?", "Thoughts?", "Let that sink in."
  6. Any paragraph with 3+ vocabulary / grammar markers, or any negative-parallelism / "The result?" reveal bridge (see ../references/audit-ai-tells.md)
  7. Frames LinkedIn as inferior in a LinkedIn post (algo penalty)
Warnings (flag with suggested fix)
  1. Hook doesn't fit in first 210 chars (mobile …see more cutoff)
  2. Length outside 900-1,300 sweet spot (or 1,500-1,900 for long-form with breaks)
  3. A paragraph that reads machine-flat (4+ sentences all the same length, no clause doing work). Flag that paragraph only; sentence-length variance is not a reach lever on LinkedIn, so never suggest adding variance as a tactic
  4. No odd-precision number with a named referent (a bare number does not clear this)
  5. No named entity
  6. No first-person sensory detail
  7. Stacked or perfectly parallel rule-of-three, or 3+ triads in the post (one natural triad passes)
  8. More than 2 hashtags
  9. User's own product named more than once
  10. Missing reaction-prompting moment: a specific, dated, uncomfortable fact stated flat, or an opinion with stakes. A framed confession ("I'll be honest, this hurt") does not clear this; the frame is the tell
  11. Passive voice >10% 18a. Staccato stacks ("Short. Punchy. Done.", "No X. No Y. Just Z.", "All the X. None of the Y."), one-word paragraphs, more than 2 standalone fragments, or a long/short/long/short seesaw 18b. Hedging stack or sincerity marker mid-post ("perhaps", "it seems", "honestly?", "real talk") 18c. Over-scrubbed: uniformly flat tone, zero em dashes and zero triads in a long post, no reaction or opinion anywhere
  12. First line is not a complete standalone hook (it needs line 2 to make sense). 2026 corpus: every top post front-loads a full hook before the fold.
  13. No blank line after the hook / wall-of-text open. Winners use heavy whitespace: one idea per line, blank line after the hook.
  14. Emoji sprinkled mid-text in a narrative post, or more than 2-3 total in prose. Top posts front-load 1-2 meaningful emoji; serious/contrarian posts use zero. Exempt: structured glossary/list formats (e.g. F15 Explain-to-Kids) where one emoji anchors each line on purpose.
  15. Comment-gate ("comment X and I'll DM you...") in a post whose goal is thought leadership. Organic top performers use zero hard comment-gates; only flag-clear when the post's goal is list-building (then F6 is intentional).
  16. No clear primary goal: the post chases comments, reposts, likes, and saves all at once. Pick one (see ../../../references/hook-formulas.md "Engagement-goal split").
Info (neutral notes)
  1. Suggested posting time given audience
  2. Format recommendation (text / carousel / video) given topic
  3. Similar-hook detection: if this post's first 100 chars match a recent post

Steps

  1. Parse draft into sentences, paragraphs, first-210-char hook.
  2. Run each blocker check; collect failures.
  3. If any blockers, return FAIL with specific fix suggestions; optionally offer auto-rewrite.
  4. If no blockers, run warnings.
  5. Report per-paragraph tell density (markers per paragraph, em dashes per 100 words, fragment count, triad count). Do not estimate a detector score.
  6. Return structured report.

Example

See ../references/audit-examples.md for worked examples.

  • linkedin-humanizer — aggressive rewrite if audit fails
  • linkedin-post-writer — regenerate draft using a proven formula
1# LinkedIn Post Audit
2 
3Run any post draft through the 2026 heuristic checklist. Catches AI tells, timing/format issues, length violations, and structural weaknesses before publishing.
4 
5## When to use
6 
7- Before publishing a hand-written or AI-drafted post
8- When `linkedin-post-writer` finishes a draft (auto-invoked)
9- When a recent post didn't land and the user wants a post-mortem
10 
11## Input
12 
13- A post draft (plain text)
14- Optional: target audience, scheduled time, format (text / carousel / video / image)
15 
16## Output
17 
18- **Pass/Fail** header
19- **Blockers** (must fix before publishing): em dash density over the cap, paragraphs at 3+ AI markers, reveal bridges, external links in body
20- **Warnings** (ship-risky): staccato stacks, sincerity markers, missing referenced numbers, generic close
21- **Score estimates:** per-paragraph tell density, approximate first-hour reach fit. No detector score: on 100-300 word text those are noise and the skill does not promise to beat them
22- **Suggested fixes:** inline rewrites for each issue
23- **Timing recommendation:** best window given audience
24 
25## Checks
26 
27### Blockers (auto-fail)
281. Em dash density above ~1 per 100 words (1-2 per post); en dash between clauses; double dash. A single em dash is not a blocker
292. External link in body (not in first comment)
303. Post exceeds 3,000 chars (LinkedIn hard limit)
314. Opens with "In today's fast-paced world...", a reveal bridge ("Here's what", "Stop X, start Y"), or a sincerity announcement ("Let me be honest")
325. Ends with "What do you think?", "Thoughts?", "Let that sink in."
336. Any paragraph with 3+ vocabulary / grammar markers, or any negative-parallelism / "The result?" reveal bridge (see `../references/audit-ai-tells.md`)
347. Frames LinkedIn as inferior in a LinkedIn post (algo penalty)
35 
36### Warnings (flag with suggested fix)
378. Hook doesn't fit in first 210 chars (mobile `…see more` cutoff)
389. Length outside 900-1,300 sweet spot (or 1,500-1,900 for long-form with breaks)
3910. A paragraph that reads machine-flat (4+ sentences all the same length, no clause doing work). Flag that paragraph only; sentence-length variance is not a reach lever on LinkedIn, so never suggest adding variance as a tactic
4011. No odd-precision number with a named referent (a bare number does not clear this)
4112. No named entity
4213. No first-person sensory detail
4314. Stacked or perfectly parallel rule-of-three, or 3+ triads in the post (one natural triad passes)
4415. More than 2 hashtags
4516. User's own product named more than once
4617. Missing reaction-prompting moment: a specific, dated, uncomfortable fact stated flat, or an opinion with stakes. A framed confession ("I'll be honest, this hurt") does not clear this; the frame is the tell
4718. Passive voice >10%
4818a. Staccato stacks ("Short. Punchy. Done.", "No X. No Y. Just Z.", "All the X. None of the Y."), one-word paragraphs, more than 2 standalone fragments, or a long/short/long/short seesaw
4918b. Hedging stack or sincerity marker mid-post ("perhaps", "it seems", "honestly?", "real talk")
5018c. Over-scrubbed: uniformly flat tone, zero em dashes and zero triads in a long post, no reaction or opinion anywhere
5119. First line is not a complete standalone hook (it needs line 2 to make sense). 2026 corpus: every top post front-loads a full hook before the fold.
5220. No blank line after the hook / wall-of-text open. Winners use heavy whitespace: one idea per line, blank line after the hook.
5321. Emoji sprinkled mid-text in a narrative post, or more than 2-3 total in prose. Top posts front-load 1-2 meaningful emoji; serious/contrarian posts use zero. Exempt: structured glossary/list formats (e.g. F15 Explain-to-Kids) where one emoji anchors each line on purpose.
5422. Comment-gate ("comment X and I'll DM you...") in a post whose goal is thought leadership. Organic top performers use zero hard comment-gates; only flag-clear when the post's goal is list-building (then F6 is intentional).
5523. No clear primary goal: the post chases comments, reposts, likes, and saves all at once. Pick one (see `../../../references/hook-formulas.md` "Engagement-goal split").
56 
57### Info (neutral notes)
5824. Suggested posting time given audience
5925. Format recommendation (text / carousel / video) given topic
6026. Similar-hook detection: if this post's first 100 chars match a recent post
61 
62## Steps
63 
641. Parse draft into sentences, paragraphs, first-210-char hook.
652. Run each blocker check; collect failures.
663. If any blockers, return **FAIL** with specific fix suggestions; optionally offer auto-rewrite.
674. If no blockers, run warnings.
685. Report per-paragraph tell density (markers per paragraph, em dashes per 100 words, fragment count, triad count). Do not estimate a detector score.
696. Return structured report.
70 
71## Example
72 
73See `../references/audit-examples.md` for worked examples.
74 
75 
76## Related skills
77 
78- `linkedin-humanizer` — aggressive rewrite if audit fails
79- `linkedin-post-writer` — regenerate draft using a proven formula
80 

Discussion

Alternatives

Gemini carouselGenerate a branded slide-by-slide LinkedIn carousel using Gemini. Takes source content, builds a design brief, waits for approval, then outputs per-slide image generation prompts. 1080x1350 vertical format. Use this skill whenever the user says "carousel", "build a carousel", "turn this into a carousel", "gemini carousel", or wants multi-slide LinkedIn content. Always includes an approval gate between brief and image generation.Creator · MITInstagram Caption WriterDraft an Instagram caption with the hook in the first 125 characters, a skimmable body, and one clear CTA, using a 2026 hook formula chosen by goal (saves, shares, comments, follows). Runs the humanizer pass and, on approval, publishes with the image or video you supply via the Publora media flow. Use to caption a single image or a Reel. Not for slide-by-slide carousels (use ig-carousel-planner) or auditing a draft (use ig-humanizer --mode audit).Creator · MITInstagram Carousel PlannerPlan an Instagram carousel slide by slide, up to 10 slides, with a hook slide that opens a loop, value slides that front-load the payoff, and a payoff slide that earns the save and follow. Picks a 2026 carousel formula (listicle, before/after, myth-buster, framework) by goal (saves, shares, follows), drafts each slide's text plus the caption, then publishes the images you supply via Publora. Use to structure a multi-slide carousel. Not for single-image captions (use ig-caption-writer).Creator · MITSocial media analyzerSocial media campaign analysis and performance tracking. Calculates engagement rates, ROI, and benchmarks across platforms. Use when analyzing social media performance, calculating engagement rate, measuring campaign ROI, comparing platform metrics, or benchmarking against industry standards. Also use when the user mentions "social media audit," "engagement rate," or "which platform performs best. · MIT