New: Earn 20% as an AgentAlley affiliate. Share your link and earn on every sale you refer. Join now New: Earn 20% as an affiliate. Join now

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

X thread builder

by sergebulaev · MIT license · ★ 95 on GitHub · updated Sep 17

X thread builder cover

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)
Claude Codenpx skills add sergebulaev/x-skills --skill x-thread-builder -g -a claude-code
Claude Code (manual)mkdir -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-builder
Windows (PowerShell)New-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" -Force
Claude.ai / desktopDownload the ZIP and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md6.4 KB
  • references/1 file · 3.8 KB
Read the files here
sergebulaev/061109f2 files
Shared references3SKILL.md reads these from elsewhere in the repo. Not in the ZIP.Get them on GitHub ↗
SKILL.md
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.

  1. Gather inputs. Topic, the raw material (notes, a transcript, a result), target audience, and the goal (bookmarks / likes / reposts / replies).
  2. Pick the formula from the goal table, confirm it fits the material.
  3. 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.
  4. 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.
  5. Make each tweet stand alone. A reader landing mid-thread from a quote tweet should still get something.
  6. 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.
  7. 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-humanizer V3.
  8. Optional audit. Run x-humanizer --mode audit on the assembled thread.
  9. Approval card. Show the thread tweet-by-tweet with per-tweet char counts, total tweet count, the formula, and the goal. Confirm any --- breaks.
  10. 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 a postGroupId.

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, signals
  • references/thread-structure.md - per-position pacing and the closer playbook
  • x-post-writer - when the idea is really just one tweet
  • x-humanizer - scrub each tweet, or --mode audit the whole thread
  • x-hook-extractor - lift the structure from a viral thread you admire
  • x-content-planner - schedule threads into a weekly cadence
1---
2name: x-thread-builder
3description: "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 
8Build tweetstorms that get read all the way down. On X, tweet 1 is the entire
9funnel: it has to promise a payoff and open a loop, or no one taps "Show this
10thread." 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 
28Full 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 
42Pass 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 
49For full control of where each tweet breaks, hand-split with a `---` separator
50on its own line between tweets. The skill defaults to hand-splitting with `---`
51so 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 
571. **Gather inputs.** Topic, the raw material (notes, a transcript, a result),
58 target audience, and the goal (bookmarks / likes / reposts / replies).
592. **Pick the formula** from the goal table, confirm it fits the material.
603. **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.
664. **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.
695. **Make each tweet stand alone.** A reader landing mid-thread from a quote
70 tweet should still get something.
716. **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.
747. **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.
808. **Optional audit.** Run `x-humanizer --mode audit` on the assembled thread.
819. **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.
8310. **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 
90Global voice rules: see root `SKILL.md` Voice rules. Additional skill-specific
91rules:
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 
View all files on GitHub →

Details

Updated
Sep 17, 2026
License
MIT
Stars on the repo
★ 95
Checked
Source
sergebulaev/x-skills ↗
Creator
sergebulaev · 77 listings
View creator

Similar skills

See all →
SkillGenerate a branded slide-by-slide LinkedIn carouselGemini carouselcharlie947/social-media-skills · by charlie947Generate a branded slide-by-slide LinkedIn carousel using Gemini. Takes source content, builds a design brief, waits for approval, then outputs per-slide image generation prompts. 1080x1350 vertical format. Use this skill whenever the user says "carousel", "build a carousel", "turn this into a carousel", "gemini carousel", or wants multi-slide LinkedIn content. Always includes an approval gate between brief and image generation.★ 3.7k GitHub starsSkillBuild a LinkedIn document postLi carouselJakeschincariol/linkedin-agent-skill · by JakeschincariolBuild a LinkedIn document post (carousel) - slide-by-slide copy, the cover that earns the swipe, and the PDF to upload. Use when the user says carousel", "document post", "slides for LinkedIn", "turn this into a carousel", or has a list-shaped idea that would die as a text post.★ 1.9k GitHub starsSkillDraft an Instagram caption with the hook in the first 125Instagram Caption Writersergebulaev/instagram-skills · by sergebulaevDraft an Instagram caption with the hook in the first 125 characters, a skimmable body, and one clear CTA, using a 2026 hook formula chosen by goal (saves, shares, comments, follows). Runs the humanizer pass and, on approval, publishes with the image or video you supply via the Publora media flow. Use to caption a single image or a Reel. Not for slide-by-slide carousels (use ig-carousel-planner) or auditing a draft (use ig-humanizer --mode audit).★ 138 GitHub starsSkillPlan an Instagram carousel slide by slide, up to 10 slidesInstagram Carousel Plannersergebulaev/instagram-skills · by sergebulaevPlan an Instagram carousel slide by slide, up to 10 slides, with a hook slide that opens a loop, value slides that front-load the payoff, and a payoff slide that earns the save and follow. Picks a 2026 carousel formula (listicle, before/after, myth-buster, framework) by goal (saves, shares, follows), drafts each slide's text plus the caption, then publishes the images you supply via Publora. Use to structure a multi-slide carousel. Not for single-image captions (use ig-caption-writer).★ 138 GitHub starsSkillSocial media campaign analysis and performance trackingSocial media analyzeralirezarezvani/claude-skills · by alirezarezvaniSocial media campaign analysis and performance tracking. Calculates engagement rates, ROI, and benchmarks across platforms. Use when analyzing social media performance, calculating engagement rate, measuring campaign ROI, comparing platform metrics, or benchmarking against industry standards. Also use when the user mentions "social media audit," "engagement rate," or "which platform performs best.★ 26.3k GitHub starsSkillScore a LinkedIn post using real performance dataPost scorercharlie947/social-media-skills · by charlie947Score a LinkedIn post using real performance data. Pulls the user's own post history via Apify (or uses cached data) to identify what actually performs, then scores the draft against those patterns. Use this skill whenever the user says "score my post", "review my post", "rate this post", "give me feedback", "how good is this post", or pastes a LinkedIn post and asks for critique. Separates historical comparisons from an explicitly labelled editorial-only fallback. Designed for live scoring at events and everyday post review.★ 3.7k GitHub stars

More from sergebulaev

SkillBy density per paragraph, not per wordAI Tells — Complete Blacklist (V3, 2026-09)sergebulaev/linkedin-skills · by sergebulaevScored the way readers read: by density per paragraph, not per word. One marker in a paragraph is English. Three is a signature. The…★ 3.1k GitHub starsSkillFifteen rules from the linkedin-humanizer packageAI-Tell Rules: Tier-Classified Referencesergebulaev/linkedin-skills · by sergebulaevFifteen rules from the linkedin-humanizer package, sorted by what kind of evidence each one actually represents.★ 3.1k GitHub starsSkillPattern data from MagicPost LinkedIn analysisEmoji Patterns — AI vs. Humansergebulaev/linkedin-skills · by sergebulaevPattern data from MagicPost LinkedIn analysis (Feb 2026, viral post with 220 engagement).★ 3.1k GitHub starsSkillRead your Instagram niche and profile from real dataInstagram Audience Insightssergebulaev/instagram-skills · by sergebulaevRead your Instagram niche and profile from real data via Apify, no login. Scan a hashtag for the posts traveling now (likes, comments, owner) to see the format and hook that works. Pull profile stats for any handle, yours or a competitor's: followers, posts, bio, category. Instagram hides who liked or commented on other accounts, so this is discovery plus profiles, not engagers. Triggers on "what works in my niche", "scan the hashtag", "competitor stats". Not for writing captions (use ig-caption-writer).★ 138 GitHub starsSkillDraft an Instagram caption with the hook in the first 125Instagram Caption Writersergebulaev/instagram-skills · by sergebulaevDraft an Instagram caption with the hook in the first 125 characters, a skimmable body, and one clear CTA, using a 2026 hook formula chosen by goal (saves, shares, comments, follows). Runs the humanizer pass and, on approval, publishes with the image or video you supply via the Publora media flow. Use to caption a single image or a Reel. Not for slide-by-slide carousels (use ig-carousel-planner) or auditing a draft (use ig-humanizer --mode audit).★ 138 GitHub starsSkillPlan an Instagram carousel slide by slide, up to 10 slidesInstagram Carousel Plannersergebulaev/instagram-skills · by sergebulaevPlan an Instagram carousel slide by slide, up to 10 slides, with a hook slide that opens a loop, value slides that front-load the payoff, and a payoff slide that earns the save and follow. Picks a 2026 carousel formula (listicle, before/after, myth-buster, framework) by goal (saves, shares, follows), drafts each slide's text plus the caption, then publishes the images you supply via Publora. Use to structure a multi-slide carousel. Not for single-image captions (use ig-caption-writer).★ 138 GitHub stars