post-writer
Install
When it triggers
SKILL.md
---
name: post-writer
description: Write a complete social media post (hook + body + CTA) from a topic or idea, sized for the target platform. Reads brand-brief.md for voice and audience context, applies proven hook patterns, and auto-runs post-grader as a final quality pass before returning the post. Triggers on "write me a post about X," "draft a [platform] post," or any specific writing request with a topic.
argument-hint: "[topic or idea] [platform]"
allowed-tools: Read, Write, Edit, Glob, AskUserQuestion
---
# Post Writer
You take an idea and a platform, and return a finished post: hook, body, CTA. The output is graded and improved before the user sees it. They get a polished draft, not a first draft.
## When to Activate
- "Write me a [platform] post about [topic]"
- "Draft an Instagram caption for [idea]"
- User has both a topic AND a platform in mind.
If the topic is missing, ask. If the platform is missing, ask. Don't fill in defaults.
## Workflow
### Step 1: Load context
1. Look for `brand-brief.md` in the current directory. **If missing, automatically invoke the `brand-brief` skill to capture it now.** Don't tell the user to "run brand-brief first" β just walk them through the brief, save it, then continue.
2. Read the brief once it exists. Pay special attention to the **Strong Opinion / Wedge** section β that's the viral fuel for contrarian-take and "most people think X" hooks.
3. Confirm the topic and platform with the user if either is unclear.
### Step 2: Pick a hook pattern
**The hook is 50% of the post-grader score. If the hook is weak, the post can't recover.** Pick a pattern that fits the topic AND the user's wedge from `brand-brief.md`.
Choose ONE of these proven patterns. These are public templates from top short-form creators.
**1. The Reframe (one-liner flip)**
> Common belief, flipped in one sentence.
> Example: "Your 9-5 isn't killing your dreams. Wasting your 5-9 is."
**2. The Parallel Contrast**
> [Group A] does X. [Group B] does Y.
> Example: "Rich people buy time. Poor people buy stuff."
**3. The Specific Number Hook**
> Lead with a concrete, surprising number.
> Example: "I tested 47 candle scents. Only 3 sold."
**4. The Question Hook**
> Open with a question that makes the reader stop and answer.
> Example: "What's the one thing you'd quit if you weren't scared?"
**5. The Vulnerable Story Hook**
> Drop the persona. Lead with a real moment.
> Example: "I almost shut down my shop in March. Here's what saved it."
**6. The Contrarian Take**
> State the unpopular position.
> Example: "Most marketing advice is wrong for businesses under $10k/month."
**7. The Pain Point List**
> Stack 2-3 specific pains the reader recognizes.
> Example: "You spend hours writing posts. Nobody comments. You wonder if it's worth it."
**8. The Behind-the-Scenes Hook**
> "Here's what nobody tells you about [thing]."
> Example: "Here's what nobody tells you about handmade businesses."
**9. The Receipts Hook (high-virality, credibility-driven)**
> "I [did specific thing] for [time period]. Here's what happened."
> Or: "I tested [N] [things]. Only [smaller N] worked."
> Example: "I tested 47 candle scents. Only 3 sold."
> Example: "I posted on Instagram every day for 90 days. Engagement dropped 60%."
> Why it works: specific numbers + earned right to speak + curiosity gap (what happened?).
**10. The "Most People" Reverse Hook (high-virality, polarizing)**
> "Most people think [common belief]. Here's why they're wrong."
> Or: "[Audience] keeps telling me [X]. They're missing the point."
> Example: "Most candle makers think scent is the product. The product is calm."
> Example: "Every coach tells you to find your niche. Find your enemy first."
> Why it works: forces the reader to pick a side. Polarity drives comments. Pull the wedge from `brand-brief.md`.
**11. The Stolen Lesson Hook (high-virality, tactical)**
> "I copied [specific thing]. Here's what happened."
> Or: "[Famous person/brand] does [specific thing]. I tried it. Result: [outcome]."
> Example: "I copied Apple's product page format. Sales went up 23%."
> Example: "Hormozi gives away his entire course for free. I copied that. My email list 4x'd."
> Why it works: borrowed credibility + tested-by-me proof + the reader can copy it too.
**Pattern picking guide:**
- Customer story β Vulnerable Story Hook (#5)
- Strong opinion / wedge β Reverse Hook (#10) or Reframe (#1)
- Numbers / data / case study β Receipts Hook (#9) or Specific Number Hook (#3)
- Industry critique β Reframe (#1), Contrarian Take (#6), or Reverse Hook (#10)
- Tip / how-to β Stolen Lesson Hook (#11) or Pain Point List (#7)
- Recognition / "you do this" β Pain Point List (#7) or Vulnerable Story (#5)
When in doubt, prefer #9, #10, or #11 β they have the highest virality ceiling.
### Step 2.5: Iterate on the hook (CRITICAL)
Because hook = 50% of the score, write the hook FIRST and rewrite it 3-5 times before touching the body.
1. Draft 3 hook variations using different patterns from above.
2. Read each one out loud. Would you stop scrolling for it?
3. Apply the **first 3-words test**: do the first 3 words alone create curiosity, surprise, or emotional pull? "Here's what I" β fail. "I tested 47" β pass. "Most people think" β pass.
4. Pick the strongest variation. Refine it until every word earns its place. Cut filler ("really," "actually," "just," "the truth is").
5. The final hook should pass these checks:
- Specific number, name, or moment in it (not abstract)
- Creates a question the reader needs answered
- Could stand alone as a tweet
- Doesn't sound like AI
Don't proceed to the body until the hook is genuinely strong. A weak hook = wasted body.
### Step 3: Draft the body
Body rules (apply ALL):
- **Length**: Match platform constraints (see Platform Constraints below).
- **Specificity**: Use real numbers, real names, real situations. Not "many customers" β "the customer who emailed me Tuesday."
- **One idea**: One concrete insight per post. If it's two ideas, save the second for another post.
- **You/your**: Address the reader directly. Not "people who run small businesses" β "you, running your business."
- **Active voice, short sentences**: Mix in 1-2 short sentences for rhythm.
- **No filler**: Cut "in today's world," "let me tell you," "the truth is."
### Step 4: Add the CTA
One CTA per post. Not three. Pull from `brand-brief.md` (the "Primary CTA" field), but adapt to **what the platform's algorithm rewards** (see Step 4.5 below).
**Share-driving CTAs (strongest β they trigger the metric algorithms reward most):**
- "Tag someone who needs to hear this." (drives shares + tags)
- "Save this for [specific moment they'll need it]." (drives saves)
- "Send this to one person who [specific trait]." (drives DMs)
- "Screenshot this and put it on your wall." (drives saves + shares)
**Comment-driving CTAs (great for LinkedIn, Twitter, Threads):**
- "What's the [specific thing] you'd add to this list?"
- "Is this you, or am I overthinking it?"
- "Tell me I'm wrong." (polarizing, drives comments)
- A polarizing question that forces the reader to pick a side
**DM-driving CTAs (great for Instagram, Facebook lead gen):**
- "Comment '[KEYWORD]' and I'll send you [specific resource]."
- "DM me '[KEYWORD]' if you want my [thing]."
- These trigger DM automations and grow lists.
**Weak CTAs to avoid:**
- "What do you think?" (too vague β produces nothing)
- "Like and share!" (begging, algorithm penalizes)
- "Click the link in bio" (only works with strong reason)
- "Let me know in the comments" (passive, no specificity)
### Step 4.5: Match the CTA to the platform's algorithm
Each platform rewards a different metric. Pick the CTA that drives THAT metric.
| Platform | What it rewards most | Best CTA type |
|----------|---------------------|---------------|
| LinkedIn | Comments (2x weight vs likes) | Polarizing question, "what would you add?" |
| Instagram (feed) | Saves, then shares | "Save this for...", "Send this to..." |
| Instagram (Reels) | Completion, then saves | On-screen text + "Save for later" |
| Facebook | Shares, saves | "Tag someone who needs this" |
| Twitter / X | Replies (75x weight vs likes) | Polarizing take, "tell me I'm wrong" |
| Threads | Replies | Same as Twitter |
| TikTok | Watch-time / completion | Hook in first 1.7s; on-screen text "wait for it" |
| Substack Notes | Restacks (= shares) | Punchy, screenshottable insight |
### Step 5: Apply universal voice rules
Run this checklist before passing to grader:
- [ ] Contractions used (don't, you've, it's, won't)
- [ ] Zero em dashes
- [ ] Numbers written as digits ("5 tips" not "five tips")
- [ ] Active voice throughout
- [ ] No "really," "very," "just," "literally," "actually," "basically" β these are filler
- [ ] No metaphors that aren't earning their keep
- [ ] Reads like a real person, not a content template
### Step 6: Auto-invoke post-grader
Run the `post-grader` skill on your draft. Get the score and fix recommendations. Apply them. Re-grade if needed. **Do not return a post scoring below 8/10.** Loop until it scores 8+.
### Step 7: Return the final post
```
**Platform**: [platform]
**Hook pattern used**: [name]
**Quality score**: [X/10]
---
[Final post text]
---
**Why this works**: [1 sentence on what makes it strong]
```
If the user is in a `content-coach` flow, hand off to scheduling. If they invoked you directly, ask if they want to schedule via `post-scheduler` or just take the text.
## Platform Constraints (essentials)
- **Twitter/X**: 280 chars max. Sweet spot 60-100 chars. No hashtags. No links in body.
- **Threads**: 500 chars max. No hashtags.
- **Bluesky**: 300 chars max. No hashtags.
- **LinkedIn**: Hook in first 2 lines (~140 chars before "See more"). Sweet spot 1,200-1,500 chars. No external links in body. 3-5 hashtags optional at end.
- **Instagram**: Hook in first 125 chars. Requires media. 3-5 niche hashtags at end. One CTA.
- **Facebook**: 40-80 chars optimal. No hashtags. No engagement bait ("comment YES").
- **TikTok caption**: Under 150 chars for most posts. 5 hashtags max. Keyword in first 30 chars.
When a post is for multiple platforms, write the longer-platform version, then ask if they want a shortened version for stricter platforms (Twitter/Bluesky).
## What NOT to Do
- Don't return a post that scores below 8/10. Loop on the grader until it's there.
- Don't pile on hashtags where they hurt (Twitter, LinkedIn, Facebook).
- Don't write 3 versions and ask the user to pick. Pick one. They can ask for an alternative if they want one.
- Don't include the hook pattern name or grading details in the post itself. Those are for the meta-output, not the actual caption.Related skills
Last updated