# Repurpose Threads X

> Use when the user wants to repurpose an article, talk, or long-form content into a Threads or X (Twitter) thread. Extracts the strongest points, sequences them into tweet-sized atoms, drafts multiple variants, and optionally publishes.

- Skill: `busyeugene/repurpose-threads-x` (Agent Skill)
- Install (CLI): `npx skillmds@latest add busyeugene/repurpose-threads-x`
- Raw SKILL.md: https://api.skillmd.com/api/skills/busyeugene/repurpose-threads-x/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: busyeugene (https://skillmd.com/u/busyeugene)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/busyeugene/repurpose-threads-x

---


# Repurpose → Threads / X Thread

Turn a long-form source into a tight thread for Threads or X. Produces multiple variants with different framings and saves each as a local file. Publishing is optional and delegated to the `social-post` skill's publish path if the user asks.

## Setup

No required keys. Optional (only for publishing):
- X: `X_API_KEY`, `X_API_SECRET`, `X_ACCESS_TOKEN`, `X_ACCESS_TOKEN_SECRET`
- Threads: no official public API at time of writing. Threads posts are draft-only from this skill; the user posts manually.

## Inputs

1. **Source** — path to a file or a URL.
2. **Platform** — `x`, `threads`, or `both`. Different character limits and cultural norms per platform.
3. **Thread length** — `short` (5–7 tweets), `medium` (8–12), `long` (13–20). Default medium.
4. **Angle** — one or more of: listicle, contrarian, framework, story, data. Default: ask.
5. **Number of variants** — default 2 per platform.
6. **Publish?** — default no.

Use `AskUserQuestion` for platform, length, and angle.

## Process

### 1. Load voice and source

- Read `editorial-guidelines.md` if present.
- Read the source file or scrape the URL.

### 2. Extract the atoms

Pull from the source:
- The single strongest claim
- 10–15 supporting atoms (one fact, one example, one data point each)
- 2–3 numbers that can anchor tweets
- 1–2 potential "quote-tweet bait" lines — short, specific, opinionated

Tag each atom with its best use: `hook`, `body`, `stat`, `closer`.

### 3. Draft the thread

For each requested variant, sequence the atoms into a thread with this structure:

**T1 — hook** (most important tweet):
- Stand-alone line that makes sense without context.
- States a specific claim, number, or contrarian take.
- Never "Here's a thread on X" or "1/".
- ≤200 chars even on X Premium; mobile readers don't scroll a 280-char T1.

**T2 — why it matters**:
- The stakes for the reader in one sentence.

**T3 through T(N–2) — body**:
- One atom per tweet. No run-on sentences across tweets.
- Each tweet can be quoted standalone.
- Use line breaks inside a tweet sparingly.
- Avoid "next up", "continuing", "and another thing".

**T(N–1) — the punchline or turn**:
- The one tweet the reader should remember. Often the most contrarian line.

**T(N) — closer + CTA**:
- One-line summary of the thread.
- One CTA only: follow, reply to a specific question, DM a keyword, or click a link. Never two.
- Optional PS tweet with the link only, so the CTA tweet stays clean.

### 4. Platform-specific constraints

**X:**
- Default max 280 chars per tweet. Note long-tweet mode (up to 25,000 chars for X Premium subscribers) in the file header if the user has Premium and asked for it.
- **Posting requires the Basic tier ($100/month) or higher.** The Free tier returns 403 on `POST /2/tweets`. If the user only has Free, draft locally and skip publish.
- No hashtag spam (0–2 max, only if they read naturally).
- Avoid emojis unless the brand voice explicitly allows them.
- No "1/" numbering unless the user asks — it reduces retention.

**Threads:**
- 500 chars per post, so atoms can breathe more. Use the extra room for specificity, not fluff.
- Threads audience tolerates more personal/narrative framing than X.
- Link previews render better on Threads — the final post should include the link as its own line.

### 5. Voice checks

Before writing:
- No banned words from editorial guidelines.
- First tweet passes the "would a tired scroller stop?" test.
- No tweet is filler ("Now let's talk about…", "Another point is…").
- Numbers are cited or qualified ("based on our Q3 data", "according to {source}").

### 6. Write the files

One file per platform per variant under `threads/` (for Threads) or `x/` (for X).

Path: `threads/<slug>-v{n}.md` or `x/<slug>-v{n}.md`.

```markdown
# {platform} thread — {slug} v{n}

**Source:** {path or URL}
**Angle:** {angle}
**Length:** {n} tweets
**Generated:** {YYYY-MM-DD}

---

**T1** (hook) — {char count}

{tweet body}

---

**T2** — {char count}

{tweet body}

---

{…}

---

**T{N}** (closer) — {char count}

{tweet body}

---

## Rationale

- Hook chosen: {which atom, why}
- Punchline: {T(N-1) atom}
- CTA: {action}
```

### 7. Optional publish

Only if the user explicitly asks AND X credentials are set. Delegate to the `social-post` skill's publish path (`X` platform, `thread` format) with the chosen variant. Threads has no public API — always draft-only.

Confirm once more with the user before the first publish call.

### 8. Print summary

One block: files written, tweet counts per variant, recommended variant with one-line reason, publish status.

## Fallbacks

- **Source unavailable:** ask for a paste.
- **Atoms fewer than requested length:** suggest shorter thread length rather than padding.
- **No editorial guidelines:** use shared voice reference.

## Verification

1. One file per requested variant under the right platform directory.
2. Each tweet shown with its char count.
3. T1 stands alone as a quotable line.
4. Exactly one CTA in the final tweet (optional PS for link).
5. Char counts all within platform limits.

