X post writer
Draft a single tweet or short auto-thread for X (Twitter) using a 2026 X hook formula (one-liner contrarian, data-point, build-in-public, mini-list, relatable cold-open), picked by goal (replies, reposts, likes, bookmarks).
How to use it
- Hit Copy the whole skill.
- Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
ChatGPT: make a Project and paste it into Instructions.
Neither? Paste it at the top of a new chat — it works for that chat. - Describe your job in plain words. The AI follows the skill from there.
npx degit sergebulaev/x-skills/.codex-marketplace/x-skills/skills/x-post-writer#main ~/.claude/skills/x-post-writerFor one project only, change the path to .claude/skills/x-post-writer.
Not working?
- Check which app you pasted it into — the steps above name the right one.
- Some skills need the paid tier of Claude or ChatGPT.
Paste into Claude, ChatGPT or Cursor.
Show the full text123 lines
X Post Writer
Ship a single tweet, or a tight 2-3 tweet micro-thread, using hook shapes that actually travel on X in 2026. Single-tweet formulas land a complete punch in the first line, because X has no "see more" fold.
When to use
- User says "write me a tweet about X"
- User has a topic or a rough one-liner and wants a sharper hook
- User wants to pick a proven single-tweet shape and fill in their voice
- User wants a quick draft that auto-publishes on approval
Formulas this skill uses (single-tweet shapes)
| Code | Formula | Primary goal | Best for |
|---|---|---|---|
| X1 | One-Liner Contrarian | reposts | a sharp, defensible against-the-grain take |
| X2 | Data-Point Hook | bookmarks | one odd-precision number that reframes a thing |
| X3 | Build-in-Public Confession | replies | a real metric from your own work, ugly ones included |
| X4 | Quote-Tweet Dunk-with-Value | reposts | adding a layer to someone else's take (quote tweet) |
| X5 | Mini-List Tweet | bookmarks | a scannable list that fits in one tweet |
| X6 | Relatable Cold-Open | likes | a specific shared moment, no setup |
| X11 | Third-Person Case-Study Flex | reposts | someone else's absurd, specific result as anyone-could-copy bait |
Full skeletons in ../../references/hook-formulas.md. For long-form tweetstorms
(X7-X10), use x-thread-builder. X11 was validated as the top-recurring winning
shape in a ~450-tweet corpus (July 2026); prefer it over a first-person "How I"
when the result you are citing is someone else's.
Pick by goal first
| Goal | Reach for |
|---|---|
| Replies | X3, X1 |
| Reposts | X1, X4, X11 |
| Likes | X6 |
| Bookmarks | X2, X5, X11 |
Steps
Voice profile first (all drafts). If ../../references/voice-profile.md has filled: yes, load it and match the user's voice fingerprint, hard rules, and CTA/link style throughout. If it is not filled, mention once that x-humanizer --mode profile can learn their voice from a few posts, then proceed with the generic voice rules.
- Gather inputs. Topic, angle, any rough draft, target audience (builders / founders / a niche), and the goal (replies / reposts / likes / bookmarks).
- Pick the container. If the idea is one claim, one number, or one moment,
it is a single tweet. If it is a scannable one-line-per-item list, still a
single tweet (X5). If items need teaching or the idea has a build, hand off
to
x-thread-builder. - Pick the formula. Use the goal table to shortlist, then suggest 2-3 that also fit the topic and let the user choose.
- Draft the tweet. Fill the skeleton in the user's voice. Respect the 2026
X rules:
- First line carries the whole load (no fold).
- Under 280 chars on a standard account (emoji count as 2 chars). Confirm the user's tier; only go long if they are on Premium and the length earns it.
- One idea per tweet. Line breaks as beats.
- 0-1 hashtag at the end, 0-1 emoji, none on a serious take.
- No external link in the tweet (offer to put it in a reply).
- Humanizer pass. Scrub 2026 AI vocab by density, cap em dashes (at
most one per tweet, never swap one for a period), break stacked triads,
generic openers and reveal bridges. Leave a single tweet's rhythm alone
(uniform rhythm wins on short posts; never insert a fragment for punch).
Add an odd-precision number with a named referent or a named entity where
the claim allows it. Canonical rules:
x-humanizerV3. - Optional audit. Invoke
x-humanizer --mode auditfor a pass-fail check. - Approval card. Show: formula used, full draft, char count (note if emoji push it over 280), suggested posting window, primary goal.
- On approval. Call
lib.publish(kind="post", draft_text=<approved>, target_url="https://x.com/compose/tweet", platforms=[<X_PLATFORM_ID>], scheduled_time=<iso_or_None>). The wrapper handles Publora / manual / diy routing. If the content runs long, Publora auto-splits it into a numbered thread.
Hard rules
Global voice rules: see root SKILL.md Voice rules. Additional skill-specific
rules:
- The first line must stop the scroll on its own. Rewrite any opener that needs line 2 to make sense.
- Keep a standard-account tweet inside 280 chars. If it does not fit, tighten it or escalate to a thread, never ship a truncated thought.
- One specific number where the claim allows it. 2.4x beats "way better".
- Do not hard-sell the user's product. One natural mention max.
Anti-patterns (skill will refuse)
- ALL CAPS first line for intensity. Carry intensity with word choice.
- Em dashes above the cap (more than one in a tweet), or an em dash swapped for a period.
- "Here's what / here's how" or "Stop X, start Y" as the opener; "The result?" as a reveal.
- Announced candor ("Let me be honest", "not gonna lie") with no dated fact behind it.
- "Unpopular opinion:" on a take that is actually popular.
- Padding a one-line idea with filler to look substantial.
- Rule-of-three lists without specifics.
- "leverage", "fundamentally", "game-changer", "deep dive".
- External link in the tweet body.
- Engagement bait ("RT if you agree", "reply YES").
Resources
../../references/hook-formulas.md- all 11 X formula skeletons (X1-X6 and X11 are single-tweet)../../references/algorithm-heuristics.md- 2026 X ranking rules (signals, timing, limits)references/single-tweet-checklist.md- the per-tweet scrub and fit list
Optional illustration
Offer a generated image when a visual would lift reach. Draft a prompt and call
lib.illustrate(prompt, kind="wide"), pulling brand handle/color from Voice &
Brand Profile section 6 for a pixel-exact overlay. Show the returned url + cost,
then attach on publish via media_urls=[url]. Full workflow (incl. quote-cards):
../x-humanizer/sub-skills/illustration.md. No Pixfaro key -> it drafts the prompt for you to generate manually.
Related skills
x-thread-builder- when the idea needs more than a tweetx-humanizer- aggressive AI-tell scrubber, plus--mode auditfor reviewx-hook-extractor- reverse-engineer a hook from a tweet you admire
| 1 | |
| 2 | name x-post-writer |
| 3 | description "Draft a single tweet or short auto-thread for X (Twitter) using a 2026 X hook formula (one-liner contrarian, data-point, build-in-public, mini-list, relatable cold-open), picked by goal (replies, reposts, likes, bookmarks). Respects the 280-char limit (25,000 on Premium), runs the humanizer pass, and publishes via Publora on approval. Use to write a tweet from notes. Not for long threads (use x-thread-builder) or auditing a draft (use x-humanizer --mode audit)." |
| 4 | |
| 5 | |
| 6 | # X Post Writer |
| 7 | |
| 8 | Ship a single tweet, or a tight 2-3 tweet micro-thread, using hook shapes that |
| 9 | actually travel on X in 2026. Single-tweet formulas land a complete punch in |
| 10 | the first line, because X has no "see more" fold. |
| 11 | |
| 12 | ## When to use |
| 13 | |
| 14 | User says "write me a tweet about X" |
| 15 | User has a topic or a rough one-liner and wants a sharper hook |
| 16 | User wants to pick a proven single-tweet shape and fill in their voice |
| 17 | User wants a quick draft that auto-publishes on approval |
| 18 | |
| 19 | ## Formulas this skill uses (single-tweet shapes) |
| 20 | |
| 21 | | Code | Formula | Primary goal | Best for | |
| 22 | |---|---|---|---| |
| 23 | | X1 | One-Liner Contrarian | reposts | a sharp, defensible against-the-grain take | |
| 24 | | X2 | Data-Point Hook | bookmarks | one odd-precision number that reframes a thing | |
| 25 | | X3 | Build-in-Public Confession | replies | a real metric from your own work, ugly ones included | |
| 26 | | X4 | Quote-Tweet Dunk-with-Value | reposts | adding a layer to someone else's take (quote tweet) | |
| 27 | | X5 | Mini-List Tweet | bookmarks | a scannable list that fits in one tweet | |
| 28 | | X6 | Relatable Cold-Open | likes | a specific shared moment, no setup | |
| 29 | | X11 | Third-Person Case-Study Flex | reposts | someone else's absurd, specific result as anyone-could-copy bait | |
| 30 | |
| 31 | Full skeletons in `../../references/hook-formulas.md`. For long-form tweetstorms |
| 32 | (X7-X10), use `x-thread-builder`. X11 was validated as the top-recurring winning |
| 33 | shape in a ~450-tweet corpus (July 2026); prefer it over a first-person "How I" |
| 34 | when the result you are citing is someone else's. |
| 35 | |
| 36 | ### Pick by goal first |
| 37 | |
| 38 | | Goal | Reach for | |
| 39 | |---|---| |
| 40 | | Replies | X3, X1 | |
| 41 | | Reposts | X1, X4, X11 | |
| 42 | | Likes | X6 | |
| 43 | | Bookmarks | X2, X5, X11 | |
| 44 | |
| 45 | ## Steps |
| 46 | |
| 47 | **Voice profile first (all drafts).** If `../../references/voice-profile.md` has `filled: yes`, load it and match the user's voice fingerprint, hard rules, and CTA/link style throughout. If it is not filled, mention once that `x-humanizer --mode profile` can learn their voice from a few posts, then proceed with the generic voice rules. |
| 48 | |
| 49 | **Gather inputs.** Topic, angle, any rough draft, target audience (builders / |
| 50 | founders / a niche), and the goal (replies / reposts / likes / bookmarks). |
| 51 | **Pick the container.** If the idea is one claim, one number, or one moment, |
| 52 | it is a single tweet. If it is a scannable one-line-per-item list, still a |
| 53 | single tweet (X5). If items need teaching or the idea has a build, hand off |
| 54 | to `x-thread-builder`. |
| 55 | **Pick the formula.** Use the goal table to shortlist, then suggest 2-3 that |
| 56 | also fit the topic and let the user choose. |
| 57 | **Draft the tweet.** Fill the skeleton in the user's voice. Respect the 2026 |
| 58 | X rules: |
| 59 | First line carries the whole load (no fold). |
| 60 | Under 280 chars on a standard account (emoji count as 2 chars). Confirm the |
| 61 | user's tier; only go long if they are on Premium and the length earns it. |
| 62 | One idea per tweet. Line breaks as beats. |
| 63 | 0-1 hashtag at the end, 0-1 emoji, none on a serious take. |
| 64 | No external link in the tweet (offer to put it in a reply). |
| 65 | **Humanizer pass.** Scrub 2026 AI vocab by density, cap em dashes (at |
| 66 | most one per tweet, never swap one for a period), break stacked triads, |
| 67 | generic openers and reveal bridges. Leave a single tweet's rhythm alone |
| 68 | (uniform rhythm wins on short posts; never insert a fragment for punch). |
| 69 | Add an odd-precision number with a named referent or a named entity where |
| 70 | the claim allows it. Canonical rules: `x-humanizer` V3. |
| 71 | **Optional audit.** Invoke `x-humanizer --mode audit` for a pass-fail check. |
| 72 | **Approval card.** Show: formula used, full draft, char count (note if emoji |
| 73 | push it over 280), suggested posting window, primary goal. |
| 74 | **On approval.** Call `lib.publish(kind="post", draft_text=<approved>, |
| 75 | target_url="https://x.com/compose/tweet", platforms=[<X_PLATFORM_ID>], |
| 76 | scheduled_time=<iso_or_None>)`. The wrapper handles Publora / manual / diy |
| 77 | routing. If the content runs long, Publora auto-splits it into a numbered |
| 78 | thread. |
| 79 | |
| 80 | ## Hard rules |
| 81 | |
| 82 | Global voice rules: see root `SKILL.md` Voice rules. Additional skill-specific |
| 83 | rules: |
| 84 | |
| 85 | The first line must stop the scroll on its own. Rewrite any opener that needs |
| 86 | line 2 to make sense. |
| 87 | Keep a standard-account tweet inside 280 chars. If it does not fit, tighten it |
| 88 | or escalate to a thread, never ship a truncated thought. |
| 89 | One specific number where the claim allows it. 2.4x beats "way better". |
| 90 | Do not hard-sell the user's product. One natural mention max. |
| 91 | |
| 92 | ## Anti-patterns (skill will refuse) |
| 93 | |
| 94 | ALL CAPS first line for intensity. Carry intensity with word choice. |
| 95 | Em dashes above the cap (more than one in a tweet), or an em dash swapped for a period. |
| 96 | "Here's what / here's how" or "Stop X, start Y" as the opener; "The result?" as a reveal. |
| 97 | Announced candor ("Let me be honest", "not gonna lie") with no dated fact behind it. |
| 98 | "Unpopular opinion:" on a take that is actually popular. |
| 99 | Padding a one-line idea with filler to look substantial. |
| 100 | Rule-of-three lists without specifics. |
| 101 | "leverage", "fundamentally", "game-changer", "deep dive". |
| 102 | External link in the tweet body. |
| 103 | Engagement bait ("RT if you agree", "reply YES"). |
| 104 | |
| 105 | ## Resources |
| 106 | |
| 107 | `../../references/hook-formulas.md` - all 11 X formula skeletons (X1-X6 and X11 are single-tweet) |
| 108 | `../../references/algorithm-heuristics.md` - 2026 X ranking rules (signals, timing, limits) |
| 109 | `references/single-tweet-checklist.md` - the per-tweet scrub and fit list |
| 110 | |
| 111 | ## Optional illustration |
| 112 | |
| 113 | Offer a generated image when a visual would lift reach. Draft a prompt and call |
| 114 | `lib.illustrate(prompt, kind="wide")`, pulling brand handle/color from Voice & |
| 115 | Brand Profile section 6 for a pixel-exact overlay. Show the returned `url` + `cost`, |
| 116 | then attach on publish via `media_urls=[url]`. Full workflow (incl. quote-cards): |
| 117 | `../x-humanizer/sub-skills/illustration.md`. No Pixfaro key -> it drafts the prompt for you to generate manually. |
| 118 | ## Related skills |
| 119 | |
| 120 | `x-thread-builder` - when the idea needs more than a tweet |
| 121 | `x-humanizer` - aggressive AI-tell scrubber, plus `--mode audit` for review |
| 122 | `x-hook-extractor` - reverse-engineer a hook from a tweet you admire |
| 123 |