frontmatter · SKILL.md+
name: x-thread description: > Build an X (Twitter) thread with real architecture instead of a chopped-up blog post: a hook tweet that earns the click-through, one idea per tweet, an escalation-and-payoff structure, and a closing CTA tweet — every tweet char-budgeted to 280 with the count shown. Reads social-context.md for the user's brand voice, audience, and red lines so the thread sounds like them. Use when the user says "write a thread", wants a "tweetstorm", says "turn this into a thread", or asks for an "X thread about" a topic. The hook gets drafted three ways and scored before anything else is written, because tweet one decides whether tweets two through twelve exist. metadata: version: 1.0.0 category: Create topics: [x, writing, hooks] examplePrompt: "Turn this blog post into an X thread with a strong hook"
Write an X thread where the hook earns the read, every tweet carries exactly one idea, and the last tweet knows what it's asking for.
Context
Read social-context.md at the project root (also check .agents/social-context.md) for
Voice rules, Audience, Pillars, and the Never list. If missing, offer to run the
social-context skill first, but don't block — ask two inline questions (who should this
reach, and how spicy can it be: measured/direct/provocative) and proceed.
Workflow
- Get the source material now: a blog post, notes, a story, or just a topic. If it's just a topic, extract specifics before drafting — the number, the failure, the before/after. Threads run on receipts, not opinions.
- Pin the thesis in one sentence: what should a reader believe or do after tweet N that they didn't before tweet 1? If the material supports two theses, ask the user which one this thread argues. No thesis, no thread — write a single tweet instead and say so.
- Outline the beats before writing any tweet: 5–12 beats, one per tweet, in an escalation
shape:
- hook
- stakes/context (1 tweet max)
- the meat, in rising order — save the second-best point for late, the best for the payoff
- payoff
- CTA Kill any beat that restates another. Show the outline as a numbered list of one-line beats and let the user reorder or cut.
- Draft the hook three ways, one per pattern:
- Curiosity gap: promise the payoff, withhold the mechanism. "We doubled activation with one email. It's not the one you think."
- Bold claim: the thesis at full strength, no hedge. "Most onboarding flows fail because they teach the product instead of the outcome."
- Specific number: the receipt up front. "47 user interviews. 3 patterns. Here's what actually makes people churn."
- Score each hook 1–5 on three axes: stops the scroll, makes the specific promise the thread actually keeps, and passes the Voice rules. Show the scores, recommend one, and ask the user to pick. A hook that overpromises is worse than a boring one — the thread gets ratioed for the gap.
- Write the tweets from the outline. Per tweet: lead with the point in the first line, one idea only, cut every "and another thing" into its own tweet or the bin. Prefer line breaks over commas — 2–4 short lines per tweet reads better than one paragraph. No tweet should need its neighbor to make sense.
- Budget characters as you go: hard cap 280 per tweet, and show the count after each like
(214/280). Hook stays ≤240 to leave quote-tweet room. If a tweet lands over, cut words — never split one idea across two tweets to make it fit. - Write the closer as a real CTA tweet: restate the payoff in one line, then one ask —
- follow, with the reason ("I write about X every week"), or
- the link (this is the only tweet a link may appear in), or
- a reply prompt with a real question. One ask, not three.
- Ask the numbering question: "1/ prefix on each tweet, or clean tweets with no numbering?" Numbering signals length upfront and helps screenshots; clean reads more native. Apply the choice consistently — if numbering, the hook shows the total ("1/9") so readers can size the commitment.
- Whitespace and rhythm pass:
- vary tweet lengths (a 40-char tweet after two dense ones hits harder),
- check each tweet still stands alone when screenshot,
- verify zero hashtags anywhere except an optional one in the final tweet,
- run every tweet against the Voice rules.
- Present the full thread with per-tweet counts, plus the two unused hooks labeled as alternates in case the user wants to swap.
Quality bar
| Constraint | Rule |
|---|---|
| Hook | ≤ 240 chars; promise matches what the thread delivers |
| Every tweet | ≤ 280 chars, count shown; exactly one idea; stands alone as a screenshot |
| Thread length | 5–12 tweets; context/setup gets at most 1 tweet |
| Links | Final tweet only — a mid-thread link is where readers exit |
| Hashtags | None mid-thread; at most 1 in the final tweet, only if asked |
| Structure | Escalates — strongest material in the back half, payoff before CTA |
| CTA | Exactly one ask in the closing tweet |
| Voice | Every tweet passes the Voice rules in social-context.md |
| Numbering | User's chosen convention applied to every tweet, or to none |
Deliverable
The full thread, ready to paste: each tweet in its own block with its character count, numbering per the user's choice, the chosen hook first and the two alternate hooks appended for reference. End there.