writing-linkedin-posts
npx skills add https://github.com/jay-sahnan/skills --skill writing-linkedin-posts
Agent 安装分布
Skill 文档
LinkedIn Post Writer
Create engaging, authentic LinkedIn posts that sound like the userânot generic LinkedIn content.
First-Time Setup
This skill scrapes the user’s LinkedIn posts to learn their voice. It requires two environment variables.
Check if already configured:
echo $LINKEDIN_USERNAME $APIFY_TOKEN
If not set, guide the user:
-
Get an Apify API token (free tier available): https://console.apify.com/settings/integrations
-
Find LinkedIn username (last part of profile URL):
linkedin.com/in/jaysahnanâjaysahnan -
Add to
~/.zshrc:export APIFY_TOKEN="your_token_here" export LINKEDIN_USERNAME="your_username" -
Run:
source ~/.zshrc
Note: Never store tokens in settings.json values. Use environment variables only.
Primary Approach: Learn Their Voice First
Before writing any post, scrape the user’s existing LinkedIn posts to learn their authentic voice. The user’s actual tone, formatting, and style is the primary guide. Algorithm research is secondary context.
- Run
scripts/scrape_my_posts.py(reads from env vars) - Analyze their posts for voice patterns
- Write posts that match their authentic style
- Ask if they want the post copied to clipboard
See “Learning the User’s Voice” section for the full workflow.
Core Principles
Authenticity Over Performance
LinkedIn has matured. Readers can spot manufactured vulnerability and engagement bait instantly. The posts that resonate now are genuinely useful or genuinely humanânot optimized for virality.
What works:
- Real experiences with honest reflection
- Specific insights from your actual work
- Admitting what you don’t know
- Sharing without needing validation
What doesn’t:
- Performed vulnerability for engagement
- Stories that feel too perfectly structured
- Lessons that sound like motivational posters
One Idea Per Post
The biggest mistake is cramming multiple tips, stories, or angles into one post. Focus on:
- One core idea
- One story
- One insight
- One lesson
If you have five points, that’s five posts.
Value Without Strings
Every post must educate, inspire, or entertain. Ask: “Would I find this valuable if a stranger posted it?” Not “Will this get engagement?”
Building Your Signature Voice
Top Voices don’t just post wellâthey’re recognizable. Their perspective, style, and focus areas are consistent.
Define Your POV
Answer these before writing:
- What topic do I have genuine expertise in?
- What’s my contrarian belief in my industry?
- What perspective do I bring that others don’t?
- What would I want to be known for saying?
Consistency Markers
Develop 2-3 recognizable elements:
- A recurring theme or topic area
- A consistent tone (analytical, warm, direct, witty)
- A signature format you’re known for
- Phrases or frameworks you’ve coined
Voice Calibration
Your LinkedIn voice should be:
- More polished than a text to a friend
- Less formal than a company memo
- As smart as your best work conversations
- As human as your real personality
Post Anatomy
The Hook (Lines 1-2)
The first 2-3 lines appear before “See more” and determine everything.
Modern hooks that work (avoid overused patterns):
| Type | Example | Why It Works |
|---|---|---|
| Honest admission | “I’ve been wrong about remote work.” | Genuine, not performed |
| Specific observation | “I’ve noticed something in every founder who scaled past $10M.” | Credibility + curiosity |
| Direct challenge | “Most career advice optimizes for the wrong thing.” | Provokes thought |
| Unexpected angle | “The best hire I made had the worst resume.” | Subverts expectations |
| Simple truth | “Nobody talks about how lonely leadership is.” | Resonates emotionally |
Hooks to retire:
- “This one thing made me $X” (feels like a scam ad)
- “The CEO pulled me aside and said…” (overused curiosity bait)
- “I’m excited to announce…” (corporate and skippable)
- “[Number] words that changed my life” (too formulaic)
See references/hooks.md for comprehensive examples.
The Body
Structure for scannability:
- Short paragraphs (1-3 sentences max)
- Line breaks between thoughts
- Bullet points for lists (but don’t overuse)
- Bold for emphasis sparingly
Storytelling framework:
- Set the scene (brieflyâone sentence)
- Introduce tension or conflict
- Show the turning point
- Deliver the insight
- Make it applicable to the reader
The Close
End with purpose, not desperation:
Good closes:
- Genuine question that invites perspective
- Specific call to action (“Bookmark this for your next negotiation”)
- Reflection that lingers (“Something to sit with this week”)
Avoid:
- “Agree?” (lazy)
- “Comment YES if…” (engagement bait)
- “Share this with someone who needs it” (needy)
- “Follow me for more” (salesy)
Vulnerability Done Right
Authentic sharing builds connection. Performed vulnerability destroys trust.
Strategic Vulnerability vs. Exploitation
Share when:
- The experience taught you something others can learn
- You’ve processed it enough to offer perspective
- It serves the reader, not your need for validation
- Time has passed and you have hindsight
Don’t share when:
- The wound is still fresh
- You’re seeking sympathy, not providing value
- It could harm others involved
- It feels performative even to you
The Vulnerability Test
Before posting something personal, ask:
- Am I sharing this to help others or to process my own feelings?
- Would I be comfortable if this went viral?
- Does this include genuine insight or just pain?
- Have I protected others who were involved?
Post Formats
Story Post
Best for: Personal experiences, lessons learned, career moments
[Hook - honest admission or surprising outcome]
[One sentence of context]
[What happened - the tension or challenge]
[The turning point]
[What you learned]
[Question or reflection for reader]
List Post
Best for: Frameworks, actionable advice, curated insights
[Hook - clear value promise]
[Why this matters - one sentence]
1. [Point with brief context]
2. [Point with brief context]
3. [Point with brief context]
(3-7 items max)
[Closing insight or question]
Contrarian Post
Best for: Challenging conventional wisdom (with substance)
[Hook - your contrarian position, stated directly]
[The common belief you're challenging]
[Your reasoning - why you see it differently]
[Evidence or experience]
[Nuanced conclusion - acknowledge complexity]
[Invite discussion]
Contrarian guardrails:
- Have genuine expertise on the topic
- Argue against ideas, not people
- Offer an alternative, not just criticism
- Acknowledge what the other side gets right
- Be open to being wrong
Observation Post
Best for: Industry insights, trends, patterns you’ve noticed
[What you've observed]
[Specific evidence or examples]
[Why it matters]
[Your interpretation]
[Question to test if others see it too]
Media Formats
Text-only posts aren’t the only option. Different formats serve different purposes.
Document/Carousel Posts
- Higher save rates and extended engagement
- Best for: step-by-step guides, frameworks, before/after
- Keep to 5-10 slides
- Each slide should stand alone
- End with a summary or CTA slide
Image Posts
- Use when visual adds genuine value (charts, diagrams, photos from events)
- Avoid: stock photos, generic graphics, memes (unless that’s your brand)
- Native uploads outperform links
Polls
- Good for: genuine market research, sparking discussion
- Bad for: obvious questions, engagement farming
- Always follow up with your take on the results
Video
- LinkedIn favors native video over links
- Keep under 90 seconds for most content
- Captions are essential (most watch muted)
- Face-to-camera builds personal connection
Engagement Strategy
What happens after you post matters as much as what you post.
The First Hour
LinkedIn’s algorithm weighs early engagement heavily:
- Respond to every comment in the first 60 minutes
- Ask follow-up questions to extend conversations
- Thank people genuinely, not generically
Comment Quality
Your comments on others’ posts build your brand too:
- Add insight, not just agreement
- Share relevant experience
- Ask thoughtful follow-up questions
- Avoid “Great post!” without substance
What Not to Do
- Engagement pods (LinkedIn detects and penalizes these)
- Asking people to “comment for a free resource”
- Posting and disappearing
- Commenting just to get visibility
Writing Guidelines
Tone Spectrum
Find your spot on each scale:
Corporate ââââââââââ Casual
Reserved ââââââââââ Vulnerable
Analytical ââââââââââ Emotional
Serious ââââââââââ Playful
Most Top Voices sit slightly right of center on each scale.
Length Guidelines
- Ideal: 800-1,500 characters (enough for depth, short enough to finish)
- Maximum: 3,000 characters
- Use whitespace generouslyâdense text kills engagement
Formatting Rules
- Never use hashtags inline with text
- Place 3-5 hashtags at the very end, after a line break
- One emoji max, if any (overuse signals inauthenticity)
- Use “I” not “we” for personal posts
What to Avoid
Content anti-patterns:
- “I’m excited to announce…” (corporate speak)
- Humblebrags disguised as lessons
- Recycled viral post formats (the airport conversation, the Uber driver wisdom)
- Posting others’ frameworks without credit
- Tragedy exploitation (using global events for engagement)
Engagement anti-patterns:
- “Comment YES if you agree”
- “Share this with 3 people”
- Tagging people who didn’t ask to be tagged
- Posting controversial takes you don’t actually believe
- Fake questions where you just want to share your answer
Format anti-patterns:
- Every. Sentence. As. Its. Own. Line.
- Excessive emoji strings
- ALL CAPS FOR EMPHASIS
- Hashtag stuffing
Content Categories That Perform
- Career lessons – Failures, pivots, decisions made
- Behind-the-scenes – Real work experiences, how things actually work
- Industry insights – Patterns you’ve noticed, trends you’re seeing
- How-to frameworks – Actionable processes readers can apply
- Contrarian takes – Challenge assumptions (with substance)
- Personal milestones – Only when tied to broader insights
Learning the User’s Voice (Dynamic)
Before writing posts, scrape and analyze the user’s existing LinkedIn posts to match their authentic voice.
Step 1: Run the Scraper
If env vars are configured, just run:
python scripts/scrape_my_posts.py
If not configured, the script shows setup instructions.
Caching: Posts are cached in cache/. Subsequent runs use cache automatically. Use --refresh to fetch new posts.
Step 3: Analyze Voice Patterns
From the scraped posts, identify:
- Hook style – How do they open posts? Questions, statements, stories?
- Sentence structure – Short punchy vs. flowing sentences
- Formatting – Line breaks, lists (bullets vs arrows), paragraph length
- Tone – Analytical, warm, direct, playful, vulnerable?
- Common phrases – Recurring words or expressions
- Length – Typical post length in words/characters
- Closing style – Questions, CTAs, reflections?
- What they avoid – Hashtags, emojis, corporate speak?
Step 4: Create Voice Profile
Document findings:
User's LinkedIn Voice:
- Tone: [e.g., casual but professional, reflective]
- Hook style: [e.g., personal statements, questions]
- Formatting: [e.g., heavy whitespace, -> arrows for lists]
- Sentence style: [e.g., short paragraphs, 1-3 sentences]
- Common phrases: [e.g., "feels like", "the challenge is"]
- Typical length: [e.g., 300-500 chars]
- Avoids: [e.g., hashtags, excessive emojis, "Agree?"]
Step 5: Write in Their Voice
Use the voice profile to draft posts that sound authentically like them, not generic LinkedIn content.
Step 6: Offer Clipboard Copy
After presenting the draft, ask the user if they want it copied to clipboard for easy pasting into LinkedIn. If yes, use pbcopy (macOS) or equivalent to copy the plain text post.
References
scripts/scrape_my_posts.py– Primary: Scrape user’s posts for voice learningreferences/hooks.md– Hook patterns with 2025 engagement datareferences/examples.md– Algorithm research and format performance data
Quick Checklist Before Posting
- Hook: Would this stop MY scroll?
- Focus: Is there ONE clear idea?
- Value: Would I find this useful if someone else posted it?
- Authenticity: Does this sound like me, not “LinkedIn me”?
- Format: Is it scannable with short paragraphs?
- Close: Does it invite genuine engagement?
- Vulnerability check: Am I sharing to help or to process?
- Cringe test: Will I be proud of this post in a year?