Draft Post
Generate a single content asset tailored to one channel. Strategic layer lives in build-in-public — this is the execution layer for "I need to ship one good post right now."
When to Use
- User says "draft a tweet/thread/post about X"
- A cron job from
build-in-public is triggered and needs to produce the actual draft
- User wants 2-3 variations of the same idea for different channels
When NOT to Use
- Multi-asset campaign with a calendar → use
campaign-plan (TBD) or just iterate this skill
- Quality check on existing draft → use
brand-review-content
- Engagement reply to someone else's post → use
reply-research
Inputs to Gather
If any of these are unclear, ASK before drafting. Do not invent context.
- Channel — X post, X thread, LinkedIn, blog, email. Default to X if unspecified.
- Topic/Trigger — what shipped, what failed, what you're thinking about. Specific > abstract.
- Goal — engagement, build-in-public transparency, lead-gen, education, or community signal.
- Length constraint — auto-derived from channel but override if user asks.
- Voice — if user has a configured brand voice (see
brand-review-content skill for the framework), apply it. Otherwise default to: first-person, specific, no AI-isms, no corporate jargon, dry humor OK, never "leverage" / "game-changer" / "unlock".
Channel-Specific Structure
X Post (single tweet, ≤280 chars)
Pattern:
- Hook in first 8 words — concrete detail, surprising number, contrarian take, or sharp question
- One specific point — never two. Threads exist for that reason.
- Optional CTA — only if there's a real ask (link, reply prompt, follow). Don't manufacture one.
Avoid:
- Opening with "Just" or "So"
- Generic engagement bait ("agree?", "thoughts?")
- More than 1 emoji unless writing in a tone where 2-3 fit
- Hashtags inside body text (max 1-2 at the end if needed)
Output 2-3 variants when possible. Different hook angles, same point.
X Thread (5-10 tweets, optional 25k mode for power users)
Structure:
- Hook tweet — earn the click. Promise something specific.
- Setup — 1 tweet of context for people who don't know you
- Body — 3-7 tweets, one idea per tweet. Use line breaks aggressively.
- Reversal or insight — the moment readers screenshot
- CTA — soft. Follow, reply, link out. Match the goal.
Pitfalls:
- Don't start tweet 2 with "A thread 🧵" — the hook should make people want it
- Don't number tweets unless the content is genuinely a list
- End on substance, not "follow for more"
LinkedIn Post (150-300 words, paragraph breaks every 1-2 lines)
Structure:
- Hook line, then a blank line
- Setup paragraph (2-3 short lines)
- Substance (3-5 short paragraphs, one idea each)
- Takeaway / insight
- Optional question to drive comments
Tone shift from X: more professional framing, less in-jokes, no shitposting. Same authenticity, dressed differently.
Blog Post (500-2000 words)
Structure:
- Headline — provide 2-3 options. Specific beats clever.
- Lede — first paragraph promises what the reader gets and proves the writer earned the read
- 3-5 H2 sections with descriptive headings
- Code blocks, screenshots, or specific numbers wherever possible
- Conclusion — what changed for you, what the reader should try
- CTA — relevant link, follow, newsletter
SEO is secondary for build-in-public blogs. Voice and specificity win.
Short Email (newsletter, ≤300 words)
- Subject line — provide 2-3 options. Curiosity > clickbait.
- Preview text — extends the subject, doesn't repeat it
- One main idea, treated like a long-form tweet
- Sign-off consistent with brand voice
Voice Defaults (when no brand voice configured)
If the user hasn't defined their voice, apply these defaults — they match indie-hacker / build-in-public conventions:
- First person, present tense for what's happening now
- Past tense for stories — "I shipped X and Y broke" beats "shipping X"
- Specific numbers over vague claims: "47 users" not "some users"
- Name the thing — products, tools, libraries by name
- Failure stories outperform success stories — write the honest version
- Dry humor lands; forced humor doesn't. Skip if unsure.
- Never use these words: leverage, unlock, game-changer, revolutionize, seamless, holistic, robust, cutting-edge, synergy
- Never start a post with "Just" or "So" (filler openers)
Workflow
- Confirm channel and topic. Ask if either is unclear. Do not guess.
- Pull context. Check recent git activity, recent posts (via
xurl if relevant), notes the user references.
- Pick the hook angle. State which hook pattern you're using and why (1 line, not a paragraph).
- Draft. Output 2-3 variants for short content, one full draft for long content.
- Annotate. Brief note on which voice rules were applied, any guesses you made.
- Offer next step. "Want me to run this through brand-review-content?" or "Adapt for LinkedIn?" or "Tighten one of these variants?"
Output Format
## Draft: [Channel] — [Topic]
**Hook angle:** [which pattern, 1 line]
---
[Variant 1 or full draft]
---
[Variant 2 if short content]
---
[Variant 3 if short content]
---
**Voice notes:** [what was applied, e.g. "specific numbers, failure framing, no corporate words"]
**Open questions:** [anything you guessed and want the user to confirm, e.g. "I assumed your goal was engagement — if it's lead-gen, the CTA should change"]
Pitfalls
Don't draft without a trigger. Generic "thoughts on building in public" posts are filler. If the user can't name what happened today, push back: "What specifically shipped or broke? That's the post."
Don't auto-add hashtags. Most indie-hacker accounts under 10K followers get nothing from hashtags. Only add if user asks or the post genuinely fits a tagged community.
Don't manufacture stakes. "This changed everything" when it didn't is the loudest tell of AI-generated content. If the impact was small, say it was small.
Don't write threads when a single tweet works. Most build-in-public updates are single tweets. Reserve threads for genuine deep-dives.
Don't write in someone else's voice. If the user has 50+ existing posts, reference 2-3 of them in your draft logic. If they don't, draft conservatively and ask for feedback to calibrate.
Don't end with "DM me if interested" unless that's the real ask. Most CTAs are filler. Cut them.
Source
Adapted from Anthropic's knowledge-work-plugins (Apache-2.0). See references/anthropic-source-notes.md for origin repo, adaptation decisions, and further mining candidates.
Related Skills
build-in-public — strategy layer (cadence, X Premium, VPS, cron setup)
brand-review-content — run drafts through voice/quality check before posting
reply-research — drafting replies to other accounts (different workflow)
xurl — actually posting to X
1---2name: draft-post3description: Draft a single piece of social content — X post, X thread, LinkedIn post, blog post, or short email — with channel-specific structure, hook patterns, and brand-voice application. Use when the user asks to "write a tweet about X", "draft a thread on Y", "post about today's progress", or any other single-asset content request. Pairs with brand-review (check before posting) and build-in-public (strategy layer).4---5
6# Draft Post
7
8Generate a single content asset tailored to one channel. Strategic layer lives in `build-in-public` — this is the execution layer for "I need to ship one good post right now."
9
10## When to Use
11
12- User says "draft a tweet/thread/post about X"
13- A cron job from `build-in-public` is triggered and needs to produce the actual draft
14- User wants 2-3 variations of the same idea for different channels
15
16## When NOT to Use
17
18- Multi-asset campaign with a calendar → use `campaign-plan` (TBD) or just iterate this skill
19- Quality check on existing draft → use `brand-review-content`
20- Engagement reply to someone else's post → use `reply-research`
21
22## Inputs to Gather
23
24If any of these are unclear, ASK before drafting. Do not invent context.
25
261. **Channel** — X post, X thread, LinkedIn, blog, email. Default to X if unspecified.
272. **Topic/Trigger** — what shipped, what failed, what you're thinking about. Specific > abstract.
283. **Goal** — engagement, build-in-public transparency, lead-gen, education, or community signal.
294. **Length constraint** — auto-derived from channel but override if user asks.
305. **Voice** — if user has a configured brand voice (see `brand-review-content` skill for the framework), apply it. Otherwise default to: first-person, specific, no AI-isms, no corporate jargon, dry humor OK, never "leverage" / "game-changer" / "unlock".
31
32## Channel-Specific Structure
33
34### X Post (single tweet, ≤280 chars)
35
36Pattern:
37- **Hook in first 8 words** — concrete detail, surprising number, contrarian take, or sharp question
38- **One specific point** — never two. Threads exist for that reason.
39- **Optional CTA** — only if there's a real ask (link, reply prompt, follow). Don't manufacture one.
40
41Avoid:
42- Opening with "Just" or "So"
43- Generic engagement bait ("agree?", "thoughts?")
44- More than 1 emoji unless writing in a tone where 2-3 fit
45- Hashtags inside body text (max 1-2 at the end if needed)
46
47Output 2-3 variants when possible. Different hook angles, same point.
48
49### X Thread (5-10 tweets, optional 25k mode for power users)
50
51Structure:
521. **Hook tweet** — earn the click. Promise something specific.
532. **Setup** — 1 tweet of context for people who don't know you
543. **Body** — 3-7 tweets, one idea per tweet. Use line breaks aggressively.
554. **Reversal or insight** — the moment readers screenshot
565. **CTA** — soft. Follow, reply, link out. Match the goal.
57
58Pitfalls:
59- Don't start tweet 2 with "A thread 🧵" — the hook should make people want it
60- Don't number tweets unless the content is genuinely a list
61- End on substance, not "follow for more"
62
63### LinkedIn Post (150-300 words, paragraph breaks every 1-2 lines)
64
65Structure:
66- Hook line, then a blank line
67- Setup paragraph (2-3 short lines)
68- Substance (3-5 short paragraphs, one idea each)
69- Takeaway / insight
70- Optional question to drive comments
71
72Tone shift from X: more professional framing, less in-jokes, no shitposting. Same authenticity, dressed differently.
73
74### Blog Post (500-2000 words)
75
76Structure:
77- **Headline** — provide 2-3 options. Specific beats clever.
78- **Lede** — first paragraph promises what the reader gets and proves the writer earned the read
79- **3-5 H2 sections** with descriptive headings
80- **Code blocks, screenshots, or specific numbers** wherever possible
81- **Conclusion** — what changed for you, what the reader should try
82- **CTA** — relevant link, follow, newsletter
83
84SEO is secondary for build-in-public blogs. Voice and specificity win.
85
86### Short Email (newsletter, ≤300 words)
87
88- **Subject line** — provide 2-3 options. Curiosity > clickbait.
89- **Preview text** — extends the subject, doesn't repeat it
90- **One main idea**, treated like a long-form tweet
91- **Sign-off** consistent with brand voice
92
93## Voice Defaults (when no brand voice configured)
94
95If the user hasn't defined their voice, apply these defaults — they match indie-hacker / build-in-public conventions:
96
97- First person, present tense for what's happening now
98- Past tense for stories — "I shipped X and Y broke" beats "shipping X"
99- Specific numbers over vague claims: "47 users" not "some users"
100- Name the thing — products, tools, libraries by name
101- Failure stories outperform success stories — write the honest version
102- Dry humor lands; forced humor doesn't. Skip if unsure.
103- Never use these words: leverage, unlock, game-changer, revolutionize, seamless, holistic, robust, cutting-edge, synergy
104- Never start a post with "Just" or "So" (filler openers)
105
106## Workflow
107
1081. **Confirm channel and topic.** Ask if either is unclear. Do not guess.
1092. **Pull context.** Check recent git activity, recent posts (via `xurl` if relevant), notes the user references.
1103. **Pick the hook angle.** State which hook pattern you're using and why (1 line, not a paragraph).
1114. **Draft.** Output 2-3 variants for short content, one full draft for long content.
1125. **Annotate.** Brief note on which voice rules were applied, any guesses you made.
1136. **Offer next step.** "Want me to run this through brand-review-content?" or "Adapt for LinkedIn?" or "Tighten one of these variants?"
114
115## Output Format
116
117```
118## Draft: [Channel] — [Topic]
119
120**Hook angle:** [which pattern, 1 line]
121
122---
123
124[Variant 1 or full draft]
125
126---
127
128[Variant 2 if short content]
129
130---
131
132[Variant 3 if short content]
133
134---
135
136**Voice notes:** [what was applied, e.g. "specific numbers, failure framing, no corporate words"]
137**Open questions:** [anything you guessed and want the user to confirm, e.g. "I assumed your goal was engagement — if it's lead-gen, the CTA should change"]
138```
139
140## Pitfalls
141
1421. **Don't draft without a trigger.** Generic "thoughts on building in public" posts are filler. If the user can't name what happened today, push back: "What specifically shipped or broke? That's the post."
143
1442. **Don't auto-add hashtags.** Most indie-hacker accounts under 10K followers get nothing from hashtags. Only add if user asks or the post genuinely fits a tagged community.
145
1463. **Don't manufacture stakes.** "This changed everything" when it didn't is the loudest tell of AI-generated content. If the impact was small, say it was small.
147
1484. **Don't write threads when a single tweet works.** Most build-in-public updates are single tweets. Reserve threads for genuine deep-dives.
149
1505. **Don't write in someone else's voice.** If the user has 50+ existing posts, reference 2-3 of them in your draft logic. If they don't, draft conservatively and ask for feedback to calibrate.
151
1526. **Don't end with "DM me if interested" unless that's the real ask.** Most CTAs are filler. Cut them.
153
154## Source
155
156Adapted from Anthropic's knowledge-work-plugins (Apache-2.0). See `references/anthropic-source-notes.md` for origin repo, adaptation decisions, and further mining candidates.
157
158## Related Skills
159
160- `build-in-public` — strategy layer (cadence, X Premium, VPS, cron setup)
161- `brand-review-content` — run drafts through voice/quality check before posting
162- `reply-research` — drafting replies to other accounts (different workflow)
163- `xurl` — actually posting to X