Build a long-form X thread using a 2026 thread formula
X thread builder

Build a long-form X (Twitter) thread (tweetstorm) using a 2026 thread formula (listicle-thread, story thread, curiosity-gap opener, how-I teardown), picked by goal (bookmarks, likes, reposts, replies). Structures tweet 1 as a promise…
--- name: x-thread-builder description: "Build a long-form X (Twitter) thread (tweetstorm) using a 2026 thread formula (listicle-thread, story thread, curiosity-gap opener, how-I teardown), picked by goal (bookmarks, likes, reposts, replies). Structures tweet 1 as a promise plus open loop, paces one beat per tweet, and closes for the repost. Publishes via Publora, which auto-splits long content into a numbered (1/N) thread. Not for single tweets (use x-post-writer) or auditing a draft (use x-humanizer --mode audit)." --- # X Thread Builder Build tweetstorms that get read all the way down. On X, tweet 1 is the entire funnel: it has to promise a payoff and open a loop, or no one taps "Show this thread." Everything after only matters if tweet 1 earns the tap. ## When to use - User says "turn this into a thread" or "write me a thread about X" - The idea is a list where each item needs teaching, a story with a build, a surprising result with a mechanism, or a repeatable process - User has a single tweet that is trying to do too much and should be a thread
Overview
Build tweetstorms that get read all the way down. On X, tweet 1 is the entire funnel: it has to promise a payoff and open a loop, or no one taps "Show this thread." Everything after only matters if tweet 1 earns the tap.
Manual install (npx, ZIP)
npx skills add sergebulaev/x-skills --skill x-thread-builder -g -a claude-codemkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/sergebulaev/x-skills/tar.gz/061109fdcb0b \
| tar -xz -C ~/.claude/skills --strip-components=4 x-skills-061109fdcb0b/.codex-marketplace/x-skills/skills/x-thread-builderNew-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/f16bfe1193270dfcde09/x-thread-builder.zip" -OutFile "$env:TEMP\x-thread-builder.zip"; Expand-Archive "$env:TEMP\x-thread-builder.zip" -DestinationPath "$HOME\.claude\skills" -ForceConnects with Agent Alley MCP · agentalley.io/mcp
Files included
SKILL.md6.4 KBreferences/1 file · 3.8 KB
Read the files here
sergebulaev/
Shared references3SKILL.md reads these from elsewhere in the repo. Not in the ZIP.
- algorithm-heuristics.md.codex-marketplace/x-skills/references/6.8 KB
- hook-formulas.md.codex-marketplace/x-skills/references/15.4 KB
- voice-profile.md.codex-marketplace/x-skills/references/1.6 KB
Show the full text128 lines
X Thread Builder
Build tweetstorms that get read all the way down. On X, tweet 1 is the entire funnel: it has to promise a payoff and open a loop, or no one taps "Show this thread." Everything after only matters if tweet 1 earns the tap.
When to use
- User says "turn this into a thread" or "write me a thread about X"
- The idea is a list where each item needs teaching, a story with a build, a surprising result with a mechanism, or a repeatable process
- User has a single tweet that is trying to do too much and should be a thread
Formulas this skill uses (thread shapes)
| Code | Formula | Primary goal | Best for |
|---|---|---|---|
| X7 | Listicle-Thread Promise | bookmarks | numbered teaching thread, one item per tweet |
| X8 | Story Thread | likes, reposts | a real narrative with a build and a turn |
| X9 | Curiosity-Gap Opener | replies, bookmarks | a surprising result, mechanism withheld |
| X10 | How-I Teardown | bookmarks | a repeatable process you ran yourself |
Full skeletons in ../../references/hook-formulas.md. For single tweets
(X1-X6), use x-post-writer.
Pick by goal first
| Goal | Reach for |
|---|---|
| Bookmarks | X7, X10, X9 |
| Likes | X8 |
| Reposts | X8 |
| Replies | X9 |
How Publora splits a thread
Pass the full thread as one content string. Publora auto-splits it:
- at paragraph breaks (
\n\n) first, - then at sentence endings,
- then at word boundaries as a fallback,
- and adds
(1/N)markers, reserving ~8 chars per tweet for the marker.
For full control of where each tweet breaks, hand-split with a --- separator
on its own line between tweets. The skill defaults to hand-splitting with ---
so the user sees exactly how the thread will land before approving.
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, the raw material (notes, a transcript, a result), target audience, and the goal (bookmarks / likes / reposts / replies).
- Pick the formula from the goal table, confirm it fits the material.
- Write tweet 1. This is 80% of the work:
- Promise a specific payoff (a number, a named result, a clear list count).
- Open a loop the reader has to resolve ("most people get 3 of them wrong", "I did not expect why").
- Keep it under 280 chars on a standard account. It must stop the scroll alone.
- Pace the body. One beat or one item per tweet. Front-load the strongest item or beat at position 1-2; tap-through decays with depth. Target 5-9 tweets for teaching/list threads; longer only for a strong story.
- Make each tweet stand alone. A reader landing mid-thread from a quote tweet should still get something.
- Write the closer. The last tweet earns the repost and the follow. End on the most quotable line, then one clear ask (bookmark, follow, or "reply with yours"), not both.
- Humanizer pass on every tweet. Scrub 2026 AI vocab by density, cap em
dashes (at most one per tweet, never swap one for a period), break stacked
triads and reveal bridges. Let tweet length vary only as the material
varies: never insert a 3-word punch tweet for rhythm, never alternate
long/short, and touch rhythm only if the whole thread reads machine-flat.
Canonical rules:
x-humanizerV3. - Optional audit. Run
x-humanizer --mode auditon the assembled thread. - Approval card. Show the thread tweet-by-tweet with per-tweet char counts,
total tweet count, the formula, and the goal. Confirm any
---breaks. - On approval. Call
lib.publish(kind="thread", draft_text=<full thread with --- breaks>, target_url="https://x.com/compose/tweet", platforms=[<X_PLATFORM_ID>], scheduled_time=<iso_or_None>). Publora posts the chain in one call and returns apostGroupId.
Hard rules
Global voice rules: see root SKILL.md Voice rules. Additional skill-specific
rules:
- Tweet 1 must contain a real promise and an open loop. A bare "A thread:" label is not a hook.
- Keep each tweet under 280 chars on a standard account (emoji = 2 chars).
- Front-load value. Never bury the best item at the end of a teaching thread.
- No external link in tweet 1. Put links in a later tweet or a reply.
- Natural rhythm, not manufactured variance. A long thread where every tweet is the same length and none carries a real clause reads machine-flat; fix that one thing. Never pad or chop tweets to create variance, and never insert a punch tweet: the inserted punch is the humanizer fingerprint.
- Only ship a Story Thread (X8) built on a true story. Readers punish manufactured stakes.
Anti-patterns (skill will refuse)
- Tweet 1 that closes its own loop (no reason to expand).
- Over-promising in tweet 1 and under-delivering in the body.
- Vague how-to steps ("be consistent", "add value") in an X10 teardown.
- Padding to hit a round number of tweets.
- Em dashes above the cap (more than one in a tweet), AI vocab clusters, ALL CAPS openers.
- "The result?" reveals, "No X. No Y. Just Z." staccato stacks, one-word tweets for drama.
- Announced candor ("Let me be honest", "not gonna lie") with no dated fact behind it.
- Engagement-bait closers ("RT if this helped").
Resources
../../references/hook-formulas.md- X7-X10 thread skeletons with worked shapes../../references/algorithm-heuristics.md- thread length, tap-through decay, signalsreferences/thread-structure.md- per-position pacing and the closer playbook
Related skills
x-post-writer- when the idea is really just one tweetx-humanizer- scrub each tweet, or--mode auditthe whole threadx-hook-extractor- lift the structure from a viral thread you admirex-content-planner- schedule threads into a weekly cadence
| 1 | |
| 2 | name x-thread-builder |
| 3 | description "Build a long-form X (Twitter) thread (tweetstorm) using a 2026 thread formula (listicle-thread, story thread, curiosity-gap opener, how-I teardown), picked by goal (bookmarks, likes, reposts, replies). Structures tweet 1 as a promise plus open loop, paces one beat per tweet, and closes for the repost. Publishes via Publora, which auto-splits long content into a numbered (1/N) thread. Not for single tweets (use x-post-writer) or auditing a draft (use x-humanizer --mode audit)." |
| 4 | |
| 5 | |
| 6 | # X Thread Builder |
| 7 | |
| 8 | Build tweetstorms that get read all the way down. On X, tweet 1 is the entire |
| 9 | funnel: it has to promise a payoff and open a loop, or no one taps "Show this |
| 10 | thread." Everything after only matters if tweet 1 earns the tap. |
| 11 | |
| 12 | ## When to use |
| 13 | |
| 14 | User says "turn this into a thread" or "write me a thread about X" |
| 15 | The idea is a list where each item needs teaching, a story with a build, a |
| 16 | surprising result with a mechanism, or a repeatable process |
| 17 | User has a single tweet that is trying to do too much and should be a thread |
| 18 | |
| 19 | ## Formulas this skill uses (thread shapes) |
| 20 | |
| 21 | | Code | Formula | Primary goal | Best for | |
| 22 | |---|---|---|---| |
| 23 | | X7 | Listicle-Thread Promise | bookmarks | numbered teaching thread, one item per tweet | |
| 24 | | X8 | Story Thread | likes, reposts | a real narrative with a build and a turn | |
| 25 | | X9 | Curiosity-Gap Opener | replies, bookmarks | a surprising result, mechanism withheld | |
| 26 | | X10 | How-I Teardown | bookmarks | a repeatable process you ran yourself | |
| 27 | |
| 28 | Full skeletons in `../../references/hook-formulas.md`. For single tweets |
| 29 | (X1-X6), use `x-post-writer`. |
| 30 | |
| 31 | ### Pick by goal first |
| 32 | |
| 33 | | Goal | Reach for | |
| 34 | |---|---| |
| 35 | | Bookmarks | X7, X10, X9 | |
| 36 | | Likes | X8 | |
| 37 | | Reposts | X8 | |
| 38 | | Replies | X9 | |
| 39 | |
| 40 | ## How Publora splits a thread |
| 41 | |
| 42 | Pass the full thread as one `content` string. Publora auto-splits it: |
| 43 | |
| 44 | at paragraph breaks (`\n\n`) first, |
| 45 | then at sentence endings, |
| 46 | then at word boundaries as a fallback, |
| 47 | and adds `(1/N)` markers, reserving ~8 chars per tweet for the marker. |
| 48 | |
| 49 | For full control of where each tweet breaks, hand-split with a `---` separator |
| 50 | on its own line between tweets. The skill defaults to hand-splitting with `---` |
| 51 | so the user sees exactly how the thread will land before approving. |
| 52 | |
| 53 | ## Steps |
| 54 | |
| 55 | **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. |
| 56 | |
| 57 | **Gather inputs.** Topic, the raw material (notes, a transcript, a result), |
| 58 | target audience, and the goal (bookmarks / likes / reposts / replies). |
| 59 | **Pick the formula** from the goal table, confirm it fits the material. |
| 60 | **Write tweet 1.** This is 80% of the work: |
| 61 | Promise a specific payoff (a number, a named result, a clear list count). |
| 62 | Open a loop the reader has to resolve ("most people get 3 of them wrong", |
| 63 | "I did not expect why"). |
| 64 | Keep it under 280 chars on a standard account. It must stop the scroll |
| 65 | alone. |
| 66 | **Pace the body.** One beat or one item per tweet. Front-load the strongest |
| 67 | item or beat at position 1-2; tap-through decays with depth. Target 5-9 |
| 68 | tweets for teaching/list threads; longer only for a strong story. |
| 69 | **Make each tweet stand alone.** A reader landing mid-thread from a quote |
| 70 | tweet should still get something. |
| 71 | **Write the closer.** The last tweet earns the repost and the follow. End on |
| 72 | the most quotable line, then one clear ask (bookmark, follow, or "reply with |
| 73 | yours"), not both. |
| 74 | **Humanizer pass** on every tweet. Scrub 2026 AI vocab by density, cap em |
| 75 | dashes (at most one per tweet, never swap one for a period), break stacked |
| 76 | triads and reveal bridges. Let tweet length vary only as the material |
| 77 | varies: never insert a 3-word punch tweet for rhythm, never alternate |
| 78 | long/short, and touch rhythm only if the whole thread reads machine-flat. |
| 79 | Canonical rules: `x-humanizer` V3. |
| 80 | **Optional audit.** Run `x-humanizer --mode audit` on the assembled thread. |
| 81 | **Approval card.** Show the thread tweet-by-tweet with per-tweet char counts, |
| 82 | total tweet count, the formula, and the goal. Confirm any `---` breaks. |
| 83 | **On approval.** Call `lib.publish(kind="thread", draft_text=<full thread |
| 84 | with --- breaks>, target_url="https://x.com/compose/tweet", |
| 85 | platforms=[<X_PLATFORM_ID>], scheduled_time=<iso_or_None>)`. Publora posts |
| 86 | the chain in one call and returns a `postGroupId`. |
| 87 | |
| 88 | ## Hard rules |
| 89 | |
| 90 | Global voice rules: see root `SKILL.md` Voice rules. Additional skill-specific |
| 91 | rules: |
| 92 | |
| 93 | Tweet 1 must contain a real promise and an open loop. A bare "A thread:" label |
| 94 | is not a hook. |
| 95 | Keep each tweet under 280 chars on a standard account (emoji = 2 chars). |
| 96 | Front-load value. Never bury the best item at the end of a teaching thread. |
| 97 | No external link in tweet 1. Put links in a later tweet or a reply. |
| 98 | Natural rhythm, not manufactured variance. A long thread where every tweet |
| 99 | is the same length and none carries a real clause reads machine-flat; fix |
| 100 | that one thing. Never pad or chop tweets to create variance, and never |
| 101 | insert a punch tweet: the inserted punch is the humanizer fingerprint. |
| 102 | Only ship a Story Thread (X8) built on a true story. Readers punish |
| 103 | manufactured stakes. |
| 104 | |
| 105 | ## Anti-patterns (skill will refuse) |
| 106 | |
| 107 | Tweet 1 that closes its own loop (no reason to expand). |
| 108 | Over-promising in tweet 1 and under-delivering in the body. |
| 109 | Vague how-to steps ("be consistent", "add value") in an X10 teardown. |
| 110 | Padding to hit a round number of tweets. |
| 111 | Em dashes above the cap (more than one in a tweet), AI vocab clusters, ALL CAPS openers. |
| 112 | "The result?" reveals, "No X. No Y. Just Z." staccato stacks, one-word tweets for drama. |
| 113 | Announced candor ("Let me be honest", "not gonna lie") with no dated fact behind it. |
| 114 | Engagement-bait closers ("RT if this helped"). |
| 115 | |
| 116 | ## Resources |
| 117 | |
| 118 | `../../references/hook-formulas.md` - X7-X10 thread skeletons with worked shapes |
| 119 | `../../references/algorithm-heuristics.md` - thread length, tap-through decay, signals |
| 120 | `references/thread-structure.md` - per-position pacing and the closer playbook |
| 121 | |
| 122 | ## Related skills |
| 123 | |
| 124 | `x-post-writer` - when the idea is really just one tweet |
| 125 | `x-humanizer` - scrub each tweet, or `--mode audit` the whole thread |
| 126 | `x-hook-extractor` - lift the structure from a viral thread you admire |
| 127 | `x-content-planner` - schedule threads into a weekly cadence |
| 128 |
Details
- Updated
- Sep 17, 2026
- License
- MIT
- Stars on the repo
- ★ 95
- Checked
- Source
- sergebulaev/x-skills ↗
- Creator
- sergebulaev · 77 listings
Similar skills
See all →
SkillGenerate a branded slide-by-slide LinkedIn carouselGemini carousel
SkillBuild a LinkedIn document postLi carousel
SkillDraft an Instagram caption with the hook in the first 125Instagram Caption Writer
SkillPlan an Instagram carousel slide by slide, up to 10 slidesInstagram Carousel Planner
SkillSocial media campaign analysis and performance trackingSocial media analyzer
SkillScore a LinkedIn post using real performance dataPost scorerMore from sergebulaev
SkillBy density per paragraph, not per wordAI Tells — Complete Blacklist (V3, 2026-09)
SkillFifteen rules from the linkedin-humanizer packageAI-Tell Rules: Tier-Classified Reference
SkillPattern data from MagicPost LinkedIn analysisEmoji Patterns — AI vs. Human
SkillRead your Instagram niche and profile from real dataInstagram Audience Insights
SkillDraft an Instagram caption with the hook in the first 125Instagram Caption Writer
SkillPlan an Instagram carousel slide by slide, up to 10 slidesInstagram Carousel Planner