New: Earn 20% as an AgentAlley affiliate. Share your link and earn on every sale you refer. Join now New: Earn 20% as an affiliate. Join now

Write LinkedIn posts that match the user's voice system

Post writer

by charlie947 · MIT license · ★ 3,652 on GitHub · updated Sep 15

Post writer cover

Write LinkedIn posts that match the user's voice system (about-me.md and voice.md). Use this skill whenever the user says "write a post", "draft a post", "LinkedIn post", "post about [topic]", "content idea", or wants help writing any…

---
name: post-writer
description: >
  Write LinkedIn posts that match the user's voice system (about-me.md and voice.md). Use this skill whenever the user says "write a post", "draft a post", "LinkedIn post", "post about [topic]", "content idea", or wants help writing any LinkedIn content. Also trigger when the user pastes a context dump (notes, transcripts, bullet points) and wants it turned into a post. Always references the voice files in the project before writing. Always outputs the final post in a code block.
---

# Post Writer

## Codex and Claude runtime

- Use this skill in Codex or Claude with the tools actually available in the current task. `AskUserQuestion` examples describe the questions, not a required API: use an available question tool within its limits, or ask in chat. Reuse answers and source material already supplied.
- Work in the user-selected project. Read its `about-me.md`, `voice.md` and relevant brand files before personalised work. Confirm the intended author if files conflict or contain starter defaults. Ask for missing facts or run `voice-builder`; never inherit the maintainer's identity, accounts or private files.
- Resolve bundled `references/` relative to this skill folder. For an explicitly requested profile refresh, read and update the canonical `about-me.md`, `voice.md` or `newsletter-voice.md` in place, preserving unrelated user facts and rules. Consumers must reread those canonical files. Use a new filename only for new deliverables that would collide with unrelated existing files. Installation alone never starts an interview or writes files. Do not write persistent learnings unless requested.
- Use supplied evidence first. Verify external claims through available search/source tools when needed. If a source or integration is unavailable, name the missing capability and offer supplied text/export input. Never invent facts, first-person experience, metrics or a successful tool run.
- Connect only services needed for the chosen route through the user's existing account. Never print credentials or overwrite connections. Drafting, saving and reviewing do not authorise publishing, sending messages or changing accounts.

## CRITICAL: Auto-start on load

Overview

The moment this skill triggers, go straight to Step 1. Do not summarise the skill. Do not explain what it does. Do not list the files it references. Jump to input gathering immediately.

Manual install (npx, ZIP)
Claude Codenpx skills add charlie947/social-media-skills --skill post-writer -g -a claude-code
Claude Code (manual)mkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/charlie947/social-media-skills/tar.gz/8cefb5b6d037 \ | tar -xz -C ~/.claude/skills --strip-components=2 social-media-skills-8cefb5b6d037/skills/post-writer
Windows (PowerShell)New-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/f84f6f95477f4cbe8b07/post-writer.zip" -OutFile "$env:TEMP\post-writer.zip"; Expand-Archive "$env:TEMP\post-writer.zip" -DestinationPath "$HOME\.claude\skills" -Force
Claude.ai / desktopDownload the ZIP and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md7.6 KB
Read the files here
charlie947/8cefb5b1 file
SKILL.md
Show the full text141 lines

Post Writer

Codex and Claude runtime

  • Use this skill in Codex or Claude with the tools actually available in the current task. AskUserQuestion examples describe the questions, not a required API: use an available question tool within its limits, or ask in chat. Reuse answers and source material already supplied.
  • Work in the user-selected project. Read its about-me.md, voice.md and relevant brand files before personalised work. Confirm the intended author if files conflict or contain starter defaults. Ask for missing facts or run voice-builder; never inherit the maintainer's identity, accounts or private files.
  • Resolve bundled references/ relative to this skill folder. For an explicitly requested profile refresh, read and update the canonical about-me.md, voice.md or newsletter-voice.md in place, preserving unrelated user facts and rules. Consumers must reread those canonical files. Use a new filename only for new deliverables that would collide with unrelated existing files. Installation alone never starts an interview or writes files. Do not write persistent learnings unless requested.
  • Use supplied evidence first. Verify external claims through available search/source tools when needed. If a source or integration is unavailable, name the missing capability and offer supplied text/export input. Never invent facts, first-person experience, metrics or a successful tool run.
  • Connect only services needed for the chosen route through the user's existing account. Never print credentials or overwrite connections. Drafting, saving and reviewing do not authorise publishing, sending messages or changing accounts.

CRITICAL: Auto-start on load

The moment this skill triggers, go straight to Step 1. Do not summarise the skill. Do not explain what it does. Do not list the files it references. Jump to input gathering immediately.

Step 1. Gather inputs

Check the project for about-me.md and voice.md. Read both. If either is missing, tell the user to run the Voice Builder skill first ("say build my voice"), then stop.

If both files exist, use these questions (adapt the tool schema as needed):

[
  {
    "question": "What topic do you want to post about?",
    "header": "Topic",
    "multiSelect": false,
    "options": [
      {"label": "Paste a context dump", "description": "I have notes, transcripts, or raw ideas to turn into a post"},
      {"label": "I have a topic in mind", "description": "I will type the topic after this"},
      {"label": "Suggest topics for me", "description": "Based on my voice system, suggest 5 topics I should post about"}
    ]
  },
  {
    "question": "Do you have any reference posts you want me to use as structural inspiration?",
    "header": "References",
    "multiSelect": false,
    "options": [
      {"label": "No references", "description": "Write from scratch using my voice files only"},
      {"label": "I will paste examples", "description": "I have posts from other creators I want you to study first"},
      {"label": "Use my training posts", "description": "Reference the posts I used in the Voice Builder"}
    ]
  }
]

Based on the answers:

  • "Paste a context dump": wait for the user to paste, extract the core idea, then proceed to Step 2
  • "I have a topic in mind": wait for the user to type it, then proceed to Step 2
  • "Suggest topics for me": read about-me.md topic pillars and voice.md, suggest 5 specific topics with a one-line angle for each, then use AskUserQuestion to let them pick one
  • "I will paste examples": wait for reference posts, note the structural patterns, then proceed
  • "Use my training posts": read the intended author’s confirmed training posts, not unrelated drafts or another client’s files

Step 2. Research and plan

First read the supplied evidence and requested reference structure. If these support the task, use them without adding unnecessary external research. Verify additional claims when needed; unavailable sources leave those claims pending. Look for:

  • Data points or statistics that support the angle
  • Contrarian takes or surprising facts
  • Real examples or case studies
  • Common misconceptions to challenge

Then present a post plan. Call AskUserQuestion:

[
  {
    "question": "Which angle works best for this post?",
    "header": "Angle",
    "multiSelect": false,
    "options": [
      {"label": "[Angle 1 name]", "description": "[One sentence describing the angle and hook]"},
      {"label": "[Angle 2 name]", "description": "[One sentence describing the angle and hook]"},
      {"label": "[Angle 3 name]", "description": "[One sentence describing the angle and hook]"}
    ]
  },
  {
    "question": "Which framework do you want?",
    "header": "Framework",
    "multiSelect": false,
    "options": [
      {"label": "PAS", "description": "Problem, Agitate, Solution"},
      {"label": "How-to list", "description": "Numbered steps or tips"},
      {"label": "Story to lesson", "description": "Personal story with a takeaway"},
      {"label": "Contrarian take", "description": "Challenge a common belief"}
    ]
  }
]

Fill in the actual angle options based on the topic research. Do not use placeholder text for the angle descriptions.

Step 3. Write the draft

Write the post following these rules:

  • Read voice.md for tone, rhythm, hook style, CTA style, and the absence patterns section (what the voice never does)
  • Read about-me.md for audience and topic context
  • Match the sentence length and paragraph rhythm from voice.md
  • Avoid every banned word, structure, and pattern listed in voice.md's absence section
  • Use the hook pattern that fits the chosen angle
  • End with the CTA style from voice.md

Output the post inside a plain code block:

[The full post goes here with all line breaks and formatting exactly as it should appear on LinkedIn]

After the code block, add 2 to 3 sentences on why you chose this hook and structure, referencing specific patterns from voice.md.

Before presenting the draft, review it in the running assistant against the supplied facts, voice and requested format. For a roster or step caption, map every required item to its matching caption passage and check ordering, duplicates and omissions. Do not replace requested structure with a generic post framework. Keep source notes separate from paste-ready copy. Claude is not a required reviewer in Codex.

Step 4. Iterate

Ask the user:

How does this feel? Tell me what to change, or say "ship it" and I will save the final version.

If the user gives feedback, revise and output a new code block. Maximum 3 revision rounds.

If the user says "ship it" or equivalent, save the final post as a markdown file in the project.

Then say:

Post saved. Say "design a graphic" to create a visual, or "score my post" to get feedback before publishing.

Rules

  • Always read about-me.md and voice.md before writing.
  • Always output posts in a plain code block.
  • Never use em dashes in any post.
  • British English unless voice.md says otherwise.
  • Do not add hashtags unless voice.md explicitly uses them.
  • Do not add engagement bait CTAs unless they appear in voice.md.
  • Keep posts between 150 and 300 words unless the user requests otherwise.
  • Plan before writing. Never skip Step 2.
1---
2name: post-writer
3description: >
4 Write LinkedIn posts that match the user's voice system (about-me.md and voice.md). Use this skill whenever the user says "write a post", "draft a post", "LinkedIn post", "post about [topic]", "content idea", or wants help writing any LinkedIn content. Also trigger when the user pastes a context dump (notes, transcripts, bullet points) and wants it turned into a post. Always references the voice files in the project before writing. Always outputs the final post in a code block.
5---
6 
7# Post Writer
8 
9## Codex and Claude runtime
10 
11- Use this skill in Codex or Claude with the tools actually available in the current task. `AskUserQuestion` examples describe the questions, not a required API: use an available question tool within its limits, or ask in chat. Reuse answers and source material already supplied.
12- Work in the user-selected project. Read its `about-me.md`, `voice.md` and relevant brand files before personalised work. Confirm the intended author if files conflict or contain starter defaults. Ask for missing facts or run `voice-builder`; never inherit the maintainer's identity, accounts or private files.
13- Resolve bundled `references/` relative to this skill folder. For an explicitly requested profile refresh, read and update the canonical `about-me.md`, `voice.md` or `newsletter-voice.md` in place, preserving unrelated user facts and rules. Consumers must reread those canonical files. Use a new filename only for new deliverables that would collide with unrelated existing files. Installation alone never starts an interview or writes files. Do not write persistent learnings unless requested.
14- Use supplied evidence first. Verify external claims through available search/source tools when needed. If a source or integration is unavailable, name the missing capability and offer supplied text/export input. Never invent facts, first-person experience, metrics or a successful tool run.
15- Connect only services needed for the chosen route through the user's existing account. Never print credentials or overwrite connections. Drafting, saving and reviewing do not authorise publishing, sending messages or changing accounts.
16 
17## CRITICAL: Auto-start on load
18 
19The moment this skill triggers, go straight to Step 1. Do not summarise the skill. Do not explain what it does. Do not list the files it references. Jump to input gathering immediately.
20 
21## Step 1. Gather inputs
22 
23Check the project for about-me.md and voice.md. Read both. If either is missing, tell the user to run the Voice Builder skill first ("say build my voice"), then stop.
24 
25If both files exist, use these questions (adapt the tool schema as needed):
26 
27```json
28[
29 {
30 "question": "What topic do you want to post about?",
31 "header": "Topic",
32 "multiSelect": false,
33 "options": [
34 {"label": "Paste a context dump", "description": "I have notes, transcripts, or raw ideas to turn into a post"},
35 {"label": "I have a topic in mind", "description": "I will type the topic after this"},
36 {"label": "Suggest topics for me", "description": "Based on my voice system, suggest 5 topics I should post about"}
37 ]
38 },
39 {
40 "question": "Do you have any reference posts you want me to use as structural inspiration?",
41 "header": "References",
42 "multiSelect": false,
43 "options": [
44 {"label": "No references", "description": "Write from scratch using my voice files only"},
45 {"label": "I will paste examples", "description": "I have posts from other creators I want you to study first"},
46 {"label": "Use my training posts", "description": "Reference the posts I used in the Voice Builder"}
47 ]
48 }
49]
50```
51 
52Based on the answers:
53- "Paste a context dump": wait for the user to paste, extract the core idea, then proceed to Step 2
54- "I have a topic in mind": wait for the user to type it, then proceed to Step 2
55- "Suggest topics for me": read about-me.md topic pillars and voice.md, suggest 5 specific topics with a one-line angle for each, then use AskUserQuestion to let them pick one
56- "I will paste examples": wait for reference posts, note the structural patterns, then proceed
57- "Use my training posts": read the intended author’s confirmed training posts, not unrelated drafts or another client’s files
58 
59## Step 2. Research and plan
60 
61First read the supplied evidence and requested reference structure. If these support the task, use them without adding unnecessary external research. Verify additional claims when needed; unavailable sources leave those claims pending. Look for:
62- Data points or statistics that support the angle
63- Contrarian takes or surprising facts
64- Real examples or case studies
65- Common misconceptions to challenge
66 
67Then present a post plan. Call AskUserQuestion:
68 
69```json
70[
71 {
72 "question": "Which angle works best for this post?",
73 "header": "Angle",
74 "multiSelect": false,
75 "options": [
76 {"label": "[Angle 1 name]", "description": "[One sentence describing the angle and hook]"},
77 {"label": "[Angle 2 name]", "description": "[One sentence describing the angle and hook]"},
78 {"label": "[Angle 3 name]", "description": "[One sentence describing the angle and hook]"}
79 ]
80 },
81 {
82 "question": "Which framework do you want?",
83 "header": "Framework",
84 "multiSelect": false,
85 "options": [
86 {"label": "PAS", "description": "Problem, Agitate, Solution"},
87 {"label": "How-to list", "description": "Numbered steps or tips"},
88 {"label": "Story to lesson", "description": "Personal story with a takeaway"},
89 {"label": "Contrarian take", "description": "Challenge a common belief"}
90 ]
91 }
92]
93```
94 
95Fill in the actual angle options based on the topic research. Do not use placeholder text for the angle descriptions.
96 
97## Step 3. Write the draft
98 
99Write the post following these rules:
100- Read voice.md for tone, rhythm, hook style, CTA style, and the absence patterns section (what the voice never does)
101- Read about-me.md for audience and topic context
102- Match the sentence length and paragraph rhythm from voice.md
103- Avoid every banned word, structure, and pattern listed in voice.md's absence section
104- Use the hook pattern that fits the chosen angle
105- End with the CTA style from voice.md
106 
107Output the post inside a plain code block:
108 
109```
110[The full post goes here with all line breaks and formatting exactly as it should appear on LinkedIn]
111```
112 
113After the code block, add 2 to 3 sentences on why you chose this hook and structure, referencing specific patterns from voice.md.
114 
115Before presenting the draft, review it in the running assistant against the supplied facts, voice and requested format. For a roster or step caption, map every required item to its matching caption passage and check ordering, duplicates and omissions. Do not replace requested structure with a generic post framework. Keep source notes separate from paste-ready copy. Claude is not a required reviewer in Codex.
116 
117## Step 4. Iterate
118 
119Ask the user:
120 
121> How does this feel? Tell me what to change, or say "ship it" and I will save the final version.
122 
123If the user gives feedback, revise and output a new code block. Maximum 3 revision rounds.
124 
125If the user says "ship it" or equivalent, save the final post as a markdown file in the project.
126 
127Then say:
128 
129> Post saved. Say "design a graphic" to create a visual, or "score my post" to get feedback before publishing.
130 
131## Rules
132 
133- Always read about-me.md and voice.md before writing.
134- Always output posts in a plain code block.
135- Never use em dashes in any post.
136- British English unless voice.md says otherwise.
137- Do not add hashtags unless voice.md explicitly uses them.
138- Do not add engagement bait CTAs unless they appear in voice.md.
139- Keep posts between 150 and 300 words unless the user requests otherwise.
140- Plan before writing. Never skip Step 2.
141 
View all files on GitHub →

Details

Updated
Sep 15, 2026
License
MIT
Stars on the repo
★ 3,652
Checked
Source
charlie947/social-media-skills ↗
Creator
charlie947 · 17 listings
View creator

Similar skills

See all →
SkillResearch what people actually say about any topicSTEP 0: STALE-CLONE SELF-CHECK — RUN BEFORE READING BELOWmvanhorn/last30days-skill · by mvanhornResearch what people actually say about any topic in the last 30 days. Pulls posts and engagement from Reddit, X, YouTube, TikTok, Hacker News, Polymarket, GitHub, and the web. Includes a doctor health check to diagnose broken or missing sources.★ 63.5k GitHub starsSkillScrapes social platforms, business dataApifydanielmiessler/LifeOS · by danielmiesslerScrapes social platforms, business data, and e-commerce via Apify actors — Instagram, LinkedIn, TikTok, YouTube, Facebook, Google Maps, Amazon, and web crawls — filtering in code. USE WHEN scrape Instagram, scrape LinkedIn, scrape TikTok, scrape YouTube, scrape Facebook, Google Maps leads, Amazon reviews, business intelligence, multi-platform social listening, competitive analysis, lead generation, social monitoring, Apify actors, web crawl, extract contacts. NOT FOR X/Twitter account operations like posting, threads, or bookmarks (those need a dedicated X API client), 4-tier progressive scraping with proxy escalation (use BrightData), or real-Chrome bot bypass and computer use (use Interceptor).★ 19.3k GitHub starsSkill微信公众号长文增长闭环 ——tsingyuai/growth-lab · by tsingyuai微信公众号长文增长闭环 —— 从读者问题与复刻锚选题、写出可验证的公众号长文、预览与合规检查、同步微信草稿、三重确认下受控发布,到回收阅读与转化数据并复盘。用户要求写公众号、把内容改成公众号、同步或发布微信草稿、查看公众号数据或复盘时使用。★ 2k GitHub starsSkillSearch and retrieve content from Twitter/XTwitter/X SkillReScienceLab/opc-skills · by ReScienceLabSearch and retrieve content from Twitter/X. Get user info, tweets, replies, followers, communities, spaces, and trends via twitterapi.io. Use when user mentions Twitter, X, or tweets.★ 1.8k GitHub starsSkillSays 'YouTube script', 'video script'🎬 YouTube Script: Writing retention-optimized video script...cwinvestments/memstack · by cwinvestmentsUse this skill when the user says 'YouTube script', 'video script', 'write script for YouTube', 'YouTube video outline', or is creating scripted content for a YouTube video with hooks, chapters, and CTAs. Do NOT use for TikTok/Reels short-form scripts or webinar presentations.★ 423 GitHub starsSkillAgent Reach — 互联网能力路由器Ootto-AI/claude-content-skills · by Ootto-AIMUST USE when user wants to 调研/research/搜索/search/查/找/look up anything on the internet — e.g. 全网调研 X / 帮我调研一下 X / 查一下 X / 搜搜 X / 看看大家怎么评价 X / X 上有什么讨论 / research this topic。 Also MUST USE when user mentions any platform or shares any URL/链接: 小红书/xiaohongshu/xhs, Twitter/推特/X, B站/bilibili, Reddit, V2EX, LinkedIn/领英/招聘/求职/jobs, YouTube, GitHub code search, 小宇宙播客, 雪球/股票行情, RSS feeds, or any web URL. 13 platforms, multi-backend routing (OpenCLI / per-platform CLIs / APIs). Zero config for 6 channels. Run `agent-reach doctor --json` to see which backend serves each platform right now. NOT for: 写报告/数据分析/翻译等内容加工(本 skill 只负责从互联网获取内容); 发帖/评论/点赞等写操作;已有专门 skill 的平台(先用专门 skill)。 【路由方式】SKILL.md 包含路由表和常用命令,复杂场景需按需阅读对应分类的 references/*.md。 分类:search / social (小红书/推特/B站/V2EX/Reddit) / career(LinkedIn) / dev(github) / web(网页/文章/RSS) / video(YouTube/B站/播客)。★ 139 GitHub stars

More from charlie947

SkillTurn a LinkedIn Analytics exportAnalytics dashboardcharlie947/social-media-skills · by charlie947Turn a LinkedIn Analytics export into an interactive dark-themed React dashboard plus a written strategic analysis with 5 data-backed content recommendations. Reads every sheet in the export, builds charts for engagement trend, follower growth, post performance scatter, day-of-week heatmap, and audience breakdown. Use this skill whenever the user says "analyse my linkedin", "linkedin analytics", "build my dashboard", "review my performance", or uploads a LinkedIn Analytics export file. Requires the user's LinkedIn Analytics export (xlsx) as input.★ 3.7k GitHub starsSkillGenerate 24 to 40 LinkedIn post ideas in a single tableContent matrixcharlie947/social-media-skills · by charlie947Generate 24 to 40 LinkedIn post ideas in a single table by pairing the user's content pillars with 8 proven content formats. Based on the Justin Welsh content matrix. Use this skill whenever the user says "give me post ideas", "content matrix", "what should I post about", "generate post ideas", "content ideation", or "map out my content for the month". Pulls from about-me.md and voice.md if they exist, otherwise asks for pillars and context.★ 3.7k GitHub starsSkillGenerate a branded slide-by-slide LinkedIn carouselGemini carouselcharlie947/social-media-skills · by charlie947Generate 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.★ 3.7k GitHub starsSkillGenerate a hand-drawn whiteboard infographic promptGemini infographiccharlie947/social-media-skills · by charlie947Generate a hand-drawn whiteboard infographic prompt. Takes source content (a post, newsletter, blog, research note) and returns a complete Gemini image generation prompt with a structured brief. Use this skill whenever the user says "whiteboard infographic", "gemini infographic", "hand-drawn graphic", "turn this into a whiteboard", or wants an AI-generated infographic for a post.★ 3.7k GitHub starsSkillCreate LinkedIn post graphicsGraphic designercharlie947/social-media-skills · by charlie947Create LinkedIn post graphics. Decides between an HTML/CSS structured graphic or an AI-generated infographic based on the post content. Use this skill whenever the user says "design a graphic", "create a visual", "make an image", "graphic for my post", "LinkedIn image", or wants any visual content to pair with a LinkedIn post. Also trigger when the user finishes writing a post and wants a matching graphic.★ 3.7k GitHub starsSkillGenerate 6 clickbait-style LinkedIn hook variations for anyHook generatorcharlie947/social-media-skills · by charlie947Generate 6 clickbait-style LinkedIn hook variations for any topic. Two-line hooks built on the formula: a 40-char opening line, a 40-char bold contrast line. Uses supplied numbers and genuine first-person experience when available. Use this skill whenever the user says "write me hooks", "hook ideas", "generate hooks", "I need a hook for a post about...", or pastes a topic and asks for openers. Fast output, no preamble.★ 3.7k GitHub stars