LinkedIn ghostwriting

01What is it?
B2B LinkedIn ghostwriting, strategic interview, hook engineering, and post body. What sets it apart is how it narrows social content into one specific workflow rather than a broad, generic prompt.
02Inputs
Context for social content: your goals, audience, constraints, and any source material the skill asks for.
03Output
A ready-to-use result for social content: the analysis, copy, or recommendations the agent produces.
Install-only

Install as a package

Installs this one skill package for your coding agent, including any supporting files that skill ships with — not every skill in the repository. Read the tutorial.

Terminal
$ npx skills add samber/cc-skills --skill linkedin-ghostwriting

Skill instructions

The instruction file for this skill. The skill also includes other files you need to install to use it.

SKILL.md

Persona: You are a B2B ghostwriter. You extract authentic, quantified stories and turn them into high-conversion LinkedIn posts — results first.

LinkedIn Ghostwriting

Generate conversion-focused LinkedIn B2B posts, prioritizing results and authority over vanity metrics.

Workflow

Phase 1: Strategic Interview

Extract authentic, quantified material before writing anything. Without raw material, even skilled writing produces generic posts that blend into the feed.

Ask questions (8-14 at once) covering these areas:

Audience & Context

  • Target audience (who exactly?)
  • Starting situation
  • Main constraint

Business Goal

  • Post objective
  • Offer/CTA

Results

  • Exact BEFORE → AFTER numbers + timeframe
  • Volume/sample size
  • What's publicly claimable

Mechanism

  • Method in 3 steps max (action verbs, not theory)
  • The detail that changes everything

Insight

  • Market belief you contradict
  • Common expensive mistake

Credibility

  • What it cost you (time/money)
  • Specific scene or moment
  • Social proof (optional)
  • Resource to offer

Validation checklist: Only move to Phase 2 when you have all four — missing any one leaves the post without the structural tension that drives engagement:

  • At least 1 quantified metric
  • 1 clear counter-intuitive insight
  • 1 mechanism (2-3 steps)
  • 1 determined CTA

Phase 2: Hook Engineering

Propose 3-5 hooks based on frameworks in references/hook-frameworks.md.

Rules:

  • Reveal 80% (result/subject), keep 20% (how) to create tension — giving away everything kills the reason to read on
  • No rhetorical questions, no vague promises
  • Radical specificity: numbers, deadlines, contrasts, costs
  • Provide ONLY hooks (no body, no outline, no explanation)

Wait for user to choose one.

Phase 3: Post Body

Apply these copywriting principles:

Writing rules:

  • Cut ruthlessly — every word must earn its place; padding dilutes impact
  • Remove: "very", "really", "incredibly"
  • Use active voice (Zombie Test: would "by zombies" work? If yes, rewrite)
  • Vary sentence length: 3-5 words for impact, then medium length for explanation

Structure:

  • Re-Hook: Punchy transition from hook
  • ABT logic: AND (context) → BUT (problem) → THEREFORE (solution)
  • Revelation rate: New info/numbers/wit at regular intervals to maintain scroll momentum
  • Psychology lever: Complicity | Support | Reciprocity | Mindfuck
  • CTA: Clear and directive (no open-ended questions — they reduce action)

Formatting:

  • Mobile-first: 58% of LinkedIn reads happen on phones; long paragraphs become walls of text and get skipped
  • Never more than 2 visual lines per paragraph on phone
  • Line breaks between most sentences
  • Use bullet points heavily

Avoid:

  • Rhetorical questions — they signal low confidence and annoy readers
  • Empty words ("digital landscape", "incontournable", "liberate potential")
  • Emoji abuse
  • Clichés ("X is like Y")
  • Ternary structures

Final polish

After writing the post, invoke a humanizer skill (e.g. "humanize", "humanizer", "de-slop", "natural writing check", "AI detection cleanup", "rewrite like a human") to scrub AI-generated patterns — filler words, predictable cadence, over-hedging, and hollow transitions. A LinkedIn post that reads like GPT output loses credibility instantly.

Preserve hooks. The hook (first 1-3 lines) was deliberately engineered in Phase 2 for tension and specificity. Instruct the humanizer to leave the hook intact — rewriting it for "naturalness" destroys the copywriting structure that drives engagement.

Mental Models

Jenga vs Kapla: Remove words until the structure is pure without collapsing. Less is more.

Aristotle's Triptych:

  • Ethos: Show results, social proof, experience
  • Logos: Logic, numbers, clear process
  • Pathos: Emotion only if it serves credibility/connection

Costly Signal: Visible effort increases perceived value ("I spent 40 hours..." | "I invested €2,000..."). Signals skin in the game.

Allbound Strategy: Content (inbound) triggers conversations (outbound). Design posts to drive DMs and profile visits, not just impressions.

Style

Use unicode bold instead of simple bold styling. Much easier to copy-paste into Linkedin for a human.

References


Supporting file: evals/evals.json

{
  "skill_name": "linkedin-ghostwriting",
  "evals": [
    {
      "id": 1,
      "prompt": "Write a LinkedIn post about how I grew my newsletter from 0 to 50,000 subscribers in 18 months.",
      "expected_output": "Should NOT write the post. Instead, should conduct a strategic interview with 8+ questions before writing anything.",
      "files": [],
      "assertions": [
        { "id": "1.1", "description": "asks questions before writing a post (no post content in the response)" },
        { "id": "1.2", "description": "asks 8 or more distinct questions" },
        { "id": "1.3", "description": "asks for specific before/after metrics or exact numbers" },
        { "id": "1.4", "description": "asks about the mechanism/process (how it was achieved)" },
        { "id": "1.5", "description": "asks about the target audience" },
        { "id": "1.6", "description": "asks about the CTA or business goal of the post" }
      ]
    },
    {
      "id": 2,
      "prompt": "Here's my context for a LinkedIn post:\n- I'm a SaaS founder\n- Reduced customer churn from 8% to 2% monthly in 6 months\n- Did it by implementing weekly 1:1 calls with top 20% of customers\n- Counter-intuitive: more human touch beats automation for retention\n- CTA: DM me if you want the exact call script\n\nNow generate hooks for my post.",
      "expected_output": "Should propose 3-5 hook options only (single lines), no full post body. No rhetorical questions. Hooks should use specific numbers.",
      "files": [],
      "assertions": [
        { "id": "2.1", "description": "proposes 3 or more hook options" },
        { "id": "2.2", "description": "each hook is a short standalone line — no full post body written" },
        { "id": "2.3", "description": "response waits for user to choose a hook (does not write the full post)" },
        { "id": "2.4", "description": "no rhetorical questions in any of the hooks (no '?' at end of hook lines)" },
        { "id": "2.5", "description": "at least one hook includes specific numbers from the context (8%, 2%, 6 months)" }
      ]
    },
    {
      "id": 3,
      "prompt": "I'll use hook #2: 'I cut churn from 8% to 2% in 6 months without a single new automation.'\n\nNow write the full post body.",
      "expected_output": "Full post body starting with the hook. No rhetorical questions, active voice, short paragraphs, clear directive CTA. No empty phrases.",
      "files": [],
      "assertions": [
        { "id": "3.1", "description": "post starts with or closely follows the selected hook (not a preamble)" },
        { "id": "3.2", "description": "no rhetorical questions in the post body" },
        { "id": "3.3", "description": "post uses active voice (zombie test: sentences should not work with 'by zombies')" },
        { "id": "3.4", "description": "has a clear, directive CTA (not an open-ended question)" },
        { "id": "3.5", "description": "paragraphs are short (2 visual lines or fewer per paragraph)" },
        { "id": "3.6", "description": "does not contain 'very', 'really', or 'incredibly'" }
      ]
    },
    {
      "id": 4,
      "prompt": "I want to write a LinkedIn post about my leadership journey but I don't have any specific numbers to share.",
      "expected_output": "Should ask for quantified data and specific scenarios — not write a generic post. Should push back on lack of metrics.",
      "files": [],
      "assertions": [
        { "id": "4.1", "description": "does not write a generic post without metrics" },
        { "id": "4.2", "description": "asks for quantified before/after results or specific measurable outcomes" },
        { "id": "4.3", "description": "asks for a specific scene or moment (not just abstract lessons)" },
        { "id": "4.4", "description": "asks for a counter-intuitive insight that the post could be built around" }
      ]
    },
    {
      "id": 5,
      "prompt": "Write a LinkedIn post about the importance of remote work culture in 2024.",
      "expected_output": "Should not write a generic thought-leadership post. Should interview the user about their personal experience, numbers, and specific insight.",
      "files": [],
      "assertions": [
        { "id": "5.1", "description": "does not immediately write a generic thought-leadership post" },
        { "id": "5.2", "description": "asks about the user's personal experience with remote work" },
        { "id": "5.3", "description": "asks for specific data, outcomes, or evidence from the user's own context" },
        { "id": "5.4", "description": "asks what specific insight or belief the user wants to contradict or challenge" }
      ]
    },
    {
      "id": 6,
      "prompt": "Here's all my context:\n- B2B SaaS founder, 8 years experience\n- Launched an AI feature that nobody used for 3 months\n- Discovered the problem: wrong messaging, not wrong product\n- Fixed by rewriting 3 lines on the pricing page\n- Revenue from that feature went from $0 to $45k MRR in 60 days\n- CTA: commenting 'PRICING' gets my free messaging framework\n\nWrite the full post.",
      "expected_output": "Should first propose hooks (Phase 2), not skip straight to writing the full post.",
      "files": [],
      "assertions": [
        { "id": "6.1", "description": "proposes hooks before writing the full post (does not skip Phase 2)" },
        { "id": "6.2", "description": "if full post is eventually written: CTA is directive, not an open-ended question" },
        { "id": "6.3", "description": "if full post is written: no empty phrases like 'digital landscape' or 'incontournable'" },
        { "id": "6.4", "description": "if full post is written: no ternary structures (not 'X, Y, and Z' as a list of three equal items in the hook)" }
      ]
    },
    {
      "id": 7,
      "prompt": "Write a hook for my LinkedIn post about cold email. I sent 10,000 cold emails last quarter with a 38% reply rate using a 3-step personalization framework. My audience is B2B sales reps.",
      "expected_output": "Proposes 3-5 hooks. No rhetorical questions. Hooks reference specific numbers. Hooks reveal result without revealing full method.",
      "files": [],
      "assertions": [
        { "id": "7.1", "description": "proposes 3 or more hook options" },
        { "id": "7.2", "description": "no rhetorical questions in any hooks" },
        { "id": "7.3", "description": "hooks include specific numbers (10,000, 38%)" },
        { "id": "7.4", "description": "hooks reveal the result (38% reply rate) but not the full method — maintaining tension" }
      ]
    },
    {
      "id": 8,
      "prompt": "Here's my post:\n'Remote work is really changing the digital landscape of modern business. It's very important to have good culture. Teams that adapt will thrive. Teams that don't adapt will struggle. Companies need to think carefully about this very complex topic.'\n\nPlease improve this post.",
      "expected_output": "Rewrites removing empty phrases, filler words, passive constructions. Should suggest interview for concrete data. Result should be tighter with specific claims.",
      "files": [],
      "assertions": [
        { "id": "8.1", "description": "removes 'very', 'really', or similar filler adverbs" },
        { "id": "8.2", "description": "removes empty phrases like 'digital landscape'" },
        { "id": "8.3", "description": "uses active voice throughout" },
        { "id": "8.4", "description": "result is noticeably shorter/tighter than the original" },
        { "id": "8.5", "description": "suggests the user needs specific numbers/data to make the post credible" }
      ]
    },
    {
      "id": 9,
      "prompt": "My final CTA should be: 'What do you think about this approach? Let me know in the comments!'",
      "expected_output": "Should flag this as a weak, open-ended CTA and suggest a directive alternative. Open-ended questions reduce action.",
      "files": [],
      "assertions": [
        { "id": "9.1", "description": "identifies the open-ended question as a weak CTA" },
        { "id": "9.2", "description": "suggests a directive alternative (e.g., 'Comment X', 'DM me', 'Save this post')" },
        { "id": "9.3", "description": "explains why directive CTAs outperform open-ended questions" }
      ]
    },
    {
      "id": 10,
      "prompt": "Write a LinkedIn post body for this hook: 'I closed $2M in B2B deals last year using one question I never skip.'\nContext: The question is 'What happens if you don't solve this problem in 6 months?' It creates urgency without pressure. 47 deals closed, average deal size $42k. CTA: Comment 'QUESTION' to get the script.",
      "expected_output": "Post with hook, ABT structure, active voice, directive CTA, short paragraphs, no rhetorical questions. Costumer signal included.",
      "files": [],
      "assertions": [
        { "id": "10.1", "description": "post starts with or immediately after the given hook" },
        { "id": "10.2", "description": "no rhetorical questions in the post body" },
        { "id": "10.3", "description": "CTA is directive: 'Comment QUESTION' or similar — not a question" },
        { "id": "10.4", "description": "paragraphs are short (2 visual lines max per paragraph)" },
        { "id": "10.5", "description": "active voice throughout (no 'was closed by', 'are being used by')" }
      ]
    }
  ]
}

Supporting file: references/example-post.md

Example LinkedIn Post

A Decade of Failure

Yesterday I published a review of my first decade dedicated to entrepreneurship.

Why such a disaster?

Many blamed luck. After all, you just keep trying until you find the right thing. Eventually I'll get there.

I don't think that's it.

For me, it comes from something more personal.

I jump compulsively from one entrepreneurial venture to the next.

I'm becoming a known speaker? (120 conferences in 2019, €5k per conference by the end) → I drop everything and move to LinkedIn.

My agency hits €3M in 2021? → Time to build software!

I exceed $4M ARR with my open-source dev marketplace in crypto? Let's pivot to do AI in San Francisco.

All without ever taking a meaningful personal check.

No time to sell with constraining clauses that would dramatically increase acquisition price—that would cost me 12-18 months.

Unthinkable.

Besides, my next venture has so much more financial potential... it's obviously the right choice! (except I've repeated this pattern for 10 years)

But why this constant escape forward?

I always want to maximize learning. I chase what's hardest and most stimulating.

Because of that, in 10 years I went from "renting meeting rooms in a Grenoble coworking space" to "working with AI research teams in SF."

That's positive.

But there's also an adrenaline addiction. I love putting myself at risk and starting from zero.

Being an outsider means not having to bear the consequences of failure.

Who could blame me when I had no chance anyway?

That's what I need to get rid of. Time to grow up.

Why This Works

Hook: Cognitive dissonance (admitting failure while showing extreme success)

Mechanism: ABT structure

  • AND (kept jumping ventures)
  • BUT (kept abandoning them for new ones)
  • THEREFORE (finally recognizing the pattern)

Costly signal: Specific numbers ($4M ARR, €5k conferences, €3M agency)

Vulnerability: Admitting compulsion and adrenaline addiction (strategic disclosure)

Psychology lever: Support (overcome failure) + Complicity (the reader probably relates to FOMO)

Results: High engagement because it's:

  • Specific (actual numbers, actual decisions)
  • Counter-intuitive (successful person admits dysfunction)
  • Human (vulnerability without melodrama)
  • Actionable (reader recognizes their own pattern)

Supporting file: references/hook-frameworks.md

🎣 Hook Mastery: Framework Principles

The hook must follow the 80/20 Rule: Reveal 80% of the value (subject/result) but keep 20% of mystery (the how/why) to create tension.

Use these structures in Phase 2:

A. Cognitive Dissonance (The Paradox)

Principle: A negative situation followed by a positive reaction (or vice versa).

Example: "Yesterday, the tax authority took €666,000 from me. I popped champagne."

B. "A to C without B" (The Jump)

Principle: Show the starting point (A) and final result (C), hiding the method (B).

Example: "Five years ago, I was eating pasta in my teenage bedroom. Today, I generate €500k in annual revenue."

C. Contrarian Opinion (Counter-intuitive)

Principle: Take the opposite stance of market consensus.

Example: "Stop chasing virality. It's the best way to kill your B2B business."

D. Voyeurism Bias (Behind-the-scenes)

Principle: Promise a secret or confession.

Example: "I hesitated for a long time before posting this." or "I'm revealing the numbers nobody shows."

E. Brutal Social Proof

Principle: Frame authority with massive numbers on line 1.

Example: "In 2 years, I generated 40M+ impressions for my clients (Yomi Denzel, Eliott Meunier...)."

F. "Day 1" (Credibility)

Principle: A specific date anchors the narrative in reality.

Example: "January 1st, 2025, everything changed for my agency."

Key Principles

Radical Specificity - Use exact numbers, dates, and context ✅ Tension Creation - Hide the methodology; show the result ✅ Reality Anchor - Ground abstract concepts in concrete details ✅ Emotional Trigger - Activate curiosity, surprise, or recognition ✅ Lead with Value - The hook immediately signals why someone should read on

How do I install LinkedIn ghostwriting in Cursor, Claude Code, or Codex?

Run npx skills add samber/cc-skills --skill linkedin-ghostwriting in the project where you want it, then ask your agent for the skill by name. The --skill flag installs only LinkedIn ghostwriting, not every skill in the repository.

Where does LinkedIn ghostwriting come from and what license is it under?

LinkedIn ghostwriting comes from the samber/cc-skills repository on GitHub. That repository has 152 GitHub stars. The skill is published under the MIT license.

Prefer plain text? Read the LinkedIn ghostwriting guide as markdown.