X copywriter skill

Draft X (Twitter) tweets and threads.

by timscheuerai·MIT license·★ 37 Stars on the repo·GitHub ↗

Use now

Inside this skill

SKILL.md · the author's own words
# x-copywriter

Draft tweets and threads that read like an operator typed them on
their phone, not a comms team approved them. **You may be new to X ·
this skill teaches the platform's culture as it drafts** (rationale
next to output) and intentionally does NOT ground voice in your
LinkedIn posts. The voice anchors are three reference accounts: Romàn
(@romanbuildsaas, metrics-first), Michel Lieben (@MichLieben, story
+ self-roast), Alex Vacca (@itsalexvacca, operator-with-receipts).
Their actual top tweets live in `reference-corpus.md`. Platform
culture rules live in `culture-brief.md`.

---

## When to invoke

Word-for-word excerpt, not a result. Read the full SKILL.md ↓

Files of X copywriter

timscheuerai/main1 file shown
SKILL.md
Show the full text412 lines

x-copywriter

Draft tweets and threads that read like an operator typed them on their phone, not a comms team approved them. You may be new to X · this skill teaches the platform's culture as it drafts (rationale next to output) and intentionally does NOT ground voice in your LinkedIn posts. The voice anchors are three reference accounts: Romàn (@romanbuildsaas, metrics-first), Michel Lieben (@MichLieben, story

  • self-roast), Alex Vacca (@itsalexvacca, operator-with-receipts). Their actual top tweets live in reference-corpus.md. Platform culture rules live in culture-brief.md.

When to invoke

Triggers: "write a tweet", "draft an x post", "tweet about Y", "x thread on X", "/x-copywriter".

Do not use for:

  • LinkedIn posts. The voices are different and you'll drift if you mix.
  • Long-form (newsletter, blog).
  • Replies to other people's tweets. Replies are a different game (specificity + speed) and shouldn't go through this skill.

Workflow

1. Brief

One batched prompt:

Quick brief.

1. What's this tweet about? (milestone, lesson, hot take, 
   build-in-public, IP-giveaway, self-roast, etc.)
2. The single specific fact, number, or scar that anchors it. 
   Be concrete. ("crossed $50k MRR yesterday" beats "growing 
   nicely"). If we don't have a number, can we add one?
3. Solo tweet or thread? If unsure, I'll pick.
4. Anything off-limits? (NDA pre-launch features, exact ARR if 
   we're being cagey, etc.)

If the user already gave enough, skip the prompt and parse.

2. Pick the format

Default decisions:

  • Solo tweet by default. Most ideas should ship solo. Threads are reserved for ideas that genuinely need 4-7 beats.
  • Thread if: tactical breakdown with steps; story arc with a before / middle / after; list with examples per item.
  • Two solo tweets beats a 3-tweet thread. If a thread is < 4 tweets, split it into two solos that can each stand on their own.
3. Pick the hook

Match the brief to one of these 8 patterns. All come from the reference corpus. Read reference-corpus.md if you haven't recently.

# Pattern Anchor Example
H1 Bare metric, no preamble Roman "Gojiberry AI just hit $2M ARR." (1.7k likes)
H2 Volume credential + one mistake Alex "After 3,200+ outbound campaigns at ColdIQ, the most expensive mistake we see is..."
H3 Year-over-year decline stat Alex "Cold emails needed for one positive reply: 2023: ~120 / 2024: ~200 / 2025: ~430" (460 likes)
H4 Self-roast comparison Mich "spent 3 weeks building a campaign that AI just did in 15 min from a single link."
H5 Quoted strawman + receipts Mich/Alex "'cold email is dead' meanwhile us: same emails, same volume, $30k → $550k months" / "'services don't scale' > chases the $10k software budget..."
H6 Failure stack → outcome Mich "Got fired from 4 jobs. Failed at 7 startups. Lost $40K. Then I bought coldiq(dot)com..."
H7 IP-giveaway hook Mich/Alex "I'm giving away the [exact thing] we use to [specific result]." (4k+ likes when nailed)
H8 Mock-formal industry obit Alex "i regret to inform you that cold outbound has been definitively solved. the study cost 23,000,000 sends. the findings fit in 5 bullet points."

Hooks to never use on X (LinkedIn imports):

  • "Excited to announce..."
  • "Thrilled to share..."
  • "Big news!"
  • "Here are 7 lessons from..." (as solo tweet, not thread hook)
  • "Most people think X. They're wrong." (LinkedIn cliché now even on X)
  • "Day 1 at..." career update
  • Any hook that needs a "1/" because the actual idea hasn't started
4. Pick the body shape

For solo tweets, pick one of:

S1. Bare metric + 1-line context. 60-100 chars total.

"We just hit $1.5M ARR with GojiberryAI" "227,744 views. 3,316 comments. 477 leads. In 7 days. One Claude system."

S2. Number stack with line breaks. 3-5 numbers, one per line, no bullets. Closes with one short opinion or implication line.

"We turned 24 employees into LinkedIn influencers in 90 days.

581 posts. 43,473 reactions. 28,130 comments. 27 new clients worth $153K in MRR."

S3. Quoted strawman + counter. Open with the cliché in quotes. Follow with > or hyphen-prefixed lines that demolish it. Lowercase fine here.

"'services don't scale'

chases the $10k software budget inside companies watches openai kill the feature in 3 months cpo title before a paying user, 18 months burning runway"

S4. Single-line shitpost. 1 line, lowercase, no follow-up. No CTA. The whole point is the line.

"cool so we're just giving away the entire operating system now" "absolute insanity if you ask me."

S5. Numbered listicle. 3-5 short clauses, one per line. Sentence case, period or no period at end (consistent within tweet). Title line first.

"3 things i wish i knew at $0 ARR:

  1. distribution > product
  2. write the offer before the code
  3. one channel, all in"

For threads, pick one of:

T1. Tactical breakdown. Hook tweet (works alone). 4-6 step tweets, each one numbered (2/, 3/, etc.) or unnumbered. Last tweet = CTA: "follow <YOUR_X_HANDLE> for more on building <YOUR_BRAND>" or "comment 'X' and i'll send the doc".

T2. Story thread. Hook = scar / failure stack. Beat tweets walk the arc: bottom → turning point → current state. End with the lesson + soft follow CTA.

T3. List thread. Hook = "X mistakes I see at $Y ARR companies" or "Y plays we ran for 100+ clients". Each subsequent tweet = one item with a one-line example. End with a "want the full doc?" giveaway CTA or a follow CTA.

5. Voice register

Use lowercase when:

  • Writing a self-roast, shitpost, or one-line dunk (S4, H4)
  • The tweet is a quick reaction to something happening
  • You're trying to sound like you typed it on your phone

Use sentence case when:

  • Posting a milestone or hard data (S1, S2, H1, H3)
  • Authority / hot-take / observation (H8 even though that example uses lowercase, the gravitas register works either way)
  • Threads usually start in sentence case in the hook tweet

Mix is normal. A milestone tweet can have a sentence-case hook and a lowercase shitpost line at the end. Don't over-engineer it.

Punctuation:

  • Periods at the end of sentences are fine. Many high-performers drop the final period in casual mode.
  • Line breaks: 1-2 max in a solo tweet, more freely in threads.
  • Em dashes (—): never. Hard ban, project-wide rule.
  • Smart quotes: never. Straight quotes only.
  • Ellipsis: use ... if needed at all.
  • > for nested bullet / quoted-cliché lists (Mich/Alex use this).
  • → for sub-arrow bullets in threads (sparingly).

Vocabulary to use:

  • Plain English. "use" not "leverage". "help" not "empower".
  • Numerals always. "3x", "$2M", "23,000,000 sends".
  • Tool names with their canonical casing (Claude Code, Cursor, Instantly.ai, HeyReach, Clay, Apollo, n8n, Stripe).
  • "Build", "ship", "drop", "spin up". Active verbs.
  • Self-deprecating shorthand fine: "lol", "ngl", "tbh" (use sparingly, not in every tweet).
6. CTA patterns

Most tweets need no CTA. The post is the asset. Forced CTAs are the strongest LinkedIn-import tell.

When you do add one, pick one of:

CTA-A. Comment-and-send (giveaway only).

Comment '<KEYWORD>' and I'll send the [thing].

Variant: "Repost ♻️ + comment 'X' and I'll send it." The repost-gate is X-native and works.

CTA-B. Follow for more (threads). Last tweet of a thread.

follow <YOUR_X_HANDLE> for more on building <YOUR_BRAND> in public.

CTA-C. RT the first tweet (threads). Equivalent of the LinkedIn "share if useful" but X-native.

RT the first tweet if this was useful.

CTA-D. None. Default for solo tweets. Authority posts and shitposts work better with no ask.

Banned closers (LinkedIn import):

  • "Agree?"
  • "Thoughts?"
  • "What do you think? Drop a 👇 in comments."
  • "Tag someone who needs this."
  • "Save this for later."
  • "Like and follow for more value."
  • "Hope this helps."
7. Slop scrub (mandatory pre-output)

Before showing the draft, scan it. Any hit → rewrite.

Punctuation:

  • ❌ Em dash —. Never. Replace with period, comma, colon, parens, or > arrow.
  • ❌ Smart/curly quotes. Straight only.
  • ❌ Ellipsis character …. Use ....
  • ❌ Multiple hashtags. Or one hashtag. Zero hashtags on X.

Banned phrases: "excited to announce", "thrilled to share", "big news", "in today's fast-paced world", "dive into / deep dive", "delve", "unlock the power", "navigate the landscape", "at its core", "it's important to note", "a testament to", "game changer", "move the needle", "stay ahead of the curve", "cutting-edge", "state-of-the-art", "robust", "scalable", "seamless", "world-class", "leverage" (verb), "synergy", "embark on", "foster", "drive impact", "buckle up", "let that sink in", "read that again", "spoiler:", "plot twist:", "i'm humbled to announce", "couldn't be more proud", "trust the process", "your network is your net worth", "hope this helps".

Banned structural slop:

  • ❌ "Here's the thing:" / "Here's the kicker:" / "Here's the catch:"
  • ❌ Negation pivot 3+ times in one tweet ("It's not X. It's Y. It's not about A. It's about B.")
  • ❌ Tricolons of parallel verbs in every line ("listen, adapt, deliver. faster, cheaper, better.")
  • ❌ Throat-clearing transitions: "Furthermore," "Moreover," "Additionally," "That said," "Importantly," "Ultimately"
  • ❌ Bold/italic Unicode tricks (𝗯𝗼𝗹𝗱).
  • ❌ Keycap emoji as numbered headers (1️⃣ 2️⃣). Plain 1. or 1).
  • ❌ Emoji as bullet markers (🚀 ✨ 💡). Inline emoji only, max 1 per tweet.
  • ❌ Tagging 5+ people in one tweet.

Length scrub:

  • Solo tweet must be ≤ 280 chars. Count it. Show the count in the output metadata.
  • If a solo tweet hits 240-280, try cutting 1-2 words. Tight beats full.
8. Output

Show the draft in fenced code blocks. For each piece, include below the block:

  • Format: solo tweet · thread · list thread, etc.
  • Char count (if solo): 247 / 280.
  • Hook pattern used: e.g. "H4 · self-roast comparison"
  • Body shape used: e.g. "S2 · number stack with line breaks"
  • Voice register: lowercase / sentence case / mixed
  • Slop scrub: "0 hits" or list any flags caught + how rewritten
  • Why it works (X-specific): 1-2 sentences explaining what makes this read as native X, not LinkedIn (this is the teaching layer for a newbie).
  • One alt hook the user can swap in.

For threads, output every tweet in its own code block, char-counted individually. Note the hook tweet must work standalone before moving on.

Default output: 1 solo tweet + 1 alt solo tweet from a different hook pattern. If the brief asks for a thread, deliver the thread plus 1 solo tweet variant (in case the thread idea works better as a single tweet).

Do not add commentary like "Hope this works!" or "Let me know if you want changes." Just the drafts + metadata.


Content graph (close the loop)

X posts written here land in content/posts/ and feed the content knowledge graph (content/CONTENT-WIKI.md). Many X posts repurpose a longer original that is already a node.

Before drafting: open the relevant note in content/concepts/ and build on its canonical lines instead of starting blank.

After the post is saved: add it to the concept's ## Appears in (mark (X) in the angle), create a note if the idea is genuinely new, update any content/entities/ or content/mocs/ it touches, and append to content/log.md. Edges live in the concept notes (Obsidian backlinks are automatic), so don't edit the post body. Pure repurposes of a post already in the graph can skip this.


Editing mode

If the user pastes a draft and asks to "make it sound less LinkedIn" or "fix the slop":

  1. Read the draft.
  2. Run the slop scrub (§7). Flag every hit inline.
  3. Rewrite to a hook + body shape from §3-§4.
  4. Output the rewrite + a diff-style list of what changed and why.

Repurpose context (when called from a repurpose orchestrator)

If invoked with a source reference (master content row, transcript excerpt, or external URL):

  1. Treat the source as the insight bank. Pick one hook / data point / hot take · don't rephrase the whole thing.
  2. Open with the punch (a number, a contrarian line, a one-word setup), not with "I just published a webinar." X has zero patience for self-promo openers.
  3. If the source is rich (multi-step framework, breakdown), prefer a thread. If it's a single insight, prefer a solo tweet.
  4. Soft-reference the master only if it earns the slot (e.g., a thread tail with "full breakdown: <link>") · don't bolt it on otherwise.
  5. Output the draft as usual. The orchestrator handles creating the tracking row and pasting Source: <URL> at the top of the page body · don't include that line yourself.

Cadence guidance (when user asks)

If the user asks "what should I post today?" or "how often should I tweet?", point them at culture-brief.md §6 (3-5 posts/day under 1k followers, 70/30 reply-to-original ratio, Tue-Thu mornings for B2B threads, pin a thread, don't quit at month 2).

Do not write a daily content calendar inside this skill. Drafting is per-tweet. Strategy is in culture-brief.md.


Reference files

  • reference-corpus.md. Voice anchor. Top 15 tweets per reference creator (Romàn, Mich, Alex), pulled from the X API and sorted by weighted engagement. Re-read before drafting if you've been off-task. Refresh quarterly with the curl command at the bottom of this file.
  • culture-brief.md. Platform rulebook. What X rewards / kills, voice register, cadence, reference-account stylistic reads. Pointer here when the user asks platform questions.
  • This SKILL.md. Drafting workflow + hook/body/CTA patterns + slop blacklist.

Important: Your LinkedIn corpus (e.g. <YOUR_LINKEDIN_CORPUS_PATH>) is not a voice source for X. The two platforms are different games. Don't import LinkedIn voice fingerprints (the :) smiley, [1] [2] walking-CTAs, "Lead Gen Bros", → heavy bullets) into X drafts. Your default lane on X starts closest to @itsalexvacca's operator-with-receipts register, with seasoning from @MichLieben's self-roast and @romanbuildsaas's bare-metric format. Default voice anchors. You can swap or weight differently as you find your own taste over time.


Refresh the reference corpus

Run quarterly. Updates reference-corpus.md.

# Requires X API v2 bearer token in env as <YOUR_X_BEARER_TOKEN>
# e.g. export X_BEARER_TOKEN=AAAA...

# user IDs (cached from initial setup):
# romanbuildsaas: 1893653481858433024
# MichLieben:     512156315
# itsalexvacca:   859850213015597056

for uid in 1893653481858433024 512156315 859850213015597056; do
  curl -s "https://api.twitter.com/2/users/${uid}/tweets?max_results=100&tweet.fields=public_metrics,created_at&exclude=retweets,replies" \
    -H "Authorization: Bearer ${X_BEARER_TOKEN}" \
    -o /tmp/x_${uid}.json
done

Then sort by like_count + 3*retweet_count + 2*reply_count + 3*quote_count, pick top 15 per creator (filter URL-only tweets), and overwrite reference-corpus.md keeping the same shape.

1---
2name: x-copywriter
3description: Draft X (Twitter) tweets and threads. You may be new to X · this skill teaches the platform's culture as it drafts and writes in the register of GTM build-in-public founders, not in your LinkedIn voice. Pulls hook patterns and structure from a corpus of high-engagement tweets by @romanbuildsaas, @MichLieben, @itsalexvacca. Hard ban on em dashes, hashtags, and LinkedIn imports. Use when asked to "write a tweet", "draft an x post", "x thread on X", "tweet about Y", or "/x-copywriter".
4---
5 
6# x-copywriter
7 
8Draft tweets and threads that read like an operator typed them on
9their phone, not a comms team approved them. **You may be new to X ·
10this skill teaches the platform's culture as it drafts** (rationale
11next to output) and intentionally does NOT ground voice in your
12LinkedIn posts. The voice anchors are three reference accounts: Romàn
13(@romanbuildsaas, metrics-first), Michel Lieben (@MichLieben, story
14+ self-roast), Alex Vacca (@itsalexvacca, operator-with-receipts).
15Their actual top tweets live in `reference-corpus.md`. Platform
16culture rules live in `culture-brief.md`.
17 
18---
19 
20## When to invoke
21 
22Triggers: "write a tweet", "draft an x post", "tweet about Y",
23"x thread on X", "/x-copywriter".
24 
25Do **not** use for:
26 
27- LinkedIn posts. The voices are different and you'll drift if you
28 mix.
29- Long-form (newsletter, blog).
30- Replies to other people's tweets. Replies are a different game
31 (specificity + speed) and shouldn't go through this skill.
32 
33---
34 
35## Workflow
36 
37### 1. Brief
38 
39One batched prompt:
40 
41```
42Quick brief.
43 
441. What's this tweet about? (milestone, lesson, hot take,
45 build-in-public, IP-giveaway, self-roast, etc.)
462. The single specific fact, number, or scar that anchors it.
47 Be concrete. ("crossed $50k MRR yesterday" beats "growing
48 nicely"). If we don't have a number, can we add one?
493. Solo tweet or thread? If unsure, I'll pick.
504. Anything off-limits? (NDA pre-launch features, exact ARR if
51 we're being cagey, etc.)
52```
53 
54If the user already gave enough, skip the prompt and parse.
55 
56### 2. Pick the format
57 
58Default decisions:
59 
60- **Solo tweet** by default. Most ideas should ship solo. Threads
61 are reserved for ideas that genuinely need 4-7 beats.
62- **Thread** if: tactical breakdown with steps; story arc with a
63 before / middle / after; list with examples per item.
64- **Two solo tweets** beats a 3-tweet thread. If a thread is < 4
65 tweets, split it into two solos that can each stand on their own.
66 
67### 3. Pick the hook
68 
69Match the brief to one of these 8 patterns. All come from the
70reference corpus. Read `reference-corpus.md` if you haven't recently.
71 
72| # | Pattern | Anchor | Example |
73|---|---------|--------|---------|
74| H1 | Bare metric, no preamble | Roman | "Gojiberry AI just hit $2M ARR." (1.7k likes) |
75| H2 | Volume credential + one mistake | Alex | "After 3,200+ outbound campaigns at ColdIQ, the most expensive mistake we see is..." |
76| H3 | Year-over-year decline stat | Alex | "Cold emails needed for one positive reply: 2023: ~120 / 2024: ~200 / 2025: ~430" (460 likes) |
77| H4 | Self-roast comparison | Mich | "spent 3 weeks building a campaign that AI just did in 15 min from a single link." |
78| H5 | Quoted strawman + receipts | Mich/Alex | "'cold email is dead' meanwhile us: same emails, same volume, $30k → $550k months" / "'services don't scale' > chases the $10k software budget..." |
79| H6 | Failure stack → outcome | Mich | "Got fired from 4 jobs. Failed at 7 startups. Lost $40K. Then I bought coldiq(dot)com..." |
80| H7 | IP-giveaway hook | Mich/Alex | "I'm giving away the [exact thing] we use to [specific result]." (4k+ likes when nailed) |
81| H8 | Mock-formal industry obit | Alex | "i regret to inform you that cold outbound has been definitively solved. the study cost 23,000,000 sends. the findings fit in 5 bullet points." |
82 
83**Hooks to never use on X (LinkedIn imports):**
84 
85- "Excited to announce..."
86- "Thrilled to share..."
87- "Big news!"
88- "Here are 7 lessons from..." (as solo tweet, not thread hook)
89- "Most people think X. They're wrong." (LinkedIn cliché now even
90 on X)
91- "Day 1 at..." career update
92- Any hook that needs a "1/" because the actual idea hasn't started
93 
94### 4. Pick the body shape
95 
96**For solo tweets**, pick one of:
97 
98**S1. Bare metric + 1-line context.** 60-100 chars total.
99> "We just hit $1.5M ARR with GojiberryAI"
100> "227,744 views. 3,316 comments. 477 leads. In 7 days. One Claude system."
101 
102**S2. Number stack with line breaks.** 3-5 numbers, one per line,
103no bullets. Closes with one short opinion or implication line.
104> "We turned 24 employees into LinkedIn influencers in 90 days.
105>
106> 581 posts.
107> 43,473 reactions.
108> 28,130 comments.
109> 27 new clients worth $153K in MRR."
110 
111**S3. Quoted strawman + counter.** Open with the cliché in quotes.
112Follow with `>` or hyphen-prefixed lines that demolish it. Lowercase
113fine here.
114> "'services don't scale'
115>
116> > chases the $10k software budget inside companies
117> > watches openai kill the feature in 3 months
118> > cpo title before a paying user, 18 months burning runway"
119 
120**S4. Single-line shitpost.** 1 line, lowercase, no follow-up.
121No CTA. The whole point is the line.
122> "cool so we're just giving away the entire operating system now"
123> "absolute insanity if you ask me."
124 
125**S5. Numbered listicle.** 3-5 short clauses, one per line.
126Sentence case, period or no period at end (consistent within
127tweet). Title line first.
128> "3 things i wish i knew at $0 ARR:
129>
130> 1. distribution > product
131> 2. write the offer before the code
132> 3. one channel, all in"
133 
134**For threads**, pick one of:
135 
136**T1. Tactical breakdown.** Hook tweet (works alone). 4-6 step
137tweets, each one numbered (`2/`, `3/`, etc.) or unnumbered. Last
138tweet = CTA: "follow <YOUR_X_HANDLE> for more on building
139<YOUR_BRAND>" or "comment 'X' and i'll send the doc".
140 
141**T2. Story thread.** Hook = scar / failure stack. Beat tweets
142walk the arc: bottom → turning point → current state. End with the
143lesson + soft follow CTA.
144 
145**T3. List thread.** Hook = "X mistakes I see at $Y ARR companies"
146or "Y plays we ran for 100+ clients". Each subsequent tweet = one
147item with a one-line example. End with a "want the full doc?"
148giveaway CTA or a follow CTA.
149 
150### 5. Voice register
151 
152**Use lowercase when:**
153 
154- Writing a self-roast, shitpost, or one-line dunk (S4, H4)
155- The tweet is a quick reaction to something happening
156- You're trying to sound like you typed it on your phone
157 
158**Use sentence case when:**
159 
160- Posting a milestone or hard data (S1, S2, H1, H3)
161- Authority / hot-take / observation (H8 even though that example
162 uses lowercase, the gravitas register works either way)
163- Threads usually start in sentence case in the hook tweet
164 
165**Mix is normal.** A milestone tweet can have a sentence-case hook
166and a lowercase shitpost line at the end. Don't over-engineer it.
167 
168**Punctuation:**
169 
170- Periods at the end of sentences are fine. Many high-performers
171 drop the final period in casual mode.
172- Line breaks: 1-2 max in a solo tweet, more freely in threads.
173- Em dashes (`—`): never. **Hard ban**, project-wide rule.
174- Smart quotes: never. Straight quotes only.
175- Ellipsis: use `...` if needed at all.
176- `>` for nested bullet / quoted-cliché lists (Mich/Alex use this).
177- `→` for sub-arrow bullets in threads (sparingly).
178 
179**Vocabulary to use:**
180 
181- Plain English. "use" not "leverage". "help" not "empower".
182- Numerals always. "3x", "$2M", "23,000,000 sends".
183- Tool names with their canonical casing (Claude Code, Cursor,
184 Instantly.ai, HeyReach, Clay, Apollo, n8n, Stripe).
185- "Build", "ship", "drop", "spin up". Active verbs.
186- Self-deprecating shorthand fine: "lol", "ngl", "tbh" (use
187 sparingly, not in every tweet).
188 
189### 6. CTA patterns
190 
191**Most tweets need no CTA.** The post is the asset. Forced CTAs are
192the strongest LinkedIn-import tell.
193 
194When you do add one, pick one of:
195 
196**CTA-A. Comment-and-send (giveaway only).**
197```
198Comment '<KEYWORD>' and I'll send the [thing].
199```
200Variant: "Repost ♻️ + comment 'X' and I'll send it." The
201repost-gate is X-native and works.
202 
203**CTA-B. Follow for more (threads).** Last tweet of a thread.
204```
205follow <YOUR_X_HANDLE> for more on building <YOUR_BRAND> in public.
206```
207 
208**CTA-C. RT the first tweet (threads).** Equivalent of the LinkedIn
209"share if useful" but X-native.
210```
211RT the first tweet if this was useful.
212```
213 
214**CTA-D. None.** Default for solo tweets. Authority posts and
215shitposts work better with no ask.
216 
217**Banned closers (LinkedIn import):**
218 
219- "Agree?"
220- "Thoughts?"
221- "What do you think? Drop a 👇 in comments."
222- "Tag someone who needs this."
223- "Save this for later."
224- "Like and follow for more value."
225- "Hope this helps."
226 
227### 7. Slop scrub (mandatory pre-output)
228 
229Before showing the draft, scan it. Any hit → rewrite.
230 
231**Punctuation:**
232- ❌ Em dash `—`. Never. Replace with period, comma, colon, parens,
233 or `>` arrow.
234- ❌ Smart/curly quotes. Straight only.
235- ❌ Ellipsis character `…`. Use `...`.
236- ❌ Multiple hashtags. Or one hashtag. **Zero hashtags on X.**
237 
238**Banned phrases:**
239"excited to announce", "thrilled to share", "big news",
240"in today's fast-paced world", "dive into / deep dive", "delve",
241"unlock the power", "navigate the landscape", "at its core",
242"it's important to note", "a testament to", "game changer",
243"move the needle", "stay ahead of the curve", "cutting-edge",
244"state-of-the-art", "robust", "scalable", "seamless",
245"world-class", "leverage" (verb), "synergy", "embark on",
246"foster", "drive impact", "buckle up", "let that sink in",
247"read that again", "spoiler:", "plot twist:",
248"i'm humbled to announce", "couldn't be more proud",
249"trust the process", "your network is your net worth",
250"hope this helps".
251 
252**Banned structural slop:**
253- ❌ "Here's the thing:" / "Here's the kicker:" / "Here's the catch:"
254- ❌ Negation pivot 3+ times in one tweet ("It's not X. It's Y. It's
255 not about A. It's about B.")
256- ❌ Tricolons of parallel verbs in every line ("listen, adapt,
257 deliver. faster, cheaper, better.")
258- ❌ Throat-clearing transitions: "Furthermore," "Moreover,"
259 "Additionally," "That said," "Importantly," "Ultimately"
260- ❌ Bold/italic Unicode tricks (`𝗯𝗼𝗹𝗱`).
261- ❌ Keycap emoji as numbered headers (1️⃣ 2️⃣). Plain `1.` or `1)`.
262- ❌ Emoji as bullet markers (🚀 ✨ 💡). Inline emoji only, max 1
263 per tweet.
264- ❌ Tagging 5+ people in one tweet.
265 
266**Length scrub:**
267- Solo tweet must be ≤ 280 chars. Count it. Show the count in the
268 output metadata.
269- If a solo tweet hits 240-280, try cutting 1-2 words. Tight beats
270 full.
271 
272### 8. Output
273 
274Show the draft in fenced code blocks. For each piece, include below
275the block:
276 
277- **Format:** solo tweet · thread · list thread, etc.
278- **Char count** (if solo): `247 / 280`.
279- **Hook pattern used:** e.g. "H4 · self-roast comparison"
280- **Body shape used:** e.g. "S2 · number stack with line breaks"
281- **Voice register:** lowercase / sentence case / mixed
282- **Slop scrub:** "0 hits" or list any flags caught + how rewritten
283- **Why it works (X-specific):** 1-2 sentences explaining what
284 makes this read as native X, not LinkedIn (this is the teaching
285 layer for a newbie).
286- **One alt hook** the user can swap in.
287 
288For threads, output every tweet in its own code block, char-counted
289individually. Note the **hook tweet must work standalone** before
290moving on.
291 
292Default output: 1 solo tweet + 1 alt solo tweet from a different
293hook pattern. If the brief asks for a thread, deliver the thread
294plus 1 solo tweet variant (in case the thread idea works better as
295a single tweet).
296 
297Do **not** add commentary like "Hope this works!" or "Let me know
298if you want changes." Just the drafts + metadata.
299 
300---
301 
302## Content graph (close the loop)
303 
304X posts written here land in `content/posts/` and feed the content
305knowledge graph (`content/CONTENT-WIKI.md`). Many X posts repurpose a
306longer original that is already a node.
307 
308**Before drafting:** open the relevant note in `content/concepts/` and
309build on its canonical lines instead of starting blank.
310 
311**After the post is saved:** add it to the concept's `## Appears in`
312(mark `(X)` in the angle), create a note if the idea is genuinely new,
313update any `content/entities/` or `content/mocs/` it touches, and append
314to `content/log.md`. Edges live in the concept notes (Obsidian backlinks
315are automatic), so don't edit the post body. Pure repurposes of a post
316already in the graph can skip this.
317 
318---
319 
320## Editing mode
321 
322If the user pastes a draft and asks to "make it sound less LinkedIn"
323or "fix the slop":
324 
3251. Read the draft.
3262. Run the slop scrub (§7). Flag every hit inline.
3273. Rewrite to a hook + body shape from §3-§4.
3284. Output the rewrite + a diff-style list of what changed and why.
329 
330---
331 
332## Repurpose context (when called from a repurpose orchestrator)
333 
334If invoked with a `source` reference (master content row, transcript
335excerpt, or external URL):
336 
3371. Treat the source as the **insight bank**. Pick one hook / data
338 point / hot take · don't rephrase the whole thing.
3392. Open with the punch (a number, a contrarian line, a one-word setup),
340 not with "I just published a webinar." X has zero patience for
341 self-promo openers.
3423. If the source is rich (multi-step framework, breakdown), prefer a
343 thread. If it's a single insight, prefer a solo tweet.
3444. Soft-reference the master only if it earns the slot (e.g., a thread
345 tail with "full breakdown: <link>") · don't bolt it on otherwise.
3465. Output the draft as usual. The orchestrator handles creating the
347 tracking row and pasting `Source: <URL>` at the top of the page
348 body · don't include that line yourself.
349 
350---
351 
352## Cadence guidance (when user asks)
353 
354If the user asks "what should I post today?" or "how often should I
355tweet?", point them at `culture-brief.md` §6 (3-5 posts/day under 1k
356followers, 70/30 reply-to-original ratio, Tue-Thu mornings for B2B
357threads, pin a thread, don't quit at month 2).
358 
359Do not write a daily content calendar inside this skill. Drafting
360is per-tweet. Strategy is in `culture-brief.md`.
361 
362---
363 
364## Reference files
365 
366- `reference-corpus.md`. **Voice anchor.** Top 15 tweets per
367 reference creator (Romàn, Mich, Alex), pulled from the X API and
368 sorted by weighted engagement. Re-read before drafting if you've
369 been off-task. Refresh quarterly with the curl command at the
370 bottom of this file.
371- `culture-brief.md`. **Platform rulebook.** What X rewards / kills,
372 voice register, cadence, reference-account stylistic reads.
373 Pointer here when the user asks platform questions.
374- This `SKILL.md`. Drafting workflow + hook/body/CTA patterns +
375 slop blacklist.
376 
377**Important:** Your LinkedIn corpus (e.g.
378`<YOUR_LINKEDIN_CORPUS_PATH>`) is **not** a voice source for X.
379The two platforms are different games. Don't import LinkedIn voice
380fingerprints (the `:)` smiley, `[1] [2]` walking-CTAs, "Lead Gen
381Bros", `→` heavy bullets) into X drafts. Your default lane on X
382starts closest to @itsalexvacca's operator-with-receipts register,
383with seasoning from @MichLieben's self-roast and @romanbuildsaas's
384bare-metric format. **Default voice anchors. You can swap or weight
385differently** as you find your own taste over time.
386 
387---
388 
389## Refresh the reference corpus
390 
391Run quarterly. Updates `reference-corpus.md`.
392 
393```bash
394# Requires X API v2 bearer token in env as <YOUR_X_BEARER_TOKEN>
395# e.g. export X_BEARER_TOKEN=AAAA...
396 
397# user IDs (cached from initial setup):
398# romanbuildsaas: 1893653481858433024
399# MichLieben: 512156315
400# itsalexvacca: 859850213015597056
401 
402for uid in 1893653481858433024 512156315 859850213015597056; do
403 curl -s "https://api.twitter.com/2/users/${uid}/tweets?max_results=100&tweet.fields=public_metrics,created_at&exclude=retweets,replies" \
404 -H "Authorization: Bearer ${X_BEARER_TOKEN}" \
405 -o /tmp/x_${uid}.json
406done
407```
408 
409Then sort by `like_count + 3*retweet_count + 2*reply_count + 3*quote_count`,
410pick top 15 per creator (filter URL-only tweets), and overwrite
411`reference-corpus.md` keeping the same shape.
412 

Discussion

Alternatives

STEP 0: STALE-CLONE SELF-CHECK — RUN BEFORE READING BELOWResearch what people actually say about any topic in the last 30 days. Pulls posts and engagement from Reddit, X, YouTube, TikTok, Hacker News, Polymarket, GitHub, and the web. Includes a doctor health check to diagnose broken or missing sources.Marketing · MITApifyScrapes social platforms, business data, and e-commerce via Apify actors — Instagram, LinkedIn, TikTok, YouTube, Facebook, Google Maps, Amazon, and web crawls — filtering in code. USE WHEN scrape Instagram, scrape LinkedIn, scrape TikTok, scrape YouTube, scrape Facebook, Google Maps leads, Amazon reviews, business intelligence, multi-platform social listening, competitive analysis, lead generation, social monitoring, Apify actors, web crawl, extract contacts. NOT FOR X/Twitter account operations like posting, threads, or bookmarks (those need a dedicated X API client), 4-tier progressive scraping with proxy escalation (use BrightData), or real-Chrome bot bypass and computer use (use Interceptor).Marketing · MITrun-wechat-article-loop — 公众号长文闭环微信公众号长文增长闭环 —— 从读者问题与复刻锚选题、写出可验证的公众号长文、预览与合规检查、同步微信草稿、三重确认下受控发布,到回收阅读与转化数据并复盘。用户要求写公众号、把内容改成公众号、同步或发布微信草稿、查看公众号数据或复盘时使用。Marketing · Apache-2.0Twitter/X SkillSearch and retrieve content from Twitter/X. Get user info, tweets, replies, followers, communities, spaces, and trends via twitterapi.io. Use when user mentions Twitter, X, or tweets.Marketing · Apache-2.0