- name
- x-post-drafting
- description
- Draft X (Twitter) posts for developers, founders, and indie builders. Use whenever the user wants to write, rewrite, or improve a tweet, post, hook, thread, launch announcement, or build-in-public update, or asks "how is this tweet" or "make this catchy", even when they do not say "X" or "Twitter". Produces 2 or 3 variants in the user's language. Does not publish.
# Draft an X post
Write posts that a stranger stops for, reads to the end, and wants to try. Hand the user text they can copy. Do not publish, reply, or schedule: posting is their call, and their name is on it.
## 0. Know the author
A post sounds right only when it sounds like the person who posts it. Before you write, find out:
- who they are and what they build (product, role, company)
- who reads them (for example, frontend devs, AI tool builders, indie hackers)
- the language they post in
Look in the conversation, project files, and any memory or profile notes first. Ask only for what is still missing, in one short question. Put a personal fact in the post only when the user wants it there.
Write in the language of the request. Keep product names as the user writes them.
## 1. The voice
This is where drafts fail most. A post should read like a dev texting a friend about something they made, not like a product page.
- Casual and plain. Lowercase bullets, no periods. A small slip in grammar is fine. One emoji, usually at the end: 👀 for "look at this", 😭 or 🙃 for honest pain, 👇 when more is in the replies.
- Say what the reader gets, in the words the reader would use. Never use the product's internal terms, your own spec's labels, or a list of its mechanics.
- No clever lines: no wordplay, no meta jokes ("this tweet was written by..."), no setup-punchline hooks. Clever reads as trying.
- No ad words, no model words: delve, leverage, unlock, seamless, empower, supercharge, game-changer, robust, "excited to share", "let's dive in", "here's the thing".
- If the user has a strict style rule for how you report to them (for example, Simplified Technical English), it applies to your notes, not to the post.
Read every line aloud. If it does not sound like a person said it, rewrite it.
## 2. Topic and goal
Every post needs one topic and one goal:
- **Value.** A short guide the reader can use today.
- **Build in public.** One public goal, and the messy work toward it.
- **Launch.** A product, feature, or repo that is ready to show.
- **Data.** The user measured or compared something and has the numbers.
- **Question.** An honest question to followers, with a real number behind it.
- **Thread.** A how-to that starts from an objection.
State the topic and goal in one line. If you inferred either, say so. If you cannot infer the goal, ask once, name the goals, and stop.
Collect the facts the post stands on: what it does, a before and after or output, a link, how to get it, and any number the user wants public. For a launch, ask whether it is open source. If the user pastes someone else's post to remix, keep the shape and write new lines.
## 3. Pick the format
Use one format for every variant, so the user compares hooks, not structures.
**Launch.** The first line is a flat fact about a pain every reader has seen, or a plain belief about what their agent should be able to do. Then the name, an optional one-line "what it is", and three bullets.
```
{Every X has the same Y.} or {Your agent should be able to Z}
Introducing {name} (or: So I built {name}, {what it is})
{optional: one line, what it does}
- {a count or a list of names: "207 presets", "E2B, Daytona, Vercel and more"}
- {how little work: "switch in 1 line", "React, Vue, Svelte or plain HTML"}
- {the agent angle: "or ask your agent to add it", "includes an agent skill"}
and it's open source 👀
```
The bullets are things you can count or name, never adjectives. Keep the open-source line only when it is true; "{n} free, all customizable 👀" is the same close for a free tier. Always attach a video or image of the thing working. Example, for an invented product: "Every PDF parser breaks on tables / Introducing pdfkit / - 40 file types / - tables and scans in 1 call / - includes an agent skill for setup / and it's open source 👀".
**Data.** Name what was measured and how many. Then a ranked list with the real numbers. End by pointing at the rest.
```
I benchmarked {n} {things} for {use}.
{metric}, best to worst:
1. {name}: {number}
2. {name}: {number}
There's more below 👇
```
Use only numbers the user gave. Tag the tools in the list: their teams often repost.
**Question.** One honest question, a real number that makes it worth answering, and nothing else. Example: "Should I apply to YC with {product}? It's been growing: {before} → {after}". Keep it a real question the author wants answered, never bait.
**Value.** Open with the result and a promise of proof. Then numbered points. Each point: the rule, the hard way you learned it (with a number if the user gave one), why it works, and a short list of what to do. End with the point that matters most.
```
Here's the best way to {result}, as of right now ({proof} attached below).
1. {rule}. {how you learned it}. {why}.
So:
- {do this}
- {do this}
2. ...
```
**Build in public.** Run it as a numbered series with one public goal: "day {n} of {goal}", then "today:", then one lowercase paragraph with one concrete detail and why. Tag the person or company it is for. Add a real result only if the user gave one.
**Thread.** Open with an objection the user has heard, reject it, and promise the how-to:
```
"{objection}"
BS. Here is how.
🧵
```
Use a softer rejection when "BS" does not fit. Then one short post per real step, numbered. No filler steps.
Under every variant, add one line: the image or short video to attach, and what it must show. On X, a post with a clear visual gets read.
Links and calls to action go in the first reply, not the post, unless the product's domain is its name (for example "So I built gradients.sh"). Tag the tools, companies, or people the post names.
What gets few views: a vague teaser with nothing to see ("I have a cool idea..."), a sponsor shoutout, a fragment that only makes sense in a thread. Do not draft these as standalone posts.
## 4. Write 2 or 3 variants
Change only the hook and the wording between variants. A good hook names a result the reader wants, a problem they have, or a claim they will argue with. A product name alone is not a hook.
A single post fits without "Show more". A value post may run long when every point earns its place.
## 5. Check silently, then show
Check each variant before you show it. Rewrite until all pass; after two failed rewrites, drop it and write a new one. Do not print the checks.
1. **Stranger.** A reader who has never heard of the author still gets something they want.
2. **Reader's words.** Every bullet says what the reader gets, in words they would use. No internal terms.
3. **Person.** Read aloud, it sounds like a dev talking, not an ad, a model, or a clever copywriter.
4. **Proof.** Every number, price, and comparison came from the user. You added none.
5. **Skim.** Short lines. No paragraph over two lines, except the "why" in a value post.
If Proof fails because the user gave no concrete detail, ask for one. Do not invent it.
## 6. After the drafts
Keep this to two or three lines:
- Which draft you would post, and why, in one line.
- Questions the post will likely get, so the user can prepare. Do not draft reply text: the author writes their own replies.
Only when the user asks: launch angles for other people to post, posting mix, profile checks, or what to do after posting. For angles, name who has lived it, what access to give them, and a one-line brief they rewrite in their own words.
## Sources
- @leodev, launch posts (gradients.sh 37k views, dithercn 33k): https://x.com/leodev/status/2112514949167907029, https://x.com/leodev/status/2114688757404447027
- @leodev, data post: https://x.com/leodev/status/2113363220190945638
- @leodev, build-in-public series: https://x.com/leodev/status/2112942644196516135
- @leodev, value post shape, structure, no AI replies: https://x.com/leodev/status/2111230753812132150
- @robj3d3, 0 to 32k playbook (profile, one goal, 40/30/20/10 mix, remix): https://x.com/robj3d3/status/1991098548914446382
- @0xfJuan, How to Engineer Virality on X: https://x.com/0xfJuan/status/2114746175026798821
- @treg_ai, launch post shape: https://x.com/treg_ai/status/2114674262179188755
- @dannypostma, objection-hook thread: https://x.com/dannypostma/status/1646368426246680579
View on GitHub